diff options
| author | 2022-05-21 21:33:36 +0000 | |
|---|---|---|
| committer | 2022-05-21 21:33:36 +0000 | |
| commit | abfe28784c563258173f67002b5168ff2b599fea (patch) | |
| tree | edaa5b87d6e8b99b58bd455b6c37c54398872fa3 | |
| parent | e651a60db45b2c62763cff0629becfd8ff8ec818 (diff) | |
| parent | 87c7caa4556d0b5c6342fed1c0913874a2449c49 (diff) | |
Merge "Finish DreamActivity on creation if it is obsolete" into tm-dev
| -rw-r--r-- | core/java/android/service/dreams/DreamActivity.java | 5 | ||||
| -rw-r--r-- | core/java/android/service/dreams/DreamService.java | 36 |
2 files changed, 34 insertions, 7 deletions
diff --git a/core/java/android/service/dreams/DreamActivity.java b/core/java/android/service/dreams/DreamActivity.java index cf4e6a6da96e..bf64d06d4ff0 100644 --- a/core/java/android/service/dreams/DreamActivity.java +++ b/core/java/android/service/dreams/DreamActivity.java @@ -58,8 +58,9 @@ public class DreamActivity extends Activity { setTitle(title); } - DreamService.DreamServiceWrapper callback = - (DreamService.DreamServiceWrapper) getIntent().getIBinderExtra(EXTRA_CALLBACK); + final Bundle extras = getIntent().getExtras(); + final DreamService.DreamActivityCallback callback = + (DreamService.DreamActivityCallback) extras.getBinder(EXTRA_CALLBACK); if (callback != null) { callback.onActivityCreated(this); diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java index 47fc120c9d4f..5217b28942f8 100644 --- a/core/java/android/service/dreams/DreamService.java +++ b/core/java/android/service/dreams/DreamService.java @@ -36,6 +36,7 @@ import android.content.pm.ServiceInfo; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; +import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.IBinder; @@ -1272,7 +1273,7 @@ public class DreamService extends Service implements Window.Callback { Intent i = new Intent(this, DreamActivity.class); i.setPackage(getApplicationContext().getPackageName()); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - i.putExtra(DreamActivity.EXTRA_CALLBACK, mDreamServiceWrapper); + i.putExtra(DreamActivity.EXTRA_CALLBACK, new DreamActivityCallback(mDreamToken)); final ServiceInfo serviceInfo = fetchServiceInfo(this, new ComponentName(this, getClass())); i.putExtra(DreamActivity.EXTRA_DREAM_TITLE, fetchDreamLabel(this, serviceInfo)); @@ -1452,11 +1453,36 @@ public class DreamService extends Service implements Window.Callback { public void wakeUp() { mHandler.post(() -> DreamService.this.wakeUp(true /*fromSystem*/)); } + } + + /** @hide */ + final class DreamActivityCallback extends Binder { + private final IBinder mActivityDreamToken; + + DreamActivityCallback(IBinder token) { + mActivityDreamToken = token; + } + + void onActivityCreated(DreamActivity activity) { + if (mActivityDreamToken != mDreamToken || mFinished) { + Slog.d(TAG, "DreamActivity was created after the dream was finished or " + + "a new dream started, finishing DreamActivity"); + if (!activity.isFinishing()) { + activity.finishAndRemoveTask(); + } + return; + } + if (mActivity != null) { + Slog.w(TAG, "A DreamActivity has already been started, " + + "finishing latest DreamActivity"); + if (!activity.isFinishing()) { + activity.finishAndRemoveTask(); + } + return; + } - /** @hide */ - void onActivityCreated(DreamActivity a) { - mActivity = a; - onWindowCreated(a.getWindow()); + mActivity = activity; + onWindowCreated(activity.getWindow()); } } |