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

Commit 072ccdd0 authored by ykhung's avatar ykhung
Browse files

Dump the DynamicDenylistManager stored data into bugreport

Bug: 306329984
Test: make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.fuelgauge.datasaver"
Change-Id: If512f561b3b376ea56e0dc78c339bf254ff20060
parent 2dfae393
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -23,12 +23,14 @@ import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.NetworkPolicyManager;
import android.util.ArraySet;
import android.util.Log;

import androidx.annotation.VisibleForTesting;

import java.io.PrintWriter;
import java.util.Set;

/** A class to dynamically manage per apps {@link NetworkPolicyManager} POLICY_ flags. */
@@ -147,6 +149,15 @@ public final class DynamicDenylistManager {
        clearSharedPreferences();
    }

    /** Dump the data stored in the {@link SharedPreferences}. */
    public void dump(PrintWriter writer) {
        writer.println("Dump of DynamicDenylistManager:");
        writer.println("\tManualDenylist: " + getPackageNames(mContext,
                getDenylistAllUids(getManualDenylistPref())));
        writer.println("\tDynamicDenylist: " + getPackageNames(mContext,
                getDenylistAllUids(getDynamicDenylistPref())));
    }

    private Set<Integer> getDenylistAllUids(SharedPreferences sharedPreferences) {
        final ArraySet<Integer> uids = new ArraySet<>();
        for (String key : sharedPreferences.getAll().keySet()) {
@@ -186,4 +197,14 @@ public final class DynamicDenylistManager {
    SharedPreferences getDynamicDenylistPref() {
        return mContext.getSharedPreferences(PREF_KEY_DYNAMIC_DENY, Context.MODE_PRIVATE);
    }

    private static String getPackageNames(Context context, Set<Integer> uids) {
        if (uids == null || uids.isEmpty()) {
            return null;
        }
        final PackageManager pm = context.getPackageManager();
        final StringBuilder builder = new StringBuilder();
        uids.forEach(uid -> builder.append(pm.getNameForUid(uid) + " "));
        return builder.toString();
    }
}
+38 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.NetworkPolicyManager;
import android.util.ArraySet;

@@ -48,6 +49,8 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -67,6 +70,8 @@ public class DynamicDenylistManagerTest {

    @Mock
    private NetworkPolicyManager mNetworkPolicyManager;
    @Mock
    private PackageManager mPackageManager;

    @Before
    public void setUp() {
@@ -357,12 +362,45 @@ public class DynamicDenylistManagerTest {
        assertThat(mDynamicDenyListPref.getAll()).isEmpty();
    }

    @Test
    public void dump_dumpExpectedResult() {
        initDynamicDenylistManager(EMPTY_ARRAY);
        setupPreference(mManualDenyListPref, FAKE_UID_1);
        setupPreference(mDynamicDenyListPref, FAKE_UID_2);
        final StringWriter stringWriter = new StringWriter();
        final PrintWriter printWriter = new PrintWriter(stringWriter);
        when(mPackageManager.getNameForUid(FAKE_UID_1_INT)).thenReturn("app1");
        when(mPackageManager.getNameForUid(FAKE_UID_2_INT)).thenReturn("app2");

        mDynamicDenylistManager.dump(printWriter);

        final String dumpResults = stringWriter.toString();
        assertThat(dumpResults.contains("ManualDenylist: app1")).isTrue();
        assertThat(dumpResults.contains("DynamicDenylist: app2")).isTrue();
    }

    @Test
    public void dump_withEmptySharedPreferences_dumpExpectedResult() {
        initDynamicDenylistManager(EMPTY_ARRAY, EMPTY_ARRAY);
        mDynamicDenylistManager.clearSharedPreferences();
        final StringWriter stringWriter = new StringWriter();
        final PrintWriter printWriter = new PrintWriter(stringWriter);

        mDynamicDenylistManager.dump(printWriter);

        final String dumpResults = stringWriter.toString();
        assertThat(dumpResults.contains("ManualDenylist: null")).isTrue();
        assertThat(dumpResults.contains("DynamicDenylist: null")).isTrue();
    }

    private void initDynamicDenylistManager(int[] preload) {
        initDynamicDenylistManager(preload, preload);
    }

    private void initDynamicDenylistManager(int[] preload1, int[] preload2) {
        final Context context = spy(RuntimeEnvironment.application.getApplicationContext());
        when(context.getApplicationContext()).thenReturn(context);
        when(context.getPackageManager()).thenReturn(mPackageManager);
        when(mNetworkPolicyManager.getUidsWithPolicy(anyInt()))
                .thenReturn(preload1).thenReturn(preload2);
        mDynamicDenylistManager = new DynamicDenylistManager(context, mNetworkPolicyManager);