Add tiebreak rules for bar chart permissions.

If multiple permissions have been used by the same number of apps, we
apply a stable tiebreak so we can be consistent in different places.
We prefer location, then microphone, then camera, and everything else
is alphabetical.

Test: View chart with ties.
Test: atest PermissionBarChartPreferenceControllerTest
Change-Id: I035ac19391788cc720e1c832bf8bd5a60d31e8ad
This commit is contained in:
Joel Galenson
2019-03-27 10:19:27 -07:00
parent 2585d27573
commit 2512aa1ed6
2 changed files with 57 additions and 2 deletions

View File

@@ -16,6 +16,14 @@
package com.android.settings.privacy;
import static android.Manifest.permission_group.CALENDAR;
import static android.Manifest.permission_group.CAMERA;
import static android.Manifest.permission_group.CONTACTS;
import static android.Manifest.permission_group.LOCATION;
import static android.Manifest.permission_group.MICROPHONE;
import static android.Manifest.permission_group.PHONE;
import static android.Manifest.permission_group.SMS;
import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
@@ -221,4 +229,27 @@ public class PermissionBarChartPreferenceControllerTest {
verify(mFragment).setLoadingEnabled(false /* enabled */);
verify(mPreference).updateLoadingState(false /* isLoading */);
}
@Test
public void onPermissionUsageResult_shouldBeSorted() {
final List<RuntimePermissionUsageInfo> infos = new ArrayList<>();
infos.add(new RuntimePermissionUsageInfo(PHONE, 10));
infos.add(new RuntimePermissionUsageInfo(LOCATION, 10));
infos.add(new RuntimePermissionUsageInfo(CAMERA, 10));
infos.add(new RuntimePermissionUsageInfo(SMS, 1));
infos.add(new RuntimePermissionUsageInfo(MICROPHONE, 10));
infos.add(new RuntimePermissionUsageInfo(CONTACTS, 42));
infos.add(new RuntimePermissionUsageInfo(CALENDAR, 10));
mController.displayPreference(mScreen);
mController.onPermissionUsageResult(infos);
assertThat(infos.get(0).getName()).isEqualTo(CONTACTS);
assertThat(infos.get(1).getName()).isEqualTo(LOCATION);
assertThat(infos.get(2).getName()).isEqualTo(MICROPHONE);
assertThat(infos.get(3).getName()).isEqualTo(CAMERA);
assertThat(infos.get(4).getName()).isEqualTo(CALENDAR);
assertThat(infos.get(5).getName()).isEqualTo(PHONE);
assertThat(infos.get(6).getName()).isEqualTo(SMS);
}
}