@@ -21,6 +21,7 @@ import android.os.Handler
2121import android.os.Looper
2222import android.provider.Settings
2323import android.widget.Button
24+ import com.android.settingslib.net.DataUsageController
2425import com.android.internal.logging.MetricsLogger
2526import com.android.systemui.animation.Expandable
2627import com.android.systemui.dagger.qualifiers.Background
@@ -36,8 +37,11 @@ import com.android.systemui.qs.logging.QSLogger
3637import com.android.systemui.qs.tileimpl.QSTileImpl
3738import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
3839import com.android.systemui.qs.tiles.dialog.InternetDialogManager
40+ import com.android.systemui.qs.tiles.dialog.WifiStateWorker
3941import com.android.systemui.res.R
42+ import com.android.systemui.Prefs
4043import com.android.systemui.statusbar.connectivity.AccessPointController
44+ import com.android.systemui.statusbar.connectivity.NetworkController
4145import com.android.systemui.statusbar.pipeline.shared.ui.binder.InternetTileBinder
4246import com.android.systemui.statusbar.pipeline.shared.ui.model.InternetTileModel
4347import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.InternetTileViewModel
@@ -59,6 +63,8 @@ constructor(
5963 private val internetDialogManager: InternetDialogManager ,
6064 private val accessPointController: AccessPointController ,
6165 private val internetDetailsViewModelFactory: InternetDetailsViewModel .Factory ,
66+ private val wifiStateWorker: WifiStateWorker ,
67+ private val networkController: NetworkController
6268) :
6369 QSTileImpl <QSTile .BooleanState >(
6470 host,
@@ -72,6 +78,25 @@ constructor(
7278 qsLogger,
7379 ) {
7480 private var model: InternetTileModel = viewModel.tileModel.value
81+ private val dataUsageController: DataUsageController = networkController.mobileDataController
82+
83+ private var dataEnabled: Boolean
84+ get() = dataUsageController.isMobileDataEnabled()
85+ set(value) {
86+ dataUsageController.setMobileDataEnabled(value)
87+ }
88+
89+ private var wifiEnabled: Boolean
90+ get() = wifiStateWorker.isWifiEnabled()
91+ set(value) {
92+ wifiStateWorker.setWifiEnabled(value)
93+ }
94+
95+ private var lastUsedModel: Int
96+ get() = Prefs .getInt(mContext, " internet_tile_model" , WIFI )
97+ set(value) {
98+ Prefs .putInt(mContext, " internet_tile_model" , value)
99+ }
75100
76101 init {
77102 InternetTileBinder .bind(lifecycle, viewModel.tileModel) { newModel ->
@@ -84,7 +109,10 @@ constructor(
84109 mContext.getString(R .string.quick_settings_internet_label)
85110
86111 override fun newTileState (): QSTile .BooleanState {
87- return QSTile .BooleanState ().also { it.forceExpandIcon = true }
112+ return QSTile .BooleanState ().also {
113+ it.forceExpandIcon = true
114+ it.handlesSecondaryClick = true
115+ }
88116 }
89117
90118 override fun handleClick (expandable : Expandable ? ) {
@@ -98,6 +126,26 @@ constructor(
98126 }
99127 }
100128
129+ override fun handleSecondaryClick (expandable : Expandable ? ) {
130+ when {
131+ wifiEnabled -> {
132+ wifiEnabled = false
133+ lastUsedModel = WIFI
134+ }
135+ dataEnabled -> {
136+ dataEnabled = false
137+ lastUsedModel = DATA
138+ }
139+ else -> {
140+ if (lastUsedModel == WIFI ) {
141+ wifiEnabled = true
142+ } else {
143+ dataEnabled = true
144+ }
145+ }
146+ }
147+ }
148+
101149 override fun getDetailsViewModel (): TileDetailsViewModel {
102150 return internetDetailsViewModelFactory.create()
103151 }
@@ -113,5 +161,7 @@ constructor(
113161
114162 companion object {
115163 private val WIFI_SETTINGS = Intent (Settings .ACTION_WIFI_SETTINGS )
164+ const val WIFI = 0
165+ const val DATA = 1
116166 }
117167}
0 commit comments