blob: 37140ec2aa3235fab6bd0e515f9dcb9efc321e86 [file] [log] [blame]
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.android.systemui.statusbar
import android.annotation.IntRange
import android.annotation.SuppressLint
import android.content.Context
import android.content.res.Configuration
import android.util.AttributeSet
import android.view.View
import android.widget.FrameLayout
import android.widget.LinearLayout
import com.android.settingslib.Utils
import com.android.systemui.R
import com.android.systemui.battery.BatteryMeterView
import com.android.systemui.statusbar.events.BackgroundAnimatableView
class BatteryStatusChip @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
FrameLayout(context, attrs), BackgroundAnimatableView {
private val roundedContainer: LinearLayout
private val batteryMeterView: BatteryMeterView
override val contentView: View
get() = batteryMeterView
init {
inflate(context, R.layout.battery_status_chip, this)
roundedContainer = findViewById(R.id.rounded_container)
batteryMeterView = findViewById(R.id.battery_meter_view)
updateResources()
}
/**
* When animating as a chip in the status bar, we want to animate the width for the rounded
* container. We have to subtract our own top and left offset because the bounds come to us as
* absolute on-screen bounds.
*/
override fun setBoundsForAnimation(l: Int, t: Int, r: Int, b: Int) {
roundedContainer.setLeftTopRightBottom(l - left, t - top, r - left, b - top)
}
fun setBatteryLevel(@IntRange(from = 0, to = 100) batteryLevel: Int) {
batteryMeterView.setForceShowPercent(true)
batteryMeterView.onBatteryLevelChanged(batteryLevel, true)
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
updateResources()
}
@SuppressLint("UseCompatLoadingForDrawables")
private fun updateResources() {
val primaryColor =
Utils.getColorAttrDefaultColor(context, com.android.internal.R.attr.colorPrimary)
val textColorSecondary =
Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorSecondary)
batteryMeterView.updateColors(primaryColor, textColorSecondary, primaryColor)
roundedContainer.background = mContext.getDrawable(R.drawable.statusbar_chip_bg)
}
}