From 8c7a325225054c22bc687a9b7662513796ec0402 Mon Sep 17 00:00:00 2001 From: Patrick Baumann Date: Wed, 30 Sep 2020 16:59:54 +0000 Subject: Revert "Handling removing tag" This reverts commit 27c28b94283b491c58d5981fc580cd89e5c251c5. Reason for revert: Adding verification method. Bug: 169414761 Change-Id: I7b9d3c786d653a9b00a553e89d7390bcef45c0f2 --- services/core/java/com/android/server/pm/PackageManagerService.java | 2 -- services/core/java/com/android/server/pm/Settings.java | 4 ---- 2 files changed, 6 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index dd7ef5b02877..6246b28a3dd6 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -11115,8 +11115,6 @@ public class PackageManagerService extends IPackageManager.Stub mSettings.addRenamedPackageLPw(parsedPackage.getRealPackage(), originalPkgSetting.name); mTransferredPackages.add(originalPkgSetting.name); - } else { - mSettings.removeRenamedPackageLPw(parsedPackage.getPackageName()); } } if (pkgSetting.sharedUser != null) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index a7164f94f66b..aeea2514d0a4 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -476,10 +476,6 @@ public final class Settings { return mRenamedPackages.put(pkgName, origPkgName); } - void removeRenamedPackageLPw(String pkgName) { - mRenamedPackages.remove(pkgName); - } - public boolean canPropagatePermissionToInstantApp(String permName) { return mPermissions.canPropagatePermissionToInstantApp(permName); } -- cgit v1.2.3-59-g8ed1b From 50ee8017ea54bc7c2b977e12147727057274f5d9 Mon Sep 17 00:00:00 2001 From: Patrick Baumann Date: Wed, 30 Sep 2020 17:00:13 +0000 Subject: Handling removing tag This reverts commit I7b9d3c786d653a9b00a553e89d7390bcef45c0f2. Fixes: 169414761 Test: Manual Test: Add package A Test: Verify package A exists Test: Remove A, add package B w/ original-package A Test: Verify package A exists, but codepath is to package B Test: Replace package B w/o original-package A Test: Verify package A removed and package B added Change-Id: I198ca545f4fea3ae9d2328a845cbd9167eedf8da --- services/core/java/com/android/server/pm/PackageManagerService.java | 4 ++++ services/core/java/com/android/server/pm/Settings.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6246b28a3dd6..f191ef4f82cc 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3655,6 +3655,8 @@ public class PackageManagerService extends IPackageManager.Stub PackageParser.readConfigUseRoundIcon(mContext.getResources()); mServiceStartWithDelay = SystemClock.uptimeMillis() + (60 * 1000L); + + Slog.i(TAG, "Fix for b/169414761 is applied"); } /** @@ -11115,6 +11117,8 @@ public class PackageManagerService extends IPackageManager.Stub mSettings.addRenamedPackageLPw(parsedPackage.getRealPackage(), originalPkgSetting.name); mTransferredPackages.add(originalPkgSetting.name); + } else { + mSettings.removeRenamedPackageLPw(parsedPackage.getPackageName()); } } if (pkgSetting.sharedUser != null) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index aeea2514d0a4..a7164f94f66b 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -476,6 +476,10 @@ public final class Settings { return mRenamedPackages.put(pkgName, origPkgName); } + void removeRenamedPackageLPw(String pkgName) { + mRenamedPackages.remove(pkgName); + } + public boolean canPropagatePermissionToInstantApp(String permName) { return mPermissions.canPropagatePermissionToInstantApp(permName); } -- cgit v1.2.3-59-g8ed1b From 407392046c18fab3e94f887f171bf1f28379dac7 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Thu, 1 Oct 2020 10:43:05 -0700 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I96c71a04961157d579c0c0b19bc6436b168ea8de --- packages/SystemUI/res/values-ar/strings.xml | 2 +- packages/SystemUI/res/values-fa/strings.xml | 2 +- packages/SystemUI/res/values-gl/strings.xml | 2 +- packages/SystemUI/res/values-hy/strings.xml | 2 +- packages/SystemUI/res/values-in/strings.xml | 2 +- packages/SystemUI/res/values-sq/strings.xml | 2 +- packages/SystemUI/res/values-ta/strings.xml | 12 ++++++------ 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index c5d52eea74f5..05f796a4702f 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -1070,7 +1070,7 @@ "تمت الإضافة إلى المفضّلة" "تمت الإضافة إلى المفضّلة، الموضع %d" "تمت الإزالة من المفضّلة" - "إضافة إلى المُفضلة" + "إضافة إلى المحتوى المفضّل" "إزالة من المفضّلة" "نقل إلى الموضع %d" "عناصر التحكّم" diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 4827ace9503f..0e7345d0db34 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -246,7 +246,7 @@ "پاک کردن اعلان" "‏GPS فعال شد." "‏دستیابی به GPS." - "‏TeleTypewriter فعال شد." + "تله‌تایپ فعال شد." "زنگ لرزشی." "زنگ بی‌صدا." diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 42831c3a5aee..480da3051639 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -246,7 +246,7 @@ "Eliminar notificación." "GPS activado" "Obtendo GPS." - "TeleTypewriter activado" + "Teletipo activado" "Timbre en vibración" "Timbre silenciado" diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 214a6d710bbc..77c5141b8167 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -246,7 +246,7 @@ "Մաքրել ծանուցումը:" "GPS-ը միացված է:" "GPS-ի ստացում:" - "Հեռամուտքագրիչը միացված է:" + "Հեռատիպը միացված է:" "Թրթռազանգ:" "Զանգակը լռեցված է:" diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 97652f0c6ae6..62167361363b 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -597,7 +597,7 @@ "Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh lama tombol Ringkasan untuk melepas pin." "Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh lama tombol Beranda untuk melepas pin." "Data pribadi dapat diakses (seperti kontak dan konten email)." - "Aplikasi yang dipasangi pin dapat membuka aplikasi lain." + "Aplikasi yang disematkan dapat membuka aplikasi lain." "Untuk melepas pin aplikasi ini, sentuh & lama tombol Kembali dan Ringkasan" "Untuk melepas pin aplikasi ini, sentuh & lama tombol Kembali dan Layar utama" "Untuk melepas pin aplikasi ini, geser ke atas & tahan" diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index a67130bb7d3a..912b25ef4337 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -246,7 +246,7 @@ "Pastro njoftimin." "GPS-ja është e aktivizuar." "Po siguron GPS-në." - "Teleprinteri është i aktivizuar." + "Teletajpi është i aktivizuar." "Zile me dridhje." "Zilja është heshtur." diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 3d77bd7ae01c..99219d1c1b44 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -882,12 +882,12 @@ "மேலே 50%" "மேலே 30%" "கீழ்ப்புறம் முழுத் திரை" - "டைலை அகற்றும்" - "கடைசியில் டைலைச் சேர்க்கும்" - "டைலை நகர்த்து" - "டைலைச் சேர்" - "%1$d இடத்திற்கு நகர்த்தும்" - "%1$d என்ற இடத்தில் சேர்க்கும்" + "கட்டத்தை அகற்றும்" + "கடைசியில் கட்டத்தைச் சேர்க்கும்" + "கட்டத்தை நகர்த்து" + "கட்டத்தைச் சேர்" + "%1$dக்கு நகர்த்தும்" + "%1$dல் சேர்க்கும்" "இடம்: %1$d" "விரைவு அமைப்புகள் திருத்தி." "%1$s அறிவிப்பு: %2$s" -- cgit v1.2.3-59-g8ed1b From 97c29c74766cd6bee5d36792e52ba769b77b1406 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Thu, 1 Oct 2020 03:19:00 -0700 Subject: Update INTERNET perm state cache to use uids instead of appIds. It really shouldn't have mattered whether we use uids or appIds for this cache but given the way NetworkPolicy iterates over all apps on the device (all_apps * all_users), it is possible that we end up checking the permission state of apps which are not installed on a user which will always be DENIED and we end up caching this. So, we could end up treating an app as not having INTERNET permission on a user even though it has. Also, update the cache stragety to always check with PackageManager when the permission state is denied in the cache just to be safe, until NetworkPolicy iteration of apps is fixed. Bug: 168299219 Test: atest cts/hostsidetests/net/src/com/android/cts/net/HostsideRestrictBackgroundNetworkTests.java Test: manual Change-Id: I6f2a60695a519a972c96ec8e053d3be5dc732461 Merged-In: I6f2a60695a519a972c96ec8e053d3be5dc732461 --- .../server/net/NetworkPolicyManagerService.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index b3eb53116d49..ffa518e266d9 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -586,7 +586,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private final NetworkPolicyLogger mLogger = new NetworkPolicyLogger(); - /** List of apps indexed by appId and whether they have the internet permission */ + /** List of apps indexed by uid and whether they have the internet permission */ @GuardedBy("mUidRulesFirstLock") private final SparseBooleanArray mInternetPermissionMap = new SparseBooleanArray(); @@ -972,7 +972,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { if (LOGV) Slog.v(TAG, "ACTION_PACKAGE_ADDED for uid=" + uid); // Clear the cache for the app synchronized (mUidRulesFirstLock) { - mInternetPermissionMap.delete(UserHandle.getAppId(uid)); + mInternetPermissionMap.delete(uid); updateRestrictionRulesForUidUL(uid); } } @@ -4194,16 +4194,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { @GuardedBy("mUidRulesFirstLock") private boolean hasInternetPermissionUL(int uid) { try { - final int appId = UserHandle.getAppId(uid); - final boolean hasPermission; - if (mInternetPermissionMap.indexOfKey(appId) < 0) { - hasPermission = - mIPm.checkUidPermission(Manifest.permission.INTERNET, uid) - == PackageManager.PERMISSION_GRANTED; - mInternetPermissionMap.put(appId, hasPermission); - } else { - hasPermission = mInternetPermissionMap.get(appId); + if (mInternetPermissionMap.get(uid)) { + return true; } + // If the cache shows that uid doesn't have internet permission, + // then always re-check with PackageManager just to be safe. + final boolean hasPermission = mIPm.checkUidPermission(Manifest.permission.INTERNET, + uid) == PackageManager.PERMISSION_GRANTED; + mInternetPermissionMap.put(uid, hasPermission); return hasPermission; } catch (RemoteException e) { } -- cgit v1.2.3-59-g8ed1b From 780e5452cd727860290d37cb6922e188713f6489 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Tue, 22 Sep 2020 18:05:25 +0800 Subject: Use normal rotation if orientation is changed by resume-scheduled app With traditional normal rotation, if an app calls Activity#setRequestedOrientation to change orientation in its onCreate or onResume, the system display info will be updated immediately. So if the app gets display rotation right after the orientation request, it can get the rotated result. While if fixed rotation transform takes effect for the case, though the rotated display adjustments will be sent to the app, it is too late that the app may have accessed the global display info which is not rotated, that may cause inconsistent UI layout if the app depends on the rotation info. Bug: 167564038 Test: DisplayContentTests#testNoFixedRotationOnResumedScheduledApp Change-Id: I3253264cb1bb8886074e88012582daa3589a1896 Merged-In: I3253264cb1bb8886074e88012582daa3589a1896 (cherry picked from commit 4d576bfa25b764b3d2dd44761f632e7962443b02) --- .../java/com/android/server/wm/DisplayContent.java | 9 +++++++++ .../com/android/server/wm/DisplayContentTests.java | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index abfb9c99de6b..8b645453258b 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1496,6 +1496,15 @@ class DisplayContent extends WindowContainer Date: Tue, 29 Sep 2020 13:30:15 -0700 Subject: DO NOT MERGE Update the stable display frame for flexible insets When using layoutStatusBar or layoutNavigationBar, the stable display frame is modified to take the system bars into account. However when we use flexible inset mapping, the stable display frame is not modified and causes issues in getLayoutHint() and potentially affects how dialogs are laid out. This change ensures that even system bars that use flexible inset mapping modifies the stable display frame as well. Bug: 168846852 Test: manual, atest DialogFrameTests WindowInsetsControllerTests InsetsStateTest InsetsStateControllerTest Change-Id: Ie89298eb98cf8c6bc9ada5494c544a3150b3b2de --- .../java/com/android/server/wm/DisplayPolicy.java | 42 ++++++++++++++++++++ .../server/wm/DisplayPolicyLayoutTests.java | 46 ++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index c691a0e220ed..515d1f58d3ef 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -2659,6 +2659,14 @@ public class DisplayPolicy { } win.computeFrame(displayFrames); + + // When system bars are added to the Android device through {@link #layoutStatusBar} and + // {@link #layoutNavigationBar}, the displayFrames are adjusted to take the system bars into + // account. The call below adjusts the display frames for system bars which use flexible + // insets mapping instead of {@link #layoutStatusbar} and {@link #layoutNavigationBar}. Note + // that this call is a no-op if not using flexible insets mapping. + adjustDisplayFramesForFlexibleInsets(win, displayFrames); + // Dock windows carve out the bottom of the screen, so normal windows // can't appear underneath them. if (type == TYPE_INPUT_METHOD && win.isVisibleLw() @@ -2671,6 +2679,40 @@ public class DisplayPolicy { } } + private void adjustDisplayFramesForFlexibleInsets(WindowState win, + DisplayFrames displayFrames) { + if (win == mStatusBarAlt) { + adjustDisplayFramesForWindow(win, mStatusBarAltPosition, displayFrames); + } else if (win == mNavigationBarAlt) { + adjustDisplayFramesForWindow(win, mNavigationBarAltPosition, displayFrames); + } else if (win == mClimateBarAlt) { + adjustDisplayFramesForWindow(win, mClimateBarAltPosition, displayFrames); + } else if (win == mExtraNavBarAlt) { + adjustDisplayFramesForWindow(win, mExtraNavBarAltPosition, displayFrames); + } + } + + private static void adjustDisplayFramesForWindow(WindowState win, + @WindowManagerPolicy.AltBarPosition int position, DisplayFrames displayFrames) { + final Rect frame = win.getFrameLw(); + + // Note: This doesn't take into account display cutouts. + switch (position) { + case ALT_BAR_TOP: + displayFrames.mStable.top = frame.bottom; + break; + case ALT_BAR_BOTTOM: + displayFrames.mStable.bottom = displayFrames.mStableFullscreen.bottom = frame.top; + break; + case ALT_BAR_LEFT: + displayFrames.mStable.left = displayFrames.mStableFullscreen.left = frame.right; + break; + case ALT_BAR_RIGHT: + displayFrames.mStable.right = displayFrames.mStableFullscreen.right = frame.left; + break; + } + } + private void layoutWallpaper(DisplayFrames displayFrames, Rect pf, Rect df, Rect cf) { // The wallpaper has Real Ultimate Power df.set(displayFrames.mUnrestricted); diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java index cb9b49abfe2b..58d4104bf2b0 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java @@ -45,6 +45,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; +import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; import static android.view.WindowManagerPolicyConstants.ALT_BAR_BOTTOM; import static android.view.WindowManagerPolicyConstants.ALT_BAR_LEFT; @@ -752,6 +753,51 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase { assertInsetBy(mWindow.getDisplayFrameLw(), 0, 0, 0, 0); } + @Test + public void layoutWindowLw_withFlexibleSystemBars_adjustStableFrame() { + mDisplayPolicy.removeWindowLw(mStatusBarWindow); + mDisplayPolicy.removeWindowLw(mNavBarWindow); + + WindowState statusWin = spy(createWindow(null, TYPE_STATUS_BAR_ADDITIONAL, + "StatusBarAdditional")); + doNothing().when(statusWin).computeFrameLw(); + statusWin.mAttrs.providesInsetsTypes = new int[]{ITYPE_STATUS_BAR}; + statusWin.mAttrs.gravity = Gravity.TOP; + statusWin.mAttrs.height = STATUS_BAR_HEIGHT; + statusWin.mAttrs.width = MATCH_PARENT; + statusWin.getFrameLw().set(0, 0, DISPLAY_WIDTH, STATUS_BAR_HEIGHT); + addWindow(statusWin); + + WindowState navWin = spy(createWindow(null, TYPE_NAVIGATION_BAR_PANEL, + "NavigationBarPanel")); + doNothing().when(navWin).computeFrameLw(); + navWin.mAttrs.providesInsetsTypes = new int[]{ITYPE_NAVIGATION_BAR}; + navWin.mAttrs.gravity = Gravity.BOTTOM; + navWin.mAttrs.height = NAV_BAR_HEIGHT; + navWin.mAttrs.width = MATCH_PARENT; + navWin.getFrameLw().set(0, DISPLAY_HEIGHT - NAV_BAR_HEIGHT, DISPLAY_WIDTH, DISPLAY_HEIGHT); + addWindow(navWin); + + WindowState climateWin = spy(createWindow(null, TYPE_NAVIGATION_BAR_PANEL, + "ClimatePanel")); + doNothing().when(climateWin).computeFrameLw(); + climateWin.mAttrs.providesInsetsTypes = new int[]{ITYPE_CLIMATE_BAR}; + climateWin.mAttrs.gravity = Gravity.LEFT; + climateWin.mAttrs.height = MATCH_PARENT; + climateWin.mAttrs.width = 20; + climateWin.getFrameLw().set(0, 0, 20, DISPLAY_HEIGHT); + addWindow(climateWin); + + mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */); + mDisplayPolicy.layoutWindowLw(statusWin, null, mFrames); + mDisplayPolicy.layoutWindowLw(navWin, null, mFrames); + mDisplayPolicy.layoutWindowLw(climateWin, null, mFrames); + + assertThat(mFrames.mStable, + is(new Rect(20, STATUS_BAR_HEIGHT, DISPLAY_WIDTH, + DISPLAY_HEIGHT - NAV_BAR_HEIGHT))); + } + @Test public void layoutHint_appWindow() { mWindow.mAttrs.flags = -- cgit v1.2.3-59-g8ed1b