summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
diff options
context:
space:
mode:
authorlinyuh <linyuh@google.com>2018-02-27 16:49:39 -0800
committerCopybara-Service <copybara-piper@google.com>2018-02-27 17:06:14 -0800
commit4ef51165ffd5e2b9fc804b18d5bb8a49937cd44d (patch)
treebd56f76a885f5e37acb7d7e019c6dd7570805188 /java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
parent311c5250451bf5985761690568e3e70ca3b28664 (diff)
Internal cleanup for the new UI's bottom sheet.
Test: Existing tests PiperOrigin-RevId: 187254014 Change-Id: I8a57b632d45e87ad075eb8bbb25180858e890f08
Diffstat (limited to 'java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java')
-rw-r--r--java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
new file mode 100644
index 000000000..47aa1003f
--- /dev/null
+++ b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
@@ -0,0 +1,137 @@
+/*
+ * 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.
+ *
+ * <p>{@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<HistoryItemActionModule> modules;
+ private final HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo;
+ private final GlidePhotoManager glidePhotoManager;
+
+ private HistoryItemActionBottomSheet(
+ Context context,
+ HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo,
+ List<HistoryItemActionModule> 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<HistoryItemActionModule> 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();
+ }
+ }
+}