Home | History | Annotate | Download | only in volume
      1 /*
      2  * Copyright (C) 2019 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.systemui.volume;
     18 
     19 import android.graphics.drawable.Drawable;
     20 import android.view.View;
     21 import android.widget.ImageView;
     22 import android.widget.SeekBar;
     23 
     24 import androidx.annotation.NonNull;
     25 import androidx.recyclerview.widget.RecyclerView;
     26 
     27 import com.android.systemui.R;
     28 
     29 /** Holds all related data to represent a volume group. */
     30 public class CarVolumeItem {
     31 
     32     private Drawable mPrimaryIcon;
     33     private Drawable mSupplementalIcon;
     34     private View.OnClickListener mSupplementalIconOnClickListener;
     35     private boolean mShowSupplementalIconDivider;
     36     private int mGroupId;
     37 
     38     private int mMax;
     39     private int mProgress;
     40     private SeekBar.OnSeekBarChangeListener mOnSeekBarChangeListener;
     41 
     42     /**
     43      * Called when {@link CarVolumeItem} is bound to its ViewHolder.
     44      */
     45     void bind(CarVolumeItemViewHolder viewHolder) {
     46             viewHolder.bind(/* carVolumeItem= */ this);
     47     }
     48 
     49     /** Sets progress of seekbar. */
     50     public void setProgress(int progress) {
     51         mProgress = progress;
     52     }
     53 
     54     /** Sets max value of seekbar. */
     55     public void setMax(int max) {
     56         mMax = max;
     57     }
     58 
     59     /** Sets {@link SeekBar.OnSeekBarChangeListener}. */
     60     public void setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener listener) {
     61         mOnSeekBarChangeListener = listener;
     62     }
     63 
     64     /** Sets the primary icon. */
     65     public void setPrimaryIcon(Drawable drawable) {
     66         mPrimaryIcon = drawable;
     67     }
     68 
     69     /** Sets the supplemental icon and the visibility of the supplemental icon divider. */
     70     public void setSupplementalIcon(Drawable drawable, boolean showSupplementalIconDivider) {
     71         mSupplementalIcon = drawable;
     72         mShowSupplementalIconDivider = showSupplementalIconDivider;
     73     }
     74 
     75     /**
     76      * Gets the group id associated.
     77      */
     78     public int getGroupId() {
     79         return mGroupId;
     80     }
     81 
     82     /**
     83      * Sets the group id associated.
     84      */
     85     public void setGroupId(int groupId) {
     86         this.mGroupId = groupId;
     87     }
     88 
     89     /** Sets {@code OnClickListener} for the supplemental icon. */
     90     public void setSupplementalIconListener(View.OnClickListener listener) {
     91         mSupplementalIconOnClickListener = listener;
     92     }
     93 
     94     /** Defines the view holder which shows the information held by {@link CarVolumeItem}. */
     95     public static class CarVolumeItemViewHolder extends RecyclerView.ViewHolder {
     96 
     97         private SeekBar mSeekBar;
     98         private ImageView mPrimaryIcon;
     99         private View mSupplementalIconDivider;
    100         private ImageView mSupplementalIcon;
    101 
    102         public CarVolumeItemViewHolder(@NonNull View itemView) {
    103             super(itemView);
    104 
    105             mSeekBar = itemView.findViewById(R.id.seek_bar);
    106             mPrimaryIcon = itemView.findViewById(R.id.primary_icon);
    107             mSupplementalIcon = itemView.findViewById(R.id.supplemental_icon);
    108             mSupplementalIconDivider = itemView.findViewById(R.id.supplemental_icon_divider);
    109         }
    110 
    111         /**
    112          * Binds {@link CarVolumeItem} to the {@link CarVolumeItemViewHolder}.
    113          */
    114         void bind(CarVolumeItem carVolumeItem) {
    115             // Progress bar
    116             mSeekBar.setMax(carVolumeItem.mMax);
    117             mSeekBar.setProgress(carVolumeItem.mProgress);
    118             mSeekBar.setOnSeekBarChangeListener(carVolumeItem.mOnSeekBarChangeListener);
    119 
    120             // Primary icon
    121             mPrimaryIcon.setVisibility(View.VISIBLE);
    122             mPrimaryIcon.setImageDrawable(carVolumeItem.mPrimaryIcon);
    123 
    124             // Supplemental icon
    125             mSupplementalIcon.setVisibility(View.VISIBLE);
    126             mSupplementalIconDivider.setVisibility(
    127                     carVolumeItem.mShowSupplementalIconDivider ? View.VISIBLE : View.INVISIBLE);
    128             mSupplementalIcon.setImageDrawable(carVolumeItem.mSupplementalIcon);
    129             mSupplementalIcon.setOnClickListener(
    130                     carVolumeItem.mSupplementalIconOnClickListener);
    131             mSupplementalIcon.setClickable(
    132                     carVolumeItem.mSupplementalIconOnClickListener != null);
    133         }
    134     }
    135 }
    136