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

Commit b7312dfd authored by Riley Jones's avatar Riley Jones
Browse files

Implemented measure to verify edit shortcuts page exists before trying to navigate to it

Flag: N/A
Test: atest MenuViewTest
Bug: 326162686
Change-Id: I3904d338d2fe637d776046650bc24ac3fb2881f9
parent 7ee5bc29
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.annotation.SuppressLint;
import android.content.ComponentCallbacks;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.graphics.PointF;
import android.graphics.Rect;
@@ -435,7 +437,14 @@ class MenuView extends FrameLayout implements
        }
        mMenuAnimationController.flingMenuThenSpringToEdge(
                getMenuPosition().x, 100f, 0f);
        mContext.startActivity(getIntentForEditScreen());

        Intent intent = getIntentForEditScreen();
        PackageManager packageManager = getContext().getPackageManager();
        List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
                PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY));
        if (!activities.isEmpty()) {
            mContext.startActivity(intent);
        }
    }

    void incrementTexMetricForAllTargets(String metric) {
+29 −0
Original line number Diff line number Diff line
@@ -22,11 +22,15 @@ import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.UiModeManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Rect;
import android.graphics.drawable.GradientDrawable;
import android.platform.test.annotations.EnableFlags;
@@ -54,6 +58,8 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

import java.util.ArrayList;

/** Tests for {@link MenuView}. */
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -73,6 +79,8 @@ public class MenuViewTest extends SysuiTestCase {
    private AccessibilityManager mAccessibilityManager;

    private SysuiTestableContext mSpyContext;
    @Mock
    private PackageManager mMockPackageManager;

    @Before
    public void setUp() throws Exception {
@@ -82,6 +90,8 @@ public class MenuViewTest extends SysuiTestCase {

        mSpyContext = spy(mContext);
        doNothing().when(mSpyContext).startActivity(any());

        when(mSpyContext.getPackageManager()).thenReturn(mMockPackageManager);
        final SecureSettings secureSettings = TestUtils.mockSecureSettings();
        final MenuViewModel stubMenuViewModel = new MenuViewModel(mContext, mAccessibilityManager,
                secureSettings);
@@ -181,10 +191,19 @@ public class MenuViewTest extends SysuiTestCase {
    @Test
    @EnableFlags(Flags.FLAG_FLOATING_MENU_DRAG_TO_EDIT)
    public void gotoEditScreen_sendsIntent() {
        mockActivityQuery(true);
        mMenuView.gotoEditScreen();
        verify(mSpyContext).startActivity(any());
    }

    @Test
    @EnableFlags(Flags.FLAG_FLOATING_MENU_DRAG_TO_EDIT)
    public void gotoEditScreen_noResolve_doesNotStart() {
        mockActivityQuery(false);
        mMenuView.gotoEditScreen();
        verify(mSpyContext, never()).startActivity(any());
    }

    private InstantInsetLayerDrawable getMenuViewInsetLayer() {
        return (InstantInsetLayerDrawable) mMenuView.getBackground();
    }
@@ -207,4 +226,14 @@ public class MenuViewTest extends SysuiTestCase {
        mUiModeManager.setNightMode(mNightMode);
        Prefs.putString(mContext, Prefs.Key.ACCESSIBILITY_FLOATING_MENU_POSITION, mLastPosition);
    }

    private void mockActivityQuery(boolean successfulQuery) {
        // Query just needs to return a non-empty set to be successful.
        ArrayList<ResolveInfo> resolveInfos = new ArrayList<>();
        if (successfulQuery) {
            resolveInfos.add(new ResolveInfo());
        }
        when(mMockPackageManager.queryIntentActivities(
                any(), any(PackageManager.ResolveInfoFlags.class))).thenReturn(resolveInfos);
    }
}