diff options
Diffstat (limited to 'java/com/android/dialer/searchfragment/list/SearchAdapter.java')
-rw-r--r-- | java/com/android/dialer/searchfragment/list/SearchAdapter.java | 79 |
1 files changed, 69 insertions, 10 deletions
diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java index 81e8e38f7..4cb44a2db 100644 --- a/java/com/android/dialer/searchfragment/list/SearchAdapter.java +++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java @@ -16,28 +16,45 @@ package com.android.dialer.searchfragment.list; -import android.content.Context; +import android.app.Activity; +import android.content.Intent; +import android.support.annotation.VisibleForTesting; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.LayoutInflater; import android.view.ViewGroup; +import com.android.dialer.callcomposer.CallComposerActivity; +import com.android.dialer.callintent.CallInitiationType; +import com.android.dialer.callintent.CallInitiationType.Type; +import com.android.dialer.callintent.CallIntentBuilder; +import com.android.dialer.callintent.CallSpecificAppData; import com.android.dialer.common.Assert; +import com.android.dialer.constants.ActivityRequestCodes; +import com.android.dialer.dialercontact.DialerContact; +import com.android.dialer.lightbringer.LightbringerComponent; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; +import com.android.dialer.searchfragment.common.RowClickListener; import com.android.dialer.searchfragment.common.SearchCursor; import com.android.dialer.searchfragment.cp2.SearchContactViewHolder; import com.android.dialer.searchfragment.list.SearchCursorManager.RowType; import com.android.dialer.searchfragment.nearbyplaces.NearbyPlaceViewHolder; import com.android.dialer.searchfragment.remote.RemoteContactViewHolder; +import com.android.dialer.util.DialerUtils; /** RecyclerView adapter for {@link NewSearchFragment}. */ -class SearchAdapter extends RecyclerView.Adapter<ViewHolder> { +@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) +public final class SearchAdapter extends RecyclerView.Adapter<ViewHolder> + implements RowClickListener { private final SearchCursorManager searchCursorManager; - private final Context context; + private final Activity activity; private String query; - SearchAdapter(Context context, SearchCursorManager searchCursorManager) { - this.context = context; + @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) + public SearchAdapter(Activity activity, SearchCursorManager searchCursorManager) { + this.activity = activity; this.searchCursorManager = searchCursorManager; } @@ -46,18 +63,18 @@ class SearchAdapter extends RecyclerView.Adapter<ViewHolder> { switch (rowType) { case RowType.CONTACT_ROW: return new SearchContactViewHolder( - LayoutInflater.from(context).inflate(R.layout.search_contact_row, root, false)); + LayoutInflater.from(activity).inflate(R.layout.search_contact_row, root, false), this); case RowType.NEARBY_PLACES_ROW: return new NearbyPlaceViewHolder( - LayoutInflater.from(context).inflate(R.layout.search_contact_row, root, false)); + LayoutInflater.from(activity).inflate(R.layout.search_contact_row, root, false)); case RowType.CONTACT_HEADER: case RowType.DIRECTORY_HEADER: case RowType.NEARBY_PLACES_HEADER: return new HeaderViewHolder( - LayoutInflater.from(context).inflate(R.layout.header_layout, root, false)); + LayoutInflater.from(activity).inflate(R.layout.header_layout, root, false)); case RowType.DIRECTORY_ROW: return new RemoteContactViewHolder( - LayoutInflater.from(context).inflate(R.layout.search_contact_row, root, false)); + LayoutInflater.from(activity).inflate(R.layout.search_contact_row, root, false)); case RowType.INVALID: default: throw Assert.createIllegalStateFailException("Invalid RowType: " + rowType); @@ -86,7 +103,7 @@ class SearchAdapter extends RecyclerView.Adapter<ViewHolder> { } } - void setContactsCursor(SearchCursor cursor) { + public void setContactsCursor(SearchCursor cursor) { searchCursorManager.setContactsCursor(cursor); notifyDataSetChanged(); } @@ -118,4 +135,46 @@ class SearchAdapter extends RecyclerView.Adapter<ViewHolder> { notifyDataSetChanged(); } } + + @Override + public void placeVoiceCall(String phoneNumber, int ranking) { + placeCall(phoneNumber, ranking, false); + } + + @Override + public void placeVideoCall(String phoneNumber, int ranking) { + placeCall(phoneNumber, ranking, true); + } + + private void placeCall(String phoneNumber, int position, boolean isVideoCall) { + CallSpecificAppData callSpecificAppData = + CallSpecificAppData.newBuilder() + .setCallInitiationType(getCallInitiationType()) + .setPositionOfSelectedSearchResult(position) + .setCharactersInSearchString(query == null ? 0 : query.length()) + .build(); + Intent intent = + new CallIntentBuilder(phoneNumber, callSpecificAppData).setIsVideoCall(isVideoCall).build(); + DialerUtils.startActivityWithErrorToast(activity, intent); + } + + @Override + public void placeDuoCall(String phoneNumber) { + Logger.get(activity) + .logImpression(DialerImpression.Type.LIGHTBRINGER_VIDEO_REQUESTED_FROM_SEARCH); + Intent intent = + LightbringerComponent.get(activity).getLightbringer().getIntent(activity, phoneNumber); + activity.startActivityForResult(intent, ActivityRequestCodes.DIALTACTS_LIGHTBRINGER); + } + + @Override + public void openCallAndShare(DialerContact contact) { + Intent intent = CallComposerActivity.newIntent(activity, contact); + DialerUtils.startActivityWithErrorToast(activity, intent); + } + + private CallInitiationType.Type getCallInitiationType() { + // TODO(calderwoodra): add correct initiation type + return Type.REGULAR_SEARCH; + } } |