diff options
author | Stanislav Zholnin <zholnin@google.com> | 2019-05-23 18:50:02 +0100 |
---|---|---|
committer | Stanislav Zholnin <zholnin@google.com> | 2019-06-21 18:13:53 +0100 |
commit | ca55f2759fc40596bec8afa3f79b9e784d4bf31f (patch) | |
tree | 0be4a87543de68491774531398465a34ca98a8c6 | |
parent | 44237b47bddeb8c512e82ecd0e71402dab187ed6 (diff) | |
download | PackageInstaller-ca55f2759fc40596bec8afa3f79b9e784d4bf31f.tar.gz |
Add logging of user actions in AppPermissionFragment.
Test: make statsd_testdrive && ./out/host/linux-x86/bin/statsd_testdrive -p com.google.android.permissioncontroller 215
Bug:133401502
Change-Id: Ic586a22e676cefbf67a9f7e638655fad58bd5613
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java index bca59da22..214d72027 100644 --- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java +++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java @@ -18,6 +18,7 @@ package com.android.packageinstaller.permission.ui.handheld; import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID; import static com.android.packageinstaller.Constants.INVALID_SESSION_ID; +import static com.android.packageinstaller.PermissionControllerStatsLog.APP_PERMISSION_FRAGMENT_ACTION_REPORTED; import static com.android.packageinstaller.PermissionControllerStatsLog.APP_PERMISSION_FRAGMENT_VIEWED; import static java.lang.annotation.RetentionPolicy.SOURCE; @@ -69,7 +70,9 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.widget.ActionBarShadowController; import java.lang.annotation.Retention; +import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * Show and manage a single permission group for an app. @@ -334,6 +337,73 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { return super.onOptionsItemSelected(item); } + private ArrayList<PermissionState> createPermissionSnapshot() { + ArrayList<PermissionState> permissionSnapshot = new ArrayList<>(); + ArrayList<Permission> permissions = mGroup.getPermissions(); + int numPermissions = permissions.size(); + + for (int i = 0; i < numPermissions; i++) { + Permission permission = permissions.get(i); + permissionSnapshot.add(new PermissionState(permission.getName(), + permission.isGrantedIncludingAppOp())); + } + + AppPermissionGroup permissionGroup = mGroup.getBackgroundPermissions(); + + if (permissionGroup == null) { + return permissionSnapshot; + } + + permissions = mGroup.getPermissions(); + numPermissions = permissions.size(); + + for (int i = 0; i < numPermissions; i++) { + Permission permission = permissions.get(i); + permissionSnapshot.add(new PermissionState(permission.getName(), + permission.isGrantedIncludingAppOp())); + } + + return permissionSnapshot; + } + + private void logPermissionChanges(ArrayList<PermissionState> previousPermissionSnapshot) { + long changeId = new Random().nextLong(); + int numPermissions = previousPermissionSnapshot.size(); + long sessionId = getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID); + + for (int i = 0; i < numPermissions; i++) { + PermissionState permissionState = previousPermissionSnapshot.get(i); + boolean wasGranted = permissionState.permissionGranted; + Permission permission = mGroup.getPermission(permissionState.permissionName); + + if (permission == null) { + if (mGroup.getBackgroundPermissions() == null) { + continue; + } + permission = mGroup.getBackgroundPermissions().getPermission( + permissionState.permissionName); + } + + boolean isGranted = permission.isGrantedIncludingAppOp(); + + if (wasGranted != isGranted) { + logAppPermissionFragmentActionReported(sessionId, changeId, + permissionState.permissionName, isGranted); + } + } + } + + private void logAppPermissionFragmentActionReported( + long sessionId, long changeId, String permissionName, boolean isGranted) { + PermissionControllerStatsLog.write(APP_PERMISSION_FRAGMENT_ACTION_REPORTED, sessionId, + changeId, mGroup.getApp().applicationInfo.uid, mGroup.getApp().packageName, + permissionName, isGranted); + Log.v(LOG_TAG, "Permission changed via UI with sessionId=" + sessionId + " changeId=" + + changeId + " uid=" + mGroup.getApp().applicationInfo.uid + " packageName=" + + mGroup.getApp().packageName + " permission=" + + permissionName + " isGranted=" + isGranted); + } + private void updateButtons() { Context context = getContext(); if (context == null) { @@ -717,6 +787,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { } if (requestGrant) { + ArrayList<PermissionState> stateBefore = createPermissionSnapshot(); if ((changeTarget & CHANGE_FOREGROUND) != 0) { if (!mGroup.areRuntimePermissionsGranted()) { SafetyNetLogger.logPermissionToggled(mGroup); @@ -733,6 +804,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { mGroup.getBackgroundPermissions().grantRuntimePermissions(false); } } + logPermissionChanges(stateBefore); } else { boolean showDefaultDenyDialog = false; @@ -757,6 +829,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { updateButtons(); return false; } else { + ArrayList<PermissionState> stateBefore = createPermissionSnapshot(); if ((changeTarget & CHANGE_FOREGROUND) != 0 && mGroup.areRuntimePermissionsGranted()) { if (mGroup.areRuntimePermissionsGranted()) { @@ -775,6 +848,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { mGroup.getBackgroundPermissions().revokeRuntimePermissions(false); } } + logPermissionChanges(stateBefore); } } @@ -831,6 +905,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { */ void onDenyAnyWay(@ChangeTarget int changeTarget) { boolean hasDefaultPermissions = false; + ArrayList<PermissionState> stateBefore = createPermissionSnapshot(); if ((changeTarget & CHANGE_FOREGROUND) != 0) { if (mGroup.areRuntimePermissionsGranted()) { SafetyNetLogger.logPermissionToggled(mGroup); @@ -850,6 +925,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { mGroup.getBackgroundPermissions().hasGrantedByDefaultPermission(); } } + logPermissionChanges(stateBefore); if (hasDefaultPermissions || !mGroup.doesSupportRuntimePermissions()) { mHasConfirmedRevoke = true; @@ -903,4 +979,15 @@ public class AppPermissionFragment extends SettingsWithLargeHeader { } } } + + private static class PermissionState { + @NonNull public final String permissionName; + public final boolean permissionGranted; + + PermissionState(@NonNull String permissionName, boolean permissionGranted) { + this.permissionName = permissionName; + this.permissionGranted = permissionGranted; + } + } + } |