Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e88097bd authored by Craig Mautner's avatar Craig Mautner Committed by Android (Google) Code Review
Browse files

Merge "Pause and resume ActivityView when visibility changes" into klp-modular-dev

parents 8890013a d13a5583
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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);
    }
+8 −3
Original line number Diff line number Diff line
@@ -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();
@@ -3198,6 +3198,11 @@ public final class ActivityStackSupervisor implements DisplayListener {
                    + virtualActivityDisplay);
        }

        @Override
        boolean isAttached() {
            return mSurface != null && super.isAttached();
        }

        @Override
        void setDrawn() {
            synchronized (mService) {