summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorChris Wren <cwren@android.com>2013-05-06 09:23:16 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-05-06 09:23:16 -0700
commit5bd9a6925ca589d0dc28c4e428fe2b4e6c282999 (patch)
treef8d00ef19812f357670784daf4695249aca2e371 /src/com/android
parentad5a4ba5f3859d127c316b7c12b4161be0f54985 (diff)
parent5f44e994a6f1dabf5a208f0035d476e71460626b (diff)
downloadandroid_packages_apps_Calendar-5bd9a6925ca589d0dc28c4e428fe2b4e6c282999.tar.gz
android_packages_apps_Calendar-5bd9a6925ca589d0dc28c4e428fe2b4e6c282999.tar.bz2
android_packages_apps_Calendar-5bd9a6925ca589d0dc28c4e428fe2b4e6c282999.zip
am 5f44e994: serialize the GCM calls.
* commit '5f44e994a6f1dabf5a208f0035d476e71460626b': serialize the GCM calls.
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/calendar/alerts/AlertActivity.java10
-rw-r--r--src/com/android/calendar/alerts/GlobalDismissManager.java231
2 files changed, 117 insertions, 124 deletions
diff --git a/src/com/android/calendar/alerts/AlertActivity.java b/src/com/android/calendar/alerts/AlertActivity.java
index 5f8173a2..6e9af6de 100644
--- a/src/com/android/calendar/alerts/AlertActivity.java
+++ b/src/com/android/calendar/alerts/AlertActivity.java
@@ -25,6 +25,7 @@ import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.provider.CalendarContract.CalendarAlerts;
@@ -133,8 +134,15 @@ public class AlertActivity extends Activity implements OnClickListener {
initiateGlobalDismiss(alarmIds);
}
+ @SuppressWarnings("unchecked")
private void initiateGlobalDismiss(List<AlarmId> alarmIds) {
- GlobalDismissManager.dismissGlobally(getApplicationContext(), alarmIds);
+ new AsyncTask<List<AlarmId>, Void, Void>() {
+ @Override
+ protected Void doInBackground(List<AlarmId>... params) {
+ GlobalDismissManager.dismissGlobally(getApplicationContext(), params[0]);
+ return null;
+ }
+ }.execute(alarmIds);
}
private class QueryHandler extends AsyncQueryService {
diff --git a/src/com/android/calendar/alerts/GlobalDismissManager.java b/src/com/android/calendar/alerts/GlobalDismissManager.java
index 90b0c273..a57a9945 100644
--- a/src/com/android/calendar/alerts/GlobalDismissManager.java
+++ b/src/com/android/calendar/alerts/GlobalDismissManager.java
@@ -16,7 +16,6 @@
package com.android.calendar.alerts;
-import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
@@ -25,7 +24,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.CalendarContract.CalendarAlerts;
import android.provider.CalendarContract.Calendars;
@@ -98,68 +96,61 @@ public class GlobalDismissManager extends BroadcastReceiver {
Log.i(TAG, "no sender configured");
return;
}
- new AsyncTask<Void, Void, Void>() {
-
- @Override
- protected Void doInBackground(Void... params) {
-
- Map<Long, Long> eventsToCalendars = lookupEventToCalendarMap(context, eventIds);
- Set<Long> calendars = new LinkedHashSet<Long>();
- calendars.addAll(eventsToCalendars.values());
- if (calendars.isEmpty()) {
- Log.d(TAG, "foudn no calendars for events");
- return null;
- }
+ Map<Long, Long> eventsToCalendars = lookupEventToCalendarMap(context, eventIds);
+ Set<Long> calendars = new LinkedHashSet<Long>();
+ calendars.addAll(eventsToCalendars.values());
+ if (calendars.isEmpty()) {
+ Log.d(TAG, "found no calendars for events");
+ return;
+ }
- Map<Long, Pair<String, String>> calendarsToAccounts =
- lookupCalendarToAccountMap(context, calendars);
+ Map<Long, Pair<String, String>> calendarsToAccounts =
+ lookupCalendarToAccountMap(context, calendars);
- if (calendarsToAccounts.isEmpty()) {
- Log.d(TAG, "found no accounts for calendars");
- return null;
- }
+ if (calendarsToAccounts.isEmpty()) {
+ Log.d(TAG, "found no accounts for calendars");
+ return;
+ }
- // filter out non-google accounts (necessary?)
- Set<String> accounts = new LinkedHashSet<String>();
- for (Pair<String, String> accountPair : calendarsToAccounts.values()) {
- if (GOOGLE_ACCOUNT_TYPE.equals(accountPair.first)) {
- accounts.add(accountPair.second);
- }
- }
+ // filter out non-google accounts (necessary?)
+ Set<String> accounts = new LinkedHashSet<String>();
+ for (Pair<String, String> accountPair : calendarsToAccounts.values()) {
+ if (GOOGLE_ACCOUNT_TYPE.equals(accountPair.first)) {
+ accounts.add(accountPair.second);
+ }
+ }
- // filter out accounts we already know about
- SharedPreferences prefs =
- context.getSharedPreferences(GLOBAL_DISMISS_MANAGER_PREFS,
- Context.MODE_PRIVATE);
- Set<String> existingAccounts = prefs.getStringSet(ACCOUNT_KEY,
- new HashSet<String>());
- accounts.removeAll(existingAccounts);
+ // filter out accounts we already know about
+ SharedPreferences prefs =
+ context.getSharedPreferences(GLOBAL_DISMISS_MANAGER_PREFS,
+ Context.MODE_PRIVATE);
+ Set<String> existingAccounts = prefs.getStringSet(ACCOUNT_KEY,
+ new HashSet<String>());
+ accounts.removeAll(existingAccounts);
- if (accounts.isEmpty()) {
- return null;
- }
+ if (accounts.isEmpty()) {
+ // nothing to do, we've already registered all the accounts.
+ return;
+ }
- // subscribe to remaining accounts
- CloudNotificationBackplane cnb =
- ExtensionsFactory.getCloudNotificationBackplane();
- if (cnb.open(context)) {
- for (String account : accounts) {
- try {
- if (cnb.subscribeToGroup(senderId, account, account)) {
- existingAccounts.add(account);
- }
- } catch (IOException e) {
- // Try again, next time the account triggers and alert.
- }
+ // subscribe to remaining accounts
+ CloudNotificationBackplane cnb =
+ ExtensionsFactory.getCloudNotificationBackplane();
+ if (cnb.open(context)) {
+ for (String account : accounts) {
+ try {
+ if (cnb.subscribeToGroup(senderId, account, account)) {
+ existingAccounts.add(account);
}
- cnb.close();
- prefs.edit()
- .putStringSet(ACCOUNT_KEY, existingAccounts)
- .commit();
+ } catch (IOException e) {
+ // Try again, next time the account triggers and alert.
}
- return null;
}
- }.execute();
+ cnb.close();
+ prefs.edit()
+ .putStringSet(ACCOUNT_KEY, existingAccounts)
+ .commit();
+ }
}
/**
@@ -175,86 +166,80 @@ public class GlobalDismissManager extends BroadcastReceiver {
Log.i(TAG, "no sender configured");
return;
}
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- Set<Long> eventIds = new HashSet<Long>(alarmIds.size());
- for (AlarmId alarmId: alarmIds) {
- eventIds.add(alarmId.mEventId);
- }
- // find the mapping between calendars and events
- Map<Long, Long> eventsToCalendars = lookupEventToCalendarMap(context, eventIds);
+ Set<Long> eventIds = new HashSet<Long>(alarmIds.size());
+ for (AlarmId alarmId: alarmIds) {
+ eventIds.add(alarmId.mEventId);
+ }
+ // find the mapping between calendars and events
+ Map<Long, Long> eventsToCalendars = lookupEventToCalendarMap(context, eventIds);
- if (eventsToCalendars.isEmpty()) {
- Log.d(TAG, "found no calendars for events");
- return null;
- }
+ if (eventsToCalendars.isEmpty()) {
+ Log.d(TAG, "found no calendars for events");
+ return;
+ }
- Set<Long> calendars = new LinkedHashSet<Long>();
- calendars.addAll(eventsToCalendars.values());
+ Set<Long> calendars = new LinkedHashSet<Long>();
+ calendars.addAll(eventsToCalendars.values());
- // find the accounts associated with those calendars
- Map<Long, Pair<String, String>> calendarsToAccounts =
- lookupCalendarToAccountMap(context, calendars);
+ // find the accounts associated with those calendars
+ Map<Long, Pair<String, String>> calendarsToAccounts =
+ lookupCalendarToAccountMap(context, calendars);
- if (calendarsToAccounts.isEmpty()) {
- Log.d(TAG, "found no accounts for calendars");
- return null;
- }
+ if (calendarsToAccounts.isEmpty()) {
+ Log.d(TAG, "found no accounts for calendars");
+ return;
+ }
- // TODO group by account to reduce queries
- Map<String, String> syncIdToAccount = new HashMap<String, String>();
- Map<Long, String> eventIdToSyncId = new HashMap<Long, String>();
- ContentResolver resolver = context.getContentResolver();
- for (Long eventId : eventsToCalendars.keySet()) {
- Long calendar = eventsToCalendars.get(eventId);
- Pair<String, String> account = calendarsToAccounts.get(calendar);
- if (GOOGLE_ACCOUNT_TYPE.equals(account.first)) {
- Uri uri = asSync(Events.CONTENT_URI, account.first, account.second);
- Cursor cursor = resolver.query(uri, EVENT_SYNC_PROJECTION,
- Events._ID + " = " + eventId, null, null);
- try {
- cursor.moveToPosition(-1);
- int sync_id_idx = cursor.getColumnIndex(Events._SYNC_ID);
- if (sync_id_idx != -1) {
- while (cursor.moveToNext()) {
- String syncId = cursor.getString(sync_id_idx);
- syncIdToAccount.put(syncId, account.second);
- eventIdToSyncId.put(eventId, syncId);
- }
- }
- } finally {
- cursor.close();
+ // TODO group by account to reduce queries
+ Map<String, String> syncIdToAccount = new HashMap<String, String>();
+ Map<Long, String> eventIdToSyncId = new HashMap<Long, String>();
+ ContentResolver resolver = context.getContentResolver();
+ for (Long eventId : eventsToCalendars.keySet()) {
+ Long calendar = eventsToCalendars.get(eventId);
+ Pair<String, String> account = calendarsToAccounts.get(calendar);
+ if (GOOGLE_ACCOUNT_TYPE.equals(account.first)) {
+ Uri uri = asSync(Events.CONTENT_URI, account.first, account.second);
+ Cursor cursor = resolver.query(uri, EVENT_SYNC_PROJECTION,
+ Events._ID + " = " + eventId, null, null);
+ try {
+ cursor.moveToPosition(-1);
+ int sync_id_idx = cursor.getColumnIndex(Events._SYNC_ID);
+ if (sync_id_idx != -1) {
+ while (cursor.moveToNext()) {
+ String syncId = cursor.getString(sync_id_idx);
+ syncIdToAccount.put(syncId, account.second);
+ eventIdToSyncId.put(eventId, syncId);
}
}
+ } finally {
+ cursor.close();
}
+ }
+ }
- if (syncIdToAccount.isEmpty()) {
- Log.d(TAG, "found no syncIds for events");
- return null;
- }
+ if (syncIdToAccount.isEmpty()) {
+ Log.d(TAG, "found no syncIds for events");
+ return;
+ }
- // TODO group by account to reduce packets
- CloudNotificationBackplane cnb = ExtensionsFactory.getCloudNotificationBackplane();
- if (cnb.open(context)) {
- for (AlarmId alarmId: alarmIds) {
- String syncId = eventIdToSyncId.get(alarmId.mEventId);
- String account = syncIdToAccount.get(syncId);
- Bundle data = new Bundle();
- data.putString(SYNC_ID, syncId);
- data.putString(START_TIME, Long.toString(alarmId.mStart));
- data.putString(ACCOUNT_NAME, account);
- try {
- cnb.send(account, syncId + ":" + alarmId.mStart, data);
- } catch (IOException e) {
- // TODO save a note to try again later
- }
- }
- cnb.close();
+ // TODO group by account to reduce packets
+ CloudNotificationBackplane cnb = ExtensionsFactory.getCloudNotificationBackplane();
+ if (cnb.open(context)) {
+ for (AlarmId alarmId: alarmIds) {
+ String syncId = eventIdToSyncId.get(alarmId.mEventId);
+ String account = syncIdToAccount.get(syncId);
+ Bundle data = new Bundle();
+ data.putString(SYNC_ID, syncId);
+ data.putString(START_TIME, Long.toString(alarmId.mStart));
+ data.putString(ACCOUNT_NAME, account);
+ try {
+ cnb.send(account, syncId + ":" + alarmId.mStart, data);
+ } catch (IOException e) {
+ // TODO save a note to try again later
}
- return null;
}
- }.execute();
+ cnb.close();
+ }
}
private static Uri asSync(Uri uri, String accountType, String account) {