19788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanapackage android.accounts;
29788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
39788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanaimport android.os.Parcelable;
49788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanaimport android.os.Parcel;
59788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
6756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana/**
7756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana * A {@link Parcelable} value type that contains information about an account authenticator.
8756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana */
99788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanapublic class AuthenticatorDescription implements Parcelable {
10756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** The string that uniquely identifies an authenticator */
119788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    final public String type;
12756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
13756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A resource id of a label for the authenticator that is suitable for displaying */
149788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    final public int labelId;
15756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
16756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A resource id of a icon for the authenticator */
17756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    final public int iconId;
18756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
19756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A resource id of a smaller icon for the authenticator */
20756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    final public int smallIconId;
21756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
22756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /**
23756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * A resource id for a hierarchy of PreferenceScreen to be added to the settings page for the
24756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * account. See {@link AbstractAccountAuthenticator} for an example.
25756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     */
2670e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller    final public int accountPreferencesId;
27756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
28756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** The package name that can be used to lookup the resources from above. */
299788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    final public String packageName;
309788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
31756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A constructor for a full AuthenticatorDescription */
32756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    public AuthenticatorDescription(String type, String packageName, int labelId, int iconId,
3370e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller            int smallIconId, int prefId) {
34c298a8518a8fd73a303132c7db241f10eb46c5b6Fred Quintana        if (type == null) throw new IllegalArgumentException("type cannot be null");
35c298a8518a8fd73a303132c7db241f10eb46c5b6Fred Quintana        if (packageName == null) throw new IllegalArgumentException("packageName cannot be null");
369788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.type = type;
379788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.packageName = packageName;
389788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.labelId = labelId;
399788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.iconId = iconId;
4070e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.smallIconId = smallIconId;
4170e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.accountPreferencesId = prefId;
429788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
439788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
44756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /**
45756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * A factory method for creating an AuthenticatorDescription that can be used as a key
46756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * to identify the authenticator by its type.
47756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     */
48756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
499788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public static AuthenticatorDescription newKey(String type) {
50c298a8518a8fd73a303132c7db241f10eb46c5b6Fred Quintana        if (type == null) throw new IllegalArgumentException("type cannot be null");
519788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return new AuthenticatorDescription(type);
529788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
539788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
549788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    private AuthenticatorDescription(String type) {
559788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.type = type;
569788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.packageName = null;
579788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.labelId = 0;
589788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.iconId = 0;
5970e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.smallIconId = 0;
6070e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.accountPreferencesId = 0;
619788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
629788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
639788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    private AuthenticatorDescription(Parcel source) {
649788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.type = source.readString();
659788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.packageName = source.readString();
669788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.labelId = source.readInt();
679788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.iconId = source.readInt();
6870e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.smallIconId = source.readInt();
6970e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.accountPreferencesId = source.readInt();
709788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
719788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
72756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** @inheritDoc */
739788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public int describeContents() {
749788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return 0;
759788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
769788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
77756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** Returns the hashcode of the type only. */
789788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public int hashCode() {
799788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return type.hashCode();
809788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
819788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
82756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** Compares the type only, suitable for key comparisons. */
839788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public boolean equals(Object o) {
849788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        if (o == this) return true;
859788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        if (!(o instanceof AuthenticatorDescription)) return false;
869788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        final AuthenticatorDescription other = (AuthenticatorDescription) o;
879788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return type.equals(other.type);
889788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
899788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
905ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana    public String toString() {
915ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana        return "AuthenticatorDescription {type=" + type + "}";
925ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana    }
935ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana
94756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** @inhericDoc */
959788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public void writeToParcel(Parcel dest, int flags) {
969788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeString(type);
979788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeString(packageName);
989788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeInt(labelId);
999788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeInt(iconId);
10070e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        dest.writeInt(smallIconId);
10170e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        dest.writeInt(accountPreferencesId);
1029788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
1039788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
104756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** Used to create the object from a parcel. */
1059788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public static final Creator<AuthenticatorDescription> CREATOR =
1069788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana            new Creator<AuthenticatorDescription>() {
107756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana        /** @inheritDoc */
1089788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        public AuthenticatorDescription createFromParcel(Parcel source) {
1099788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana            return new AuthenticatorDescription(source);
1109788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        }
1119788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
112756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana        /** @inheritDoc */
1139788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        public AuthenticatorDescription[] newArray(int size) {
1149788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana            return new AuthenticatorDescription[size];
1159788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        }
1169788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    };
1179788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana}
118