summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/app/calllog/ClearCallLogDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/app/calllog/ClearCallLogDialog.java')
-rw-r--r--java/com/android/dialer/app/calllog/ClearCallLogDialog.java128
1 files changed, 83 insertions, 45 deletions
diff --git a/java/com/android/dialer/app/calllog/ClearCallLogDialog.java b/java/com/android/dialer/app/calllog/ClearCallLogDialog.java
index a01b89527..b16eb1beb 100644
--- a/java/com/android/dialer/app/calllog/ClearCallLogDialog.java
+++ b/java/com/android/dialer/app/calllog/ClearCallLogDialog.java
@@ -22,20 +22,27 @@ import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
-import android.content.ContentResolver;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.CallLog.Calls;
+import android.support.annotation.Nullable;
+import android.support.design.widget.Snackbar;
import com.android.dialer.app.R;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.concurrent.DialerExecutor;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
+import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.phonenumbercache.CachedNumberLookupService;
import com.android.dialer.phonenumbercache.PhoneNumberCache;
/** Dialog that clears the call log after confirming with the user */
public class ClearCallLogDialog extends DialogFragment {
+ private DialerExecutor<Void> clearCallLogTask;
+ private ProgressDialog progressDialog;
+
/** Preferred way to show this dialog */
public static void show(FragmentManager fragmentManager) {
ClearCallLogDialog dialog = new ClearCallLogDialog();
@@ -43,49 +50,35 @@ public class ClearCallLogDialog extends DialogFragment {
}
@Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ clearCallLogTask =
+ DialerExecutorComponent.get(getContext())
+ .dialerExecutorFactory()
+ .createUiTaskBuilder(
+ getFragmentManager(),
+ "clearCallLogTask",
+ new ClearCallLogWorker(getActivity().getApplicationContext()))
+ .onSuccess(this::onSuccess)
+ .build();
+ }
+
+ @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- final ContentResolver resolver = getActivity().getContentResolver();
- final Context context = getActivity().getApplicationContext();
- final OnClickListener okListener =
- new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final ProgressDialog progressDialog =
- ProgressDialog.show(
- getActivity(), getString(R.string.clearCallLogProgress_title), "", true, false);
- progressDialog.setOwnerActivity(getActivity());
- CallLogNotificationsService.markNewMissedCallsAsOld(getContext(), null);
- final AsyncTask<Void, Void, Void> task =
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- resolver.delete(Calls.CONTENT_URI, null, null);
- CachedNumberLookupService cachedNumberLookupService =
- PhoneNumberCache.get(context).getCachedNumberLookupService();
- if (cachedNumberLookupService != null) {
- cachedNumberLookupService.clearAllCacheEntries(context);
- }
- return null;
- }
-
- @Override
- protected void onPostExecute(Void result) {
- final Activity activity = progressDialog.getOwnerActivity();
-
- if (activity == null || activity.isDestroyed() || activity.isFinishing()) {
- return;
- }
-
- if (progressDialog != null && progressDialog.isShowing()) {
- progressDialog.dismiss();
- }
- }
- };
- // TODO: Once we have the API, we should configure this ProgressDialog
- // to only show up after a certain time (e.g. 150ms)
- progressDialog.show();
- task.execute();
- }
+ OnClickListener okListener =
+ (dialog, which) -> {
+ progressDialog =
+ ProgressDialog.show(
+ getActivity(), getString(R.string.clearCallLogProgress_title), "", true, false);
+ progressDialog.setOwnerActivity(getActivity());
+ CallLogNotificationsService.cancelAllMissedCalls(getContext());
+
+ // TODO: Once we have the API, we should configure this ProgressDialog
+ // to only show up after a certain time (e.g. 150ms)
+ progressDialog.show();
+
+ clearCallLogTask.executeSerial(null);
};
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.clearCallLogConfirmation_title)
@@ -96,4 +89,49 @@ public class ClearCallLogDialog extends DialogFragment {
.setCancelable(true)
.create();
}
+
+ private static class ClearCallLogWorker implements Worker<Void, Void> {
+ private final Context appContext;
+
+ private ClearCallLogWorker(Context appContext) {
+ this.appContext = appContext;
+ }
+
+ @Nullable
+ @Override
+ public Void doInBackground(@Nullable Void unused) throws Throwable {
+ appContext.getContentResolver().delete(Calls.CONTENT_URI, null, null);
+ CachedNumberLookupService cachedNumberLookupService =
+ PhoneNumberCache.get(appContext).getCachedNumberLookupService();
+ if (cachedNumberLookupService != null) {
+ cachedNumberLookupService.clearAllCacheEntries(appContext);
+ }
+ return null;
+ }
+ }
+
+ private void onSuccess(Void unused) {
+ Assert.isNotNull(progressDialog);
+ Activity activity = progressDialog.getOwnerActivity();
+
+ if (activity == null || activity.isDestroyed() || activity.isFinishing()) {
+ return;
+ }
+
+ maybeShowEnrichedCallSnackbar(activity);
+
+ if (progressDialog != null && progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ }
+
+ private void maybeShowEnrichedCallSnackbar(Activity activity) {
+ if (EnrichedCallComponent.get(activity).getEnrichedCallManager().hasStoredData()) {
+ Snackbar.make(
+ activity.findViewById(R.id.calllog_frame),
+ getString(R.string.multiple_ec_data_deleted),
+ 5_000)
+ .show();
+ }
+ }
}