diff options
| author | Craig Mautner <cmautner@google.com> | 2014-05-05 21:07:48 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2014-05-05 21:07:48 +0000 |
| commit | 6856ef87a579fd20ec4a14d7ebf7c2cb352d958e (patch) | |
| tree | ccc06fb64633c656f794add075adffc48bb79787 /core/java | |
| parent | b12646210f15b7f1b7cf0b1cbc56f5cb4bbfe02d (diff) | |
| parent | 9bb4df3a7d9ed479f8ef10b08bbc3354a1984aab (diff) | |
am 9bb4df3a: am e88097bd: Merge "Pause and resume ActivityView when visibility changes" into klp-modular-dev
* commit '9bb4df3a7d9ed479f8ef10b08bbc3354a1984aab':
Pause and resume ActivityView when visibility changes
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/ActivityView.java | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index a810134f28f2..097c64e723ae 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -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; @@ -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; @@ -95,6 +97,8 @@ public class ActivityView extends ViewGroup { mMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(mMetrics); + mLastVisibility = getVisibility(); + if (DEBUG) Log.v(TAG, "ctor()"); } @@ -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); } |
