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 }