diff options
Diffstat (limited to 'java/com/android/dialer/shortcuts/RefreshShortcutsTask.java')
-rw-r--r-- | java/com/android/dialer/shortcuts/RefreshShortcutsTask.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/java/com/android/dialer/shortcuts/RefreshShortcutsTask.java b/java/com/android/dialer/shortcuts/RefreshShortcutsTask.java new file mode 100644 index 000000000..086d1dc7a --- /dev/null +++ b/java/com/android/dialer/shortcuts/RefreshShortcutsTask.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dialer.shortcuts; + +import android.annotation.TargetApi; +import android.app.job.JobParameters; +import android.app.job.JobService; +import android.os.AsyncTask; +import android.os.Build.VERSION_CODES; +import android.support.annotation.MainThread; +import android.support.annotation.NonNull; +import android.support.annotation.WorkerThread; +import com.android.dialer.common.Assert; +import com.android.dialer.common.LogUtil; + +/** {@link AsyncTask} used by the periodic job service to refresh dynamic and pinned shortcuts. */ +@TargetApi(VERSION_CODES.N_MR1) // Shortcuts introduced in N MR1 +final class RefreshShortcutsTask extends AsyncTask<JobParameters, Void, JobParameters> { + + private final JobService jobService; + + RefreshShortcutsTask(@NonNull JobService jobService) { + this.jobService = jobService; + } + + /** @param params array with length 1, provided from PeriodicJobService */ + @Override + @NonNull + @WorkerThread + protected JobParameters doInBackground(JobParameters... params) { + Assert.isWorkerThread(); + LogUtil.enterBlock("RefreshShortcutsTask.doInBackground"); + + // Dynamic shortcuts are refreshed from the UI but icons can become stale, so update them + // periodically using the job service. + // + // The reason that icons can become is stale is that there is no last updated timestamp for + // pictures; there is only a last updated timestamp for the entire contact row, which changes + // frequently (for example, when they are called their "times_contacted" is incremented). + // Relying on such a spuriously updated timestamp would result in too frequent shortcut updates, + // so instead we just allow the icon to become stale in the case that the contact's photo is + // updated, and then rely on the job service to periodically force update it. + new DynamicShortcuts(jobService, new IconFactory(jobService)).updateIcons(); // Blocking + new PinnedShortcuts(jobService).refresh(); // Blocking + + return params[0]; + } + + @Override + @MainThread + protected void onPostExecute(JobParameters params) { + Assert.isMainThread(); + LogUtil.enterBlock("RefreshShortcutsTask.onPostExecute"); + + jobService.jobFinished(params, false /* needsReschedule */); + } +} |