• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
<lambda>null2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.statusbar.notification.collection.render
18 
19 import android.annotation.StringRes
20 import android.content.Intent
21 import android.view.LayoutInflater
22 import android.view.View
23 import android.view.ViewGroup
24 import com.android.systemui.R
25 import com.android.systemui.plugins.ActivityStarter
26 import com.android.systemui.statusbar.notification.dagger.HeaderClickAction
27 import com.android.systemui.statusbar.notification.dagger.HeaderText
28 import com.android.systemui.statusbar.notification.dagger.NodeLabel
29 import com.android.systemui.statusbar.notification.dagger.SectionHeaderScope
30 import com.android.systemui.statusbar.notification.stack.SectionHeaderView
31 import javax.inject.Inject
32 
33 interface SectionHeaderController {
34     fun reinflateView(parent: ViewGroup)
35     val headerView: SectionHeaderView?
36     fun setOnClearAllClickListener(listener: View.OnClickListener)
37 }
38 
39 @SectionHeaderScope
40 internal class SectionHeaderNodeControllerImpl @Inject constructor(
41     @NodeLabel override val nodeLabel: String,
42     private val layoutInflater: LayoutInflater,
43     @HeaderText @StringRes private val headerTextResId: Int,
44     private val activityStarter: ActivityStarter,
45     @HeaderClickAction private val clickIntentAction: String
46 ) : NodeController, SectionHeaderController {
47 
48     private var _view: SectionHeaderView? = null
49     private var clearAllClickListener: View.OnClickListener? = null
<lambda>null50     private val onHeaderClickListener = View.OnClickListener {
51         activityStarter.startActivity(
52                 Intent(clickIntentAction),
53                 true /* onlyProvisioned */,
54                 true /* dismissShade */,
55                 Intent.FLAG_ACTIVITY_SINGLE_TOP)
56     }
57 
reinflateViewnull58     override fun reinflateView(parent: ViewGroup) {
59         var oldPos = -1
60         _view?.let { _view ->
61             _view.transientContainer?.removeView(_view)
62             if (_view.parent === parent) {
63                 oldPos = parent.indexOfChild(_view)
64                 parent.removeView(_view)
65             }
66         }
67         val inflated = layoutInflater.inflate(
68                 R.layout.status_bar_notification_section_header,
69                 parent,
70                 false /* attachToRoot */)
71                 as SectionHeaderView
72         inflated.setHeaderText(headerTextResId)
73         inflated.setOnHeaderClickListener(onHeaderClickListener)
74         clearAllClickListener?.let { inflated.setOnClearAllClickListener(it) }
75         if (oldPos != -1) {
76             parent.addView(inflated, oldPos)
77         }
78         _view = inflated
79     }
80 
81     override val headerView: SectionHeaderView?
82         get() = _view
83 
setOnClearAllClickListenernull84     override fun setOnClearAllClickListener(listener: View.OnClickListener) {
85         clearAllClickListener = listener
86         _view?.setOnClearAllClickListener(listener)
87     }
88 
89     override val view: View
90         get() = _view!!
91 }