summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml6
-rw-r--r--provider_src/com/android/email/EmailIntentService.java6
-rw-r--r--provider_src/com/android/email/provider/EmailProvider.java12
-rw-r--r--provider_src/com/android/email/service/AttachmentService.java50
-rw-r--r--provider_src/com/android/email/service/EmailBroadcastProcessorService.java23
-rw-r--r--res/values/strings.xml3
-rw-r--r--src/com/android/email/EmailNotificationController.java29
-rw-r--r--src/com/android/email/activity/ComposeActivityEmailExternal.java3
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&#8230;</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);