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

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

Merge "Fixes for ActivityView on home activity" into klp-modular-dev

parents f8a68404 12ff7391
Loading
Loading
Loading
Loading
+29 −6
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.view.WindowManager;

public class ActivityView extends ViewGroup {
    private final String TAG = "ActivityView";
    private final boolean DEBUG = false;

    private final TextureView mTextureView;
    private IActivityContainer mActivityContainer;
@@ -76,6 +77,7 @@ public class ActivityView extends ViewGroup {
        mTextureView = new TextureView(context);
        mTextureView.setSurfaceTextureListener(new ActivityViewSurfaceTextureListener());
        addView(mTextureView);
        if (DEBUG) Log.v(TAG, "ctor()");
    }

    @Override
@@ -85,6 +87,8 @@ public class ActivityView extends ViewGroup {

    @Override
    protected void onAttachedToWindow() {
        if (DEBUG) Log.v(TAG, "onAttachedToWindow()");
        super.onAttachedToWindow();
        try {
            final IBinder token = mActivity.getActivityToken();
            mActivityContainer =
@@ -99,6 +103,8 @@ public class ActivityView extends ViewGroup {

    @Override
    protected void onDetachedFromWindow() {
        if (DEBUG) Log.v(TAG, "onDetachedFromWindow(): mActivityContainer=" + mActivityContainer);
        super.onDetachedFromWindow();
        if (mActivityContainer != null) {
            detach();
            mActivityContainer = null;
@@ -107,11 +113,17 @@ public class ActivityView extends ViewGroup {

    @Override
    protected void onWindowVisibilityChanged(int visibility) {
        if (DEBUG) Log.v(TAG, "onWindowVisibilityChanged(): visibility=" + visibility);
        super.onWindowVisibilityChanged(visibility);
        if (visibility == View.VISIBLE) {
        switch (visibility) {
            case  View.VISIBLE:
                attachToSurfaceWhenReady();
        } else {
                break;
            case  View.INVISIBLE:
                break;
            case View.GONE:
                detach();
                break;
        }
    }

@@ -143,6 +155,8 @@ public class ActivityView extends ViewGroup {
    }

    public void startActivity(Intent intent) {
        if (DEBUG) Log.v(TAG, "startActivity(): intent=" + intent + " " +
                (isAttachedToDisplay() ? "" : "not") + " attached");
        if (mSurface != null) {
            try {
                mActivityContainer.startActivity(intent);
@@ -165,6 +179,8 @@ public class ActivityView extends ViewGroup {
    }

    public void startActivity(IntentSender intentSender) {
        if (DEBUG) Log.v(TAG, "startActivityIntentSender(): intentSender=" + intentSender + " " +
                (isAttachedToDisplay() ? "" : "not") + " attached");
        final IIntentSender iIntentSender = intentSender.getTarget();
        if (mSurface != null) {
            startActivityIntentSender(iIntentSender);
@@ -175,6 +191,8 @@ public class ActivityView extends ViewGroup {
    }

    public void startActivity(PendingIntent pendingIntent) {
        if (DEBUG) Log.v(TAG, "startActivityPendingIntent(): PendingIntent=" + pendingIntent + " "
                + (isAttachedToDisplay() ? "" : "not") + " attached");
        final IIntentSender iIntentSender = pendingIntent.getTarget();
        if (mSurface != null) {
            startActivityIntentSender(iIntentSender);
@@ -205,6 +223,8 @@ public class ActivityView extends ViewGroup {
                    "ActivityView: Unable to create ActivityContainer. " + e);
        }

        if (DEBUG) Log.v(TAG, "attachToSurfaceWhenReady: " + (mQueuedIntent != null ||
                mQueuedPendingIntent != null ? "" : "no") + " queued intent");
        if (mQueuedIntent != null) {
            startActivity(mQueuedIntent);
            mQueuedIntent = null;
@@ -215,6 +235,7 @@ public class ActivityView extends ViewGroup {
    }

    private void detach() {
        if (DEBUG) Log.d(TAG, "detach: attached=" + isAttachedToDisplay());
        if (mSurface != null) {
            try {
                mActivityContainer.detachFromDisplay();
@@ -229,6 +250,8 @@ public class ActivityView extends ViewGroup {
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width,
                int height) {
            if (DEBUG) Log.d(TAG, "onSurfaceTextureAvailable: width=" + width + " height="
                    + height);
            mWidth = width;
            mHeight = height;
            if (mActivityContainer != null) {
@@ -239,12 +262,12 @@ public class ActivityView extends ViewGroup {
        @Override
        public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width,
                int height) {
            Log.d(TAG, "onSurfaceTextureSizeChanged: w=" + width + " h=" + height);
            if (DEBUG) Log.d(TAG, "onSurfaceTextureSizeChanged: w=" + width + " h=" + height);
        }

        @Override
        public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
            Log.d(TAG, "onSurfaceTextureDestroyed");
            if (DEBUG) Log.d(TAG, "onSurfaceTextureDestroyed");
            detach();
            return true;
        }
+18 −7
Original line number Diff line number Diff line
@@ -1375,8 +1375,15 @@ public final class ActivityStackSupervisor implements DisplayListener {

    void setFocusedStack(ActivityRecord r) {
        if (r != null) {
            final boolean isHomeActivity =
                    !r.isApplicationActivity() || (r.task != null && !r.task.isApplicationTask());
            final TaskRecord task = r.task;
            boolean isHomeActivity = !r.isApplicationActivity();
            if (!isHomeActivity && task != null) {
                isHomeActivity = !task.isApplicationTask();
            }
            if (!isHomeActivity && task != null) {
                final ActivityRecord parent = task.stack.mActivityContainer.mParentActivity;
                isHomeActivity = parent != null && parent.isHomeActivity();
            }
            moveHomeStack(isHomeActivity);
        }
    }
@@ -2058,17 +2065,21 @@ public final class ActivityStackSupervisor implements DisplayListener {
        if (targetStack == null) {
            targetStack = getFocusedStack();
        }
        // Do targetStack first.
        boolean result = false;
        if (isFrontStack(targetStack)) {
            result = targetStack.resumeTopActivityLocked(target, targetOptions);
        }
        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
            final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
            for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
                final ActivityStack stack = stacks.get(stackNdx);
                if (isFrontStack(stack)) {
                if (stack == targetStack) {
                        result = stack.resumeTopActivityLocked(target, targetOptions);
                    } else {
                        stack.resumeTopActivityLocked(null);
                    // Already started above.
                    continue;
                }
                if (isFrontStack(stack)) {
                    stack.resumeTopActivityLocked(null);
                }
            }
        }