Merge "Fix CarrierSettings preference"
This commit is contained in:
committed by
Android (Google) Code Review
commit
41b06fd48e
@@ -17,6 +17,10 @@
|
||||
package com.android.settings.network.telephony;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.os.PersistableBundle;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
@@ -62,10 +66,31 @@ public class CarrierPreferenceController extends BasePreferenceController {
|
||||
@Override
|
||||
public boolean handlePreferenceTreeClick(Preference preference) {
|
||||
if (getPreferenceKey().equals(preference.getKey())) {
|
||||
//TODO(b/117651939): start carrier settings activity
|
||||
final Intent carrierSettingsIntent = getCarrierSettingsActivityIntent(mSubId);
|
||||
if (carrierSettingsIntent != null) {
|
||||
mContext.startActivity(carrierSettingsIntent);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Intent getCarrierSettingsActivityIntent(int subId) {
|
||||
final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId);
|
||||
final ComponentName cn = ComponentName.unflattenFromString(
|
||||
config == null ? "" : config.getString(
|
||||
CarrierConfigManager.KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING,
|
||||
"" /* default value */));
|
||||
|
||||
if (cn == null) return null;
|
||||
|
||||
final Intent intent = new Intent(Intent.ACTION_MAIN);
|
||||
intent.setComponent(cn);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
final PackageManager pm = mContext.getPackageManager();
|
||||
final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0 /* flags */);
|
||||
return resolveInfo != null ? intent : null;
|
||||
}
|
||||
}
|
||||
|
@@ -21,10 +21,18 @@ import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_U
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.os.PersistableBundle;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
@@ -38,12 +46,15 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
public class CarrierPreferenceControllerTest {
|
||||
private static final int SUB_ID = 2;
|
||||
private static final String CARRIER_SETTINGS_COMPONENT = "packageName/className";
|
||||
|
||||
@Mock
|
||||
private TelephonyManager mTelephonyManager;
|
||||
@@ -106,4 +117,55 @@ public class CarrierPreferenceControllerTest {
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handlePreferenceClick_activityFound_openCarrierSettingActivity() {
|
||||
final PersistableBundle bundle = new PersistableBundle();
|
||||
bundle.putString(
|
||||
CarrierConfigManager.KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING,
|
||||
CARRIER_SETTINGS_COMPONENT);
|
||||
doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
|
||||
PackageManager pm = Mockito.mock(PackageManager.class);
|
||||
doReturn(pm).when(mContext).getPackageManager();
|
||||
doReturn(new ResolveInfo()).when(pm).resolveActivity(any(Intent.class), anyInt());
|
||||
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||
verify(mContext).startActivity(captor.capture());
|
||||
final Intent intent = captor.getValue();
|
||||
assertThat(intent.getComponent()).isEqualTo(
|
||||
ComponentName.unflattenFromString(CARRIER_SETTINGS_COMPONENT));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handlePreferenceClick_activityNotFound_DoNothing() {
|
||||
final PersistableBundle bundle = new PersistableBundle();
|
||||
bundle.putString(
|
||||
CarrierConfigManager.KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING,
|
||||
CARRIER_SETTINGS_COMPONENT);
|
||||
doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
|
||||
PackageManager pm = Mockito.mock(PackageManager.class);
|
||||
doReturn(pm).when(mContext).getPackageManager();
|
||||
doReturn(null).when(pm).resolveActivity(any(Intent.class), anyInt());
|
||||
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||
verify(mContext, never()).startActivity(captor.capture());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handlePreferenceClick_activityNotConfigured_DoNothing() {
|
||||
final PersistableBundle bundle = new PersistableBundle();
|
||||
doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
|
||||
PackageManager pm = Mockito.mock(PackageManager.class);
|
||||
doReturn(pm).when(mContext).getPackageManager();
|
||||
doReturn(new ResolveInfo()).when(pm).resolveActivity(any(Intent.class), anyInt());
|
||||
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||
verify(mContext, never()).startActivity(captor.capture());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user