Loading src/java/com/android/internal/telephony/data/DataSettingsManager.java +13 −8 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.preference.PreferenceManager; import android.provider.Settings; import android.sysprop.TelephonyProperties; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.MobileDataPolicy; Loading Loading @@ -207,7 +208,9 @@ public class DataSettingsManager extends Handler { case EVENT_SUBSCRIPTIONS_CHANGED: { mSubId = (int) msg.obj; refreshEnabledMobileDataPolicy(); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER, mPhone.getContext().getOpPackageName(), SubscriptionManager.isValidSubscriptionId(mSubId)); mPhone.notifyUserMobileDataStateChanged(isUserDataEnabled()); break; } Loading Loading @@ -339,15 +342,15 @@ public class DataSettingsManager extends Handler { } private void updateDataEnabledAndNotify(@TelephonyManager.DataEnabledChangedReason int reason) { updateDataEnabledAndNotify(reason, mPhone.getContext().getOpPackageName()); updateDataEnabledAndNotify(reason, mPhone.getContext().getOpPackageName(), false); } private void updateDataEnabledAndNotify(@TelephonyManager.DataEnabledChangedReason int reason, @NonNull String callingPackage) { @NonNull String callingPackage, boolean shouldNotify) { boolean prevDataEnabled = mIsDataEnabled; mIsDataEnabled = isDataEnabled(ApnSetting.TYPE_ALL); log("mIsDataEnabled=" + mIsDataEnabled + ", prevDataEnabled=" + prevDataEnabled); if (!mInitialized || prevDataEnabled != mIsDataEnabled) { if (!mInitialized || shouldNotify || prevDataEnabled != mIsDataEnabled) { if (!mInitialized) mInitialized = true; notifyDataEnabledChanged(mIsDataEnabled, reason, callingPackage); } Loading Loading @@ -440,7 +443,8 @@ public class DataSettingsManager extends Handler { mPhone.notifyUserMobileDataStateChanged(enabled); mDataSettingsManagerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onUserDataEnabledChanged(enabled))); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER, callingPackage); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER, callingPackage, false); } } Loading Loading @@ -471,7 +475,8 @@ public class DataSettingsManager extends Handler { if (mDataEnabledSettings.get(TelephonyManager.DATA_ENABLED_REASON_POLICY) != enabled) { logl("PolicyDataEnabled changed to " + enabled + ", callingPackage=" + callingPackage); mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_POLICY, enabled); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_POLICY, callingPackage); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_POLICY, callingPackage, false); } } Loading @@ -485,7 +490,7 @@ public class DataSettingsManager extends Handler { logl("CarrierDataEnabled changed to " + enabled + ", callingPackage=" + callingPackage); mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_CARRIER, enabled); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_CARRIER, callingPackage); callingPackage, false); } } Loading @@ -499,7 +504,7 @@ public class DataSettingsManager extends Handler { logl("ThermalDataEnabled changed to " + enabled + ", callingPackage=" + callingPackage); mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_THERMAL, enabled); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_THERMAL, callingPackage); callingPackage, false); } } Loading tests/telephonytests/src/com/android/internal/telephony/data/DataSettingsManagerTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -29,7 +29,9 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.annotation.NonNull; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.telephony.TelephonyManager; import android.testing.AndroidTestingRunner; Loading @@ -49,6 +51,8 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper Loading Loading @@ -178,4 +182,26 @@ public class DataSettingsManagerTest extends TelephonyTest { callback.onUserDataEnabledChanged(true); verify(mPhone).notifyDataEnabled(true, TelephonyManager.DATA_ENABLED_REASON_OVERRIDE); } @Test public void testNotifyDataEnabledFromNewValidSubId() throws Exception { final CountDownLatch latch = new CountDownLatch(1); mDataSettingsManagerUT.registerCallback( new DataSettingsManagerCallback(mDataSettingsManagerUT::post) { @Override public void onDataEnabledChanged(boolean enabled, @TelephonyManager.DataEnabledChangedReason int reason, @NonNull String callingPackage) { latch.countDown(); } }); Message.obtain(mDataSettingsManagerUT, 4 /* EVENT_SUBSCRIPTIONS_CHANGED */, -1) .sendToTarget(); Message.obtain(mDataSettingsManagerUT, 4 /* EVENT_SUBSCRIPTIONS_CHANGED */, 2) .sendToTarget(); processAllMessages(); assertTrue(latch.await(1000, TimeUnit.MILLISECONDS)); } } Loading
src/java/com/android/internal/telephony/data/DataSettingsManager.java +13 −8 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.preference.PreferenceManager; import android.provider.Settings; import android.sysprop.TelephonyProperties; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.MobileDataPolicy; Loading Loading @@ -207,7 +208,9 @@ public class DataSettingsManager extends Handler { case EVENT_SUBSCRIPTIONS_CHANGED: { mSubId = (int) msg.obj; refreshEnabledMobileDataPolicy(); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER, mPhone.getContext().getOpPackageName(), SubscriptionManager.isValidSubscriptionId(mSubId)); mPhone.notifyUserMobileDataStateChanged(isUserDataEnabled()); break; } Loading Loading @@ -339,15 +342,15 @@ public class DataSettingsManager extends Handler { } private void updateDataEnabledAndNotify(@TelephonyManager.DataEnabledChangedReason int reason) { updateDataEnabledAndNotify(reason, mPhone.getContext().getOpPackageName()); updateDataEnabledAndNotify(reason, mPhone.getContext().getOpPackageName(), false); } private void updateDataEnabledAndNotify(@TelephonyManager.DataEnabledChangedReason int reason, @NonNull String callingPackage) { @NonNull String callingPackage, boolean shouldNotify) { boolean prevDataEnabled = mIsDataEnabled; mIsDataEnabled = isDataEnabled(ApnSetting.TYPE_ALL); log("mIsDataEnabled=" + mIsDataEnabled + ", prevDataEnabled=" + prevDataEnabled); if (!mInitialized || prevDataEnabled != mIsDataEnabled) { if (!mInitialized || shouldNotify || prevDataEnabled != mIsDataEnabled) { if (!mInitialized) mInitialized = true; notifyDataEnabledChanged(mIsDataEnabled, reason, callingPackage); } Loading Loading @@ -440,7 +443,8 @@ public class DataSettingsManager extends Handler { mPhone.notifyUserMobileDataStateChanged(enabled); mDataSettingsManagerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onUserDataEnabledChanged(enabled))); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER, callingPackage); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_USER, callingPackage, false); } } Loading Loading @@ -471,7 +475,8 @@ public class DataSettingsManager extends Handler { if (mDataEnabledSettings.get(TelephonyManager.DATA_ENABLED_REASON_POLICY) != enabled) { logl("PolicyDataEnabled changed to " + enabled + ", callingPackage=" + callingPackage); mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_POLICY, enabled); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_POLICY, callingPackage); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_POLICY, callingPackage, false); } } Loading @@ -485,7 +490,7 @@ public class DataSettingsManager extends Handler { logl("CarrierDataEnabled changed to " + enabled + ", callingPackage=" + callingPackage); mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_CARRIER, enabled); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_CARRIER, callingPackage); callingPackage, false); } } Loading @@ -499,7 +504,7 @@ public class DataSettingsManager extends Handler { logl("ThermalDataEnabled changed to " + enabled + ", callingPackage=" + callingPackage); mDataEnabledSettings.put(TelephonyManager.DATA_ENABLED_REASON_THERMAL, enabled); updateDataEnabledAndNotify(TelephonyManager.DATA_ENABLED_REASON_THERMAL, callingPackage); callingPackage, false); } } Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataSettingsManagerTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -29,7 +29,9 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.annotation.NonNull; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.telephony.TelephonyManager; import android.testing.AndroidTestingRunner; Loading @@ -49,6 +51,8 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper Loading Loading @@ -178,4 +182,26 @@ public class DataSettingsManagerTest extends TelephonyTest { callback.onUserDataEnabledChanged(true); verify(mPhone).notifyDataEnabled(true, TelephonyManager.DATA_ENABLED_REASON_OVERRIDE); } @Test public void testNotifyDataEnabledFromNewValidSubId() throws Exception { final CountDownLatch latch = new CountDownLatch(1); mDataSettingsManagerUT.registerCallback( new DataSettingsManagerCallback(mDataSettingsManagerUT::post) { @Override public void onDataEnabledChanged(boolean enabled, @TelephonyManager.DataEnabledChangedReason int reason, @NonNull String callingPackage) { latch.countDown(); } }); Message.obtain(mDataSettingsManagerUT, 4 /* EVENT_SUBSCRIPTIONS_CHANGED */, -1) .sendToTarget(); Message.obtain(mDataSettingsManagerUT, 4 /* EVENT_SUBSCRIPTIONS_CHANGED */, 2) .sendToTarget(); processAllMessages(); assertTrue(latch.await(1000, TimeUnit.MILLISECONDS)); } }