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;
+    }
+}