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

Commit 501b654c authored by Charles Chen's avatar Charles Chen Committed by Android (Google) Code Review
Browse files

Merge "Send TaskFragmentParentInfo for visibility changes" into tm-qpr-dev

parents ef9c9007 6012e9b7
Loading
Loading
Loading
Loading
+28 −0
Original line number Original line Diff line number Diff line
@@ -97,6 +97,34 @@ public class TaskFragmentParentInfo implements Parcelable {
                + "}";
                + "}";
    }
    }


    /**
     * Indicates that whether this {@link TaskFragmentParentInfo} equals to {@code obj}.
     * Note that {@link #equalsForTaskFragmentOrganizer(TaskFragmentParentInfo)} should be used
     * for most cases because not all {@link Configuration} properties are interested for
     * {@link TaskFragmentOrganizer}.
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (!(obj instanceof TaskFragmentParentInfo)) {
            return false;
        }
        final TaskFragmentParentInfo that = (TaskFragmentParentInfo) obj;
        return mConfiguration.equals(that.mConfiguration)
                && mDisplayId == that.mDisplayId
                && mVisibleRequested == that.mVisibleRequested;
    }

    @Override
    public int hashCode() {
        int result = mConfiguration.hashCode();
        result = 31 * result + mDisplayId;
        result = 31 * result + (mVisibleRequested ? 1 : 0);
        return result;
    }

    @Override
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        mConfiguration.writeToParcel(dest, flags);
        mConfiguration.writeToParcel(dest, flags);
+15 −3
Original line number Original line Diff line number Diff line
@@ -1586,12 +1586,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A


        if (oldParent != null) {
        if (oldParent != null) {
            oldParent.cleanUpActivityReferences(this);
            oldParent.cleanUpActivityReferences(this);
            // Update isVisibleRequested value of parent TaskFragment and send the callback to the
            // client side if needed.
            oldParent.onActivityVisibleRequestedChanged();
        }
        }


        if (newParent != null && isState(RESUMED)) {
        if (newParent != null) {
            // Update isVisibleRequested value of parent TaskFragment and send the callback to the
            // client side if needed.
            newParent.onActivityVisibleRequestedChanged();
            if (isState(RESUMED)) {
                newParent.setResumedActivity(this, "onParentChanged");
                newParent.setResumedActivity(this, "onParentChanged");
                mImeInsetsFrozenUntilStartInput = false;
                mImeInsetsFrozenUntilStartInput = false;
            }
            }
        }


        if (rootTask != null && rootTask.topRunningActivity() == this) {
        if (rootTask != null && rootTask.topRunningActivity() == this) {
            // make ensure the TaskOrganizer still works after re-parenting
            // make ensure the TaskOrganizer still works after re-parenting
@@ -5090,6 +5098,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            return;
            return;
        }
        }
        mVisibleRequested = visible;
        mVisibleRequested = visible;
        final TaskFragment taskFragment = getTaskFragment();
        if (taskFragment != null) {
            taskFragment.onActivityVisibleRequestedChanged();
        }
        setInsetsFrozen(!visible);
        setInsetsFrozen(!visible);
        if (app != null) {
        if (app != null) {
            mTaskSupervisor.onProcessActivityStateChanged(app, false /* forceBatch */);
            mTaskSupervisor.onProcessActivityStateChanged(app, false /* forceBatch */);
+20 −0
Original line number Original line Diff line number Diff line
@@ -2685,6 +2685,7 @@ class Task extends TaskFragment {
        if (isRootTask()) {
        if (isRootTask()) {
            updateSurfaceBounds();
            updateSurfaceBounds();
        }
        }
        sendTaskFragmentParentInfoChangedIfNeeded();
    }
    }


    boolean isResizeable() {
    boolean isResizeable() {
@@ -3527,6 +3528,25 @@ class Task extends TaskFragment {
        return new TaskFragmentParentInfo(getConfiguration(), getDisplayId(), isVisibleRequested());
        return new TaskFragmentParentInfo(getConfiguration(), getDisplayId(), isVisibleRequested());
    }
    }


    @Override
    void onActivityVisibleRequestedChanged() {
        if (mVisibleRequested != isVisibleRequested()) {
            sendTaskFragmentParentInfoChangedIfNeeded();
        }
    }

    void sendTaskFragmentParentInfoChangedIfNeeded() {
        if (!isLeafTask()) {
            // Only send parent info changed event for leaf task.
            return;
        }
        final TaskFragment childOrganizedTf =
                getTaskFragment(TaskFragment::isOrganizedTaskFragment);
        if (childOrganizedTf != null) {
            childOrganizedTf.sendTaskFragmentParentInfoChanged();
        }
    }

    boolean isTaskId(int taskId) {
    boolean isTaskId(int taskId) {
        return mTaskId == taskId;
        return mTaskId == taskId;
    }
    }
+24 −1
Original line number Original line Diff line number Diff line
@@ -297,6 +297,9 @@ class TaskFragment extends WindowContainer<WindowContainer> {


    final Point mLastSurfaceSize = new Point();
    final Point mLastSurfaceSize = new Point();


    /** The latest updated value when there's a child {@link #onActivityVisibleRequestedChanged} */
    boolean mVisibleRequested;

    private final Rect mTmpBounds = new Rect();
    private final Rect mTmpBounds = new Rect();
    private final Rect mTmpFullBounds = new Rect();
    private final Rect mTmpFullBounds = new Rect();
    /** For calculating screenWidthDp and screenWidthDp, i.e. the area without the system bars. */
    /** For calculating screenWidthDp and screenWidthDp, i.e. the area without the system bars. */
@@ -2381,6 +2384,14 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        }
        }
    }
    }


    void sendTaskFragmentParentInfoChanged() {
        final Task parentTask = getParent().asTask();
        if (mTaskFragmentOrganizer != null && parentTask != null) {
            mTaskFragmentOrganizerController
                    .onTaskFragmentParentInfoChanged(mTaskFragmentOrganizer, parentTask);
        }
    }

    private void sendTaskFragmentAppeared() {
    private void sendTaskFragmentAppeared() {
        if (mTaskFragmentOrganizer != null) {
        if (mTaskFragmentOrganizer != null) {
            mTaskFragmentOrganizerController.onTaskFragmentAppeared(mTaskFragmentOrganizer, this);
            mTaskFragmentOrganizerController.onTaskFragmentAppeared(mTaskFragmentOrganizer, this);
@@ -2416,7 +2427,7 @@ class TaskFragment extends WindowContainer<WindowContainer> {
                mRemoteToken.toWindowContainerToken(),
                mRemoteToken.toWindowContainerToken(),
                getConfiguration(),
                getConfiguration(),
                getNonFinishingActivityCount(),
                getNonFinishingActivityCount(),
                isVisible(),
                isVisibleRequested(),
                childActivities,
                childActivities,
                positionInParent,
                positionInParent,
                mClearedTaskForReuse,
                mClearedTaskForReuse,
@@ -2673,6 +2684,18 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        return getWindowingMode() == WINDOWING_MODE_FULLSCREEN || matchParentBounds();
        return getWindowingMode() == WINDOWING_MODE_FULLSCREEN || matchParentBounds();
    }
    }


    void onActivityVisibleRequestedChanged() {
        final boolean isVisibleRequested = isVisibleRequested();
        if (mVisibleRequested == isVisibleRequested) {
            return;
        }
        mVisibleRequested = isVisibleRequested;
        final TaskFragment parentTf = getParent().asTaskFragment();
        if (parentTf != null) {
            parentTf.onActivityVisibleRequestedChanged();
        }
    }

    String toFullString() {
    String toFullString() {
        final StringBuilder sb = new StringBuilder(128);
        final StringBuilder sb = new StringBuilder(128);
        sb.append(this);
        sb.append(this);
+31 −1
Original line number Original line Diff line number Diff line
@@ -649,6 +649,34 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
                .build());
                .build());
    }
    }


    void onTaskFragmentParentInfoChanged(@NonNull ITaskFragmentOrganizer organizer,
            @NonNull Task task) {
        validateAndGetState(organizer);
        final PendingTaskFragmentEvent pendingEvent = getLastPendingParentInfoChangedEvent(
                organizer, task);
        if (pendingEvent == null) {
            addPendingEvent(new PendingTaskFragmentEvent.Builder(
                    PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED, organizer)
                    .setTask(task)
                    .build());
        }
    }

    @Nullable
    private PendingTaskFragmentEvent getLastPendingParentInfoChangedEvent(
            @NonNull ITaskFragmentOrganizer organizer, @NonNull Task task) {
        final List<PendingTaskFragmentEvent> events = mPendingTaskFragmentEvents
                .get(organizer.asBinder());
        for (int i = events.size() - 1; i >= 0; i--) {
            final PendingTaskFragmentEvent event = events.get(i);
            if (task == event.mTask
                    && event.mEventType == PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED) {
                return event;
            }
        }
        return null;
    }

    private void addPendingEvent(@NonNull PendingTaskFragmentEvent event) {
    private void addPendingEvent(@NonNull PendingTaskFragmentEvent event) {
        mPendingTaskFragmentEvents.get(event.mTaskFragmentOrg.asBinder()).add(event);
        mPendingTaskFragmentEvents.get(event.mTaskFragmentOrg.asBinder()).add(event);
    }
    }
@@ -851,7 +879,9 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr
    }
    }


    private boolean shouldSendEventWhenTaskInvisible(@NonNull PendingTaskFragmentEvent event) {
    private boolean shouldSendEventWhenTaskInvisible(@NonNull PendingTaskFragmentEvent event) {
        if (event.mEventType == PendingTaskFragmentEvent.EVENT_ERROR) {
        if (event.mEventType == PendingTaskFragmentEvent.EVENT_ERROR
                // Always send parent info changed to update task visibility
                || event.mEventType == PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED) {
            return true;
            return true;
        }
        }


Loading