103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell/* 203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * Copyright (C) 2016 The Android Open Source Project 303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * 403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * Licensed under the Apache License, Version 2.0 (the "License"); 503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * you may not use this file except in compliance with the License. 603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * You may obtain a copy of the License at 703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * 803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * http://www.apache.org/licenses/LICENSE-2.0 903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * 1003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * Unless required by applicable law or agreed to in writing, software 1103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * distributed under the License is distributed on an "AS IS" BASIS, 1203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * See the License for the specific language governing permissions and 1403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * limitations under the License. 1503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell */ 1603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 1703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellpackage com.android.dialer.filterednumber; 1803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 1903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellimport com.google.common.base.Preconditions; 2003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 2103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellimport android.content.SharedPreferences; 2203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellimport android.util.Log; 2303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 2403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellimport com.android.dialer.compat.FilteredNumberCompat; 2503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellimport com.android.dialer.database.FilteredNumberAsyncQueryHandler; 2603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellimport com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnHasBlockedNumbersListener; 2703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 2803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell/** 2903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * Class responsible for checking if the user can be auto-migrated to {@link 3003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * android.provider.BlockedNumberContract} blocking. In order for this to happen, the user cannot 3103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * have any numbers that are blocked in the Dialer solution. 3203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell */ 3303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwellpublic class BlockedNumbersAutoMigrator { 3403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 3503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell private static final String TAG = "BlockedNumbersAuto"; 3603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 3703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell private static final String HAS_CHECKED_AUTO_MIGRATE_KEY = "checkedAutoMigrate"; 3803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 3903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell private final SharedPreferences sharedPreferences; 4003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell private final FilteredNumberAsyncQueryHandler queryHandler; 4103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 4203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell /** 4303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * Constructs the BlockedNumbersAutoMigrator with the given {@link SharedPreferences} and {@link 4403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * FilteredNumberAsyncQueryHandler}. 4503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * 4603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * @param sharedPreferences The SharedPreferences used to persist information. 4703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * @param queryHandler The FilteredNumberAsyncQueryHandler used to determine if there are 4803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * blocked numbers. 4903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * @throws NullPointerException if sharedPreferences or queryHandler are null. 5003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell */ 5103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell public BlockedNumbersAutoMigrator(SharedPreferences sharedPreferences, 5203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell FilteredNumberAsyncQueryHandler queryHandler) { 5303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell this.sharedPreferences = Preconditions.checkNotNull(sharedPreferences); 5403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell this.queryHandler = Preconditions.checkNotNull(queryHandler); 5503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 5603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 5703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell /** 5803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * Attempts to perform the auto-migration. Auto-migration will only be attempted once and can be 5903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * performed only when the user has no blocked numbers. As a result of this method, the user 6003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * will be migrated to the framework blocking solution, as determined by {@link 6103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell * FilteredNumberCompat#hasMigratedToNewBlocking()}. 6203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell */ 6303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell public void autoMigrate() { 6403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell if (!shouldAttemptAutoMigrate()) { 6503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell return; 6603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 6703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 6803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell Log.i(TAG, "Attempting to auto-migrate."); 6903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell queryHandler.hasBlockedNumbers(new OnHasBlockedNumbersListener() { 7003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell @Override 7103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell public void onHasBlockedNumbers(boolean hasBlockedNumbers) { 7203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell if (hasBlockedNumbers) { 7303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell Log.i(TAG, "Not auto-migrating: blocked numbers exist."); 7403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell return; 7503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 7603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell Log.i(TAG, "Auto-migrating: no blocked numbers."); 7703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell FilteredNumberCompat.setHasMigratedToNewBlocking(true); 7803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 7903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell }); 8003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 8103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 8203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell private boolean shouldAttemptAutoMigrate() { 8303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell if (sharedPreferences.contains(HAS_CHECKED_AUTO_MIGRATE_KEY)) { 8403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell Log.d(TAG, "Not attempting auto-migrate: already checked once."); 8503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell return false; 8603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 8703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell Log.i(TAG, "Updating state as already checked for auto-migrate."); 8803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell sharedPreferences.edit().putBoolean(HAS_CHECKED_AUTO_MIGRATE_KEY, true).apply(); 8903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 9003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell if (!FilteredNumberCompat.canUseNewFiltering()) { 9103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell Log.i(TAG, "Not attempting auto-migrate: not available."); 9203dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell return false; 9303dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 9403dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell 9503dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell if (FilteredNumberCompat.hasMigratedToNewBlocking()) { 9603dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell Log.i(TAG, "Not attempting auto-migrate: already migrated."); 9703dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell return false; 9803dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 9903dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell return true; 10003dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell } 10103dffbf949a9758da1b296369d29ef8b3aecae38Brandon Maxwell} 102