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