• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  * Copyright (C) 2024 Mopria Alliance, Inc.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package com.android.bips.ui
19 
20 import android.graphics.Color
21 import android.graphics.drawable.LayerDrawable
22 import android.view.LayoutInflater
23 import android.view.View
24 import android.view.ViewGroup
25 import android.widget.ImageView
26 import android.widget.ProgressBar
27 import androidx.core.graphics.BlendModeColorFilterCompat
28 import androidx.core.graphics.BlendModeCompat
29 import androidx.recyclerview.widget.RecyclerView
30 import com.android.bips.R
31 
32 /**
33  * Marker Adapter
34  *
35  * Recyclerview adapter for showing ink levels in printer information screen
36  *
37  * @property mMarkerInfoList list of marker info
38  * @constructor constructor
39  */
40 class MarkerAdapter(private val mMarkerInfoList: ArrayList<MarkerInfo>) :
41     RecyclerView.Adapter<MarkerAdapter.MarkerViewHolder>() {
42         inner class MarkerViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
43             var seekbar: ProgressBar = itemView.findViewById(R.id.seekbar)
44             var warningImage: ImageView = itemView.findViewById(R.id.warningImage)
45         }
46 
onCreateViewHoldernull47     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MarkerViewHolder {
48         val v =
49             LayoutInflater.from(parent.context).inflate(R.layout.item_marker_type, parent, false)
50         return MarkerViewHolder(v)
51     }
52 
onBindViewHoldernull53     override fun onBindViewHolder(holder: MarkerViewHolder, position: Int) {
54         with(mMarkerInfoList[position]) {
55             holder.seekbar.max = markerHighLevel
56             val progressBarDrawable = holder.seekbar.progressDrawable as LayerDrawable
57             progressBarDrawable.getDrawable(0).colorFilter =
58                 BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
59                     Color.parseColor(BACKGROUND_COLOR),
60                     BlendModeCompat.SRC_IN
61                 )
62             progressBarDrawable.getDrawable(1).colorFilter =
63                 BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
64                     Color.parseColor(markerColor),
65                     BlendModeCompat.SRC_IN
66                 )
67             // Set progress level on a scale of 0-10000
68             progressBarDrawable.getDrawable(1).level =
69                 if (markerHighLevel != 0 && markerLevel > 1) {
70                     markerLevel * 10000 / markerHighLevel
71                 } else {
72                     100 // set 1% as minimum level
73                 }
74 
75             if (markerLevel <= markerLowLevel) {
76                 holder.warningImage.visibility = View.VISIBLE
77             } else {
78                 holder.warningImage.visibility = View.INVISIBLE
79             }
80         }
81     }
82 
getItemCountnull83     override fun getItemCount(): Int {
84         return mMarkerInfoList.size
85     }
86 
87     companion object {
88         /** Seekbar background */
89         private const val BACKGROUND_COLOR = "#898383"
90     }
91 }