Skip to content

Commit 90881fe

Browse files
author
Android Build Coastguard Worker
committed
Merge cherrypicks of ['googleplex-android-review.googlesource.com/22621774', 'googleplex-android-review.googlesource.com/24413934', 'googleplex-android-review.googlesource.com/24664788', 'googleplex-android-review.googlesource.com/24805434', 'googleplex-android-review.googlesource.com/24665127', 'googleplex-android-review.googlesource.com/25165838', 'googleplex-android-review.googlesource.com/25096532', 'googleplex-android-review.googlesource.com/25249793'] into security-aosp-tm-release.
Change-Id: I404ae7482475f8ec39c34dc5d456acaad7118442
2 parents d203ccf + 1175720 commit 90881fe

9 files changed

Lines changed: 321 additions & 24 deletions

File tree

core/java/android/service/dreams/DreamService.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,8 +1192,17 @@ private static ComponentName convertToComponentName(String flattenedString,
11921192
if (!flattenedString.contains("/")) {
11931193
return new ComponentName(serviceInfo.packageName, flattenedString);
11941194
}
1195-
1196-
return ComponentName.unflattenFromString(flattenedString);
1195+
// Ensure that the component is from the same package as the dream service. If not,
1196+
// treat the component as invalid and return null instead.
1197+
final ComponentName cn = ComponentName.unflattenFromString(flattenedString);
1198+
if (cn == null) return null;
1199+
if (!cn.getPackageName().equals(serviceInfo.packageName)) {
1200+
Log.w(TAG,
1201+
"Inconsistent package name in component: " + cn.getPackageName()
1202+
+ ", should be: " + serviceInfo.packageName);
1203+
return null;
1204+
}
1205+
return cn;
11971206
}
11981207

11991208
/**

packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import com.android.systemui.plugins.FalsingManager;
6363
import com.android.systemui.shared.system.SysUiStatsLog;
6464
import com.android.systemui.statusbar.policy.ConfigurationController;
65+
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
6566
import com.android.systemui.statusbar.policy.KeyguardStateController;
6667
import com.android.systemui.statusbar.policy.UserSwitcherController;
6768
import com.android.systemui.util.ViewController;
@@ -250,6 +251,7 @@ public void onDevicePolicyManagerStateChanged() {
250251
showPrimarySecurityScreen(false);
251252
}
252253
};
254+
private final DeviceProvisionedController mDeviceProvisionedController;
253255

254256
private KeyguardSecurityContainerController(KeyguardSecurityContainer view,
255257
AdminSecondaryLockScreenController.Factory adminSecondaryLockScreenControllerFactory,
@@ -267,7 +269,9 @@ private KeyguardSecurityContainerController(KeyguardSecurityContainer view,
267269
UserSwitcherController userSwitcherController,
268270
FeatureFlags featureFlags,
269271
GlobalSettings globalSettings,
270-
SessionTracker sessionTracker) {
272+
SessionTracker sessionTracker,
273+
DeviceProvisionedController deviceProvisionedController
274+
) {
271275
super(view);
272276
mLockPatternUtils = lockPatternUtils;
273277
mUpdateMonitor = keyguardUpdateMonitor;
@@ -287,6 +291,7 @@ private KeyguardSecurityContainerController(KeyguardSecurityContainer view,
287291
mFeatureFlags = featureFlags;
288292
mGlobalSettings = globalSettings;
289293
mSessionTracker = sessionTracker;
294+
mDeviceProvisionedController = deviceProvisionedController;
290295
}
291296

292297
@Override
@@ -469,8 +474,11 @@ public boolean showNextSecurityScreenOrFinish(boolean authenticated, int targetU
469474
case SimPuk:
470475
// Shortcut for SIM PIN/PUK to go to directly to user's security screen or home
471476
SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId);
472-
if (securityMode == SecurityMode.None && mLockPatternUtils.isLockScreenDisabled(
473-
KeyguardUpdateMonitor.getCurrentUser())) {
477+
boolean isLockscreenDisabled = mLockPatternUtils.isLockScreenDisabled(
478+
KeyguardUpdateMonitor.getCurrentUser())
479+
|| !mDeviceProvisionedController.isUserSetup(targetUserId);
480+
481+
if (securityMode == SecurityMode.None && isLockscreenDisabled) {
474482
finish = true;
475483
eventSubtype = BOUNCER_DISMISS_SIM;
476484
uiEvent = BouncerUiEvent.BOUNCER_DISMISS_SIM;
@@ -676,6 +684,7 @@ static class Factory {
676684
private final FeatureFlags mFeatureFlags;
677685
private final UserSwitcherController mUserSwitcherController;
678686
private final SessionTracker mSessionTracker;
687+
private final DeviceProvisionedController mDeviceProvisionedController;
679688

680689
@Inject
681690
Factory(KeyguardSecurityContainer view,
@@ -694,7 +703,8 @@ static class Factory {
694703
UserSwitcherController userSwitcherController,
695704
FeatureFlags featureFlags,
696705
GlobalSettings globalSettings,
697-
SessionTracker sessionTracker) {
706+
SessionTracker sessionTracker,
707+
DeviceProvisionedController deviceProvisionedController) {
698708
mView = view;
699709
mAdminSecondaryLockScreenControllerFactory = adminSecondaryLockScreenControllerFactory;
700710
mLockPatternUtils = lockPatternUtils;
@@ -711,6 +721,7 @@ static class Factory {
711721
mGlobalSettings = globalSettings;
712722
mUserSwitcherController = userSwitcherController;
713723
mSessionTracker = sessionTracker;
724+
mDeviceProvisionedController = deviceProvisionedController;
714725
}
715726

716727
public KeyguardSecurityContainerController create(
@@ -720,7 +731,8 @@ public KeyguardSecurityContainerController create(
720731
mKeyguardUpdateMonitor, mKeyguardSecurityModel, mMetricsLogger, mUiEventLogger,
721732
mKeyguardStateController, securityCallback, mSecurityViewFlipperController,
722733
mConfigurationController, mFalsingCollector, mFalsingManager,
723-
mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker);
734+
mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker,
735+
mDeviceProvisionedController);
724736
}
725737
}
726738
}

packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.io.PrintWriter;
5252
import java.util.ArrayList;
5353
import java.util.List;
54+
import java.util.Map;
5455
import java.util.Set;
5556

5657
import javax.inject.Inject;
@@ -144,6 +145,10 @@ protected void setBGHandler(H handler) {
144145
protected void setListening(boolean listening) {
145146
mListening = listening;
146147
if (listening) {
148+
// System UI could be restarted while ops are active, so fetch the currently active ops
149+
// once System UI starts listening again.
150+
fetchCurrentActiveOps();
151+
147152
mAppOps.startWatchingActive(OPS, this);
148153
mAppOps.startWatchingNoted(OPS, this);
149154
mAudioManager.registerAudioRecordingCallback(mAudioRecordingCallback, mBGHandler);
@@ -176,6 +181,29 @@ protected void setListening(boolean listening) {
176181
}
177182
}
178183

184+
private void fetchCurrentActiveOps() {
185+
List<AppOpsManager.PackageOps> packageOps = mAppOps.getPackagesForOps(OPS);
186+
for (AppOpsManager.PackageOps op : packageOps) {
187+
for (AppOpsManager.OpEntry entry : op.getOps()) {
188+
for (Map.Entry<String, AppOpsManager.AttributedOpEntry> attributedOpEntry :
189+
entry.getAttributedOpEntries().entrySet()) {
190+
if (attributedOpEntry.getValue().isRunning()) {
191+
onOpActiveChanged(
192+
entry.getOpStr(),
193+
op.getUid(),
194+
op.getPackageName(),
195+
/* attributionTag= */ attributedOpEntry.getKey(),
196+
/* active= */ true,
197+
// AppOpsManager doesn't have a way to fetch attribution flags or
198+
// chain ID given an op entry, so default them to none.
199+
AppOpsManager.ATTRIBUTION_FLAGS_NONE,
200+
AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE);
201+
}
202+
}
203+
}
204+
}
205+
}
206+
179207
/**
180208
* Adds a callback that will get notifified when an AppOp of the type the controller tracks
181209
* changes

packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,9 @@ class SystemStatusAnimationScheduler @Inject constructor(
8888
}
8989

9090
fun onStatusEvent(event: StatusEvent) {
91-
// Ignore any updates until the system is up and running
92-
if (isTooEarly() || !isImmersiveIndicatorEnabled()) {
91+
// Ignore any updates until the system is up and running. However, for important events that
92+
// request to be force visible (like privacy), ignore whether it's too early.
93+
if ((isTooEarly() && !event.forceVisible) || !isImmersiveIndicatorEnabled()) {
9394
return
9495
}
9596

packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.android.systemui.log.SessionTracker;
5656
import com.android.systemui.plugins.FalsingManager;
5757
import com.android.systemui.statusbar.policy.ConfigurationController;
58+
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
5859
import com.android.systemui.statusbar.policy.KeyguardStateController;
5960
import com.android.systemui.statusbar.policy.UserSwitcherController;
6061
import com.android.systemui.util.settings.GlobalSettings;
@@ -164,7 +165,8 @@ public void setup() {
164165
mKeyguardStateController, mKeyguardSecurityViewFlipperController,
165166
mConfigurationController, mFalsingCollector, mFalsingManager,
166167
mUserSwitcherController, mFeatureFlags, mGlobalSettings,
167-
mSessionTracker).create(mSecurityCallback);
168+
mSessionTracker, mock(DeviceProvisionedController.class))
169+
.create(mSecurityCallback);
168170
}
169171

170172
@Test

0 commit comments

Comments
 (0)