1718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana/* 2718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * Copyright (C) 2009 The Android Open Source Project 3718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * 4718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * Licensed under the Apache License, Version 2.0 (the "License"); 5718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * you may not use this file except in compliance with the License. 6718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * You may obtain a copy of the License at 7718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * 8718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * http://www.apache.org/licenses/LICENSE-2.0 9718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * 10718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * Unless required by applicable law or agreed to in writing, software 11718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * distributed under the License is distributed on an "AS IS" BASIS, 12718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * See the License for the specific language governing permissions and 14718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * limitations under the License. 15718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana */ 16718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana 17718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintanapackage android.content; 18718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana 19718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintanaimport android.text.TextUtils; 20ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintanaimport android.os.Parcelable; 21ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintanaimport android.os.Parcel; 22718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana 23718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana/** 24718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * Value type that represents a SyncAdapterType. This object overrides {@link #equals} and 25718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * {@link #hashCode}, making it suitable for use as the key of a {@link java.util.Map} 26718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana */ 27ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintanapublic class SyncAdapterType implements Parcelable { 28718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana public final String authority; 29718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana public final String accountType; 30e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana public final boolean isKey; 31e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana private final boolean userVisible; 32e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana private final boolean supportsUploading; 33718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana 34e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana public SyncAdapterType(String authority, String accountType, boolean userVisible, 35e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana boolean supportsUploading) { 36718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana if (TextUtils.isEmpty(authority)) { 37718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana throw new IllegalArgumentException("the authority must not be empty: " + authority); 38718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana } 39718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana if (TextUtils.isEmpty(accountType)) { 40718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana throw new IllegalArgumentException("the accountType must not be empty: " + accountType); 41718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana } 42718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana this.authority = authority; 43718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana this.accountType = accountType; 444a6679b97e0285c5b65ec5c0d9080ff90d3e9e81Fred Quintana this.userVisible = userVisible; 45e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this.supportsUploading = supportsUploading; 46e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this.isKey = false; 47e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 48e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana 49e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana private SyncAdapterType(String authority, String accountType) { 50e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana if (TextUtils.isEmpty(authority)) { 51e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana throw new IllegalArgumentException("the authority must not be empty: " + authority); 52e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 53e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana if (TextUtils.isEmpty(accountType)) { 54e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana throw new IllegalArgumentException("the accountType must not be empty: " + accountType); 55e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 56e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this.authority = authority; 57e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this.accountType = accountType; 58e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this.userVisible = true; 59e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this.supportsUploading = true; 60e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this.isKey = true; 61e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 62e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana 63e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana public boolean supportsUploading() { 64e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana if (isKey) { 65e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana throw new IllegalStateException( 66e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana "this method is not allowed to be called when this is a key"); 67e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 68e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana return supportsUploading; 69e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 70e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana 71e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana public boolean isUserVisible() { 72e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana if (isKey) { 73e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana throw new IllegalStateException( 74e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana "this method is not allowed to be called when this is a key"); 75e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 76e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana return userVisible; 774a6679b97e0285c5b65ec5c0d9080ff90d3e9e81Fred Quintana } 784a6679b97e0285c5b65ec5c0d9080ff90d3e9e81Fred Quintana 794a6679b97e0285c5b65ec5c0d9080ff90d3e9e81Fred Quintana public static SyncAdapterType newKey(String authority, String accountType) { 80e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana return new SyncAdapterType(authority, accountType); 81718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana } 82718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana 83718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana public boolean equals(Object o) { 84718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana if (o == this) return true; 85718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana if (!(o instanceof SyncAdapterType)) return false; 86718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana final SyncAdapterType other = (SyncAdapterType)o; 87e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana // don't include userVisible or supportsUploading in the equality check 88718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana return authority.equals(other.authority) && accountType.equals(other.accountType); 89718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana } 90718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana 91718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana public int hashCode() { 92718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana int result = 17; 93718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana result = 31 * result + authority.hashCode(); 94718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana result = 31 * result + accountType.hashCode(); 95e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana // don't include userVisible or supportsUploading the hash 96718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana return result; 97718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana } 98718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana 99718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana public String toString() { 100e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana if (isKey) { 101e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana return "SyncAdapterType Key {name=" + authority 102e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana + ", type=" + accountType 103e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana + "}"; 104e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } else { 105e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana return "SyncAdapterType {name=" + authority 106e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana + ", type=" + accountType 107e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana + ", userVisible=" + userVisible 108e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana + ", supportsUploading=" + supportsUploading 109e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana + "}"; 110e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 111718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana } 112ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana 113ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana public int describeContents() { 114ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana return 0; 115ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana } 116ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana 117ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana public void writeToParcel(Parcel dest, int flags) { 118e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana if (isKey) { 119e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana throw new IllegalStateException("keys aren't parcelable"); 120e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana } 121e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana 122ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana dest.writeString(authority); 123ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana dest.writeString(accountType); 1244a6679b97e0285c5b65ec5c0d9080ff90d3e9e81Fred Quintana dest.writeInt(userVisible ? 1 : 0); 125e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana dest.writeInt(supportsUploading ? 1 : 0); 126ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana } 127ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana 128ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana public SyncAdapterType(Parcel source) { 129e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana this( 130e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana source.readString(), 131e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana source.readString(), 132e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana source.readInt() != 0, 133e0616ffb741b64e3bc7a1e3ad9def3d50eee53fdFred Quintana source.readInt() != 0); 134ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana } 135ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana 136ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana public static final Creator<SyncAdapterType> CREATOR = new Creator<SyncAdapterType>() { 137ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana public SyncAdapterType createFromParcel(Parcel source) { 138ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana return new SyncAdapterType(source); 139ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana } 140ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana 141ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana public SyncAdapterType[] newArray(int size) { 142ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana return new SyncAdapterType[size]; 143ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana } 144ac9385ef3105fb7464e1f46049c62755a8b7f0e9Fred Quintana }; 145718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana}