/* * 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.historyitemactions; import android.content.Context; 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.glidephotomanager.GlidePhotoManager; import java.util.List; /** * {@link BottomSheetDialog} used to show a list of actions in a bottom sheet menu. * *

{@link #show(Context, HistoryItemPrimaryActionInfo, List, GlidePhotoManager)} should be used * to create and display the menu. Modules are built using {@link HistoryItemActionModule} and some * defaults are provided by {@link IntentModule} and {@link DividerModule}. */ public class HistoryItemActionBottomSheet extends BottomSheetDialog implements OnClickListener { private final List modules; private final HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo; private final GlidePhotoManager glidePhotoManager; private HistoryItemActionBottomSheet( Context context, HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo, List modules, GlidePhotoManager glidePhotoManager) { super(context); this.modules = modules; this.historyItemPrimaryActionInfo = historyItemPrimaryActionInfo; this.glidePhotoManager = glidePhotoManager; setContentView(LayoutInflater.from(context).inflate(R.layout.sheet_layout, null)); } public static HistoryItemActionBottomSheet show( Context context, HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo, List modules, GlidePhotoManager glidePhotoManager) { HistoryItemActionBottomSheet sheet = new HistoryItemActionBottomSheet( context, historyItemPrimaryActionInfo, modules, glidePhotoManager); 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 (HistoryItemActionModule module : modules) { if (module instanceof DividerModule) { container.addView(getDividerView(container)); } else { container.addView(getModuleView(container, module)); } } } private View getContactView(ViewGroup container) { LayoutInflater inflater = LayoutInflater.from(getContext()); View contactView = inflater.inflate(R.layout.contact_layout, container, false); // TODO(zachh): The contact image should be badged with a video icon if it is for a video call. glidePhotoManager.loadQuickContactBadge( contactView.findViewById(R.id.quick_contact_photo), historyItemPrimaryActionInfo.photoInfo()); TextView primaryTextView = contactView.findViewById(R.id.primary_text); TextView secondaryTextView = contactView.findViewById(R.id.secondary_text); primaryTextView.setText(historyItemPrimaryActionInfo.primaryText()); if (!TextUtils.isEmpty(historyItemPrimaryActionInfo.secondaryText())) { secondaryTextView.setText(historyItemPrimaryActionInfo.secondaryText()); } else { secondaryTextView.setVisibility(View.GONE); secondaryTextView.setText(null); } if (historyItemPrimaryActionInfo.intent() != null) { contactView.setOnClickListener( (view) -> { getContext().startActivity(historyItemPrimaryActionInfo.intent()); dismiss(); }); } 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, HistoryItemActionModule 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 (((HistoryItemActionModule) view.getTag()).onClick()) { dismiss(); } } }