summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Issei Suzuki <issei@google.com> 2020-06-19 18:14:33 +0200
committer Issei Suzuki <issei@google.com> 2020-06-19 18:14:33 +0200
commitea5bec73f4747df00cc30804f085dd4cf6564275 (patch)
tree560a2815e612e000f50523ea0ab2bcbbf551abbc
parent0109b8da495587167770a68cab2761b1aebbb006 (diff)
Update virtual display size before turning it on.
When a bubble is expanded, a virtual display turns on, an activity for the bubble is resumed, and the activity draws contents on the virtual display. The system waits until the contents is drawn, then shows the contents in the bubble. However, if size of the virtual display is changed after resuming the activity, an app transition initiated by the activity is canceled, and this sequence gets stuck. As a result, contents in the bubble is never displayed. Test: Manual. Bug: 158675422 Change-Id: I3ba0805fd09f4dee36dae6a236b5b6fc7983e06b
-rw-r--r--core/java/android/app/ActivityView.java18
1 files changed, 16 insertions, 2 deletions
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java
index d650bbcdfa33..03a3a153129f 100644
--- a/core/java/android/app/ActivityView.java
+++ b/core/java/android/app/ActivityView.java
@@ -33,7 +33,10 @@ import android.hardware.display.VirtualDisplay;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.AttributeSet;
+import android.util.DisplayMetrics;
import android.util.Log;
+import android.view.Display;
+import android.view.DisplayInfo;
import android.view.IWindow;
import android.view.IWindowManager;
import android.view.KeyEvent;
@@ -416,6 +419,9 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd
}
private class SurfaceCallback implements SurfaceHolder.Callback {
+ private final DisplayInfo mTempDisplayInfo = new DisplayInfo();
+ private final DisplayMetrics mTempMetrics = new DisplayMetrics();
+
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
if (!mTaskEmbedder.isInitialized()) {
@@ -424,13 +430,21 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd
mTmpTransaction.reparent(mTaskEmbedder.getSurfaceControl(),
mSurfaceView.getSurfaceControl()).apply();
}
+ mTaskEmbedder.resizeTask(getWidth(), getHeight());
mTaskEmbedder.start();
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {
- mTaskEmbedder.resizeTask(width, height);
- mTaskEmbedder.notifyBoundsChanged();
+ final Display display = getVirtualDisplay().getDisplay();
+ if (!display.getDisplayInfo(mTempDisplayInfo)) {
+ return;
+ }
+ mTempDisplayInfo.getAppMetrics(mTempMetrics);
+ if (width != mTempMetrics.widthPixels || height != mTempMetrics.heightPixels) {
+ mTaskEmbedder.resizeTask(width, height);
+ mTaskEmbedder.notifyBoundsChanged();
+ }
}
@Override