1 /*
2  * Copyright 2020 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.car.calendar;
18 
19 import static com.google.common.base.Preconditions.checkNotNull;
20 
21 import android.content.res.Resources;
22 import android.view.LayoutInflater;
23 import android.view.View;
24 import android.view.ViewGroup;
25 import android.widget.ImageView;
26 import android.widget.LinearLayout;
27 import android.widget.TextView;
28 
29 import androidx.recyclerview.widget.RecyclerView;
30 
31 import java.util.List;
32 
33 class AllDayEventsItem implements CalendarItem {
34 
35     private final List<EventCalendarItem> mAllDayEventItems;
36 
AllDayEventsItem(List<EventCalendarItem> allDayEventItems)37     AllDayEventsItem(List<EventCalendarItem> allDayEventItems) {
38         mAllDayEventItems = allDayEventItems;
39     }
40 
41     @Override
getType()42     public CalendarItem.Type getType() {
43         return Type.ALL_DAY_EVENTS;
44     }
45 
46     @Override
bind(RecyclerView.ViewHolder holder)47     public void bind(RecyclerView.ViewHolder holder) {
48         ((AllDayEventsViewHolder) holder).update(mAllDayEventItems);
49     }
50 
51     static class AllDayEventsViewHolder extends RecyclerView.ViewHolder {
52 
53         private final ImageView mExpandCollapseIcon;
54         private final TextView mTitleTextView;
55         private final Resources mResources;
56         private final LinearLayout mEventItemsView;
57         private boolean mExpanded;
58 
AllDayEventsViewHolder(ViewGroup parent)59         AllDayEventsViewHolder(ViewGroup parent) {
60             super(
61                     LayoutInflater.from(parent.getContext())
62                             .inflate(
63                                     R.layout.all_day_events_item,
64                                     parent,
65                                     /* attachToRoot= */ false));
66             mExpandCollapseIcon = checkNotNull(itemView.findViewById(R.id.expand_collapse_icon));
67             mTitleTextView = checkNotNull(itemView.findViewById(R.id.title_text));
68             mEventItemsView = checkNotNull(itemView.findViewById(R.id.events));
69 
70             mResources = parent.getResources();
71             View expandCollapseView = checkNotNull(itemView.findViewById(R.id.expand_collapse));
72             expandCollapseView.setOnClickListener(this::onToggleClick);
73         }
74 
update(List<EventCalendarItem> eventCalendarItems)75         void update(List<EventCalendarItem> eventCalendarItems) {
76             mEventItemsView.removeAllViews();
77             mExpanded = false;
78             hideEventSection();
79 
80             int size = eventCalendarItems.size();
81             mTitleTextView.setText(
82                     mResources.getQuantityString(R.plurals.all_day_title, size, size));
83 
84             for (EventCalendarItem eventCalendarItem : eventCalendarItems) {
85                 EventCalendarItem.EventViewHolder holder =
86                         new EventCalendarItem.EventViewHolder(mEventItemsView);
87                 mEventItemsView.addView(holder.itemView);
88                 eventCalendarItem.bind(holder);
89             }
90         }
91 
onToggleClick(View view)92         private void onToggleClick(View view) {
93             mExpanded = !mExpanded;
94             if (mExpanded) {
95                 showEventSection();
96             } else {
97                 hideEventSection();
98             }
99         }
100 
hideEventSection()101         private void hideEventSection() {
102             mExpandCollapseIcon.setImageResource(R.drawable.ic_navigation_expand_more_white_24dp);
103             mEventItemsView.setVisibility(View.GONE);
104         }
105 
showEventSection()106         private void showEventSection() {
107             mExpandCollapseIcon.setImageResource(R.drawable.ic_navigation_expand_less_white_24dp);
108             mEventItemsView.setVisibility(View.VISIBLE);
109         }
110     }
111 }
112