• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 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.tv.settings.connectivity;
18 
19 import android.app.Fragment;
20 import android.app.FragmentTransaction;
21 import android.content.Context;
22 import android.net.wifi.WifiManager;
23 import android.net.wifi.WifiManager.WpsCallback;
24 import android.net.wifi.WpsInfo;
25 import android.os.Bundle;
26 
27 import com.android.tv.settings.R;
28 import com.android.tv.settings.connectivity.setup.SelectFromListWizardFragment;
29 import com.android.tv.settings.dialog.old.DialogActivity;
30 import com.android.tv.settings.util.ThemeHelper;
31 
32 import java.util.ArrayList;
33 
34 public class WpsConnectionActivity extends DialogActivity
35         implements SelectFromListWizardFragment.Listener, TimedMessageWizardFragment.Listener {
36 
37     private static final String WPS_FRAGMENT_TAG = "wps_fragment_tag";
38 
39     private WifiManager mWifiManager;
40     private boolean mWpsComplete;
41     private boolean mActive;
42 
43     private final WpsCallback mWpsCallback = new WpsCallback() {
44         @Override
45         public void onStarted(String pin) {
46             if (pin != null && mActive) {
47                 displayFragment(createEnterPinFragment(pin), true);
48             }
49         }
50 
51         @Override
52         public void onSucceeded() {
53             mWpsComplete = true;
54 
55             if (!mActive) {
56                 return;
57             }
58 
59             displayFragment(createSuccessFragment(), true);
60         }
61 
62         @Override
63         public void onFailed(int reason) {
64             mWpsComplete = true;
65 
66             if (!mActive) {
67                 return;
68             }
69 
70             String errorMessage;
71             switch (reason) {
72                 case WifiManager.WPS_OVERLAP_ERROR:
73                     errorMessage = getString(R.string.wifi_wps_failed_overlap);
74                     break;
75                 case WifiManager.WPS_WEP_PROHIBITED:
76                     errorMessage = getString(R.string.wifi_wps_failed_wep);
77                     break;
78                 case WifiManager.WPS_TKIP_ONLY_PROHIBITED:
79                     errorMessage = getString(R.string.wifi_wps_failed_tkip);
80                     break;
81                 case WifiManager.IN_PROGRESS:
82                     mWifiManager.cancelWps(null);
83                     startWps();
84                     return;
85                 case WifiManager.WPS_TIMED_OUT:
86                     startWps();
87                     return;
88                 default:
89                     errorMessage = getString(R.string.wifi_wps_failed_generic);
90                     break;
91             }
92             displayFragment(createErrorFragment(errorMessage), true);
93         }
94     };
95 
96     @Override
onCreate(Bundle savedInstanceState)97     protected void onCreate(Bundle savedInstanceState) {
98         setTheme(ThemeHelper.getThemeResource(getIntent()));
99         setLayoutProperties(R.layout.setup_auth_activity, R.id.description, R.id.action);
100         super.onCreate(savedInstanceState);
101         mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
102 
103         if (ThemeHelper.fromSetupWizard(getIntent())) {
104             setTitle(getResources().getString(R.string.wifi_wps_title));
105         }
106     }
107 
108     @Override
onStart()109     protected void onStart() {
110         super.onStart();
111         // Must be set before all other actions.
112         mActive = true;
113 
114         startWps();
115     }
116 
117     @Override
onStop()118     protected void onStop() {
119         super.onStop();
120         mActive = false;
121 
122         if (!mWpsComplete) {
123             mWifiManager.cancelWps(null);
124         }
125     }
126 
127     @Override
onTimedMessageCompleted()128     public void onTimedMessageCompleted() {
129         setResult(RESULT_OK);
130         finish();
131     }
132 
133     @Override
onListSelectionComplete(SelectFromListWizardFragment.ListItem listItem)134     public void onListSelectionComplete(SelectFromListWizardFragment.ListItem listItem) {
135         startWps();
136     }
137 
138     @Override
onListFocusChanged(SelectFromListWizardFragment.ListItem listItem)139     public void onListFocusChanged(SelectFromListWizardFragment.ListItem listItem) {
140         // Do nothing.
141     }
142 
startWps()143     private void startWps() {
144         Fragment currentFragment = getFragmentManager().findFragmentByTag(WPS_FRAGMENT_TAG);
145         if (!(currentFragment instanceof WpsScanningFragment)) {
146             displayFragment(createWpsScanningFragment(), true);
147         }
148         mWpsComplete = false;
149         WpsInfo wpsConfig = new WpsInfo();
150         wpsConfig.setup = WpsInfo.PBC;
151         mWifiManager.startWps(wpsConfig, mWpsCallback);
152     }
153 
createWpsScanningFragment()154     private Fragment createWpsScanningFragment() {
155         return WpsScanningFragment.newInstance();
156     }
157 
createEnterPinFragment(String pin)158     private Fragment createEnterPinFragment(String pin) {
159         return WpsPinFragment.newInstance(pin);
160     }
161 
createErrorFragment(String errorMessage)162     private Fragment createErrorFragment(String errorMessage) {
163         SelectFromListWizardFragment.ListItem retryListItem =
164                 new SelectFromListWizardFragment.ListItem(
165                         getString(R.string.wifi_wps_retry_scan), 0);
166         ArrayList<SelectFromListWizardFragment.ListItem> listItems = new ArrayList<>();
167         listItems.add(retryListItem);
168         return SelectFromListWizardFragment.newInstance(errorMessage, null, listItems,
169                 retryListItem);
170     }
171 
createSuccessFragment()172     private Fragment createSuccessFragment() {
173         return TimedMessageWizardFragment.newInstance(
174                 getString(R.string.wifi_setup_connection_success));
175     }
176 
displayFragment(Fragment fragment, boolean forward)177     private void displayFragment(Fragment fragment, boolean forward) {
178         FragmentTransaction transaction = getFragmentManager().beginTransaction();
179         if (forward) {
180             transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
181         } else {
182             transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
183         }
184         transaction.replace(R.id.content, fragment, WPS_FRAGMENT_TAG).commit();
185     }
186 }
187