diff options
4 files changed, 55 insertions, 11 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index bfc9c352848b..3c0ea10a2a50 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2347,6 +2347,7 @@ 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); diff --git a/core/java/android/service/dreams/DreamOverlayService.java b/core/java/android/service/dreams/DreamOverlayService.java index 540cfce1c5f5..bfc3b8b39385 100644 --- a/core/java/android/service/dreams/DreamOverlayService.java +++ b/core/java/android/service/dreams/DreamOverlayService.java @@ -37,6 +37,8 @@ public abstract class DreamOverlayService extends Service { private static final boolean DEBUG = false; private boolean mShowComplications; private boolean mIsPreviewMode; + @Nullable + private CharSequence mDreamLabel; private IDreamOverlay mDreamOverlay = new IDreamOverlay.Stub() { @Override @@ -58,6 +60,7 @@ public abstract class DreamOverlayService extends Service { 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(); } @@ -93,4 +96,12 @@ public abstract class DreamOverlayService extends Service { 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 47dc7e0c6a2e..db622d39b785 100644 --- a/core/java/android/service/dreams/DreamService.java +++ b/core/java/android/service/dreams/DreamService.java @@ -222,6 +222,12 @@ public class DreamService extends Service implements Window.Callback { 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 */ @@ -269,10 +275,13 @@ public class DreamService extends Service implements Window.Callback { 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, @@ -1121,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); @@ -1360,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 a7a7c2e03d65..15aaf5fa8e42 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java @@ -179,6 +179,15 @@ public class DreamOverlayServiceTest extends SysuiTestCase { } @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(); |