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

Commit c942339c authored by Kweku Adams's avatar Kweku Adams
Browse files

Handle out-of-ej-quota case.

Downgrade a requested EJ-sync to a regular job if JobScheduler returns
FAILURE.

Bug: 178852366
Test: atest ContentResolverTest (all)
Test: atest CtsSyncManagerTest
Test: atest SyncOperationTest
Test: atest SyncManagerTest
Test: atest SyncRequestTest
Change-Id: Ia10953e3ae56dab8c4ca120fd9f07ee1c45d6306
parent 0214d012
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -1659,13 +1659,31 @@ public class SyncManager {
        final UsageStatsManagerInternal usmi =
                LocalServices.getService(UsageStatsManagerInternal.class);
        if (usmi != null) {
            // This method name is unfortunate. It elevates apps to a higher bucket, so it ideally
            // should be called before we attempt to schedule the job (especially as EJ).
            usmi.reportSyncScheduled(syncOperation.owningPackage,
                    UserHandle.getUserId(syncOperation.owningUid),
                    syncOperation.isAppStandbyExempted());
        }

        getJobScheduler().scheduleAsPackage(b.build(), syncOperation.owningPackage,
        final JobInfo ji = b.build();
        int result = getJobScheduler().scheduleAsPackage(ji, syncOperation.owningPackage,
                syncOperation.target.userId, syncOperation.wakeLockName());
        if (result == JobScheduler.RESULT_FAILURE && ji.isExpedited()) {
            if (isLoggable) {
                Slog.i(TAG, "Failed to schedule EJ for " + syncOperation.owningPackage
                        + ". Downgrading to regular");
            }
            syncOperation.scheduleEjAsRegularJob = true;
            b.setExpedited(false).setExtras(syncOperation.toJobInfoExtras());
            result = getJobScheduler().scheduleAsPackage(b.build(), syncOperation.owningPackage,
                    syncOperation.target.userId, syncOperation.wakeLockName());
        }
        if (result == JobScheduler.RESULT_FAILURE) {
            Slog.e(TAG, "Failed to schedule job for " + syncOperation.owningPackage);
            // TODO: notify AppStandbyController that the sync isn't actually scheduled so the
            // bucket doesn't stay elevated
        }
    }

    /**