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_wifi_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_PSK_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_description, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS, 77 R.string.proxy_hostname_hint), 78 PROXY_PORT(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_proxy_port, 79 R.string.proxy_port_description, TextInputWizardFragment.INPUT_TYPE_NUMERIC, 80 R.string.proxy_port_hint), 81 PROXY_BYPASS(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_proxy_bypass, 82 R.string.proxy_exclusionlist_description, 83 TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS, 84 R.string.proxy_exclusionlist_hint), 85 IP_SETTINGS(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, R.string.title_wifi_ip_settings, 0, 86 new int[] { R.string.wifi_action_dhcp, R.string.wifi_action_static }), 87 IP_ADDRESS(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_ip_address, 88 R.string.wifi_ip_address_description, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS, 89 R.string.wifi_ip_address_hint), 90 GATEWAY(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_gateway, 91 R.string.wifi_gateway_description, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS, 92 R.string.wifi_gateway_hint), 93 NETWORK_PREFIX_LENGTH(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, 94 R.string.title_wifi_network_prefix_length, 95 R.string.wifi_network_prefix_length_description, 96 TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS, 97 R.string.wifi_network_prefix_length_hint), 98 DNS1(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_dns1, 99 R.string.wifi_dns1_description, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS, 100 R.string.wifi_dns1_hint), 101 DNS2(FormPageDisplayer.DISPLAY_TYPE_TEXT_INPUT, R.string.title_wifi_dns2, 102 R.string.wifi_dns2_description, TextInputWizardFragment.INPUT_TYPE_NO_SUGGESTIONS, 103 R.string.wifi_dns2_hint), 104 PROXY_SETTINGS_INVALID(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, 105 R.string.title_wifi_proxy_settings_invalid, 0, new int[] { 106 R.string.wifi_action_try_again }), 107 IP_SETTINGS_INVALID(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, 108 R.string.title_wifi_ip_settings_invalid, 0, new int[] { 109 R.string.wifi_action_try_again }), 110 KNOWN_NETWORK(FormPageDisplayer.DISPLAY_TYPE_LIST_CHOICE, R.string.title_wifi_known_network, 0, 111 new int[] { R.string.wifi_connect, R.string.wifi_forget_network }), 112 WPS(FormPageDisplayer.DISPLAY_TYPE_LOADING, 0, 0); 113 114 private final int mDisplayType; 115 private final int mTitleResource; 116 private final int mDescriptionResource; 117 private final int mInputType; 118 private final int[] mDefaultListItemTitles; 119 private final int[] mDefaultListItemIcons; 120 private final int mDefaultPrefillResource; 121 WifiFormPageType(int displayType, int titleResource, int descriptionResource)122 WifiFormPageType(int displayType, int titleResource, int descriptionResource) { 123 this(displayType, titleResource, descriptionResource, 124 TextInputWizardFragment.INPUT_TYPE_NORMAL); 125 } 126 WifiFormPageType(int displayType, int titleResource, int descriptionResource, int textType)127 WifiFormPageType(int displayType, int titleResource, int descriptionResource, 128 int textType) { 129 this(displayType, titleResource, descriptionResource, textType, 0); 130 } 131 WifiFormPageType(int displayType, int titleResource, int descriptionResource, int textType, int defaultPrefillResource)132 WifiFormPageType(int displayType, int titleResource, int descriptionResource, 133 int textType, int defaultPrefillResource) { 134 mDisplayType = displayType; 135 mTitleResource = titleResource; 136 mDescriptionResource = descriptionResource; 137 mInputType = textType; 138 mDefaultListItemTitles = null; 139 mDefaultListItemIcons = null; 140 mDefaultPrefillResource = defaultPrefillResource; 141 } 142 WifiFormPageType(int displayType, int titleResource, int descriptionResource, int[] defaultListItemTitles)143 WifiFormPageType(int displayType, int titleResource, int descriptionResource, 144 int[] defaultListItemTitles) { 145 this(displayType, titleResource, descriptionResource, defaultListItemTitles, null); 146 } 147 WifiFormPageType(int displayType, int titleResource, int descriptionResource, int[] defaultListItemTitles, int[] defaultListItemIcons)148 WifiFormPageType(int displayType, int titleResource, int descriptionResource, 149 int[] defaultListItemTitles, int[] defaultListItemIcons) { 150 mDisplayType = displayType; 151 mTitleResource = titleResource; 152 mDescriptionResource = descriptionResource; 153 mInputType = TextInputWizardFragment.INPUT_TYPE_NORMAL; 154 mDefaultListItemTitles = defaultListItemTitles; 155 mDefaultListItemIcons = defaultListItemIcons; 156 if (mDefaultListItemTitles != null && mDefaultListItemIcons != null 157 && mDefaultListItemTitles.length != mDefaultListItemIcons.length) { 158 throw new IllegalArgumentException("Form page type " + name() 159 + " had title and icon arrays that we'ren't the same length! " 160 + "The title array had length " + mDefaultListItemTitles.length 161 + " but the icon array had length " + mDefaultListItemIcons.length + "!"); 162 } 163 mDefaultPrefillResource = 0; 164 } 165 166 @Override getTitleResourceId()167 public int getTitleResourceId() { 168 return mTitleResource; 169 } 170 171 @Override getDescriptionResourceId()172 public int getDescriptionResourceId() { 173 return mDescriptionResource; 174 } 175 176 @Override getInputType()177 public int getInputType() { 178 return mInputType; 179 } 180 181 @Override getDisplayType()182 public int getDisplayType() { 183 return mDisplayType; 184 } 185 186 @Override getDefaultPrefillResourceId()187 public int getDefaultPrefillResourceId() { 188 return mDefaultPrefillResource; 189 } 190 191 192 @Override getChoices( Context context, ArrayList<SelectFromListWizardFragment.ListItem> extraChoices)193 public ArrayList<SelectFromListWizardFragment.ListItem> getChoices( 194 Context context, ArrayList<SelectFromListWizardFragment.ListItem> extraChoices) { 195 ArrayList<SelectFromListWizardFragment.ListItem> choices = new ArrayList<>(); 196 if (extraChoices != null) { 197 choices.addAll(extraChoices); 198 } 199 200 if (mDefaultListItemTitles != null) { 201 // Find the largest priority of the items placed at the end of the list and place 202 // default items after. 203 int largestLastPriority = Integer.MIN_VALUE; 204 if (extraChoices != null) { 205 for (SelectFromListWizardFragment.ListItem item : extraChoices) { 206 if (item.getPinnedPosition() 207 == SelectFromListWizardFragment.PinnedListItem.LAST) { 208 SelectFromListWizardFragment.PinnedListItem pinnedItem = 209 (SelectFromListWizardFragment.PinnedListItem) item; 210 largestLastPriority = java.lang.Math.max( 211 largestLastPriority, pinnedItem.getPinnedPriority()); 212 } 213 } 214 } 215 216 for (int i = 0; i < mDefaultListItemTitles.length; i++) { 217 choices.add(new SelectFromListWizardFragment.PinnedListItem( 218 context.getString(mDefaultListItemTitles[i]), 219 mDefaultListItemIcons == null ? 0 : mDefaultListItemIcons[i], 220 SelectFromListWizardFragment.PinnedListItem.LAST, i + largestLastPriority)); 221 } 222 } 223 return choices; 224 } 225 create()226 public FormPage create() { 227 return FormPage.createTextInputForm(name()); 228 } 229 create(Intent intent)230 public FormPage create(Intent intent) { 231 if (mDisplayType != FormPageDisplayer.DISPLAY_TYPE_LOADING) { 232 throw new IllegalArgumentException("Form page type " + name() + " had display type " 233 + mDisplayType + " but " + FormPageDisplayer.DISPLAY_TYPE_LOADING 234 + " expected!"); 235 } 236 return FormPage.createIntentForm(name(), intent); 237 } 238 } 239