Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +11 −2 Original line number Diff line number Diff line Loading @@ -736,7 +736,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private DisplayClientState mDisplayClientState = new DisplayClientState(); private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @VisibleForTesting final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Loading Loading @@ -773,6 +774,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { maxChargingMicroWatt)); mHandler.sendMessage(msg); } else if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) { // ACTION_SIM_STATE_CHANGED is rebroadcast after unlocking the device to // keep compatibility with apps that aren't direct boot aware. // SysUI should just ignore this broadcast because it was already received // and processed previously. if (intent.getBooleanExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, false)) { return; } SimData args = SimData.fromIntent(intent); if (DEBUG_SIM_STATES) { Log.v(TAG, "action " + action Loading Loading @@ -1508,7 +1516,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { /** * Handle {@link #MSG_SIM_STATE_CHANGE} */ private void handleSimStateChange(int subId, int slotId, State state) { @VisibleForTesting protected void handleSimStateChange(int subId, int slotId, State state) { if (DEBUG_SIM_STATES) { Log.d(TAG, "handleSimStateChange(subId=" + subId + ", slotId=" Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +25 −14 Original line number Diff line number Diff line Loading @@ -762,20 +762,31 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) || action.equals(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)) { switch (action) { case AudioManager.RINGER_MODE_CHANGED_ACTION: case AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION: updateVolumeZen(); } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { break; case TelephonyIntents.ACTION_SIM_STATE_CHANGED: // Avoid rebroadcast because SysUI is direct boot aware. if (intent.getBooleanExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, false)) { break; } updateSimState(intent); } else if (action.equals(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED)) { break; case TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED: updateTTY(intent.getIntExtra(TelecomManager.EXTRA_CURRENT_TTY_MODE, TelecomManager.TTY_MODE_OFF)); } else if (action.equals(Intent.ACTION_MANAGED_PROFILE_AVAILABLE) || action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE) || action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED)) { break; case Intent.ACTION_MANAGED_PROFILE_AVAILABLE: case Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE: case Intent.ACTION_MANAGED_PROFILE_REMOVED: updateManagedProfile(); } else if (action.equals(AudioManager.ACTION_HEADSET_PLUG)) { break; case AudioManager.ACTION_HEADSET_PLUG: updateHeadsetPlug(intent); break; } } }; Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +52 −44 Original line number Diff line number Diff line Loading @@ -403,41 +403,48 @@ public class NetworkControllerImpl extends BroadcastReceiver Log.d(TAG, "onReceive: intent=" + intent); } final String action = intent.getAction(); if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) || action.equals(ConnectivityManager.INET_CONDITION_ACTION)) { switch (action) { case ConnectivityManager.CONNECTIVITY_ACTION: case ConnectivityManager.INET_CONDITION_ACTION: updateConnectivity(); } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) { break; case Intent.ACTION_AIRPLANE_MODE_CHANGED: refreshLocale(); updateAirplaneMode(false); } else if (action.equals(TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED)) { break; case TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED: // We are using different subs now, we might be able to make calls. recalculateEmergency(); } else if (action.equals(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)) { break; case TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED: // Notify every MobileSignalController so they can know whether they are the // data sim or not. for (int i = 0; i < mMobileSignalControllers.size(); i++) { MobileSignalController controller = mMobileSignalControllers.valueAt(i); controller.handleBroadcast(intent); } } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { break; case TelephonyIntents.ACTION_SIM_STATE_CHANGED: // Avoid rebroadcast because SysUI is direct boot aware. if (intent.getBooleanExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, false)) { break; } // Might have different subscriptions now. updateMobileControllers(); } else if (action.equals(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED)) { break; case TelephonyIntents.ACTION_SERVICE_STATE_CHANGED: mLastServiceState = ServiceState.newFromBundle(intent.getExtras()); if (mMobileSignalControllers.size() == 0) { // If none of the subscriptions are active, we might need to recalculate // emergency state. recalculateEmergency(); } } else if (action.equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) { break; case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: mConfig = Config.readConfig(mContext); mReceiverHandler.post(new Runnable() { @Override public void run() { handleConfigurationChanged(); } }); } else { mReceiverHandler.post(this::handleConfigurationChanged); break; default: int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID); if (SubscriptionManager.isValidSubscriptionId(subId)) { Loading @@ -451,6 +458,7 @@ public class NetworkControllerImpl extends BroadcastReceiver // No sub id, must be for the wifi. mWifiSignalController.handleBroadcast(intent); } break; } } Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.keyguard; import android.content.Intent; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.systemui.SysuiTestCase; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.util.concurrent.atomic.AtomicBoolean; @SmallTest @RunWith(AndroidTestingRunner.class) @RunWithLooper public class KeyguardUpdateMonitorTest extends SysuiTestCase { private TestableLooper mTestableLooper; @Before public void setup() { mTestableLooper = TestableLooper.get(this); } @Test public void testIgnoresSimStateCallback_rebroadcast() { Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED); AtomicBoolean simStateChanged = new AtomicBoolean(false); KeyguardUpdateMonitor keyguardUpdateMonitor = new KeyguardUpdateMonitor(getContext()) { @Override protected void handleSimStateChange(int subId, int slotId, IccCardConstants.State state) { simStateChanged.set(true); super.handleSimStateChange(subId, slotId, state); } }; keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(), intent); mTestableLooper.processAllMessages(); Assert.assertTrue("onSimStateChanged not called", simStateChanged.get()); intent.putExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, true); simStateChanged.set(false); keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(), intent); mTestableLooper.processAllMessages(); Assert.assertFalse("onSimStateChanged should have been skipped", simStateChanged.get()); } } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +11 −2 Original line number Diff line number Diff line Loading @@ -736,7 +736,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private DisplayClientState mDisplayClientState = new DisplayClientState(); private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @VisibleForTesting final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Loading Loading @@ -773,6 +774,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { maxChargingMicroWatt)); mHandler.sendMessage(msg); } else if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) { // ACTION_SIM_STATE_CHANGED is rebroadcast after unlocking the device to // keep compatibility with apps that aren't direct boot aware. // SysUI should just ignore this broadcast because it was already received // and processed previously. if (intent.getBooleanExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, false)) { return; } SimData args = SimData.fromIntent(intent); if (DEBUG_SIM_STATES) { Log.v(TAG, "action " + action Loading Loading @@ -1508,7 +1516,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { /** * Handle {@link #MSG_SIM_STATE_CHANGE} */ private void handleSimStateChange(int subId, int slotId, State state) { @VisibleForTesting protected void handleSimStateChange(int subId, int slotId, State state) { if (DEBUG_SIM_STATES) { Log.d(TAG, "handleSimStateChange(subId=" + subId + ", slotId=" Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +25 −14 Original line number Diff line number Diff line Loading @@ -762,20 +762,31 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) || action.equals(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)) { switch (action) { case AudioManager.RINGER_MODE_CHANGED_ACTION: case AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION: updateVolumeZen(); } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { break; case TelephonyIntents.ACTION_SIM_STATE_CHANGED: // Avoid rebroadcast because SysUI is direct boot aware. if (intent.getBooleanExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, false)) { break; } updateSimState(intent); } else if (action.equals(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED)) { break; case TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED: updateTTY(intent.getIntExtra(TelecomManager.EXTRA_CURRENT_TTY_MODE, TelecomManager.TTY_MODE_OFF)); } else if (action.equals(Intent.ACTION_MANAGED_PROFILE_AVAILABLE) || action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE) || action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED)) { break; case Intent.ACTION_MANAGED_PROFILE_AVAILABLE: case Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE: case Intent.ACTION_MANAGED_PROFILE_REMOVED: updateManagedProfile(); } else if (action.equals(AudioManager.ACTION_HEADSET_PLUG)) { break; case AudioManager.ACTION_HEADSET_PLUG: updateHeadsetPlug(intent); break; } } }; Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +52 −44 Original line number Diff line number Diff line Loading @@ -403,41 +403,48 @@ public class NetworkControllerImpl extends BroadcastReceiver Log.d(TAG, "onReceive: intent=" + intent); } final String action = intent.getAction(); if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) || action.equals(ConnectivityManager.INET_CONDITION_ACTION)) { switch (action) { case ConnectivityManager.CONNECTIVITY_ACTION: case ConnectivityManager.INET_CONDITION_ACTION: updateConnectivity(); } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) { break; case Intent.ACTION_AIRPLANE_MODE_CHANGED: refreshLocale(); updateAirplaneMode(false); } else if (action.equals(TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED)) { break; case TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED: // We are using different subs now, we might be able to make calls. recalculateEmergency(); } else if (action.equals(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)) { break; case TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED: // Notify every MobileSignalController so they can know whether they are the // data sim or not. for (int i = 0; i < mMobileSignalControllers.size(); i++) { MobileSignalController controller = mMobileSignalControllers.valueAt(i); controller.handleBroadcast(intent); } } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { break; case TelephonyIntents.ACTION_SIM_STATE_CHANGED: // Avoid rebroadcast because SysUI is direct boot aware. if (intent.getBooleanExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, false)) { break; } // Might have different subscriptions now. updateMobileControllers(); } else if (action.equals(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED)) { break; case TelephonyIntents.ACTION_SERVICE_STATE_CHANGED: mLastServiceState = ServiceState.newFromBundle(intent.getExtras()); if (mMobileSignalControllers.size() == 0) { // If none of the subscriptions are active, we might need to recalculate // emergency state. recalculateEmergency(); } } else if (action.equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) { break; case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: mConfig = Config.readConfig(mContext); mReceiverHandler.post(new Runnable() { @Override public void run() { handleConfigurationChanged(); } }); } else { mReceiverHandler.post(this::handleConfigurationChanged); break; default: int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID); if (SubscriptionManager.isValidSubscriptionId(subId)) { Loading @@ -451,6 +458,7 @@ public class NetworkControllerImpl extends BroadcastReceiver // No sub id, must be for the wifi. mWifiSignalController.handleBroadcast(intent); } break; } } Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.keyguard; import android.content.Intent; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.systemui.SysuiTestCase; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.util.concurrent.atomic.AtomicBoolean; @SmallTest @RunWith(AndroidTestingRunner.class) @RunWithLooper public class KeyguardUpdateMonitorTest extends SysuiTestCase { private TestableLooper mTestableLooper; @Before public void setup() { mTestableLooper = TestableLooper.get(this); } @Test public void testIgnoresSimStateCallback_rebroadcast() { Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED); AtomicBoolean simStateChanged = new AtomicBoolean(false); KeyguardUpdateMonitor keyguardUpdateMonitor = new KeyguardUpdateMonitor(getContext()) { @Override protected void handleSimStateChange(int subId, int slotId, IccCardConstants.State state) { simStateChanged.set(true); super.handleSimStateChange(subId, slotId, state); } }; keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(), intent); mTestableLooper.processAllMessages(); Assert.assertTrue("onSimStateChanged not called", simStateChanged.get()); intent.putExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, true); simStateChanged.set(false); keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext(), intent); mTestableLooper.processAllMessages(); Assert.assertFalse("onSimStateChanged should have been skipped", simStateChanged.get()); } }