AOSP/Messaging - update the Messaging version to target P (28) or higher.

Use JobIntentService to start the Backgroundworkerservice and
ActionServiceImpl services.

+ Deleted WakeLock code.
+ Made changes to com.android.messaging.test tests so that all tests
  pass with the new JobService. I am not sure if these tests passed
  before these changes.
+ CTS tests passed without any changes.
+ Added TEST_MAPPING file for presubmit tests.

Bug: 115499280
Bug: 119503204

Test: manual - Tested the messaging UI. Ran the following CTS tests on Pixel phone.

$ make -j 40
  rw-r--r-- 1 rtenneti primarygroup 8624061 Feb 19 12:37 out/target/product/marlin/system/app/messaging/messaging.apk

$ make messagingtests -j
  -rw-r--r-- 1 rtenneti primarygroup 729713 Feb 19 12:52 out/target/product/marlin/testcases/messagingtests/messagingtests.apk

$ adb install -r -d out/target/product/marlin/system/app/messaging/messaging.apk

$ adb install -r -d out/target/product/marlin/testcases/messagingtests/messagingtests.apk

$ adb shell am instrument -w com.android.messaging.test
  Test results for InstrumentationTestRunner=...........
  Time: 13.353
  OK (113 tests)

CTS tests for Mesaging app
---------------------------
$ ./development/testrunner/runtest.py --path cts/tests/app/src/android/app/cts/NotificationTest.java
  android.app.cts.NotificationTest:...........................
  Time: 0.299
  OK (27 tests)

atest
-----
$ cd .../packages/apps/Messaging
$ atest
  Running Tests...
  messagingtests (113 Tests)
  -------------------------
  ...
  [113/113] com.android.messaging.util.YouTubeUtilTest#testGetYoutubePreviewImageLink: PASSED (2ms)

  Results from tests that require device:

  Summary
  -------
  messagingtests: Passed: 113, Failed: 0, Ignored: 0

  All tests passed!

Change-Id: I9494f0750954e6364abb695aa867494669ae54c4
This commit is contained in:
Raman Tenneti
2019-02-12 20:15:13 -08:00
parent 1b693ea7df
commit cdf40bb061
9 changed files with 100 additions and 131 deletions

View File

@@ -17,7 +17,6 @@
package com.android.messaging.datamodel.action;
import android.app.AlarmManager;
import android.app.IntentService;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -25,22 +24,29 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import androidx.core.app.JobIntentService;
import com.android.messaging.Factory;
import com.android.messaging.datamodel.DataModel;
import com.android.messaging.util.ConnectivityUtil;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.LoggingTimer;
import com.android.messaging.util.WakeLockHelper;
import com.google.common.annotations.VisibleForTesting;
/**
* ActionService used to perform background processing for data model
*/
public class ActionServiceImpl extends IntentService {
public class ActionServiceImpl extends JobIntentService {
private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
private static final boolean VERBOSE = false;
/**
* Unique job ID for this service.
*/
public static final int JOB_ID = 1000;
public ActionServiceImpl() {
super("ActionService");
super();
}
/**
@@ -128,6 +134,7 @@ public class ActionServiceImpl extends IntentService {
protected static final String BUNDLE_ACTION = "bundle_action";
private BackgroundWorker mBackgroundWorker;
private ConnectivityUtil mConnectivityUtil;
/**
* Allocate an intent with a specific opcode.
@@ -206,90 +213,70 @@ public class ActionServiceImpl extends IntentService {
public void onCreate() {
super.onCreate();
mBackgroundWorker = DataModel.get().getBackgroundWorkerForActionService();
DataModel.get().getConnectivityUtil().registerForSignalStrength();
mConnectivityUtil = DataModel.get().getConnectivityUtil();
mConnectivityUtil.registerForSignalStrength();
}
@Override
public void onDestroy() {
super.onDestroy();
DataModel.get().getConnectivityUtil().unregisterForSignalStrength();
mConnectivityUtil.unregisterForSignalStrength();
}
private static final String WAKELOCK_ID = "bugle_datamodel_service_wakelock";
@VisibleForTesting
static WakeLockHelper sWakeLock = new WakeLockHelper(WAKELOCK_ID);
/**
* Queue intent to the ActionService after acquiring wake lock
* Queue intent to the ActionService.
*/
private static void startServiceWithIntent(final Intent intent) {
final Context context = Factory.get().getApplicationContext();
final int opcode = intent.getIntExtra(EXTRA_OP_CODE, 0);
// Increase refCount on wake lock - acquiring if necessary
if (VERBOSE) {
LogUtil.v(TAG, "acquiring wakelock for opcode " + opcode);
}
sWakeLock.acquire(context, intent, opcode);
intent.setClass(context, ActionServiceImpl.class);
enqueueWork(context, intent);
}
// TODO: Note that intent will be quietly discarded if it exceeds available rpc
// memory (in total around 1MB). See this article for background
// http://developer.android.com/reference/android/os/TransactionTooLargeException.html
// Perhaps we should keep large structures in the action monitor?
if (context.startService(intent) == null) {
LogUtil.e(TAG,
"ActionService.startServiceWithIntent: failed to start service for intent "
+ intent);
sWakeLock.release(intent, opcode);
}
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, ActionServiceImpl.class, JOB_ID, work);
}
/**
* {@inheritDoc}
*/
@Override
protected void onHandleIntent(final Intent intent) {
protected void onHandleWork(final Intent intent) {
if (intent == null) {
// Shouldn't happen but sometimes does following another crash.
LogUtil.w(TAG, "ActionService.onHandleIntent: Called with null intent");
return;
}
final int opcode = intent.getIntExtra(EXTRA_OP_CODE, 0);
sWakeLock.ensure(intent, opcode);
try {
Action action;
final Bundle actionBundle = intent.getBundleExtra(EXTRA_ACTION_BUNDLE);
actionBundle.setClassLoader(getClassLoader());
switch(opcode) {
case OP_START_ACTION: {
action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
executeAction(action);
break;
}
case OP_RECEIVE_BACKGROUND_RESPONSE: {
action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
final Bundle response = intent.getBundleExtra(EXTRA_WORKER_RESPONSE);
processBackgroundResponse(action, response);
break;
}
case OP_RECEIVE_BACKGROUND_FAILURE: {
action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
processBackgroundFailure(action);
break;
}
default:
throw new RuntimeException("Unrecognized opcode in ActionServiceImpl");
Action action;
final Bundle actionBundle = intent.getBundleExtra(EXTRA_ACTION_BUNDLE);
actionBundle.setClassLoader(getClassLoader());
switch(opcode) {
case OP_START_ACTION: {
action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
executeAction(action);
break;
}
action.sendBackgroundActions(mBackgroundWorker);
} finally {
// Decrease refCount on wake lock - releasing if necessary
sWakeLock.release(intent, opcode);
case OP_RECEIVE_BACKGROUND_RESPONSE: {
action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
final Bundle response = intent.getBundleExtra(EXTRA_WORKER_RESPONSE);
processBackgroundResponse(action, response);
break;
}
case OP_RECEIVE_BACKGROUND_FAILURE: {
action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
processBackgroundFailure(action);
break;
}
default:
throw new RuntimeException("Unrecognized opcode in ActionServiceImpl");
}
action.sendBackgroundActions(mBackgroundWorker);
}
private static final long EXECUTION_TIME_WARN_LIMIT_MS = 1000; // 1 second