1 /*
2  * Copyright (C) 2015 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 package com.google.android.car.kitchensink.volume;
17 
18 import android.content.Context;
19 import android.graphics.Color;
20 import android.view.LayoutInflater;
21 import android.view.View;
22 import android.view.ViewGroup;
23 import android.widget.ArrayAdapter;
24 import android.widget.Button;
25 import android.widget.TextView;
26 
27 import com.google.android.car.kitchensink.R;
28 import com.google.android.car.kitchensink.volume.VolumeTestFragment.CarAudioZoneVolumeInfo;
29 
30 public final class CarAudioZoneVolumeAdapter extends ArrayAdapter<CarAudioZoneVolumeInfo> {
31 
32     private final Context mContext;
33     private CarAudioZoneVolumeInfo[] mVolumeList;
34     private final int mLayoutResourceId;
35     private CarAudioZoneVolumeFragment mFragment;
36 
CarAudioZoneVolumeAdapter(Context context, int layoutResourceId, CarAudioZoneVolumeInfo[] volumeList, CarAudioZoneVolumeFragment fragment)37     public CarAudioZoneVolumeAdapter(Context context,
38             int layoutResourceId, CarAudioZoneVolumeInfo[] volumeList,
39             CarAudioZoneVolumeFragment fragment) {
40         super(context, layoutResourceId, volumeList);
41         mFragment = fragment;
42         mContext = context;
43         this.mLayoutResourceId = layoutResourceId;
44         this.mVolumeList = volumeList;
45     }
46 
47     @Override
getView(int position, View convertView, ViewGroup parent)48     public View getView(int position, View convertView, ViewGroup parent) {
49         ViewHolder vh = new ViewHolder();
50         if (convertView == null) {
51             LayoutInflater inflater = LayoutInflater.from(mContext);
52             convertView = inflater.inflate(mLayoutResourceId, parent, false);
53             vh.id = convertView.findViewById(R.id.stream_id);
54             vh.maxVolume = convertView.findViewById(R.id.volume_limit);
55             vh.currentVolume = convertView.findViewById(R.id.current_volume);
56             vh.upButton = convertView.findViewById(R.id.volume_up);
57             vh.downButton = convertView.findViewById(R.id.volume_down);
58             vh.requestButton = convertView.findViewById(R.id.request);
59             convertView.setTag(vh);
60         } else {
61             vh = (ViewHolder) convertView.getTag();
62         }
63         if (mVolumeList[position] != null) {
64             vh.id.setText(mVolumeList[position].mId);
65             vh.maxVolume.setText(String.valueOf(mVolumeList[position].mMax));
66             vh.currentVolume.setText(String.valueOf(mVolumeList[position].mCurrent));
67             int color = mVolumeList[position].mHasFocus ? Color.GREEN : Color.GRAY;
68             vh.requestButton.setBackgroundColor(color);
69             if (position == 0) {
70                 vh.upButton.setVisibility(View.INVISIBLE);
71                 vh.downButton.setVisibility(View.INVISIBLE);
72                 vh.requestButton.setVisibility(View.INVISIBLE);
73             } else {
74                 vh.upButton.setVisibility(View.VISIBLE);
75                 vh.downButton.setVisibility(View.VISIBLE);
76                 vh.requestButton.setVisibility(View.VISIBLE);
77                 vh.upButton.setOnClickListener((view) -> {
78                     mFragment.adjustVolumeByOne(mVolumeList[position].mGroupId, true);
79                 });
80                 vh.downButton.setOnClickListener((view) -> {
81                     mFragment.adjustVolumeByOne(mVolumeList[position].mGroupId, false);
82                 });
83 
84                 vh.requestButton.setOnClickListener((view) -> {
85                     mFragment.requestFocus(mVolumeList[position].mGroupId);
86                 });
87             }
88         }
89         return convertView;
90     }
91 
92     @Override
getCount()93     public int getCount() {
94         return mVolumeList.length;
95     }
96 
refreshVolumes(CarAudioZoneVolumeInfo[] volumes)97     public void refreshVolumes(CarAudioZoneVolumeInfo[] volumes) {
98         mVolumeList = volumes;
99         notifyDataSetChanged();
100     }
101 
102     private static final class ViewHolder {
103         public TextView id;
104         public TextView maxVolume;
105         public TextView currentVolume;
106         public Button upButton;
107         public Button downButton;
108         public Button requestButton;
109     }
110 }
111