1 /*
2  * Copyright (C) 2018 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.car.settings.wifi;
18 
19 import android.car.drivingstate.CarUxRestrictions;
20 import android.content.Context;
21 
22 import com.android.car.settings.common.FragmentController;
23 import com.android.car.settings.common.MasterSwitchPreference;
24 import com.android.car.settings.common.PreferenceController;
25 
26 /**
27  * Controller which determines if the top level entry into Wi-Fi settings should be displayed
28  * based on device capabilities.
29  */
30 public class WifiEntryPreferenceController extends PreferenceController<MasterSwitchPreference>
31         implements CarWifiManager.Listener {
32 
33     private CarWifiManager mCarWifiManager;
34 
WifiEntryPreferenceController(Context context, String preferenceKey, FragmentController fragmentController, CarUxRestrictions uxRestrictions)35     public WifiEntryPreferenceController(Context context, String preferenceKey,
36             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
37         super(context, preferenceKey, fragmentController, uxRestrictions);
38     }
39 
40     @Override
getPreferenceType()41     protected Class<MasterSwitchPreference> getPreferenceType() {
42         return MasterSwitchPreference.class;
43     }
44 
45     @Override
onCreateInternal()46     protected void onCreateInternal() {
47         mCarWifiManager = new CarWifiManager(getContext());
48         getPreference().setSwitchToggleListener((preference, isChecked) -> {
49             if (isChecked != mCarWifiManager.isWifiEnabled()) {
50                 mCarWifiManager.setWifiEnabled(isChecked);
51             }
52         });
53     }
54 
55     @Override
onStartInternal()56     protected void onStartInternal() {
57         mCarWifiManager.addListener(this);
58         mCarWifiManager.start();
59         getPreference().setSwitchChecked(mCarWifiManager.isWifiEnabled());
60     }
61 
62     @Override
onStopInternal()63     protected void onStopInternal() {
64         mCarWifiManager.removeListener(this);
65         mCarWifiManager.stop();
66     }
67 
68     @Override
onDestroyInternal()69     protected void onDestroyInternal() {
70         mCarWifiManager.destroy();
71     }
72 
73     @Override
getAvailabilityStatus()74     protected int getAvailabilityStatus() {
75         return WifiUtil.isWifiAvailable(getContext()) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
76     }
77 
78     @Override
onWifiStateChanged(int state)79     public void onWifiStateChanged(int state) {
80         getPreference().setSwitchChecked(mCarWifiManager.isWifiEnabled());
81     }
82 
83     @Override
onAccessPointsChanged()84     public void onAccessPointsChanged() {
85         // don't care.
86         return;
87     }
88 }
89