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

Commit a26f848f authored by Massimo Carli's avatar Massimo Carli Committed by Android (Google) Code Review
Browse files

Merge "Use AccessibilityManager to get disappearing delay for compat ui" into udc-qpr-dev

parents 5ecf8bac 27278dbf
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.util.SparseArray;
import android.view.Display;
import android.view.InsetsSourceControl;
import android.view.InsetsState;
import android.view.accessibility.AccessibilityManager;

import com.android.internal.annotations.VisibleForTesting;
import com.android.wm.shell.ShellTaskOrganizer;
@@ -59,6 +60,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
@@ -80,6 +82,9 @@ public class CompatUIController implements OnDisplaysChangedListener,

    private static final String TAG = "CompatUIController";

    // The time to wait before education and button hiding
    private static final int DISAPPEAR_DELAY_MS = 5000;

    /** Whether the IME is shown on display id. */
    private final Set<Integer> mDisplaysWithIme = new ArraySet<>(1);

@@ -158,6 +163,9 @@ public class CompatUIController implements OnDisplaysChangedListener,
    @NonNull
    private final CompatUIShellCommandHandler mCompatUIShellCommandHandler;

    @NonNull
    private final Function<Integer, Integer> mDisappearTimeSupplier;

    @Nullable
    private CompatUICallback mCompatUICallback;

@@ -176,7 +184,8 @@ public class CompatUIController implements OnDisplaysChangedListener,
            @NonNull Lazy<Transitions> transitionsLazy,
            @NonNull DockStateReader dockStateReader,
            @NonNull CompatUIConfiguration compatUIConfiguration,
            @NonNull CompatUIShellCommandHandler compatUIShellCommandHandler) {
            @NonNull CompatUIShellCommandHandler compatUIShellCommandHandler,
            @NonNull AccessibilityManager accessibilityManager) {
        mContext = context;
        mShellController = shellController;
        mDisplayController = displayController;
@@ -189,6 +198,8 @@ public class CompatUIController implements OnDisplaysChangedListener,
        mDockStateReader = dockStateReader;
        mCompatUIConfiguration = compatUIConfiguration;
        mCompatUIShellCommandHandler = compatUIShellCommandHandler;
        mDisappearTimeSupplier = flags -> accessibilityManager.getRecommendedTimeoutMillis(
                DISAPPEAR_DELAY_MS, flags);
        shellInit.addInitCallback(this::onInit, this);
    }

@@ -510,7 +521,8 @@ public class CompatUIController implements OnDisplaysChangedListener,
            ShellTaskOrganizer.TaskListener taskListener) {
        return new ReachabilityEduWindowManager(context, taskInfo, mSyncQueue,
                taskListener, mDisplayController.getDisplayLayout(taskInfo.displayId),
                mCompatUIConfiguration, mMainExecutor, this::onInitialReachabilityEduDismissed);
                mCompatUIConfiguration, mMainExecutor, this::onInitialReachabilityEduDismissed,
                mDisappearTimeSupplier);
    }

    private void onInitialReachabilityEduDismissed(@NonNull TaskInfo taskInfo,
@@ -556,7 +568,8 @@ public class CompatUIController implements OnDisplaysChangedListener,
            @Nullable ShellTaskOrganizer.TaskListener taskListener) {
        return new UserAspectRatioSettingsWindowManager(context, taskInfo, mSyncQueue,
                taskListener, mDisplayController.getDisplayLayout(taskInfo.displayId),
                mCompatUIHintsState, this::launchUserAspectRatioSettings, mMainExecutor);
                mCompatUIHintsState, this::launchUserAspectRatioSettings, mMainExecutor,
                mDisappearTimeSupplier);
    }

    private void launchUserAspectRatioSettings(
+16 −7
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager;

import com.android.internal.annotations.VisibleForTesting;
import com.android.wm.shell.R;
@@ -37,15 +38,13 @@ import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;

import java.util.function.BiConsumer;
import java.util.function.Function;

/**
 * Window manager for the reachability education
 */
class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract {

    // The time to wait before hiding the education
    private static final long DISAPPEAR_DELAY_MS = 4000L;

    private static final int REACHABILITY_LEFT_OR_UP_POSITION = 0;
    private static final int REACHABILITY_RIGHT_OR_BOTTOM_POSITION = 2;

@@ -77,6 +76,8 @@ class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract {

    private final BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> mOnDismissCallback;

    private final Function<Integer, Integer> mDisappearTimeSupplier;

    @Nullable
    @VisibleForTesting
    ReachabilityEduLayout mLayout;
@@ -85,7 +86,8 @@ class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract {
            SyncTransactionQueue syncQueue,
            ShellTaskOrganizer.TaskListener taskListener, DisplayLayout displayLayout,
            CompatUIConfiguration compatUIConfiguration, ShellExecutor mainExecutor,
            BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> onDismissCallback) {
            BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> onDismissCallback,
            Function<Integer, Integer> disappearTimeSupplier) {
        super(context, taskInfo, syncQueue, taskListener, displayLayout);
        mIsActivityLetterboxed = taskInfo.isLetterboxDoubleTapEnabled;
        mLetterboxVerticalPosition = taskInfo.topActivityLetterboxVerticalPosition;
@@ -95,6 +97,7 @@ class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract {
        mCompatUIConfiguration = compatUIConfiguration;
        mMainExecutor = mainExecutor;
        mOnDismissCallback = onDismissCallback;
        mDisappearTimeSupplier = disappearTimeSupplier;
    }

    @Override
@@ -215,7 +218,12 @@ class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract {
    }

    void updateHideTime() {
        mNextHideTime = SystemClock.uptimeMillis() + DISAPPEAR_DELAY_MS;
        mNextHideTime = SystemClock.uptimeMillis() + getDisappearTimeMs();
    }

    private long getDisappearTimeMs() {
        return mDisappearTimeSupplier.apply(
                AccessibilityManager.FLAG_CONTENT_ICONS | AccessibilityManager.FLAG_CONTENT_TEXT);
    }

    private void updateVisibilityOfViews() {
@@ -248,14 +256,15 @@ class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract {
                    availableHeight, mCompatUIConfiguration, lastTaskInfo);
            if (!mHasLetterboxSizeChanged) {
                updateHideTime();
                mMainExecutor.executeDelayed(this::hideReachability, DISAPPEAR_DELAY_MS);
                final long disappearTimeMs = getDisappearTimeMs();
                mMainExecutor.executeDelayed(this::hideReachability, disappearTimeMs);
                // If reachability education has been seen for the first time, trigger callback to
                // display aspect ratio settings button once reachability education disappears
                if (hasShownHorizontalReachabilityEduFirstTime(hasSeenHorizontalReachabilityEdu)
                        || hasShownVerticalReachabilityEduFirstTime(
                        hasSeenVerticalReachabilityEdu)) {
                    mMainExecutor.executeDelayed(this::triggerOnDismissCallback,
                            DISAPPEAR_DELAY_MS);
                            disappearTimeMs);
                }
            }
            mHasUserDoubleTapped = false;
+17 −9
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.graphics.Rect;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.View;
import android.view.accessibility.AccessibilityManager;

import com.android.internal.annotations.VisibleForTesting;
import com.android.wm.shell.R;
@@ -36,6 +37,7 @@ import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.compatui.CompatUIController.CompatUIHintsState;

import java.util.function.BiConsumer;
import java.util.function.Function;

/**
 * Window manager for the user aspect ratio settings button which allows users to go to
@@ -45,12 +47,12 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract

    private static final long SHOW_USER_ASPECT_RATIO_BUTTON_DELAY_MS = 500L;

    private static final long HIDE_USER_ASPECT_RATIO_BUTTON_DELAY_MS = 4000L;

    private long mNextButtonHideTimeMs = -1L;

    private final BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> mOnButtonClicked;

    private final Function<Integer, Integer> mDisappearTimeSupplier;

    private final ShellExecutor mShellExecutor;

    @VisibleForTesting
@@ -69,12 +71,14 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract
            @Nullable ShellTaskOrganizer.TaskListener taskListener,
            @NonNull DisplayLayout displayLayout, @NonNull CompatUIHintsState compatUIHintsState,
            @NonNull BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> onButtonClicked,
            @NonNull ShellExecutor shellExecutor) {
            @NonNull ShellExecutor shellExecutor,
            @NonNull Function<Integer, Integer> disappearTimeSupplier) {
        super(context, taskInfo, syncQueue, taskListener, displayLayout);
        mShellExecutor = shellExecutor;
        mHasUserAspectRatioSettingsButton = getHasUserAspectRatioSettingsButton(taskInfo);
        mCompatUIHintsState = compatUIHintsState;
        mOnButtonClicked = onButtonClicked;
        mDisappearTimeSupplier = disappearTimeSupplier;
    }

    @Override
@@ -140,9 +144,9 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract
            return;
        }
        mLayout.setUserAspectRatioSettingsHintVisibility(/* show= */ true);
        mNextButtonHideTimeMs = updateHideTime(HIDE_USER_ASPECT_RATIO_BUTTON_DELAY_MS);
        mShellExecutor.executeDelayed(this::hideUserAspectRatioButton,
                HIDE_USER_ASPECT_RATIO_BUTTON_DELAY_MS);
        final long disappearTimeMs = getDisappearTimeMs();
        mNextButtonHideTimeMs = updateHideTime(disappearTimeMs);
        mShellExecutor.executeDelayed(this::hideUserAspectRatioButton, disappearTimeMs);
    }

    @Override
@@ -167,9 +171,9 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract
        if (mHasUserAspectRatioSettingsButton) {
            mShellExecutor.executeDelayed(this::showUserAspectRatioButton,
                    SHOW_USER_ASPECT_RATIO_BUTTON_DELAY_MS);
            mNextButtonHideTimeMs = updateHideTime(HIDE_USER_ASPECT_RATIO_BUTTON_DELAY_MS);
            mShellExecutor.executeDelayed(this::hideUserAspectRatioButton,
                    HIDE_USER_ASPECT_RATIO_BUTTON_DELAY_MS);
            final long disappearTimeMs = getDisappearTimeMs();
            mNextButtonHideTimeMs = updateHideTime(disappearTimeMs);
            mShellExecutor.executeDelayed(this::hideUserAspectRatioButton, disappearTimeMs);
        } else {
            mShellExecutor.removeCallbacks(this::showUserAspectRatioButton);
            mShellExecutor.execute(this::hideUserAspectRatioButton);
@@ -208,4 +212,8 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract
                && (taskInfo.topActivityBoundsLetterboxed
                    || taskInfo.isUserFullscreenOverrideEnabled);
    }

    private long getDisappearTimeMs() {
        return mDisappearTimeSupplier.apply(AccessibilityManager.FLAG_CONTENT_CONTROLS);
    }
}
+5 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.SystemProperties;
import android.view.IWindowManager;
import android.view.accessibility.AccessibilityManager;

import com.android.internal.logging.UiEventLogger;
import com.android.launcher3.icons.IconProvider;
@@ -232,10 +233,12 @@ public abstract class WMShellBaseModule {
            DisplayImeController imeController, SyncTransactionQueue syncQueue,
            @ShellMainThread ShellExecutor mainExecutor, Lazy<Transitions> transitionsLazy,
            DockStateReader dockStateReader, CompatUIConfiguration compatUIConfiguration,
            CompatUIShellCommandHandler compatUIShellCommandHandler) {
            CompatUIShellCommandHandler compatUIShellCommandHandler,
            AccessibilityManager accessibilityManager) {
        return new CompatUIController(context, shellInit, shellController, displayController,
                displayInsetsController, imeController, syncQueue, mainExecutor, transitionsLazy,
                dockStateReader, compatUIConfiguration, compatUIShellCommandHandler);
                dockStateReader, compatUIConfiguration, compatUIShellCommandHandler,
                accessibilityManager);
    }

    @WMSingleton
+5 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.content.res.Configuration;
import android.testing.AndroidTestingRunner;
import android.view.InsetsSource;
import android.view.InsetsState;
import android.view.accessibility.AccessibilityManager;

import androidx.test.filters.SmallTest;

@@ -113,6 +114,9 @@ public class CompatUIControllerTest extends ShellTestCase {
    @Mock
    private CompatUIShellCommandHandler mCompatUIShellCommandHandler;

    @Mock
    private AccessibilityManager mAccessibilityManager;

    @Captor
    ArgumentCaptor<OnInsetsChangedListener> mOnInsetsChangedListenerCaptor;

@@ -139,7 +143,7 @@ public class CompatUIControllerTest extends ShellTestCase {
        mController = new CompatUIController(mContext, mShellInit, mMockShellController,
                mMockDisplayController, mMockDisplayInsetsController, mMockImeController,
                mMockSyncQueue, mMockExecutor, mMockTransitionsLazy, mDockStateReader,
                mCompatUIConfiguration, mCompatUIShellCommandHandler) {
                mCompatUIConfiguration, mCompatUIShellCommandHandler, mAccessibilityManager) {
            @Override
            CompatUIWindowManager createCompatUiWindowManager(Context context, TaskInfo taskInfo,
                    ShellTaskOrganizer.TaskListener taskListener) {
Loading