blob: 366c75defd1f27da5947a9a5e85dba9fc0cb9e84 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.tv.settings.connectivity;
import android.app.Fragment;
import android.content.Intent;
import android.net.wifi.WifiConfiguration;
import android.os.Bundle;
import com.android.tv.settings.R;
import com.android.tv.settings.connectivity.FormPageDisplayer.FormPageInfo;
import com.android.tv.settings.connectivity.FormPageDisplayer.UserActivityListener;
import com.android.tv.settings.connectivity.setup.PasswordInputWizardFragment;
import com.android.tv.settings.connectivity.setup.SelectFromListWizardFragment;
import com.android.tv.settings.connectivity.setup.SelectFromListWizardFragment.ListItem;
import com.android.tv.settings.connectivity.setup.TextInputWizardFragment;
import com.android.tv.settings.form.FormPage;
import com.android.tv.settings.form.FormPageResultListener;
import com.android.tv.settings.form.FormResultListener;
import com.android.tv.settings.form.MultiPagedForm;
import java.util.ArrayList;
/**
* Common functionality for wifi multipaged forms.
*/
public abstract class WifiMultiPagedFormActivity extends MultiPagedForm
implements TextInputWizardFragment.Listener, SelectFromListWizardFragment.Listener,
AdvancedWifiOptionsFlow.PageHandler, PasswordInputWizardFragment.Listener {
@Override
protected abstract void displayPage(FormPage formPage, FormPageResultListener listener,
boolean forward);
protected abstract boolean onPageComplete(WifiFormPageType formPageType, FormPage formPage);
private FormPageDisplayer mFormPageDisplayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
setLayoutProperties(R.layout.setup_auth_activity, R.id.description, R.id.action);
mFormPageDisplayer = new FormPageDisplayer(this, getFragmentManager(), R.id.content);
super.onCreate(savedInstanceState);
}
@Override
public boolean onTextInputComplete(String text) {
return mFormPageDisplayer.onTextInputComplete(text);
}
@Override
public boolean onPasswordInputComplete(String text, boolean obfuscate) {
return mFormPageDisplayer.onPasswordInputComplete(text, obfuscate);
}
@Override
public void onListSelectionComplete(ListItem listItem) {
mFormPageDisplayer.onListSelectionComplete(listItem);
}
@Override
public void onListFocusChanged(ListItem listItem) {
mFormPageDisplayer.onListFocusChanged(listItem);
}
@Override
public void addPage(WifiFormPageType formPageType) {
addPage(formPageType.create());
}
@Override
public void removePage(FormPage formPage) {
super.removePage(formPage);
}
@Override
public boolean choiceChosen(FormPage formPage, int choiceResourceId) {
return getString(choiceResourceId).equals(formPage.getDataSummary());
}
@Override
protected void displayFormResults(ArrayList<FormPage> formPages, FormResultListener listener) {
// Don't need to display anything, just exit.
finish();
}
@Override
protected void onComplete(ArrayList<FormPage> formPages) {
// We should never reach this point.
}
@Override
protected void onCancel(ArrayList<FormPage> formPages) {
// We should never reach this point.
}
@Override
protected boolean onPageComplete(FormPage formPage) {
WifiFormPageType formPageType = getFormPageType(formPage);
// Always clear future pages.
clearAfter(formPage);
// Always clear loading pages.
if (formPageType.getDisplayType() == FormPageDisplayer.DISPLAY_TYPE_LOADING) {
removePage(formPage);
}
return onPageComplete(formPageType, formPage);
}
protected Fragment displayPage(FormPageInfo formPageInfo, String titleArgument,
String descriptionArgument,
ArrayList<SelectFromListWizardFragment.ListItem> extraChoices,
FormPage previousFormPage, UserActivityListener userActivityListener,
boolean showProgress, FormPage currentFormPage,
FormPageResultListener formPageResultListener, boolean forward, boolean emptyAllowed) {
return mFormPageDisplayer.displayPage(formPageInfo, titleArgument, descriptionArgument,
extraChoices, previousFormPage, userActivityListener, showProgress, currentFormPage,
formPageResultListener, forward, emptyAllowed);
}
protected SelectFromListWizardFragment.ListItem getListItem(FormPage formPage) {
return mFormPageDisplayer.getListItem(formPage);
}
protected void setWifiConfigurationPassword(
WifiConfiguration wifiConfiguration, WifiSecurity wifiSecurity, String password) {
if (wifiSecurity == WifiSecurity.WEP) {
int length = password.length();
// WEP-40, WEP-104, and 256-bit WEP (WEP-232?)
if ((length == 10 || length == 26 || length == 32 || length == 58)
&& password.matches("[0-9A-Fa-f]*")) {
wifiConfiguration.wepKeys[0] = password;
} else if (length == 5 || length == 13 || length == 16 || length == 29) {
wifiConfiguration.wepKeys[0] = '"' + password + '"';
}
} else {
if (wifiSecurity == WifiSecurity.PSK
&& password.length() < FormPageDisplayer.PSK_MIN_LENGTH) {
return;
}
if (password.matches("[0-9A-Fa-f]{64}")) {
wifiConfiguration.preSharedKey = password;
} else {
wifiConfiguration.preSharedKey = '"' + password + '"';
}
}
}
protected WifiFormPageType getFormPageType(FormPage formPage) {
return WifiFormPageType.valueOf(formPage.getTitle());
}
protected void addPage(WifiFormPageType formPageType, Intent intent) {
addPage(formPageType.create(intent));
}
protected void displayFragment(Fragment fragment, boolean forward) {
mFormPageDisplayer.displayFragment(fragment, forward);
}
}