Merge "Refesh mobile network details page on carrier config changes" into qt-r1-dev am: 985d3d570d

am: 42861b21c9

Change-Id: I0f3fae2daf7c5df5985e2fd6597fdf563fdb095c
This commit is contained in:
Antony Sargent
2019-07-30 10:28:26 -07:00
committed by android-build-merger
2 changed files with 72 additions and 16 deletions

View File

@@ -23,6 +23,7 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.view.Menu; import android.view.Menu;
@@ -93,13 +94,18 @@ public class MobileNetworkActivity extends SettingsBaseActivity {
setContentView(R.layout.mobile_network_settings_container); setContentView(R.layout.mobile_network_settings_container);
} }
setActionBar(findViewById(R.id.mobile_action_bar)); setActionBar(findViewById(R.id.mobile_action_bar));
mPhoneChangeReceiver = new PhoneChangeReceiver(this, () -> { mPhoneChangeReceiver = new PhoneChangeReceiver(this, new PhoneChangeReceiver.Client() {
if (mCurSubscriptionId != SUB_ID_NULL) { @Override
// When the radio changes (ex: CDMA->GSM), refresh the fragment. public void onPhoneChange() {
// This is very rare. // When the radio or carrier config changes (ex: CDMA->GSM), refresh the fragment.
switchFragment(new MobileNetworkSettings(), mCurSubscriptionId, switchFragment(new MobileNetworkSettings(), mCurSubscriptionId,
true /* forceUpdate */); true /* forceUpdate */);
} }
@Override
public int getSubscriptionId() {
return mCurSubscriptionId;
}
}); });
mSubscriptionManager = getSystemService(SubscriptionManager.class); mSubscriptionManager = getSystemService(SubscriptionManager.class);
mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList(true); mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList(true);
@@ -250,14 +256,12 @@ public class MobileNetworkActivity extends SettingsBaseActivity {
@VisibleForTesting @VisibleForTesting
static class PhoneChangeReceiver extends BroadcastReceiver { static class PhoneChangeReceiver extends BroadcastReceiver {
private static final IntentFilter RADIO_TECHNOLOGY_CHANGED_FILTER = new IntentFilter(
TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
private Context mContext; private Context mContext;
private Client mClient; private Client mClient;
interface Client { interface Client {
void onPhoneChange(); void onPhoneChange();
int getSubscriptionId();
} }
public PhoneChangeReceiver(Context context, Client client) { public PhoneChangeReceiver(Context context, Client client) {
@@ -266,7 +270,10 @@ public class MobileNetworkActivity extends SettingsBaseActivity {
} }
public void register() { public void register() {
mContext.registerReceiver(this, RADIO_TECHNOLOGY_CHANGED_FILTER); final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
mContext.registerReceiver(this, intentFilter);
} }
public void unregister() { public void unregister() {
@@ -275,9 +282,17 @@ public class MobileNetworkActivity extends SettingsBaseActivity {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (!isInitialStickyBroadcast()) { if (isInitialStickyBroadcast()) {
mClient.onPhoneChange(); return;
} }
if (intent.getAction().equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
if (!intent.hasExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX) ||
intent.getIntExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, -1)
!= mClient.getSubscriptionId()) {
return;
}
}
mClient.onPhoneChange();
} }
} }
} }

View File

@@ -22,7 +22,10 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn; 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.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -31,6 +34,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
@@ -161,19 +165,56 @@ public class MobileNetworkActivityTest {
@Test @Test
public void phoneChangeReceiver_ignoresStickyBroadcastFromBeforeRegistering() { public void phoneChangeReceiver_ignoresStickyBroadcastFromBeforeRegistering() {
Activity activity = Robolectric.setupActivity(Activity.class); Activity activity = Robolectric.setupActivity(Activity.class);
final int[] onChangeCallbackCount = {0}; MobileNetworkActivity.PhoneChangeReceiver.Client client = mock(
MobileNetworkActivity.PhoneChangeReceiver.Client.class);
MobileNetworkActivity.PhoneChangeReceiver receiver = MobileNetworkActivity.PhoneChangeReceiver receiver =
new MobileNetworkActivity.PhoneChangeReceiver(activity, () -> { new MobileNetworkActivity.PhoneChangeReceiver(activity, client);
onChangeCallbackCount[0]++;
});
Intent intent = new Intent(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED); Intent intent = new Intent(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
activity.sendStickyBroadcast(intent); activity.sendStickyBroadcast(intent);
receiver.register(); receiver.register();
assertThat(onChangeCallbackCount[0]).isEqualTo(0); verify(client, never()).onPhoneChange();
activity.sendStickyBroadcast(intent); activity.sendStickyBroadcast(intent);
assertThat(onChangeCallbackCount[0]).isEqualTo(1); verify(client, times(1)).onPhoneChange();
}
@Test
public void phoneChangeReceiver_ignoresCarrierConfigChangeForWrongSubscriptionId() {
Activity activity = Robolectric.setupActivity(Activity.class);
MobileNetworkActivity.PhoneChangeReceiver.Client client = mock(
MobileNetworkActivity.PhoneChangeReceiver.Client.class);
doReturn(2).when(client).getSubscriptionId();
MobileNetworkActivity.PhoneChangeReceiver receiver =
new MobileNetworkActivity.PhoneChangeReceiver(activity, client);
receiver.register();
Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
intent.putExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, 3);
activity.sendBroadcast(intent);
verify(client, never()).onPhoneChange();
}
@Test
public void phoneChangeReceiver_dispatchesCarrierConfigChangeForCorrectSubscriptionId() {
Activity activity = Robolectric.setupActivity(Activity.class);
MobileNetworkActivity.PhoneChangeReceiver.Client client = mock(
MobileNetworkActivity.PhoneChangeReceiver.Client.class);
doReturn(2).when(client).getSubscriptionId();
MobileNetworkActivity.PhoneChangeReceiver receiver =
new MobileNetworkActivity.PhoneChangeReceiver(activity, client);
receiver.register();
Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
intent.putExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, 2);
activity.sendBroadcast(intent);
verify(client).onPhoneChange();
} }