summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanesh M <danesh@cyngn.com>2016-06-04 22:38:46 -0700
committerGerrit Code Review <gerrit@cyanogenmod.org>2016-07-20 10:46:20 -0700
commited5e13b1ab7e01ab1e1575543677c190a4a2291d (patch)
treee2a85b27d49922876316e229aceba0b4e9d4d1fb
parent6eced0a1342255993859e1543241a37ab8ea8b06 (diff)
downloadandroid_packages_apps_Messaging-ed5e13b1ab7e01ab1e1575543677c190a4a2291d.tar.gz
android_packages_apps_Messaging-ed5e13b1ab7e01ab1e1575543677c190a4a2291d.tar.bz2
android_packages_apps_Messaging-ed5e13b1ab7e01ab1e1575543677c190a4a2291d.zip
Messaging : Fix blacklist sync
- Fix issues where adding a remote blacklist (via settings) didn't update the overflow option - Fix blacklist observer crash due to not overriding onPostExecute - Fix deletes in both the provider and sync service. - Ensure we notify of changes and observe them in the activity. CYNGNOS-2998 Change-Id: Icac5e290aa129e878e59496e6c2e690b0f504633
-rw-r--r--src/com/android/messaging/BugleApplication.java2
-rw-r--r--src/com/android/messaging/datamodel/BugleDatabaseOperations.java10
-rw-r--r--src/com/android/messaging/datamodel/MessagingContentProvider.java2
-rw-r--r--src/com/android/messaging/ui/conversationlist/ConversationListActivity.java16
-rw-r--r--src/com/android/messaging/util/BlacklistObserver.java82
-rw-r--r--src/com/android/messaging/util/BlacklistSync.java7
6 files changed, 90 insertions, 29 deletions
diff --git a/src/com/android/messaging/BugleApplication.java b/src/com/android/messaging/BugleApplication.java
index 3e9cef2..b5adab2 100644
--- a/src/com/android/messaging/BugleApplication.java
+++ b/src/com/android/messaging/BugleApplication.java
@@ -91,7 +91,7 @@ public class BugleApplication extends Application implements UncaughtExceptionHa
LogUtil.e(TAG, "BugleApplication.onCreate: FactoryImpl.register skipped for test run");
}
- BlacklistObserver observer = new BlacklistObserver(new Handler(), getContentResolver());
+ BlacklistObserver observer = new BlacklistObserver(new Handler(), this);
// TODO - need to extract URI from TelephonyProvider
Uri CONTENT_URI = Uri.parse("content://blacklist");
getContentResolver().registerContentObserver(CONTENT_URI, true, observer);
diff --git a/src/com/android/messaging/datamodel/BugleDatabaseOperations.java b/src/com/android/messaging/datamodel/BugleDatabaseOperations.java
index f80abdf..b2d756f 100644
--- a/src/com/android/messaging/datamodel/BugleDatabaseOperations.java
+++ b/src/com/android/messaging/datamodel/BugleDatabaseOperations.java
@@ -1780,6 +1780,16 @@ public class BugleDatabaseOperations {
}
@DoesNotRunOnMainThread
+ public static void resetBlockedParticpants(DatabaseWrapper dbWrapper) {
+ Assert.isNotMainThread();
+ final ContentValues values = new ContentValues();
+ values.put(ParticipantColumns.BLOCKED, false);
+ dbWrapper.update(DatabaseHelper.PARTICIPANTS_TABLE, values,
+ ParticipantColumns.BLOCKED + "=?",
+ new String[] {"1"});
+ }
+
+ @DoesNotRunOnMainThread
public static int updateDestination(final DatabaseWrapper dbWrapper,
final String destination, final boolean blocked, final boolean frameworkDb) {
Assert.isNotMainThread();
diff --git a/src/com/android/messaging/datamodel/MessagingContentProvider.java b/src/com/android/messaging/datamodel/MessagingContentProvider.java
index 7688abd..4f97490 100644
--- a/src/com/android/messaging/datamodel/MessagingContentProvider.java
+++ b/src/com/android/messaging/datamodel/MessagingContentProvider.java
@@ -79,7 +79,7 @@ public class MessagingContentProvider extends ContentProvider {
static final String CONVERSATION_ID = ConversationParticipantsColumns.CONVERSATION_ID;
}
- static final Uri CONVERSATION_PARTICIPANTS_URI = Uri.parse(CONTENT_AUTHORITY +
+ public static final Uri CONVERSATION_PARTICIPANTS_URI = Uri.parse(CONTENT_AUTHORITY +
PARTICIPANTS_QUERY + "/conversation");
public static final Uri PARTICIPANTS_URI = Uri.parse(CONTENT_AUTHORITY + PARTICIPANTS_QUERY);
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java b/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java
index f8abe81..7bc6308 100644
--- a/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java
+++ b/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java
@@ -16,18 +16,30 @@
package com.android.messaging.ui.conversationlist;
+import android.database.ContentObserver;
import android.graphics.drawable.ColorDrawable;
+import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.view.Menu;
import android.view.MenuItem;
import com.android.messaging.R;
+import com.android.messaging.datamodel.MessagingContentProvider;
import com.android.messaging.ui.UIIntents;
import com.android.messaging.util.DebugUtils;
import com.android.messaging.util.Trace;
public class ConversationListActivity extends AbstractConversationListActivity {
+
+ private ContentObserver mBlacklistObserver = new ContentObserver(null) {
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ super.onChange(selfChange, uri);
+ invalidateOptionsMenu();
+ }
+ };
+
@Override
protected void onCreate(final Bundle savedInstanceState) {
Trace.beginSection("ConversationListActivity.onCreate");
@@ -35,6 +47,10 @@ public class ConversationListActivity extends AbstractConversationListActivity {
setContentView(R.layout.conversation_list_activity);
Trace.endSection();
invalidateActionBar();
+
+ getContentResolver().registerContentObserver(
+ MessagingContentProvider.CONVERSATION_PARTICIPANTS_URI,
+ true, mBlacklistObserver);
}
@Override
diff --git a/src/com/android/messaging/util/BlacklistObserver.java b/src/com/android/messaging/util/BlacklistObserver.java
index a7c341e..ae59a89 100644
--- a/src/com/android/messaging/util/BlacklistObserver.java
+++ b/src/com/android/messaging/util/BlacklistObserver.java
@@ -18,28 +18,29 @@ package com.android.messaging.util;
import android.content.ContentResolver;
import android.database.ContentObserver;
+import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;
-import com.android.messaging.BugleApplication;
import com.android.messaging.datamodel.BugleDatabaseOperations;
import com.android.messaging.datamodel.DataModel;
import com.android.messaging.datamodel.DatabaseWrapper;
import com.android.messaging.datamodel.MessagingContentProvider;
import com.android.messaging.datamodel.action.UpdateConversationArchiveStatusAction;
import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.LogUtil;
// ContentObserver class to monitor changes to the Framework Blacklist DB
public class BlacklistObserver extends ContentObserver {
private static final String TAG = BlacklistObserver.class.getSimpleName();
+ private final Context mContext;
private ContentResolver mResolver;
- public BlacklistObserver(Handler handler, ContentResolver resolver) {
+ public BlacklistObserver(Handler handler, Context context) {
super(handler);
- mResolver = resolver;
+ mResolver = context.getContentResolver();
+ mContext = context;
}
@Override
@@ -47,33 +48,53 @@ public class BlacklistObserver extends ContentObserver {
// depending on the Thread in which the handler was created, this function
// may or may not run on the UI thread, to be sure that it doesn't, launch
// it via AsyncTask
- new SafeAsyncTask<Void, Void, Void>() {
-
+ SafeAsyncTask.executeOnThreadPool(new Runnable() {
@Override
- protected Void doInBackgroundTimed(Void... params) {
+ public void run() {
if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
Log.i(TAG, "BlacklistObserver: onChange: Uri:" + uri.toString());
}
+ boolean requiresNotifyAllParticipants = false;
+
// we need to find the phone number being blacklisted and add/update it
// in the bugle database
Cursor cursor = null;
try {
cursor = mResolver.query(uri, null, null, null, null);
+
+ DatabaseWrapper db = DataModel.get().getDatabase();
+
+ // Row was deleted
+ if (cursor.getCount() == 0) {
+ if (!uri.getPath().contains("bynumber")) {
+ // We don't have enough information, lets run a full sync
+ BlacklistSync blacklistSync = new BlacklistSync(mContext);
+ blacklistSync.execute();
+ } else {
+ // We have the number that was deleted, lets update it locally
+ String number = uri.getLastPathSegment();
+ BugleDatabaseOperations.updateDestination(db, number,
+ false, false);
+ String conversationId = updateArchiveStatusForConversation(false, number, db);
+ if (conversationId == null) {
+ requiresNotifyAllParticipants = true;
+ } else {
+ MessagingContentProvider.notifyParticipantsChanged(conversationId);
+ }
+ }
+ return;
+ }
+
int normalizedNumberIndex = cursor.getColumnIndex("normalized_number");
int blockedIndex = cursor.getColumnIndex("message");
int nonNormalizedNumberIndex = cursor.getColumnIndex("number");
int regexIndex = cursor.getColumnIndex("is_regex");
// if the column indices are not valid, don't perform the queries
if (normalizedNumberIndex < 0 || blockedIndex < 0) {
- if (cursor != null) {
- cursor.close();
- }
- return null;
+ return;
}
- DatabaseWrapper db = DataModel.get().getDatabase();
-
while(cursor.moveToNext()) {
String number = cursor.getString(normalizedNumberIndex);
String blocked = cursor.getString(blockedIndex);
@@ -95,17 +116,11 @@ public class BlacklistObserver extends ContentObserver {
BugleDatabaseOperations.updateDestination(db, number,
isBlocked, false);
}
- String conversationId = BugleDatabaseOperations
- .getConversationFromOtherParticipantDestination(db, number);
- if (conversationId != null) {
- if (isBlocked) {
- UpdateConversationArchiveStatusAction
- .archiveConversation(conversationId);
- } else {
- UpdateConversationArchiveStatusAction
- .unarchiveConversation(conversationId);
- }
+ String conversationId = updateArchiveStatusForConversation(isBlocked, number, db);
+ if (!requiresNotifyAllParticipants && conversationId != null) {
MessagingContentProvider.notifyParticipantsChanged(conversationId);
+ } else {
+ requiresNotifyAllParticipants = true;
}
}
} catch (Exception e) {
@@ -114,10 +129,27 @@ public class BlacklistObserver extends ContentObserver {
if (cursor != null) {
cursor.close();
}
+ if (requiresNotifyAllParticipants) {
+ MessagingContentProvider.notifyAllParticipantsChanged();
+ }
}
- return null;
}
- }.executeOnThreadPool();
+ });
}
+
+ private String updateArchiveStatusForConversation(boolean isBlocked, String number, DatabaseWrapper db) {
+ String conversationId = BugleDatabaseOperations
+ .getConversationFromOtherParticipantDestination(db, number);
+ if (conversationId != null) {
+ if (isBlocked) {
+ UpdateConversationArchiveStatusAction
+ .archiveConversation(conversationId);
+ } else {
+ UpdateConversationArchiveStatusAction
+ .unarchiveConversation(conversationId);
+ }
+ }
+ return conversationId;
+ }
}
diff --git a/src/com/android/messaging/util/BlacklistSync.java b/src/com/android/messaging/util/BlacklistSync.java
index 3ab14d8..50ec8f9 100644
--- a/src/com/android/messaging/util/BlacklistSync.java
+++ b/src/com/android/messaging/util/BlacklistSync.java
@@ -28,6 +28,7 @@ import android.util.Log;
import com.android.messaging.datamodel.BugleDatabaseOperations;
import com.android.messaging.datamodel.DataModel;
import com.android.messaging.datamodel.DatabaseWrapper;
+import com.android.messaging.datamodel.MessagingContentProvider;
import com.android.messaging.datamodel.data.ParticipantData;
import com.android.messaging.util.LogUtil;
@@ -47,6 +48,9 @@ public class BlacklistSync extends AsyncTask<Void, Void, Void> {
Uri CONTENT_URI = Uri.parse("content://blacklist");
Cursor cursor;
+ DatabaseWrapper db = DataModel.get().getDatabase();
+ BugleDatabaseOperations.resetBlockedParticpants(db);
+
// need to update local blacklist database - we are simply overwriting the
// local database with the framework database - the local database is used
// as a WriteThrough Cache of the Framework Database
@@ -62,8 +66,6 @@ public class BlacklistSync extends AsyncTask<Void, Void, Void> {
return null;
}
- DatabaseWrapper db = DataModel.get().getDatabase();
-
while(cursor.moveToNext()) {
String number = cursor.getString(normalizedNumberIndex);
String blocked = cursor.getString(blockedIndex);
@@ -95,6 +97,7 @@ public class BlacklistSync extends AsyncTask<Void, Void, Void> {
cursor.close();
}
+ MessagingContentProvider.notifyAllParticipantsChanged();
return null;
}
}