• 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 package com.android.settings.spa.network
17 
18 import android.content.Context
19 import android.content.pm.PackageManager
20 import androidx.compose.material.icons.Icons
21 import androidx.compose.material.icons.outlined.AirplanemodeActive
22 import androidx.compose.runtime.Composable
23 import androidx.compose.runtime.remember
24 import androidx.compose.runtime.livedata.observeAsState
25 import androidx.compose.ui.platform.LocalContext
26 import androidx.lifecycle.LiveData
27 import androidx.lifecycle.MutableLiveData
28 import com.android.settings.AirplaneModeEnabler
29 import com.android.settings.AirplaneModeEnabler.OnAirplaneModeChangedListener
30 import com.android.settings.R
31 import com.android.settingslib.spa.widget.preference.SwitchPreference
32 import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
33 import com.android.settingslib.spa.widget.ui.SettingsIcon
34 
35 @Composable
36 fun AirplaneModePreference() {
37     val context = LocalContext.current
38     val controller = remember { AirplaneModeController(context) }
39     if (!controller.isAvailable()) return
40     SwitchPreference(object : SwitchPreferenceModel {
41         override val title = context.getString(R.string.airplane_mode)
42         override val checked = controller.airplaneModeState.observeAsState(
43             initial = controller.isAirplaneModeOn()
44         )
45         override val onCheckedChange = { newChecked: Boolean ->
46             controller.setChecked(newChecked)
47         }
48         override val icon = @Composable {
49             SettingsIcon(imageVector = Icons.Outlined.AirplanemodeActive)
50         }
51     })
52 }
53 
54 private class AirplaneModeController(private val context: Context) : OnAirplaneModeChangedListener {
55     private var airplaneModeEnabler = AirplaneModeEnabler(context, this)
56     private val _airplaneModeState = MutableLiveData<Boolean>()
57     val airplaneModeState: LiveData<Boolean>
58         get() = _airplaneModeState
59 
onAirplaneModeChangednull60     override fun onAirplaneModeChanged(isAirplaneModeOn: Boolean) {
61         _airplaneModeState.postValue(isAirplaneModeOn)
62     }
63 
isAvailablenull64     fun isAvailable(): Boolean {
65         return context.resources.getBoolean(R.bool.config_show_toggle_airplane)
66                 && !context.packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
67     }
68 
isAirplaneModeOnnull69     fun isAirplaneModeOn(): Boolean {
70         return airplaneModeEnabler.isAirplaneModeOn()
71     }
72 
setCheckednull73     fun setChecked(newChecked: Boolean) {
74         if (isAirplaneModeOn() == newChecked) {
75             return
76         }
77         airplaneModeEnabler.setAirplaneMode(newChecked)
78     }
79 
80 }
81