• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 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.google.android.googleapps;
18 
19 import android.content.Intent;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 
23 /**
24  * "Result" container class returned by the GoogleLoginService
25  * {@link IGoogleLoginService#blockingGetCredentials} or
26  * {@link IGoogleLoginService#retryGetCredentials} request.
27  * <p>
28  * A single credentials request can <b>either</b>
29  * <ol>
30  * <li> instantly return the credentials you asked for
31  *      (ie. an authentication token, which is a String)
32  * <p> <b>or</b>
33  * <li> return an Intent which you (the caller) need to run yourself
34  *      using {@link android.app.Activity#startActivityForResult},
35  *      which will then return the credentials you asked
36  *      for to your <code>onActivityResult</code> method.
37  *      <p>
38  *      (Generally, that Intent will bring up a UI for the user to
39  *      enter their username and password.  The IGoogleLoginService
40  *      interface doesn't guarantee anything about what that Intent
41  *      actually does, though.)
42  * </ol>
43  * This class can encapsulate either result.  Call <code>getCredentialsString</code> or
44  * <code>getCredentialsIntent</code> on the returned object; one will return a non-null
45  * value.
46  */
47 public class GoogleLoginCredentialsResult implements Parcelable {
48     private String mAccount;
49     private String mCredentialsString;
50     private Intent mCredentialsIntent;
51 
52     /**
53      * Gets the account for which you asked for credentials.
54      */
getAccount()55     public String getAccount() {
56         return mAccount;
57     }
58 
59     /**
60      * Gets the authentication token representing the credentials you asked for.
61      * <p>
62      * Either this or <code>getCredentials</code> will return a non-null value on the object
63      * returned from a credentials request.
64      */
getCredentialsString()65     public String getCredentialsString() {
66         return mCredentialsString;
67     }
68 
69     /**
70      * Gets the Intent which the caller needs to run in order
71      * to get the requested credentials.
72      * <p>
73      * With a GoogleLoginCredentialsResult object returned by the
74      * GoogleLoginService <code>getCredentials</code> method, either this or
75      * <code>getCredentialsString</code> (but not both) will return non-null.
76      */
77     // TODO: better name?  "getCredentialsLookupIntent"?
getCredentialsIntent()78     public Intent getCredentialsIntent() {
79         return mCredentialsIntent;
80     }
81 
82     /**
83      * {@hide}
84      * Create an empty GoogleLoginCredentialsResult.
85      */
GoogleLoginCredentialsResult()86     public GoogleLoginCredentialsResult() {
87         mCredentialsString = null;
88         mCredentialsIntent = null;
89         mAccount = null;
90     }
91 
92     /** {@hide} */
setCredentialsString(String s)93     public void setCredentialsString(String s) {
94         mCredentialsString = s;
95     }
96 
97     /** {@hide} */
setCredentialsIntent(Intent intent)98     public void setCredentialsIntent(Intent intent) {
99         mCredentialsIntent = intent;
100     }
101 
102     /** {@hide} */
setAccount(String account)103     public void setAccount(String account) {
104         mAccount = account;
105     }
106 
107     //
108     // Parcelable interface
109     //
110 
describeContents()111     public int describeContents() {
112         return (mCredentialsIntent != null) ? mCredentialsIntent.describeContents() : 0;
113     }
114 
writeToParcel(Parcel out, int flags)115     public void writeToParcel(Parcel out, int flags) {
116         out.writeString(mAccount);
117         out.writeString(mCredentialsString);
118         if (mCredentialsIntent != null) {
119             out.writeInt(1);
120             mCredentialsIntent.writeToParcel(out, 0);
121         } else {
122             out.writeInt(0);
123         }
124     }
125 
126     public static final Parcelable.Creator<GoogleLoginCredentialsResult> CREATOR
127         = new Parcelable.Creator<GoogleLoginCredentialsResult>() {
128             public GoogleLoginCredentialsResult createFromParcel(Parcel in) {
129                 return new GoogleLoginCredentialsResult(in);
130             }
131 
132             public GoogleLoginCredentialsResult[] newArray(int size) {
133                 return new GoogleLoginCredentialsResult[size];
134             }
135         };
136 
GoogleLoginCredentialsResult(Parcel in)137     private GoogleLoginCredentialsResult(Parcel in) {
138         readFromParcel(in);
139     }
140 
readFromParcel(Parcel in)141     public void readFromParcel(Parcel in) {
142         mAccount = in.readString();
143         mCredentialsString = in.readString();
144 
145         int hasIntent = in.readInt();
146         mCredentialsIntent = null;
147         if (hasIntent == 1) {
148             mCredentialsIntent = new Intent();
149             mCredentialsIntent.readFromParcel(in);
150             mCredentialsIntent.setExtrasClassLoader(getClass().getClassLoader());
151         }
152     }
153 }
154