• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
<lambda>null2  * Copyright (C) 2023 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.qs.tiles
18 
19 import android.content.Intent
20 import android.os.Handler
21 import android.os.Looper
22 import android.provider.Settings
23 import android.widget.Button
24 import com.android.internal.logging.MetricsLogger
25 import com.android.systemui.animation.Expandable
26 import com.android.systemui.dagger.qualifiers.Background
27 import com.android.systemui.dagger.qualifiers.Main
28 import com.android.systemui.plugins.ActivityStarter
29 import com.android.systemui.plugins.FalsingManager
30 import com.android.systemui.plugins.qs.QSTile
31 import com.android.systemui.plugins.qs.TileDetailsViewModel
32 import com.android.systemui.plugins.statusbar.StatusBarStateController
33 import com.android.systemui.qs.QSHost
34 import com.android.systemui.qs.QsEventLogger
35 import com.android.systemui.qs.logging.QSLogger
36 import com.android.systemui.qs.tileimpl.QSTileImpl
37 import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
38 import com.android.systemui.qs.tiles.dialog.InternetDialogManager
39 import com.android.systemui.res.R
40 import com.android.systemui.statusbar.connectivity.AccessPointController
41 import com.android.systemui.statusbar.pipeline.shared.ui.binder.InternetTileBinder
42 import com.android.systemui.statusbar.pipeline.shared.ui.model.InternetTileModel
43 import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.InternetTileViewModel
44 import javax.inject.Inject
45 
46 class InternetTileNewImpl
47 @Inject
48 constructor(
49     host: QSHost,
50     uiEventLogger: QsEventLogger,
51     @Background backgroundLooper: Looper,
52     @Main private val mainHandler: Handler,
53     falsingManager: FalsingManager,
54     metricsLogger: MetricsLogger,
55     statusBarStateController: StatusBarStateController,
56     activityStarter: ActivityStarter,
57     qsLogger: QSLogger,
58     viewModel: InternetTileViewModel,
59     private val internetDialogManager: InternetDialogManager,
60     private val accessPointController: AccessPointController,
61     private val internetDetailsViewModelFactory: InternetDetailsViewModel.Factory,
62 ) :
63     QSTileImpl<QSTile.BooleanState>(
64         host,
65         uiEventLogger,
66         backgroundLooper,
67         mainHandler,
68         falsingManager,
69         metricsLogger,
70         statusBarStateController,
71         activityStarter,
72         qsLogger,
73     ) {
74     private var model: InternetTileModel = viewModel.tileModel.value
75 
76     init {
77         InternetTileBinder.bind(lifecycle, viewModel.tileModel) { newModel ->
78             model = newModel
79             refreshState()
80         }
81     }
82 
83     override fun getTileLabel(): CharSequence =
84         mContext.getString(R.string.quick_settings_internet_label)
85 
86     override fun newTileState(): QSTile.BooleanState {
87         return QSTile.BooleanState().also { it.forceExpandIcon = true }
88     }
89 
90     override fun handleClick(expandable: Expandable?) {
91         mainHandler.post {
92             internetDialogManager.create(
93                 aboveStatusBar = true,
94                 accessPointController.canConfigMobileData(),
95                 accessPointController.canConfigWifi(),
96                 expandable,
97             )
98         }
99     }
100 
101     override fun getDetailsViewModel(): TileDetailsViewModel {
102         return internetDetailsViewModelFactory.create()
103     }
104 
105     override fun handleUpdateState(state: QSTile.BooleanState, arg: Any?) {
106         state.label = mContext.resources.getString(R.string.quick_settings_internet_label)
107         state.expandedAccessibilityClassName = Button::class.java.name
108 
109         model.applyTo(state, mContext)
110     }
111 
112     override fun getLongClickIntent(): Intent = WIFI_SETTINGS
113 
114     companion object {
115         private val WIFI_SETTINGS = Intent(Settings.ACTION_WIFI_SETTINGS)
116     }
117 }
118