summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnne Rong <annerong@google.com>2015-10-02 23:50:21 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-10-02 23:50:21 +0000
commit1113dce12c937f5b9481a18ca65fb1ea3bf49138 (patch)
treef1627d00f7e6f691c1e9d65a6ee7e225d06eb868
parent1695b1ac3682c6a7dd6d1ff898673237a6a37512 (diff)
parent6a9fe7f962bafdd3aa68cbf01cb3372fca0514a8 (diff)
am 6a9fe7f9: Merge "Add blocked number indicator to search screen for adding a blocked number." into ub-contactsdialer-a-dev
* commit '6a9fe7f962bafdd3aa68cbf01cb3372fca0514a8': Add blocked number indicator to search screen for adding a blocked number.
-rw-r--r--res/values/colors.xml1
-rw-r--r--res/values/ids.xml1
-rw-r--r--src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java67
-rw-r--r--src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java106
-rw-r--r--src/com/android/dialer/list/BlockedListSearchAdapter.java54
-rw-r--r--src/com/android/dialer/list/BlockedListSearchFragment.java118
6 files changed, 238 insertions, 109 deletions
diff --git a/res/values/colors.xml b/res/values/colors.xml
index ad493e147..e80ee6913 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -111,6 +111,7 @@
<color name="delete_icon_tint">#6D6D6D</color>
<color name="blocked_number_background">#E0E0E0</color>
<color name="blocked_number_accent_color">#42A5F5</color>
+ <color name="blocked_number_block_color">#F44336</color>
<!-- Colors for onboarding flow -->
<color name="onboarding_primary_text_color">#ffffff</color>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 14a2e5980..f850327ea 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -21,4 +21,5 @@
<item type="id" name="context_menu_edit_before_call" />
<item type="id" name="context_menu_block_number" />
<item type="id" name="settings_header_sounds_and_vibration" />
+ <item type="id" name="block_id" />
</resources>
diff --git a/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java b/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java
index a8cbfb3ca..11c0ac4bc 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java
@@ -36,14 +36,14 @@ import com.android.contacts.common.dialog.IndeterminateProgressDialog;
import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
import com.android.dialer.R;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
+import com.android.dialer.list.BlockedListSearchAdapter;
import com.android.dialer.list.OnListFragmentScrolledListener;
import com.android.dialer.list.BlockedListSearchFragment;
import com.android.dialer.list.SearchFragment;
import com.android.dialer.widget.SearchEditTextLayout;
public class BlockedNumberSearchActivity extends AppCompatActivity
- implements SearchFragment.HostInterface, OnPhoneNumberPickerActionListener {
- private static final String TAG = "BlockedNumberSearch";
+ implements SearchFragment.HostInterface {
private static final String TAG_BLOCKED_SEARCH_FRAGMENT = "blocked_search";
private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
@@ -115,7 +115,7 @@ public class BlockedNumberSearchActivity extends AppCompatActivity
return;
}
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
- SearchFragment fragment = (SearchFragment) getFragmentManager()
+ BlockedListSearchFragment fragment = (BlockedListSearchFragment) getFragmentManager()
.findFragmentByTag(TAG_BLOCKED_SEARCH_FRAGMENT);
if (fragment == null) {
fragment = new BlockedListSearchFragment();
@@ -125,6 +125,8 @@ public class BlockedNumberSearchActivity extends AppCompatActivity
}
fragment.setHasOptionsMenu(false);
fragment.setShowEmptyListForNullQuery(true);
+ fragment.setDirectorySearchEnabled(false);
+ fragment.setFilteredNumberAsyncQueryHandler(mFilteredNumberAsyncQueryHandler);
transaction.commit();
}
@@ -132,65 +134,6 @@ public class BlockedNumberSearchActivity extends AppCompatActivity
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof BlockedListSearchFragment) {
mSearchFragment = (BlockedListSearchFragment) fragment;
- mSearchFragment.setOnPhoneNumberPickerActionListener(this);
- }
- }
-
- @Override
- public void onPickDataUri(Uri dataUri, int callInitiationType) {
- Log.w(TAG, "onPickDataUri unsupported, ignoring.");
- }
-
- @Override
- public void onPickPhoneNumber(String phoneNumber, boolean isVideoCall, int callInitiationType) {
- blockNumber(phoneNumber);
- }
-
- @Override
- public void onShortcutIntentCreated(Intent intent) {
- Log.w(TAG, "Unsupported intent has come (" + intent + "). Ignoring.");
- }
-
- @Override
- public void onHomeInActionBarSelected() {
- }
-
- private void blockNumber(final String number) {
- final String countryIso = GeoUtil.getCurrentCountryIso(BlockedNumberSearchActivity.this);
- final IndeterminateProgressDialog progressDialog =
- IndeterminateProgressDialog.show(getFragmentManager(),
- getString(R.string.checkingNumber, number), null, 500);
- final String normalizedNumber =
- FilteredNumberAsyncQueryHandler.getNormalizedNumber(number, countryIso);
- if (normalizedNumber == null) {
- progressDialog.dismiss();
- Toast.makeText(
- BlockedNumberSearchActivity.this, getString(R.string.invalidNumber, number),
- Toast.LENGTH_SHORT).show();
- } else {
- final FilteredNumberAsyncQueryHandler.OnCheckBlockedListener onCheckListener =
- new FilteredNumberAsyncQueryHandler.OnCheckBlockedListener() {
- @Override
- public void onCheckComplete(Integer id) {
- progressDialog.dismiss();
- if (id == null) {
- final FilterNumberDialogFragment newFragment =
- FilterNumberDialogFragment.newInstance(id, normalizedNumber,
- number, countryIso, number);
- newFragment.setQueryHandler(mFilteredNumberAsyncQueryHandler);
- newFragment.setParentView(
- findViewById(R.id.search_activity_container));
- newFragment.show(getFragmentManager(),
- FilterNumberDialogFragment.BLOCK_DIALOG_FRAGMENT);
- } else {
- Toast.makeText(BlockedNumberSearchActivity.this,
- getString(R.string.alreadyBlocked, number),
- Toast.LENGTH_SHORT).show();
- }
- }
- };
- mFilteredNumberAsyncQueryHandler.startBlockedQuery(
- onCheckListener, normalizedNumber, number, countryIso);
}
}
diff --git a/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java b/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
index e9a88c845..1b953875c 100644
--- a/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
+++ b/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
@@ -21,6 +21,7 @@ import android.app.Dialog;
import android.app.DialogFragment;
import android.content.ContentValues;
import android.content.DialogInterface;
+import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
@@ -28,6 +29,8 @@ import android.view.View;
import com.android.dialer.R;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
+import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnBlockNumberListener;
+import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnUnblockNumberListener;
public class FilterNumberDialogFragment extends DialogFragment {
public static final String BLOCK_DIALOG_FRAGMENT = "blockUnblockNumberDialog";
@@ -40,6 +43,23 @@ public class FilterNumberDialogFragment extends DialogFragment {
private FilteredNumberAsyncQueryHandler mHandler;
private View mParentView;
+ private OnBlockListener mOnBlockListener;
+ private OnUndoBlockListener mOnUndoBlockListener;
+
+ public interface OnBlockListener {
+ /**
+ * Invoked after inserting a blocked number.
+ * @param uri The uri of the newly created row.
+ */
+ public void onBlockComplete(Uri uri);
+ }
+
+ public interface OnUndoBlockListener {
+ /**
+ * Invoked on undoing the blocking of a number.
+ */
+ public void onUndoBlockComplete();
+ }
public void setQueryHandler (FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler) {
mHandler = filteredNumberAsyncQueryHandler;
@@ -49,6 +69,14 @@ public class FilterNumberDialogFragment extends DialogFragment {
mParentView = view;
}
+ public void setOnBlockListener(OnBlockListener listener) {
+ mOnBlockListener = listener;
+ }
+
+ public void setOnUndoBlockListener(OnUndoBlockListener listener) {
+ mOnUndoBlockListener = listener;
+ }
+
public static FilterNumberDialogFragment newInstance(Integer blockId, String normalizedNumber,
String number, String countryIso, String displayNumber) {
final FilterNumberDialogFragment fragment = new FilterNumberDialogFragment();
@@ -95,50 +123,62 @@ public class FilterNumberDialogFragment extends DialogFragment {
return builder.create();
}
- public void blockNumber() {
- final String displayNumber = getArguments().getString(ARG_DISPLAY_NUMBER);
- final String message = getString(R.string.snackbar_number_blocked, displayNumber);
- final String undoMessage = getString(R.string.snackbar_number_unblocked, displayNumber);
- final FilteredNumberAsyncQueryHandler.OnUnblockNumberListener undoListener =
- new FilteredNumberAsyncQueryHandler.OnUnblockNumberListener() {
- @Override
- public void onUnblockComplete(int rows, ContentValues values) {
- Snackbar.make(mParentView, undoMessage, Snackbar.LENGTH_LONG).show();
- }
- };
+ private String getBlockedMessage(String displayNumber) {
+ return getString(R.string.snackbar_number_blocked, displayNumber);
+ }
- mHandler.blockNumber(
- new FilteredNumberAsyncQueryHandler.OnBlockNumberListener() {
- @Override
- public void onBlockComplete(final Uri uri) {
- Snackbar.make(mParentView, message, Snackbar.LENGTH_LONG)
- .setAction(R.string.block_number_undo,
- // Delete the newly created row on 'undo'.
- new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- mHandler.unblock(undoListener, uri);
- }
- })
- .show();
- }
- }, getArguments().getString(ARG_NORMALIZED_NUMBER),
+ private String getUnblockedMessage(String displayNumber) {
+ return getString(R.string.snackbar_number_unblocked, displayNumber);
+ }
+
+ private void blockNumber() {
+ final String displayNumber = getArguments().getString(ARG_DISPLAY_NUMBER);
+ final String message = getBlockedMessage(displayNumber);
+ final String undoMessage = getUnblockedMessage(displayNumber);
+ final OnUnblockNumberListener onUndoListener = new OnUnblockNumberListener() {
+ @Override
+ public void onUnblockComplete(int rows, ContentValues values) {
+ Snackbar.make(mParentView, undoMessage, Snackbar.LENGTH_LONG).show();
+ if (mOnUndoBlockListener != null) {
+ mOnUndoBlockListener.onUndoBlockComplete();
+ }
+ }
+ };
+ final OnBlockNumberListener onBlockNumberListener = new OnBlockNumberListener() {
+ @Override
+ public void onBlockComplete(final Uri uri) {
+ Snackbar.make(mParentView, message, Snackbar.LENGTH_LONG)
+ .setAction(R.string.block_number_undo,
+ // Delete the newly created row on 'undo'.
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mHandler.unblock(onUndoListener, uri);
+ }
+ })
+ .show();
+ if (mOnBlockListener != null) {
+ mOnBlockListener.onBlockComplete(uri);
+ }
+ }
+ };
+ mHandler.blockNumber(onBlockNumberListener, getArguments().getString(ARG_NORMALIZED_NUMBER),
getArguments().getString(ARG_NUMBER), getArguments().getString(ARG_COUNTRY_ISO));
}
- public void unblockNumber() {
+ private void unblockNumber() {
final String displayNumber = getArguments().getString(ARG_DISPLAY_NUMBER);
- final String message = getString(R.string.snackbar_number_unblocked, displayNumber);
- final String undoMessage = getString(R.string.snackbar_number_blocked, displayNumber);
- final FilteredNumberAsyncQueryHandler.OnBlockNumberListener undoListener =
- new FilteredNumberAsyncQueryHandler.OnBlockNumberListener() {
+ final String message = getUnblockedMessage(displayNumber);
+ final String undoMessage = getBlockedMessage(displayNumber);
+ final OnBlockNumberListener undoListener =
+ new OnBlockNumberListener() {
@Override
public void onBlockComplete(final Uri uri) {
Snackbar.make(mParentView, undoMessage, Snackbar.LENGTH_LONG).show();
}
};
mHandler.unblock(
- new FilteredNumberAsyncQueryHandler.OnUnblockNumberListener() {
+ new OnUnblockNumberListener() {
@Override
public void onUnblockComplete(int rows, final ContentValues values) {
Snackbar.make(mParentView, message, Snackbar.LENGTH_LONG)
diff --git a/src/com/android/dialer/list/BlockedListSearchAdapter.java b/src/com/android/dialer/list/BlockedListSearchAdapter.java
index 52e0c646f..7ae24e468 100644
--- a/src/com/android/dialer/list/BlockedListSearchAdapter.java
+++ b/src/com/android/dialer/list/BlockedListSearchAdapter.java
@@ -16,20 +16,74 @@
package com.android.dialer.list;
import android.content.Context;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.Color;
+import android.view.View;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.list.ContactListItemView;
+import com.android.dialer.R;
+import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
/**
* List adapter to display search results for adding a blocked number.
*/
public class BlockedListSearchAdapter extends RegularSearchListAdapter {
+ private Resources mResources;
+ private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
+
public BlockedListSearchAdapter(Context context) {
super(context);
+ mResources = context.getResources();
disableAllShortcuts();
setShortcutEnabled(SHORTCUT_BLOCK_NUMBER, true);
}
+ public void setFilteredNumberAsyncQueryHandler(FilteredNumberAsyncQueryHandler handler) {
+ mFilteredNumberAsyncQueryHandler = handler;
+ }
+
@Override
protected boolean isChanged(boolean showNumberShortcuts) {
return setShortcutEnabled(SHORTCUT_BLOCK_NUMBER, showNumberShortcuts || mIsQuerySipAddress);
}
+
+ public void setViewBlocked(ContactListItemView view, Integer id) {
+ view.setTag(R.id.block_id, id);
+ final int textColor = mResources.getColor(R.color.blocked_number_block_color);
+ view.getDataView().setTextColor(textColor);
+ view.getLabelView().setTextColor(textColor);
+ //TODO: Add icon
+ }
+
+ public void setViewUnblocked(ContactListItemView view) {
+ view.setTag(R.id.block_id, null);
+ final int textColor = mResources.getColor(R.color.dialtacts_secondary_text_color);
+ view.getDataView().setTextColor(textColor);
+ view.getLabelView().setTextColor(textColor);
+ //TODO: Remove icon
+ }
+
+ @Override
+ protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+ super.bindView(itemView, partition, cursor, position);
+ final ContactListItemView view = (ContactListItemView) itemView;
+ final String number = getPhoneNumber(position);
+ final String countryIso = GeoUtil.getCurrentCountryIso(mContext);
+ final String normalizedNumber =
+ FilteredNumberAsyncQueryHandler.getNormalizedNumber(number, countryIso);
+ final FilteredNumberAsyncQueryHandler.OnCheckBlockedListener onCheckListener =
+ new FilteredNumberAsyncQueryHandler.OnCheckBlockedListener() {
+ @Override
+ public void onCheckComplete(Integer id) {
+ if (id != null) {
+ setViewBlocked(view, id);
+ }
+ }
+ };
+ mFilteredNumberAsyncQueryHandler.startBlockedQuery(
+ onCheckListener, normalizedNumber, number, countryIso);
+ }
} \ No newline at end of file
diff --git a/src/com/android/dialer/list/BlockedListSearchFragment.java b/src/com/android/dialer/list/BlockedListSearchFragment.java
index d02577228..7494372fb 100644
--- a/src/com/android/dialer/list/BlockedListSearchFragment.java
+++ b/src/com/android/dialer/list/BlockedListSearchFragment.java
@@ -15,48 +15,138 @@
*/
package com.android.dialer.list;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.net.Uri;
import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Toast;
+import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.dialog.IndeterminateProgressDialog;
import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.contacts.common.list.ContactListItemView;
+import com.android.dialer.R;
+import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
+import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnCheckBlockedListener;
+import com.android.dialer.filterednumber.FilterNumberDialogFragment;
public class BlockedListSearchFragment extends RegularSearchFragment {
private static final String TAG = BlockedListSearchFragment.class.getSimpleName();
+ private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
+
+ public void setFilteredNumberAsyncQueryHandler(FilteredNumberAsyncQueryHandler handler) {
+ mFilteredNumberAsyncQueryHandler = handler;
+ }
+
@Override
protected ContactEntryListAdapter createListAdapter() {
BlockedListSearchAdapter adapter = new BlockedListSearchAdapter(getActivity());
adapter.setDisplayPhotos(true);
adapter.setUseCallableUri(usesCallableUri());
+ adapter.setFilteredNumberAsyncQueryHandler(mFilteredNumberAsyncQueryHandler);
return adapter;
}
@Override
- protected void onItemClick(int position, long id) {
- final DialerPhoneNumberListAdapter adapter = (DialerPhoneNumberListAdapter) getAdapter();
- final int shortcutType = adapter.getShortcutTypeFromPosition(position);
- final OnPhoneNumberPickerActionListener listener = getOnPhoneNumberPickerListener();
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ super.onItemClick(parent, view, position, id);
+ final int adapterPosition = position - getListView().getHeaderViewsCount();
+ final BlockedListSearchAdapter adapter = (BlockedListSearchAdapter) getAdapter();
+ final int shortcutType = adapter.getShortcutTypeFromPosition(adapterPosition);
+ final Integer blockId = (Integer) view.getTag(R.id.block_id);
final String number;
-
- if (listener == null) {
- Log.d(TAG, "getOnPhoneNumberPickerListener() returned null in onItemClick.");
- return;
- }
-
switch (shortcutType) {
case DialerPhoneNumberListAdapter.SHORTCUT_INVALID:
// Handles click on a search result, either contact or nearby places result.
- number = adapter.getPhoneNumber(position);
- listener.onPickPhoneNumber(number, false, getCallInitiationType(false));
+ number = adapter.getPhoneNumber(adapterPosition);
+ blockContactNumber(adapter, (ContactListItemView) view, number, blockId);
break;
case DialerPhoneNumberListAdapter.SHORTCUT_BLOCK_NUMBER:
// Handles click on 'Block number' shortcut to add the user query as a number.
number = adapter.getQueryString();
- listener.onPickPhoneNumber(number, false, getCallInitiationType(false));
+ blockNumber(number);
break;
default:
Log.w(TAG, "Ignoring unsupported shortcut type: " + shortcutType);
break;
}
}
+
+ // Prevent SearchFragment.onItemClicked from being called.
+ @Override
+ protected void onItemClick(int position, long id) {
+ }
+
+ private void blockNumber(final String number) {
+ final String countryIso = GeoUtil.getCurrentCountryIso(getContext());
+ final IndeterminateProgressDialog progressDialog =
+ IndeterminateProgressDialog.show(getFragmentManager(),
+ getString(R.string.checkingNumber, number), null, 500);
+ final String normalizedNumber =
+ FilteredNumberAsyncQueryHandler.getNormalizedNumber(number, countryIso);
+ if (normalizedNumber == null) {
+ progressDialog.dismiss();
+ Toast.makeText(getContext(), getString(R.string.invalidNumber, number),
+ Toast.LENGTH_SHORT).show();
+ return;
+ }
+ final OnCheckBlockedListener onCheckListener = new OnCheckBlockedListener() {
+ @Override
+ public void onCheckComplete(Integer id) {
+ progressDialog.dismiss();
+ if (id == null) {
+ final FilterNumberDialogFragment newFragment = FilterNumberDialogFragment
+ .newInstance(id, normalizedNumber, number, countryIso, number);
+ newFragment.setQueryHandler(mFilteredNumberAsyncQueryHandler);
+ newFragment.setParentView(
+ getActivity().findViewById(R.id.search_activity_container));
+ newFragment.show(
+ getFragmentManager(), FilterNumberDialogFragment.BLOCK_DIALOG_FRAGMENT);
+ } else {
+ Toast.makeText(getContext(), getString(R.string.alreadyBlocked, number),
+ Toast.LENGTH_SHORT).show();
+ }
+ }
+ };
+ mFilteredNumberAsyncQueryHandler.startBlockedQuery(
+ onCheckListener, normalizedNumber, number, countryIso);
+ }
+
+ private void blockContactNumber(final BlockedListSearchAdapter adapter,
+ final ContactListItemView view, final String number,
+ final Integer blockId) {
+ final String countryIso = GeoUtil.getCurrentCountryIso(getContext());
+ final String normalizedNumber =
+ FilteredNumberAsyncQueryHandler.getNormalizedNumber(number, countryIso);
+ if (normalizedNumber == null) {
+ Toast.makeText(getContext(), getString(R.string.invalidNumber, number),
+ Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if (blockId != null) {
+ Toast.makeText(getContext(), getString(R.string.alreadyBlocked, number),
+ Toast.LENGTH_SHORT).show();
+ return;
+ }
+ final FilterNumberDialogFragment newFragment = FilterNumberDialogFragment
+ .newInstance(blockId, normalizedNumber, number, countryIso, number);
+ newFragment.setQueryHandler(mFilteredNumberAsyncQueryHandler);
+ newFragment.setParentView(getActivity().findViewById(R.id.search_activity_container));
+ newFragment.setOnUndoBlockListener(new FilterNumberDialogFragment.OnUndoBlockListener() {
+ @Override
+ public void onUndoBlockComplete() {
+ adapter.setViewUnblocked(view);
+ }
+ });
+ newFragment.setOnBlockListener(new FilterNumberDialogFragment.OnBlockListener() {
+ @Override
+ public void onBlockComplete(Uri uri) {
+ adapter.setViewBlocked(view, Long.valueOf(ContentUris.parseId(uri)).intValue());
+ }
+ });
+ newFragment.show(getFragmentManager(), FilterNumberDialogFragment.BLOCK_DIALOG_FRAGMENT);
+ }
}