summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-05-21 21:33:36 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-05-21 21:33:36 +0000
commitabfe28784c563258173f67002b5168ff2b599fea (patch)
treeedaa5b87d6e8b99b58bd455b6c37c54398872fa3
parente651a60db45b2c62763cff0629becfd8ff8ec818 (diff)
parent87c7caa4556d0b5c6342fed1c0913874a2449c49 (diff)
Merge "Finish DreamActivity on creation if it is obsolete" into tm-dev
-rw-r--r--core/java/android/service/dreams/DreamActivity.java5
-rw-r--r--core/java/android/service/dreams/DreamService.java36
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());
}
}