1603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana/*
2603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Copyright (C) 2009 The Android Open Source Project
3603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *
4603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Licensed under the Apache License, Version 2.0 (the "License");
5603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * you may not use this file except in compliance with the License.
6603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * You may obtain a copy of the License at
7603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *
8603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *      http://www.apache.org/licenses/LICENSE-2.0
9603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *
10603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Unless required by applicable law or agreed to in writing, software
11603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * distributed under the License is distributed on an "AS IS" BASIS,
12603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * See the License for the specific language governing permissions and
14603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * limitations under the License.
15603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana */
16603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
17603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanapackage android.accounts;
18603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
19603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.os.Parcelable;
20603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.os.Parcel;
21a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.text.TextUtils;
22603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
23603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana/**
24603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Value type that represents an Account in the {@link AccountManager}. This object is
25603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * {@link Parcelable} and also overrides {@link #equals} and {@link #hashCode}, making it
26603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * suitable for use as the key of a {@link java.util.Map}
27603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana */
28603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanapublic class Account implements Parcelable {
293710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana    public final String name;
303710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana    public final String type;
31603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
32603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public boolean equals(Object o) {
33603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        if (o == this) return true;
34603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        if (!(o instanceof Account)) return false;
35603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        final Account other = (Account)o;
363710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        return name.equals(other.name) && type.equals(other.type);
37603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
38603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
39603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public int hashCode() {
40603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        int result = 17;
413710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        result = 31 * result + name.hashCode();
423710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        result = 31 * result + type.hashCode();
43603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        return result;
44603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
45603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
46603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public Account(String name, String type) {
47a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintana        if (TextUtils.isEmpty(name)) {
48a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintana            throw new IllegalArgumentException("the name must not be empty: " + name);
49a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintana        }
50a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintana        if (TextUtils.isEmpty(type)) {
51a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintana            throw new IllegalArgumentException("the type must not be empty: " + type);
52a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintana        }
533710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        this.name = name;
543710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        this.type = type;
55603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
56603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
57603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public Account(Parcel in) {
583710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        this.name = in.readString();
593710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        this.type = in.readString();
60603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
61603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
62603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public int describeContents() {
63603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        return 0;
64603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
65603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
66603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public void writeToParcel(Parcel dest, int flags) {
673710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        dest.writeString(name);
683710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        dest.writeString(type);
69603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
70603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
71603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public static final Creator<Account> CREATOR = new Creator<Account>() {
72603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        public Account createFromParcel(Parcel source) {
73603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana            return new Account(source);
74603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        }
75603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
76603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        public Account[] newArray(int size) {
77603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana            return new Account[size];
78603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        }
79603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    };
80603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
81603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public String toString() {
823710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana        return "Account {name=" + name + ", type=" + type + "}";
83603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
84603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana}
85