| /* |
| * 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) |
| } |
| } |