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