Merge "Dump the DynamicDenylistManager stored data into bugreport" into main
This commit is contained in:
@@ -23,12 +23,14 @@ import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.net.NetworkPolicyManager;
|
import android.net.NetworkPolicyManager;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/** A class to dynamically manage per apps {@link NetworkPolicyManager} POLICY_ flags. */
|
/** A class to dynamically manage per apps {@link NetworkPolicyManager} POLICY_ flags. */
|
||||||
@@ -147,6 +149,15 @@ public final class DynamicDenylistManager {
|
|||||||
clearSharedPreferences();
|
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) {
|
private Set<Integer> getDenylistAllUids(SharedPreferences sharedPreferences) {
|
||||||
final ArraySet<Integer> uids = new ArraySet<>();
|
final ArraySet<Integer> uids = new ArraySet<>();
|
||||||
for (String key : sharedPreferences.getAll().keySet()) {
|
for (String key : sharedPreferences.getAll().keySet()) {
|
||||||
@@ -186,4 +197,14 @@ public final class DynamicDenylistManager {
|
|||||||
SharedPreferences getDynamicDenylistPref() {
|
SharedPreferences getDynamicDenylistPref() {
|
||||||
return mContext.getSharedPreferences(PREF_KEY_DYNAMIC_DENY, Context.MODE_PRIVATE);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -36,6 +36,7 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.net.NetworkPolicyManager;
|
import android.net.NetworkPolicyManager;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
|
|
||||||
@@ -48,6 +49,8 @@ import org.mockito.MockitoAnnotations;
|
|||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -67,6 +70,8 @@ public class DynamicDenylistManagerTest {
|
|||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private NetworkPolicyManager mNetworkPolicyManager;
|
private NetworkPolicyManager mNetworkPolicyManager;
|
||||||
|
@Mock
|
||||||
|
private PackageManager mPackageManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -357,12 +362,45 @@ public class DynamicDenylistManagerTest {
|
|||||||
assertThat(mDynamicDenyListPref.getAll()).isEmpty();
|
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) {
|
private void initDynamicDenylistManager(int[] preload) {
|
||||||
initDynamicDenylistManager(preload, preload);
|
initDynamicDenylistManager(preload, preload);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initDynamicDenylistManager(int[] preload1, int[] preload2) {
|
private void initDynamicDenylistManager(int[] preload1, int[] preload2) {
|
||||||
final Context context = spy(RuntimeEnvironment.application.getApplicationContext());
|
final Context context = spy(RuntimeEnvironment.application.getApplicationContext());
|
||||||
|
when(context.getApplicationContext()).thenReturn(context);
|
||||||
|
when(context.getPackageManager()).thenReturn(mPackageManager);
|
||||||
when(mNetworkPolicyManager.getUidsWithPolicy(anyInt()))
|
when(mNetworkPolicyManager.getUidsWithPolicy(anyInt()))
|
||||||
.thenReturn(preload1).thenReturn(preload2);
|
.thenReturn(preload1).thenReturn(preload2);
|
||||||
mDynamicDenylistManager = new DynamicDenylistManager(context, mNetworkPolicyManager);
|
mDynamicDenylistManager = new DynamicDenylistManager(context, mNetworkPolicyManager);
|
||||||
|
Reference in New Issue
Block a user