Merge "DO NOT MERGE - Merge pi-platform-release (PPRL.190205.001) into stage-aosp-master" into stage-aosp-master
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2c58b5f..ef8b3c0 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -41,7 +41,7 @@
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
<uses-permission android:name="android.permission.READ_USER_DICTIONARY"/>
@@ -436,7 +436,7 @@
android:exported="true"
android:permission="android.permission.TETHER_PRIVILEGED" />
- <activity android:name="TetherProvisioningActivity"
+ <activity android:name=".network.TetherProvisioningActivity"
android:exported="true"
android:permission="android.permission.TETHER_PRIVILEGED"
android:excludeFromRecents="true"
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 938f5b7..acc9a76 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -74,6 +74,7 @@
import androidx.annotation.StringRes;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.Spannable;
import android.text.SpannableString;
@@ -966,4 +967,13 @@
return packageManager.getDefaultActivityIcon();
}
}
+
+ /** Get {@link Resources} by subscription id if subscription id is valid. */
+ public static Resources getResourcesForSubId(Context context, int subId) {
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ return SubscriptionManager.getResourcesForSubId(context, subId);
+ } else {
+ return context.getResources();
+ }
+ }
}
diff --git a/src/com/android/settings/development/ClearAdbKeysPreferenceController.java b/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
index 9598b37..d94d428 100644
--- a/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
+++ b/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
@@ -20,8 +20,8 @@
import android.hardware.usb.IUsbManager;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.SystemProperties;
import android.os.UserManager;
+import android.sysprop.AdbProperties;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -38,9 +38,6 @@
private static final String TAG = "ClearAdbPrefCtrl";
private static final String CLEAR_ADB_KEYS = "clear_adb_keys";
- @VisibleForTesting
- static final String RO_ADB_SECURE_PROPERTY_KEY = "ro.adb.secure";
-
private final IUsbManager mUsbManager;
private final DevelopmentSettingsDashboardFragment mFragment;
@@ -54,7 +51,7 @@
@Override
public boolean isAvailable() {
- return SystemProperties.getBoolean(RO_ADB_SECURE_PROPERTY_KEY, false /* default */);
+ return AdbProperties.secure().orElse(false);
}
@Override
diff --git a/src/com/android/settings/TetherProvisioningActivity.java b/src/com/android/settings/network/TetherProvisioningActivity.java
similarity index 89%
rename from src/com/android/settings/TetherProvisioningActivity.java
rename to src/com/android/settings/network/TetherProvisioningActivity.java
index e842db1..b30950e 100644
--- a/src/com/android/settings/TetherProvisioningActivity.java
+++ b/src/com/android/settings/network/TetherProvisioningActivity.java
@@ -14,17 +14,21 @@
* limitations under the License.
*/
-package com.android.settings;
+package com.android.settings.network;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.os.UserHandle;
+import android.telephony.SubscriptionManager;
import android.util.Log;
+import com.android.settings.Utils;
+
/**
* Activity which acts as a proxy to the tether provisioning app for sanity checks and permission
* restrictions. Specifically, the provisioning apps require
@@ -47,7 +51,9 @@
int tetherType = getIntent().getIntExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE,
ConnectivityManager.TETHERING_INVALID);
- String[] provisionApp = getResources().getStringArray(
+ final int subId = SubscriptionManager.getDefaultDataSubscriptionId();
+ final Resources res = Utils.getResourcesForSubId(this, subId);
+ final String[] provisionApp = res.getStringArray(
com.android.internal.R.array.config_mobile_hotspot_provision_app);
Intent intent = new Intent(Intent.ACTION_MAIN);
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index 00f4758..c0cb4fc 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -33,6 +33,7 @@
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.ims.ProvisioningManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -42,7 +43,9 @@
import android.widget.TextView;
import com.android.ims.ImsConfig;
+import com.android.ims.ImsException;
import com.android.ims.ImsManager;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.telephony.Phone;
import com.android.settings.R;
@@ -150,6 +153,19 @@
}
};
+ private final ProvisioningManager.Callback mProvisioningCallback =
+ new ProvisioningManager.Callback() {
+ @Override
+ public void onProvisioningIntChanged(int item, int value) {
+ if (item == ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED
+ || item == ImsConfig.ConfigConstants.VLT_SETTING_ENABLED) {
+ // The provisioning policy might have changed. Update the body to make sure
+ // this change takes effect if needed.
+ updateBody();
+ }
+ }
+ };
+
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -219,6 +235,11 @@
return 0;
}
+ @VisibleForTesting
+ ImsManager getImsManager() {
+ return ImsManager.getInstance(getActivity(), SubscriptionManager.getPhoneId(mSubId));
+ }
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -234,8 +255,7 @@
FRAGMENT_BUNDLE_SUBID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
}
- mImsManager = ImsManager.getInstance(
- getActivity(), SubscriptionManager.getPhoneId(mSubId));
+ mImsManager = getImsManager();
mButtonWfcMode = (ListPreference) findPreference(BUTTON_WFC_MODE);
mButtonWfcMode.setOnPreferenceChangeListener(this);
@@ -272,6 +292,13 @@
}
private void updateBody() {
+ if (!mImsManager.isWfcProvisionedOnDevice()) {
+ // This screen is not allowed to be shown due to provisioning policy and should
+ // therefore be closed.
+ finish();
+ return;
+ }
+
CarrierConfigManager configManager = (CarrierConfigManager)
getSystemService(Context.CARRIER_CONFIG_SERVICE);
boolean isWifiOnlySupported = true;
@@ -333,6 +360,14 @@
if (intent.getBooleanExtra(Phone.EXTRA_KEY_ALERT_SHOW, false)) {
showAlert(intent);
}
+
+ // Register callback for provisioning changes.
+ try {
+ mImsManager.getConfigInterface().addConfigCallback(mProvisioningCallback);
+ } catch (ImsException e) {
+ Log.w(TAG, "onResume: Unable to register callback for provisioning changes.");
+ }
+
}
@Override
@@ -351,6 +386,15 @@
}
context.unregisterReceiver(mIntentReceiver);
+
+ // Remove callback for provisioning changes.
+ try {
+ mImsManager.getConfigInterface().removeConfigCallback(
+ mProvisioningCallback.getBinder());
+ } catch (ImsException e) {
+ Log.w(TAG, "onPause: Unable to remove callback for provisioning changes");
+ }
+
}
/**
diff --git a/src/com/android/settings/wifi/tether/TetherService.java b/src/com/android/settings/wifi/tether/TetherService.java
index e491de8..d1e8652 100644
--- a/src/com/android/settings/wifi/tether/TetherService.java
+++ b/src/com/android/settings/wifi/tether/TetherService.java
@@ -32,16 +32,20 @@
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.os.IBinder;
import android.os.ResultReceiver;
import android.os.SystemClock;
+import android.telephony.SubscriptionManager;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.Utils;
+
import java.util.ArrayList;
import java.util.List;
@@ -65,7 +69,7 @@
private int mCurrentTypeIndex;
private boolean mInProvisionCheck;
- private UsageStatsManagerWrapper mUsageManagerWrapper;
+ private TetherServiceWrapper mWrapper;
private ArrayList<Integer> mCurrentTethers;
private ArrayMap<Integer, List<ResultReceiver>> mPendingCallbacks;
private HotspotOffReceiver mHotspotReceiver;
@@ -79,7 +83,7 @@
public void onCreate() {
super.onCreate();
if (DEBUG) Log.d(TAG, "Creating TetherService");
- String provisionResponse = getResources().getString(
+ String provisionResponse = getResourceForDefaultDataSubId().getString(
com.android.internal.R.string.config_mobile_hotspot_provision_response);
registerReceiver(mReceiver, new IntentFilter(provisionResponse),
android.Manifest.permission.CONNECTIVITY_INTERNAL, null);
@@ -91,9 +95,6 @@
mPendingCallbacks.put(ConnectivityManager.TETHERING_USB, new ArrayList<ResultReceiver>());
mPendingCallbacks.put(
ConnectivityManager.TETHERING_BLUETOOTH, new ArrayList<ResultReceiver>());
- if (mUsageManagerWrapper == null) {
- mUsageManagerWrapper = new UsageStatsManagerWrapper(this);
- }
mHotspotReceiver = new HotspotOffReceiver(this);
}
@@ -258,7 +259,7 @@
}
private Intent getProvisionBroadcastIntent(int index) {
- String provisionAction = getResources().getString(
+ String provisionAction = getResourceForDefaultDataSubId().getString(
com.android.internal.R.string.config_mobile_hotspot_provision_app_no_ui);
Intent intent = new Intent(provisionAction);
int type = mCurrentTethers.get(index);
@@ -282,7 +283,7 @@
for (ResolveInfo resolver : resolvers) {
if (resolver.activityInfo.applicationInfo.isSystemApp()) {
String packageName = resolver.activityInfo.packageName;
- mUsageManagerWrapper.setAppInactive(packageName, false);
+ getTetherServiceWrapper().setAppInactive(packageName, false);
}
}
}
@@ -294,7 +295,7 @@
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
- int period = getResources().getInteger(
+ int period = getResourceForDefaultDataSubId().getInteger(
com.android.internal.R.integer.config_mobile_hotspot_provision_check_period);
long periodMs = period * MS_PER_HOUR;
long firstTime = SystemClock.elapsedRealtime() + periodMs;
@@ -347,7 +348,7 @@
@Override
public void onReceive(Context context, Intent intent) {
if (DEBUG) Log.d(TAG, "Got provision result " + intent);
- String provisionResponse = getResources().getString(
+ String provisionResponse = getResourceForDefaultDataSubId().getString(
com.android.internal.R.string.config_mobile_hotspot_provision_response);
if (provisionResponse.equals(intent.getAction())) {
@@ -385,19 +386,27 @@
};
@VisibleForTesting
- void setUsageStatsManagerWrapper(UsageStatsManagerWrapper wrapper) {
- mUsageManagerWrapper = wrapper;
+ void setTetherServiceWrapper(TetherServiceWrapper wrapper) {
+ mWrapper = wrapper;
+ }
+
+ private TetherServiceWrapper getTetherServiceWrapper() {
+ if (mWrapper == null) {
+ mWrapper = new TetherServiceWrapper(this);
+ }
+ return mWrapper;
}
/**
- * A static helper class used for tests. UsageStatsManager cannot be mocked out becasue
- * it's marked final. This class can be mocked out instead.
+ * A static helper class used for tests. UsageStatsManager cannot be mocked out because
+ * it's marked final. Static method SubscriptionManager#getResourcesForSubId also cannot
+ * be mocked. This class can be mocked out instead.
*/
@VisibleForTesting
- public static class UsageStatsManagerWrapper {
+ public static class TetherServiceWrapper {
private final UsageStatsManager mUsageStatsManager;
- UsageStatsManagerWrapper(Context context) {
+ TetherServiceWrapper(Context context) {
mUsageStatsManager = (UsageStatsManager)
context.getSystemService(Context.USAGE_STATS_SERVICE);
}
@@ -405,5 +414,15 @@
void setAppInactive(String packageName, boolean isInactive) {
mUsageStatsManager.setAppInactive(packageName, isInactive);
}
+
+ int getDefaultDataSubscriptionId() {
+ return SubscriptionManager.getDefaultDataSubscriptionId();
+ }
+ }
+
+ @VisibleForTesting
+ Resources getResourceForDefaultDataSubId() {
+ final int subId = getTetherServiceWrapper().getDefaultDataSubscriptionId();
+ return Utils.getResourcesForSubId(this, subId);
}
}
diff --git a/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java
index 6f7c224..772a32f 100644
--- a/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import static com.android.settings.development.ClearAdbKeysPreferenceController.RO_ADB_SECURE_PROPERTY_KEY;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
@@ -28,7 +27,7 @@
import android.content.Context;
import android.hardware.usb.IUsbManager;
import android.os.RemoteException;
-import android.os.SystemProperties;
+import android.sysprop.AdbProperties;
import androidx.preference.SwitchPreference;
import androidx.preference.PreferenceScreen;
@@ -79,21 +78,21 @@
@Test
public void isAvailable_roAdbSecureEnabled_shouldBeTrue() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ AdbProperties.secure(true);
assertThat(mController.isAvailable()).isTrue();
}
@Test
public void isAvailable_roAdbSecureDisabled_shouldBeFalse() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(false));
+ AdbProperties.secure(false);
assertThat(mController.isAvailable()).isFalse();
}
@Test
public void displayPreference_isNotAdminUser_preferenceShouldBeDisabled() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ AdbProperties.secure(true);
doReturn(false).when(mController).isAdminUser();
mController.displayPreference(mScreen);
@@ -104,7 +103,7 @@
@Test
@Config(shadows = ShadowClearAdbKeysWarningDialog.class)
public void handlePreferenceTreeClick_clearAdbKeysPreference_shouldShowWarningDialog() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ AdbProperties.secure(true);
doReturn(true).when(mController).isAdminUser();
mController.displayPreference(mScreen);
final String preferenceKey = mController.getPreferenceKey();
@@ -117,7 +116,7 @@
@Test
public void handlePreferenceTreeClick_notClearAdbKeysPreference_shouldReturnFalse() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ AdbProperties.secure(true);
doReturn(true).when(mController).isAdminUser();
mController.displayPreference(mScreen);
when(mPreference.getKey()).thenReturn("Some random key!!!");
@@ -128,7 +127,7 @@
@Test
public void handlePreferenceTreeClick_monkeyUser_shouldReturnFalse() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ AdbProperties.secure(true);
doReturn(true).when(mController).isAdminUser();
ShadowUtils.setIsUserAMonkey(true);
mController.displayPreference(mScreen);
@@ -142,7 +141,7 @@
@Test
public void onDeveloperOptionsSwitchEnabled_isAdminUser_shouldEnablePreference() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ AdbProperties.secure(true);
doReturn(true).when(mController).isAdminUser();
mController.displayPreference(mScreen);
mController.onDeveloperOptionsSwitchEnabled();
@@ -152,7 +151,7 @@
@Test
public void onDeveloperOptionsSwitchEnabled_isNotAdminUser_shouldNotEnablePreference() {
- SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ AdbProperties.secure(true);
doReturn(false).when(mController).isAdminUser();
mController.displayPreference(mScreen);
mController.onDeveloperOptionsSwitchEnabled();
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
index d60f8cf..a5e80c6 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
@@ -18,17 +18,135 @@
import static com.google.common.truth.Truth.assertThat;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.telephony.ims.ProvisioningManager;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.preference.ListPreference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.ims.ImsConfig;
+import com.android.ims.ImsException;
+import com.android.ims.ImsManager;
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.ToggleSwitch;
+
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = SettingsShadowResources.SettingsShadowTheme.class)
public class WifiCallingSettingsForSubTest {
+ private TestFragment mFragment;
+ private Context mContext;
+ private TextView mEmptyView;
+
+ @Mock private ImsManager mImsManager;
+ @Mock private PreferenceScreen mPreferenceScreen;
+ @Mock private SettingsActivity mActivity;
+ @Mock private SwitchBar mSwitchBar;
+ @Mock private ToggleSwitch mToggleSwitch;
+ @Mock private View mView;
+ @Mock private ImsConfig mImsConfig;
+
+ @Before
+ public void setUp() throws NoSuchFieldException, ImsException {
+ MockitoAnnotations.initMocks(this);
+ FakeFeatureFactory.setupForTest();
+
+ mContext = RuntimeEnvironment.application;
+ doReturn(mContext.getTheme()).when(mActivity).getTheme();
+
+ mFragment = spy(new TestFragment());
+ doReturn(mActivity).when(mFragment).getActivity();
+ doReturn(mock(Intent.class)).when(mActivity).getIntent();
+ doReturn(mContext.getResources()).when(mFragment).getResources();
+ doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
+ final Bundle bundle = new Bundle();
+ when(mFragment.getArguments()).thenReturn(bundle);
+ doNothing().when(mFragment).addPreferencesFromResource(anyInt());
+ doReturn(mock(ListPreference.class)).when(mFragment).findPreference(any());
+ doNothing().when(mFragment).finish();
+ doReturn(mView).when(mFragment).getView();
+
+ mEmptyView = new TextView(mContext);
+ doReturn(mEmptyView).when(mView).findViewById(android.R.id.empty);
+
+ ReflectionHelpers.setField(mSwitchBar, "mSwitch", mToggleSwitch);
+ doReturn(mSwitchBar).when(mView).findViewById(R.id.switch_bar);
+
+ doReturn(mImsManager).when(mFragment).getImsManager();
+ doReturn(mImsConfig).when(mImsManager).getConfigInterface();
+ doReturn(true).when(mImsManager).isWfcProvisionedOnDevice();
+
+ mFragment.onAttach(mContext);
+ mFragment.onCreate(null);
+ mFragment.onActivityCreated(null);
+ }
@Test
public void getHelpResource_shouldReturn0() {
- assertThat(new WifiCallingSettingsForSub().getHelpResource())
- .isEqualTo(0);
+ assertThat(mFragment.getHelpResource()).isEqualTo(0);
+ }
+
+ @Test
+ public void onResume_provisioningAllowed_shouldNotFinish() throws ImsException {
+ // Call onResume while provisioning is allowed.
+ mFragment.onResume();
+
+ // Verify that finish() is not called.
+ verify(mFragment, never()).finish();
+ }
+
+ @Test
+ public void onResume_provisioningDisallowed_shouldFinish() {
+ // Call onResume while provisioning is disallowed.
+ doReturn(false).when(mImsManager).isWfcProvisionedOnDevice();
+ mFragment.onResume();
+
+ // Verify that finish() is called
+ verify(mFragment).finish();
+ }
+
+ @Test
+ public void onResumeOnPause_provisioningCallbackRegistration() throws ImsException {
+ // Verify that provisioning callback is registered after call to onResume().
+ mFragment.onResume();
+ verify(mImsConfig).addConfigCallback(any(ProvisioningManager.Callback.class));
+
+ // Verify that provisioning callback is unregistered after call to onPause.
+ mFragment.onPause();
+ verify(mImsConfig).removeConfigCallback(any());
+ }
+
+ protected static class TestFragment extends WifiCallingSettingsForSub {
+ @Override
+ protected Object getSystemService(final String name) {
+ return null;
+ }
}
}
diff --git a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
index 7bf5798..dc96c02 100644
--- a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
+++ b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
@@ -31,6 +31,7 @@
import static android.net.ConnectivityManager.TETHERING_WIFI;
import static android.net.ConnectivityManager.TETHER_ERROR_NO_ERROR;
import static android.net.ConnectivityManager.TETHER_ERROR_PROVISION_FAILED;
+import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import android.app.Activity;
import android.app.AlarmManager;
@@ -82,7 +83,7 @@
private TetherService mService;
private MockResources mResources;
- private FakeUsageStatsManagerWrapper mUsageStatsManagerWrapper;
+ private MockTetherServiceWrapper mWrapper;
int mLastReceiverResultCode = BOGUS_RECEIVER_RESULT;
private int mLastTetherRequestType = TETHERING_INVALID;
private int mProvisionResponse = BOGUS_RECEIVER_RESULT;
@@ -124,7 +125,7 @@
when(mPrefs.edit()).thenReturn(mPrefEditor);
when(mPrefEditor.putString(eq(CURRENT_TYPES), mStoredTypes.capture())).thenReturn(
mPrefEditor);
- mUsageStatsManagerWrapper = new FakeUsageStatsManagerWrapper(mContext);
+ mWrapper = new MockTetherServiceWrapper(mContext);
ResolveInfo systemAppResolveInfo = new ResolveInfo();
ActivityInfo systemActivityInfo = new ActivityInfo();
@@ -145,6 +146,8 @@
resolvers.add(systemAppResolveInfo);
when(mPackageManager.queryBroadcastReceivers(
any(Intent.class), eq(PackageManager.MATCH_ALL))).thenReturn(resolvers);
+ setupService();
+ getService().setTetherServiceWrapper(mWrapper);
}
@Override
@@ -170,16 +173,13 @@
}
public void testStartKeepsProvisionAppActive() {
- setupService();
- getService().setUsageStatsManagerWrapper(mUsageStatsManagerWrapper);
-
runProvisioningForType(TETHERING_WIFI);
assertTrue(waitForProvisionRequest(TETHERING_WIFI));
assertTrue(waitForProvisionResponse(TETHER_ERROR_NO_ERROR));
- assertFalse(mUsageStatsManagerWrapper.isAppInactive(ENTITLEMENT_PACKAGE_NAME));
+ assertFalse(mWrapper.isAppInactive(ENTITLEMENT_PACKAGE_NAME));
// Non-system handler of the intent action should stay idle.
- assertTrue(mUsageStatsManagerWrapper.isAppInactive(FAKE_PACKAGE_NAME));
+ assertTrue(mWrapper.isAppInactive(FAKE_PACKAGE_NAME));
}
public void testScheduleRechecks() {
@@ -418,11 +418,11 @@
}
}
- private static class FakeUsageStatsManagerWrapper
- extends TetherService.UsageStatsManagerWrapper {
+ private static class MockTetherServiceWrapper
+ extends TetherService.TetherServiceWrapper {
private final Set<String> mActivePackages;
- FakeUsageStatsManagerWrapper(Context context) {
+ MockTetherServiceWrapper(Context context) {
super(context);
mActivePackages = new HashSet<>();
}
@@ -439,5 +439,10 @@
boolean isAppInactive(String packageName) {
return !mActivePackages.contains(packageName);
}
+
+ @Override
+ int getDefaultDataSubscriptionId() {
+ return INVALID_SUBSCRIPTION_ID;
+ }
}
}