Loading packages/SettingsLib/src/com/android/settingslib/location/RecentLocationAccesses.java +31 −19 Original line number Diff line number Diff line Loading @@ -80,7 +80,8 @@ public class RecentLocationAccesses { * Fills a list of applications which queried location recently within specified time. * Apps are sorted by recency. Apps with more recent location accesses are in the front. */ public List<Access> getAppList() { @VisibleForTesting List<Access> getAppList(boolean showSystemApps) { // Retrieve a location usage list from AppOps PackageManager pm = mContext.getPackageManager(); AppOpsManager aoManager = Loading Loading @@ -108,14 +109,17 @@ public class RecentLocationAccesses { // Don't show apps that do not have user sensitive location permissions boolean showApp = true; if (!showSystemApps) { for (int op : LOCATION_OPS) { final String permission = AppOpsManager.opToPermission(op); final int permissionFlags = pm.getPermissionFlags(permission, packageName, user); final int permissionFlags = pm.getPermissionFlags(permission, packageName, user); if (PermissionChecker.checkPermissionForPreflight(mContext, permission, PermissionChecker.PID_UNKNOWN, uid, packageName) == PermissionChecker.PERMISSION_GRANTED) { if ((permissionFlags & PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) == 0) { & PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) == 0) { showApp = false; break; } Loading @@ -127,6 +131,7 @@ public class RecentLocationAccesses { } } } } if (showApp) { Access access = getAccessFromOps(now, ops); if (access != null) { Loading @@ -137,8 +142,15 @@ public class RecentLocationAccesses { return accesses; } public List<Access> getAppListSorted() { List<Access> accesses = getAppList(); /** * Gets a list of apps that accessed location recently, sorting by recency. * * @param showSystemApps whether includes system apps in the list. * @return the list of apps that recently accessed location. */ public List<Access> getAppListSorted(boolean showSystemApps) { List<Access> accesses = getAppList(showSystemApps); // Sort the list of Access by recency. Most recent accesses first. Collections.sort(accesses, Collections.reverseOrder(new Comparator<Access>() { @Override Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAccessesTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ public class RecentLocationAccessesTest { @Test @Ignore public void testGetAppList_shouldFilterRecentAccesses() { List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(); List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(false); // Only two of the apps have requested location within 15 min. assertThat(requests).hasSize(2); // Make sure apps are ordered by recency Loading Loading @@ -115,7 +115,7 @@ public class RecentLocationAccessesTest { mockTestApplicationInfos( Process.SYSTEM_UID, RecentLocationAccesses.ANDROID_SYSTEM_PACKAGE_NAME); List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(); List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(true); // Android OS shouldn't show up in the list of apps. assertThat(requests).hasSize(2); // Make sure apps are ordered by recency Loading Loading
packages/SettingsLib/src/com/android/settingslib/location/RecentLocationAccesses.java +31 −19 Original line number Diff line number Diff line Loading @@ -80,7 +80,8 @@ public class RecentLocationAccesses { * Fills a list of applications which queried location recently within specified time. * Apps are sorted by recency. Apps with more recent location accesses are in the front. */ public List<Access> getAppList() { @VisibleForTesting List<Access> getAppList(boolean showSystemApps) { // Retrieve a location usage list from AppOps PackageManager pm = mContext.getPackageManager(); AppOpsManager aoManager = Loading Loading @@ -108,14 +109,17 @@ public class RecentLocationAccesses { // Don't show apps that do not have user sensitive location permissions boolean showApp = true; if (!showSystemApps) { for (int op : LOCATION_OPS) { final String permission = AppOpsManager.opToPermission(op); final int permissionFlags = pm.getPermissionFlags(permission, packageName, user); final int permissionFlags = pm.getPermissionFlags(permission, packageName, user); if (PermissionChecker.checkPermissionForPreflight(mContext, permission, PermissionChecker.PID_UNKNOWN, uid, packageName) == PermissionChecker.PERMISSION_GRANTED) { if ((permissionFlags & PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) == 0) { & PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) == 0) { showApp = false; break; } Loading @@ -127,6 +131,7 @@ public class RecentLocationAccesses { } } } } if (showApp) { Access access = getAccessFromOps(now, ops); if (access != null) { Loading @@ -137,8 +142,15 @@ public class RecentLocationAccesses { return accesses; } public List<Access> getAppListSorted() { List<Access> accesses = getAppList(); /** * Gets a list of apps that accessed location recently, sorting by recency. * * @param showSystemApps whether includes system apps in the list. * @return the list of apps that recently accessed location. */ public List<Access> getAppListSorted(boolean showSystemApps) { List<Access> accesses = getAppList(showSystemApps); // Sort the list of Access by recency. Most recent accesses first. Collections.sort(accesses, Collections.reverseOrder(new Comparator<Access>() { @Override Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAccessesTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ public class RecentLocationAccessesTest { @Test @Ignore public void testGetAppList_shouldFilterRecentAccesses() { List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(); List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(false); // Only two of the apps have requested location within 15 min. assertThat(requests).hasSize(2); // Make sure apps are ordered by recency Loading Loading @@ -115,7 +115,7 @@ public class RecentLocationAccessesTest { mockTestApplicationInfos( Process.SYSTEM_UID, RecentLocationAccesses.ANDROID_SYSTEM_PACKAGE_NAME); List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(); List<RecentLocationAccesses.Access> requests = mRecentLocationAccesses.getAppList(true); // Android OS shouldn't show up in the list of apps. assertThat(requests).hasSize(2); // Make sure apps are ordered by recency Loading