Skip to content

Commit 01de20b

Browse files
author
Android Build Coastguard Worker
committed
Merge cherrypicks of ['googleplex-android-review.googlesource.com/20219552', 'googleplex-android-review.googlesource.com/20946190', 'googleplex-android-review.googlesource.com/22616881', 'googleplex-android-review.googlesource.com/21327525', 'googleplex-android-review.googlesource.com/22621774', 'googleplex-android-review.googlesource.com/22905438', 'googleplex-android-review.googlesource.com/17738545', 'googleplex-android-review.googlesource.com/21253698', 'googleplex-android-review.googlesource.com/22787457', 'googleplex-android-review.googlesource.com/22512482', 'googleplex-android-review.googlesource.com/22895638'] into sparse-10161073-L49900000960778179.
SPARSE_CHANGE: Id53c6a2aa6da5933d488ca06a0bfc4ef89a4c343 SPARSE_CHANGE: I9fb0d66327f3f872a92e6b9d682d58489e81e6ba SPARSE_CHANGE: I83429f9e63e51c615a6e3f03befb76bb5b8ea7fc SPARSE_CHANGE: I5d329beecef1902c36704e93d0bc5cb60d0e2f5b SPARSE_CHANGE: Id302c41f63028bc6dd58ba686e23d73565de9675 SPARSE_CHANGE: I2617de6f9e8a7dbfd8fbeff589a7d592f00d87c5 SPARSE_CHANGE: I7a725647c001062d1a76a82b680a02e3e2edcb03 SPARSE_CHANGE: I30579090c803b231fd750abbc4ad645805f7ece2 SPARSE_CHANGE: I848545f7aee202495c515f47a32871a2cb6ae707 SPARSE_CHANGE: I169a1f72c84528ca606b6a4da165d4fbcd02b08d SPARSE_CHANGE: I7d3d35df0ec38945019f71755bed8797b7af4517 Change-Id: I9582a0401532e221bf2c720be71a3796324b8bbf
2 parents 95de1c4 + 58c8087 commit 01de20b

13 files changed

Lines changed: 310 additions & 135 deletions

File tree

core/java/android/app/ActivityOptions.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
2222
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
2323
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
24+
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
25+
import static android.content.Intent.FLAG_RECEIVER_FOREGROUND;
2426
import static android.view.Display.INVALID_DISPLAY;
2527

2628
import android.annotation.IntDef;
@@ -1727,7 +1729,9 @@ public void setPendingIntentLaunchFlags(@android.content.Intent.Flags int flags)
17271729
* @hide
17281730
*/
17291731
public int getPendingIntentLaunchFlags() {
1730-
return mPendingIntentLaunchFlags;
1732+
// b/243794108: Ignore all flags except the new task flag, to be reconsidered in b/254490217
1733+
return mPendingIntentLaunchFlags &
1734+
(FLAG_ACTIVITY_NEW_TASK | FLAG_RECEIVER_FOREGROUND);
17311735
}
17321736

17331737
/**

core/java/android/app/Notification.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2853,6 +2853,17 @@ public void visitUris(@NonNull Consumer<Uri> visitor) {
28532853
if (person != null) {
28542854
visitor.accept(person.getIconUri());
28552855
}
2856+
2857+
final RemoteInputHistoryItem[] history = (RemoteInputHistoryItem[])
2858+
extras.getParcelableArray(Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS);
2859+
if (history != null) {
2860+
for (int i = 0; i < history.length; i++) {
2861+
RemoteInputHistoryItem item = history[i];
2862+
if (item.getUri() != null) {
2863+
visitor.accept(item.getUri());
2864+
}
2865+
}
2866+
}
28562867
}
28572868

28582869
if (isStyle(MessagingStyle.class) && extras != null) {
@@ -2883,6 +2894,14 @@ public void visitUris(@NonNull Consumer<Uri> visitor) {
28832894
}
28842895
}
28852896

2897+
if (isStyle(CallStyle.class) & extras != null) {
2898+
Person callPerson = extras.getParcelable(EXTRA_CALL_PERSON);
2899+
if (callPerson != null) {
2900+
visitor.accept(callPerson.getIconUri());
2901+
}
2902+
visitIconUri(visitor, extras.getParcelable(EXTRA_VERIFICATION_ICON));
2903+
}
2904+
28862905
if (mBubbleMetadata != null) {
28872906
visitIconUri(visitor, mBubbleMetadata.getIcon());
28882907
}

core/java/android/content/pm/ShortcutInfo.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,12 @@ public final class ShortcutInfo implements Parcelable {
283283
*/
284284
public static final int DISABLED_REASON_OTHER_RESTORE_ISSUE = 103;
285285

286+
/**
287+
* The maximum length of Shortcut ID. IDs will be truncated at this limit.
288+
* @hide
289+
*/
290+
public static final int MAX_ID_LENGTH = 1000;
291+
286292
/** @hide */
287293
@IntDef(prefix = { "DISABLED_REASON_" }, value = {
288294
DISABLED_REASON_NOT_DISABLED,
@@ -475,8 +481,7 @@ public static boolean isDisabledForRestoreIssue(@DisabledReason int disabledReas
475481

476482
private ShortcutInfo(Builder b) {
477483
mUserId = b.mContext.getUserId();
478-
479-
mId = Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided");
484+
mId = getSafeId(Preconditions.checkStringNotEmpty(b.mId, "Shortcut ID must be provided"));
480485

481486
// Note we can't do other null checks here because SM.updateShortcuts() takes partial
482487
// information.
@@ -582,6 +587,14 @@ private static Person[] clonePersons(Person[] persons) {
582587
return ret;
583588
}
584589

590+
@NonNull
591+
private static String getSafeId(@NonNull String id) {
592+
if (id.length() > MAX_ID_LENGTH) {
593+
return id.substring(0, MAX_ID_LENGTH);
594+
}
595+
return id;
596+
}
597+
585598
/**
586599
* Throws if any of the mandatory fields is not set.
587600
*
@@ -2336,7 +2349,8 @@ private ShortcutInfo(Parcel source) {
23362349
final ClassLoader cl = getClass().getClassLoader();
23372350

23382351
mUserId = source.readInt();
2339-
mId = source.readString8();
2352+
mId = getSafeId(Preconditions.checkStringNotEmpty(source.readString8(),
2353+
"Shortcut ID must be provided"));
23402354
mPackageName = source.readString8();
23412355
mActivity = source.readParcelable(cl, android.content.ComponentName.class);
23422356
mFlags = source.readInt();

core/java/android/permission/IPermissionManager.aidl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ interface IPermissionManager {
7777
List<SplitPermissionInfoParcelable> getSplitPermissions();
7878

7979
void startOneTimePermissionSession(String packageName, int userId, long timeout,
80-
long revokeAfterKilledDelay, int importanceToResetTimer,
81-
int importanceToKeepSessionAlive);
80+
long revokeAfterKilledDelay);
8281

8382
void stopOneTimePermissionSession(String packageName, int userId);
8483

core/java/android/permission/PermissionManager.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,8 +1371,7 @@ public void startOneTimePermissionSession(@NonNull String packageName,
13711371
@ActivityManager.RunningAppProcessInfo.Importance int importanceToKeepSessionAlive) {
13721372
try {
13731373
mPermissionManager.startOneTimePermissionSession(packageName, mContext.getUserId(),
1374-
timeoutMillis, revokeAfterKilledDelayMillis, importanceToResetTimer,
1375-
importanceToKeepSessionAlive);
1374+
timeoutMillis, revokeAfterKilledDelayMillis);
13761375
} catch (RemoteException e) {
13771376
e.rethrowFromSystemServer();
13781377
}

core/java/android/widget/RemoteViews.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,12 @@ public void visitUris(@NonNull Consumer<Uri> visitor) {
726726
mActions.get(i).visitUris(visitor);
727727
}
728728
}
729+
if (mLandscape != null) {
730+
mLandscape.visitUris(visitor);
731+
}
732+
if (mPortrait != null) {
733+
mPortrait.visitUris(visitor);
734+
}
729735
}
730736

731737
private static void visitIconUri(Icon icon, @NonNull Consumer<Uri> visitor) {

core/tests/coretests/src/android/widget/RemoteViewsTest.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
import static org.junit.Assert.assertNull;
2525
import static org.junit.Assert.assertSame;
2626
import static org.junit.Assert.assertTrue;
27+
import static org.mockito.ArgumentMatchers.eq;
28+
import static org.mockito.Mockito.spy;
29+
import static org.mockito.Mockito.times;
30+
import static org.mockito.Mockito.verify;
2731

2832
import android.app.ActivityOptions;
2933
import android.app.PendingIntent;
@@ -33,6 +37,8 @@
3337
import android.graphics.Bitmap;
3438
import android.graphics.drawable.BitmapDrawable;
3539
import android.graphics.drawable.Drawable;
40+
import android.graphics.drawable.Icon;
41+
import android.net.Uri;
3642
import android.os.AsyncTask;
3743
import android.os.Binder;
3844
import android.os.Looper;
@@ -58,6 +64,7 @@
5864
import java.util.Arrays;
5965
import java.util.Map;
6066
import java.util.concurrent.CountDownLatch;
67+
import java.util.function.Consumer;
6168

6269
/**
6370
* Tests for RemoteViews.
@@ -690,4 +697,61 @@ public ActivityOptions createSharedElementActivityOptions(
690697
return null;
691698
}
692699
}
700+
701+
@Test
702+
public void visitUris() {
703+
RemoteViews views = new RemoteViews(mPackage, R.layout.remote_views_test);
704+
705+
final Uri imageUri = Uri.parse("content://media/image");
706+
final Icon icon1 = Icon.createWithContentUri("content://media/icon1");
707+
final Icon icon2 = Icon.createWithContentUri("content://media/icon2");
708+
final Icon icon3 = Icon.createWithContentUri("content://media/icon3");
709+
final Icon icon4 = Icon.createWithContentUri("content://media/icon4");
710+
views.setImageViewUri(R.id.image, imageUri);
711+
views.setTextViewCompoundDrawables(R.id.text, icon1, icon2, icon3, icon4);
712+
713+
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
714+
views.visitUris(visitor);
715+
verify(visitor, times(1)).accept(eq(imageUri));
716+
verify(visitor, times(1)).accept(eq(icon1.getUri()));
717+
verify(visitor, times(1)).accept(eq(icon2.getUri()));
718+
verify(visitor, times(1)).accept(eq(icon3.getUri()));
719+
verify(visitor, times(1)).accept(eq(icon4.getUri()));
720+
}
721+
722+
@Test
723+
public void visitUris_separateOrientation() {
724+
final RemoteViews landscape = new RemoteViews(mPackage, R.layout.remote_views_test);
725+
final Uri imageUriL = Uri.parse("content://landscape/image");
726+
final Icon icon1L = Icon.createWithContentUri("content://landscape/icon1");
727+
final Icon icon2L = Icon.createWithContentUri("content://landscape/icon2");
728+
final Icon icon3L = Icon.createWithContentUri("content://landscape/icon3");
729+
final Icon icon4L = Icon.createWithContentUri("content://landscape/icon4");
730+
landscape.setImageViewUri(R.id.image, imageUriL);
731+
landscape.setTextViewCompoundDrawables(R.id.text, icon1L, icon2L, icon3L, icon4L);
732+
733+
final RemoteViews portrait = new RemoteViews(mPackage, 33);
734+
final Uri imageUriP = Uri.parse("content://portrait/image");
735+
final Icon icon1P = Icon.createWithContentUri("content://portrait/icon1");
736+
final Icon icon2P = Icon.createWithContentUri("content://portrait/icon2");
737+
final Icon icon3P = Icon.createWithContentUri("content://portrait/icon3");
738+
final Icon icon4P = Icon.createWithContentUri("content://portrait/icon4");
739+
portrait.setImageViewUri(R.id.image, imageUriP);
740+
portrait.setTextViewCompoundDrawables(R.id.text, icon1P, icon2P, icon3P, icon4P);
741+
742+
RemoteViews views = new RemoteViews(landscape, portrait);
743+
744+
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
745+
views.visitUris(visitor);
746+
verify(visitor, times(1)).accept(eq(imageUriL));
747+
verify(visitor, times(1)).accept(eq(icon1L.getUri()));
748+
verify(visitor, times(1)).accept(eq(icon2L.getUri()));
749+
verify(visitor, times(1)).accept(eq(icon3L.getUri()));
750+
verify(visitor, times(1)).accept(eq(icon4L.getUri()));
751+
verify(visitor, times(1)).accept(eq(imageUriP));
752+
verify(visitor, times(1)).accept(eq(icon1P.getUri()));
753+
verify(visitor, times(1)).accept(eq(icon2P.getUri()));
754+
verify(visitor, times(1)).accept(eq(icon3P.getUri()));
755+
verify(visitor, times(1)).accept(eq(icon4P.getUri()));
756+
}
693757
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,7 @@ public boolean showNextSecurityScreenOrFinish(boolean authenticated, int targetU
752752
case SimPuk:
753753
// Shortcut for SIM PIN/PUK to go to directly to user's security screen or home
754754
SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId);
755-
if (securityMode == SecurityMode.None && mLockPatternUtils.isLockScreenDisabled(
755+
if (securityMode == SecurityMode.None || mLockPatternUtils.isLockScreenDisabled(
756756
KeyguardUpdateMonitor.getCurrentUser())) {
757757
finish = true;
758758
eventSubtype = BOUNCER_DISMISS_SIM;

services/core/java/com/android/server/pm/InstallPackageHelper.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,9 +2093,25 @@ private void updateSettingsInternalLI(AndroidPackage pkg, ReconciledPackage reco
20932093
// The caller explicitly specified INSTALL_ALL_USERS flag.
20942094
// Thus, updating the settings to install the app for all users.
20952095
for (int currentUserId : allUsers) {
2096-
ps.setInstalled(true, currentUserId);
2097-
ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, userId,
2098-
installerPackageName);
2096+
// If the app is already installed for the currentUser,
2097+
// keep it as installed as we might be updating the app at this place.
2098+
// If not currently installed, check if the currentUser is restricted by
2099+
// DISALLOW_INSTALL_APPS or DISALLOW_DEBUGGING_FEATURES device policy.
2100+
// Install / update the app if the user isn't restricted. Skip otherwise.
2101+
final boolean installedForCurrentUser = ArrayUtils.contains(
2102+
installedForUsers, currentUserId);
2103+
final boolean restrictedByPolicy =
2104+
mPm.isUserRestricted(currentUserId,
2105+
UserManager.DISALLOW_INSTALL_APPS)
2106+
|| mPm.isUserRestricted(currentUserId,
2107+
UserManager.DISALLOW_DEBUGGING_FEATURES);
2108+
if (installedForCurrentUser || !restrictedByPolicy) {
2109+
ps.setInstalled(true, currentUserId);
2110+
ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, currentUserId,
2111+
installerPackageName);
2112+
} else {
2113+
ps.setInstalled(false, currentUserId);
2114+
}
20992115
}
21002116
}
21012117

0 commit comments

Comments
 (0)