diff options
Diffstat (limited to 'java/com/android/dialer/blocking/BlockedNumbersAutoMigrator.java')
-rw-r--r-- | java/com/android/dialer/blocking/BlockedNumbersAutoMigrator.java | 97 |
1 files changed, 61 insertions, 36 deletions
diff --git a/java/com/android/dialer/blocking/BlockedNumbersAutoMigrator.java b/java/com/android/dialer/blocking/BlockedNumbersAutoMigrator.java index 1773e9b84..3cc42207d 100644 --- a/java/com/android/dialer/blocking/BlockedNumbersAutoMigrator.java +++ b/java/com/android/dialer/blocking/BlockedNumbersAutoMigrator.java @@ -18,10 +18,14 @@ package com.android.dialer.blocking; import android.content.Context; import android.content.SharedPreferences; +import android.preference.PreferenceManager; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler.OnHasBlockedNumbersListener; +import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import java.util.Objects; +import com.android.dialer.common.concurrent.DialerExecutor.Worker; +import com.android.dialer.common.concurrent.DialerExecutorFactory; /** * Class responsible for checking if the user can be auto-migrated to {@link @@ -32,36 +36,42 @@ public class BlockedNumbersAutoMigrator { static final String HAS_CHECKED_AUTO_MIGRATE_KEY = "checkedAutoMigrate"; - @NonNull private final Context context; - @NonNull private final SharedPreferences sharedPreferences; + @NonNull private final Context appContext; @NonNull private final FilteredNumberAsyncQueryHandler queryHandler; + @NonNull private final DialerExecutorFactory dialerExecutorFactory; /** - * Constructs the BlockedNumbersAutoMigrator with the given {@link SharedPreferences} and {@link + * Constructs the BlockedNumbersAutoMigrator with the given {@link * FilteredNumberAsyncQueryHandler}. * - * @param sharedPreferences The SharedPreferences used to persist information. * @param queryHandler The FilteredNumberAsyncQueryHandler used to determine if there are blocked * numbers. * @throws NullPointerException if sharedPreferences or queryHandler are null. */ public BlockedNumbersAutoMigrator( - @NonNull Context context, - @NonNull SharedPreferences sharedPreferences, - @NonNull FilteredNumberAsyncQueryHandler queryHandler) { - this.context = Objects.requireNonNull(context); - this.sharedPreferences = Objects.requireNonNull(sharedPreferences); - this.queryHandler = Objects.requireNonNull(queryHandler); + @NonNull Context appContext, + @NonNull FilteredNumberAsyncQueryHandler queryHandler, + @NonNull DialerExecutorFactory dialerExecutorFactory) { + this.appContext = Assert.isNotNull(appContext); + this.queryHandler = Assert.isNotNull(queryHandler); + this.dialerExecutorFactory = Assert.isNotNull(dialerExecutorFactory); + } + + public void asyncAutoMigrate() { + dialerExecutorFactory + .createNonUiTaskBuilder(new ShouldAttemptAutoMigrate(appContext)) + .onSuccess(this::autoMigrate) + .build() + .executeParallel(null); } /** * Attempts to perform the auto-migration. Auto-migration will only be attempted once and can be * performed only when the user has no blocked numbers. As a result of this method, the user will - * be migrated to the framework blocking solution, as determined by {@link - * FilteredNumberCompat#hasMigratedToNewBlocking()}. + * be migrated to the framework blocking solution if blocked numbers don't exist. */ - public void autoMigrate() { - if (!shouldAttemptAutoMigrate()) { + private void autoMigrate(boolean shouldAttemptAutoMigrate) { + if (!shouldAttemptAutoMigrate) { return; } @@ -75,36 +85,51 @@ public class BlockedNumbersAutoMigrator { return; } LogUtil.i("BlockedNumbersAutoMigrator", "auto-migrating: no blocked numbers."); - FilteredNumberCompat.setHasMigratedToNewBlocking(context, true); + FilteredNumberCompat.setHasMigratedToNewBlocking(appContext, true); } }); } - private boolean shouldAttemptAutoMigrate() { - if (sharedPreferences.contains(HAS_CHECKED_AUTO_MIGRATE_KEY)) { - LogUtil.v("BlockedNumbersAutoMigrator", "not attempting auto-migrate: already checked once."); - return false; + private static class ShouldAttemptAutoMigrate implements Worker<Void, Boolean> { + private final Context appContext; + + ShouldAttemptAutoMigrate(Context appContext) { + this.appContext = appContext; } - if (!FilteredNumberCompat.canAttemptBlockOperations(context)) { - // This may be the case where the user is on the lock screen, so we shouldn't record that the - // migration status was checked. + @Nullable + @Override + public Boolean doInBackground(@Nullable Void input) { + SharedPreferences sharedPreferences = + PreferenceManager.getDefaultSharedPreferences(appContext); + + if (sharedPreferences.contains(HAS_CHECKED_AUTO_MIGRATE_KEY)) { + LogUtil.v( + "BlockedNumbersAutoMigrator", "not attempting auto-migrate: already checked once."); + return false; + } + + if (!FilteredNumberCompat.canAttemptBlockOperations(appContext)) { + // This may be the case where the user is on the lock screen, so we shouldn't record that + // the migration status was checked. + LogUtil.i( + "BlockedNumbersAutoMigrator", "not attempting auto-migrate: current user can't block"); + return false; + } LogUtil.i( - "BlockedNumbersAutoMigrator", "not attempting auto-migrate: current user can't block"); - return false; - } - LogUtil.i("BlockedNumbersAutoMigrator", "updating state as already checked for auto-migrate."); - sharedPreferences.edit().putBoolean(HAS_CHECKED_AUTO_MIGRATE_KEY, true).apply(); + "BlockedNumbersAutoMigrator", "updating state as already checked for auto-migrate."); + sharedPreferences.edit().putBoolean(HAS_CHECKED_AUTO_MIGRATE_KEY, true).apply(); - if (!FilteredNumberCompat.canUseNewFiltering()) { - LogUtil.i("BlockedNumbersAutoMigrator", "not attempting auto-migrate: not available."); - return false; - } + if (!FilteredNumberCompat.canUseNewFiltering()) { + LogUtil.i("BlockedNumbersAutoMigrator", "not attempting auto-migrate: not available."); + return false; + } - if (FilteredNumberCompat.hasMigratedToNewBlocking(context)) { - LogUtil.i("BlockedNumbersAutoMigrator", "not attempting auto-migrate: already migrated."); - return false; + if (FilteredNumberCompat.hasMigratedToNewBlocking(appContext)) { + LogUtil.i("BlockedNumbersAutoMigrator", "not attempting auto-migrate: already migrated."); + return false; + } + return true; } - return true; } } |