SetupData.java revision a7bc0319a75184ad706bb35c049af107ac3688e6
1/* 2 * Copyright (C) 2010 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 17package com.android.email.activity.setup; 18 19import com.android.emailcommon.provider.EmailContent.Account; 20import com.android.emailcommon.service.PolicySet; 21 22import android.accounts.AccountAuthenticatorResponse; 23import android.os.Bundle; 24import android.os.Parcel; 25import android.os.Parcelable; 26 27public class SetupData implements Parcelable { 28 // The "extra" name for the Bundle saved with SetupData 29 public static final String EXTRA_SETUP_DATA = "com.android.email.setupdata"; 30 31 // NORMAL is the standard entry from the Email app; EAS and POP_IMAP are used when entering via 32 // Settings -> Accounts 33 public static final int FLOW_MODE_NORMAL = 0; 34 public static final int FLOW_MODE_ACCOUNT_MANAGER_EAS = 1; 35 public static final int FLOW_MODE_ACCOUNT_MANAGER_POP_IMAP = 2; 36 public static final int FLOW_MODE_EDIT = 3; 37 public static final int FLOW_MODE_FORCE_CREATE = 4; 38 // The following two modes are used to "pop the stack" and return from the setup flow. We 39 // either return to the caller (if we're in an account type flow) or go to the message list 40 public static final int FLOW_MODE_RETURN_TO_CALLER = 5; 41 public static final int FLOW_MODE_RETURN_TO_MESSAGE_LIST = 6; 42 43 // For debug logging 44 private static final String[] FLOW_MODES = {"normal", "eas", "pop/imap", "edit", "force", 45 "rtc", "rtl"}; 46 47 // Mode bits for AccountSetupCheckSettings, indicating the type of check requested 48 public static final int CHECK_INCOMING = 1; 49 public static final int CHECK_OUTGOING = 2; 50 public static final int CHECK_AUTODISCOVER = 4; 51 52 // All access will be through getters/setters 53 private int mFlowMode = FLOW_MODE_NORMAL; 54 private Account mAccount; 55 private String mUsername; 56 private String mPassword; 57 private int mCheckSettingsMode = 0; 58 private boolean mAllowAutodiscover = true; 59 private PolicySet mPolicySet; 60 private boolean mAutoSetup = false; 61 private boolean mDefault = false; 62 private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null; 63 64 // We only have one instance of SetupData; if/when the process is destroyed, this data will be 65 // saved in the savedInstanceState Bundle 66 private static SetupData INSTANCE = null; 67 68 public static synchronized SetupData getInstance() { 69 if (INSTANCE == null) { 70 INSTANCE = new SetupData(); 71 } 72 return INSTANCE; 73 } 74 75 // Don't allow instantiation outside of this class 76 private SetupData() { 77 } 78 79 static public int getFlowMode() { 80 return getInstance().mFlowMode; 81 } 82 83 static public void setFlowMode(int mFlowMode) { 84 getInstance().mFlowMode = mFlowMode; 85 } 86 87 static public Account getAccount() { 88 return getInstance().mAccount; 89 } 90 91 static public void setAccount(Account mAccount) { 92 getInstance().mAccount = mAccount; 93 } 94 95 static public String getUsername() { 96 return getInstance().mUsername; 97 } 98 99 static public void setUsername(String mUsername) { 100 getInstance().mUsername = mUsername; 101 } 102 103 static public String getPassword() { 104 return getInstance().mPassword; 105 } 106 107 static public void setPassword(String mPassword) { 108 getInstance().mPassword = mPassword; 109 } 110 111 static public void setCheckSettingsMode(int mCheckSettingsMode) { 112 getInstance().mCheckSettingsMode = mCheckSettingsMode; 113 } 114 115 static public boolean isCheckIncoming() { 116 return (getInstance().mCheckSettingsMode & CHECK_INCOMING) != 0; 117 } 118 119 static public boolean isCheckOutgoing() { 120 return (getInstance().mCheckSettingsMode & CHECK_OUTGOING) != 0; 121 } 122 static public boolean isCheckAutodiscover() { 123 return (getInstance().mCheckSettingsMode & CHECK_AUTODISCOVER) != 0; 124 } 125 static public boolean isAllowAutodiscover() { 126 return getInstance().mAllowAutodiscover; 127 } 128 129 static public void setAllowAutodiscover(boolean mAllowAutodiscover) { 130 getInstance().mAllowAutodiscover = mAllowAutodiscover; 131 } 132 133 static public PolicySet getPolicySet() { 134 return getInstance().mPolicySet; 135 } 136 137 static public void setPolicySet(PolicySet mPolicySet) { 138 getInstance().mPolicySet = mPolicySet; 139 } 140 141 static public boolean isAutoSetup() { 142 return getInstance().mAutoSetup; 143 } 144 145 static public void setAutoSetup(boolean mAutoSetup) { 146 getInstance().mAutoSetup = mAutoSetup; 147 } 148 149 static public boolean isDefault() { 150 return getInstance().mDefault; 151 } 152 153 static public void setDefault(boolean mDefault) { 154 getInstance().mDefault = mDefault; 155 } 156 157 static public AccountAuthenticatorResponse getAccountAuthenticatorResponse() { 158 return getInstance().mAccountAuthenticatorResponse; 159 } 160 161 static public void setAccountAuthenticatorResponse(AccountAuthenticatorResponse response) { 162 getInstance().mAccountAuthenticatorResponse = response; 163 } 164 165 public static void init(int flowMode) { 166 SetupData data = getInstance(); 167 data.commonInit(); 168 data.mFlowMode = flowMode; 169 } 170 171 public static void init(int flowMode, Account account) { 172 SetupData data = getInstance(); 173 data.commonInit(); 174 data.mFlowMode = flowMode; 175 data.mAccount = account; 176 } 177 178 void commonInit() { 179 mPolicySet = null; 180 mAutoSetup = false; 181 mAllowAutodiscover = true; 182 mCheckSettingsMode = 0; 183 mAccount = new Account(); 184 mDefault = false; 185 mUsername = null; 186 mPassword = null; 187 mAccountAuthenticatorResponse = null; 188 } 189 190 // Parcelable methods 191 public int describeContents() { 192 return 0; 193 } 194 195 public static final Parcelable.Creator<SetupData> CREATOR = 196 new Parcelable.Creator<SetupData>() { 197 public SetupData createFromParcel(Parcel in) { 198 return new SetupData(in); 199 } 200 201 public SetupData[] newArray(int size) { 202 return new SetupData[size]; 203 } 204 }; 205 206 public void writeToParcel(Parcel dest, int flags) { 207 dest.writeInt(mFlowMode); 208 dest.writeParcelable(mAccount, 0); 209 dest.writeString(mUsername); 210 dest.writeString(mPassword); 211 dest.writeInt(mCheckSettingsMode); 212 dest.writeInt(mAllowAutodiscover ? 1 : 0); 213 dest.writeParcelable(mPolicySet, 0); 214 dest.writeInt(mAutoSetup ? 1 : 0); 215 dest.writeInt(mDefault ? 1 : 0); 216 dest.writeParcelable(mAccountAuthenticatorResponse, 0); 217 } 218 219 public SetupData(Parcel in) { 220 ClassLoader loader = getClass().getClassLoader(); 221 mFlowMode = in.readInt(); 222 mAccount = in.readParcelable(loader); 223 mUsername = in.readString(); 224 mPassword = in.readString(); 225 mCheckSettingsMode = in.readInt(); 226 mAllowAutodiscover = in.readInt() == 1; 227 mPolicySet = in.readParcelable(loader); 228 mAutoSetup = in.readInt() == 1; 229 mDefault = in.readInt() == 1; 230 mAccountAuthenticatorResponse = in.readParcelable(loader); 231 } 232 233 // Save/restore our SetupData (used in AccountSetupActivity) 234 static public void save(Bundle bundle) { 235 bundle.putParcelable(EXTRA_SETUP_DATA, getInstance()); 236 } 237 238 static public synchronized SetupData restore(Bundle bundle) { 239 if (bundle != null && bundle.containsKey(EXTRA_SETUP_DATA)) { 240 INSTANCE = bundle.getParcelable(EXTRA_SETUP_DATA); 241 return INSTANCE; 242 } else { 243 return getInstance(); 244 } 245 } 246 247 public static String debugString() { 248 StringBuilder sb = new StringBuilder("SetupData"); 249 SetupData data = getInstance(); 250 sb.append(":flow=" + FLOW_MODES[data.mFlowMode]); 251 sb.append(":acct=" + (data.mAccount == null ? "none" : data.mAccount.mId)); 252 if (data.mUsername != null) { 253 sb.append(":user=" + data.mUsername); 254 } 255 if (data.mPassword != null) { 256 sb.append(":pass=" + data.mPassword); 257 } 258 sb.append(":a/d=" + data.mAllowAutodiscover); 259 sb.append(":auto=" + data.mAutoSetup); 260 sb.append(":default=" + data.mDefault); 261 sb.append(":check="); 262 if (SetupData.isCheckIncoming()) sb.append("in+"); 263 if (SetupData.isCheckOutgoing()) sb.append("out+"); 264 if (SetupData.isCheckAutodiscover()) sb.append("a/d"); 265 sb.append(":policy=" + (data.mPolicySet == null ? "none" : "exists")); 266 return sb.toString(); 267 } 268} 269