Home | History | Annotate | Download | only in googleapps
      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      */
     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      */
     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"?
     78     public Intent getCredentialsIntent() {
     79         return mCredentialsIntent;
     80     }
     81 
     82     /**
     83      * {@hide}
     84      * Create an empty GoogleLoginCredentialsResult.
     85      */
     86     public GoogleLoginCredentialsResult() {
     87         mCredentialsString = null;
     88         mCredentialsIntent = null;
     89         mAccount = null;
     90     }
     91 
     92     /** {@hide} */
     93     public void setCredentialsString(String s) {
     94         mCredentialsString = s;
     95     }
     96 
     97     /** {@hide} */
     98     public void setCredentialsIntent(Intent intent) {
     99         mCredentialsIntent = intent;
    100     }
    101 
    102     /** {@hide} */
    103     public void setAccount(String account) {
    104         mAccount = account;
    105     }
    106 
    107     //
    108     // Parcelable interface
    109     //
    110 
    111     public int describeContents() {
    112         return (mCredentialsIntent != null) ? mCredentialsIntent.describeContents() : 0;
    113     }
    114 
    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 
    137     private GoogleLoginCredentialsResult(Parcel in) {
    138         readFromParcel(in);
    139     }
    140 
    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