From 4e8359d3d59d3648bcefb8bcd1eee9f1bb2954e7 Mon Sep 17 00:00:00 2001 From: weijiaxu Date: Tue, 23 Jan 2018 17:02:43 -0800 Subject: -Add cleaning blocked numbers stored in a separate database when people try to clean calllog database. Bug: 71898641,72104419 Test: On a local device. PiperOrigin-RevId: 183016474 Change-Id: Ib59bf558d5552e9b88c3feee1c47d96791fd542c --- .../databasepopulator/BlockedBumberPopulator.java | 69 ++++++++++++++++++++++ .../dialer/databasepopulator/CallLogPopulator.java | 14 +++-- .../dialer/simulator/impl/SimulatorMainMenu.java | 2 + 3 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java (limited to 'java/com') diff --git a/java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java b/java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java new file mode 100644 index 000000000..378d487e2 --- /dev/null +++ b/java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2018 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.databasepopulator; + +import android.annotation.TargetApi; +import android.content.ContentProviderOperation; +import android.content.ContentValues; +import android.content.Context; +import android.content.OperationApplicationException; +import android.os.Build.VERSION_CODES; +import android.os.RemoteException; +import android.provider.BlockedNumberContract; +import android.provider.BlockedNumberContract.BlockedNumbers; +import android.support.annotation.NonNull; +import com.android.dialer.common.Assert; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** Populates the device database with blocked number entries. */ +public class BlockedBumberPopulator { + + private static final List values = + Arrays.asList( + createContentValuesWithNumber("123456789"), createContentValuesWithNumber("987654321")); + + @TargetApi(VERSION_CODES.N) + public static void populateBlockedNumber(@NonNull Context context) { + ArrayList operations = new ArrayList<>(); + for (ContentValues value : values) { + operations.add( + ContentProviderOperation.newInsert(BlockedNumbers.CONTENT_URI) + .withValues(value) + .withYieldAllowed(true) + .build()); + } + try { + context.getContentResolver().applyBatch(BlockedNumberContract.AUTHORITY, operations); + } catch (RemoteException | OperationApplicationException e) { + Assert.fail("error adding block number entries: " + e); + } + } + + @TargetApi(VERSION_CODES.N) + public static void deleteBlockedNumbers(@NonNull Context context) { + // clean BlockedNumbers db + context.getContentResolver().delete(BlockedNumbers.CONTENT_URI, null, null); + } + + private static ContentValues createContentValuesWithNumber(String number) { + ContentValues contentValues = new ContentValues(); + contentValues.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, number); + return contentValues; + } +} diff --git a/java/com/android/dialer/databasepopulator/CallLogPopulator.java b/java/com/android/dialer/databasepopulator/CallLogPopulator.java index dd6dc6420..eeefe70c3 100644 --- a/java/com/android/dialer/databasepopulator/CallLogPopulator.java +++ b/java/com/android/dialer/databasepopulator/CallLogPopulator.java @@ -75,13 +75,13 @@ public final class CallLogPopulator { }; @WorkerThread - public static void populateCallLog(@NonNull Context context) { - populateCallLog(context, false); + public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) { + populateCallLog(context, isWithoutMissedCalls, false); } @WorkerThread - public static void populateCallLogWithoutMissed(@NonNull Context context) { - populateCallLog(context, true); + public static void populateCallLog(@NonNull Context context) { + populateCallLog(context, false); } @WorkerThread @@ -119,8 +119,8 @@ public final class CallLogPopulator { } @WorkerThread - public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) { - populateCallLog(context, isWithoutMissedCalls, false); + public static void populateCallLogWithoutMissed(@NonNull Context context) { + populateCallLog(context, true); } @WorkerThread @@ -138,6 +138,8 @@ public final class CallLogPopulator { } } + + @AutoValue abstract static class CallEntry { @NonNull diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java index 450119086..174aab5ad 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java +++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java @@ -25,6 +25,7 @@ import android.support.v7.app.AppCompatActivity; import android.view.ActionProvider; import com.android.dialer.common.concurrent.DialerExecutor.Worker; import com.android.dialer.common.concurrent.DialerExecutorComponent; +import com.android.dialer.databasepopulator.BlockedBumberPopulator; import com.android.dialer.databasepopulator.CallLogPopulator; import com.android.dialer.databasepopulator.ContactsPopulator; import com.android.dialer.databasepopulator.VoicemailPopulator; @@ -182,6 +183,7 @@ final class SimulatorMainMenu { ContactsPopulator.deleteAllContacts(context); CallLogPopulator.deleteAllCallLog(context); VoicemailPopulator.deleteAllVoicemail(context); + BlockedBumberPopulator.deleteBlockedNumbers(context); return null; } } -- cgit v1.2.3 From aa8a26e9cd6d4c355f32516bbbf8361b32d8772b Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Tue, 23 Jan 2018 17:39:56 -0800 Subject: Search no longer crashes if you don't have the contacts permission. Bug: 71737256 Test: NewSearchFragmentTest PiperOrigin-RevId: 183020934 Change-Id: Ifed4364901ca77036fa6d0b149857fbbd7e9fca0 --- .../dialer/searchfragment/cp2/SearchContactsCursorLoader.java | 6 ++++++ .../searchfragment/directories/DirectoriesCursorLoader.java | 11 +++++++++++ 2 files changed, 17 insertions(+) (limited to 'java/com') diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java index 23f368f54..57e253c7e 100644 --- a/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java +++ b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java @@ -28,9 +28,11 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import com.android.contacts.common.preference.ContactsPreferences; +import com.android.dialer.common.LogUtil; import com.android.dialer.searchfragment.common.Projections; import com.android.dialer.searchfragment.common.SearchCursor; import com.android.dialer.smartdial.SmartDialCursorLoader; +import com.android.dialer.util.PermissionsUtil; /** Cursor Loader for CP2 contacts. */ public final class SearchContactsCursorLoader extends CursorLoader { @@ -80,6 +82,10 @@ public final class SearchContactsCursorLoader extends CursorLoader { @Override public Cursor loadInBackground() { + if (!PermissionsUtil.hasContactsReadPermissions(getContext())) { + LogUtil.i("SearchContactsCursorLoader.loadInBackground", "Contacts permission denied."); + return null; + } return isRegularSearch ? regularSearchLoadInBackground() : dialpadSearchLoadInBackground(); } diff --git a/java/com/android/dialer/searchfragment/directories/DirectoriesCursorLoader.java b/java/com/android/dialer/searchfragment/directories/DirectoriesCursorLoader.java index edf5f2403..39c1187a4 100644 --- a/java/com/android/dialer/searchfragment/directories/DirectoriesCursorLoader.java +++ b/java/com/android/dialer/searchfragment/directories/DirectoriesCursorLoader.java @@ -25,6 +25,8 @@ import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.provider.ContactsContract; import android.support.annotation.Nullable; +import com.android.dialer.common.LogUtil; +import com.android.dialer.util.PermissionsUtil; import com.google.auto.value.AutoValue; import java.util.ArrayList; import java.util.List; @@ -47,6 +49,15 @@ public final class DirectoriesCursorLoader extends CursorLoader { super(context, getContentUri(), PROJECTION, null, null, ContactsContract.Directory._ID); } + @Override + public Cursor loadInBackground() { + if (!PermissionsUtil.hasContactsReadPermissions(getContext())) { + LogUtil.i("DirectoriesCursorLoader.loadInBackground", "Contacts permission denied."); + return null; + } + return super.loadInBackground(); + } + /** * Creates a complete list of directories from the data set loaded by this loader. * -- cgit v1.2.3