Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68453bc3 authored by Lucas Silva's avatar Lucas Silva Committed by Android (Google) Code Review
Browse files

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.
parents de23e704 9b69bbaa
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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();
+20 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+47 −14
Original line number Diff line number Diff line
@@ -215,6 +215,18 @@ public class DreamService extends Service implements Window.Callback {
    public static final String EXTRA_SHOW_COMPLICATIONS =
            "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
+25 −0
Original line number Diff line number Diff line
@@ -162,6 +162,31 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
        assertThat(mService.shouldShowComplications()).isFalse();
    }

    @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();
+12 −10
Original line number Diff line number Diff line
@@ -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;
Loading