packages/apps/Dialer/java/com/android/dialer/speeddial/FavoritesViewHolder.java

151 lines
5.4 KiB
Java

/*
* Copyright (C) 2017 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.speeddial;
import android.content.Context;
import android.provider.ContactsContract.Contacts;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewConfiguration;
import android.widget.FrameLayout;
import android.widget.QuickContactBadge;
import android.widget.TextView;
import com.android.dialer.common.Assert;
import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent;
import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
import com.android.dialer.speeddial.draghelper.SpeedDialFavoritesViewHolderOnTouchListener;
import com.android.dialer.speeddial.draghelper.SpeedDialFavoritesViewHolderOnTouchListener.OnTouchFinishCallback;
import com.android.dialer.speeddial.loader.SpeedDialUiItem;
/** ViewHolder for starred/favorite contacts in {@link SpeedDialFragment}. */
public class FavoritesViewHolder extends RecyclerView.ViewHolder
implements OnClickListener, OnLongClickListener, OnTouchFinishCallback {
private final FavoriteContactsListener listener;
private final QuickContactBadge photoView;
private final TextView nameView;
private final TextView phoneType;
private final FrameLayout videoCallIcon;
private final FrameLayout avatarContainer;
private SpeedDialUiItem speedDialUiItem;
public FavoritesViewHolder(View view, ItemTouchHelper helper, FavoriteContactsListener listener) {
super(view);
photoView = view.findViewById(R.id.avatar);
nameView = view.findViewById(R.id.name);
phoneType = view.findViewById(R.id.phone_type);
videoCallIcon = view.findViewById(R.id.video_call_container);
avatarContainer = view.findViewById(R.id.avatar_container);
view.setOnClickListener(this);
view.setOnLongClickListener(this);
view.setOnTouchListener(
new SpeedDialFavoritesViewHolderOnTouchListener(
ViewConfiguration.get(view.getContext()), helper, this, this));
photoView.setClickable(false);
this.listener = listener;
}
public void bind(Context context, SpeedDialUiItem speedDialUiItem) {
this.speedDialUiItem = Assert.isNotNull(speedDialUiItem);
Assert.checkArgument(speedDialUiItem.isStarred());
nameView.setText(speedDialUiItem.name());
Channel channel = speedDialUiItem.defaultChannel();
if (channel == null) {
channel = speedDialUiItem.getDefaultVoiceChannel();
}
if (channel != null) {
phoneType.setText(channel.label());
videoCallIcon.setVisibility(channel.isVideoTechnology() ? View.VISIBLE : View.GONE);
} else {
phoneType.setText("");
videoCallIcon.setVisibility(View.GONE);
}
GlidePhotoManagerComponent.get(context)
.glidePhotoManager()
.loadQuickContactBadge(
photoView,
PhotoInfo.newBuilder()
.setPhotoId(speedDialUiItem.photoId())
.setPhotoUri(speedDialUiItem.photoUri())
.setName(speedDialUiItem.name())
.setLookupUri(
Contacts.getLookupUri(speedDialUiItem.contactId(), speedDialUiItem.lookupKey())
.toString())
.build());
}
@Override
public void onClick(View v) {
if (speedDialUiItem.defaultChannel() != null) {
listener.onClick(speedDialUiItem.defaultChannel());
} else {
listener.onAmbiguousContactClicked(speedDialUiItem);
}
}
@Override
public boolean onLongClick(View view) {
// TODO(calderwoodra): add bounce/sin wave scale animation
listener.showContextMenu(photoView, speedDialUiItem);
return true;
}
@Override
public void onTouchFinished(boolean closeContextMenu) {
listener.onTouchFinished(closeContextMenu);
}
FrameLayout getAvatarContainer() {
return avatarContainer;
}
void onSelectedChanged(boolean selected) {
nameView.setVisibility(selected ? View.GONE : View.VISIBLE);
phoneType.setVisibility(selected ? View.GONE : View.VISIBLE);
}
/** Listener/callback for {@link FavoritesViewHolder} actions. */
public interface FavoriteContactsListener {
/** Called when the user clicks on a favorite contact that doesn't have a default number. */
void onAmbiguousContactClicked(SpeedDialUiItem speedDialUiItem);
/** Called when the user clicks on a favorite contact. */
void onClick(Channel channel);
/** Called when the user long clicks on a favorite contact. */
void showContextMenu(View view, SpeedDialUiItem speedDialUiItem);
/** Called when the user is no longer touching the favorite contact. */
void onTouchFinished(boolean closeContextMenu);
/** Called when the user drag the favorite to remove. */
void onRequestRemove(SpeedDialUiItem speedDialUiItem);
}
}