diff options
author | 2024-05-03 11:18:46 -0400 | |
---|---|---|
committer | 2024-05-06 19:26:40 +0000 | |
commit | 2af47ea5c79b9653c673455267f8baac991fb9f0 (patch) | |
tree | 2c03b5daa07fd6e09ad040f375aee1d09da824ab | |
parent | 376a1bffa82f90298db92ae17dc572765fdf0972 (diff) |
Dismiss if restarting after private space is locked
Share sheet only dismisses when it is moved to the background.
When private space is set to lock automatically, the private
space profile tab may remain visible, leading to disclosure
risk.
When restarting ChooserActivity, if the private tab was visible
but the private profile has since become locked, the activity
will be finished instead.
Bug: 338125945
Flag: com.android.intentresolver.fix_private_space_locked_on_restart
Test: manual; see description, screencast in bug
Change-Id: I294bf62f0a73f6c1b73f598109814701215cdeb5
-rw-r--r-- | aconfig/FeatureFlags.aconfig | 11 | ||||
-rw-r--r-- | java/src/com/android/intentresolver/ChooserActivity.java | 9 | ||||
-rw-r--r-- | java/src/com/android/intentresolver/ProfileAvailability.kt | 2 |
3 files changed, 21 insertions, 1 deletions
diff --git a/aconfig/FeatureFlags.aconfig b/aconfig/FeatureFlags.aconfig index b7d9ea0d..cdf9eb29 100644 --- a/aconfig/FeatureFlags.aconfig +++ b/aconfig/FeatureFlags.aconfig @@ -52,9 +52,20 @@ flag { purpose: PURPOSE_BUGFIX } } + flag { name: "fix_empty_state_padding" namespace: "intentresolver" description: "Always apply systemBar window insets regardless of profiles present" bug: "338447666" } + +flag { + name: "fix_private_space_locked_on_restart" + namespace: "intentresolver" + description: "Dismiss Share sheet on restart if private space became locked while stopped" + bug: "338125945" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 1922c05c..f01fd77c 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -416,6 +416,15 @@ public class ChooserActivity extends Hilt_ChooserActivity implements @Override protected final void onRestart() { super.onRestart(); + if (mFeatureFlags.fixPrivateSpaceLockedOnRestart()) { + if (mChooserMultiProfilePagerAdapter.hasPageForProfile(Profile.Type.PRIVATE.ordinal()) + && !mProfileAvailability.isAvailable(mProfiles.getPrivateProfile())) { + Log.d(TAG, "Exiting due to unavailable profile"); + finish(); + return; + } + } + if (!mRegistered) { mPersonalPackageMonitor.register( this, diff --git a/java/src/com/android/intentresolver/ProfileAvailability.kt b/java/src/com/android/intentresolver/ProfileAvailability.kt index c8e78552..43982727 100644 --- a/java/src/com/android/intentresolver/ProfileAvailability.kt +++ b/java/src/com/android/intentresolver/ProfileAvailability.kt @@ -47,7 +47,7 @@ class ProfileAvailability( /** Query current profile availability. An unavailable profile is one which is not active. */ @MainThread - fun isAvailable(profile: Profile): Boolean { + fun isAvailable(profile: Profile?): Boolean { return runBlocking(background) { userInteractor.availability.map { it[profile] == true }.first() } |