From b2c03474c459a694e2f434160a6c3da17f5b1a4f Mon Sep 17 00:00:00 2001 From: Alisher Alikhodjaev Date: Mon, 13 Sep 2021 17:00:30 -0700 Subject: [PATCH 1/3] PaymentDefaultDialog Could be Overlaid Settings#PaymentDefaultDialog Could be Overlaid to Trick User into Updating Default Payment App Bug: 180104327 Test: build ok Change-Id: Ia7786d05aae8e38a11bd73d02200640cb614e88a --- src/com/android/settings/nfc/PaymentDefaultDialog.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/settings/nfc/PaymentDefaultDialog.java b/src/com/android/settings/nfc/PaymentDefaultDialog.java index 1aa8dca9bd1..d5a86a8037c 100644 --- a/src/com/android/settings/nfc/PaymentDefaultDialog.java +++ b/src/com/android/settings/nfc/PaymentDefaultDialog.java @@ -30,6 +30,8 @@ import com.android.settings.nfc.PaymentBackend.PaymentAppInfo; import java.util.List; +import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; + public final class PaymentDefaultDialog extends AlertActivity implements DialogInterface.OnClickListener { @@ -42,6 +44,9 @@ public final class PaymentDefaultDialog extends AlertActivity implements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + getWindow().addPrivateFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); + try { mBackend = new PaymentBackend(this); } catch (NullPointerException e) { From 49d20fa68e9f716de126f146c446f36c0d7105f3 Mon Sep 17 00:00:00 2001 From: Ayush Sharma Date: Fri, 13 Aug 2021 16:38:59 +0000 Subject: [PATCH 2/3] Fetch admin details if not present in Intent. Get admin package/user details if this info is not present in the intent(ACTION_SHOW_ADMIN_SUPPORT_DETAILS) received Bug: 192245204 Test: atest MixedDeviceOwnerTest#testCreateAdminSupportIntent atest MixedProfileOwnerTest#testCreateAdminSupportIntent atest MixedManagedProfileOwnerTest#testCreateAdminSupportIntent Change-Id: Idda6078a64c03588f0b786ebc79079198ab722fe Merged-In: Idda6078a64c03588f0b786ebc79079198ab722fe --- .../enterprise/ActionDisabledByAdminDialog.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java index ce7ad242056..c4bef25b1cc 100644 --- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java +++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialog.java @@ -58,11 +58,25 @@ public class ActionDisabledByAdminDialog extends Activity return admin; } admin.component = intent.getParcelableExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN); + int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId()); + + Bundle adminDetails = null; + if (admin.component == null) { + DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class); + adminDetails = devicePolicyManager.getEnforcingAdminAndUserDetails(userId, + getRestrictionFromIntent(intent)); + if (adminDetails != null) { + admin.component = adminDetails.getParcelable( + DevicePolicyManager.EXTRA_DEVICE_ADMIN); + } + } if (intent.hasExtra(Intent.EXTRA_USER)) { admin.user = intent.getParcelableExtra(Intent.EXTRA_USER); } else { - int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId()); + if (adminDetails != null) { + userId = adminDetails.getInt(Intent.EXTRA_USER_ID, UserHandle.myUserId()); + } if (userId == UserHandle.USER_NULL) { admin.user = null; } else { From 0cd29a70a4f26b4c6c82f17acb8ca6bd60e7dfbd Mon Sep 17 00:00:00 2001 From: "Wesley.CW Wang" Date: Thu, 30 Sep 2021 14:59:26 +0800 Subject: [PATCH 3/3] Punt battery status action when entering Settings main page - Checking battery sharing states at the beging may have some performance issue, post battery status update to background thread to avoid ANR Bug: 193600924 Test: make SettingsRoboTests Change-Id: I3b73e6bd4f952bc832783b9b3b5d45db560d088c --- .../TopLevelBatteryPreferenceController.java | 22 +++++++++++++++---- ...pLevelBatteryPreferenceControllerTest.java | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java index 2eb7cf413fc..094793884f3 100644 --- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java +++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java @@ -30,6 +30,7 @@ import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; +import com.android.settingslib.utils.ThreadUtils; import java.util.HashMap; @@ -38,8 +39,9 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle @VisibleForTesting protected boolean mIsBatteryPresent = true; + @VisibleForTesting + Preference mPreference; private final BatteryBroadcastReceiver mBatteryBroadcastReceiver; - private Preference mPreference; private BatteryInfo mBatteryInfo; private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider; private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider; @@ -140,14 +142,26 @@ public class TopLevelBatteryPreferenceController extends BasePreferenceControlle } if (batteryStatusUpdate) { - if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) { - mBatteryStatusLabel = null; // will generateLabel() - } + setSummaryAsync(info); } return (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel; } + private void setSummaryAsync(BatteryInfo info) { + ThreadUtils.postOnBackgroundThread(() -> { + final boolean triggerBatteryStatusUpdate = + mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info); + ThreadUtils.postOnMainThread(() -> { + if (!triggerBatteryStatusUpdate) { + mBatteryStatusLabel = null; // will generateLabel() + } + mPreference.setSummary( + (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel); + }); + }); + } + private CharSequence generateLabel(BatteryInfo info) { if (!info.discharging && info.chargeLabel != null) { return info.chargeLabel; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java index 3201d82c12a..eef69884432 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java @@ -156,6 +156,7 @@ public class TopLevelBatteryPreferenceControllerTest { @Test public void getDashboardLabel_returnsCorrectLabel() { + mController.mPreference = new Preference(mContext); BatteryInfo info = new BatteryInfo(); info.batteryPercentString = "3%"; assertThat(mController.getDashboardLabel(mContext, info, true))