Home | History | Annotate | Download | only in accounts
      1 /*
      2  * Copyright (C) 2009 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 android.accounts;
     18 
     19 import android.os.Parcelable;
     20 import android.os.Parcel;
     21 
     22 /**
     23  * A {@link Parcelable} value type that contains information about an account authenticator.
     24  */
     25 public class AuthenticatorDescription implements Parcelable {
     26     /** The string that uniquely identifies an authenticator */
     27     final public String type;
     28 
     29     /** A resource id of a label for the authenticator that is suitable for displaying */
     30     final public int labelId;
     31 
     32     /** A resource id of a icon for the authenticator */
     33     final public int iconId;
     34 
     35     /** A resource id of a smaller icon for the authenticator */
     36     final public int smallIconId;
     37 
     38     /**
     39      * A resource id for a hierarchy of PreferenceScreen to be added to the settings page for the
     40      * account. See {@link AbstractAccountAuthenticator} for an example.
     41      */
     42     final public int accountPreferencesId;
     43 
     44     /** The package name that can be used to lookup the resources from above. */
     45     final public String packageName;
     46 
     47     /** Authenticator handles its own token caching and permission screen */
     48     final public boolean customTokens;
     49 
     50     /** A constructor for a full AuthenticatorDescription */
     51     public AuthenticatorDescription(String type, String packageName, int labelId, int iconId,
     52             int smallIconId, int prefId, boolean customTokens) {
     53         if (type == null) throw new IllegalArgumentException("type cannot be null");
     54         if (packageName == null) throw new IllegalArgumentException("packageName cannot be null");
     55         this.type = type;
     56         this.packageName = packageName;
     57         this.labelId = labelId;
     58         this.iconId = iconId;
     59         this.smallIconId = smallIconId;
     60         this.accountPreferencesId = prefId;
     61         this.customTokens = customTokens;
     62     }
     63 
     64     public AuthenticatorDescription(String type, String packageName, int labelId, int iconId,
     65             int smallIconId, int prefId) {
     66         this(type, packageName, labelId, iconId, smallIconId, prefId, false);
     67     }
     68 
     69     /**
     70      * A factory method for creating an AuthenticatorDescription that can be used as a key
     71      * to identify the authenticator by its type.
     72      */
     73 
     74     public static AuthenticatorDescription newKey(String type) {
     75         if (type == null) throw new IllegalArgumentException("type cannot be null");
     76         return new AuthenticatorDescription(type);
     77     }
     78 
     79     private AuthenticatorDescription(String type) {
     80         this.type = type;
     81         this.packageName = null;
     82         this.labelId = 0;
     83         this.iconId = 0;
     84         this.smallIconId = 0;
     85         this.accountPreferencesId = 0;
     86         this.customTokens = false;
     87     }
     88 
     89     private AuthenticatorDescription(Parcel source) {
     90         this.type = source.readString();
     91         this.packageName = source.readString();
     92         this.labelId = source.readInt();
     93         this.iconId = source.readInt();
     94         this.smallIconId = source.readInt();
     95         this.accountPreferencesId = source.readInt();
     96         this.customTokens = source.readByte() == 1;
     97     }
     98 
     99     /** @inheritDoc */
    100     public int describeContents() {
    101         return 0;
    102     }
    103 
    104     /** Returns the hashcode of the type only. */
    105     public int hashCode() {
    106         return type.hashCode();
    107     }
    108 
    109     /** Compares the type only, suitable for key comparisons. */
    110     public boolean equals(Object o) {
    111         if (o == this) return true;
    112         if (!(o instanceof AuthenticatorDescription)) return false;
    113         final AuthenticatorDescription other = (AuthenticatorDescription) o;
    114         return type.equals(other.type);
    115     }
    116 
    117     public String toString() {
    118         return "AuthenticatorDescription {type=" + type + "}";
    119     }
    120 
    121     /** @inheritDoc */
    122     public void writeToParcel(Parcel dest, int flags) {
    123         dest.writeString(type);
    124         dest.writeString(packageName);
    125         dest.writeInt(labelId);
    126         dest.writeInt(iconId);
    127         dest.writeInt(smallIconId);
    128         dest.writeInt(accountPreferencesId);
    129         dest.writeByte((byte) (customTokens ? 1 : 0));
    130     }
    131 
    132     /** Used to create the object from a parcel. */
    133     public static final Creator<AuthenticatorDescription> CREATOR =
    134             new Creator<AuthenticatorDescription>() {
    135         /** @inheritDoc */
    136         public AuthenticatorDescription createFromParcel(Parcel source) {
    137             return new AuthenticatorDescription(source);
    138         }
    139 
    140         /** @inheritDoc */
    141         public AuthenticatorDescription[] newArray(int size) {
    142             return new AuthenticatorDescription[size];
    143         }
    144     };
    145 }
    146