1 /* 2 * 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.Context 20 import android.content.Intent 21 import android.os.Handler 22 import android.os.Looper 23 import android.provider.Settings 24 import android.view.View 25 import com.android.internal.logging.MetricsLogger 26 import com.android.systemui.R 27 import com.android.systemui.dagger.qualifiers.Background 28 import com.android.systemui.dagger.qualifiers.Main 29 import com.android.systemui.plugins.ActivityStarter 30 import com.android.systemui.plugins.FalsingManager 31 import com.android.systemui.plugins.qs.QSIconView 32 import com.android.systemui.plugins.qs.QSTile 33 import com.android.systemui.plugins.statusbar.StatusBarStateController 34 import com.android.systemui.qs.AlphaControlledSignalTileView 35 import com.android.systemui.qs.QSHost 36 import com.android.systemui.qs.QsEventLogger 37 import com.android.systemui.qs.logging.QSLogger 38 import com.android.systemui.qs.tileimpl.QSTileImpl 39 import com.android.systemui.qs.tiles.dialog.InternetDialogFactory 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 internetDialogFactory: InternetDialogFactory, 60 private val accessPointController: AccessPointController, 61 ) : 62 QSTileImpl<QSTile.SignalState>( 63 host, 64 uiEventLogger, 65 backgroundLooper, 66 mainHandler, 67 falsingManager, 68 metricsLogger, 69 statusBarStateController, 70 activityStarter, 71 qsLogger 72 ) { 73 private var model: InternetTileModel = viewModel.tileModel.value 74 75 init { 76 InternetTileBinder.bind(lifecycle, viewModel.tileModel) { newModel -> 77 model = newModel 78 refreshState() 79 } 80 } 81 82 override fun createTileView(context: Context): QSIconView = 83 AlphaControlledSignalTileView(context) 84 85 override fun getTileLabel(): CharSequence = 86 mContext.getString(R.string.quick_settings_internet_label) 87 88 override fun newTileState(): QSTile.SignalState { 89 return QSTile.SignalState().also { it.forceExpandIcon = true } 90 } 91 92 override fun handleClick(view: View?) { 93 mainHandler.post { 94 internetDialogFactory.create( 95 aboveStatusBar = true, 96 accessPointController.canConfigMobileData(), 97 accessPointController.canConfigWifi(), 98 view, 99 ) 100 } 101 } 102 103 override fun handleUpdateState(state: QSTile.SignalState, arg: Any?) { 104 state.label = mContext.resources.getString(R.string.quick_settings_internet_label) 105 106 model.applyTo(state, mContext) 107 } 108 109 override fun getLongClickIntent(): Intent = WIFI_SETTINGS 110 111 companion object { 112 private val WIFI_SETTINGS = Intent(Settings.ACTION_WIFI_SETTINGS) 113 } 114 } 115