blob: 8c15647c50389b6897993c197fc155f21f7dffa1 [file] [log] [blame]
/*
* Copyright (C) 2020 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.notification.collection.render
import android.annotation.StringRes
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.android.systemui.R
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.statusbar.notification.dagger.HeaderClickAction
import com.android.systemui.statusbar.notification.dagger.HeaderText
import com.android.systemui.statusbar.notification.dagger.NodeLabel
import com.android.systemui.statusbar.notification.dagger.SectionHeaderScope
import com.android.systemui.statusbar.notification.stack.SectionHeaderView
import javax.inject.Inject
interface SectionHeaderController {
fun reinflateView(parent: ViewGroup)
val headerView: SectionHeaderView?
fun setClearSectionEnabled(enabled: Boolean)
fun setOnClearSectionClickListener(listener: View.OnClickListener)
}
@SectionHeaderScope
internal class SectionHeaderNodeControllerImpl @Inject constructor(
@NodeLabel override val nodeLabel: String,
private val layoutInflater: LayoutInflater,
@HeaderText @StringRes private val headerTextResId: Int,
private val activityStarter: ActivityStarter,
@HeaderClickAction private val clickIntentAction: String
) : NodeController, SectionHeaderController {
private var _view: SectionHeaderView? = null
private var clearAllButtonEnabled = false
private var clearAllClickListener: View.OnClickListener? = null
private val onHeaderClickListener = View.OnClickListener {
activityStarter.startActivity(
Intent(clickIntentAction),
true /* onlyProvisioned */,
true /* dismissShade */,
Intent.FLAG_ACTIVITY_SINGLE_TOP)
}
override fun reinflateView(parent: ViewGroup) {
var oldPos = -1
_view?.let { _view ->
_view.transientContainer?.removeView(_view)
if (_view.parent === parent) {
oldPos = parent.indexOfChild(_view)
parent.removeView(_view)
}
}
val inflated = layoutInflater.inflate(
R.layout.status_bar_notification_section_header,
parent,
false /* attachToRoot */)
as SectionHeaderView
inflated.setHeaderText(headerTextResId)
inflated.setOnHeaderClickListener(onHeaderClickListener)
clearAllClickListener?.let { inflated.setOnClearAllClickListener(it) }
if (oldPos != -1) {
parent.addView(inflated, oldPos)
}
_view = inflated
_view?.setClearSectionButtonEnabled(clearAllButtonEnabled)
}
override val headerView: SectionHeaderView?
get() = _view
override fun setClearSectionEnabled(enabled: Boolean) {
clearAllButtonEnabled = enabled
_view?.setClearSectionButtonEnabled(enabled)
}
override fun setOnClearSectionClickListener(listener: View.OnClickListener) {
clearAllClickListener = listener
_view?.setOnClearAllClickListener(listener)
}
override val view: View
get() = _view!!
}