From 0cece3898b0f26b0fb026415d4c8f928d16296a3 Mon Sep 17 00:00:00 2001 From: Lee Shombert Date: Tue, 4 Jan 2022 08:10:15 -0800 Subject: Prepare PropertyInvalidatedCache for SystemApi Bug: 152453213 Tag: #refactor This commit prepares PropertyInvalidatedCache to function as a system api. Specifically, the methods recompute() and bypass() which may be overridden by clients are now public (instead of protected). This forces an update to all existing clients, to accommodate the change in method visibility. Two small changes have been made as cleanup: 1. The awkwardly named debugCompareQueryResults() is now resultEquals(), which is more or less consistent with how other equality tests are named in Android. This name change affects two clients. 2. PackageManager has changed to use resultEquals() instead of maybeCheckConsistency(). This provides a simpler and more consistent use of the APIs. maybeCheckConsistency() has been made private. Test: atest PropertyInvalidatedCacheTests Change-Id: I4110f8e887a4fd8c784141e8892557a9d1b80a94 --- core/java/android/accounts/AccountManager.java | 8 ++++---- core/java/android/app/ApplicationPackageManager.java | 4 ++-- core/java/android/app/PropertyInvalidatedCache.java | 10 +++++----- core/java/android/app/compat/ChangeIdStateCache.java | 2 +- core/java/android/bluetooth/BluetoothAdapter.java | 8 ++++---- core/java/android/bluetooth/BluetoothDevice.java | 2 +- core/java/android/content/pm/PackageManager.java | 14 ++++++-------- .../android/hardware/display/DisplayManagerGlobal.java | 2 +- core/java/android/os/PowerManager.java | 4 ++-- core/java/android/os/UserManager.java | 8 ++++---- core/java/android/permission/PermissionManager.java | 6 +++--- 11 files changed, 33 insertions(+), 35 deletions(-) (limited to 'core/java/android') diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 2bbf280277ff..fa9de6e27282 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -384,7 +384,7 @@ public class AccountManager { new PropertyInvalidatedCache( CACHE_ACCOUNTS_DATA_SIZE, CACHE_KEY_ACCOUNTS_DATA_PROPERTY) { @Override - protected Account[] recompute(UserIdPackage userAndPackage) { + public Account[] recompute(UserIdPackage userAndPackage) { try { return mService.getAccountsAsUser(null, userAndPackage.userId, userAndPackage.packageName); } catch (RemoteException e) { @@ -392,11 +392,11 @@ public class AccountManager { } } @Override - protected boolean bypass(UserIdPackage query) { + public boolean bypass(UserIdPackage query) { return query.userId < 0; } @Override - protected boolean debugCompareQueryResults(Account[] l, Account[] r) { + public boolean resultEquals(Account[] l, Account[] r) { if (l == r) { return true; } else if (l == null || r == null) { @@ -455,7 +455,7 @@ public class AccountManager { new PropertyInvalidatedCache(CACHE_USER_DATA_SIZE, CACHE_KEY_USER_DATA_PROPERTY) { @Override - protected String recompute(AccountKeyData accountKeyData) { + public String recompute(AccountKeyData accountKeyData) { Account account = accountKeyData.account; String key = accountKeyData.key; diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 44fb5db02f5d..49c75c49b2d7 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -802,7 +802,7 @@ public class ApplicationPackageManager extends PackageManager { new PropertyInvalidatedCache( 256, "cache_key.has_system_feature") { @Override - protected Boolean recompute(HasSystemFeatureQuery query) { + public Boolean recompute(HasSystemFeatureQuery query) { try { return ActivityThread.currentActivityThread().getPackageManager(). hasSystemFeature(query.name, query.version); @@ -1098,7 +1098,7 @@ public class ApplicationPackageManager extends PackageManager { new PropertyInvalidatedCache( 32, CACHE_KEY_PACKAGES_FOR_UID_PROPERTY) { @Override - protected GetPackagesForUidResult recompute(Integer uid) { + public GetPackagesForUidResult recompute(Integer uid) { try { return new GetPackagesForUidResult( ActivityThread.currentActivityThread(). diff --git a/core/java/android/app/PropertyInvalidatedCache.java b/core/java/android/app/PropertyInvalidatedCache.java index ef4d7b1f42e2..978160c1c243 100644 --- a/core/java/android/app/PropertyInvalidatedCache.java +++ b/core/java/android/app/PropertyInvalidatedCache.java @@ -505,13 +505,13 @@ public abstract class PropertyInvalidatedCache { * block. If this function returns null, the result of the cache query is null. There is no * "negative cache" in the query: we don't cache null results at all. */ - protected abstract Result recompute(Query query); + public abstract Result recompute(Query query); /** * Return true if the query should bypass the cache. The default behavior is to * always use the cache but the method can be overridden for a specific class. */ - protected boolean bypass(Query query) { + public boolean bypass(Query query) { return false; } @@ -519,7 +519,7 @@ public abstract class PropertyInvalidatedCache { * Determines if a pair of responses are considered equal. Used to determine whether * a cache is inadvertently returning stale results when VERIFY is set to true. */ - protected boolean debugCompareQueryResults(Result cachedResult, Result fetchedResult) { + protected boolean resultEquals(Result cachedResult, Result fetchedResult) { // If a service crashes and returns a null result, the cached value remains valid. if (fetchedResult != null) { return Objects.equals(cachedResult, fetchedResult); @@ -990,11 +990,11 @@ public abstract class PropertyInvalidatedCache { } } - protected Result maybeCheckConsistency(Query query, Result proposedResult) { + private Result maybeCheckConsistency(Query query, Result proposedResult) { if (VERIFY) { Result resultToCompare = recompute(query); boolean nonceChanged = (getCurrentNonce() != mLastSeenNonce); - if (!nonceChanged && !debugCompareQueryResults(proposedResult, resultToCompare)) { + if (!nonceChanged && !resultEquals(proposedResult, resultToCompare)) { Log.e(TAG, TextUtils.formatSimple( "cache %s inconsistent for %s is %s should be %s", cacheName(), queryToString(query), diff --git a/core/java/android/app/compat/ChangeIdStateCache.java b/core/java/android/app/compat/ChangeIdStateCache.java index 3d0bf91bf8d7..acd404b7d475 100644 --- a/core/java/android/app/compat/ChangeIdStateCache.java +++ b/core/java/android/app/compat/ChangeIdStateCache.java @@ -84,7 +84,7 @@ public final class ChangeIdStateCache } @Override - protected Boolean recompute(ChangeIdStateQuery query) { + public Boolean recompute(ChangeIdStateQuery query) { final long token = Binder.clearCallingIdentity(); try { if (query.type == ChangeIdStateQuery.QUERY_BY_PACKAGE_NAME) { diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 2d1ecfb5e052..856a8e1f8199 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -1062,7 +1062,7 @@ public final class BluetoothAdapter { 8, BLUETOOTH_GET_STATE_CACHE_PROPERTY) { @Override @SuppressLint("AndroidFrameworkRequiresPermission") - protected Integer recompute(Void query) { + public Integer recompute(Void query) { try { return mService.getState(); } catch (RemoteException e) { @@ -2085,7 +2085,7 @@ public final class BluetoothAdapter { 8, BLUETOOTH_FILTERING_CACHE_PROPERTY) { @Override @SuppressLint("AndroidFrameworkRequiresPermission") - protected Boolean recompute(Void query) { + public Boolean recompute(Void query) { try { mServiceLock.readLock().lock(); if (mService != null) { @@ -2540,7 +2540,7 @@ public final class BluetoothAdapter { */ @Override @SuppressLint("AndroidFrameworkRequiresPermission") - protected Integer recompute(Void query) { + public Integer recompute(Void query) { try { return mService.getAdapterConnectionState(); } catch (RemoteException e) { @@ -2605,7 +2605,7 @@ public final class BluetoothAdapter { 8, BLUETOOTH_PROFILE_CACHE_PROPERTY) { @Override @SuppressLint("AndroidFrameworkRequiresPermission") - protected Integer recompute(Integer query) { + public Integer recompute(Integer query) { try { mServiceLock.readLock().lock(); if (mService != null) { diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 93f026860856..fc99942cb784 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -1604,7 +1604,7 @@ public final class BluetoothDevice implements Parcelable, Attributable { 8, BLUETOOTH_BONDING_CACHE_PROPERTY) { @Override @SuppressLint("AndroidFrameworkRequiresPermission") - protected Integer recompute(BluetoothDevice query) { + public Integer recompute(BluetoothDevice query) { try { return sService.getBondState(query, mAttributionSource); } catch (RemoteException e) { diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 9a7aeef69ed3..c8f65948e063 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -10173,16 +10173,15 @@ public abstract class PackageManager { 16, PermissionManager.CACHE_KEY_PACKAGE_INFO, "getApplicationInfo") { @Override - protected ApplicationInfo recompute(ApplicationInfoQuery query) { + public ApplicationInfo recompute(ApplicationInfoQuery query) { return getApplicationInfoAsUserUncached( query.packageName, query.flags, query.userId); } @Override - protected ApplicationInfo maybeCheckConsistency( - ApplicationInfoQuery query, ApplicationInfo proposedResult) { + public boolean resultEquals(ApplicationInfo cached, ApplicationInfo fetched) { // Implementing this debug check for ApplicationInfo would require a // complicated deep comparison, so just bypass it for now. - return proposedResult; + return true; } }; @@ -10275,16 +10274,15 @@ public abstract class PackageManager { 32, PermissionManager.CACHE_KEY_PACKAGE_INFO, "getPackageInfo") { @Override - protected PackageInfo recompute(PackageInfoQuery query) { + public PackageInfo recompute(PackageInfoQuery query) { return getPackageInfoAsUserUncached( query.packageName, query.flags, query.userId); } @Override - protected PackageInfo maybeCheckConsistency( - PackageInfoQuery query, PackageInfo proposedResult) { + public boolean resultEquals(PackageInfo cached, PackageInfo fetched) { // Implementing this debug check for PackageInfo would require a // complicated deep comparison, so just bypass it for now. - return proposedResult; + return true; } }; diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index 01833fda5b95..7fe200034ddc 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -128,7 +128,7 @@ public final class DisplayManagerGlobal { 8, // size of display cache CACHE_KEY_DISPLAY_INFO_PROPERTY) { @Override - protected DisplayInfo recompute(Integer id) { + public DisplayInfo recompute(Integer id) { try { return mDm.getDisplayInfo(id); } catch (RemoteException ex) { diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 74fffd0ae10d..92d652df35d9 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -1011,7 +1011,7 @@ public final class PowerManager { new PropertyInvalidatedCache(MAX_CACHE_ENTRIES, CACHE_KEY_IS_POWER_SAVE_MODE_PROPERTY) { @Override - protected Boolean recompute(Void query) { + public Boolean recompute(Void query) { try { return mService.isPowerSaveMode(); } catch (RemoteException e) { @@ -1024,7 +1024,7 @@ public final class PowerManager { new PropertyInvalidatedCache(MAX_CACHE_ENTRIES, CACHE_KEY_IS_INTERACTIVE_PROPERTY) { @Override - protected Boolean recompute(Void query) { + public Boolean recompute(Void query) { try { return mService.isInteractive(); } catch (RemoteException e) { diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index b3639e419a56..b4f3fa0ae80c 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -2754,7 +2754,7 @@ public class UserManager { new PropertyInvalidatedCache( 32, CACHE_KEY_IS_USER_UNLOCKED_PROPERTY) { @Override - protected Boolean recompute(Integer query) { + public Boolean recompute(Integer query) { try { return mService.isUserUnlocked(query); } catch (RemoteException re) { @@ -2762,7 +2762,7 @@ public class UserManager { } } @Override - protected boolean bypass(Integer query) { + public boolean bypass(Integer query) { return query < 0; } }; @@ -2772,7 +2772,7 @@ public class UserManager { new PropertyInvalidatedCache( 32, CACHE_KEY_IS_USER_UNLOCKED_PROPERTY) { @Override - protected Boolean recompute(Integer query) { + public Boolean recompute(Integer query) { try { return mService.isUserUnlockingOrUnlocked(query); } catch (RemoteException re) { @@ -2780,7 +2780,7 @@ public class UserManager { } } @Override - protected boolean bypass(Integer query) { + public boolean bypass(Integer query) { return query < 0; } }; diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java index e2f59082c1f7..030ad54e945f 100644 --- a/core/java/android/permission/PermissionManager.java +++ b/core/java/android/permission/PermissionManager.java @@ -1424,7 +1424,7 @@ public final class PermissionManager { new PropertyInvalidatedCache( 2048, CACHE_KEY_PACKAGE_INFO, "checkPermission") { @Override - protected Integer recompute(PermissionQuery query) { + public Integer recompute(PermissionQuery query) { return checkPermissionUncached(query.permission, query.pid, query.uid); } }; @@ -1507,12 +1507,12 @@ public final class PermissionManager { new PropertyInvalidatedCache( 16, CACHE_KEY_PACKAGE_INFO, "checkPackageNamePermission") { @Override - protected Integer recompute(PackageNamePermissionQuery query) { + public Integer recompute(PackageNamePermissionQuery query) { return checkPackageNamePermissionUncached( query.permName, query.pkgName, query.userId); } @Override - protected boolean bypass(PackageNamePermissionQuery query) { + public boolean bypass(PackageNamePermissionQuery query) { return query.userId < 0; } }; -- cgit v1.2.3