Fix crash when there is no emergencybroadcast app on device
Some devices do not have emergencybroadcast app installed, so we should not show the preference item for it. Add the preference controller into AppAndNotificationFragment properly hides it. Change-Id: Ic39ba24da9bd8f3200a5e44232a5489e35c48c0a Fix: 37945069 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -23,6 +23,7 @@ import com.android.internal.logging.nano.MetricsProto;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.PreferenceController;
|
import com.android.settings.core.PreferenceController;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
import com.android.settings.notification.EmergencyBroadcastPreferenceController;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -61,6 +62,8 @@ public class AppAndNotificationDashboardFragment extends DashboardFragment {
|
|||||||
|
|
||||||
private static List<PreferenceController> buildPreferenceControllers(Context context) {
|
private static List<PreferenceController> buildPreferenceControllers(Context context) {
|
||||||
final List<PreferenceController> controllers = new ArrayList<>();
|
final List<PreferenceController> controllers = new ArrayList<>();
|
||||||
|
controllers.add(new EmergencyBroadcastPreferenceController(context,
|
||||||
|
"app_and_notif_cell_broadcast_settings"));
|
||||||
controllers.add(new SpecialAppAccessPreferenceController(context));
|
controllers.add(new SpecialAppAccessPreferenceController(context));
|
||||||
return controllers;
|
return controllers;
|
||||||
}
|
}
|
||||||
|
@@ -20,9 +20,9 @@ import android.content.Context;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
|
||||||
import com.android.settings.accounts.AccountRestrictionHelper;
|
import com.android.settings.accounts.AccountRestrictionHelper;
|
||||||
import com.android.settings.core.PreferenceController;
|
import com.android.settings.core.PreferenceController;
|
||||||
import com.android.settingslib.RestrictedPreference;
|
import com.android.settingslib.RestrictedPreference;
|
||||||
@@ -33,20 +33,22 @@ import com.android.settingslib.RestrictedPreference;
|
|||||||
*/
|
*/
|
||||||
public class EmergencyBroadcastPreferenceController extends PreferenceController {
|
public class EmergencyBroadcastPreferenceController extends PreferenceController {
|
||||||
|
|
||||||
private static final String KEY_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
|
private final String mPrefKey;
|
||||||
|
|
||||||
private AccountRestrictionHelper mHelper;
|
private AccountRestrictionHelper mHelper;
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
private PackageManager mPm;
|
private PackageManager mPm;
|
||||||
private boolean mCellBroadcastAppLinkEnabled;
|
private boolean mCellBroadcastAppLinkEnabled;
|
||||||
|
|
||||||
public EmergencyBroadcastPreferenceController(Context context) {
|
public EmergencyBroadcastPreferenceController(Context context, String prefKey) {
|
||||||
this(context, new AccountRestrictionHelper(context));
|
this(context, new AccountRestrictionHelper(context), prefKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
|
||||||
EmergencyBroadcastPreferenceController(Context context, AccountRestrictionHelper helper) {
|
EmergencyBroadcastPreferenceController(Context context, AccountRestrictionHelper helper,
|
||||||
|
String prefKey) {
|
||||||
super(context);
|
super(context);
|
||||||
|
mPrefKey = prefKey;
|
||||||
mHelper = helper;
|
mHelper = helper;
|
||||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||||
mPm = mContext.getPackageManager();
|
mPm = mContext.getPackageManager();
|
||||||
@@ -70,7 +72,7 @@ public class EmergencyBroadcastPreferenceController extends PreferenceController
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPreferenceKey() {
|
public String getPreferenceKey() {
|
||||||
return KEY_CELL_BROADCAST_SETTINGS;
|
return mPrefKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -186,7 +186,8 @@ public class SoundSettings extends DashboardFragment {
|
|||||||
Lifecycle lifecycle) {
|
Lifecycle lifecycle) {
|
||||||
final List<PreferenceController> controllers = new ArrayList<>();
|
final List<PreferenceController> controllers = new ArrayList<>();
|
||||||
controllers.add(new ZenModePreferenceController(context));
|
controllers.add(new ZenModePreferenceController(context));
|
||||||
controllers.add(new EmergencyBroadcastPreferenceController(context));
|
controllers.add(new EmergencyBroadcastPreferenceController(
|
||||||
|
context, "cell_broadcast_settings"));
|
||||||
controllers.add(new VibrateWhenRingPreferenceController(context));
|
controllers.add(new VibrateWhenRingPreferenceController(context));
|
||||||
|
|
||||||
// === Volumes ===
|
// === Volumes ===
|
||||||
|
@@ -44,6 +44,8 @@ import static org.mockito.Mockito.when;
|
|||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||||
public class EmergencyBroadcastPreferenceControllerTest {
|
public class EmergencyBroadcastPreferenceControllerTest {
|
||||||
|
|
||||||
|
private static final String PREF_TEST_KEY = "test_key";
|
||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -62,7 +64,8 @@ public class EmergencyBroadcastPreferenceControllerTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
|
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
|
||||||
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||||
mController = new EmergencyBroadcastPreferenceController(mContext, mAccountHelper);
|
mController = new EmergencyBroadcastPreferenceController(mContext, mAccountHelper,
|
||||||
|
PREF_TEST_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -72,6 +75,11 @@ public class EmergencyBroadcastPreferenceControllerTest {
|
|||||||
verify(mPreference).checkRestrictionAndSetDisabled(anyString());
|
verify(mPreference).checkRestrictionAndSetDisabled(anyString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPreferenceKey_shouldReturnKeyDefinedInConstructor() {
|
||||||
|
assertThat(mController.getPreferenceKey()).isEqualTo(PREF_TEST_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isAvailable_notAdminUser_shouldReturnFalse() {
|
public void isAvailable_notAdminUser_shouldReturnFalse() {
|
||||||
when(mUserManager.isAdminUser()).thenReturn(false);
|
when(mUserManager.isAdminUser()).thenReturn(false);
|
||||||
|
Reference in New Issue
Block a user