Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e58fdfb authored by Wenyi Wang's avatar Wenyi Wang
Browse files

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
(cherry picked from commit f26ccc7c)
parent be528807
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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() {
+6 −1
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }

+7 −12
Original line number Diff line number Diff line
@@ -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);
+11 −20
Original line number Diff line number Diff line
@@ -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();
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -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();
}
Loading