Loading core/java/android/app/ActivityView.java +24 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.view.MotionEvent; import android.view.Surface; import android.view.TextureView; import android.view.TextureView.SurfaceTextureListener; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import dalvik.system.CloseGuard; Loading @@ -51,6 +52,7 @@ public class ActivityView extends ViewGroup { private int mWidth; private int mHeight; private Surface mSurface; private int mLastVisibility; // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. IIntentSender mQueuedPendingIntent; Loading Loading @@ -95,6 +97,8 @@ public class ActivityView extends ViewGroup { mMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(mMetrics); mLastVisibility = getVisibility(); if (DEBUG) Log.v(TAG, "ctor()"); } Loading @@ -103,6 +107,26 @@ public class ActivityView extends ViewGroup { mTextureView.layout(0, 0, r - l, b - t); } @Override protected void onVisibilityChanged(View changedView, int visibility) { super.onVisibilityChanged(changedView, visibility); if (mSurface != null) { try { if (visibility == View.GONE) { mActivityContainer.setSurface(null, mWidth, mHeight, mMetrics.densityDpi); } else if (mLastVisibility == View.GONE) { // Don't change surface when going between View.VISIBLE and View.INVISIBLE. mActivityContainer.setSurface(mSurface, mWidth, mHeight, mMetrics.densityDpi); } } catch (RemoteException e) { throw new RuntimeException( "ActivityView: Unable to set surface of ActivityContainer. " + e); } } mLastVisibility = visibility; } private boolean injectInputEvent(InputEvent event) { return mActivityContainer != null && mActivityContainer.injectEvent(event); } Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +8 −3 Original line number Diff line number Diff line Loading @@ -3187,9 +3187,9 @@ public final class ActivityStackSupervisor implements DisplayListener { } else { mContainerState = CONTAINER_STATE_NO_SURFACE; ((VirtualActivityDisplay) mActivityDisplay).setSurface(null); // if (mStack.mPausingActivity == null && mStack.mResumedActivity != null) { // mStack.startPausingLocked(false, true); // } if (mStack.mPausingActivity == null && mStack.mResumedActivity != null) { mStack.startPausingLocked(false, true); } } setSurfaceIfReady(); Loading @@ -3198,6 +3198,11 @@ public final class ActivityStackSupervisor implements DisplayListener { + virtualActivityDisplay); } @Override boolean isAttached() { return mSurface != null && super.isAttached(); } @Override void setDrawn() { synchronized (mService) { Loading Loading
core/java/android/app/ActivityView.java +24 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.view.MotionEvent; import android.view.Surface; import android.view.TextureView; import android.view.TextureView.SurfaceTextureListener; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import dalvik.system.CloseGuard; Loading @@ -51,6 +52,7 @@ public class ActivityView extends ViewGroup { private int mWidth; private int mHeight; private Surface mSurface; private int mLastVisibility; // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. IIntentSender mQueuedPendingIntent; Loading Loading @@ -95,6 +97,8 @@ public class ActivityView extends ViewGroup { mMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(mMetrics); mLastVisibility = getVisibility(); if (DEBUG) Log.v(TAG, "ctor()"); } Loading @@ -103,6 +107,26 @@ public class ActivityView extends ViewGroup { mTextureView.layout(0, 0, r - l, b - t); } @Override protected void onVisibilityChanged(View changedView, int visibility) { super.onVisibilityChanged(changedView, visibility); if (mSurface != null) { try { if (visibility == View.GONE) { mActivityContainer.setSurface(null, mWidth, mHeight, mMetrics.densityDpi); } else if (mLastVisibility == View.GONE) { // Don't change surface when going between View.VISIBLE and View.INVISIBLE. mActivityContainer.setSurface(mSurface, mWidth, mHeight, mMetrics.densityDpi); } } catch (RemoteException e) { throw new RuntimeException( "ActivityView: Unable to set surface of ActivityContainer. " + e); } } mLastVisibility = visibility; } private boolean injectInputEvent(InputEvent event) { return mActivityContainer != null && mActivityContainer.injectEvent(event); } Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +8 −3 Original line number Diff line number Diff line Loading @@ -3187,9 +3187,9 @@ public final class ActivityStackSupervisor implements DisplayListener { } else { mContainerState = CONTAINER_STATE_NO_SURFACE; ((VirtualActivityDisplay) mActivityDisplay).setSurface(null); // if (mStack.mPausingActivity == null && mStack.mResumedActivity != null) { // mStack.startPausingLocked(false, true); // } if (mStack.mPausingActivity == null && mStack.mResumedActivity != null) { mStack.startPausingLocked(false, true); } } setSurfaceIfReady(); Loading @@ -3198,6 +3198,11 @@ public final class ActivityStackSupervisor implements DisplayListener { + virtualActivityDisplay); } @Override boolean isAttached() { return mSurface != null && super.isAttached(); } @Override void setDrawn() { synchronized (mService) { Loading