diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java index 515008af596..0dae10bbe29 100644 --- a/src/com/android/settings/accounts/AccountDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDashboardFragment.java @@ -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 diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java index 006087516cf..c07f915cc30 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java @@ -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(); + } }