Fix DataSaverBackend objects created on background threads
Add the main looper to the handler created with each
DataSaverBackend to avoid crashes when the objects are
created on background threads.
Bug: 62022517
Test: make RunSettingsRoboTests
Change-Id: I7396107e4ed06982c8cd300912ce1f4e3c63df4c
Merged-In: Ie5ffabbfbe7660761527b3ecd51e6bc5a43c1ace
diff --git a/src/com/android/settings/datausage/DataSaverBackend.java b/src/com/android/settings/datausage/DataSaverBackend.java
index 7c291c6..f37a3c3 100644
--- a/src/com/android/settings/datausage/DataSaverBackend.java
+++ b/src/com/android/settings/datausage/DataSaverBackend.java
@@ -18,6 +18,7 @@
import android.net.INetworkPolicyListener;
import android.net.NetworkPolicyManager;
import android.os.Handler;
+import android.os.Looper;
import android.os.RemoteException;
import android.util.SparseIntArray;
@@ -38,7 +39,7 @@
private final Context mContext;
private final MetricsFeatureProvider mMetricsFeatureProvider;
- private final Handler mHandler = new Handler();
+ private final Handler mHandler = new Handler(Looper.getMainLooper());
private final NetworkPolicyManager mPolicyManager;
private final ArrayList<Listener> mListeners = new ArrayList<>();
private SparseIntArray mUidPolicies = new SparseIntArray();
@@ -194,12 +195,7 @@
@Override
public void onUidPoliciesChanged(final int uid, final int uidPolicies) {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- handleUidPoliciesChanged(uid, uidPolicies);
- }
- });
+ mHandler.post(() -> handleUidPoliciesChanged(uid, uidPolicies));
}
@Override
@@ -208,12 +204,7 @@
@Override
public void onRestrictBackgroundChanged(final boolean isDataSaving) throws RemoteException {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- handleRestrictBackgroundChanged(isDataSaving);
- }
- });
+ mHandler.post(() -> handleRestrictBackgroundChanged(isDataSaving));
}
};
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataSaverBackend.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataSaverBackend.java
new file mode 100644
index 0000000..34908ca
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataSaverBackend.java
@@ -0,0 +1,21 @@
+package com.android.settings.testutils.shadow;
+
+import com.android.settings.datausage.DataSaverBackend;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(DataSaverBackend.class)
+public class ShadowDataSaverBackend {
+
+ private static boolean isEnabled = true;
+
+ @Implementation
+ public boolean isDataSaverEnabled() {
+ return isEnabled;
+ }
+
+ @Implementation
+ public void setDataSaverEnabled(boolean enabled) {
+ isEnabled = enabled;
+ }
+}