From ebd3643240df89e0e9e3bb649ae7bd16cae912db Mon Sep 17 00:00:00 2001 From: Gilles Franck Mevaa Date: Mon, 4 Jan 2016 12:25:36 -0800 Subject: New Spam-related options in call log entries. This includes small UI additions to the call log UI; Mainly, two new buttons to mark each phone number entry as a Spam number or remove the phone number from the spam list. This also includes a service definition that will be needed to render the buttons or keep them hidden. Change-Id: I7cf22f6027728ebc0dfe9e3b5b923ee70bcaadd2 --- res/layout/call_log_list_item_actions.xml | 5 ++++ .../dialer/calllog/CallLogListItemViewHolder.java | 32 +++++++++++++++++++++- .../android/dialer/service/SpamButtonRenderer.java | 23 ++++++++++++++++ src/com/android/dialerbind/ObjectFactory.java | 10 +++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/com/android/dialer/service/SpamButtonRenderer.java diff --git a/res/layout/call_log_list_item_actions.xml b/res/layout/call_log_list_item_actions.xml index ca0040589..63385eef5 100644 --- a/res/layout/call_log_list_item_actions.xml +++ b/res/layout/call_log_list_item_actions.xml @@ -129,6 +129,11 @@ + + diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java index 21f3213a6..e5ee3bc38 100644 --- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java +++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java @@ -55,10 +55,16 @@ import com.android.dialer.filterednumber.BlockNumberDialogFragment; import com.android.dialer.filterednumber.FilteredNumbersUtil; import com.android.dialer.logging.Logger; import com.android.dialer.logging.ScreenEvent; +import com.android.dialer.service.SpamButtonRenderer; import com.android.dialer.util.DialerUtils; import com.android.dialer.util.PhoneNumberUtil; import com.android.dialer.voicemail.VoicemailPlaybackLayout; import com.android.dialer.voicemail.VoicemailPlaybackPresenter; +import com.android.dialerbind.ObjectFactory; +import com.google.common.collect.Lists; + +import java.util.ArrayList; +import java.util.List; /** * This is an object containing references to views contained by the call log list item. This @@ -198,6 +204,9 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder private final int mPhotoSize; + private ViewStub mSpamViewStub; + private SpamButtonRenderer mSpamButtonRenderer; + private View.OnClickListener mExpandCollapseListener; private boolean mVoicemailPrimaryActionButtonClicked; @@ -401,6 +410,9 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder callWithNoteButtonView = actionsView.findViewById(R.id.call_with_note_action); callWithNoteButtonView.setOnClickListener(this); + + mSpamViewStub = (ViewStub) actionsView.findViewById(R.id.spam_actions_container); + mSpamButtonRenderer = ObjectFactory.newSpamButtonRenderer(mContext, mSpamViewStub); } bindActionButtons(); @@ -499,7 +511,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder } else { detailsButtonView.setVisibility(View.VISIBLE); detailsButtonView.setTag( - IntentProvider.getCallDetailIntentProvider(rowId, callIds, null)); + IntentProvider.getCallDetailIntentProvider(rowId, callIds, null)); } if (info != null && UriUtils.isEncodedContactUri(info.lookupUri)) { @@ -530,6 +542,24 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder mCallLogCache.isVoicemailNumber(accountHandle, number); callWithNoteButtonView.setVisibility( supportsCallSubject && !isVoicemailNumber ? View.VISIBLE : View.GONE); + + if(mSpamButtonRenderer != null){ + List completeLogListItems = Lists.newArrayList( + createNewContactButtonView, + addToExistingContactButtonView, + sendMessageView, + callButtonView, + callWithNoteButtonView, + detailsButtonView, + voicemailPlaybackView); + List blockedNumberVisibleViews = new ArrayList<>(); + List spamNumberVisibleViews = Lists.newArrayList(detailsButtonView); + + mSpamButtonRenderer.setCompleteListItemViews(completeLogListItems); + mSpamButtonRenderer.setFilteredNumberViews(blockedNumberVisibleViews); + mSpamButtonRenderer.setSpamFilteredViews(spamNumberVisibleViews); + mSpamButtonRenderer.render(number, countryIso); + } } /** diff --git a/src/com/android/dialer/service/SpamButtonRenderer.java b/src/com/android/dialer/service/SpamButtonRenderer.java new file mode 100644 index 000000000..843bc55d5 --- /dev/null +++ b/src/com/android/dialer/service/SpamButtonRenderer.java @@ -0,0 +1,23 @@ +package com.android.dialer.service; + +import android.view.View; + +import java.util.List; + +/** + * Interface responsible for rendering spam buttons. + */ +public interface SpamButtonRenderer { + + /** + * Renders buttons for a phone number. + */ + void render(String number, String countryIso); + + void setCompleteListItemViews(List views); + + void setSpamFilteredViews(List views); + + void setFilteredNumberViews(List views); + +} diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java index f346a7e30..d06d55e86 100644 --- a/src/com/android/dialerbind/ObjectFactory.java +++ b/src/com/android/dialerbind/ObjectFactory.java @@ -19,12 +19,16 @@ package com.android.dialerbind; import static com.android.dialer.calllog.CallLogAdapter.CallFetcher; import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewStub; import com.android.dialer.calllog.CallLogAdapter; import com.android.dialer.calllog.ContactInfoHelper; import com.android.dialer.list.RegularSearchFragment; import com.android.dialer.logging.Logger; import com.android.dialer.service.CachedNumberLookupService; +import com.android.dialer.service.SpamButtonRenderer; import com.android.dialer.voicemail.VoicemailPlaybackPresenter; /** @@ -41,6 +45,12 @@ public class ObjectFactory { return "com.android.dialer.database.filterednumberprovider"; } + public static SpamButtonRenderer newSpamButtonRenderer( + Context context, + ViewStub stub) { + return null; + } + /** * Create a new instance of the call log adapter. * @param context The context to use. -- cgit v1.2.3