diff options
| author | 2022-02-23 15:28:14 +0000 | |
|---|---|---|
| committer | 2022-02-23 15:28:14 +0000 | |
| commit | 68453bc360a36ec129d20dcbf9725e5a08f53b79 (patch) | |
| tree | 971a3d0da9e25caa5c816fc3544d0d075cdc578b | |
| parent | de23e70472d14a7db73dae5014d7fa37a4e39b0d (diff) | |
| parent | 9b69bbaa30ff83bdcb19b783e4f0f22e84cd45a4 (diff) | |
Merge changes I26362ce1,I4ec34b99 into tm-dev
* changes:
Pipe the dream label to the dream overlay service.
Pipe the preview boolean to the dream overlay service.
6 files changed, 116 insertions, 34 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index f0a8b9e68b70..e64392b3b0c2 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2347,6 +2347,8 @@ package android.service.dreams { public abstract class DreamOverlayService extends android.app.Service { ctor public DreamOverlayService(); + method @Nullable public final CharSequence getDreamLabel(); + method public final boolean isPreviewMode(); method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent); method public abstract void onStartDream(@NonNull android.view.WindowManager.LayoutParams); method public final void requestExit(); diff --git a/core/java/android/service/dreams/DreamOverlayService.java b/core/java/android/service/dreams/DreamOverlayService.java index 163d6ed4b18b..bfc3b8b39385 100644 --- a/core/java/android/service/dreams/DreamOverlayService.java +++ b/core/java/android/service/dreams/DreamOverlayService.java @@ -36,6 +36,9 @@ public abstract class DreamOverlayService extends Service { private static final String TAG = "DreamOverlayService"; private static final boolean DEBUG = false; private boolean mShowComplications; + private boolean mIsPreviewMode; + @Nullable + private CharSequence mDreamLabel; private IDreamOverlay mDreamOverlay = new IDreamOverlay.Stub() { @Override @@ -56,6 +59,8 @@ public abstract class DreamOverlayService extends Service { public final IBinder onBind(@NonNull Intent intent) { mShowComplications = intent.getBooleanExtra(DreamService.EXTRA_SHOW_COMPLICATIONS, DreamService.DEFAULT_SHOW_COMPLICATIONS); + mIsPreviewMode = intent.getBooleanExtra(DreamService.EXTRA_IS_PREVIEW, false); + mDreamLabel = intent.getCharSequenceExtra(DreamService.EXTRA_DREAM_LABEL); return mDreamOverlay.asBinder(); } @@ -84,4 +89,19 @@ public abstract class DreamOverlayService extends Service { public final boolean shouldShowComplications() { return mShowComplications; } + + /** + * Returns whether the dream is running in preview mode. + */ + public final boolean isPreviewMode() { + return mIsPreviewMode; + } + + /** + * Returns the user-facing label of the currently running dream. + */ + @Nullable + public final CharSequence getDreamLabel() { + return mDreamLabel; + } } diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java index 345917220b6b..db622d39b785 100644 --- a/core/java/android/service/dreams/DreamService.java +++ b/core/java/android/service/dreams/DreamService.java @@ -216,6 +216,18 @@ public class DreamService extends Service implements Window.Callback { "android.service.dreams.SHOW_COMPLICATIONS"; /** + * Extra containing a boolean for whether we are showing this dream in preview mode. + * @hide + */ + public static final String EXTRA_IS_PREVIEW = "android.service.dreams.IS_PREVIEW"; + + /** + * The user-facing label of the current dream service. + * @hide + */ + public static final String EXTRA_DREAM_LABEL = "android.service.dreams.DREAM_LABEL"; + + /** * The default value for whether to show complications on the overlay. * @hide */ @@ -258,15 +270,19 @@ public class DreamService extends Service implements Window.Callback { } public void bind(Context context, @Nullable ComponentName overlayService, - ComponentName dreamService) { + ComponentName dreamService, boolean isPreviewMode) { if (overlayService == null) { return; } + final ServiceInfo serviceInfo = fetchServiceInfo(context, dreamService); + final Intent overlayIntent = new Intent(); overlayIntent.setComponent(overlayService); overlayIntent.putExtra(EXTRA_SHOW_COMPLICATIONS, - fetchShouldShowComplications(context, dreamService)); + fetchShouldShowComplications(context, serviceInfo)); + overlayIntent.putExtra(EXTRA_DREAM_LABEL, fetchDreamLabel(context, serviceInfo)); + overlayIntent.putExtra(EXTRA_IS_PREVIEW, isPreviewMode); context.bindService(overlayIntent, this, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE); @@ -988,8 +1004,11 @@ public class DreamService extends Service implements Window.Callback { // Connect to the overlay service if present. if (!mWindowless) { - mOverlayConnection.bind(this, intent.getParcelableExtra(EXTRA_DREAM_OVERLAY_COMPONENT), - new ComponentName(this, getClass())); + mOverlayConnection.bind( + /* context= */ this, + intent.getParcelableExtra(EXTRA_DREAM_OVERLAY_COMPONENT), + new ComponentName(this, getClass()), + intent.getBooleanExtra(EXTRA_IS_PREVIEW, /* defaultValue= */ false)); } return mDreamServiceWrapper; @@ -1111,7 +1130,10 @@ public class DreamService extends Service implements Window.Callback { * @hide */ @Nullable - public static DreamMetadata getDreamMetadata(Context context, ServiceInfo serviceInfo) { + public static DreamMetadata getDreamMetadata(Context context, + @Nullable ServiceInfo serviceInfo) { + if (serviceInfo == null) return null; + final PackageManager pm = context.getPackageManager(); final TypedArray rawMetadata = readMetadata(pm, serviceInfo); @@ -1350,22 +1372,33 @@ public class DreamService extends Service implements Window.Callback { * {@link DreamService#DEFAULT_SHOW_COMPLICATIONS}. */ private static boolean fetchShouldShowComplications(Context context, - ComponentName componentName) { + @Nullable ServiceInfo serviceInfo) { + final DreamMetadata metadata = getDreamMetadata(context, serviceInfo); + if (metadata != null) { + return metadata.showComplications; + } + return DEFAULT_SHOW_COMPLICATIONS; + } + + @Nullable + private static CharSequence fetchDreamLabel(Context context, + @Nullable ServiceInfo serviceInfo) { + if (serviceInfo == null) return null; + final PackageManager pm = context.getPackageManager(); + return serviceInfo.loadLabel(pm); + } + + @Nullable + private static ServiceInfo fetchServiceInfo(Context context, ComponentName componentName) { final PackageManager pm = context.getPackageManager(); try { - final ServiceInfo si = pm.getServiceInfo(componentName, + return pm.getServiceInfo(componentName, PackageManager.ComponentInfoFlags.of(PackageManager.GET_META_DATA)); - final DreamMetadata metadata = getDreamMetadata(context, si); - - if (metadata != null) { - return metadata.showComplications; - } } catch (PackageManager.NameNotFoundException e) { if (DEBUG) Log.w(TAG, "cannot find component " + componentName.flattenToShortString()); } - - return DEFAULT_SHOW_COMPLICATIONS; + return null; } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java index 58ffbfa76328..15aaf5fa8e42 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java @@ -163,6 +163,31 @@ public class DreamOverlayServiceTest extends SysuiTestCase { } @Test + public void testPreviewModeFalseByDefault() { + mService.onBind(new Intent()); + + assertThat(mService.isPreviewMode()).isFalse(); + } + + @Test + public void testPreviewModeSetByIntentExtra() { + final Intent intent = new Intent(); + intent.putExtra(DreamService.EXTRA_IS_PREVIEW, true); + mService.onBind(intent); + + assertThat(mService.isPreviewMode()).isTrue(); + } + + @Test + public void testDreamLabel() { + final Intent intent = new Intent(); + intent.putExtra(DreamService.EXTRA_DREAM_LABEL, "TestDream"); + mService.onBind(intent); + + assertThat(mService.getDreamLabel()).isEqualTo("TestDream"); + } + + @Test public void testDestroy() { mService.onDestroy(); mMainExecutor.runAllReady(); diff --git a/services/core/java/com/android/server/dreams/DreamController.java b/services/core/java/com/android/server/dreams/DreamController.java index 76754d3e95d5..4a1a950c6a07 100644 --- a/services/core/java/com/android/server/dreams/DreamController.java +++ b/services/core/java/com/android/server/dreams/DreamController.java @@ -104,7 +104,7 @@ final class DreamController { pw.println(" mCurrentDream:"); pw.println(" mToken=" + mCurrentDream.mToken); pw.println(" mName=" + mCurrentDream.mName); - pw.println(" mIsTest=" + mCurrentDream.mIsTest); + pw.println(" mIsPreviewMode=" + mCurrentDream.mIsPreviewMode); pw.println(" mCanDoze=" + mCurrentDream.mCanDoze); pw.println(" mUserId=" + mCurrentDream.mUserId); pw.println(" mBound=" + mCurrentDream.mBound); @@ -117,7 +117,7 @@ final class DreamController { } public void startDream(Binder token, ComponentName name, - boolean isTest, boolean canDoze, int userId, PowerManager.WakeLock wakeLock, + boolean isPreviewMode, boolean canDoze, int userId, PowerManager.WakeLock wakeLock, ComponentName overlayComponentName) { stopDream(true /*immediate*/, "starting new dream"); @@ -127,10 +127,10 @@ final class DreamController { mContext.sendBroadcastAsUser(mCloseNotificationShadeIntent, UserHandle.ALL); Slog.i(TAG, "Starting dream: name=" + name - + ", isTest=" + isTest + ", canDoze=" + canDoze + + ", isPreviewMode=" + isPreviewMode + ", canDoze=" + canDoze + ", userId=" + userId); - mCurrentDream = new DreamRecord(token, name, isTest, canDoze, userId, wakeLock); + mCurrentDream = new DreamRecord(token, name, isPreviewMode, canDoze, userId, wakeLock); mDreamStartTime = SystemClock.elapsedRealtime(); MetricsLogger.visible(mContext, @@ -140,6 +140,7 @@ final class DreamController { intent.setComponent(name); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); intent.putExtra(DreamService.EXTRA_DREAM_OVERLAY_COMPONENT, overlayComponentName); + intent.putExtra(DreamService.EXTRA_IS_PREVIEW, isPreviewMode); try { if (!mContext.bindServiceAsUser(intent, mCurrentDream, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE, @@ -190,7 +191,8 @@ final class DreamController { final DreamRecord oldDream = mCurrentDream; mCurrentDream = null; Slog.i(TAG, "Stopping dream: name=" + oldDream.mName - + ", isTest=" + oldDream.mIsTest + ", canDoze=" + oldDream.mCanDoze + + ", isPreviewMode=" + oldDream.mIsPreviewMode + + ", canDoze=" + oldDream.mCanDoze + ", userId=" + oldDream.mUserId + ", reason='" + reason + "'" + (mSavedStopReason == null ? "" : "(from '" + mSavedStopReason + "')")); @@ -247,7 +249,7 @@ final class DreamController { mCurrentDream.mService = service; - if (!mCurrentDream.mIsTest) { + if (!mCurrentDream.mIsPreviewMode) { mContext.sendBroadcastAsUser(mDreamingStartedIntent, UserHandle.ALL); mCurrentDream.mSentStartBroadcast = true; } @@ -263,7 +265,7 @@ final class DreamController { private final class DreamRecord implements DeathRecipient, ServiceConnection { public final Binder mToken; public final ComponentName mName; - public final boolean mIsTest; + public final boolean mIsPreviewMode; public final boolean mCanDoze; public final int mUserId; @@ -275,11 +277,11 @@ final class DreamController { public boolean mWakingGently; - public DreamRecord(Binder token, ComponentName name, - boolean isTest, boolean canDoze, int userId, PowerManager.WakeLock wakeLock) { + DreamRecord(Binder token, ComponentName name, boolean isPreviewMode, + boolean canDoze, int userId, PowerManager.WakeLock wakeLock) { mToken = token; mName = name; - mIsTest = isTest; + mIsPreviewMode = isPreviewMode; mCanDoze = canDoze; mUserId = userId; mWakeLock = wakeLock; diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index f0a6af3c8834..22d32a665611 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -87,7 +87,7 @@ public final class DreamManagerService extends SystemService { private Binder mCurrentDreamToken; private ComponentName mCurrentDreamName; private int mCurrentDreamUserId; - private boolean mCurrentDreamIsTest; + private boolean mCurrentDreamIsPreview; private boolean mCurrentDreamCanDoze; private boolean mCurrentDreamIsDozing; private boolean mCurrentDreamIsWaking; @@ -169,7 +169,7 @@ public final class DreamManagerService extends SystemService { pw.println("mCurrentDreamToken=" + mCurrentDreamToken); pw.println("mCurrentDreamName=" + mCurrentDreamName); pw.println("mCurrentDreamUserId=" + mCurrentDreamUserId); - pw.println("mCurrentDreamIsTest=" + mCurrentDreamIsTest); + pw.println("mCurrentDreamIsPreview=" + mCurrentDreamIsPreview); pw.println("mCurrentDreamCanDoze=" + mCurrentDreamCanDoze); pw.println("mCurrentDreamIsDozing=" + mCurrentDreamIsDozing); pw.println("mCurrentDreamIsWaking=" + mCurrentDreamIsWaking); @@ -190,7 +190,7 @@ public final class DreamManagerService extends SystemService { private boolean isDreamingInternal() { synchronized (mLock) { - return mCurrentDreamToken != null && !mCurrentDreamIsTest + return mCurrentDreamToken != null && !mCurrentDreamIsPreview && !mCurrentDreamIsWaking; } } @@ -235,7 +235,7 @@ public final class DreamManagerService extends SystemService { private void testDreamInternal(ComponentName dream, int userId) { synchronized (mLock) { - startDreamLocked(dream, true /*isTest*/, false /*canDoze*/, userId); + startDreamLocked(dream, true /*isPreviewMode*/, false /*canDoze*/, userId); } } @@ -244,7 +244,7 @@ public final class DreamManagerService extends SystemService { final ComponentName dream = chooseDreamForUser(doze, userId); if (dream != null) { synchronized (mLock) { - startDreamLocked(dream, false /*isTest*/, doze, userId); + startDreamLocked(dream, false /*isPreviewMode*/, doze, userId); } } } @@ -395,10 +395,10 @@ public final class DreamManagerService extends SystemService { } private void startDreamLocked(final ComponentName name, - final boolean isTest, final boolean canDoze, final int userId) { + final boolean isPreviewMode, final boolean canDoze, final int userId) { if (!mCurrentDreamIsWaking && Objects.equals(mCurrentDreamName, name) - && mCurrentDreamIsTest == isTest + && mCurrentDreamIsPreview == isPreviewMode && mCurrentDreamCanDoze == canDoze && mCurrentDreamUserId == userId) { Slog.i(TAG, "Already in target dream."); @@ -412,7 +412,7 @@ public final class DreamManagerService extends SystemService { final Binder newToken = new Binder(); mCurrentDreamToken = newToken; mCurrentDreamName = name; - mCurrentDreamIsTest = isTest; + mCurrentDreamIsPreview = isPreviewMode; mCurrentDreamCanDoze = canDoze; mCurrentDreamUserId = userId; @@ -424,7 +424,7 @@ public final class DreamManagerService extends SystemService { .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "startDream"); mHandler.post(wakeLock.wrap(() -> { mAtmInternal.notifyDreamStateChanged(true); - mController.startDream(newToken, name, isTest, canDoze, userId, wakeLock, + mController.startDream(newToken, name, isPreviewMode, canDoze, userId, wakeLock, mDreamOverlayServiceName); })); } @@ -457,7 +457,7 @@ public final class DreamManagerService extends SystemService { } mCurrentDreamToken = null; mCurrentDreamName = null; - mCurrentDreamIsTest = false; + mCurrentDreamIsPreview = false; mCurrentDreamCanDoze = false; mCurrentDreamUserId = 0; mCurrentDreamIsWaking = false; |