From 7c1825aa64f1998d23cfcfe0b37e5c98b0288582 Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Tue, 18 Jul 2017 13:12:05 -0700 Subject: [PATCH] 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 --- .../settings/datausage/DataSaverBackend.java | 17 ++++----------- .../shadow/ShadowDataSaverBackend.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataSaverBackend.java diff --git a/src/com/android/settings/datausage/DataSaverBackend.java b/src/com/android/settings/datausage/DataSaverBackend.java index 7c291c6cd47..f37a3c306a1 100644 --- a/src/com/android/settings/datausage/DataSaverBackend.java +++ b/src/com/android/settings/datausage/DataSaverBackend.java @@ -18,6 +18,7 @@ import android.content.Context; 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 @@ public class DataSaverBackend { 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 mListeners = new ArrayList<>(); private SparseIntArray mUidPolicies = new SparseIntArray(); @@ -194,12 +195,7 @@ public class DataSaverBackend { @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 @@ public class DataSaverBackend { @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 00000000000..34908ca39a8 --- /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; + } +}