115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/*
215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2009 The Android Open Source Project
315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *
415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License.
615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at
715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *
815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root *
1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software
1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and
1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License.
1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */
1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root
179788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanapackage android.accounts;
189788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
199788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanaimport android.os.Parcelable;
209788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanaimport android.os.Parcel;
219788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
22756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana/**
23756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana * A {@link Parcelable} value type that contains information about an account authenticator.
24756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana */
259788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintanapublic class AuthenticatorDescription implements Parcelable {
26756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** The string that uniquely identifies an authenticator */
279788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    final public String type;
28756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
29756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A resource id of a label for the authenticator that is suitable for displaying */
309788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    final public int labelId;
31756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
32756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A resource id of a icon for the authenticator */
33756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    final public int iconId;
34756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
35756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A resource id of a smaller icon for the authenticator */
36756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    final public int smallIconId;
37756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
38756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /**
39756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * A resource id for a hierarchy of PreferenceScreen to be added to the settings page for the
40756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * account. See {@link AbstractAccountAuthenticator} for an example.
41756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     */
4270e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller    final public int accountPreferencesId;
43756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
44756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** The package name that can be used to lookup the resources from above. */
459788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    final public String packageName;
469788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
47a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache    /** Authenticator handles its own token caching and permission screen */
48a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache    final public boolean customTokens;
49a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache
50756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** A constructor for a full AuthenticatorDescription */
51756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    public AuthenticatorDescription(String type, String packageName, int labelId, int iconId,
52a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache            int smallIconId, int prefId, boolean customTokens) {
53c298a8518a8fd73a303132c7db241f10eb46c5b6Fred Quintana        if (type == null) throw new IllegalArgumentException("type cannot be null");
54c298a8518a8fd73a303132c7db241f10eb46c5b6Fred Quintana        if (packageName == null) throw new IllegalArgumentException("packageName cannot be null");
559788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.type = type;
569788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.packageName = packageName;
579788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.labelId = labelId;
589788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.iconId = iconId;
5970e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.smallIconId = smallIconId;
6070e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.accountPreferencesId = prefId;
61a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache        this.customTokens = customTokens;
62a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache    }
63a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache
64a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache    public AuthenticatorDescription(String type, String packageName, int labelId, int iconId,
65a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache            int smallIconId, int prefId) {
66a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache        this(type, packageName, labelId, iconId, smallIconId, prefId, false);
679788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
689788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
69756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /**
70756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * A factory method for creating an AuthenticatorDescription that can be used as a key
71756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     * to identify the authenticator by its type.
72756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana     */
73756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana
749788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public static AuthenticatorDescription newKey(String type) {
75c298a8518a8fd73a303132c7db241f10eb46c5b6Fred Quintana        if (type == null) throw new IllegalArgumentException("type cannot be null");
769788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return new AuthenticatorDescription(type);
779788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
789788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
799788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    private AuthenticatorDescription(String type) {
809788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.type = type;
819788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.packageName = null;
829788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.labelId = 0;
839788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.iconId = 0;
8470e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.smallIconId = 0;
8570e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.accountPreferencesId = 0;
86a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache        this.customTokens = false;
879788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
889788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
899788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    private AuthenticatorDescription(Parcel source) {
909788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.type = source.readString();
919788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.packageName = source.readString();
929788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.labelId = source.readInt();
939788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        this.iconId = source.readInt();
9470e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.smallIconId = source.readInt();
9570e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        this.accountPreferencesId = source.readInt();
96a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache        this.customTokens = source.readByte() == 1;
979788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
989788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
99756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** @inheritDoc */
1009788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public int describeContents() {
1019788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return 0;
1029788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
1039788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
104756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** Returns the hashcode of the type only. */
1059788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public int hashCode() {
1069788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return type.hashCode();
1079788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
1089788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
109756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** Compares the type only, suitable for key comparisons. */
1109788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public boolean equals(Object o) {
1119788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        if (o == this) return true;
1129788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        if (!(o instanceof AuthenticatorDescription)) return false;
1139788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        final AuthenticatorDescription other = (AuthenticatorDescription) o;
1149788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        return type.equals(other.type);
1159788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
1169788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
1175ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana    public String toString() {
1185ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana        return "AuthenticatorDescription {type=" + type + "}";
1195ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana    }
1205ebbb4a6b3e16f711735ae0615b9a9ea64faad38Fred Quintana
121ec8f9b648182c90613f18dbfe43080c90397487dKenny Root    /** @inheritDoc */
1229788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public void writeToParcel(Parcel dest, int flags) {
1239788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeString(type);
1249788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeString(packageName);
1259788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeInt(labelId);
1269788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        dest.writeInt(iconId);
12770e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        dest.writeInt(smallIconId);
12870e1ad7d99c95967e3c0257bddc7b4ec6c403372Jim Miller        dest.writeInt(accountPreferencesId);
129a40c6304deb860f10a51ce950ac1abc21a23d08bCostin Manolache        dest.writeByte((byte) (customTokens ? 1 : 0));
1309788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    }
1319788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
132756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana    /** Used to create the object from a parcel. */
1339788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    public static final Creator<AuthenticatorDescription> CREATOR =
1349788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana            new Creator<AuthenticatorDescription>() {
135756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana        /** @inheritDoc */
1369788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        public AuthenticatorDescription createFromParcel(Parcel source) {
1379788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana            return new AuthenticatorDescription(source);
1389788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        }
1399788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana
140756b735e9312ee52618158270f0bdd0ec691a712Fred Quintana        /** @inheritDoc */
1419788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        public AuthenticatorDescription[] newArray(int size) {
1429788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana            return new AuthenticatorDescription[size];
1439788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana        }
1449788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana    };
1459788976b1465ce982b5ae7c741345edd0ecd9322Fred Quintana}
146