Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efeff3ba authored by Jeff Sharkey's avatar Jeff Sharkey Committed by android-build-merger
Browse files

Merge "Remove temporary upgrade logic." into qt-dev

am: 12efd339

Change-Id: I95052b1929c4760b371aa8a58157cca8823166d1
parents d4a83bf3 12efd339
Loading
Loading
Loading
Loading
+0 −66
Original line number Original line Diff line number Diff line
@@ -1693,9 +1693,6 @@ class StorageManagerService extends IStorageManager.Stub
                // Always remember the new state we just booted with
                // Always remember the new state we just booted with
                writeSettingsLocked();
                writeSettingsLocked();
            }
            }

            // Execute special logic to recover certain devices
            recoverFrom128872367();
        }
        }
    }
    }


@@ -1756,69 +1753,6 @@ class StorageManagerService extends IStorageManager.Stub
        return maxTime;
        return maxTime;
    }
    }


    /**
     * In b/128872367 we lost all app-ops on devices in the wild. This logic
     * attempts to detect and recover from this by granting
     * {@link AppOpsManager#OP_LEGACY_STORAGE} to any apps installed before
     * isolated storage was enabled.
     */
    private void recoverFrom128872367() {
        // We're interested in packages that were installed or updated between
        // 1/1/2014 and 12/17/2018
        final long START_TIMESTAMP = 1388534400000L;
        final long END_TIMESTAMP = 1545004800000L;

        final PackageManager pm = mContext.getPackageManager();
        final AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
        final UserManagerInternal um = LocalServices.getService(UserManagerInternal.class);

        boolean activeDuringWindow = false;
        List<PackageInfo> pendingHolders = new ArrayList<>();

        for (int userId : um.getUserIds()) {
            final List<PackageInfo> pkgs = pm.getInstalledPackagesAsUser(MATCH_UNINSTALLED_PACKAGES
                    | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, userId);
            for (PackageInfo pkg : pkgs) {
                // Determine if any apps on this device had been installed or
                // updated during the period where the feature was disabled
                activeDuringWindow |= (pkg.firstInstallTime > START_TIMESTAMP
                        && pkg.firstInstallTime < END_TIMESTAMP);
                activeDuringWindow |= (pkg.lastUpdateTime > START_TIMESTAMP
                        && pkg.lastUpdateTime < END_TIMESTAMP);

                // This app should hold legacy op if they were installed before
                // the cutoff; we only check the end boundary here so that
                // include system apps, which are always installed on 1/1/2009.
                final boolean shouldHold = (pkg.firstInstallTime < END_TIMESTAMP);
                final boolean doesHold = (appOps.checkOpNoThrow(OP_LEGACY_STORAGE,
                        pkg.applicationInfo.uid,
                        pkg.applicationInfo.packageName) == MODE_ALLOWED);

                if (doesHold) {
                    Slog.d(TAG, "Found " + pkg + " holding legacy op; skipping recovery");
                    return;
                } else if (shouldHold) {
                    Slog.d(TAG, "Found " + pkg + " that should hold legacy op");
                    pendingHolders.add(pkg);
                }
            }
        }

        if (!activeDuringWindow) {
            Slog.d(TAG, "No packages were active during the time window; skipping grants");
            return;
        }

        // If we made it this far, nobody actually holds the legacy op, which
        // means we probably lost the database, and we should grant the op to
        // all the apps we identified.
        for (PackageInfo pkg : pendingHolders) {
            appOps.setMode(AppOpsManager.OP_LEGACY_STORAGE,
                    pkg.applicationInfo.uid,
                    pkg.applicationInfo.packageName, AppOpsManager.MODE_ALLOWED);
        }
    }

    private void systemReady() {
    private void systemReady() {
        LocalServices.getService(ActivityTaskManagerInternal.class)
        LocalServices.getService(ActivityTaskManagerInternal.class)
                .registerScreenObserver(this);
                .registerScreenObserver(this);