/*
* 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.contactactions;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.BottomSheetDialog;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.dialer.common.Assert;
import com.android.dialer.contactphoto.ContactPhotoManager;
import com.android.dialer.dialercontact.DialerContact;
import java.util.List;
/**
* {@link BottomSheetDialog} used for building a list of contact actions in a bottom sheet menu.
*
*
{@link #show(Context, DialerContact, List)} should be used to create and display the menu.
* Modules are built using {@link ContactActionModule} and some defaults are provided by {@link
* IntentModule} and {@link DividerModule}.
*/
public class ContactActionBottomSheet extends BottomSheetDialog implements OnClickListener {
private final List modules;
private final DialerContact contact;
private ContactActionBottomSheet(
Context context, DialerContact contact, List modules) {
super(context);
this.modules = modules;
this.contact = contact;
setContentView(LayoutInflater.from(context).inflate(R.layout.sheet_layout, null));
}
public static ContactActionBottomSheet show(
Context context, DialerContact contact, List modules) {
ContactActionBottomSheet sheet = new ContactActionBottomSheet(context, contact, modules);
sheet.show();
return sheet;
}
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
LinearLayout container = Assert.isNotNull(findViewById(R.id.action_container));
container.addView(getContactView(container));
for (ContactActionModule module : modules) {
if (module instanceof DividerModule) {
container.addView(getDividerView(container));
} else {
container.addView(getModuleView(container, module));
}
}
}
// TODO(calderwoodra): add on click action to contact.
private View getContactView(ViewGroup container) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View contactView = inflater.inflate(R.layout.contact_layout, container, false);
ContactPhotoManager.getInstance(getContext())
.loadDialerThumbnailOrPhoto(
contactView.findViewById(R.id.quick_contact_photo),
contact.hasContactUri() ? Uri.parse(contact.getContactUri()) : null,
contact.getPhotoId(),
contact.hasPhotoUri() ? Uri.parse(contact.getPhotoUri()) : null,
contact.getNameOrNumber(),
contact.getContactType());
TextView nameView = contactView.findViewById(R.id.contact_name);
TextView numberView = contactView.findViewById(R.id.phone_number);
nameView.setText(contact.getNameOrNumber());
if (!TextUtils.isEmpty(contact.getDisplayNumber())) {
numberView.setVisibility(View.VISIBLE);
String secondaryInfo =
TextUtils.isEmpty(contact.getNumberLabel())
? contact.getDisplayNumber()
: getContext()
.getString(
com.android.contacts.common.R.string.call_subject_type_and_number,
contact.getNumberLabel(),
contact.getDisplayNumber());
numberView.setText(secondaryInfo);
} else {
numberView.setVisibility(View.GONE);
numberView.setText(null);
}
return contactView;
}
private View getDividerView(ViewGroup container) {
LayoutInflater inflater = LayoutInflater.from(getContext());
return inflater.inflate(R.layout.divider_layout, container, false);
}
private View getModuleView(ViewGroup container, ContactActionModule module) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View moduleView = inflater.inflate(R.layout.module_layout, container, false);
((TextView) moduleView.findViewById(R.id.module_text)).setText(module.getStringId());
((ImageView) moduleView.findViewById(R.id.module_image))
.setImageResource(module.getDrawableId());
moduleView.setOnClickListener(this);
moduleView.setTag(module);
return moduleView;
}
@Override
public void onClick(View view) {
if (((ContactActionModule) view.getTag()).onClick()) {
dismiss();
}
}
}