summaryrefslogtreecommitdiff
path: root/services/appwidget
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2018-07-27 16:48:37 -0700
committerChristopher Tate <ctate@google.com>2018-08-10 10:54:00 -0700
commit88dc93f1ccb2cff27ae642a254aa5f5d702ab774 (patch)
tree0e4f76a7f47ee1e4767bcd914fc04b5f0f63c10c /services/appwidget
parent1ff73729b81f88788900206d5d47a6ff9b7b1761 (diff)
Send widget registration broadcasts before BOOT_COMPLETE
Widget presence in the home app is important for usability, but it depends on a broadcast-based handshake at boot time. This handshake occurring after the BOOT_COMPLETED broadcast was initiated means that in practice widgets may not become available for literal minutes following unlock, as it can take this long for the boot-complete broadcast to clear and let the systen proceed with dispatch of the widget handshakes. We address this by hoisting the widget setup broadcast to occur just *before* the boot-completed broadcast, rather than as part of general listener reaction to the global "this user has been unlocked" notification. Bug: 76154638 Test: manual (note broadcast ordering following boot) Change-Id: I7c1a9f7a84fee71f71d2dcd52362a29c2436b01d
Diffstat (limited to 'services/appwidget')
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetService.java5
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java16
2 files changed, 13 insertions, 8 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
index c9c7adc45697..f69b6387a605 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
@@ -48,11 +48,6 @@ public class AppWidgetService extends SystemService {
}
@Override
- public void onUnlockUser(int userHandle) {
- FgThread.getHandler().post(() -> mImpl.onUserUnlocked(userHandle));
- }
-
- @Override
public void onStopUser(int userHandle) {
mImpl.onUserStopped(userHandle);
}
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index db8ad12cfdf8..b71d7a726b28 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -19,7 +19,6 @@ package com.android.server.appwidget;
import static android.content.Context.KEYGUARD_SERVICE;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-
import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
import android.annotation.UserIdInt;
@@ -2697,7 +2696,12 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
}
- void onUserUnlocked(int userId) {
+ /**
+ * This does not use the usual onUserUnlocked() listener mechanism because it is
+ * invoked at a choreographed point in the middle of the user unlock sequence,
+ * before the boot-completed broadcast is issued and the listeners notified.
+ */
+ void handleUserUnlocked(int userId) {
if (isProfileWithLockedParent(userId)) {
return;
}
@@ -2734,7 +2738,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
}
}
- Slog.i(TAG, "Async processing of onUserUnlocked u" + userId + " took "
+ Slog.i(TAG, "Processing of handleUserUnlocked u" + userId + " took "
+ (SystemClock.elapsedRealtime() - time) + " ms");
}
@@ -4801,5 +4805,11 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
return widgetPackages;
}
}
+
+ @Override
+ public void unlockUser(int userId) {
+ handleUserUnlocked(userId);
+ }
+
}
}