diff options
8 files changed, 24 insertions, 108 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4fc82cb9d..71648e805 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -486,9 +486,7 @@ </intent-filter> </receiver> <service - android:name=".service.EmailBroadcastProcessorService" - android:permission="android.permission.BIND_JOB_SERVICE" - android:exported="true" /> + android:name=".service.EmailBroadcastProcessorService" /> <!-- Support for DeviceAdmin / DevicePolicyManager. See SecurityPolicy class for impl. --> <receiver @@ -508,7 +506,6 @@ <service android:name=".service.AttachmentService" android:enabled="false" - android:permission="android.permission.BIND_JOB_SERVICE" > </service> @@ -728,7 +725,6 @@ </service> <service android:name="com.android.email.EmailIntentService" - android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false"> <intent-filter> <action android:name="com.android.mail.action.RESEND_NOTIFICATIONS" /> diff --git a/provider_src/com/android/email/EmailIntentService.java b/provider_src/com/android/email/EmailIntentService.java index 5924c90ce..0c6d76178 100644 --- a/provider_src/com/android/email/EmailIntentService.java +++ b/provider_src/com/android/email/EmailIntentService.java @@ -29,12 +29,12 @@ public class EmailIntentService extends MailIntentService { private static final String LOG_TAG = LogTag.getLogTag(); public EmailIntentService() { - super(); + super("EmailIntentService"); } @Override - protected void onHandleWork(final Intent intent) { - super.onHandleWork(intent); + protected void onHandleIntent(final Intent intent) { + super.onHandleIntent(intent); if (UIProvider.ACTION_UPDATE_NOTIFICATION.equals(intent.getAction())) { final NotificationController nc = diff --git a/provider_src/com/android/email/provider/EmailProvider.java b/provider_src/com/android/email/provider/EmailProvider.java index 1f0956b2e..00d608f30 100644 --- a/provider_src/com/android/email/provider/EmailProvider.java +++ b/provider_src/com/android/email/provider/EmailProvider.java @@ -6357,7 +6357,7 @@ public class EmailProvider extends ContentProvider // Start/stop the various services depending on whether there are any accounts // TODO: Make sure that the AttachmentService responds to this request as it // expects a particular set of data in the intents that it receives or it ignores. - startOrStopService(enabled, context); + startOrStopService(enabled, context, new Intent(context, AttachmentService.class)); final NotificationController controller = NotificationControllerCreatorHolder.getInstance(context); @@ -6367,16 +6367,16 @@ public class EmailProvider extends ContentProvider } /** - * Starts or stops the attachment service as necessary. - * + * Starts or stops the service as necessary. * @param enabled If {@code true}, the service will be started. Otherwise, it will be stopped. * @param context The context to manage the service with. + * @param intent The intent of the service to be managed. */ - private static void startOrStopService(boolean enabled, Context context) { + private static void startOrStopService(boolean enabled, Context context, Intent intent) { if (enabled) { - AttachmentService.startWithoutSpecificAttachmentChange(context); + context.startService(intent); } else { - AttachmentService.stop(context); + context.stopService(intent); } } diff --git a/provider_src/com/android/email/service/AttachmentService.java b/provider_src/com/android/email/service/AttachmentService.java index 50ee42969..632104931 100644 --- a/provider_src/com/android/email/service/AttachmentService.java +++ b/provider_src/com/android/email/service/AttachmentService.java @@ -27,20 +27,15 @@ import android.content.Intent; import android.database.Cursor; import android.net.ConnectivityManager; import android.net.Uri; -import android.os.Build.VERSION_CODES; import android.os.IBinder; import android.os.RemoteException; import android.os.SystemClock; import android.text.format.DateUtils; -import androidx.core.os.BuildCompat; - import com.android.email.AttachmentInfo; import com.android.email.EmailConnectivityManager; -import com.android.email.EmailNotificationController; import com.android.email.NotificationControllerCreatorHolder; import com.android.email.NotificationController; -import com.android.email.R; import com.android.emailcommon.provider.Account; import com.android.emailcommon.provider.EmailContent; import com.android.emailcommon.provider.EmailContent.Attachment; @@ -126,10 +121,6 @@ public class AttachmentService extends Service implements Runnable { // Signify that we are being shut down & destroyed. private volatile boolean mStop = false; - // Indicates whether this service is currently running. Currently, only used for Android O+ to - // decide whether to call startForegroundService or startService in start method. - private static volatile boolean isRunning = false; - EmailConnectivityManager mConnectivityManager; // Helper class that keeps track of in progress downloads to make sure that they @@ -595,35 +586,7 @@ public class AttachmentService extends Service implements Runnable { debugTrace("Calling startService with extras %d & %d", id, flags); intent.putExtra(EXTRA_ATTACHMENT_ID, id); intent.putExtra(EXTRA_ATTACHMENT_FLAGS, flags); - start(context, intent); - } - - public static void startWithoutSpecificAttachmentChange(Context context) { - LogUtils.d(LOG_TAG, "Going to start AttachmentService without specifying an attachment."); - - Intent intent = new Intent(context, AttachmentService.class); - start(context, intent); - } - - /** - * Starts running attachment service. - * - * @param intent an intent set to run AttachmentService class - */ - public static void start(Context context, Intent intent) { - if (context.getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.O && - !isRunning) { - LogUtils.i(LOG_TAG, "startForegroundService"); - context.startForegroundService(intent); - } else { - LogUtils.i(LOG_TAG, "startService"); - context.startService(intent); - } - } - - public static void stop(Context context) { - Intent intent = new Intent(context, AttachmentService.class); - context.stopService(intent); + context.startService(intent); } /** @@ -659,16 +622,6 @@ public class AttachmentService extends Service implements Runnable { */ @Override public void onCreate() { - isRunning = true; - if (getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.O) { - LogUtils.i(LOG_TAG, "startForeground"); - startForeground( - EmailNotificationController.NOTIFICATION_ID_ONGOING_ATTACHMENT, - EmailNotificationController.getOngoingDownloadNotification( - getApplicationContext(), - getApplicationContext().getString( - R.string.notification_downloading_attachments_title))); - } // Start up our service thread. new Thread(this, "AttachmentService").start(); } @@ -696,7 +649,6 @@ public class AttachmentService extends Service implements Runnable { mConnectivityManager.stopWait(); mConnectivityManager = null; } - isRunning = false; } /** diff --git a/provider_src/com/android/email/service/EmailBroadcastProcessorService.java b/provider_src/com/android/email/service/EmailBroadcastProcessorService.java index 5d264f007..7aa54673e 100644 --- a/provider_src/com/android/email/service/EmailBroadcastProcessorService.java +++ b/provider_src/com/android/email/service/EmailBroadcastProcessorService.java @@ -17,6 +17,7 @@ package com.android.email.service; import android.accounts.AccountManager; +import android.app.IntentService; import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentUris; @@ -33,8 +34,6 @@ import android.provider.ContactsContract; import android.text.TextUtils; import android.text.format.DateUtils; -import androidx.core.app.JobIntentService; - import com.android.email.EmailIntentService; import com.android.email.Preferences; import com.android.email.R; @@ -70,9 +69,7 @@ import java.util.Set; * This also handles the DeviceAdminReceiver in SecurityPolicy, because it is also * a BroadcastReceiver and requires the same processing semantics. */ -public class EmailBroadcastProcessorService extends JobIntentService { - public static final int JOB_ID = 200; - +public class EmailBroadcastProcessorService extends IntentService { // Action used for BroadcastReceiver entry point private static final String ACTION_BROADCAST = "broadcast_receiver"; @@ -84,11 +81,11 @@ public class EmailBroadcastProcessorService extends JobIntentService { private static final String ACTION_UPGRADE_BROADCAST = "upgrade_broadcast_receiver"; public EmailBroadcastProcessorService() { - super(); - } + // Class name will be the thread name. + super(EmailBroadcastProcessorService.class.getName()); - public static void enqueueWork(Context context, Intent work) { - enqueueWork(context, EmailBroadcastProcessorService.class, JOB_ID, work); + // Intent should be redelivered if the process gets killed before completing the job. + setIntentRedelivery(true); } /** @@ -98,13 +95,13 @@ public class EmailBroadcastProcessorService extends JobIntentService { Intent i = new Intent(context, EmailBroadcastProcessorService.class); i.setAction(ACTION_BROADCAST); i.putExtra(Intent.EXTRA_INTENT, broadcastIntent); - EmailBroadcastProcessorService.enqueueWork(context, i); + context.startService(i); } public static void processUpgradeBroadcastIntent(final Context context) { final Intent i = new Intent(context, EmailBroadcastProcessorService.class); i.setAction(ACTION_UPGRADE_BROADCAST); - EmailBroadcastProcessorService.enqueueWork(context, i); + context.startService(i); } /** @@ -116,11 +113,11 @@ public class EmailBroadcastProcessorService extends JobIntentService { Intent i = new Intent(context, EmailBroadcastProcessorService.class); i.setAction(ACTION_DEVICE_POLICY_ADMIN); i.putExtra(EXTRA_DEVICE_POLICY_ADMIN, message); - EmailBroadcastProcessorService.enqueueWork(context, i); + context.startService(i); } @Override - protected void onHandleWork(Intent intent) { + protected void onHandleIntent(Intent intent) { // This method is called on a worker thread. // Dispatch from entry point diff --git a/res/values/strings.xml b/res/values/strings.xml index dd1d5c158..2f39425a4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -110,9 +110,6 @@ <!-- Notification title when a forwarded attachment couldn't be sent [CHAR LIMIT=30]--> <string name="forward_download_failed_title">Attachment not forwarded</string> - <!-- Notification title when an attachment is being downloaded on Android O and later [CHAR LIMIT=30] --> - <string name="notification_downloading_attachments_title">Syncing mail…</string> - <!-- Notification ticker when email account authentication fails [CHAR LIMIT=none] --> <string name="login_failed_ticker"> <xliff:g id="account_name">%s</xliff:g> signin unsuccessful.</string> diff --git a/src/com/android/email/EmailNotificationController.java b/src/com/android/email/EmailNotificationController.java index c9254adc4..6773f1bee 100644 --- a/src/com/android/email/EmailNotificationController.java +++ b/src/com/android/email/EmailNotificationController.java @@ -68,10 +68,6 @@ public class EmailNotificationController implements NotificationController { private static final int NOTIFICATION_ID_ATTACHMENT_WARNING = 3; private static final int NOTIFICATION_ID_PASSWORD_EXPIRING = 4; private static final int NOTIFICATION_ID_PASSWORD_EXPIRED = 5; - private static final int NOTIFICATION_ID_PERMISSIONS_NEEDED = 6; - public static final int NOTIFICATION_ID_ONGOING_ATTACHMENT = 7; - - public static final String NOTIFICATION_CHANNEL_ID_ATTACHMENTS = "^nc_~_z_attachments"; private static final int NOTIFICATION_ID_BASE_MASK = 0xF0000000; private static final int NOTIFICATION_ID_BASE_LOGIN_WARNING = 0x20000000; @@ -405,31 +401,6 @@ public class EmailNotificationController implements NotificationController { } /** - * Creates a notification to be used with {@link com.android.email.service.AttachmentService}, - * which should be launched as a foreground service on Android O+. - * - * <p>The notification is sent with the lowest priority and contains an indefinite loading bar, - * hence "ongoing". - * - * @param title The text that will be displayed on the ongoing notification. - */ - public static Notification getOngoingDownloadNotification(Context context, String title) { - NotificationCompat.Builder builder = - new NotificationCompat.Builder(context) - .setContentTitle(title) - .setVisibility(Notification.VISIBILITY_SECRET) - .setProgress(0, 0, true) - .setSmallIcon(R.drawable.ic_notification_mail_24dp) - .setOngoing(true); - - if (context.getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.O) { - builder.setChannelId(NOTIFICATION_CHANNEL_ID_ATTACHMENTS); - } - - return builder.build(); - } - - /** * Returns a notification ID for login failed notifications for the given account account. */ private static int getLoginFailedNotificationId(long accountId) { diff --git a/src/com/android/email/activity/ComposeActivityEmailExternal.java b/src/com/android/email/activity/ComposeActivityEmailExternal.java index a5cbe9d3a..a94313a86 100644 --- a/src/com/android/email/activity/ComposeActivityEmailExternal.java +++ b/src/com/android/email/activity/ComposeActivityEmailExternal.java @@ -49,6 +49,9 @@ public class ComposeActivityEmailExternal extends ComposeActivityEmail { Intent sanitizedIntent = getIntent(); if (sanitizedIntent != null) { Bundle originalExtras = sanitizedIntent.getExtras(); + if (originalExtras == null) { + originalExtras = new Bundle(); + } sanitizedIntent.replaceExtras(new Bundle()); copyStringExtraIfExists(ComposeActivity.EXTRA_SUBJECT, originalExtras, sanitizedIntent); copyStringExtraIfExists(ComposeActivity.EXTRA_TO, originalExtras, sanitizedIntent); |