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

Commit f3242dab authored by Mill Chen's avatar Mill Chen
Browse files

Prevent accounts page directly opening in screen pinning mode

There is no auth mechanism to prevent accounts page being opened in
screen pinning mode. We will directly close the account page if users
are trying to navigate to it from screen pinning mode.

Fixes: 137015265
Test: manual, robotests
Change-Id: If26eda408a9ef6fa03ad82e5bee51bb7185950d6
parent 136a0f53
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -15,11 +15,17 @@
 */
package com.android.settings.accounts;

import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;
import static android.provider.Settings.EXTRA_AUTHORITIES;

import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.provider.SearchIndexableResource;
import android.util.Log;

import androidx.annotation.VisibleForTesting;

import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -40,6 +46,14 @@ public class AccountDashboardFragment extends DashboardFragment {

    private static final String TAG = "AccountDashboardFrag";

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        if (isLockTaskModePinned()) {
            Log.w(TAG, "Devices lock task mode pinned.");
            finish();
        }
    }

    @Override
    public int getMetricsCategory() {
@@ -83,6 +97,13 @@ public class AccountDashboardFragment extends DashboardFragment {
        return controllers;
    }

    @VisibleForTesting
    boolean isLockTaskModePinned() {
        final ActivityManager activityManager =
                getContext().getSystemService(ActivityManager.class);
        return activityManager.getLockTaskModeState() == LOCK_TASK_MODE_PINNED;
    }

    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
            new BaseSearchIndexProvider() {
                @Override
+34 −0
Original line number Diff line number Diff line
@@ -15,8 +15,16 @@
 */
package com.android.settings.accounts;

import static android.app.ActivityManager.LOCK_TASK_MODE_NONE;
import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;

import android.app.ActivityManager;
import android.content.Context;
import android.provider.SearchIndexableResource;

import com.android.settingslib.drawer.CategoryKey;
@@ -26,6 +34,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowActivityManager;

import java.util.List;

@@ -33,10 +43,12 @@ import java.util.List;
public class AccountDashboardFragmentTest {

    private AccountDashboardFragment mFragment;
    private Context mContext;

    @Before
    public void setUp() {
        mFragment = new AccountDashboardFragment();
        mContext = RuntimeEnvironment.application;
    }

    @Test
@@ -53,4 +65,26 @@ public class AccountDashboardFragmentTest {
        assertThat(indexRes).isNotNull();
        assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
    }

    @Test
    public void isLockTaskModePinned_disableLockTaskMode_shouldReturnFalse() {
        final AccountDashboardFragment fragment = spy(mFragment);
        doReturn(mContext).when(fragment).getContext();
        final ShadowActivityManager activityManager =
                Shadow.extract(mContext.getSystemService(ActivityManager.class));
        activityManager.setLockTaskModeState(LOCK_TASK_MODE_NONE);

        assertThat(fragment.isLockTaskModePinned()).isFalse();
    }

    @Test
    public void isLockTaskModePinned_hasTaskPinned_shouldReturnTrue() {
        final AccountDashboardFragment fragment = spy(mFragment);
        doReturn(mContext).when(fragment).getContext();
        final ShadowActivityManager activityManager =
                Shadow.extract(mContext.getSystemService(ActivityManager.class));
        activityManager.setLockTaskModeState(LOCK_TASK_MODE_PINNED);

        assertThat(fragment.isLockTaskModePinned()).isTrue();
    }
}