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