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
This commit is contained in:
@@ -15,11 +15,17 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.accounts;
|
package com.android.settings.accounts;
|
||||||
|
|
||||||
|
import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;
|
||||||
import static android.provider.Settings.EXTRA_AUTHORITIES;
|
import static android.provider.Settings.EXTRA_AUTHORITIES;
|
||||||
|
|
||||||
|
import android.app.ActivityManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsPreferenceFragment;
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
@@ -40,6 +46,14 @@ public class AccountDashboardFragment extends DashboardFragment {
|
|||||||
|
|
||||||
private static final String TAG = "AccountDashboardFrag";
|
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
|
@Override
|
||||||
public int getMetricsCategory() {
|
public int getMetricsCategory() {
|
||||||
@@ -83,6 +97,13 @@ public class AccountDashboardFragment extends DashboardFragment {
|
|||||||
return controllers;
|
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 =
|
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider() {
|
new BaseSearchIndexProvider() {
|
||||||
@Override
|
@Override
|
||||||
|
@@ -15,8 +15,16 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.accounts;
|
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 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 android.provider.SearchIndexableResource;
|
||||||
|
|
||||||
import com.android.settingslib.drawer.CategoryKey;
|
import com.android.settingslib.drawer.CategoryKey;
|
||||||
@@ -26,6 +34,8 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.shadow.api.Shadow;
|
||||||
|
import org.robolectric.shadows.ShadowActivityManager;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -33,10 +43,12 @@ import java.util.List;
|
|||||||
public class AccountDashboardFragmentTest {
|
public class AccountDashboardFragmentTest {
|
||||||
|
|
||||||
private AccountDashboardFragment mFragment;
|
private AccountDashboardFragment mFragment;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mFragment = new AccountDashboardFragment();
|
mFragment = new AccountDashboardFragment();
|
||||||
|
mContext = RuntimeEnvironment.application;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -53,4 +65,26 @@ public class AccountDashboardFragmentTest {
|
|||||||
assertThat(indexRes).isNotNull();
|
assertThat(indexRes).isNotNull();
|
||||||
assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user