Home | History | Annotate | Download | only in connectivity
      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 com.android.tv.settings.R;
     20 import com.android.tv.settings.connectivity.setup.SelectFromListWizardFragment;
     21 import com.android.tv.settings.connectivity.setup.TextInputWizardFragment;
     22 import com.android.tv.settings.form.FormPage;
     23 
     24 import android.content.Context;
     25 import android.content.Intent;
     26 
     27 import java.util.ArrayList;
     28 
     29 /**
     30  * Wifi form pages.
     31  */
     32 public enum WifiFormPageType implements FormPageDisplayer.FormPageInfo {
     33     CHOOSE_NETWORK(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, R.string.title_select_wifi_network,
     34             0, new int[] { R.string.other_network },
     35             new int[] { R.drawable.ic_menu_add }),
     36     ENTER_SSID(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_ssid, 0,
     37             TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     38     CHOOSE_SECURITY(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, R.string.security_type, 0,
     39             new int[] { R.string.wifi_security_type_none, R.string.wifi_security_type_wep,
     40             R.string.wifi_security_type_wpa, R.string.wifi_security_type_eap }),
     41     ENTER_PASSWORD(FormPageDisplayer.DISPLAY_TYPE_PASSWORD_INPUT,
     42             R.string.wifi_setup_input_password, 0, 0),
     43     CONNECT(FormPageDisplayer.DISPLAY_TYPE_LOADING, R.string.wifi_connecting, 0),
     44     CONNECT_FAILED(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     45             R.string.title_wifi_could_not_connect, 0, new int[] { R.string.wifi_action_try_again,
     46             R.string.wifi_action_view_available_networks }),
     47     CONNECT_TIMEOUT(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     48             R.string.title_wifi_could_not_connect_timeout, 0, new int[] {
     49             R.string.wifi_action_try_again, R.string.wifi_action_view_available_networks }),
     50     CONNECT_AUTHENTICATION_FAILURE(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     51             R.string.title_wifi_could_not_connect_authentication_failure, 0, new int[] {
     52             R.string.wifi_action_try_again, R.string.wifi_action_view_available_networks }),
     53     CONNECT_REJECTED_BY_AP(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     54             R.string.title_wifi_could_not_connect_ap_reject, 0, new int[] {
     55             R.string.wifi_action_try_again, R.string.wifi_action_view_available_networks }),
     56     SAVE(FormPageDisplayer.DISPLAY_TYPE_LOADING, R.string.wifi_saving, 0),
     57     SAVE_FAILED(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     58             R.string.title_wifi_could_not_save, 0, new int[] { R.string.wifi_action_ok }),
     59     SAVE_SUCCESS(FormPageDisplayer.DISPLAY_TYPE_LOADING, R.string.wifi_setup_save_success, 0),
     60     SUCCESS(FormPageDisplayer.DISPLAY_TYPE_LOADING, R.string.wifi_setup_connection_success, 0),
     61     SUMMARY_CONNECTED_WIFI(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     62             R.string.wifi_summary_title_connected,
     63             R.string.wifi_summary_description_connected_to_wifi_network, new int[] {
     64             R.string.wifi_action_dont_change_network, R.string.wifi_action_change_network }),
     65     SUMMARY_CONNECTED_NON_WIFI(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     66             R.string.wifi_summary_title_connected, 0, new int[] { R.string.wifi_action_ok }),
     67     SUMMARY_NOT_CONNECTED(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     68             R.string.wifi_summary_title_not_connected, 0, new int[] { R.string.wifi_action_ok }),
     69     ADVANCED_OPTIONS(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     70             R.string.title_wifi_advanced_options, 0, new int[] { R.string.wifi_action_advanced_no,
     71             R.string.wifi_action_advanced_yes }),
     72     PROXY_SETTINGS(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, R.string.title_wifi_proxy_settings,
     73             R.string.proxy_warning_limited_support, new int[] { R.string.wifi_action_proxy_none,
     74             R.string.wifi_action_proxy_manual }),
     75     PROXY_HOSTNAME(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_proxy_hostname,
     76             R.string.proxy_hostname_hint, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     77     PROXY_PORT(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_proxy_port,
     78             R.string.proxy_port_hint, TextInputWizardFragment.INPUT_TYPE_NUMERIC),
     79     PROXY_BYPASS(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_proxy_bypass,
     80             R.string.proxy_exclusionlist_hint, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     81     IP_SETTINGS(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, R.string.title_wifi_ip_settings, 0,
     82             new int[] { R.string.wifi_action_dhcp, R.string.wifi_action_static }),
     83     IP_ADDRESS(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_ip_address,
     84             R.string.wifi_ip_address_hint, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     85     GATEWAY(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_gateway,
     86             R.string.wifi_gateway_hint, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     87     NETWORK_PREFIX_LENGTH(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT,
     88             R.string.title_wifi_network_prefix_length, R.string.wifi_network_prefix_length_hint,
     89             TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     90     DNS1(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_dns1,
     91             R.string.wifi_dns1_hint, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     92     DNS2(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_dns2,
     93             R.string.wifi_dns2_hint, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS),
     94     PROXY_SETTINGS_INVALID(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     95             R.string.title_wifi_proxy_settings_invalid, 0, new int[] {
     96             R.string.wifi_action_try_again }),
     97     IP_SETTINGS_INVALID(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE,
     98             R.string.title_wifi_ip_settings_invalid, 0, new int[] {
     99             R.string.wifi_action_try_again }),
    100     KNOWN_NETWORK(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, R.string.title_wifi_known_network, 0,
    101             new int[] { R.string.wifi_connect, R.string.wifi_forget_network }),
    102     WPS(FormPageDisplayer.DISPLAY_TYPE_LOADING, 0, 0);
    103 
    104     private final int mDisplayType;
    105     private final int mTitleResource;
    106     private final int mDescriptionResource;
    107     private final int mInputType;
    108     private final int[] mDefaultListItemTitles;
    109     private final int[] mDefaultListItemIcons;
    110 
    111     private WifiFormPageType(int displayType, int titleResource, int descriptionResource) {
    112         this(displayType, titleResource, descriptionResource,
    113                 TextInputWizardFragment.INPUT_TYPE_NORMAL);
    114     }
    115 
    116     private WifiFormPageType(int displayType, int titleResource, int descriptionResource,
    117             int textType) {
    118         mDisplayType = displayType;
    119         mTitleResource = titleResource;
    120         mDescriptionResource = descriptionResource;
    121         mInputType = textType;
    122         mDefaultListItemTitles = null;
    123         mDefaultListItemIcons = null;
    124     }
    125 
    126     private WifiFormPageType(int displayType, int titleResource, int descriptionResource,
    127             int[] defaultListItemTitles) {
    128         this(displayType, titleResource, descriptionResource, defaultListItemTitles, null);
    129     }
    130 
    131     private WifiFormPageType(int displayType, int titleResource, int descriptionResource,
    132             int[] defaultListItemTitles, int[] defaultListItemIcons) {
    133         mDisplayType = displayType;
    134         mTitleResource = titleResource;
    135         mDescriptionResource = descriptionResource;
    136         mInputType = TextInputWizardFragment.INPUT_TYPE_NORMAL;
    137         mDefaultListItemTitles = defaultListItemTitles;
    138         mDefaultListItemIcons = defaultListItemIcons;
    139         if (mDefaultListItemTitles != null && mDefaultListItemIcons != null
    140                 && mDefaultListItemTitles.length != mDefaultListItemIcons.length) {
    141             throw new IllegalArgumentException("Form page type " + name()
    142                     + " had title and icon arrays that we'ren't the same length! "
    143                     + "The title array had length " + mDefaultListItemTitles.length
    144                     + " but the icon array had length " + mDefaultListItemIcons.length + "!");
    145         }
    146     }
    147 
    148     @Override
    149     public int getTitleResourceId() {
    150         return mTitleResource;
    151     }
    152 
    153     @Override
    154     public int getDescriptionResourceId() {
    155         return mDescriptionResource;
    156     }
    157 
    158     @Override
    159     public int getInputType() {
    160         return mInputType;
    161     }
    162 
    163     @Override
    164     public int getDisplayType() {
    165         return mDisplayType;
    166     }
    167 
    168     @Override
    169     public ArrayList<SelectFromListWizardFragment.ListItem> getChoices(
    170             Context context, ArrayList<SelectFromListWizardFragment.ListItem> extraChoices) {
    171         ArrayList<SelectFromListWizardFragment.ListItem> choices = new ArrayList<
    172                 SelectFromListWizardFragment.ListItem>();
    173         if (extraChoices != null) {
    174             choices.addAll(extraChoices);
    175         }
    176         if (mDefaultListItemTitles != null) {
    177             for (int i = 0; i < mDefaultListItemTitles.length; i++) {
    178                 choices.add(new SelectFromListWizardFragment.ListItem(
    179                         context.getString(mDefaultListItemTitles[i]).toUpperCase(),
    180                         mDefaultListItemIcons == null ? 0 : mDefaultListItemIcons[i]));
    181             }
    182         }
    183         return choices;
    184     }
    185 
    186     public FormPage create() {
    187         return FormPage.createTextInputForm(name());
    188     }
    189 
    190     public FormPage create(Intent intent) {
    191         if (mDisplayType != FormPageDisplayer.DISPLAY_TYPE_LOADING) {
    192             throw new IllegalArgumentException("Form page type " + name() + " had display type "
    193                     + mDisplayType + " but " + FormPageDisplayer.DISPLAY_TYPE_LOADING
    194                     + " expected!");
    195         }
    196         return FormPage.createIntentForm(name(), intent);
    197     }
    198 }
    199