List of usage examples for android.database Cursor isAfterLast
boolean isAfterLast();
From source file:com.nadmm.airports.afd.AirportDetailsFragment.java
protected void showAwosDetails(Cursor[] result) { LinearLayout layout = (LinearLayout) findViewById(R.id.detail_awos_layout); Cursor awos1 = result[7]; if (awos1.moveToFirst()) { do {/*from w w w .ja v a 2s. c o m*/ if (awos1.getPosition() == MAX_WX_STATIONS) { break; } String icaoCode = awos1.getString(awos1.getColumnIndex(Wxs.STATION_ID)); String sensorId = awos1.getString(awos1.getColumnIndex(Awos1.WX_SENSOR_IDENT)); if (icaoCode == null || icaoCode.isEmpty()) { icaoCode = "K" + sensorId; } String type = awos1.getString(awos1.getColumnIndex(Awos1.WX_SENSOR_TYPE)); String freq = awos1.getString(awos1.getColumnIndex(Awos1.STATION_FREQUENCY)); if (freq == null || freq.isEmpty()) { freq = awos1.getString(awos1.getColumnIndex(Awos1.SECOND_STATION_FREQUENCY)); } String phone = awos1.getString(awos1.getColumnIndex(Awos1.STATION_PHONE_NUMBER)); String name = awos1.getString(awos1.getColumnIndex(Wxs.STATION_NAME)); float distance = awos1.getFloat(awos1.getColumnIndex("DISTANCE")); float bearing = awos1.getFloat(awos1.getColumnIndex("BEARING")); final Bundle extras = new Bundle(); extras.putString(NoaaService.STATION_ID, icaoCode); extras.putString(Awos1.WX_SENSOR_IDENT, sensorId); Runnable runnable = new Runnable() { @Override public void run() { cacheMetars(); Intent intent = new Intent(getActivity(), WxDetailActivity.class); intent.putExtras(extras); startActivity(intent); } }; addAwosRow(layout, icaoCode, name, type, freq, phone, distance, bearing, runnable); } while (awos1.moveToNext()); if (!awos1.isAfterLast()) { Intent intent = new Intent(getActivity(), NearbyWxActivity.class); intent.putExtra(LocationColumns.LOCATION, mLocation); intent.putExtra(LocationColumns.RADIUS, mRadius); addClickableRow(layout, "More...", intent); } } else { addRow(layout, "No Wx stations found nearby."); } }
From source file:cm.aptoide.pt.MainActivity.java
void updateAll() { new Thread(new Runnable() { @Override/*www .j a va2s . c o m*/ public void run() { Cursor c = db.getUpdates(order); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { ViewApk apk = db.getApk(c.getLong(0), Category.INFOXML); try { ViewCache cache = new ViewCache(apk.hashCode(), apk.getMd5(), apk.getApkid(), apk.getVername()); ViewDownloadManagement download = new ViewDownloadManagement(apk.getPath(), apk, cache, db.getServer(apk.getRepo_id(), false).getLogin(), null); serviceDownloadManager.callStartDownload(download); Thread.sleep(1000); } catch (RemoteException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } c.close(); } }).start(); }
From source file:cm.aptoide.pt.MainActivity.java
protected void generateXML() { System.out.println("Generating servers.xml"); File newxmlfile = new File(Environment.getExternalStorageDirectory() + "/.aptoide/servers.xml"); try {/* w w w.ja v a 2 s . co m*/ newxmlfile.createNewFile(); } catch (IOException e) { Log.e("IOException", "exception in createNewFile() method"); } FileOutputStream fileos = null; try { fileos = new FileOutputStream(newxmlfile); } catch (FileNotFoundException e) { Log.e("FileNotFoundException", "can't create FileOutputStream"); } XmlSerializer serializer = Xml.newSerializer(); try { serializer.setOutput(fileos, "UTF-8"); serializer.startDocument(null, Boolean.valueOf(true)); serializer.startTag(null, "myapp"); Cursor c = db.getStores(false); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { serializer.startTag(null, "newserver"); serializer.startTag(null, "server"); serializer.text(c.getString(1)); serializer.endTag(null, "server"); serializer.endTag(null, "newserver"); } c.close(); serializer.endTag(null, "myapp"); serializer.endDocument(); serializer.flush(); fileos.close(); } catch (Exception e) { Log.e("Exception", "error occurred while creating xml file"); } }
From source file:org.totschnig.myexpenses.activity.ExpenseEdit.java
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (data == null) { return;/*from ww w . jav a 2s.c o m*/ } int id = loader.getId(); switch (id) { case METHODS_CURSOR: mMethodsCursor = data; View methodContainer = findViewById(R.id.MethodRow); if (mMethodsAdapter == null || !data.moveToFirst()) { methodContainer.setVisibility(View.GONE); } else { methodContainer.setVisibility(View.VISIBLE); MatrixCursor extras = new MatrixCursor(new String[] { KEY_ROWID, KEY_LABEL, KEY_IS_NUMBERED }); extras.addRow(new String[] { "0", "- - - -", "0" }); mMethodsAdapter.swapCursor(new MergeCursor(new Cursor[] { extras, data })); if (mSavedInstance) { mTransaction.methodId = mMethodId; } if (mTransaction.methodId != null) { while (data.isAfterLast() == false) { if (data.getLong(data.getColumnIndex(KEY_ROWID)) == mTransaction.methodId) { mMethodSpinner.setSelection(data.getPosition() + 1); break; } data.moveToNext(); } } else { mMethodSpinner.setSelection(0); } } break; case ACCOUNTS_CURSOR: mAccountsAdapter.swapCursor(data); mAccounts = new Account[data.getCount()]; if (mSavedInstance) { mTransaction.accountId = mAccountId; mTransaction.transfer_account = mTransferAccountId; } data.moveToFirst(); boolean selectionSet = false; String currencyExtra = getIntent().getStringExtra(KEY_CURRENCY); while (data.isAfterLast() == false) { int position = data.getPosition(); Account a = Account.fromCacheOrFromCursor(data); mAccounts[position] = a; if (!selectionSet && (a.currency.getCurrencyCode().equals(currencyExtra) || (currencyExtra == null && a.getId().equals(mTransaction.accountId)))) { mAccountSpinner.setSelection(position); setAccountLabel(a); selectionSet = true; } data.moveToNext(); } //if the accountId we have been passed does not exist, we select the first entry if (mAccountSpinner.getSelectedItemPosition() == android.widget.AdapterView.INVALID_POSITION) { mAccountSpinner.setSelection(0); mTransaction.accountId = mAccounts[0].getId(); setAccountLabel(mAccounts[0]); } if (mOperationType == MyExpenses.TYPE_TRANSFER) { mTransferAccountCursor = new FilterCursorWrapper(data); int selectedPosition = setTransferAccountFilterMap(); mTransferAccountsAdapter.swapCursor(mTransferAccountCursor); mTransferAccountSpinner.setSelection(selectedPosition); mTransaction.transfer_account = mTransferAccountSpinner.getSelectedItemId(); configureTransferInput(); if (!mNewInstance && !(mTransaction instanceof Template)) { isProcessingLinkedAmountInputs = true; mTransferAmountText.setAmount(mTransaction.getTransferAmount().getAmountMajor().abs()); updateExchangeRates(); isProcessingLinkedAmountInputs = false; } } else { //the methods cursor is based on the current account, //hence it is loaded only after the accounts cursor is loaded if (!(mTransaction instanceof SplitPartCategory)) { mManager.initLoader(METHODS_CURSOR, null, this); } } mTypeButton.setEnabled(true); configureType(); configureStatusSpinner(); if (mIsResumed) setupListeners(); break; case LAST_EXCHANGE_CURSOR: if (data.moveToFirst()) { final Currency currency1 = getCurrentAccount().currency; final Currency currency2 = Account .getInstanceFromDb(mTransferAccountSpinner.getSelectedItemId()).currency; if (currency1.getCurrencyCode().equals(data.getString(0)) && currency2.getCurrencyCode().equals(data.getString(1))) { BigDecimal amount = new Money(currency1, data.getLong(2)).getAmountMajor(); BigDecimal transferAmount = new Money(currency2, data.getLong(3)).getAmountMajor(); BigDecimal exchangeRate = amount.compareTo(nullValue) != 0 ? transferAmount.divide(amount, EXCHANGE_RATE_FRACTION_DIGITS, RoundingMode.DOWN) : nullValue; if (exchangeRate.compareTo(nullValue) != 0) { mExchangeRate1Text.setAmount(exchangeRate); } } } } }
From source file:cm.aptoide.pt.MainActivity.java
public void getAllRepoStatus() { final HashMap<String, Long> serversToParse = new HashMap<String, Long>(); new Thread(new Runnable() { @Override/*from w ww .ja v a 2s.com*/ public void run() { String repos = ""; String hashes = ""; Cursor cursor = db.getStores(false); int i = 0; for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { String repo; if (i > 0) { repos = repos + ","; hashes = hashes + ","; } repo = cursor.getString(1); repo = RepoUtils.split(repo); repos = repos + repo; hashes = hashes + cursor.getString(2); i++; serversToParse.put(repo, cursor.getLong(0)); } cursor.close(); if (!serversToParse.isEmpty()) { String url = "http://webservices.aptoide.com/webservices/listRepositoryChange/" + repos + "/" + hashes + "/json"; System.out.println(url); try { HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.connect(); int rc = connection.getResponseCode(); if (rc == 200) { NetworkUtils utils = new NetworkUtils(); JSONObject json = utils.getJsonObject(url, mContext); JSONArray array = json.getJSONArray("listing"); for (int o = 0; o != array.length(); o++) { boolean parse = Boolean .parseBoolean(array.getJSONObject(o).getString("hasupdates")); long id = serversToParse.get(array.getJSONObject(o).getString("repo")); Server server = db.getServer(id, false); if (parse) { service.parseServer(db, server); } else { service.parseTop(db, server); service.parseLatest(db, server); service.addStoreInfo(db, server); } } } connection.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { if (!ApplicationAptoide.MULTIPLESTORES) { getApplicationContext().sendBroadcast(new Intent("PARSE_FAILED")); } e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } } }).start(); }
From source file:com.piusvelte.sonet.core.SonetNotifications.java
@Override public boolean onOptionsItemSelected(MenuItem item) { final ProgressDialog loadingDialog = new ProgressDialog(this); final AsyncTask<Integer, String, Boolean> asyncTask = new AsyncTask<Integer, String, Boolean>() { @Override//from w ww . j ava 2s. c om protected Boolean doInBackground(Integer... arg0) { if (arg0[0] == R.id.menu_notifications_refresh) { // select all accounts with notifications set Cursor widgets = getContentResolver().query( Widgets_settings.getDistinctContentUri(SonetNotifications.this), new String[] { Widgets.ACCOUNT }, Widgets.ACCOUNT + "!=-1 and (" + Widgets.LIGHTS + "=1 or " + Widgets.VIBRATE + "=1 or " + Widgets.SOUND + "=1)", null, null); if (widgets.moveToFirst()) { mSonetCrypto = SonetCrypto.getInstance(getApplicationContext()); HttpClient httpClient = SonetHttpClient.getThreadSafeClient(getApplicationContext()); while (!widgets.isAfterLast()) { long accountId = widgets.getLong(0); ArrayList<String> notificationSids = new ArrayList<String>(); Cursor account = getContentResolver().query( Accounts.getContentUri(SonetNotifications.this), new String[] { Accounts.TOKEN, Accounts.SECRET, Accounts.SERVICE, Accounts.SID }, Accounts._ID + "=?", new String[] { Long.toString(accountId) }, null); if (account.moveToFirst()) { // for each account, for each notification, check for updates // if there are no updates past 24hrs and cleared, delete String token = mSonetCrypto.Decrypt(account.getString(0)); String secret = mSonetCrypto.Decrypt(account.getString(1)); int service = account.getInt(2); String accountEsid = mSonetCrypto.Decrypt(account.getString(3)); mSimpleDateFormat = null; if (service == TWITTER) { Cursor currentNotifications = getContentResolver().query( Notifications.getContentUri(SonetNotifications.this), new String[] { Notifications.SID }, Notifications.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, null); // loop over notifications if (currentNotifications.moveToFirst()) { // store sids, to avoid duplicates when requesting the latest feed String sid = mSonetCrypto.Decrypt(currentNotifications.getString(0)); if (!notificationSids.contains(sid)) { notificationSids.add(sid); } } currentNotifications.close(); // limit to newest status SonetOAuth sonetOAuth = new SonetOAuth(TWITTER_KEY, TWITTER_SECRET, token, secret); String last_sid = null; Cursor last_status = getContentResolver().query( Statuses.getContentUri(SonetNotifications.this), new String[] { Statuses.SID }, Statuses.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, Statuses.CREATED + " ASC LIMIT 1"); if (last_status.moveToFirst()) { last_sid = mSonetCrypto.Decrypt(last_status.getString(0)); } last_status.close(); // get all mentions since the oldest status for this account String response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest( new HttpGet(String.format(TWITTER_MENTIONS, TWITTER_BASE_URL, last_sid != null ? String.format(TWITTER_SINCE_ID, last_sid) : "")))); if (response != null) { try { JSONArray comments = new JSONArray(response); for (int i = 0, i2 = comments.length(); i < i2; i++) { JSONObject comment = comments.getJSONObject(i); JSONObject user = comment.getJSONObject(Suser); if (!user.getString(Sid).equals(accountEsid) && !notificationSids.contains(comment.getString(Sid))) { String friend = user.getString(Sname); addNotification(comment.getString(Sid), user.getString(Sid), friend, comment.getString("text"), parseDate(comment.getString("created_at"), TWITTER_DATE_FORMAT), accountId, friend + " mentioned you on Twitter"); } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } } else if (service == IDENTICA) { Cursor currentNotifications = getContentResolver().query( Notifications.getContentUri(SonetNotifications.this), new String[] { Notifications.SID }, Notifications.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, null); // loop over notifications if (currentNotifications.moveToFirst()) { // store sids, to avoid duplicates when requesting the latest feed String sid = mSonetCrypto.Decrypt(currentNotifications.getString(0)); if (!notificationSids.contains(sid)) { notificationSids.add(sid); } } currentNotifications.close(); // limit to newest status SonetOAuth sonetOAuth = new SonetOAuth(IDENTICA_KEY, IDENTICA_SECRET, token, secret); String last_sid = null; Cursor last_status = getContentResolver().query( Statuses.getContentUri(SonetNotifications.this), new String[] { Statuses.SID }, Statuses.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, Statuses.CREATED + " ASC LIMIT 1"); if (last_status.moveToFirst()) { last_sid = mSonetCrypto.Decrypt(last_status.getString(0)); } last_status.close(); // get all mentions since the oldest status for this account String response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest( new HttpGet(String.format(IDENTICA_MENTIONS, IDENTICA_BASE_URL, last_sid != null ? String.format(IDENTICA_SINCE_ID, last_sid) : "")))); if (response != null) { try { JSONArray comments = new JSONArray(response); for (int i = 0, i2 = comments.length(); i < i2; i++) { JSONObject comment = comments.getJSONObject(i); JSONObject user = comment.getJSONObject(Suser); if (!user.getString(Sid).equals(accountEsid) && !notificationSids.contains(comment.getString(Sid))) { String friend = user.getString(Sname); addNotification(comment.getString(Sid), user.getString(Sid), friend, comment.getString("text"), parseDate(comment.getString("created_at"), TWITTER_DATE_FORMAT), accountId, friend + " mentioned you on Identi.ca"); } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } } else { Cursor currentNotifications = getContentResolver().query( Notifications.getContentUri(SonetNotifications.this), new String[] { Notifications._ID, Notifications.SID, Notifications.UPDATED, Notifications.CLEARED, Notifications.ESID }, Notifications.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, null); if (currentNotifications.moveToFirst()) { String response; SonetOAuth sonetOAuth; switch (service) { case FACEBOOK: // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet( String.format(FACEBOOK_COMMENTS, FACEBOOK_BASE_URL, sid, Saccess_token, token)))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONArray comments = new JSONObject(response) .getJSONArray(Sdata); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = comment.getLong(Screated_time) * 1000; if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject from = comment.getJSONObject(Sfrom); if (accountEsid.equals(from.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), from.getString(Sname))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), from.getString(Sname) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long .toString(notificationId) }); } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(FACEBOOK_HOME, FACEBOOK_BASE_URL, Saccess_token, token)))) != null) { try { JSONArray jarr = new JSONObject(response).getJSONArray(Sdata); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(Sid); // if already notified, ignore if (!notificationSids.contains(sid)) { // only parse status types, not photo, video or link if (o.has(Stype) && o.has(Sfrom)) { JSONObject f = o.getJSONObject(Sfrom); if (f.has(Sname) && f.has(Sid)) { String notification = null; String esid = f.getString(Sid); String friend = f.getString(Sname); if (o.has(Sto)) { // handle wall messages from one friend to another JSONObject t = o.getJSONObject(Sto); if (t.has(Sdata)) { JSONObject n = t.getJSONArray(Sdata) .getJSONObject(0); if (n.has(Sname)) { if (n.has(Sid) && (n .getString(Sid) .equals(accountEsid))) { notification = String .format(getString( R.string.friendcommented), friend); } } } } int commentCount = 0; if (o.has(Scomments)) { JSONObject jo = o .getJSONObject(Scomments); if (jo.has(Sdata)) { JSONArray comments = jo .getJSONArray(Sdata); commentCount = comments.length(); // notifications if ((sid != null) && (commentCount > 0)) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals( accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Sfrom)) { JSONObject c4 = c3 .getJSONObject( Sfrom); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( Sname)); } } } } } } if (notification != null) { String message = o.has(Smessage) ? o.getString(Smessage) : null; if (!o.getString(Stype).equals(Sstatus) && o.has(Slink)) { message = message == null ? "[" + o.getString(Stype) + "]" : "[" + o.getString(Stype) + "]"; } // new notification addNotification(sid, esid, friend, message, o.getLong(Screated_time) * 1000, accountId, notification); } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case MYSPACE: sonetOAuth = new SonetOAuth(MYSPACE_KEY, MYSPACE_SECRET, token, secret); // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; String esid = mSonetCrypto .Decrypt(currentNotifications.getString(4)); // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest(new HttpGet( String.format(MYSPACE_URL_STATUSMOODCOMMENTS, MYSPACE_BASE_URL, esid, sid))))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONArray comments = new JSONObject(response) .getJSONArray(Sentry); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = parseDate( comment.getString(SpostedDate), MYSPACE_DATE_FORMAT); if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject author = comment .getJSONObject(Sauthor); if (accountEsid.equals(author.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), comment.getString( SdisplayName))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), comment.getString( SdisplayName) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long .toString(notificationId) }); } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed if ((response = SonetHttpClient .httpResponse(httpClient, sonetOAuth.getSignedRequest( new HttpGet(String.format(MYSPACE_HISTORY, MYSPACE_BASE_URL))))) != null) { try { JSONArray jarr = new JSONObject(response).getJSONArray(Sentry); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(SstatusId); // if already notified, ignore if (!notificationSids.contains(sid)) { if (o.has(Sauthor) && o.has(SrecentComments)) { JSONObject f = o.getJSONObject(Sauthor); if (f.has(SdisplayName) && f.has(Sid)) { String notification = null; String esid = f.getString(Sid); String friend = f.getString(SdisplayName); JSONArray comments = o .getJSONArray(SrecentComments); int commentCount = comments.length(); // notifications if ((sid != null) && (commentCount > 0)) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals(accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Sauthor)) { JSONObject c4 = c3 .getJSONObject(Sauthor); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( SdisplayName)); } } } } if (notification != null) { // new notification addNotification(sid, esid, friend, o.getString(Sstatus), parseDate(o.getString( "moodStatusLastUpdated"), MYSPACE_DATE_FORMAT), accountId, notification); } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case FOURSQUARE: // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(FOURSQUARE_GET_CHECKIN, FOURSQUARE_BASE_URL, sid, token)))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONArray comments = new JSONObject(response) .getJSONObject(Sresponse).getJSONObject(Scheckin) .getJSONObject(Scomments).getJSONArray(Sitems); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = comment.getLong(ScreatedAt) * 1000; if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject user = comment.getJSONObject(Suser); if (accountEsid.equals(user.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), user.getString(SfirstName) + " " + user.getString( SlastName))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), user.getString(SfirstName) + " " + user.getString( SlastName) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long .toString(notificationId) }); } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(FOURSQUARE_CHECKINS, FOURSQUARE_BASE_URL, token)))) != null) { try { JSONArray jarr = new JSONObject(response) .getJSONObject(Sresponse).getJSONArray(Srecent); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(Sid); // if already notified, ignore if (!notificationSids.contains(sid)) { if (o.has(Suser) && o.has(Scomments)) { JSONObject f = o.getJSONObject(Suser); if (f.has(SfirstName) && f.has(SlastName) && f.has(Sid)) { String notification = null; String esid = f.getString(Sid); String friend = f.getString(SfirstName) + " " + f.getString(SlastName); JSONArray comments = o .getJSONArray(Scomments); int commentCount = comments.length(); // notifications if (commentCount > 0) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals(accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Suser)) { JSONObject c4 = c3 .getJSONObject(Suser); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( SfirstName) + " " + c4.getString( SlastName)); } } } } if (notification != null) { String message = ""; if (o.has(Sshout)) { message = o.getString(Sshout) + "\n"; } if (o.has(Svenue)) { JSONObject venue = o .getJSONObject(Svenue); if (venue.has(Sname)) { message += "@" + venue .getString(Sname); } } // new notification addNotification(sid, esid, friend, message, o.getLong(ScreatedAt) * 1000, accountId, notification); } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case LINKEDIN: sonetOAuth = new SonetOAuth(LINKEDIN_KEY, LINKEDIN_SECRET, token, secret); // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications HttpGet httpGet = new HttpGet(String .format(LINKEDIN_UPDATE_COMMENTS, LINKEDIN_BASE_URL, sid)); for (String[] header : LINKEDIN_HEADERS) httpGet.setHeader(header[0], header[1]); if ((response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest(httpGet))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONObject jsonResponse = new JSONObject(response); if (jsonResponse.has(S_total) && (jsonResponse.getInt(S_total) != 0)) { JSONArray comments = jsonResponse.getJSONArray(Svalues); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = comment.getLong(Stimestamp); if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject person = comment .getJSONObject(Sperson); if (accountEsid .equals(person.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), person.getString( SfirstName) + " " + person.getString( SlastName))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), person.getString( SfirstName) + " " + person.getString( SlastName) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long.toString( notificationId) }); } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed HttpGet httpGet = new HttpGet( String.format(LINKEDIN_UPDATES, LINKEDIN_BASE_URL)); for (String[] header : LINKEDIN_HEADERS) { httpGet.setHeader(header[0], header[1]); } if ((response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest(httpGet))) != null) { try { JSONArray jarr = new JSONObject(response).getJSONArray(Svalues); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(SupdateKey); // if already notified, ignore if (!notificationSids.contains(sid)) { String updateType = o.getString(SupdateType); JSONObject updateContent = o .getJSONObject(SupdateContent); if (LinkedIn_UpdateTypes.contains(updateType) && updateContent.has(Sperson)) { JSONObject f = updateContent .getJSONObject(Sperson); if (f.has(SfirstName) && f.has(SlastName) && f.has(Sid) && o.has(SupdateComments)) { JSONObject updateComments = o .getJSONObject(SupdateComments); if (updateComments.has(Svalues)) { String notification = null; String esid = f.getString(Sid); JSONArray comments = updateComments .getJSONArray(Svalues); int commentCount = comments.length(); // notifications if (commentCount > 0) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals(accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Sperson)) { JSONObject c4 = c3 .getJSONObject( Sperson); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( SfirstName) + " " + c4.getString( SlastName)); } } } } if (notification != null) { String update = LinkedIn_UpdateTypes .getMessage(updateType); if (LinkedIn_UpdateTypes.APPS.name() .equals(updateType)) { if (f.has(SpersonActivities)) { JSONObject personActivities = f .getJSONObject( SpersonActivities); if (personActivities .has(Svalues)) { JSONArray updates = personActivities .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { update += updates .getJSONObject( u) .getString( Sbody); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.CONN .name() .equals(updateType)) { if (f.has(Sconnections)) { JSONObject connections = f .getJSONObject( Sconnections); if (connections .has(Svalues)) { JSONArray updates = connections .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { update += updates .getJSONObject( u) .getString( SfirstName) + " " + updates .getJSONObject( u) .getString( SlastName); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.JOBP .name() .equals(updateType)) { if (updateContent.has(Sjob) && updateContent .getJSONObject( Sjob) .has(Sposition) && updateContent .getJSONObject( Sjob) .getJSONObject( Sposition) .has(Stitle)) update += updateContent .getJSONObject(Sjob) .getJSONObject( Sposition) .getString(Stitle); } else if (LinkedIn_UpdateTypes.JGRP .name() .equals(updateType)) { if (f.has(SmemberGroups)) { JSONObject memberGroups = f .getJSONObject( SmemberGroups); if (memberGroups .has(Svalues)) { JSONArray updates = memberGroups .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { update += updates .getJSONObject( u) .getString( Sname); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.PREC .name() .equals(updateType)) { if (f.has( SrecommendationsGiven)) { JSONObject recommendationsGiven = f .getJSONObject( SrecommendationsGiven); if (recommendationsGiven .has(Svalues)) { JSONArray updates = recommendationsGiven .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { JSONObject recommendation = updates .getJSONObject( u); JSONObject recommendee = recommendation .getJSONObject( Srecommendee); if (recommendee.has( SfirstName)) update += recommendee .getString( SfirstName); if (recommendee.has( SlastName)) update += recommendee .getString( SlastName); if (recommendation .has(SrecommendationSnippet)) update += ":" + recommendation .getString( SrecommendationSnippet); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.SHAR .name().equals(updateType) && f.has(ScurrentShare)) { JSONObject currentShare = f .getJSONObject( ScurrentShare); if (currentShare.has(Scomment)) update = currentShare .getString( Scomment); } // new notification addNotification(sid, esid, f.getString(SfirstName) + " " + f.getString( SlastName), update, o.getLong(Stimestamp), accountId, notification); } } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case GOOGLEPLUS: // get new access token, need different request here HttpPost httpPost = new HttpPost(GOOGLE_ACCESS); List<NameValuePair> httpParams = new ArrayList<NameValuePair>(); httpParams.add(new BasicNameValuePair("client_id", GOOGLE_CLIENTID)); httpParams.add( new BasicNameValuePair("client_secret", GOOGLE_CLIENTSECRET)); httpParams.add(new BasicNameValuePair("refresh_token", token)); httpParams.add(new BasicNameValuePair("grant_type", "refresh_token")); try { httpPost.setEntity(new UrlEncodedFormEntity(httpParams)); if ((response = SonetHttpClient.httpResponse(httpClient, httpPost)) != null) { JSONObject j = new JSONObject(response); if (j.has(Saccess_token)) { String access_token = j.getString(Saccess_token); while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(GOOGLEPLUS_ACTIVITY, GOOGLEPLUS_BASE_URL, sid, access_token)))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONObject item = new JSONObject(response); if (item.has(Sobject)) { JSONObject object = item .getJSONObject(Sobject); if (object.has(Sreplies)) { int commentCount = 0; JSONObject replies = object .getJSONObject(Sreplies); if (replies.has(StotalItems)) { //TODO: notifications } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // get new feed if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(GOOGLEPLUS_ACTIVITIES, GOOGLEPLUS_BASE_URL, "me", "public", 20, access_token)))) != null) { JSONObject r = new JSONObject(response); if (r.has(Sitems)) { JSONArray items = r.getJSONArray(Sitems); for (int i1 = 0, i2 = items .length(); i1 < i2; i1++) { JSONObject item = items.getJSONObject(i1); if (item.has(Sactor) && item.has(Sobject)) { JSONObject actor = item .getJSONObject(Sactor); JSONObject object = item .getJSONObject(Sobject); if (item.has(Sid) && actor.has(Sid) && actor.has(SdisplayName) && item.has(Spublished) && object.has(Sreplies) && object.has(SoriginalContent)) { String sid = item.getString(Sid); String esid = actor.getString(Sid); String friend = actor .getString(SdisplayName); String originalContent = object .getString(SoriginalContent); if ((originalContent == null) || (originalContent .length() == 0)) { originalContent = object .getString(Scontent); } String photo = null; if (actor.has(Simage)) { JSONObject image = actor .getJSONObject(Simage); if (image.has(Surl)) { photo = image.getString(Surl); } } long date = parseDate( item.getString(Spublished), GOOGLEPLUS_DATE_FORMAT); int commentCount = 0; JSONObject replies = object .getJSONObject(Sreplies); String notification = null; if (replies.has(StotalItems)) { Log.d(TAG, Sreplies + ":" + replies.toString()); commentCount = replies .getInt(StotalItems); } if (notification != null) { // new notification addNotification(sid, esid, friend, originalContent, date, accountId, notification); } } } } } } } } } catch (UnsupportedEncodingException e) { Log.e(TAG, e.toString()); } catch (JSONException e) { Log.e(TAG, e.toString()); } break; } } currentNotifications.close(); } // remove old notifications getContentResolver().delete(Notifications.getContentUri(SonetNotifications.this), Notifications.CLEARED + "=1 and " + Notifications.ACCOUNT + "=? and " + Notifications.CREATED + "<?", new String[] { Long.toString(accountId), Long.toString(System.currentTimeMillis() - 86400000) }); } account.close(); widgets.moveToNext(); } } else { publishProgress("No notifications have been set up on any accounts."); } widgets.close(); return false; } else if (arg0[0] == R.id.menu_notifications_clear_all) { // clear all notifications ContentValues values = new ContentValues(); values.put(Notifications.CLEARED, 1); SonetNotifications.this.getContentResolver() .update(Notifications.getContentUri(SonetNotifications.this), values, null, null); return true; } return false; } @Override protected void onProgressUpdate(String... messages) { (Toast.makeText(SonetNotifications.this, messages[0], Toast.LENGTH_LONG)).show(); } @Override protected void onPostExecute(Boolean finish) { if (loadingDialog.isShowing()) { loadingDialog.dismiss(); } if (finish) { SonetNotifications.this.finish(); } } private void addNotification(String sid, String esid, String friend, String message, long created, long accountId, String notification) { ContentValues values = new ContentValues(); values.put(Notifications.SID, sid); values.put(Notifications.ESID, esid); values.put(Notifications.FRIEND, friend); values.put(Notifications.MESSAGE, message); values.put(Notifications.CREATED, created); values.put(Notifications.ACCOUNT, accountId); values.put(Notifications.NOTIFICATION, notification); values.put(Notifications.CLEARED, 0); values.put(Notifications.UPDATED, created); getContentResolver().insert(Notifications.getContentUri(SonetNotifications.this), values); } private long parseDate(String date, String format) { if (date != null) { // hack for the literal 'Z' if (date.substring(date.length() - 1).equals("Z")) { date = date.substring(0, date.length() - 2) + "+0000"; } Date created = null; if (format != null) { if (mSimpleDateFormat == null) { mSimpleDateFormat = new SimpleDateFormat(format, Locale.ENGLISH); // all dates should be GMT/UTC mSimpleDateFormat.setTimeZone(sTimeZone); } try { created = mSimpleDateFormat.parse(date); return created.getTime(); } catch (ParseException e) { Log.e(TAG, e.toString()); } } else { // attempt to parse RSS date if (mSimpleDateFormat != null) { try { created = mSimpleDateFormat.parse(date); return created.getTime(); } catch (ParseException e) { Log.e(TAG, e.toString()); } } for (String rfc822 : sRFC822) { mSimpleDateFormat = new SimpleDateFormat(rfc822, Locale.ENGLISH); mSimpleDateFormat.setTimeZone(sTimeZone); try { if ((created = mSimpleDateFormat.parse(date)) != null) { return created.getTime(); } } catch (ParseException e) { Log.e(TAG, e.toString()); } } } } return System.currentTimeMillis(); } }; loadingDialog.setMessage(getString(R.string.loading)); loadingDialog.setCancelable(true); loadingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (!asyncTask.isCancelled()) asyncTask.cancel(true); } }); loadingDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, getString(android.R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); loadingDialog.show(); asyncTask.execute(item.getItemId()); return true; // return super.onOptionsItemSelected(item); }
From source file:com.piusvelte.sonet.SonetNotifications.java
@Override public boolean onOptionsItemSelected(MenuItem item) { final ProgressDialog loadingDialog = new ProgressDialog(this); final AsyncTask<Integer, String, Boolean> asyncTask = new AsyncTask<Integer, String, Boolean>() { @Override/*from w w w.ja v a2 s . c o m*/ protected Boolean doInBackground(Integer... arg0) { if (arg0[0] == R.id.menu_notifications_refresh) { // select all accounts with notifications set Cursor widgets = getContentResolver().query( Widgets_settings.getDistinctContentUri(SonetNotifications.this), new String[] { Widgets.ACCOUNT }, Widgets.ACCOUNT + "!=-1 and (" + Widgets.LIGHTS + "=1 or " + Widgets.VIBRATE + "=1 or " + Widgets.SOUND + "=1)", null, null); if (widgets.moveToFirst()) { mSonetCrypto = SonetCrypto.getInstance(getApplicationContext()); HttpClient httpClient = SonetHttpClient.getThreadSafeClient(getApplicationContext()); while (!widgets.isAfterLast()) { long accountId = widgets.getLong(0); ArrayList<String> notificationSids = new ArrayList<String>(); Cursor account = getContentResolver().query( Accounts.getContentUri(SonetNotifications.this), new String[] { Accounts.TOKEN, Accounts.SECRET, Accounts.SERVICE, Accounts.SID }, Accounts._ID + "=?", new String[] { Long.toString(accountId) }, null); if (account.moveToFirst()) { // for each account, for each notification, check for updates // if there are no updates past 24hrs and cleared, delete String token = mSonetCrypto.Decrypt(account.getString(0)); String secret = mSonetCrypto.Decrypt(account.getString(1)); int service = account.getInt(2); String accountEsid = mSonetCrypto.Decrypt(account.getString(3)); mSimpleDateFormat = null; if (service == TWITTER) { Cursor currentNotifications = getContentResolver().query( Notifications.getContentUri(SonetNotifications.this), new String[] { Notifications.SID }, Notifications.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, null); // loop over notifications if (currentNotifications.moveToFirst()) { // store sids, to avoid duplicates when requesting the latest feed String sid = mSonetCrypto.Decrypt(currentNotifications.getString(0)); if (!notificationSids.contains(sid)) { notificationSids.add(sid); } } currentNotifications.close(); // limit to newest status SonetOAuth sonetOAuth = new SonetOAuth(BuildConfig.TWITTER_KEY, BuildConfig.TWITTER_SECRET, token, secret); String last_sid = null; Cursor last_status = getContentResolver().query( Statuses.getContentUri(SonetNotifications.this), new String[] { Statuses.SID }, Statuses.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, Statuses.CREATED + " ASC LIMIT 1"); if (last_status.moveToFirst()) { last_sid = mSonetCrypto.Decrypt(last_status.getString(0)); } last_status.close(); // get all mentions since the oldest status for this account String response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest( new HttpGet(String.format(TWITTER_MENTIONS, TWITTER_BASE_URL, last_sid != null ? String.format(TWITTER_SINCE_ID, last_sid) : "")))); if (response != null) { try { JSONArray comments = new JSONArray(response); for (int i = 0, i2 = comments.length(); i < i2; i++) { JSONObject comment = comments.getJSONObject(i); JSONObject user = comment.getJSONObject(Suser); if (!user.getString(Sid).equals(accountEsid) && !notificationSids.contains(comment.getString(Sid))) { String friend = user.getString(Sname); addNotification(comment.getString(Sid), user.getString(Sid), friend, comment.getString("text"), parseDate(comment.getString("created_at"), TWITTER_DATE_FORMAT), accountId, friend + " mentioned you on Twitter"); } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } } else if (service == IDENTICA) { Cursor currentNotifications = getContentResolver().query( Notifications.getContentUri(SonetNotifications.this), new String[] { Notifications.SID }, Notifications.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, null); // loop over notifications if (currentNotifications.moveToFirst()) { // store sids, to avoid duplicates when requesting the latest feed String sid = mSonetCrypto.Decrypt(currentNotifications.getString(0)); if (!notificationSids.contains(sid)) { notificationSids.add(sid); } } currentNotifications.close(); // limit to newest status SonetOAuth sonetOAuth = new SonetOAuth(BuildConfig.IDENTICA_KEY, BuildConfig.IDENTICA_SECRET, token, secret); String last_sid = null; Cursor last_status = getContentResolver().query( Statuses.getContentUri(SonetNotifications.this), new String[] { Statuses.SID }, Statuses.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, Statuses.CREATED + " ASC LIMIT 1"); if (last_status.moveToFirst()) { last_sid = mSonetCrypto.Decrypt(last_status.getString(0)); } last_status.close(); // get all mentions since the oldest status for this account String response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest( new HttpGet(String.format(IDENTICA_MENTIONS, IDENTICA_BASE_URL, last_sid != null ? String.format(IDENTICA_SINCE_ID, last_sid) : "")))); if (response != null) { try { JSONArray comments = new JSONArray(response); for (int i = 0, i2 = comments.length(); i < i2; i++) { JSONObject comment = comments.getJSONObject(i); JSONObject user = comment.getJSONObject(Suser); if (!user.getString(Sid).equals(accountEsid) && !notificationSids.contains(comment.getString(Sid))) { String friend = user.getString(Sname); addNotification(comment.getString(Sid), user.getString(Sid), friend, comment.getString("text"), parseDate(comment.getString("created_at"), TWITTER_DATE_FORMAT), accountId, friend + " mentioned you on Identi.ca"); } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } } else { Cursor currentNotifications = getContentResolver().query( Notifications.getContentUri(SonetNotifications.this), new String[] { Notifications._ID, Notifications.SID, Notifications.UPDATED, Notifications.CLEARED, Notifications.ESID }, Notifications.ACCOUNT + "=?", new String[] { Long.toString(accountId) }, null); if (currentNotifications.moveToFirst()) { String response; SonetOAuth sonetOAuth; switch (service) { case FACEBOOK: // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet( String.format(FACEBOOK_COMMENTS, FACEBOOK_BASE_URL, sid, Saccess_token, token)))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONArray comments = new JSONObject(response) .getJSONArray(Sdata); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = comment.getLong(Screated_time) * 1000; if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject from = comment.getJSONObject(Sfrom); if (accountEsid.equals(from.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), from.getString(Sname))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), from.getString(Sname) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long .toString(notificationId) }); } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(FACEBOOK_HOME, FACEBOOK_BASE_URL, Saccess_token, token)))) != null) { try { JSONArray jarr = new JSONObject(response).getJSONArray(Sdata); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(Sid); // if already notified, ignore if (!notificationSids.contains(sid)) { // only parse status types, not photo, video or link if (o.has(Stype) && o.has(Sfrom)) { JSONObject f = o.getJSONObject(Sfrom); if (f.has(Sname) && f.has(Sid)) { String notification = null; String esid = f.getString(Sid); String friend = f.getString(Sname); if (o.has(Sto)) { // handle wall messages from one friend to another JSONObject t = o.getJSONObject(Sto); if (t.has(Sdata)) { JSONObject n = t.getJSONArray(Sdata) .getJSONObject(0); if (n.has(Sname)) { if (n.has(Sid) && (n .getString(Sid) .equals(accountEsid))) { notification = String .format(getString( R.string.friendcommented), friend); } } } } int commentCount = 0; if (o.has(Scomments)) { JSONObject jo = o .getJSONObject(Scomments); if (jo.has(Sdata)) { JSONArray comments = jo .getJSONArray(Sdata); commentCount = comments.length(); // notifications if ((sid != null) && (commentCount > 0)) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals( accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Sfrom)) { JSONObject c4 = c3 .getJSONObject( Sfrom); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( Sname)); } } } } } } if (notification != null) { String message = o.has(Smessage) ? o.getString(Smessage) : null; if (!o.getString(Stype).equals(Sstatus) && o.has(Slink)) { message = message == null ? "[" + o.getString(Stype) + "]" : "[" + o.getString(Stype) + "]"; } // new notification addNotification(sid, esid, friend, message, o.getLong(Screated_time) * 1000, accountId, notification); } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case MYSPACE: sonetOAuth = new SonetOAuth(BuildConfig.MYSPACE_KEY, BuildConfig.MYSPACE_SECRET, token, secret); // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; String esid = mSonetCrypto .Decrypt(currentNotifications.getString(4)); // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest(new HttpGet( String.format(MYSPACE_URL_STATUSMOODCOMMENTS, MYSPACE_BASE_URL, esid, sid))))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONArray comments = new JSONObject(response) .getJSONArray(Sentry); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = parseDate( comment.getString(SpostedDate), MYSPACE_DATE_FORMAT); if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject author = comment .getJSONObject(Sauthor); if (accountEsid.equals(author.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), comment.getString( SdisplayName))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), comment.getString( SdisplayName) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long .toString(notificationId) }); } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed if ((response = SonetHttpClient .httpResponse(httpClient, sonetOAuth.getSignedRequest( new HttpGet(String.format(MYSPACE_HISTORY, MYSPACE_BASE_URL))))) != null) { try { JSONArray jarr = new JSONObject(response).getJSONArray(Sentry); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(SstatusId); // if already notified, ignore if (!notificationSids.contains(sid)) { if (o.has(Sauthor) && o.has(SrecentComments)) { JSONObject f = o.getJSONObject(Sauthor); if (f.has(SdisplayName) && f.has(Sid)) { String notification = null; String esid = f.getString(Sid); String friend = f.getString(SdisplayName); JSONArray comments = o .getJSONArray(SrecentComments); int commentCount = comments.length(); // notifications if ((sid != null) && (commentCount > 0)) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals(accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Sauthor)) { JSONObject c4 = c3 .getJSONObject(Sauthor); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( SdisplayName)); } } } } if (notification != null) { // new notification addNotification(sid, esid, friend, o.getString(Sstatus), parseDate(o.getString( "moodStatusLastUpdated"), MYSPACE_DATE_FORMAT), accountId, notification); } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case FOURSQUARE: // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(FOURSQUARE_GET_CHECKIN, FOURSQUARE_BASE_URL, sid, token)))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONArray comments = new JSONObject(response) .getJSONObject(Sresponse).getJSONObject(Scheckin) .getJSONObject(Scomments).getJSONArray(Sitems); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = comment.getLong(ScreatedAt) * 1000; if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject user = comment.getJSONObject(Suser); if (accountEsid.equals(user.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), user.getString(SfirstName) + " " + user.getString( SlastName))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), user.getString(SfirstName) + " " + user.getString( SlastName) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long .toString(notificationId) }); } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(FOURSQUARE_CHECKINS, FOURSQUARE_BASE_URL, token)))) != null) { try { JSONArray jarr = new JSONObject(response) .getJSONObject(Sresponse).getJSONArray(Srecent); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(Sid); // if already notified, ignore if (!notificationSids.contains(sid)) { if (o.has(Suser) && o.has(Scomments)) { JSONObject f = o.getJSONObject(Suser); if (f.has(SfirstName) && f.has(SlastName) && f.has(Sid)) { String notification = null; String esid = f.getString(Sid); String friend = f.getString(SfirstName) + " " + f.getString(SlastName); JSONArray comments = o .getJSONArray(Scomments); int commentCount = comments.length(); // notifications if (commentCount > 0) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals(accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Suser)) { JSONObject c4 = c3 .getJSONObject(Suser); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( SfirstName) + " " + c4.getString( SlastName)); } } } } if (notification != null) { String message = ""; if (o.has(Sshout)) { message = o.getString(Sshout) + "\n"; } if (o.has(Svenue)) { JSONObject venue = o .getJSONObject(Svenue); if (venue.has(Sname)) { message += "@" + venue .getString(Sname); } } // new notification addNotification(sid, esid, friend, message, o.getLong(ScreatedAt) * 1000, accountId, notification); } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case LINKEDIN: sonetOAuth = new SonetOAuth(BuildConfig.LINKEDIN_KEY, BuildConfig.LINKEDIN_SECRET, token, secret); // loop over notifications while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications HttpGet httpGet = new HttpGet(String .format(LINKEDIN_UPDATE_COMMENTS, LINKEDIN_BASE_URL, sid)); for (String[] header : LINKEDIN_HEADERS) httpGet.setHeader(header[0], header[1]); if ((response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest(httpGet))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONObject jsonResponse = new JSONObject(response); if (jsonResponse.has(S_total) && (jsonResponse.getInt(S_total) != 0)) { JSONArray comments = jsonResponse.getJSONArray(Svalues); int i2 = comments.length(); if (i2 > 0) { for (int i = 0; i < i2; i++) { JSONObject comment = comments.getJSONObject(i); long created_time = comment.getLong(Stimestamp); if (created_time > updated) { // new comment ContentValues values = new ContentValues(); values.put(Notifications.UPDATED, created_time); JSONObject person = comment .getJSONObject(Sperson); if (accountEsid .equals(person.getString(Sid))) { // user's own comment, clear the notification values.put(Notifications.CLEARED, 1); } else if (cleared) { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), person.getString( SfirstName) + " " + person.getString( SlastName))); values.put(Notifications.CLEARED, 0); } else { values.put(Notifications.NOTIFICATION, String.format(getString( R.string.friendcommented), person.getString( SfirstName) + " " + person.getString( SlastName) + " and others")); } getContentResolver().update( Notifications.getContentUri( SonetNotifications.this), values, Notifications._ID + "=?", new String[] { Long.toString( notificationId) }); } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // check the latest feed HttpGet httpGet = new HttpGet( String.format(LINKEDIN_UPDATES, LINKEDIN_BASE_URL)); for (String[] header : LINKEDIN_HEADERS) { httpGet.setHeader(header[0], header[1]); } if ((response = SonetHttpClient.httpResponse(httpClient, sonetOAuth.getSignedRequest(httpGet))) != null) { try { JSONArray jarr = new JSONObject(response).getJSONArray(Svalues); // if there are updates, clear the cache int d2 = jarr.length(); if (d2 > 0) { for (int d = 0; d < d2; d++) { JSONObject o = jarr.getJSONObject(d); String sid = o.getString(SupdateKey); // if already notified, ignore if (!notificationSids.contains(sid)) { String updateType = o.getString(SupdateType); JSONObject updateContent = o .getJSONObject(SupdateContent); if (LinkedIn_UpdateTypes.contains(updateType) && updateContent.has(Sperson)) { JSONObject f = updateContent .getJSONObject(Sperson); if (f.has(SfirstName) && f.has(SlastName) && f.has(Sid) && o.has(SupdateComments)) { JSONObject updateComments = o .getJSONObject(SupdateComments); if (updateComments.has(Svalues)) { String notification = null; String esid = f.getString(Sid); JSONArray comments = updateComments .getJSONArray(Svalues); int commentCount = comments.length(); // notifications if (commentCount > 0) { // default hasCommented to whether or not these comments are for the own user's status boolean hasCommented = notification != null || esid.equals(accountEsid); for (int c2 = 0; c2 < commentCount; c2++) { JSONObject c3 = comments .getJSONObject(c2); if (c3.has(Sperson)) { JSONObject c4 = c3 .getJSONObject( Sperson); if (c4.getString(Sid) .equals(accountEsid)) { if (!hasCommented) { // the user has commented on this thread, notify any updates hasCommented = true; } // clear any notifications, as the user is already aware if (notification != null) { notification = null; } } else if (hasCommented) { // don't notify about user's own comments // send the parent comment sid notification = String .format(getString( R.string.friendcommented), c4.getString( SfirstName) + " " + c4.getString( SlastName)); } } } } if (notification != null) { String update = LinkedIn_UpdateTypes .getMessage(updateType); if (LinkedIn_UpdateTypes.APPS.name() .equals(updateType)) { if (f.has(SpersonActivities)) { JSONObject personActivities = f .getJSONObject( SpersonActivities); if (personActivities .has(Svalues)) { JSONArray updates = personActivities .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { update += updates .getJSONObject( u) .getString( Sbody); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.CONN .name() .equals(updateType)) { if (f.has(Sconnections)) { JSONObject connections = f .getJSONObject( Sconnections); if (connections .has(Svalues)) { JSONArray updates = connections .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { update += updates .getJSONObject( u) .getString( SfirstName) + " " + updates .getJSONObject( u) .getString( SlastName); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.JOBP .name() .equals(updateType)) { if (updateContent.has(Sjob) && updateContent .getJSONObject( Sjob) .has(Sposition) && updateContent .getJSONObject( Sjob) .getJSONObject( Sposition) .has(Stitle)) update += updateContent .getJSONObject(Sjob) .getJSONObject( Sposition) .getString(Stitle); } else if (LinkedIn_UpdateTypes.JGRP .name() .equals(updateType)) { if (f.has(SmemberGroups)) { JSONObject memberGroups = f .getJSONObject( SmemberGroups); if (memberGroups .has(Svalues)) { JSONArray updates = memberGroups .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { update += updates .getJSONObject( u) .getString( Sname); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.PREC .name() .equals(updateType)) { if (f.has( SrecommendationsGiven)) { JSONObject recommendationsGiven = f .getJSONObject( SrecommendationsGiven); if (recommendationsGiven .has(Svalues)) { JSONArray updates = recommendationsGiven .getJSONArray( Svalues); for (int u = 0, u2 = updates .length(); u < u2; u++) { JSONObject recommendation = updates .getJSONObject( u); JSONObject recommendee = recommendation .getJSONObject( Srecommendee); if (recommendee.has( SfirstName)) update += recommendee .getString( SfirstName); if (recommendee.has( SlastName)) update += recommendee .getString( SlastName); if (recommendation .has(SrecommendationSnippet)) update += ":" + recommendation .getString( SrecommendationSnippet); if (u < (updates .length() - 1)) update += ", "; } } } } else if (LinkedIn_UpdateTypes.SHAR .name().equals(updateType) && f.has(ScurrentShare)) { JSONObject currentShare = f .getJSONObject( ScurrentShare); if (currentShare.has(Scomment)) update = currentShare .getString( Scomment); } // new notification addNotification(sid, esid, f.getString(SfirstName) + " " + f.getString( SlastName), update, o.getLong(Stimestamp), accountId, notification); } } } } } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } break; case GOOGLEPLUS: // get new access token, need different request here HttpPost httpPost = new HttpPost(GOOGLE_ACCESS); List<NameValuePair> httpParams = new ArrayList<NameValuePair>(); httpParams.add(new BasicNameValuePair("client_id", BuildConfig.GOOGLECLIENT_ID)); httpParams.add(new BasicNameValuePair("client_secret", BuildConfig.GOOGLECLIENT_SECRET)); httpParams.add(new BasicNameValuePair("refresh_token", token)); httpParams.add(new BasicNameValuePair("grant_type", "refresh_token")); try { httpPost.setEntity(new UrlEncodedFormEntity(httpParams)); if ((response = SonetHttpClient.httpResponse(httpClient, httpPost)) != null) { JSONObject j = new JSONObject(response); if (j.has(Saccess_token)) { String access_token = j.getString(Saccess_token); while (!currentNotifications.isAfterLast()) { long notificationId = currentNotifications.getLong(0); String sid = mSonetCrypto .Decrypt(currentNotifications.getString(1)); long updated = currentNotifications.getLong(2); boolean cleared = currentNotifications.getInt(3) == 1; // store sids, to avoid duplicates when requesting the latest feed if (!notificationSids.contains(sid)) { notificationSids.add(sid); } // get comments for current notifications if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(GOOGLEPLUS_ACTIVITY, GOOGLEPLUS_BASE_URL, sid, access_token)))) != null) { // check for a newer post, if it's the user's own, then set CLEARED=0 try { JSONObject item = new JSONObject(response); if (item.has(Sobject)) { JSONObject object = item .getJSONObject(Sobject); if (object.has(Sreplies)) { int commentCount = 0; JSONObject replies = object .getJSONObject(Sreplies); if (replies.has(StotalItems)) { //TODO: notifications } } } } catch (JSONException e) { Log.e(TAG, service + ":" + e.toString()); } } currentNotifications.moveToNext(); } // get new feed if ((response = SonetHttpClient.httpResponse(httpClient, new HttpGet(String.format(GOOGLEPLUS_ACTIVITIES, GOOGLEPLUS_BASE_URL, "me", "public", 20, access_token)))) != null) { JSONObject r = new JSONObject(response); if (r.has(Sitems)) { JSONArray items = r.getJSONArray(Sitems); for (int i1 = 0, i2 = items .length(); i1 < i2; i1++) { JSONObject item = items.getJSONObject(i1); if (item.has(Sactor) && item.has(Sobject)) { JSONObject actor = item .getJSONObject(Sactor); JSONObject object = item .getJSONObject(Sobject); if (item.has(Sid) && actor.has(Sid) && actor.has(SdisplayName) && item.has(Spublished) && object.has(Sreplies) && object.has(SoriginalContent)) { String sid = item.getString(Sid); String esid = actor.getString(Sid); String friend = actor .getString(SdisplayName); String originalContent = object .getString(SoriginalContent); if ((originalContent == null) || (originalContent .length() == 0)) { originalContent = object .getString(Scontent); } String photo = null; if (actor.has(Simage)) { JSONObject image = actor .getJSONObject(Simage); if (image.has(Surl)) { photo = image.getString(Surl); } } long date = parseDate( item.getString(Spublished), GOOGLEPLUS_DATE_FORMAT); int commentCount = 0; JSONObject replies = object .getJSONObject(Sreplies); String notification = null; if (replies.has(StotalItems)) { Log.d(TAG, Sreplies + ":" + replies.toString()); commentCount = replies .getInt(StotalItems); } if (notification != null) { // new notification addNotification(sid, esid, friend, originalContent, date, accountId, notification); } } } } } } } } } catch (UnsupportedEncodingException e) { Log.e(TAG, e.toString()); } catch (JSONException e) { Log.e(TAG, e.toString()); } break; } } currentNotifications.close(); } // remove old notifications getContentResolver().delete(Notifications.getContentUri(SonetNotifications.this), Notifications.CLEARED + "=1 and " + Notifications.ACCOUNT + "=? and " + Notifications.CREATED + "<?", new String[] { Long.toString(accountId), Long.toString(System.currentTimeMillis() - 86400000) }); } account.close(); widgets.moveToNext(); } } else { publishProgress("No notifications have been set up on any accounts."); } widgets.close(); return false; } else if (arg0[0] == R.id.menu_notifications_clear_all) { // clear all notifications ContentValues values = new ContentValues(); values.put(Notifications.CLEARED, 1); SonetNotifications.this.getContentResolver() .update(Notifications.getContentUri(SonetNotifications.this), values, null, null); return true; } return false; } @Override protected void onProgressUpdate(String... messages) { (Toast.makeText(SonetNotifications.this, messages[0], Toast.LENGTH_LONG)).show(); } @Override protected void onPostExecute(Boolean finish) { if (loadingDialog.isShowing()) { loadingDialog.dismiss(); } if (finish) { SonetNotifications.this.finish(); } } private void addNotification(String sid, String esid, String friend, String message, long created, long accountId, String notification) { ContentValues values = new ContentValues(); values.put(Notifications.SID, sid); values.put(Notifications.ESID, esid); values.put(Notifications.FRIEND, friend); values.put(Notifications.MESSAGE, message); values.put(Notifications.CREATED, created); values.put(Notifications.ACCOUNT, accountId); values.put(Notifications.NOTIFICATION, notification); values.put(Notifications.CLEARED, 0); values.put(Notifications.UPDATED, created); getContentResolver().insert(Notifications.getContentUri(SonetNotifications.this), values); } private long parseDate(String date, String format) { if (date != null) { // hack for the literal 'Z' if (date.substring(date.length() - 1).equals("Z")) { date = date.substring(0, date.length() - 2) + "+0000"; } Date created = null; if (format != null) { if (mSimpleDateFormat == null) { mSimpleDateFormat = new SimpleDateFormat(format, Locale.ENGLISH); // all dates should be GMT/UTC mSimpleDateFormat.setTimeZone(sTimeZone); } try { created = mSimpleDateFormat.parse(date); return created.getTime(); } catch (ParseException e) { Log.e(TAG, e.toString()); } } else { // attempt to parse RSS date if (mSimpleDateFormat != null) { try { created = mSimpleDateFormat.parse(date); return created.getTime(); } catch (ParseException e) { Log.e(TAG, e.toString()); } } for (String rfc822 : sRFC822) { mSimpleDateFormat = new SimpleDateFormat(rfc822, Locale.ENGLISH); mSimpleDateFormat.setTimeZone(sTimeZone); try { if ((created = mSimpleDateFormat.parse(date)) != null) { return created.getTime(); } } catch (ParseException e) { Log.e(TAG, e.toString()); } } } } return System.currentTimeMillis(); } }; loadingDialog.setMessage(getString(R.string.loading)); loadingDialog.setCancelable(true); loadingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (!asyncTask.isCancelled()) asyncTask.cancel(true); } }); loadingDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, getString(android.R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); loadingDialog.show(); asyncTask.execute(item.getItemId()); return true; // return super.onOptionsItemSelected(item); }
From source file:cm.aptoide.pt.MainActivity.java
private void loadUItopapps() { ((ToggleButton) featuredView.findViewById(R.id.toggleButton1)).setOnCheckedChangeListener(null); Cursor c = db.getFeaturedTopApps(); values = new ArrayList<HashMap<String, String>>(); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { HashMap<String, String> item = new HashMap<String, String>(); item.put("name", c.getString(1)); item.put("icon", db.getIconsPath(0, Category.TOPFEATURED) + c.getString(4)); item.put("rating", c.getString(5)); item.put("id", c.getString(0)); item.put("apkid", c.getString(7)); item.put("vercode", c.getString(8)); item.put("vername", c.getString(2)); item.put("downloads", c.getString(6)); if (values.size() == 26) { break; }//from w w w.jav a 2s. co m values.add(item); } c.close(); runOnUiThread(new Runnable() { public void run() { LinearLayout ll = (LinearLayout) featuredView.findViewById(R.id.container); ll.removeAllViews(); LinearLayout llAlso = new LinearLayout(MainActivity.this); llAlso.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); llAlso.setOrientation(LinearLayout.HORIZONTAL); for (int i = 0; i != values.size(); i++) { LinearLayout txtSamItem = (LinearLayout) getLayoutInflater().inflate(R.layout.row_grid_item, null); ((TextView) txtSamItem.findViewById(R.id.name)).setText(values.get(i).get("name")); // ((TextView) txtSamItem.findViewById(R.id.version)) // .setText(getString(R.string.version) +" "+ // values.get(i).get("vername")); ((TextView) txtSamItem.findViewById(R.id.downloads)).setText( "(" + values.get(i).get("downloads") + " " + getString(R.string.downloads) + ")"); String hashCode = (values.get(i).get("apkid") + "|" + values.get(i).get("vercode")) + ""; cm.aptoide.com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage( values.get(i).get("icon"), (ImageView) txtSamItem.findViewById(R.id.icon), hashCode); // imageLoader.DisplayImage(-1, values.get(i).get("icon"), // (ImageView) txtSamItem.findViewById(R.id.icon), // mContext); float stars = 0f; try { stars = Float.parseFloat(values.get(i).get("rating")); } catch (Exception e) { stars = 0f; } ((RatingBar) txtSamItem.findViewById(R.id.rating)).setRating(stars); ((RatingBar) txtSamItem.findViewById(R.id.rating)).setIsIndicator(true); txtSamItem.setPadding(10, 0, 0, 0); txtSamItem.setTag(values.get(i).get("id")); txtSamItem.setLayoutParams( new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100, 1)); // txtSamItem.setOnClickListener(featuredListener); txtSamItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent i = new Intent(MainActivity.this, ApkInfo.class); long id = Long.parseLong((String) arg0.getTag()); i.putExtra("_id", id); i.putExtra("top", true); i.putExtra("category", Category.TOPFEATURED.ordinal()); startActivity(i); } }); txtSamItem.measure(0, 0); if (i % 2 == 0) { ll.addView(llAlso); llAlso = new LinearLayout(MainActivity.this); llAlso.setLayoutParams( new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100)); llAlso.setOrientation(LinearLayout.HORIZONTAL); llAlso.addView(txtSamItem); } else { llAlso.addView(txtSamItem); } } ll.addView(llAlso); SharedPreferences sPref = PreferenceManager.getDefaultSharedPreferences(mContext); // System.out.println(sPref.getString("app_rating", // "All").equals( // "Mature")); ((ToggleButton) featuredView.findViewById(R.id.toggleButton1)) .setChecked(!sPref.getBoolean("matureChkBox", false)); ((ToggleButton) featuredView.findViewById(R.id.toggleButton1)) .setOnCheckedChangeListener(adultCheckedListener); } }); }
From source file:de.vanita5.twittnuker.util.Utils.java
public static ArrayList<Long> getStatusIdsInDatabase(final Context context, final Uri uri, final long account_id) { final ArrayList<Long> list = new ArrayList<Long>(); if (context == null) return list; final ContentResolver resolver = context.getContentResolver(); final String where = Statuses.ACCOUNT_ID + " = " + account_id; final String[] projection = new String[] { Statuses.STATUS_ID }; final Cursor cur = ContentResolverUtils.query(resolver, uri, projection, where, null, null); if (cur != null) { final int idx = cur.getColumnIndexOrThrow(Statuses.STATUS_ID); cur.moveToFirst();/* w w w .j av a 2s .c o m*/ while (!cur.isAfterLast()) { list.add(cur.getLong(idx)); cur.moveToNext(); } cur.close(); } return list; }