• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.dialer.historyitemactions;
18 
19 import android.content.Context;
20 import android.os.Bundle;
21 import android.support.design.widget.BottomSheetDialog;
22 import android.text.TextUtils;
23 import android.view.LayoutInflater;
24 import android.view.View;
25 import android.view.View.OnClickListener;
26 import android.view.ViewGroup;
27 import android.widget.ImageView;
28 import android.widget.LinearLayout;
29 import android.widget.TextView;
30 import com.android.dialer.common.Assert;
31 import com.android.dialer.glidephotomanager.GlidePhotoManager;
32 import java.util.List;
33 
34 /**
35  * {@link BottomSheetDialog} used to show a list of actions in a bottom sheet menu.
36  *
37  * <p>{@link #show(Context, HistoryItemPrimaryActionInfo, List, GlidePhotoManager)} should be used
38  * to create and display the menu. Modules are built using {@link HistoryItemActionModule} and some
39  * defaults are provided by {@link IntentModule} and {@link DividerModule}.
40  */
41 public class HistoryItemActionBottomSheet extends BottomSheetDialog implements OnClickListener {
42 
43   private final List<HistoryItemActionModule> modules;
44   private final HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo;
45   private final GlidePhotoManager glidePhotoManager;
46 
HistoryItemActionBottomSheet( Context context, HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo, List<HistoryItemActionModule> modules, GlidePhotoManager glidePhotoManager)47   private HistoryItemActionBottomSheet(
48       Context context,
49       HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo,
50       List<HistoryItemActionModule> modules,
51       GlidePhotoManager glidePhotoManager) {
52     super(context);
53     this.modules = modules;
54     this.historyItemPrimaryActionInfo = historyItemPrimaryActionInfo;
55     this.glidePhotoManager = glidePhotoManager;
56     setContentView(LayoutInflater.from(context).inflate(R.layout.sheet_layout, null));
57   }
58 
show( Context context, HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo, List<HistoryItemActionModule> modules, GlidePhotoManager glidePhotoManager)59   public static HistoryItemActionBottomSheet show(
60       Context context,
61       HistoryItemPrimaryActionInfo historyItemPrimaryActionInfo,
62       List<HistoryItemActionModule> modules,
63       GlidePhotoManager glidePhotoManager) {
64     HistoryItemActionBottomSheet sheet =
65         new HistoryItemActionBottomSheet(
66             context, historyItemPrimaryActionInfo, modules, glidePhotoManager);
67     sheet.show();
68     return sheet;
69   }
70 
71   @Override
onCreate(Bundle bundle)72   protected void onCreate(Bundle bundle) {
73     super.onCreate(bundle);
74     LinearLayout container = Assert.isNotNull(findViewById(R.id.action_container));
75     container.addView(getContactView(container));
76 
77     for (HistoryItemActionModule module : modules) {
78       if (module instanceof DividerModule) {
79         container.addView(getDividerView(container));
80       } else {
81         container.addView(getModuleView(container, module));
82       }
83     }
84   }
85 
getContactView(ViewGroup container)86   private View getContactView(ViewGroup container) {
87     LayoutInflater inflater = LayoutInflater.from(getContext());
88     View contactView = inflater.inflate(R.layout.contact_layout, container, false);
89 
90     // TODO(zachh): The contact image should be badged with a video icon if it is for a video call.
91     glidePhotoManager.loadQuickContactBadge(
92         contactView.findViewById(R.id.quick_contact_photo),
93         historyItemPrimaryActionInfo.photoInfo());
94 
95     TextView primaryTextView = contactView.findViewById(R.id.primary_text);
96     TextView secondaryTextView = contactView.findViewById(R.id.secondary_text);
97 
98     primaryTextView.setText(historyItemPrimaryActionInfo.primaryText());
99     if (!TextUtils.isEmpty(historyItemPrimaryActionInfo.secondaryText())) {
100       secondaryTextView.setText(historyItemPrimaryActionInfo.secondaryText());
101     } else {
102       secondaryTextView.setVisibility(View.GONE);
103       secondaryTextView.setText(null);
104     }
105     if (historyItemPrimaryActionInfo.intent() != null) {
106       contactView.setOnClickListener(
107           (view) -> {
108             getContext().startActivity(historyItemPrimaryActionInfo.intent());
109             dismiss();
110           });
111     }
112     return contactView;
113   }
114 
getDividerView(ViewGroup container)115   private View getDividerView(ViewGroup container) {
116     LayoutInflater inflater = LayoutInflater.from(getContext());
117     return inflater.inflate(R.layout.divider_layout, container, false);
118   }
119 
getModuleView(ViewGroup container, HistoryItemActionModule module)120   private View getModuleView(ViewGroup container, HistoryItemActionModule module) {
121     LayoutInflater inflater = LayoutInflater.from(getContext());
122     View moduleView = inflater.inflate(R.layout.module_layout, container, false);
123     ((TextView) moduleView.findViewById(R.id.module_text)).setText(module.getStringId());
124     ((ImageView) moduleView.findViewById(R.id.module_image))
125         .setImageResource(module.getDrawableId());
126     moduleView.setOnClickListener(this);
127     moduleView.setTag(module);
128     return moduleView;
129   }
130 
131   @Override
onClick(View view)132   public void onClick(View view) {
133     if (((HistoryItemActionModule) view.getTag()).onClick()) {
134       dismiss();
135     }
136   }
137 }
138