Revert "Revert "[Settings] Remove dependency of TelephonyIntents""

This reverts commit 36d1c17c71.

Reason for revert: Fix has landed at ag/10241730

Change-Id: Iabde9194ed69b7bdb0a91058242bc0c239496dc5
This commit is contained in:
Bonian Chen
2020-02-04 13:52:41 +00:00
parent 36d1c17c71
commit 106e52e021
3 changed files with 109 additions and 20 deletions

View File

@@ -17,17 +17,18 @@
package com.android.settings.homepage.contextualcards.conditional;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.telephony.PhoneStateListener;
import android.telephony.PreciseDataConnectionState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import com.android.internal.telephony.TelephonyIntents;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.homepage.contextualcards.ContextualCard;
import com.android.settings.network.GlobalSettingsChangeListener;
import java.util.Objects;
@@ -35,22 +36,35 @@ public class CellularDataConditionController implements ConditionalCardControlle
static final int ID = Objects.hash("CellularDataConditionController");
private static final IntentFilter DATA_CONNECTION_FILTER =
new IntentFilter(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
private final Context mAppContext;
private final ConditionManager mConditionManager;
private final Receiver mReceiver;
private final TelephonyManager mTelephonyManager;
private final GlobalSettingsChangeListener mDefaultDataSubscriptionIdListener;
private final ConnectivityManager mConnectivityManager;
private int mSubId;
private TelephonyManager mTelephonyManager;
private boolean mIsListeningConnectionChange;
public CellularDataConditionController(Context appContext, ConditionManager conditionManager) {
mAppContext = appContext;
mConditionManager = conditionManager;
mReceiver = new Receiver();
mSubId = getDefaultDataSubscriptionId(appContext);
mTelephonyManager = getTelephonyManager(appContext, mSubId);
mDefaultDataSubscriptionIdListener = new GlobalSettingsChangeListener(appContext,
android.provider.Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION) {
public void onChanged(String field) {
final int subId = getDefaultDataSubscriptionId(mAppContext);
if (subId == mSubId) {
return;
}
mSubId = subId;
if (mIsListeningConnectionChange) {
restartPhoneStateListener(mAppContext, subId);
}
}
};
mConnectivityManager = appContext.getSystemService(
ConnectivityManager.class);
mTelephonyManager = appContext.getSystemService(TelephonyManager.class);
}
@Override
@@ -95,21 +109,50 @@ public class CellularDataConditionController implements ConditionalCardControlle
@Override
public void startMonitoringStateChange() {
mAppContext.registerReceiver(mReceiver, DATA_CONNECTION_FILTER);
restartPhoneStateListener(mAppContext, mSubId);
}
@Override
public void stopMonitoringStateChange() {
mAppContext.unregisterReceiver(mReceiver);
stopPhoneStateListener();
}
public class Receiver extends BroadcastReceiver {
private int getDefaultDataSubscriptionId(Context context) {
final SubscriptionManager subscriptionManager =
context.getSystemService(SubscriptionManager.class);
return subscriptionManager.getDefaultDataSubscriptionId();
}
private TelephonyManager getTelephonyManager(Context context, int subId) {
final TelephonyManager telephonyManager =
context.getSystemService(TelephonyManager.class);
return telephonyManager.createForSubscriptionId(subId);
}
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@Override
public void onReceive(Context context, Intent intent) {
if (TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED.equals(
intent.getAction())) {
mConditionManager.onConditionChanged();
}
public void onPreciseDataConnectionStateChanged(
PreciseDataConnectionState dataConnectionState) {
mConditionManager.onConditionChanged();
}
};
private void stopPhoneStateListener() {
mIsListeningConnectionChange = false;
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
}
// restart monitoring when subscription has been changed
private void restartPhoneStateListener(Context context, int subId) {
stopPhoneStateListener();
mIsListeningConnectionChange = true;
// switch mTelephonyManager only when subscription been updated to valid ones
if (SubscriptionManager.isValidSubscriptionId(subId)) {
mTelephonyManager = getTelephonyManager(context, subId);
}
mTelephonyManager.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE);
}
}