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.form; 18 19 import android.content.Intent; 20 import android.os.Bundle; 21 import android.os.Parcel; 22 import android.os.Parcelable; 23 24 import java.util.ArrayList; 25 import java.util.List; 26 27 /** 28 * Implements a FormPage. This is a form page that can be used by MultiPagedForm 29 * to create fragments 30 */ 31 public class FormPage implements Parcelable { 32 33 public static final String DATA_KEY_SUMMARY_STRING = 34 "com.android.tv.settings.form.FormPage.summaryString"; 35 36 enum Type { 37 MULTIPLE_CHOICE, TEXT_INPUT, PASSWORD_INPUT, INTENT 38 } 39 40 public final static Parcelable.Creator<FormPage> CREATOR = new Parcelable.Creator<FormPage>() { 41 42 @Override 43 public FormPage createFromParcel(Parcel parcel) { 44 return new FormPage(parcel); 45 } 46 47 @Override 48 public FormPage[] newArray(int size) { 49 return new FormPage[size]; 50 } 51 }; 52 53 /** 54 * Create a form page resulting in a password input field. 55 * 56 * @param title the title of this form page. Should be unique for this 57 * Activity. 58 * @return an incomplete form page suitable for use in MultiPagedForm. 59 */ createPasswordInputForm(String title)60 public static FormPage createPasswordInputForm(String title) { 61 return new FormPage(title, Type.PASSWORD_INPUT, null, null); 62 } 63 64 /** 65 * Create a form page resulting in a text input field. 66 * 67 * @param title the title of this form page. Should be unique for this 68 * Activity. 69 * @return an incomplete form page suitable for use in MultiPagedForm. 70 */ createTextInputForm(String title)71 public static FormPage createTextInputForm(String title) { 72 return new FormPage(title, Type.TEXT_INPUT, null, null); 73 } 74 75 /** 76 * Create a form page resulting in a list of choices. 77 * 78 * @param title the title of this form page. Should be unique for this 79 * Activity. 80 * @param formChoices the choices for this form page. 81 * @return an incomplete form page suitable for use in MultiPagedForm. 82 */ createMultipleChoiceForm(String title, ArrayList<String> formChoices)83 public static FormPage createMultipleChoiceForm(String title, ArrayList<String> formChoices) { 84 return new FormPage(title, Type.MULTIPLE_CHOICE, formChoices, null); 85 } 86 87 /** 88 * Create a form page which launches an intent to get its results. 89 * 90 * @param title the title of this form page. Should be unique for this 91 * Activity. 92 * @param formIntent the intent to launch for this form page. This intent 93 * should return the form page's results via the result intent's 94 * extras bundle. This bundle must contain the 95 * DATA_KEY_SUMMARY_STRING key as this key is used to display the 96 * results of the intent to the user. 97 * @return an incomplete form page suitable for use in MultiPagedForm. 98 */ createIntentForm(String title, Intent formIntent)99 public static FormPage createIntentForm(String title, Intent formIntent) { 100 return new FormPage(title, Type.INTENT, null, formIntent); 101 } 102 103 private final String mPageTitle; 104 private final Type mFormType; 105 private final ArrayList<String> mFormChoices; 106 private final Intent mFormIntent; 107 private Bundle mFormData; 108 private String mError; 109 private String mErrorIconUri; 110 private boolean mCompleted; 111 FormPage(String pageTitle, Type formType, ArrayList<String> formChoices, Intent formIntent)112 public FormPage(String pageTitle, Type formType, ArrayList<String> formChoices, 113 Intent formIntent) { 114 mPageTitle = pageTitle; 115 mFormType = formType; 116 mFormChoices = formChoices; 117 mFormIntent = formIntent; 118 mFormData = null; 119 mError = null; 120 mErrorIconUri = null; 121 mCompleted = false; 122 } 123 FormPage(Parcel in)124 public FormPage(Parcel in) { 125 mPageTitle = in.readString(); 126 mFormType = Type.valueOf(in.readString()); 127 mFormChoices = new ArrayList<>(); 128 in.readStringList(mFormChoices); 129 mFormIntent = in.readParcelable(null); 130 mFormData = in.readParcelable(null); 131 mError = in.readString(); 132 mErrorIconUri = in.readString(); 133 mCompleted = in.readByte() == 1; 134 } 135 136 @Override describeContents()137 public int describeContents() { 138 return 0; 139 } 140 141 @Override writeToParcel(Parcel out, int flags)142 public void writeToParcel(Parcel out, int flags) { 143 out.writeString(mPageTitle); 144 out.writeString(mFormType.name()); 145 out.writeStringList(mFormChoices); 146 out.writeParcelable(mFormIntent, 0); 147 out.writeParcelable(mFormData, 0); 148 out.writeString(mError); 149 out.writeString(mErrorIconUri); 150 out.writeByte((byte) (mCompleted ? 1 : 0)); 151 } 152 153 @Override toString()154 public String toString() { 155 StringBuilder sb = new StringBuilder(); 156 sb.append("PageTitle: " + mPageTitle + "\n"); 157 sb.append("FormType: " + mFormType.name() + "\n"); 158 sb.append("FormChoices: " + mFormChoices + "\n"); 159 sb.append("FormIntent: " + mFormIntent + "\n"); 160 sb.append("FormData: " + mFormData + "\n"); 161 sb.append("FormError: " + mError + "\n"); 162 sb.append("FormErrorIconUri: " + mErrorIconUri + "\n"); 163 sb.append("FormCompleted: " + mCompleted + "\n"); 164 return sb.toString(); 165 } 166 getTitle()167 public String getTitle() { 168 return mPageTitle; 169 } 170 getData()171 public Bundle getData() { 172 return mFormData; 173 } 174 getDataSummary()175 public String getDataSummary() { 176 return (mFormData != null && mFormData.containsKey(DATA_KEY_SUMMARY_STRING)) ? mFormData 177 .getString(DATA_KEY_SUMMARY_STRING) : ""; 178 } 179 clearData()180 public void clearData() { 181 mFormData = null; 182 } 183 getError()184 public String getError() { 185 return mError; 186 } 187 getErrorIconUri()188 public String getErrorIconUri() { 189 return mErrorIconUri; 190 } 191 complete(Bundle data)192 public void complete(Bundle data) { 193 mFormData = data; 194 mCompleted = true; 195 } 196 setError(String error, String errorIconUri)197 public void setError(String error, String errorIconUri) { 198 mError = error; 199 mErrorIconUri = errorIconUri; 200 mCompleted = false; 201 } 202 getChoices()203 public List<String> getChoices() { 204 return mFormChoices; 205 } 206 getType()207 Type getType() { 208 return mFormType; 209 } 210 getIntent()211 Intent getIntent() { 212 return mFormIntent; 213 } 214 isComplete()215 boolean isComplete() { 216 return mCompleted; 217 } 218 } 219