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