Merge "Finish DreamActivity on creation if it is obsolete" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-05-21 21:33:36 +00:00
committed by Android (Google) Code Review
2 changed files with 34 additions and 7 deletions

View File

@@ -58,8 +58,9 @@ public class DreamActivity extends Activity {
setTitle(title); setTitle(title);
} }
DreamService.DreamServiceWrapper callback = final Bundle extras = getIntent().getExtras();
(DreamService.DreamServiceWrapper) getIntent().getIBinderExtra(EXTRA_CALLBACK); final DreamService.DreamActivityCallback callback =
(DreamService.DreamActivityCallback) extras.getBinder(EXTRA_CALLBACK);
if (callback != null) { if (callback != null) {
callback.onActivityCreated(this); callback.onActivityCreated(this);

View File

@@ -36,6 +36,7 @@ import android.content.pm.ServiceInfo;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.content.res.XmlResourceParser; import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Binder;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
@@ -1272,7 +1273,7 @@ public class DreamService extends Service implements Window.Callback {
Intent i = new Intent(this, DreamActivity.class); Intent i = new Intent(this, DreamActivity.class);
i.setPackage(getApplicationContext().getPackageName()); i.setPackage(getApplicationContext().getPackageName());
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 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, final ServiceInfo serviceInfo = fetchServiceInfo(this,
new ComponentName(this, getClass())); new ComponentName(this, getClass()));
i.putExtra(DreamActivity.EXTRA_DREAM_TITLE, fetchDreamLabel(this, serviceInfo)); i.putExtra(DreamActivity.EXTRA_DREAM_TITLE, fetchDreamLabel(this, serviceInfo));
@@ -1452,11 +1453,36 @@ public class DreamService extends Service implements Window.Callback {
public void wakeUp() { public void wakeUp() {
mHandler.post(() -> DreamService.this.wakeUp(true /*fromSystem*/)); mHandler.post(() -> DreamService.this.wakeUp(true /*fromSystem*/));
} }
}
/** @hide */ /** @hide */
void onActivityCreated(DreamActivity a) { final class DreamActivityCallback extends Binder {
mActivity = a; private final IBinder mActivityDreamToken;
onWindowCreated(a.getWindow());
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;
}
mActivity = activity;
onWindowCreated(activity.getWindow());
} }
} }