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

Commit cb6dd197 authored by Chris Göllner's avatar Chris Göllner Committed by Chris Göllner
Browse files

Shortcut Helper - Don't interact with old version when new flag enabled

Bug: 335387428
Test: Unit tests in this CL
Test: Manually
Flag: ACONFIG com.android.systemui.keyboard_shortcut_helper_rewrite DEVELOPMENT
Change-Id: Ice984ce924ce7d094f899f73c9a65a875d21d890
parent c78496f9
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -97,7 +97,7 @@ import java.util.Map;
public final class KeyboardShortcutListSearch {
public final class KeyboardShortcutListSearch {
    private static final String TAG = KeyboardShortcutListSearch.class.getSimpleName();
    private static final String TAG = KeyboardShortcutListSearch.class.getSimpleName();
    private static final Object sLock = new Object();
    private static final Object sLock = new Object();
    @VisibleForTesting static KeyboardShortcutListSearch sInstance;
    @VisibleForTesting public static KeyboardShortcutListSearch sInstance;


    private static int SHORTCUT_SYSTEM_INDEX = 0;
    private static int SHORTCUT_SYSTEM_INDEX = 0;
    private static int SHORTCUT_INPUT_INDEX = 1;
    private static int SHORTCUT_INPUT_INDEX = 1;
@@ -136,7 +136,7 @@ public final class KeyboardShortcutListSearch {
    };
    };


    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private final Handler mHandler = new Handler(Looper.getMainLooper());
    @VisibleForTesting Context mContext;
    @VisibleForTesting public Context mContext;
    private final IPackageManager mPackageManager;
    private final IPackageManager mPackageManager;


    @VisibleForTesting BottomSheetDialog mKeyboardShortcutsBottomSheetDialog;
    @VisibleForTesting BottomSheetDialog mKeyboardShortcutsBottomSheetDialog;
@@ -414,7 +414,7 @@ public final class KeyboardShortcutListSearch {
    private boolean mImeShortcutsReceived;
    private boolean mImeShortcutsReceived;


    @VisibleForTesting
    @VisibleForTesting
    void showKeyboardShortcuts(int deviceId) {
    public void showKeyboardShortcuts(int deviceId) {
        retrieveKeyCharacterMap(deviceId);
        retrieveKeyCharacterMap(deviceId);
        mAppShortcutsReceived = false;
        mAppShortcutsReceived = false;
        mImeShortcutsReceived = false;
        mImeShortcutsReceived = false;
@@ -502,7 +502,8 @@ public final class KeyboardShortcutListSearch {
        return keyboardShortcutMultiMappingGroups;
        return keyboardShortcutMultiMappingGroups;
    }
    }


    private void dismissKeyboardShortcuts() {
    @VisibleForTesting
    public void dismissKeyboardShortcuts() {
        if (mKeyboardShortcutsBottomSheetDialog != null) {
        if (mKeyboardShortcutsBottomSheetDialog != null) {
            mKeyboardShortcutsBottomSheetDialog.dismiss();
            mKeyboardShortcutsBottomSheetDialog.dismiss();
            mKeyboardShortcutsBottomSheetDialog = null;
            mKeyboardShortcutsBottomSheetDialog = null;
+5 −4
Original line number Original line Diff line number Diff line
@@ -79,7 +79,7 @@ import java.util.List;
public final class KeyboardShortcuts {
public final class KeyboardShortcuts {
    private static final String TAG = KeyboardShortcuts.class.getSimpleName();
    private static final String TAG = KeyboardShortcuts.class.getSimpleName();
    private static final Object sLock = new Object();
    private static final Object sLock = new Object();
    @VisibleForTesting static KeyboardShortcuts sInstance;
    @VisibleForTesting public static KeyboardShortcuts sInstance;
    private WindowManager mWindowManager;
    private WindowManager mWindowManager;


    private final SparseArray<String> mSpecialCharacterNames = new SparseArray<>();
    private final SparseArray<String> mSpecialCharacterNames = new SparseArray<>();
@@ -93,7 +93,7 @@ public final class KeyboardShortcuts {
    };
    };


    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private final Handler mHandler = new Handler(Looper.getMainLooper());
    @VisibleForTesting Context mContext;
    @VisibleForTesting public Context mContext;
    private final IPackageManager mPackageManager;
    private final IPackageManager mPackageManager;
    private final OnClickListener mDialogCloseListener = new DialogInterface.OnClickListener() {
    private final OnClickListener mDialogCloseListener = new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
        public void onClick(DialogInterface dialog, int id) {
@@ -373,7 +373,7 @@ public final class KeyboardShortcuts {
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    void showKeyboardShortcuts(int deviceId) {
    public void showKeyboardShortcuts(int deviceId) {
        retrieveKeyCharacterMap(deviceId);
        retrieveKeyCharacterMap(deviceId);
        mReceivedAppShortcutGroups = null;
        mReceivedAppShortcutGroups = null;
        mReceivedImeShortcutGroups = null;
        mReceivedImeShortcutGroups = null;
@@ -407,7 +407,8 @@ public final class KeyboardShortcuts {
        showKeyboardShortcutsDialog(shortcutGroups);
        showKeyboardShortcutsDialog(shortcutGroups);
    }
    }


    private void dismissKeyboardShortcuts() {
    @VisibleForTesting
    public void dismissKeyboardShortcuts() {
        if (mKeyboardShortcutsDialog != null) {
        if (mKeyboardShortcutsDialog != null) {
            mKeyboardShortcutsDialog.dismiss();
            mKeyboardShortcutsDialog.dismiss();
            mKeyboardShortcutsDialog = null;
            mKeyboardShortcutsDialog = null;
+13 −6
Original line number Original line Diff line number Diff line
@@ -15,6 +15,8 @@
 */
 */
package com.android.systemui.statusbar;
package com.android.systemui.statusbar;


import static com.android.systemui.Flags.keyboardShortcutHelperRewrite;

import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
@@ -25,21 +27,22 @@ import com.android.systemui.shared.recents.utilities.Utilities;


import javax.inject.Inject;
import javax.inject.Inject;


/**
/** Receiver for the Keyboard Shortcuts Helper. */
 * Receiver for the Keyboard Shortcuts Helper.
 */
public class KeyboardShortcutsReceiver extends BroadcastReceiver {
public class KeyboardShortcutsReceiver extends BroadcastReceiver {


    private boolean mIsShortcutListSearchEnabled;
    private final FeatureFlags mFeatureFlags;


    @Inject
    @Inject
    public KeyboardShortcutsReceiver(FeatureFlags featureFlags) {
    public KeyboardShortcutsReceiver(FeatureFlags featureFlags) {
        mIsShortcutListSearchEnabled = featureFlags.isEnabled(Flags.SHORTCUT_LIST_SEARCH_LAYOUT);
        mFeatureFlags = featureFlags;
    }
    }


    @Override
    @Override
    public void onReceive(Context context, Intent intent) {
    public void onReceive(Context context, Intent intent) {
        if (mIsShortcutListSearchEnabled && Utilities.isLargeScreen(context)) {
        if (keyboardShortcutHelperRewrite()) {
            return;
        }
        if (isTabletLayoutFlagEnabled() && Utilities.isLargeScreen(context)) {
            if (Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS.equals(intent.getAction())) {
            if (Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS.equals(intent.getAction())) {
                KeyboardShortcutListSearch.show(context, -1 /* deviceId unknown */);
                KeyboardShortcutListSearch.show(context, -1 /* deviceId unknown */);
            } else if (Intent.ACTION_DISMISS_KEYBOARD_SHORTCUTS.equals(intent.getAction())) {
            } else if (Intent.ACTION_DISMISS_KEYBOARD_SHORTCUTS.equals(intent.getAction())) {
@@ -53,4 +56,8 @@ public class KeyboardShortcutsReceiver extends BroadcastReceiver {
            }
            }
        }
        }
    }
    }

    private boolean isTabletLayoutFlagEnabled() {
        return mFeatureFlags.isEnabled(Flags.SHORTCUT_LIST_SEARCH_LAYOUT);
    }
}
}
+22 −12
Original line number Original line Diff line number Diff line
@@ -26,10 +26,12 @@ import static androidx.core.view.ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_
import static androidx.lifecycle.Lifecycle.State.RESUMED;
import static androidx.lifecycle.Lifecycle.State.RESUMED;


import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
import static com.android.systemui.Flags.keyboardShortcutHelperRewrite;
import static com.android.systemui.Flags.lightRevealMigration;
import static com.android.systemui.Flags.lightRevealMigration;
import static com.android.systemui.Flags.newAodTransition;
import static com.android.systemui.Flags.newAodTransition;
import static com.android.systemui.Flags.truncatedStatusBarIconsFix;
import static com.android.systemui.Flags.truncatedStatusBarIconsFix;
import static com.android.systemui.charging.WirelessChargingAnimation.UNKNOWN_BATTERY_LEVEL;
import static com.android.systemui.charging.WirelessChargingAnimation.UNKNOWN_BATTERY_LEVEL;
import static com.android.systemui.flags.Flags.SHORTCUT_LIST_SEARCH_LAYOUT;
import static com.android.systemui.statusbar.NotificationLockscreenUserManager.PERMISSION_SELF;
import static com.android.systemui.statusbar.NotificationLockscreenUserManager.PERMISSION_SELF;
import static com.android.systemui.statusbar.StatusBarState.SHADE;
import static com.android.systemui.statusbar.StatusBarState.SHADE;


@@ -289,7 +291,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
    private CentralSurfacesCommandQueueCallbacks mCommandQueueCallbacks;
    private CentralSurfacesCommandQueueCallbacks mCommandQueueCallbacks;
    private float mTransitionToFullShadeProgress = 0f;
    private float mTransitionToFullShadeProgress = 0f;
    private final NotificationListContainer mNotifListContainer;
    private final NotificationListContainer mNotifListContainer;
    private final boolean mIsShortcutListSearchEnabled;


    private final KeyguardStateController.Callback mKeyguardStateControllerCallback =
    private final KeyguardStateController.Callback mKeyguardStateControllerCallback =
            new KeyguardStateController.Callback() {
            new KeyguardStateController.Callback() {
@@ -789,7 +790,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        mStatusBarSignalPolicy = statusBarSignalPolicy;
        mStatusBarSignalPolicy = statusBarSignalPolicy;
        mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
        mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
        mFeatureFlags = featureFlags;
        mFeatureFlags = featureFlags;
        mIsShortcutListSearchEnabled = featureFlags.isEnabled(Flags.SHORTCUT_LIST_SEARCH_LAYOUT);
        mKeyguardUnlockAnimationController = keyguardUnlockAnimationController;
        mKeyguardUnlockAnimationController = keyguardUnlockAnimationController;
        mMainExecutor = delayableExecutor;
        mMainExecutor = delayableExecutor;
        mMessageRouter = messageRouter;
        mMessageRouter = messageRouter;
@@ -820,10 +820,13 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        // TODO(b/190746471): Find a better home for this.
        // TODO(b/190746471): Find a better home for this.
        DateTimeView.setReceiverHandler(timeTickHandler);
        DateTimeView.setReceiverHandler(timeTickHandler);


        mMessageRouter.subscribeTo(KeyboardShortcutsMessage.class,
        if (!keyboardShortcutHelperRewrite()) {
            mMessageRouter.subscribeTo(
                    KeyboardShortcutsMessage.class,
                    data -> toggleKeyboardShortcuts(data.mDeviceId));
                    data -> toggleKeyboardShortcuts(data.mDeviceId));
        mMessageRouter.subscribeTo(MSG_DISMISS_KEYBOARD_SHORTCUTS_MENU,
            mMessageRouter.subscribeTo(
                id -> dismissKeyboardShortcuts());
                    MSG_DISMISS_KEYBOARD_SHORTCUTS_MENU, id -> dismissKeyboardShortcuts());
        }
        mMessageRouter.subscribeTo(AnimateExpandSettingsPanelMessage.class,
        mMessageRouter.subscribeTo(AnimateExpandSettingsPanelMessage.class,
                data -> mCommandQueueCallbacks.animateExpandSettingsPanel(data.mSubpanel));
                data -> mCommandQueueCallbacks.animateExpandSettingsPanel(data.mSubpanel));
        mMessageRouter.subscribeTo(MSG_LAUNCH_TRANSITION_TIMEOUT,
        mMessageRouter.subscribeTo(MSG_LAUNCH_TRANSITION_TIMEOUT,
@@ -1872,11 +1875,13 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
            String action = intent.getAction();
            String action = intent.getAction();
            String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
            String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
                if (mIsShortcutListSearchEnabled && Utilities.isLargeScreen(mContext)) {
                if (!keyboardShortcutHelperRewrite()) {
                    if (shouldUseTabletKeyboardShortcuts()) {
                        KeyboardShortcutListSearch.dismiss();
                        KeyboardShortcutListSearch.dismiss();
                    } else {
                    } else {
                        KeyboardShortcuts.dismiss();
                        KeyboardShortcuts.dismiss();
                    }
                    }
                }
                mRemoteInputManager.closeRemoteInputs();
                mRemoteInputManager.closeRemoteInputs();
                if (mLockscreenUserManager.isCurrentProfile(getSendingUserId())) {
                if (mLockscreenUserManager.isCurrentProfile(getSendingUserId())) {
                    mShadeLogger.d("ACTION_CLOSE_SYSTEM_DIALOGS intent: closing shade");
                    mShadeLogger.d("ACTION_CLOSE_SYSTEM_DIALOGS intent: closing shade");
@@ -2945,7 +2950,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
    }
    }


    protected void toggleKeyboardShortcuts(int deviceId) {
    protected void toggleKeyboardShortcuts(int deviceId) {
        if (mIsShortcutListSearchEnabled && Utilities.isLargeScreen(mContext)) {
        if (shouldUseTabletKeyboardShortcuts()) {
            KeyboardShortcutListSearch.toggle(mContext, deviceId);
            KeyboardShortcutListSearch.toggle(mContext, deviceId);
        } else {
        } else {
            KeyboardShortcuts.toggle(mContext, deviceId);
            KeyboardShortcuts.toggle(mContext, deviceId);
@@ -2953,13 +2958,18 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
    }
    }


    protected void dismissKeyboardShortcuts() {
    protected void dismissKeyboardShortcuts() {
        if (mIsShortcutListSearchEnabled && Utilities.isLargeScreen(mContext)) {
        if (shouldUseTabletKeyboardShortcuts()) {
            KeyboardShortcutListSearch.dismiss();
            KeyboardShortcutListSearch.dismiss();
        } else {
        } else {
            KeyboardShortcuts.dismiss();
            KeyboardShortcuts.dismiss();
        }
        }
    }
    }


    private boolean shouldUseTabletKeyboardShortcuts() {
        return mFeatureFlags.isEnabled(SHORTCUT_LIST_SEARCH_LAYOUT)
                && Utilities.isLargeScreen(mContext);
    }

    private void clearNotificationEffects() {
    private void clearNotificationEffects() {
        try {
        try {
            mBarService.clearNotificationEffects();
            mBarService.clearNotificationEffects();
+78 −37
Original line number Original line Diff line number Diff line
@@ -16,120 +16,161 @@


package com.android.systemui.statusbar;
package com.android.systemui.statusbar;


import static com.android.systemui.Flags.FLAG_KEYBOARD_SHORTCUT_HELPER_REWRITE;

import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.Intent;
import android.content.Intent;


import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;


import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.dx.mockito.inline.extended.StaticMockitoSession;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.flags.Flags;
import com.android.systemui.shared.recents.utilities.Utilities;
import com.android.systemui.shared.recents.utilities.Utilities;


import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoSession;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.mockito.quality.Strictness;
import org.mockito.quality.Strictness;


@SmallTest
@SmallTest
@RunWith(AndroidJUnit4.class)
@RunWith(AndroidJUnit4.class)
public class KeyboardShortcutsReceiverTest extends SysuiTestCase {
public class KeyboardShortcutsReceiverTest extends SysuiTestCase {


    @Rule public MockitoRule mockito = MockitoJUnit.rule();
    private static final Intent SHOW_INTENT = new Intent(Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS);
    private static final Intent DISMISS_INTENT =
            new Intent(Intent.ACTION_DISMISS_KEYBOARD_SHORTCUTS);


    private StaticMockitoSession mockitoSession;
    private KeyboardShortcutsReceiver mKeyboardShortcutsReceiver;
    private KeyboardShortcutsReceiver mKeyboardShortcutsReceiver;
    private Intent mIntent;
    private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();
    private FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();


    @Mock private KeyboardShortcuts mKeyboardShortcuts;
    @Mock private KeyboardShortcuts mKeyboardShortcuts;
    @Mock private KeyboardShortcutListSearch mKeyboardShortcutListSearch;
    @Mock private KeyboardShortcutListSearch mKeyboardShortcutListSearch;


    @Before
    @Before
    public void setUp() {
    public void setUp() {
        mIntent = new Intent(Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS);
        MockitoAnnotations.initMocks(this);
        mSetFlagsRule.disableFlags(FLAG_KEYBOARD_SHORTCUT_HELPER_REWRITE);
        mKeyboardShortcuts.mContext = mContext;
        mKeyboardShortcuts.mContext = mContext;
        mKeyboardShortcutListSearch.mContext = mContext;
        mKeyboardShortcutListSearch.mContext = mContext;
        KeyboardShortcuts.sInstance = mKeyboardShortcuts;
        KeyboardShortcuts.sInstance = mKeyboardShortcuts;
        KeyboardShortcutListSearch.sInstance = mKeyboardShortcutListSearch;
        KeyboardShortcutListSearch.sInstance = mKeyboardShortcutListSearch;

        mKeyboardShortcutsReceiver = spy(new KeyboardShortcutsReceiver(mFeatureFlags));
    }
    }


    @Test
    @Before
    public void onReceive_whenFlagOffDeviceIsTablet_showKeyboardShortcuts() {
    public void startStaticMocking() {
        MockitoSession mockitoSession = ExtendedMockito.mockitoSession()
        mockitoSession =
                ExtendedMockito.mockitoSession()
                        .spyStatic(Utilities.class)
                        .spyStatic(Utilities.class)
                        .strictness(Strictness.LENIENT)
                        .strictness(Strictness.LENIENT)
                        .startMocking();
                        .startMocking();
    }

    @After
    public void endStaticMocking() {
        mockitoSession.finishMocking();
    }

    @Test
    public void onReceive_whenFlagOffDeviceIsTablet_showKeyboardShortcuts() {
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, false);
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, false);
        mKeyboardShortcutsReceiver = spy(new KeyboardShortcutsReceiver(mFeatureFlags));
        when(Utilities.isLargeScreen(mContext)).thenReturn(true);
        when(Utilities.isLargeScreen(mContext)).thenReturn(true);


        mKeyboardShortcutsReceiver.onReceive(mContext, mIntent);
        mKeyboardShortcutsReceiver.onReceive(mContext, SHOW_INTENT);


        verify(mKeyboardShortcuts).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcuts).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch, never()).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch, never()).showKeyboardShortcuts(anyInt());
        mockitoSession.finishMocking();
    }
    }


    @Test
    @Test
    public void onReceive_whenFlagOffDeviceIsNotTablet_showKeyboardShortcuts() {
    public void onReceive_whenFlagOffDeviceIsNotTablet_showKeyboardShortcuts() {
        MockitoSession mockitoSession = ExtendedMockito.mockitoSession()
                .spyStatic(Utilities.class)
                .strictness(Strictness.LENIENT)
                .startMocking();
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, false);
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, false);
        mKeyboardShortcutsReceiver = spy(new KeyboardShortcutsReceiver(mFeatureFlags));
        when(Utilities.isLargeScreen(mContext)).thenReturn(false);
        when(Utilities.isLargeScreen(mContext)).thenReturn(false);


        mKeyboardShortcutsReceiver.onReceive(mContext, mIntent);
        mKeyboardShortcutsReceiver.onReceive(mContext, SHOW_INTENT);


        verify(mKeyboardShortcuts).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcuts).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch, never()).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch, never()).showKeyboardShortcuts(anyInt());
        mockitoSession.finishMocking();
    }
    }


    @Test
    @Test
    public void onReceive_whenFlagOnDeviceIsTablet_showKeyboardShortcutListSearch() {
    public void onReceive_whenFlagOnDeviceIsTablet_showKeyboardShortcutListSearch() {
        MockitoSession mockitoSession = ExtendedMockito.mockitoSession()
                .spyStatic(Utilities.class)
                .strictness(Strictness.LENIENT)
                .startMocking();
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mKeyboardShortcutsReceiver = spy(new KeyboardShortcutsReceiver(mFeatureFlags));
        when(Utilities.isLargeScreen(mContext)).thenReturn(true);
        when(Utilities.isLargeScreen(mContext)).thenReturn(true);


        mKeyboardShortcutsReceiver.onReceive(mContext, mIntent);
        mKeyboardShortcutsReceiver.onReceive(mContext, SHOW_INTENT);


        verify(mKeyboardShortcuts, never()).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcuts, never()).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch).showKeyboardShortcuts(anyInt());
        mockitoSession.finishMocking();
    }
    }


    @Test
    @Test
    public void onReceive_whenFlagOnDeviceIsNotTablet_showKeyboardShortcuts() {
    public void onReceive_whenFlagOnDeviceIsNotTablet_showKeyboardShortcuts() {
        MockitoSession mockitoSession = ExtendedMockito.mockitoSession()
                .spyStatic(Utilities.class)
                .strictness(Strictness.LENIENT)
                .startMocking();
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mKeyboardShortcutsReceiver = spy(new KeyboardShortcutsReceiver(mFeatureFlags));
        when(Utilities.isLargeScreen(mContext)).thenReturn(false);
        when(Utilities.isLargeScreen(mContext)).thenReturn(false);


        mKeyboardShortcutsReceiver.onReceive(mContext, mIntent);
        mKeyboardShortcutsReceiver.onReceive(mContext, SHOW_INTENT);


        verify(mKeyboardShortcuts).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcuts).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch, never()).showKeyboardShortcuts(anyInt());
        verify(mKeyboardShortcutListSearch, never()).showKeyboardShortcuts(anyInt());
        mockitoSession.finishMocking();
    }

    @Test
    public void onShowIntent_rewriteFlagOn_oldFlagOn_isLargeScreen_doesNotLaunchOldVersions() {
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mSetFlagsRule.enableFlags(FLAG_KEYBOARD_SHORTCUT_HELPER_REWRITE);
        when(Utilities.isLargeScreen(mContext)).thenReturn(true);

        mKeyboardShortcutsReceiver.onReceive(mContext, SHOW_INTENT);

        verifyZeroInteractions(mKeyboardShortcuts, mKeyboardShortcutListSearch);
    }

    @Test
    public void onShowIntent_rewriteFlagOn_oldFlagOn_isSmallScreen_doesNotLaunchOldVersions() {
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mSetFlagsRule.enableFlags(FLAG_KEYBOARD_SHORTCUT_HELPER_REWRITE);
        when(Utilities.isLargeScreen(mContext)).thenReturn(false);

        mKeyboardShortcutsReceiver.onReceive(mContext, SHOW_INTENT);

        verifyZeroInteractions(mKeyboardShortcuts, mKeyboardShortcutListSearch);
    }

    @Test
    public void onDismissIntent_rewriteFlagOn_oldFlagOn_isLargeScreen_doesNotDismissOldVersions() {
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mSetFlagsRule.enableFlags(FLAG_KEYBOARD_SHORTCUT_HELPER_REWRITE);
        when(Utilities.isLargeScreen(mContext)).thenReturn(true);

        mKeyboardShortcutsReceiver.onReceive(mContext, DISMISS_INTENT);

        verifyZeroInteractions(mKeyboardShortcuts, mKeyboardShortcutListSearch);
    }

    @Test
    public void onDismissIntent_rewriteFlagOn_oldFlagOn_isSmallScreen_doesNotDismissOldVersions() {
        mFeatureFlags.set(Flags.SHORTCUT_LIST_SEARCH_LAYOUT, true);
        mSetFlagsRule.enableFlags(FLAG_KEYBOARD_SHORTCUT_HELPER_REWRITE);
        when(Utilities.isLargeScreen(mContext)).thenReturn(false);

        mKeyboardShortcutsReceiver.onReceive(mContext, DISMISS_INTENT);

        verifyZeroInteractions(mKeyboardShortcuts, mKeyboardShortcutListSearch);
    }
    }
}
}
Loading