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

Commit ba6a19ea authored by YK Hung's avatar YK Hung Committed by Android (Google) Code Review
Browse files

Merge "Dump the DynamicDenylistManager stored data into bugreport" into main

parents a930f5ea 072ccdd0
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);