Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6211c88 authored by Matthew Fritze's avatar Matthew Fritze
Browse files

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: Ie5ffabbfbe7660761527b3ecd51e6bc5a43c1ace
parent fef5f6aa
Loading
Loading
Loading
Loading
+4 −13
Original line number Diff line number Diff line
@@ -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<Listener> 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));
        }
    };

+21 −0
Original line number Diff line number Diff line
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;
    }
}