Loading packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +7 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import android.permission.PermissionManager; import android.service.dreams.DreamService; import android.service.dreams.IDreamManager; import android.telecom.TelecomManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.view.IWindowManager; import android.view.ViewConfiguration; Loading Loading @@ -326,6 +327,12 @@ public class FrameworkServicesModule { return context.getSystemService(StatsManager.class); } @Provides @Singleton static SubscriptionManager provideSubcriptionManager(Context context) { return context.getSystemService(SubscriptionManager.class); } @Provides @Singleton @Nullable Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +5 −5 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.os.Message; import android.telephony.SubscriptionInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; Loading @@ -32,6 +33,8 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; /** * Implements network listeners and forwards the calls along onto other listeners but on Loading Loading @@ -60,12 +63,9 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa private int mHistoryIndex; private String mLastCallback; public CallbackHandler() { super(Looper.getMainLooper()); } @Inject @VisibleForTesting CallbackHandler(Looper looper) { CallbackHandler(@Main Looper looper) { super(looper); } Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +36 −23 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.concurrent.Executor; import javax.inject.Inject; Loading Loading @@ -171,6 +172,8 @@ public class NetworkControllerImpl extends BroadcastReceiver private NetworkCapabilities mLastDefaultNetworkCapabilities; // Handler that all broadcasts are received on. private final Handler mReceiverHandler; private final Looper mBgLooper; private final Executor mBgExecutor; // Handler that all callbacks are made on. private final CallbackHandler mCallbackHandler; Loading Loading @@ -198,6 +201,9 @@ public class NetworkControllerImpl extends BroadcastReceiver public NetworkControllerImpl( Context context, @Background Looper bgLooper, @Background Executor bgExecutor, SubscriptionManager subscriptionManager, CallbackHandler callbackHandler, DeviceProvisionedController deviceProvisionedController, BroadcastDispatcher broadcastDispatcher, ConnectivityManager connectivityManager, Loading @@ -212,8 +218,11 @@ public class NetworkControllerImpl extends BroadcastReceiver telephonyListenerManager, wifiManager, networkScoreManager, SubscriptionManager.from(context), Config.readConfig(context), bgLooper, new CallbackHandler(), subscriptionManager, Config.readConfig(context), bgLooper, bgExecutor, callbackHandler, accessPointController, new DataUsageController(context), new SubscriptionDefaults(), Loading @@ -230,6 +239,7 @@ public class NetworkControllerImpl extends BroadcastReceiver WifiManager wifiManager, NetworkScoreManager networkScoreManager, SubscriptionManager subManager, Config config, Looper bgLooper, Executor bgExecutor, CallbackHandler callbackHandler, AccessPointControllerImpl accessPointController, DataUsageController dataUsageController, Loading @@ -241,6 +251,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mTelephonyListenerManager = telephonyListenerManager; mConfig = config; mReceiverHandler = new Handler(bgLooper); mBgLooper = bgLooper; mBgExecutor = bgExecutor; mCallbackHandler = callbackHandler; mDataSaverController = new DataSaverControllerImpl(context); mBroadcastDispatcher = broadcastDispatcher; Loading Loading @@ -377,9 +389,10 @@ public class NetworkControllerImpl extends BroadcastReceiver // TODO: Move off of the deprecated CONNECTIVITY_ACTION broadcast and rely on callbacks // exclusively for status bar icons. mConnectivityManager.registerDefaultNetworkCallback(callback, mReceiverHandler); // Register the listener on our bg looper // Run the listener on our bg looper mPhoneStateListener = subId -> { // For data switching from A to B, we assume B is validated for up to 2 seconds iff: mBgExecutor.execute(() -> { // For data switching from A to B, we assume B is validated for up to 2 seconds if: // 1) A and B are in the same subscription group e.g. CBRS data switch. And // 2) A was validated before the switch. // This is to provide smooth transition for UI without showing cross during data Loading @@ -392,6 +405,7 @@ public class NetworkControllerImpl extends BroadcastReceiver } mActiveMobileDataSubscription = subId; doUpdateMobileControllers(); }); }; mDemoModeController.addCallback(this); Loading Loading @@ -428,7 +442,7 @@ public class NetworkControllerImpl extends BroadcastReceiver mobileSignalController.registerListener(); } if (mSubscriptionListener == null) { mSubscriptionListener = new SubListener(); mSubscriptionListener = new SubListener(mBgLooper); } mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener); mTelephonyListenerManager.addActiveDataSubscriptionIdListener(mPhoneStateListener); Loading Loading @@ -1336,6 +1350,10 @@ public class NetworkControllerImpl extends BroadcastReceiver } private class SubListener extends OnSubscriptionsChangedListener { SubListener(Looper looper) { super(looper); } @Override public void onSubscriptionsChanged() { updateMobileControllers(); Loading @@ -1346,10 +1364,5 @@ public class NetworkControllerImpl extends BroadcastReceiver * Used to register listeners from the BG Looper, this way the PhoneStateListeners that * get created will also run on the BG Looper. */ private final Runnable mRegisterListeners = new Runnable() { @Override public void run() { registerListeners(); } }; private final Runnable mRegisterListeners = () -> registerListeners(); } packages/SystemUI/src/com/android/systemui/telephony/TelephonyCallback.java +15 −9 Original line number Diff line number Diff line Loading @@ -54,9 +54,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback @Override public void onActiveDataSubscriptionIdChanged(int subId) { mActiveDataSubscriptionIdListeners.forEach(listener -> { listener.onActiveDataSubscriptionIdChanged(subId); }); List<ActiveDataSubscriptionIdListener> listeners; synchronized (mActiveDataSubscriptionIdListeners) { listeners = new ArrayList<>(mActiveDataSubscriptionIdListeners); } listeners.forEach(listener -> listener.onActiveDataSubscriptionIdChanged(subId)); } void addActiveDataSubscriptionIdListener(ActiveDataSubscriptionIdListener listener) { Loading @@ -69,9 +71,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback @Override public void onCallStateChanged(int state) { mCallStateListeners.forEach(listener -> { listener.onCallStateChanged(state); }); List<CallStateListener> listeners; synchronized (mCallStateListeners) { listeners = new ArrayList<>(mCallStateListeners); } listeners.forEach(listener -> listener.onCallStateChanged(state)); } void addCallStateListener(CallStateListener listener) { Loading @@ -84,9 +88,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback @Override public void onServiceStateChanged(@NonNull ServiceState serviceState) { mServiceStateListeners.forEach(listener -> { listener.onServiceStateChanged(serviceState); }); List<ServiceStateListener> listeners; synchronized (mServiceStateListeners) { listeners = new ArrayList<>(mServiceStateListeners); } listeners.forEach(listener -> listener.onServiceStateChanged(serviceState)); } void addServiceStateListener(ServiceStateListener listener) { Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -77,6 +77,8 @@ import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import com.android.systemui.telephony.TelephonyListenerManager; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import org.junit.After; import org.junit.Before; Loading Loading @@ -123,6 +125,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase { protected DeviceProvisionedListener mUserCallback; protected Instrumentation mInstrumentation; protected DemoModeController mDemoModeController; protected FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); protected int mSubId; Loading Loading @@ -222,6 +225,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mMockSm, mConfig, TestableLooper.get(this).getLooper(), mFakeExecutor, mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), Loading Loading @@ -291,7 +295,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase { NetworkControllerImpl networkControllerNoMobile = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mTelephonyListenerManager, mMockWm, mMockNsm, mMockSm, mConfig, TestableLooper.get(this).getLooper(), mCallbackHandler, mConfig, TestableLooper.get(this).getLooper(), mFakeExecutor, mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, mDemoModeController); Loading Loading
packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +7 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import android.permission.PermissionManager; import android.service.dreams.DreamService; import android.service.dreams.IDreamManager; import android.telecom.TelecomManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.view.IWindowManager; import android.view.ViewConfiguration; Loading Loading @@ -326,6 +327,12 @@ public class FrameworkServicesModule { return context.getSystemService(StatsManager.class); } @Provides @Singleton static SubscriptionManager provideSubcriptionManager(Context context) { return context.getSystemService(SubscriptionManager.class); } @Provides @Singleton @Nullable Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +5 −5 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.os.Message; import android.telephony.SubscriptionInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; Loading @@ -32,6 +33,8 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; /** * Implements network listeners and forwards the calls along onto other listeners but on Loading Loading @@ -60,12 +63,9 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa private int mHistoryIndex; private String mLastCallback; public CallbackHandler() { super(Looper.getMainLooper()); } @Inject @VisibleForTesting CallbackHandler(Looper looper) { CallbackHandler(@Main Looper looper) { super(looper); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +36 −23 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.concurrent.Executor; import javax.inject.Inject; Loading Loading @@ -171,6 +172,8 @@ public class NetworkControllerImpl extends BroadcastReceiver private NetworkCapabilities mLastDefaultNetworkCapabilities; // Handler that all broadcasts are received on. private final Handler mReceiverHandler; private final Looper mBgLooper; private final Executor mBgExecutor; // Handler that all callbacks are made on. private final CallbackHandler mCallbackHandler; Loading Loading @@ -198,6 +201,9 @@ public class NetworkControllerImpl extends BroadcastReceiver public NetworkControllerImpl( Context context, @Background Looper bgLooper, @Background Executor bgExecutor, SubscriptionManager subscriptionManager, CallbackHandler callbackHandler, DeviceProvisionedController deviceProvisionedController, BroadcastDispatcher broadcastDispatcher, ConnectivityManager connectivityManager, Loading @@ -212,8 +218,11 @@ public class NetworkControllerImpl extends BroadcastReceiver telephonyListenerManager, wifiManager, networkScoreManager, SubscriptionManager.from(context), Config.readConfig(context), bgLooper, new CallbackHandler(), subscriptionManager, Config.readConfig(context), bgLooper, bgExecutor, callbackHandler, accessPointController, new DataUsageController(context), new SubscriptionDefaults(), Loading @@ -230,6 +239,7 @@ public class NetworkControllerImpl extends BroadcastReceiver WifiManager wifiManager, NetworkScoreManager networkScoreManager, SubscriptionManager subManager, Config config, Looper bgLooper, Executor bgExecutor, CallbackHandler callbackHandler, AccessPointControllerImpl accessPointController, DataUsageController dataUsageController, Loading @@ -241,6 +251,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mTelephonyListenerManager = telephonyListenerManager; mConfig = config; mReceiverHandler = new Handler(bgLooper); mBgLooper = bgLooper; mBgExecutor = bgExecutor; mCallbackHandler = callbackHandler; mDataSaverController = new DataSaverControllerImpl(context); mBroadcastDispatcher = broadcastDispatcher; Loading Loading @@ -377,9 +389,10 @@ public class NetworkControllerImpl extends BroadcastReceiver // TODO: Move off of the deprecated CONNECTIVITY_ACTION broadcast and rely on callbacks // exclusively for status bar icons. mConnectivityManager.registerDefaultNetworkCallback(callback, mReceiverHandler); // Register the listener on our bg looper // Run the listener on our bg looper mPhoneStateListener = subId -> { // For data switching from A to B, we assume B is validated for up to 2 seconds iff: mBgExecutor.execute(() -> { // For data switching from A to B, we assume B is validated for up to 2 seconds if: // 1) A and B are in the same subscription group e.g. CBRS data switch. And // 2) A was validated before the switch. // This is to provide smooth transition for UI without showing cross during data Loading @@ -392,6 +405,7 @@ public class NetworkControllerImpl extends BroadcastReceiver } mActiveMobileDataSubscription = subId; doUpdateMobileControllers(); }); }; mDemoModeController.addCallback(this); Loading Loading @@ -428,7 +442,7 @@ public class NetworkControllerImpl extends BroadcastReceiver mobileSignalController.registerListener(); } if (mSubscriptionListener == null) { mSubscriptionListener = new SubListener(); mSubscriptionListener = new SubListener(mBgLooper); } mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener); mTelephonyListenerManager.addActiveDataSubscriptionIdListener(mPhoneStateListener); Loading Loading @@ -1336,6 +1350,10 @@ public class NetworkControllerImpl extends BroadcastReceiver } private class SubListener extends OnSubscriptionsChangedListener { SubListener(Looper looper) { super(looper); } @Override public void onSubscriptionsChanged() { updateMobileControllers(); Loading @@ -1346,10 +1364,5 @@ public class NetworkControllerImpl extends BroadcastReceiver * Used to register listeners from the BG Looper, this way the PhoneStateListeners that * get created will also run on the BG Looper. */ private final Runnable mRegisterListeners = new Runnable() { @Override public void run() { registerListeners(); } }; private final Runnable mRegisterListeners = () -> registerListeners(); }
packages/SystemUI/src/com/android/systemui/telephony/TelephonyCallback.java +15 −9 Original line number Diff line number Diff line Loading @@ -54,9 +54,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback @Override public void onActiveDataSubscriptionIdChanged(int subId) { mActiveDataSubscriptionIdListeners.forEach(listener -> { listener.onActiveDataSubscriptionIdChanged(subId); }); List<ActiveDataSubscriptionIdListener> listeners; synchronized (mActiveDataSubscriptionIdListeners) { listeners = new ArrayList<>(mActiveDataSubscriptionIdListeners); } listeners.forEach(listener -> listener.onActiveDataSubscriptionIdChanged(subId)); } void addActiveDataSubscriptionIdListener(ActiveDataSubscriptionIdListener listener) { Loading @@ -69,9 +71,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback @Override public void onCallStateChanged(int state) { mCallStateListeners.forEach(listener -> { listener.onCallStateChanged(state); }); List<CallStateListener> listeners; synchronized (mCallStateListeners) { listeners = new ArrayList<>(mCallStateListeners); } listeners.forEach(listener -> listener.onCallStateChanged(state)); } void addCallStateListener(CallStateListener listener) { Loading @@ -84,9 +88,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback @Override public void onServiceStateChanged(@NonNull ServiceState serviceState) { mServiceStateListeners.forEach(listener -> { listener.onServiceStateChanged(serviceState); }); List<ServiceStateListener> listeners; synchronized (mServiceStateListeners) { listeners = new ArrayList<>(mServiceStateListeners); } listeners.forEach(listener -> listener.onServiceStateChanged(serviceState)); } void addServiceStateListener(ServiceStateListener listener) { Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -77,6 +77,8 @@ import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import com.android.systemui.telephony.TelephonyListenerManager; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import org.junit.After; import org.junit.Before; Loading Loading @@ -123,6 +125,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase { protected DeviceProvisionedListener mUserCallback; protected Instrumentation mInstrumentation; protected DemoModeController mDemoModeController; protected FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); protected int mSubId; Loading Loading @@ -222,6 +225,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mMockSm, mConfig, TestableLooper.get(this).getLooper(), mFakeExecutor, mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), Loading Loading @@ -291,7 +295,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase { NetworkControllerImpl networkControllerNoMobile = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mTelephonyListenerManager, mMockWm, mMockNsm, mMockSm, mConfig, TestableLooper.get(this).getLooper(), mCallbackHandler, mConfig, TestableLooper.get(this).getLooper(), mFakeExecutor, mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, mDemoModeController); Loading