summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2014-05-05 21:07:48 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-05-05 21:07:48 +0000
commit6856ef87a579fd20ec4a14d7ebf7c2cb352d958e (patch)
treeccc06fb64633c656f794add075adffc48bb79787 /core/java
parentb12646210f15b7f1b7cf0b1cbc56f5cb4bbfe02d (diff)
parent9bb4df3a7d9ed479f8ef10b08bbc3354a1984aab (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.java24
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);
}