From b980fc4386cdc24a605fc682d0fef0c5dc54c327 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Mon, 19 Oct 2015 23:57:25 -0700 Subject: Add setting for hiding blocked calls. + Add settings switch to blocked number settings. + Add utility for checking/setting whether calls should be blocked. + Filter out blocked calls in call log query, if appropriate. + Refresh call log fragment after a change in setting. Followup work: delete voicemails for calls by blocked numbers after the time when the user blocked them. Bug: 24134270 Change-Id: I85088697559ef6fb446b82617f14f1c6fa893df1 --- src/com/android/dialer/calllog/CallLogAdapter.java | 7 ++++--- src/com/android/dialer/calllog/CallLogFragment.java | 11 ++++++++++- .../android/dialer/calllog/CallLogQueryHandler.java | 13 +++++++++++-- .../filterednumber/BlockedNumberFragment.java | 15 ++++++++++++++- .../dialer/filterednumber/FilteredNumbersUtil.java | 21 +++++++++++++++++++++ 5 files changed, 60 insertions(+), 7 deletions(-) (limited to 'src/com/android/dialer') diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java index 0ee7e935d..3dccf27bb 100644 --- a/src/com/android/dialer/calllog/CallLogAdapter.java +++ b/src/com/android/dialer/calllog/CallLogAdapter.java @@ -260,10 +260,11 @@ public class CallLogAdapter extends GroupingListAdapter mCallLogListItemHelper = new CallLogListItemHelper(phoneCallDetailsHelper, resources, mTelecomCallLogCache); mCallLogGroupBuilder = new CallLogGroupBuilder(this); - mPrefs = PreferenceManager.getDefaultSharedPreferences(context); - maybeShowVoicemailPromoCard(); mFilteredNumberAsyncQueryHandler = new FilteredNumberAsyncQueryHandler(mContext.getContentResolver()); + + mPrefs = PreferenceManager.getDefaultSharedPreferences(context); + maybeShowVoicemailPromoCard(); } public void onSaveInstanceState(Bundle outState) { @@ -306,7 +307,7 @@ public class CallLogAdapter extends GroupingListAdapter mBlockedIdCache.clear(); } - public void startCache() { + public void onResume() { if (PermissionsUtil.hasPermission(mContext, android.Manifest.permission.READ_CONTACTS)) { mContactInfoCache.start(); } diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java index dff213bce..369730d96 100644 --- a/src/com/android/dialer/calllog/CallLogFragment.java +++ b/src/com/android/dialer/calllog/CallLogFragment.java @@ -42,6 +42,7 @@ import android.view.ViewGroup; import com.android.contacts.common.GeoUtil; import com.android.contacts.common.util.PermissionsUtil; import com.android.dialer.R; +import com.android.dialer.filterednumber.FilteredNumbersUtil; import com.android.dialer.util.EmptyLoader; import com.android.dialer.voicemail.VoicemailPlaybackPresenter; import com.android.dialer.widget.EmptyContentView; @@ -124,6 +125,7 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis private boolean mRefreshDataRequired = true; private boolean mHasReadCallLogPermission = false; + private boolean mShouldHideBlockedCalls = false; // Exactly same variable is in Fragment as a package private. private boolean mMenuVisible = true; @@ -209,6 +211,8 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis resolver.registerContentObserver(Status.CONTENT_URI, true, mVoicemailStatusObserver); setHasOptionsMenu(true); + mShouldHideBlockedCalls = FilteredNumbersUtil.shouldHideBlockedCalls(getActivity()); + if (mCallTypeFilter == Calls.VOICEMAIL_TYPE) { mVoicemailPlaybackPresenter = VoicemailPlaybackPresenter .getInstance(activity, state); @@ -339,9 +343,14 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis mRefreshDataRequired = true; updateEmptyMessage(mCallTypeFilter); } + if (mShouldHideBlockedCalls != FilteredNumbersUtil.shouldHideBlockedCalls(getActivity())) { + mShouldHideBlockedCalls = !mShouldHideBlockedCalls; + mRefreshDataRequired = true; + } + mHasReadCallLogPermission = hasReadCallLogPermission; refreshData(); - mAdapter.startCache(); + mAdapter.onResume(); rescheduleDisplayUpdate(); diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java index 81e49d2d4..01489c1dc 100644 --- a/src/com/android/dialer/calllog/CallLogQueryHandler.java +++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java @@ -36,6 +36,7 @@ import android.util.Log; import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler; import com.android.contacts.common.util.PermissionsUtil; +import com.android.dialer.filterednumber.FilteredNumbersUtil; import com.android.dialer.util.AppCompatConstants; import com.android.dialer.util.TelecomUtil; import com.android.dialer.voicemail.VoicemailStatusHelperImpl; @@ -177,7 +178,7 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler { if (callType > CALL_TYPE_ALL) { where.append(" AND "); - where.append(String.format("(%s = ?)", Calls.TYPE)); + where.append("(" + Calls.TYPE + " = ?)"); selectionArgs.add(Integer.toString(callType)); } else { where.append(" AND NOT "); @@ -186,10 +187,18 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler { if (newerThan > 0) { where.append(" AND "); - where.append(String.format("(%s > ?)", Calls.DATE)); + where.append("(" + Calls.DATE + " > ?)"); selectionArgs.add(Long.toString(newerThan)); } + final boolean shouldHideBlockedCalls = + FilteredNumbersUtil.shouldHideBlockedCalls(mContext); + if (shouldHideBlockedCalls) { + where.append(" AND "); + where.append("(" + Calls.TYPE + " != ?)"); + selectionArgs.add(Integer.toString(AppCompatConstants.CALLS_BLOCKED_TYPE)); + } + final int limit = (mLogLimit == -1) ? NUM_LOGS_TO_DISPLAY : mLogLimit; final String selection = where.length() > 0 ? where.toString() : null; Uri uri = TelecomUtil.getCallLogUri(mContext).buildUpon() diff --git a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java index 43f734d8d..728d8b287 100644 --- a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java +++ b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java @@ -22,6 +22,8 @@ import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.os.Bundle; +import android.widget.CompoundButton; +import android.widget.Switch; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -36,6 +38,7 @@ public class BlockedNumberFragment extends ListFragment implements private BlockedNumberAdapter mAdapter; + private Switch mHideSettingSwitch; private View mImportSettings; private View mImportButton; @@ -49,7 +52,13 @@ public class BlockedNumberFragment extends ListFragment implements } setListAdapter(mAdapter); - getActivity().findViewById(R.id.add_number_button).setOnClickListener(this); + mHideSettingSwitch = (Switch) getActivity().findViewById(R.id.hide_blocked_calls_switch); + mHideSettingSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + FilteredNumbersUtil.setShouldHideBlockedCalls(getActivity(), isChecked); + } + }); mImportSettings = getActivity().findViewById(R.id.import_settings); mImportButton = getActivity().findViewById(R.id.import_button); @@ -65,6 +74,8 @@ public class BlockedNumberFragment extends ListFragment implements }); } }); + + getActivity().findViewById(R.id.add_number_button).setOnClickListener(this); } @Override @@ -91,6 +102,8 @@ public class BlockedNumberFragment extends ListFragment implements mImportSettings.setVisibility(visibility); } }); + + mHideSettingSwitch.setChecked(FilteredNumbersUtil.shouldHideBlockedCalls(getActivity())); } @Override diff --git a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java index 68f262cf9..0e162acfa 100644 --- a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java +++ b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java @@ -19,6 +19,7 @@ import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.os.AsyncTask; +import android.preference.PreferenceManager; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; @@ -42,6 +43,8 @@ import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns; */ public class FilteredNumbersUtil { + private static final String HIDE_BLOCKED_CALLS_PREF_KEY = "hide_blocked_calls"; + public interface CheckForSendToVoicemailContactListener { public void onComplete(boolean hasSendToVoicemailContact); } @@ -213,6 +216,24 @@ public class FilteredNumbersUtil { return isBlocked; } + public static boolean shouldHideBlockedCalls(Context context) { + if (context == null) { + return false; + } + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(FilteredNumbersUtil.HIDE_BLOCKED_CALLS_PREF_KEY, false); + } + + public static void setShouldHideBlockedCalls(Context context, boolean shouldHide) { + if (context == null) { + return; + } + PreferenceManager.getDefaultSharedPreferences(context) + .edit() + .putBoolean(FilteredNumbersUtil.HIDE_BLOCKED_CALLS_PREF_KEY, shouldHide) + .apply(); + } + public static boolean canBlockNumber(Context context, String number) { if (PhoneNumberUtils.isEmergencyNumber(number)) { return false; -- cgit v1.2.3