summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNancy Chen <nancychen@google.com>2015-05-06 19:29:56 -0700
committerNancy Chen <nancychen@google.com>2015-05-07 16:18:23 -0700
commitf153bf42918a16e010f0d756c8ee6434440dc3ea (patch)
tree8a819d8674b316cad878f8ca02598454b964655f /src
parentd10eef28fc67aea0e4f4f49813b802ce1df5f7c7 (diff)
Mark voicemails as old after they are read.
Currently when voicemails are marked as read, they are not also marked as old ("new" set to 0). This means that when the phone is restarted, the voicemails come back in the notifications bar even if they have been read. Also ensure the voicemail notification is dismissed when the "play" button is pressed. Currently the voicemail is marked as old, but the notifications are not immediately updated so there's no instant feedback. I split the markNewVoicemailsAsOld method from CallLogQueryHandler out into a separate handler (VoicemailQueryHandler) because the markNewVoicemailsAsOld method did not share any notable logic with CallLogQueryHandler and would otherwise require creating two extra constructors. Bug: 20117483 Change-Id: I0f475e1a1489f1b45c8654f5ca882ccd857466e8
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/CallDetailActivity.java4
-rw-r--r--src/com/android/dialer/calllog/CallLogNotificationsService.java7
-rw-r--r--src/com/android/dialer/calllog/CallLogQueryHandler.java30
-rw-r--r--src/com/android/dialer/calllog/VoicemailQueryHandler.java69
4 files changed, 82 insertions, 28 deletions
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index dbcfa64af..7a23944a0 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -55,6 +55,7 @@ import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
import com.android.contacts.common.GeoUtil;
import com.android.contacts.common.CallUtil;
import com.android.dialer.calllog.CallDetailHistoryAdapter;
+import com.android.dialer.calllog.CallLogNotificationsService;
import com.android.dialer.calllog.CallTypeHelper;
import com.android.dialer.calllog.ContactInfo;
import com.android.dialer.calllog.ContactInfoHelper;
@@ -280,6 +281,9 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
values.put(Voicemails.IS_READ, true);
getContentResolver().update(voicemailUri, values,
Voicemails.IS_READ + " = 0", null);
+ Intent intent = new Intent(getBaseContext(), CallLogNotificationsService.class);
+ intent.setAction(CallLogNotificationsService.ACTION_MARK_NEW_VOICEMAILS_AS_OLD);
+ getBaseContext().startService(intent);
return null;
}
});
diff --git a/src/com/android/dialer/calllog/CallLogNotificationsService.java b/src/com/android/dialer/calllog/CallLogNotificationsService.java
index ccd933542..2e0e50258 100644
--- a/src/com/android/dialer/calllog/CallLogNotificationsService.java
+++ b/src/com/android/dialer/calllog/CallLogNotificationsService.java
@@ -56,7 +56,7 @@ public class CallLogNotificationsService extends IntentService {
*/
public static final String EXTRA_NEW_VOICEMAIL_URI = "NEW_VOICEMAIL_URI";
- private CallLogQueryHandler mCallLogQueryHandler;
+ private VoicemailQueryHandler mVoicemailQueryHandler;
public CallLogNotificationsService() {
super("CallLogNotificationsService");
@@ -65,7 +65,7 @@ public class CallLogNotificationsService extends IntentService {
@Override
public void onCreate() {
super.onCreate();
- mCallLogQueryHandler = new CallLogQueryHandler(getContentResolver(), null /*listener*/);
+ mVoicemailQueryHandler = new VoicemailQueryHandler(this, getContentResolver());
}
@Override
@@ -74,8 +74,9 @@ public class CallLogNotificationsService extends IntentService {
Log.d(TAG, "onHandleIntent: could not handle null intent");
return;
}
+
if (ACTION_MARK_NEW_VOICEMAILS_AS_OLD.equals(intent.getAction())) {
- mCallLogQueryHandler.markNewVoicemailsAsOld();
+ mVoicemailQueryHandler.markNewVoicemailsAsOld();
} else if (ACTION_UPDATE_NOTIFICATIONS.equals(intent.getAction())) {
Uri voicemailUri = (Uri) intent.getParcelableExtra(EXTRA_NEW_VOICEMAIL_URI);
DefaultVoicemailNotifier.getInstance(this).updateNotification(voicemailUri);
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index 761c8e08c..7eb5f8a0b 100644
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -20,8 +20,6 @@ import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.database.MergeCursor;
import android.database.sqlite.SQLiteDatabaseCorruptException;
import android.database.sqlite.SQLiteDiskIOException;
import android.database.sqlite.SQLiteException;
@@ -35,7 +33,6 @@ import android.provider.VoicemailContract.Status;
import android.provider.VoicemailContract.Voicemails;
import android.util.Log;
-import com.android.common.io.MoreCloseables;
import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
@@ -55,12 +52,10 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
private static final int QUERY_CALLLOG_TOKEN = 54;
/** The token for the query to mark all missed calls as old after seeing the call log. */
private static final int UPDATE_MARK_AS_OLD_TOKEN = 55;
- /** The token for the query to mark all new voicemails as old. */
- private static final int UPDATE_MARK_VOICEMAILS_AS_OLD_TOKEN = 56;
/** The token for the query to mark all missed calls as read after seeing the call log. */
- private static final int UPDATE_MARK_MISSED_CALL_AS_READ_TOKEN = 57;
+ private static final int UPDATE_MARK_MISSED_CALL_AS_READ_TOKEN = 56;
/** The token for the query to fetch voicemail status messages. */
- private static final int QUERY_VOICEMAIL_STATUS_TOKEN = 58;
+ private static final int QUERY_VOICEMAIL_STATUS_TOKEN = 57;
private final int mLogLimit;
@@ -195,22 +190,6 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
values, where.toString(), null);
}
- /** Updates all new voicemails to mark them as old. */
- public void markNewVoicemailsAsOld() {
- // Mark all "new" voicemails as not new anymore.
- StringBuilder where = new StringBuilder();
- where.append(Calls.NEW);
- where.append(" = 1 AND ");
- where.append(Calls.TYPE);
- where.append(" = ?");
-
- ContentValues values = new ContentValues(1);
- values.put(Calls.NEW, "0");
-
- startUpdate(UPDATE_MARK_VOICEMAILS_AS_OLD_TOKEN, null, Calls.CONTENT_URI_WITH_VOICEMAIL,
- values, where.toString(), new String[]{ Integer.toString(Calls.VOICEMAIL_TYPE) });
- }
-
/** Updates all missed calls to mark them as read. */
public void markMissedCallsAsRead() {
// Mark all "new" calls as not new anymore.
@@ -227,7 +206,8 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
}
@Override
- protected synchronized void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor) {
+ protected synchronized void onNotNullableQueryComplete(int token, Object cookie,
+ Cursor cursor) {
if (cursor == null) {
return;
}
@@ -274,7 +254,7 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
void onVoicemailStatusFetched(Cursor statusCursor);
/**
- * Called when {@link CallLogQueryHandler#fetchCalls(int)}complete.
+ * Called when {@link CallLogQueryHandler#fetchCalls(int)} complete.
* Returns true if takes ownership of cursor.
*/
boolean onCallsFetched(Cursor combinedCursor);
diff --git a/src/com/android/dialer/calllog/VoicemailQueryHandler.java b/src/com/android/dialer/calllog/VoicemailQueryHandler.java
new file mode 100644
index 000000000..26f9bd172
--- /dev/null
+++ b/src/com/android/dialer/calllog/VoicemailQueryHandler.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.calllog;
+
+import android.content.AsyncQueryHandler;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.CallLog.Calls;
+import android.util.Log;
+
+/**
+ * Handles asynchronous queries to the call log for voicemail.
+ */
+public class VoicemailQueryHandler extends AsyncQueryHandler {
+ private static final String TAG = "VoicemailQueryHandler";
+
+ /** The token for the query to mark all new voicemails as old. */
+ private static final int UPDATE_MARK_VOICEMAILS_AS_OLD_TOKEN = 50;
+ private Context mContext;
+
+ public VoicemailQueryHandler(Context context, ContentResolver contentResolver) {
+ super(contentResolver);
+ mContext = context;
+ }
+
+ /** Updates all new voicemails to mark them as old. */
+ public void markNewVoicemailsAsOld() {
+ // Mark all "new" voicemails as not new anymore.
+ StringBuilder where = new StringBuilder();
+ where.append(Calls.NEW);
+ where.append(" = 1 AND ");
+ where.append(Calls.TYPE);
+ where.append(" = ?");
+
+ ContentValues values = new ContentValues(1);
+ values.put(Calls.NEW, "0");
+
+ startUpdate(UPDATE_MARK_VOICEMAILS_AS_OLD_TOKEN, null, Calls.CONTENT_URI_WITH_VOICEMAIL,
+ values, where.toString(), new String[]{ Integer.toString(Calls.VOICEMAIL_TYPE) });
+ }
+
+ @Override
+ protected void onUpdateComplete(int token, Object cookie, int result) {
+ if (token == UPDATE_MARK_VOICEMAILS_AS_OLD_TOKEN) {
+ if (mContext != null) {
+ Intent serviceIntent = new Intent(mContext, CallLogNotificationsService.class);
+ serviceIntent.setAction(CallLogNotificationsService.ACTION_UPDATE_NOTIFICATIONS);
+ mContext.startService(serviceIntent);
+ } else {
+ Log.w(TAG, "Unknown update completed: ignoring: " + token);
+ }
+ }
+ }
+}