ShortcutManager improve app udpate check

am: 64183d5188

Change-Id: I0d5325d861ad52b186f2c7c9c106f485200fb826
This commit is contained in:
Makoto Onuki
2016-08-08 23:20:44 +00:00
committed by android-build-merger
4 changed files with 17 additions and 28 deletions

View File

@@ -667,8 +667,8 @@ class ShortcutPackage extends ShortcutPackageItem {
// - version code hasn't change // - version code hasn't change
// - lastUpdateTime hasn't change // - lastUpdateTime hasn't change
// - all target activities are still enabled. // - all target activities are still enabled.
if ((getPackageInfo().getVersionCode() >= pi.versionCode) if ((getPackageInfo().getVersionCode() == pi.versionCode)
&& (getPackageInfo().getLastUpdateTime() >= pi.lastUpdateTime) && (getPackageInfo().getLastUpdateTime() == pi.lastUpdateTime)
&& areAllActivitiesStillEnabled()) { && areAllActivitiesStillEnabled()) {
return false; return false;
} }

View File

@@ -2626,7 +2626,7 @@ public class ShortcutService extends IShortcutService.Stub {
synchronized (mLock) { synchronized (mLock) {
final ShortcutUser user = getUserShortcutsLocked(userId); final ShortcutUser user = getUserShortcutsLocked(userId);
user.attemptToRestoreIfNeededAndSave(this, packageName, userId); user.attemptToRestoreIfNeededAndSave(this, packageName, userId);
user.rescanPackageIfNeeded(packageName, /* forceRescan=*/ false); user.rescanPackageIfNeeded(packageName, /* forceRescan=*/ true);
} }
verifyStates(); verifyStates();
} }
@@ -2641,7 +2641,7 @@ public class ShortcutService extends IShortcutService.Stub {
user.attemptToRestoreIfNeededAndSave(this, packageName, userId); user.attemptToRestoreIfNeededAndSave(this, packageName, userId);
if (isPackageInstalled(packageName, userId)) { if (isPackageInstalled(packageName, userId)) {
user.rescanPackageIfNeeded(packageName, /* forceRescan=*/ false); user.rescanPackageIfNeeded(packageName, /* forceRescan=*/ true);
} }
} }
verifyStates(); verifyStates();
@@ -2863,7 +2863,10 @@ public class ShortcutService extends IShortcutService.Stub {
for (int i = list.size() - 1; i >= 0; i--) { for (int i = list.size() - 1; i >= 0; i--) {
final PackageInfo pi = list.get(i); final PackageInfo pi = list.get(i);
if (pi.lastUpdateTime >= lastScanTime) { // If the package has been updated since the last scan time, then scan it.
// Also if it's a system app with no update, lastUpdateTime is not reliable, so
// just scan it.
if (pi.lastUpdateTime >= lastScanTime || isPureSystemApp(pi.applicationInfo)) {
if (DEBUG) { if (DEBUG) {
Slog.d(TAG, "Found updated package " + pi.packageName); Slog.d(TAG, "Found updated package " + pi.packageName);
} }
@@ -2872,6 +2875,13 @@ public class ShortcutService extends IShortcutService.Stub {
} }
} }
/**
* @return true if it's a system app with no updates.
*/
private boolean isPureSystemApp(ApplicationInfo ai) {
return ai.isSystemApp() && !ai.isUpdatedSystemApp();
}
private boolean isApplicationFlagSet(@NonNull String packageName, int userId, int flags) { private boolean isApplicationFlagSet(@NonNull String packageName, int userId, int flags) {
final ApplicationInfo ai = injectApplicationInfoWithUninstalled(packageName, userId); final ApplicationInfo ai = injectApplicationInfoWithUninstalled(packageName, userId);
return (ai != null) && ((ai.flags & flags) == flags); return (ai != null) && ((ai.flags & flags) == flags);

View File

@@ -16,7 +16,7 @@
<user locales="en-US" last-app-scan-time="3113976673"> <user locales="en-US" last-app-scan-time="3113976673">
<package name="com.android.test.1" call-count="0" last-reset="1468976368772"> <package name="com.android.test.1" call-count="0" last-reset="1468976368772">
<package-info version="25" last_udpate_time="1230796800000" /> <package-info version="25" last_udpate_time="1230796800000" />
<shortcut id="manifest-shortcut-storage" activity="com.android.test.1/com.android.test.1.Settings" title="Storage" titleid="2131625197" titlename="storage_settings" textid="0" dmessageid="0" intent="#Intent;action=android.settings.INTERNAL_STORAGE_SETTINGS;end" timestamp="1469050672334" rank="4" flags="420" icon-res="2130837747" icon-resname="drawable/ic_shortcut_storage" > <shortcut id="manifest-shortcut-storage" activity="com.android.test.1/com.android.test.1.Settings" title="Storage" intent="#Intent;action=android.settings.INTERNAL_STORAGE_SETTINGS;end" timestamp="1469050672334" flags="1" >
<intent-extras> <intent-extras>
<int name="key" value="12345" /> <int name="key" value="12345" />
</intent-extras> </intent-extras>

View File

@@ -4149,28 +4149,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
ArgumentCaptor<List> shortcuts; ArgumentCaptor<List> shortcuts;
// First, call the event without updating the versions. // Update the version info for package 1.
reset(c0);
reset(c10);
mService.mPackageMonitor.onReceive(getTestContext(),
genPackageUpdateIntent(CALLING_PACKAGE_1, USER_0));
mService.mPackageMonitor.onReceive(getTestContext(),
genPackageUpdateIntent(CALLING_PACKAGE_1, USER_10));
waitOnMainThread();
// Version not changed, so no callback.
verify(c0, times(0)).onShortcutsChanged(
eq(CALLING_PACKAGE_1),
any(List.class),
any(UserHandle.class));
verify(c10, times(0)).onShortcutsChanged(
eq(CALLING_PACKAGE_1),
any(List.class),
any(UserHandle.class));
// Next, update the version info for package 1.
reset(c0); reset(c0);
reset(c10); reset(c10);
updatePackageVersion(CALLING_PACKAGE_1, 1); updatePackageVersion(CALLING_PACKAGE_1, 1);