Creation of sessionId and passing it between PermissionController fragments.
SessionId will be used in logging of user interactions with PermissionController
Test: Tested locally with log statements added to each activity.
Bug: 133401502
Change-Id: I04dd387421017b1e663d5933ad37ef24e21ec38a
Merged-In: I04dd387421017b1e663d5933ad37ef24e21ec38a
(cherry picked from commit a0395db9be0eb43445a43bf5135f70eee71602ba)
diff --git a/src/com/android/packageinstaller/Constants.java b/src/com/android/packageinstaller/Constants.java
index c3d7f86..fa25beb 100644
--- a/src/com/android/packageinstaller/Constants.java
+++ b/src/com/android/packageinstaller/Constants.java
@@ -136,4 +136,15 @@
* set for the names of the roles that an application is always denied for.
*/
public static final String REQUEST_ROLE_USER_DENIED_ALWAYS_KEY_PREFIX = "denied_always:";
+
+ /**
+ * Intent extra used to pass current sessionId between Permission Controller fragments.
+ */
+ public static final String EXTRA_SESSION_ID =
+ "com.android.packageinstaller.extra.SESSION_ID";
+
+ /**
+ * Invalid session id.
+ */
+ public static final long INVALID_SESSION_ID = 0;
}
diff --git a/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java b/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
index e3a2e92..30911e1 100644
--- a/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
+++ b/src/com/android/packageinstaller/permission/service/LocationAccessCheck.java
@@ -39,6 +39,8 @@
import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_DELAY_MILLIS;
import static android.provider.Settings.Secure.LOCATION_ACCESS_CHECK_INTERVAL_MILLIS;
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
import static com.android.packageinstaller.Constants.KEY_LAST_LOCATION_ACCESS_NOTIFICATION_SHOWN;
import static com.android.packageinstaller.Constants.LOCATION_ACCESS_CHECK_ALREADY_NOTIFIED_FILE;
import static com.android.packageinstaller.Constants.LOCATION_ACCESS_CHECK_JOB_ID;
@@ -516,9 +518,16 @@
deleteIntent.putExtra(EXTRA_USER, user);
deleteIntent.setFlags(FLAG_RECEIVER_FOREGROUND);
+ long sessionId = INVALID_SESSION_ID;
+
+ while (sessionId == INVALID_SESSION_ID) {
+ sessionId = new Random().nextLong();
+ }
+
Intent clickIntent = new Intent(mContext, NotificationClickHandler.class);
clickIntent.putExtra(EXTRA_PACKAGE_NAME, pkgName);
clickIntent.putExtra(EXTRA_USER, user);
+ clickIntent.putExtra(EXTRA_SESSION_ID, sessionId);
clickIntent.setFlags(FLAG_RECEIVER_FOREGROUND);
CharSequence appName = getNotificationAppName();
@@ -813,6 +822,7 @@
public void onReceive(Context context, Intent intent) {
String pkg = getStringExtraSafe(intent, EXTRA_PACKAGE_NAME);
UserHandle user = getParcelableExtraSafe(intent, EXTRA_USER);
+ long sessionId = intent.getLongExtra(EXTRA_SESSION_ID, INVALID_SESSION_ID);
new LocationAccessCheck(context, null).markAsNotified(pkg, user);
@@ -821,6 +831,8 @@
manageAppPermission.putExtra(EXTRA_PERMISSION_NAME, ACCESS_FINE_LOCATION);
manageAppPermission.putExtra(EXTRA_PACKAGE_NAME, pkg);
manageAppPermission.putExtra(EXTRA_USER, user);
+ manageAppPermission.putExtra(EXTRA_SESSION_ID, sessionId);
+
context.startActivity(manageAppPermission);
}
diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java b/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java
index b425fd8..7e70129 100644
--- a/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/AppPermissionActivity.java
@@ -18,6 +18,8 @@
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
+
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
@@ -27,6 +29,7 @@
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
+import com.android.packageinstaller.Constants;
import com.android.packageinstaller.DeviceUtils;
import com.android.packageinstaller.permission.ui.auto.AutoAppPermissionFragment;
import com.android.packageinstaller.permission.ui.handheld.AppPermissionFragment;
@@ -100,8 +103,10 @@
androidXFragment = AutoAppPermissionFragment.newInstance(packageName, permissionName,
groupName, userHandle);
} else {
+ long sessionId = getIntent().getLongExtra(Constants.EXTRA_SESSION_ID,
+ INVALID_SESSION_ID);
androidXFragment = AppPermissionFragment.newInstance(packageName, permissionName,
- groupName, userHandle, caller);
+ groupName, userHandle, caller, sessionId);
}
getSupportFragmentManager().beginTransaction().replace(android.R.id.content,
diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
index 6dd3279..9ec35ea 100644
--- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
@@ -18,6 +18,8 @@
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+import static com.android.packageinstaller.Constants.INVALID_SESSION_ID;
+
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
@@ -27,6 +29,7 @@
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
+import com.android.packageinstaller.Constants;
import com.android.packageinstaller.DeviceUtils;
import com.android.packageinstaller.permission.ui.auto.AutoAllAppPermissionsFragment;
import com.android.packageinstaller.permission.ui.auto.AutoAppPermissionsFragment;
@@ -38,6 +41,8 @@
import com.android.packageinstaller.permission.utils.Utils;
import com.android.permissioncontroller.R;
+import java.util.Random;
+
public final class ManagePermissionsActivity extends FragmentActivity {
private static final String LOG_TAG = ManagePermissionsActivity.class.getSimpleName();
@@ -64,6 +69,11 @@
getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+ long sessionId = getIntent().getLongExtra(Constants.EXTRA_SESSION_ID, INVALID_SESSION_ID);
+ while (sessionId == INVALID_SESSION_ID) {
+ sessionId = new Random().nextLong();
+ }
+
String permissionName;
switch (action) {
case Intent.ACTION_MANAGE_PERMISSIONS:
@@ -74,7 +84,7 @@
com.android.packageinstaller.permission.ui.television
.ManagePermissionsFragment.newInstance();
} else {
- androidXFragment = ManageStandardPermissionsFragment.newInstance();
+ androidXFragment = ManageStandardPermissionsFragment.newInstance(sessionId);
}
break;
@@ -143,7 +153,8 @@
.AllAppPermissionsFragment.newInstance(packageName, userHandle);
} else {
androidXFragment = com.android.packageinstaller.permission.ui.handheld
- .AppPermissionsFragment.newInstance(packageName, userHandle);
+ .AppPermissionsFragment.newInstance(
+ packageName, userHandle, sessionId);
}
}
} break;
@@ -163,7 +174,7 @@
.PermissionAppsFragment.newInstance(permissionName);
} else {
androidXFragment = com.android.packageinstaller.permission.ui.handheld
- .PermissionAppsFragment.newInstance(permissionName);
+ .PermissionAppsFragment.newInstance(permissionName, sessionId);
}
} break;
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java
index d314bd7..25e7966 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionFragment.java
@@ -52,6 +52,7 @@
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
+import com.android.packageinstaller.Constants;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.Permission;
import com.android.packageinstaller.permission.model.PermissionUsages;
@@ -112,8 +113,8 @@
* @return A new fragment
*/
public static @NonNull AppPermissionFragment newInstance(@NonNull String packageName,
- @NonNull String permName, @Nullable String groupName, @NonNull UserHandle userHandle,
- @Nullable String caller) {
+ @NonNull String permName, @Nullable String groupName,
+ @NonNull UserHandle userHandle, @Nullable String caller, long sessionId) {
AppPermissionFragment fragment = new AppPermissionFragment();
Bundle arguments = new Bundle();
arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
@@ -124,6 +125,7 @@
}
arguments.putParcelable(Intent.EXTRA_USER, userHandle);
arguments.putString(AppPermissionActivity.EXTRA_CALLER_NAME, caller);
+ arguments.putLong(Constants.EXTRA_SESSION_ID, sessionId);
fragment.setArguments(arguments);
return fragment;
}
@@ -209,6 +211,8 @@
root.requireViewById(R.id.usage_summary).setVisibility(View.GONE);
}
+ long sessionId = getArguments().getLong(Constants.EXTRA_SESSION_ID);
+
TextView footer1Link = root.requireViewById(R.id.footer_link_1);
footer1Link.setText(context.getString(R.string.app_permission_footer_app_permissions_link,
appLabel));
@@ -216,6 +220,7 @@
UserHandle user = UserHandle.getUserHandleForUid(mGroup.getApp().applicationInfo.uid);
Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mGroup.getApp().packageName);
+ intent.putExtra(Constants.EXTRA_SESSION_ID, sessionId);
intent.putExtra(Intent.EXTRA_USER, user);
context.startActivity(intent);
});
@@ -225,6 +230,7 @@
footer2Link.setOnClickListener((v) -> {
Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS);
intent.putExtra(Intent.EXTRA_PERMISSION_NAME, mGroup.getName());
+ intent.putExtra(Constants.EXTRA_SESSION_ID, sessionId);
context.startActivity(intent);
});
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
index 26cebb5..615fbd1 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
@@ -16,6 +16,9 @@
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 android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
@@ -71,15 +74,18 @@
* @return A new fragment
*/
public static AppPermissionsFragment newInstance(@NonNull String packageName,
- @NonNull UserHandle userHandle) {
- return setPackageNameAndUserHandle(new AppPermissionsFragment(), packageName, userHandle);
+ @NonNull UserHandle userHandle, long sessionId) {
+ return setPackageNameAndUserHandleAndSessionId(
+ new AppPermissionsFragment(), packageName, userHandle, sessionId);
}
- private static <T extends Fragment> T setPackageNameAndUserHandle(@NonNull T fragment,
- @NonNull String packageName, @NonNull UserHandle userHandle) {
+ private static <T extends Fragment> T setPackageNameAndUserHandleAndSessionId(
+ @NonNull T fragment, @NonNull String packageName, @NonNull UserHandle userHandle,
+ long sessionId) {
Bundle arguments = new Bundle();
arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
arguments.putParcelable(Intent.EXTRA_USER, userHandle);
+ arguments.putLong(EXTRA_SESSION_ID, sessionId);
fragment.setArguments(arguments);
return fragment;
}
@@ -215,6 +221,8 @@
allowed.setOrderingAsAdded(true);
denied.setOrderingAsAdded(true);
+ long sessionId = getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID);
+
for (int i = 0; i < groups.size(); i++) {
AppPermissionGroup group = groups.get(i);
if (!Utils.shouldShowPermission(getContext(), group)) {
@@ -224,7 +232,7 @@
boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG);
PermissionControlPreference preference = new PermissionControlPreference(context,
- group, AppPermissionsFragment.class.getName());
+ group, AppPermissionsFragment.class.getName(), sessionId);
preference.setKey(group.getName());
Drawable icon = Utils.loadDrawable(context.getPackageManager(),
group.getIconPkg(), group.getIconResId());
@@ -278,9 +286,10 @@
if (mExtraScreen != null) {
extraPerms.setOnPreferenceClickListener(preference -> {
AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
- setPackageNameAndUserHandle(frag,
+ setPackageNameAndUserHandleAndSessionId(frag,
getArguments().getString(Intent.EXTRA_PACKAGE_NAME),
- getArguments().getParcelable(Intent.EXTRA_USER));
+ getArguments().getParcelable(Intent.EXTRA_USER),
+ getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID));
frag.setTargetFragment(AppPermissionsFragment.this, 0);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, frag)
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
index ffd0829..8249053 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManageCustomPermissionsFragment.java
@@ -16,12 +16,27 @@
package com.android.packageinstaller.permission.ui.handheld;
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+
+import android.os.Bundle;
import android.view.MenuItem;
/**
* Fragment that allows the user to manage custom permissions.
*/
public class ManageCustomPermissionsFragment extends ManagePermissionsFragment {
+
+ /**
+ * @return A new fragment
+ */
+ public static ManageCustomPermissionsFragment newInstance(long sessionId) {
+ ManageCustomPermissionsFragment fragment = new ManageCustomPermissionsFragment();
+ Bundle arguments = new Bundle();
+ arguments.putLong(EXTRA_SESSION_ID, sessionId);
+ fragment.setArguments(arguments);
+ return fragment;
+ }
+
@Override
public void onStart() {
super.onStart();
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
index cf2c56f..638c3a6 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManagePermissionsFragment.java
@@ -15,6 +15,9 @@
*/
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 android.app.ActionBar;
import android.content.ActivityNotFoundException;
import android.content.Context;
@@ -75,7 +78,9 @@
}
Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
- .putExtra(Intent.EXTRA_PERMISSION_NAME, key);
+ .putExtra(Intent.EXTRA_PERMISSION_NAME, key)
+ .putExtra(EXTRA_SESSION_ID,
+ getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID));
try {
getActivity().startActivity(intent);
} catch (ActivityNotFoundException e) {
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
index cc4558f..3d793f0 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ManageStandardPermissionsFragment.java
@@ -15,6 +15,8 @@
*/
package com.android.packageinstaller.permission.ui.handheld;
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+
import android.os.Bundle;
import android.view.MenuItem;
@@ -38,11 +40,14 @@
/**
* @return A new fragment
*/
- public static ManageStandardPermissionsFragment newInstance() {
- return new ManageStandardPermissionsFragment();
+ public static ManageStandardPermissionsFragment newInstance(long sessionId) {
+ ManageStandardPermissionsFragment fragment = new ManageStandardPermissionsFragment();
+ Bundle arguments = new Bundle();
+ arguments.putLong(EXTRA_SESSION_ID, sessionId);
+ fragment.setArguments(arguments);
+ return fragment;
}
-
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -95,8 +100,9 @@
android.R.attr.colorControlNormal));
additionalPermissionsPreference.setTitle(R.string.additional_permissions);
additionalPermissionsPreference.setOnPreferenceClickListener(preference -> {
+ long sessionId = getArguments().getLong(EXTRA_SESSION_ID);
ManageCustomPermissionsFragment frag =
- new ManageCustomPermissionsFragment();
+ ManageCustomPermissionsFragment.newInstance(sessionId);
frag.setTargetFragment(ManageStandardPermissionsFragment.this, 0);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.content, frag);
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
index 70ea65a..885f05b 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionAppsFragment.java
@@ -15,6 +15,9 @@
*/
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 android.app.ActionBar;
import android.content.Context;
import android.content.Intent;
@@ -60,13 +63,19 @@
private static final String SHOW_SYSTEM_KEY = PermissionAppsFragment.class.getName()
+ KEY_SHOW_SYSTEM_PREFS;
- public static PermissionAppsFragment newInstance(String permissionName) {
- return setPermissionName(new PermissionAppsFragment(), permissionName);
+ /**
+ * @return A new fragment
+ */
+ public static PermissionAppsFragment newInstance(String permissionName, long sessionId) {
+ return setPermissionNameAndSessionId(
+ new PermissionAppsFragment(), permissionName, sessionId);
}
- private static <T extends Fragment> T setPermissionName(T fragment, String permissionName) {
+ private static <T extends Fragment> T setPermissionNameAndSessionId(
+ T fragment, String permissionName, long sessionId) {
Bundle arguments = new Bundle();
arguments.putString(Intent.EXTRA_PERMISSION_NAME, permissionName);
+ arguments.putLong(EXTRA_SESSION_ID, sessionId);
fragment.setArguments(arguments);
return fragment;
}
@@ -245,6 +254,8 @@
return result;
});
+ long sessionId = getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID);
+
for (int i = 0; i < sortedApps.size(); i++) {
PermissionApp app = sortedApps.get(i);
AppPermissionGroup group = app.getPermissionGroup();
@@ -302,7 +313,7 @@
}
PermissionControlPreference pref = new PermissionControlPreference(context, group,
- PermissionAppsFragment.class.getName());
+ PermissionAppsFragment.class.getName(), sessionId);
pref.setKey(key);
pref.setIcon(app.getIcon());
pref.setTitle(Utils.getFullAppLabel(app.getAppInfo(), context));
@@ -338,7 +349,8 @@
pref.setTitle(R.string.preference_show_system_apps);
pref.setOnPreferenceClickListener(preference -> {
SystemAppsFragment frag = new SystemAppsFragment();
- setPermissionName(frag, getArguments().getString(Intent.EXTRA_PERMISSION_NAME));
+ setPermissionNameAndSessionId(frag,
+ getArguments().getString(Intent.EXTRA_PERMISSION_NAME), sessionId);
frag.setTargetFragment(PermissionAppsFragment.this, 0);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, frag)
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java b/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java
index 362358b..da86a6d 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/PermissionControlPreference.java
@@ -16,6 +16,8 @@
package com.android.packageinstaller.permission.ui.handheld;
+import static com.android.packageinstaller.Constants.EXTRA_SESSION_ID;
+
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
@@ -51,6 +53,11 @@
public PermissionControlPreference(@NonNull Context context,
@NonNull AppPermissionGroup group, @NonNull String caller) {
+ this(context, group, caller, 0);
+ }
+
+ public PermissionControlPreference(@NonNull Context context,
+ @NonNull AppPermissionGroup group, @NonNull String caller, long sessionId) {
super(context);
mContext = context;
mWidgetIcon = null;
@@ -64,6 +71,7 @@
intent.putExtra(Intent.EXTRA_PERMISSION_NAME, group.getPermissions().get(0).getName());
intent.putExtra(Intent.EXTRA_USER, group.getUser());
intent.putExtra(AppPermissionActivity.EXTRA_CALLER_NAME, caller);
+ intent.putExtra(EXTRA_SESSION_ID, sessionId);
context.startActivity(intent);
return true;
});