Protect entry points to add an eSIM when admin restricted

If the DISALLOW_CONFIG_MOBILE_NETWORKS admin policy is set, we were
accidentally still allowing access to the flow where you add an eSIM
subscription via the "plus" button on the Network & internet page. While
fixing this, I also noticed that the mobile networks list page (which
only becomes available if you have multiple subscriptions) has a link at
the bottom to start the flow as well, and that wasn't being protected.

The fix for the plus button on the Network & internet page was just to
make sure not to call setEnabled(true) if the preference was already
disabled by admin policy, since that has the effect of overriding the
admin-disabling.

The fix for the mobile networks list page just needed to add the
relevant tags in the layout XML, and then we get it for free.

Fixes: 137627845
Test: make RunSettingsRoboTests
Change-Id: I896ac248f50aaeecc157791938a0a0a98265aa07
This commit is contained in:
Antony Sargent
2019-07-31 12:53:39 -07:00
parent 985d3d570d
commit 482415d37e
3 changed files with 14 additions and 3 deletions

View File

@@ -20,9 +20,11 @@
android:key="mobile_network_list_screen" android:key="mobile_network_list_screen"
android:title="@string/network_settings_title"> android:title="@string/network_settings_title">
<Preference <com.android.settingslib.RestrictedPreference
android:key="add_more" android:key="add_more"
settings:isPreferenceVisible="false" settings:isPreferenceVisible="false"
settings:userRestriction="no_config_mobile_networks"
settings:useAdminDisabledSummary="true"
android:title="@string/mobile_network_list_add_more" android:title="@string/mobile_network_list_add_more"
android:icon="@drawable/ic_menu_add_activated_tint" android:icon="@drawable/ic_menu_add_activated_tint"
android:order="100" > android:order="100" >
@@ -30,6 +32,6 @@
<extra android:name="android.telephony.euicc.extra.FORCE_PROVISION" <extra android:name="android.telephony.euicc.extra.FORCE_PROVISION"
android:value="true"/> android:value="true"/>
</intent> </intent>
</Preference> </com.android.settingslib.RestrictedPreference>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -130,7 +130,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
} }
private void update() { private void update() {
if (mPreference == null) { if (mPreference == null || mPreference.isDisabledByAdmin()) {
return; return;
} }
refreshSummary(mPreference); refreshSummary(mPreference);

View File

@@ -42,6 +42,7 @@ import android.text.TextUtils;
import com.android.settings.network.telephony.MobileNetworkActivity; import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.widget.AddPreference; import com.android.settings.widget.AddPreference;
import com.android.settingslib.RestrictedLockUtils;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -373,4 +374,12 @@ public class MobileNetworkSummaryControllerTest {
verify(mPreference, atLeastOnce()).setAddWidgetEnabled(captor.capture()); verify(mPreference, atLeastOnce()).setAddWidgetEnabled(captor.capture());
assertThat(captor.getValue()).isTrue(); assertThat(captor.getValue()).isTrue();
} }
@Test
public void onResume_disabledByAdmin_prefStaysDisabled() {
mPreference.setDisabledByAdmin(new RestrictedLockUtils.EnforcedAdmin());
mController.displayPreference(mPreferenceScreen);
mController.onResume();
verify(mPreference, never()).setEnabled(eq(true));
}
} }