blob: 1bf5536e70d1edb3c0b92b2d8e5a11cb4cd3d799 [file] [log] [blame]
roger xue843fbc42017-02-22 16:20:08 -08001/*
2 * Copyright (C) 2017 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 */
16package com.android.car.settings.wifi;
17
Lujiang Xueeaff6c32018-04-10 08:20:29 -070018import android.annotation.NonNull;
kevinjmcf8cef52017-09-18 14:53:28 -070019import android.annotation.StringRes;
Lujiang Xueeaff6c32018-04-10 08:20:29 -070020import android.car.drivingstate.CarUxRestrictions;
roger xue843fbc42017-02-22 16:20:08 -080021import android.net.wifi.WifiManager;
22import android.os.Bundle;
roger xue843fbc42017-02-22 16:20:08 -080023import android.view.View;
roger xue843fbc42017-02-22 16:20:08 -080024import android.widget.ProgressBar;
25import android.widget.Switch;
26import android.widget.TextView;
27import android.widget.ViewSwitcher;
28
Lujiang Xueeaff6c32018-04-10 08:20:29 -070029import androidx.car.widget.PagedListView;
30
roger xue843fbc42017-02-22 16:20:08 -080031import com.android.car.settings.R;
kevinjmcf8cef52017-09-18 14:53:28 -070032import com.android.car.settings.common.BaseFragment;
Lujiang Xueeaff6c32018-04-10 08:20:29 -070033import com.android.car.settings.common.CarUxRestrictionsHelper;
Aurimas Liutikas0c01e082017-12-01 16:41:40 -080034
roger xue843fbc42017-02-22 16:20:08 -080035/**
36 * Main page to host Wifi related preferences.
37 */
roger xue24b50802017-04-04 11:59:04 -070038public class WifiSettingsFragment extends BaseFragment implements CarWifiManager.Listener {
39 private static final String TAG = "WifiSettingsFragment";
roger xue843fbc42017-02-22 16:20:08 -080040
41 private CarWifiManager mCarWifiManager;
42 private AccessPointListAdapter mAdapter;
43 private Switch mWifiSwitch;
44 private ProgressBar mProgressBar;
45 private PagedListView mListView;
roger xue843fbc42017-02-22 16:20:08 -080046 private TextView mMessageView;
47 private ViewSwitcher mViewSwitcher;
Lujiang Xueeaff6c32018-04-10 08:20:29 -070048 private boolean mShowSavedApOnly;
roger xue843fbc42017-02-22 16:20:08 -080049
roger xue24b50802017-04-04 11:59:04 -070050 public static WifiSettingsFragment getInstance() {
51 WifiSettingsFragment wifiSettingsFragment = new WifiSettingsFragment();
52 Bundle bundle = BaseFragment.getBundle();
53 bundle.putInt(EXTRA_TITLE_ID, R.string.wifi_settings);
54 bundle.putInt(EXTRA_LAYOUT, R.layout.wifi_list);
55 bundle.putInt(EXTRA_ACTION_BAR_LAYOUT, R.layout.action_bar_with_toggle);
56 wifiSettingsFragment.setArguments(bundle);
57 return wifiSettingsFragment;
58 }
roger xueb65a0762017-03-24 13:20:14 -070059
Lujiang Xueeaff6c32018-04-10 08:20:29 -070060 /**
61 * Shows only saved wifi network.
62 */
63 public WifiSettingsFragment showSavedApOnly(boolean showSavedApOnly) {
64 mShowSavedApOnly = showSavedApOnly;
65 return this;
66 }
67
roger xue24b50802017-04-04 11:59:04 -070068 @Override
69 public void onActivityCreated(Bundle savedInstanceState) {
70 super.onActivityCreated(savedInstanceState);
71 mCarWifiManager = new CarWifiManager(getContext(), this /* listener */);
72
73 mProgressBar = (ProgressBar) getView().findViewById(R.id.wifi_search_progress);
74 mListView = (PagedListView) getView().findViewById(R.id.list);
75 mMessageView = (TextView) getView().findViewById(R.id.message);
76 mViewSwitcher = (ViewSwitcher) getView().findViewById(R.id.view_switcher);
roger xue843fbc42017-02-22 16:20:08 -080077 setupWifiSwitch();
78 if (mCarWifiManager.isWifiEnabled()) {
79 showList();
Lujiang Xuea1d4aea2017-10-12 10:53:01 -070080 setProgressBarVisible(true);
roger xue843fbc42017-02-22 16:20:08 -080081 } else {
82 showMessage(R.string.wifi_disabled);
83 }
roger xue843fbc42017-02-22 16:20:08 -080084 mAdapter = new AccessPointListAdapter(
roger xue24b50802017-04-04 11:59:04 -070085 getContext(),
86 mCarWifiManager,
Lujiang Xueeaff6c32018-04-10 08:20:29 -070087 mShowSavedApOnly
88 ? mCarWifiManager.getSavedAccessPoints()
89 : mCarWifiManager.getAllAccessPoints(),
90 !mShowSavedApOnly,
roger xue24b50802017-04-04 11:59:04 -070091 mFragmentController);
roger xue843fbc42017-02-22 16:20:08 -080092 mListView.setAdapter(mAdapter);
93 }
94
95 @Override
96 public void onStart() {
97 super.onStart();
98 mCarWifiManager.start();
99 }
100
101 @Override
102 public void onStop() {
103 super.onStop();
104 mCarWifiManager.stop();
105 }
106
107 @Override
Tony Mantler9fe1a512017-09-28 15:03:35 -0700108 public void onDestroy() {
109 super.onDestroy();
110 mCarWifiManager.destroy();
111 }
112
113 @Override
roger xue843fbc42017-02-22 16:20:08 -0800114 public void onAccessPointsChanged() {
115 refreshData();
116 }
117
118 @Override
119 public void onWifiStateChanged(int state) {
Fan Zhang9788bc72017-02-27 17:21:28 -0800120 mWifiSwitch.setChecked(mCarWifiManager.isWifiEnabled());
roger xue843fbc42017-02-22 16:20:08 -0800121 switch (state) {
122 case WifiManager.WIFI_STATE_ENABLING:
123 showList();
124 setProgressBarVisible(true);
125 break;
126 case WifiManager.WIFI_STATE_DISABLED:
127 setProgressBarVisible(false);
128 showMessage(R.string.wifi_disabled);
129 break;
130 default:
131 showList();
132 }
133 }
134
Lujiang Xueeaff6c32018-04-10 08:20:29 -0700135 /**
136 * This fragment will adapt to restriction, so can always be shown.
137 */
138 @Override
139 public boolean canBeShown(CarUxRestrictions carUxRestrictions) {
140 return true;
141 }
142
143 @Override
144 public void onUxRestrictionChanged(@NonNull CarUxRestrictions carUxRestrictions) {
145 mShowSavedApOnly = CarUxRestrictionsHelper.isNoSetup(carUxRestrictions);
146 refreshData();
147 }
148
roger xue843fbc42017-02-22 16:20:08 -0800149 private void setProgressBarVisible(boolean visible) {
150 if (mProgressBar != null) {
151 mProgressBar.setVisibility(visible ? View.VISIBLE : View.GONE);
152 }
153 }
154
155 private void refreshData() {
156 if (mAdapter != null) {
Lujiang Xueeaff6c32018-04-10 08:20:29 -0700157 mAdapter.updateAccessPoints(mShowSavedApOnly
158 ? mCarWifiManager.getSavedAccessPoints()
159 : mCarWifiManager.getAllAccessPoints());
roger xuea76987e2017-05-08 15:49:39 -0700160 // if the list is empty, keep showing the progress bar, the list should reset
roger xue843fbc42017-02-22 16:20:08 -0800161 // every couple seconds.
162 // TODO: Consider show a message in the list view place.
163 if (!mAdapter.isEmpty()) {
164 setProgressBarVisible(false);
165 }
166 }
Lujiang Xueeaff6c32018-04-10 08:20:29 -0700167 if (mCarWifiManager != null) {
168 mWifiSwitch.setChecked(mCarWifiManager.isWifiEnabled());
169 }
roger xue843fbc42017-02-22 16:20:08 -0800170 }
171
roger xue843fbc42017-02-22 16:20:08 -0800172 private void showMessage(@StringRes int resId) {
173 if (mViewSwitcher.getCurrentView() != mMessageView) {
174 mViewSwitcher.showNext();
175 }
176 mMessageView.setText(getResources().getString(resId));
177 }
178
179 private void showList() {
roger xueb346ade2017-04-04 11:59:04 -0700180 if (mViewSwitcher.getCurrentView() != mListView) {
roger xue843fbc42017-02-22 16:20:08 -0800181 mViewSwitcher.showPrevious();
182 }
183 }
184
185 private void setupWifiSwitch() {
roger xue24b50802017-04-04 11:59:04 -0700186 mWifiSwitch = (Switch) getActivity().findViewById(R.id.toggle_switch);
roger xue843fbc42017-02-22 16:20:08 -0800187 mWifiSwitch.setChecked(mCarWifiManager.isWifiEnabled());
Lujiang Xue262c78b2017-07-12 10:45:22 -0700188 mWifiSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
189 if (mWifiSwitch.isChecked() != mCarWifiManager.isWifiEnabled()) {
190 mCarWifiManager.setWifiEnabled(mWifiSwitch.isChecked());
191 }
roger xue843fbc42017-02-22 16:20:08 -0800192 });
193 }
194}