blob: ed0faabbe04ad8e3e018dd8441aec18a0ef20a88 [file] [log] [blame]
/*
* 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.filterednumber;
import com.google.common.base.Preconditions;
import android.content.SharedPreferences;
import android.util.Log;
import com.android.dialer.compat.FilteredNumberCompat;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnHasBlockedNumbersListener;
/**
* Class responsible for checking if the user can be auto-migrated to {@link
* android.provider.BlockedNumberContract} blocking. In order for this to happen, the user cannot
* have any numbers that are blocked in the Dialer solution.
*/
public class BlockedNumbersAutoMigrator {
private static final String TAG = "BlockedNumbersAuto";
private static final String HAS_CHECKED_AUTO_MIGRATE_KEY = "checkedAutoMigrate";
private final SharedPreferences sharedPreferences;
private final FilteredNumberAsyncQueryHandler queryHandler;
/**
* Constructs the BlockedNumbersAutoMigrator with the given {@link SharedPreferences} and {@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(SharedPreferences sharedPreferences,
FilteredNumberAsyncQueryHandler queryHandler) {
this.sharedPreferences = Preconditions.checkNotNull(sharedPreferences);
this.queryHandler = Preconditions.checkNotNull(queryHandler);
}
/**
* 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()}.
*/
public void autoMigrate() {
if (!shouldAttemptAutoMigrate()) {
return;
}
Log.i(TAG, "Attempting to auto-migrate.");
queryHandler.hasBlockedNumbers(new OnHasBlockedNumbersListener() {
@Override
public void onHasBlockedNumbers(boolean hasBlockedNumbers) {
if (hasBlockedNumbers) {
Log.i(TAG, "Not auto-migrating: blocked numbers exist.");
return;
}
Log.i(TAG, "Auto-migrating: no blocked numbers.");
FilteredNumberCompat.setHasMigratedToNewBlocking(true);
}
});
}
private boolean shouldAttemptAutoMigrate() {
if (sharedPreferences.contains(HAS_CHECKED_AUTO_MIGRATE_KEY)) {
Log.d(TAG, "Not attempting auto-migrate: already checked once.");
return false;
}
Log.i(TAG, "Updating state as already checked for auto-migrate.");
sharedPreferences.edit().putBoolean(HAS_CHECKED_AUTO_MIGRATE_KEY, true).apply();
if (!FilteredNumberCompat.canUseNewFiltering()) {
Log.i(TAG, "Not attempting auto-migrate: not available.");
return false;
}
if (FilteredNumberCompat.hasMigratedToNewBlocking()) {
Log.i(TAG, "Not attempting auto-migrate: already migrated.");
return false;
}
return true;
}
}