OSDN Git Service

AnalyticsService: handle AOSP's ACTION_BOOT_COMPLETED directly
authorChih-Wei Huang <cwhuang@linux.org.tw>
Tue, 17 Oct 2017 08:23:34 +0000 (16:23 +0800)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Wed, 18 Oct 2017 10:29:31 +0000 (18:29 +0800)
I don't understand why it emits another custom ACTION_BOOT_COMPLETED
to do the work indirectly. It's totatly broken in Nougat.
The ActivityManager complains:

10-17 08:03:38.950  1426  1951 E ActivityManager: Sending non-protected broadcast org.android_x86.boot_completed from system 1985:org.android_x86.analytics/u0a0 pkg org.android_x86.analytics
10-17 08:03:38.950  1426  1951 E ActivityManager: java.lang.Throwable
10-17 08:03:38.950  1426  1951 E ActivityManager:       at com.android.server.am.ActivityManagerService.checkBroadcastFromSystem(ActivityManagerService.java:17927)
10-17 08:03:38.950  1426  1951 E ActivityManager:       at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:18499)
10-17 08:03:38.950  1426  1951 E ActivityManager:       at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:18590)
10-17 08:03:38.950  1426  1951 E ActivityManager:       at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:499)
10-17 08:03:38.950  1426  1951 E ActivityManager:       at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2806)
10-17 08:03:38.950  1426  1951 E ActivityManager:       at android.os.Binder.execTransact(Binder.java:565)

Fix it by removing the custom ACTION_BOOT_COMPLETED and handle
ACTION_BOOT_COMPLETED of AOSP directly.

Service/src/org/android_x86/analytics/AnalyticsService.java
Service/src/org/android_x86/analytics/BootCompletedReceiver.java
Utils/src/org/android_x86/analytics/AnalyticsHelper.java

index 66b6fd3..680b4f3 100644 (file)
@@ -95,9 +95,6 @@ public class AnalyticsService extends ImmortalIntentService {
                 } else if (Intent.ACTION_SHUTDOWN.equals(action)) {
                     AnalyticsHelper.onShutdown(getBaseContext());
                     PowerStats.onScreenOff(context);
-                } else if (BootCompletedReceiver.ACTION_BOOT_COMPLETED.equals(action)) {
-                    AnalyticsHelper.onBootCompleted(getBaseContext());
-                    PowerStats.onScreenOn(context);
                 } else if (Intent.ACTION_POWER_CONNECTED.equals(action)) {
                     PowerStats.onPowerConnected(context);
                 } else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
@@ -111,7 +108,6 @@ public class AnalyticsService extends ImmortalIntentService {
         filter.addAction(Intent.ACTION_SCREEN_OFF);
         filter.addAction(Intent.ACTION_SCREEN_ON);
         filter.addAction(Intent.ACTION_SHUTDOWN);
-        filter.addAction(BootCompletedReceiver.ACTION_BOOT_COMPLETED);
         filter.addAction(BootCompletedReceiver.ACTION_SEND_LOGS);
         filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
         filter.addAction(Intent.ACTION_POWER_CONNECTED);
@@ -135,6 +131,11 @@ public class AnalyticsService extends ImmortalIntentService {
             eventHandler.onEvent(intent);
         } else if (!Intent.ACTION_BOOT_COMPLETED.equals(action)){
             Log.w(TAG, "unknow action :" + action);
+        } else {
+            // save boot completed time
+            saveScreenChangeTime(getCurrentTimeInSeconds());
+            onBootCompleted(intent);
+            PowerStats.onScreenOn(getBaseContext());
         }
         if (LOG) {
             Log.d(TAG, "Handle Intent: " + Util.toString(intent));
@@ -306,15 +307,6 @@ public class AnalyticsService extends ImmortalIntentService {
                 onHitScreen(intent);
             }
         });
-        mStaticEventHandlers.put(AnalyticsHelper.ACTION_BOOT_COMPLETED, new EventHandler() {
-            @Override
-            void onEvent(Intent intent) {
-                // save boot completed time
-                saveScreenChangeTime(getCurrentTimeInSeconds());
-
-                onBootCompleted(intent);
-            }
-        });
         mStaticEventHandlers.put(AnalyticsHelper.ACTION_SHUTDOWN, new EventHandler() {
             @Override
             void onEvent(Intent intent) {
index 495738e..5bd13d6 100644 (file)
@@ -31,23 +31,16 @@ import org.android_x86.analytics.AnalyticsHelper;
 public class BootCompletedReceiver extends BroadcastReceiver {
     private static final String TAG = "BootCompletedReceiver";
 
-    public static final String ACTION_BOOT_COMPLETED = "org.android_x86.boot_completed";
     public static final String ACTION_SEND_LOGS = "org.android_x86.send_logs";
 
     @Override
     public void onReceive(Context context, Intent data) {
         String action = data.getAction();
-        Intent startIntent = new Intent(action);
-        startIntent.setComponent(
-                new ComponentName(
-                        AnalyticsHelper.TARGET_PACKAGE_NAME,
-                        AnalyticsHelper.TARGET_CLASS_NAME));
         if (!Intent.ACTION_BOOT_COMPLETED.equals(action)) {
             Log.w(TAG, "unknow action:" + action);
             return;
         }
-        context.startService(startIntent);
-        context.sendBroadcast(new Intent(ACTION_BOOT_COMPLETED));
+        AnalyticsHelper.onBootCompleted(context);
 
         // Set alarm to send logs periodically
         AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
index 5af6af8..64c4f5b 100644 (file)
@@ -47,7 +47,6 @@ public class AnalyticsHelper {
     public static final String ACTION_HIT_SCREEN = "org.android_x86.hit_screen";
     public static final String ACTION_SCREEN_ON = "org.android_x86.screen_on";
     public static final String ACTION_SCREEN_OFF = "org.android_x86.screen_off";
-    public static final String ACTION_BOOT_COMPLETED = "org.android_x86.boot_completed";
     public static final String ACTION_SHUTDOWN = "org.android_x86.shutdown";
     public static final String ACTION_EXCEPTION = "org.android_x86.exception";
     public static final String ACTION_CUSTOM_EVENT = "org.android_x86.custom_event";
@@ -178,7 +177,7 @@ public class AnalyticsHelper {
 
     public static void onBootCompleted(Context context) {
         Intent intent = getIntent();
-        intent.setAction(ACTION_BOOT_COMPLETED);
+        intent.setAction(Intent.ACTION_BOOT_COMPLETED);
         context.startService(intent);
     }