summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWenyi Wang <wenyiw@google.com>2017-04-14 11:36:30 -0700
committerWenyi Wang <wenyiw@google.com>2017-04-14 11:46:51 -0700
commitf26ccc7c4e94815ef9e49a2851b4420a7360a412 (patch)
tree05b379e40b51cabd1b3b43fd1e00480ae6e9aa9f
parentd8b90389830688b7b86e3f8aa30d4271739a89b4 (diff)
downloadandroid_packages_apps_Contacts-f26ccc7c4e94815ef9e49a2851b4420a7360a412.tar.gz
android_packages_apps_Contacts-f26ccc7c4e94815ef9e49a2851b4420a7360a412.tar.bz2
android_packages_apps_Contacts-f26ccc7c4e94815ef9e49a2851b4420a7360a412.zip
Run VCardService in foreground
- VCardService will be killed if app targets to O and it runs in background. Bug: 37253794 Test: manually imported/exported 20k contacts while screen is locked Change-Id: I17d8aa7cf3a248c5d27a41bcb7ddf18cbe42d696
-rw-r--r--src/com/android/contacts/vcard/ExportProcessor.java3
-rw-r--r--src/com/android/contacts/vcard/ImportProcessor.java7
-rw-r--r--src/com/android/contacts/vcard/NfcImportVCardActivity.java19
-rw-r--r--src/com/android/contacts/vcard/NotificationImportExportListener.java31
-rw-r--r--src/com/android/contacts/vcard/VCardImportExportListener.java8
-rw-r--r--src/com/android/contacts/vcard/VCardService.java15
6 files changed, 41 insertions, 42 deletions
diff --git a/src/com/android/contacts/vcard/ExportProcessor.java b/src/com/android/contacts/vcard/ExportProcessor.java
index c1171d81d..13d80caa1 100644
--- a/src/com/android/contacts/vcard/ExportProcessor.java
+++ b/src/com/android/contacts/vcard/ExportProcessor.java
@@ -269,8 +269,7 @@ public class ExportProcessor extends ProcessorBase {
NotificationImportExportListener.constructProgressNotification(mService,
VCardService.TYPE_EXPORT, description, tickerText, mJobId, displayName,
totalCount, currentCount);
- mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
- mJobId, notification);
+ mService.startForeground(mJobId, notification);
}
private void doCancelNotification() {
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
index d6483b85d..c6fcccb8c 100644
--- a/src/com/android/contacts/vcard/ImportProcessor.java
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -16,6 +16,7 @@
package com.android.contacts.vcard;
import android.accounts.Account;
+import android.app.Notification;
import android.content.ContentResolver;
import android.net.Uri;
import android.util.Log;
@@ -88,7 +89,11 @@ public class ImportProcessor extends ProcessorBase implements VCardEntryHandler
public void onEntryCreated(VCardEntry entry) {
mCurrentCount++;
if (mListener != null) {
- mListener.onImportParsed(mImportRequest, mJobId, entry, mCurrentCount, mTotalCount);
+ final Notification notification = mListener.onImportParsed(mImportRequest, mJobId,
+ entry, mCurrentCount, mTotalCount);
+ if (notification != null) {
+ mService.startForeground(mJobId, notification);
+ }
}
}
diff --git a/src/com/android/contacts/vcard/NfcImportVCardActivity.java b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
index b8b76dacc..88fa76035 100644
--- a/src/com/android/contacts/vcard/NfcImportVCardActivity.java
+++ b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
@@ -230,14 +230,14 @@ public class NfcImportVCardActivity extends Activity implements ServiceConnectio
}
@Override
- public void onImportProcessed(ImportRequest request, int jobId, int sequence) {
- // do nothing
+ public Notification onImportProcessed(ImportRequest request, int jobId, int sequence) {
+ return null;
}
@Override
- public void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
- int totalCount) {
- // do nothing
+ public Notification onImportParsed(ImportRequest request, int jobId, VCardEntry entry,
+ int currentCount, int totalCount) {
+ return null;
}
@Override
@@ -271,8 +271,8 @@ public class NfcImportVCardActivity extends Activity implements ServiceConnectio
}
@Override
- public void onExportProcessed(ExportRequest request, int jobId) {
- // do nothing
+ public Notification onExportProcessed(ExportRequest request, int jobId) {
+ return null;
}
@Override
@@ -285,11 +285,6 @@ public class NfcImportVCardActivity extends Activity implements ServiceConnectio
// do nothing
}
- @Override
- public void onComplete() {
- // do nothing
- }
-
/* package */ void showFailureNotification(int reasonId) {
final NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
diff --git a/src/com/android/contacts/vcard/NotificationImportExportListener.java b/src/com/android/contacts/vcard/NotificationImportExportListener.java
index cec96d488..46a33651c 100644
--- a/src/com/android/contacts/vcard/NotificationImportExportListener.java
+++ b/src/com/android/contacts/vcard/NotificationImportExportListener.java
@@ -68,7 +68,7 @@ public class NotificationImportExportListener implements VCardImportExportListen
}
@Override
- public void onImportProcessed(ImportRequest request, int jobId, int sequence) {
+ public Notification onImportProcessed(ImportRequest request, int jobId, int sequence) {
// Show a notification about the status
final String displayName;
final String message;
@@ -90,16 +90,15 @@ public class NotificationImportExportListener implements VCardImportExportListen
}
ContactsNotificationChannelsUtil.createDefaultChannel(mContext);
- final Notification notification = constructProgressNotification(mContext,
- VCardService.TYPE_IMPORT, message, message, jobId, displayName, -1, 0);
- mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
+ return constructProgressNotification(mContext, VCardService.TYPE_IMPORT, message, message,
+ jobId, displayName, -1, 0);
}
@Override
- public void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
+ public Notification onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
int totalCount) {
if (entry.isIgnorable()) {
- return;
+ return null;
}
final String totalCountString = String.valueOf(totalCount);
@@ -111,10 +110,9 @@ public class NotificationImportExportListener implements VCardImportExportListen
final String description = mContext.getString(R.string.importing_vcard_description,
entry.getDisplayName());
- final Notification notification = constructProgressNotification(
- mContext.getApplicationContext(), VCardService.TYPE_IMPORT, description, tickerText,
- jobId, request.displayName, totalCount, currentCount);
- mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
+ return constructProgressNotification(mContext.getApplicationContext(),
+ VCardService.TYPE_IMPORT, description, tickerText, jobId, request.displayName,
+ totalCount, currentCount);
}
@Override
@@ -159,17 +157,15 @@ public class NotificationImportExportListener implements VCardImportExportListen
}
@Override
- public void onExportProcessed(ExportRequest request, int jobId) {
+ public Notification onExportProcessed(ExportRequest request, int jobId) {
final String displayName = ExportVCardActivity.getOpenableUriDisplayName(mContext,
request.destUri);
final String message = mContext.getString(R.string.contacts_export_will_start_message);
mHandler.obtainMessage(0, message).sendToTarget();
ContactsNotificationChannelsUtil.createDefaultChannel(mContext);
- final Notification notification =
- NotificationImportExportListener.constructProgressNotification(mContext,
- VCardService.TYPE_EXPORT, message, message, jobId, displayName, -1, 0);
- mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
+ return constructProgressNotification(mContext, VCardService.TYPE_EXPORT, message, message,
+ jobId, displayName, -1, 0);
}
@Override
@@ -321,9 +317,4 @@ public class NotificationImportExportListener implements VCardImportExportListen
.getActivity(context, 0, new Intent(context.getPackageName(), null), 0))
.getNotification();
}
-
- @Override
- public void onComplete() {
- mContext.finish();
- }
}
diff --git a/src/com/android/contacts/vcard/VCardImportExportListener.java b/src/com/android/contacts/vcard/VCardImportExportListener.java
index 82d7c21ae..fa256adee 100644
--- a/src/com/android/contacts/vcard/VCardImportExportListener.java
+++ b/src/com/android/contacts/vcard/VCardImportExportListener.java
@@ -16,21 +16,21 @@
package com.android.contacts.vcard;
+import android.app.Notification;
import android.net.Uri;
import com.android.vcard.VCardEntry;
interface VCardImportExportListener {
- void onImportProcessed(ImportRequest request, int jobId, int sequence);
- void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
+ Notification onImportProcessed(ImportRequest request, int jobId, int sequence);
+ Notification onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
int totalCount);
void onImportFinished(ImportRequest request, int jobId, Uri uri);
void onImportFailed(ImportRequest request);
void onImportCanceled(ImportRequest request, int jobId);
- void onExportProcessed(ExportRequest request, int jobId);
+ Notification onExportProcessed(ExportRequest request, int jobId);
void onExportFailed(ExportRequest request);
void onCancelRequest(CancelRequest request, int type);
- void onComplete();
}
diff --git a/src/com/android/contacts/vcard/VCardService.java b/src/com/android/contacts/vcard/VCardService.java
index f5387a180..075d6bbaa 100644
--- a/src/com/android/contacts/vcard/VCardService.java
+++ b/src/com/android/contacts/vcard/VCardService.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.vcard;
+import android.app.Notification;
import android.app.Service;
import android.content.Intent;
import android.media.MediaScannerConnection;
@@ -89,7 +90,7 @@ public class VCardService extends Service {
// requests.
private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
- private int mCurrentJobId;
+ private int mCurrentJobId = 1;
// Stores all unfinished import/export jobs which will be executed by mExecutorService.
// Key is jobId.
@@ -142,6 +143,7 @@ public class VCardService extends Service {
if (DEBUG) Log.d(LOG_TAG, "VCardService is being destroyed.");
cancelAllRequestsAndShutdown();
clearCache();
+ stopForeground(/* removeNotification */ false);
super.onDestroy();
}
@@ -164,7 +166,11 @@ public class VCardService extends Service {
if (tryExecute(new ImportProcessor(this, listener, request, mCurrentJobId))) {
if (listener != null) {
- listener.onImportProcessed(request, mCurrentJobId, i);
+ final Notification notification =
+ listener.onImportProcessed(request, mCurrentJobId, i);
+ if (notification != null) {
+ startForeground(mCurrentJobId, notification);
+ }
}
mCurrentJobId++;
} else {
@@ -193,7 +199,10 @@ public class VCardService extends Service {
}
if (listener != null) {
- listener.onExportProcessed(request, mCurrentJobId);
+ final Notification notification = listener.onExportProcessed(request,mCurrentJobId);
+ if (notification != null) {
+ startForeground(mCurrentJobId, notification);
+ }
}
mCurrentJobId++;
} else {