/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.location;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;

A class representing an Address, i.e, a set of Strings describing a location. The address format is a simplified version of xAL (eXtensible Address Language) http://www.oasis-open.org/committees/ciq/ciq.html#6
/** * A class representing an Address, i.e, a set of Strings describing a location. * * The address format is a simplified version of xAL (eXtensible Address Language) * http://www.oasis-open.org/committees/ciq/ciq.html#6 */
public class Address implements Parcelable { private Locale mLocale; private String mFeatureName; private HashMap<Integer, String> mAddressLines; private int mMaxAddressLineIndex = -1; private String mAdminArea; private String mSubAdminArea; private String mLocality; private String mSubLocality; private String mThoroughfare; private String mSubThoroughfare; private String mPremises; private String mPostalCode; private String mCountryCode; private String mCountryName; private double mLatitude; private double mLongitude; private boolean mHasLatitude = false; private boolean mHasLongitude = false; private String mPhone; private String mUrl; private Bundle mExtras = null;
Constructs a new Address object set to the given Locale and with all other fields initialized to null or false.
/** * Constructs a new Address object set to the given Locale and with all * other fields initialized to null or false. */
public Address(Locale locale) { mLocale = locale; }
Returns the Locale associated with this address.
/** * Returns the Locale associated with this address. */
public Locale getLocale() { return mLocale; }
Returns the largest index currently in use to specify an address line. If no address lines are specified, -1 is returned.
/** * Returns the largest index currently in use to specify an address line. * If no address lines are specified, -1 is returned. */
public int getMaxAddressLineIndex() { return mMaxAddressLineIndex; }
Returns a line of the address numbered by the given index (starting at 0), or null if no such line is present.
Throws:
  • IllegalArgumentException – if index < 0
/** * Returns a line of the address numbered by the given index * (starting at 0), or null if no such line is present. * * @throws IllegalArgumentException if index < 0 */
public String getAddressLine(int index) { if (index < 0) { throw new IllegalArgumentException("index = " + index + " < 0"); } return mAddressLines == null? null : mAddressLines.get(index); }
Sets the line of the address numbered by index (starting at 0) to the given String, which may be null.
Throws:
  • IllegalArgumentException – if index < 0
/** * Sets the line of the address numbered by index (starting at 0) to the * given String, which may be null. * * @throws IllegalArgumentException if index < 0 */
public void setAddressLine(int index, String line) { if (index < 0) { throw new IllegalArgumentException("index = " + index + " < 0"); } if (mAddressLines == null) { mAddressLines = new HashMap<Integer, String>(); } mAddressLines.put(index, line); if (line == null) { // We've eliminated a line, recompute the max index mMaxAddressLineIndex = -1; for (Integer i : mAddressLines.keySet()) { mMaxAddressLineIndex = Math.max(mMaxAddressLineIndex, i); } } else { mMaxAddressLineIndex = Math.max(mMaxAddressLineIndex, index); } }
Returns the feature name of the address, for example, "Golden Gate Bridge", or null if it is unknown
/** * Returns the feature name of the address, for example, "Golden Gate Bridge", or null * if it is unknown */
public String getFeatureName() { return mFeatureName; }
Sets the feature name of the address to the given String, which may be null
/** * Sets the feature name of the address to the given String, which may be null */
public void setFeatureName(String featureName) { mFeatureName = featureName; }
Returns the administrative area name of the address, for example, "CA", or null if it is unknown
/** * Returns the administrative area name of the address, for example, "CA", or null if * it is unknown */
public String getAdminArea() { return mAdminArea; }
Sets the administrative area name of the address to the given String, which may be null
/** * Sets the administrative area name of the address to the given String, which may be null */
public void setAdminArea(String adminArea) { this.mAdminArea = adminArea; }
Returns the sub-administrative area name of the address, for example, "Santa Clara County", or null if it is unknown
/** * Returns the sub-administrative area name of the address, for example, "Santa Clara County", * or null if it is unknown */
public String getSubAdminArea() { return mSubAdminArea; }
Sets the sub-administrative area name of the address to the given String, which may be null
/** * Sets the sub-administrative area name of the address to the given String, which may be null */
public void setSubAdminArea(String subAdminArea) { this.mSubAdminArea = subAdminArea; }
Returns the locality of the address, for example "Mountain View", or null if it is unknown.
/** * Returns the locality of the address, for example "Mountain View", or null if it is unknown. */
public String getLocality() { return mLocality; }
Sets the locality of the address to the given String, which may be null.
/** * Sets the locality of the address to the given String, which may be null. */
public void setLocality(String locality) { mLocality = locality; }
Returns the sub-locality of the address, or null if it is unknown. For example, this may correspond to the neighborhood of the locality.
/** * Returns the sub-locality of the address, or null if it is unknown. * For example, this may correspond to the neighborhood of the locality. */
public String getSubLocality() { return mSubLocality; }
Sets the sub-locality of the address to the given String, which may be null.
/** * Sets the sub-locality of the address to the given String, which may be null. */
public void setSubLocality(String sublocality) { mSubLocality = sublocality; }
Returns the thoroughfare name of the address, for example, "1600 Ampitheater Parkway", which may be null
/** * Returns the thoroughfare name of the address, for example, "1600 Ampitheater Parkway", * which may be null */
public String getThoroughfare() { return mThoroughfare; }
Sets the thoroughfare name of the address, which may be null.
/** * Sets the thoroughfare name of the address, which may be null. */
public void setThoroughfare(String thoroughfare) { this.mThoroughfare = thoroughfare; }
Returns the sub-thoroughfare name of the address, which may be null. This may correspond to the street number of the address.
/** * Returns the sub-thoroughfare name of the address, which may be null. * This may correspond to the street number of the address. */
public String getSubThoroughfare() { return mSubThoroughfare; }
Sets the sub-thoroughfare name of the address, which may be null.
/** * Sets the sub-thoroughfare name of the address, which may be null. */
public void setSubThoroughfare(String subthoroughfare) { this.mSubThoroughfare = subthoroughfare; }
Returns the premises of the address, or null if it is unknown.
/** * Returns the premises of the address, or null if it is unknown. */
public String getPremises() { return mPremises; }
Sets the premises of the address to the given String, which may be null.
/** * Sets the premises of the address to the given String, which may be null. */
public void setPremises(String premises) { mPremises = premises; }
Returns the postal code of the address, for example "94110", or null if it is unknown.
/** * Returns the postal code of the address, for example "94110", * or null if it is unknown. */
public String getPostalCode() { return mPostalCode; }
Sets the postal code of the address to the given String, which may be null.
/** * Sets the postal code of the address to the given String, which may * be null. */
public void setPostalCode(String postalCode) { mPostalCode = postalCode; }
Returns the country code of the address, for example "US", or null if it is unknown.
/** * Returns the country code of the address, for example "US", * or null if it is unknown. */
public String getCountryCode() { return mCountryCode; }
Sets the country code of the address to the given String, which may be null.
/** * Sets the country code of the address to the given String, which may * be null. */
public void setCountryCode(String countryCode) { mCountryCode = countryCode; }
Returns the localized country name of the address, for example "Iceland", or null if it is unknown.
/** * Returns the localized country name of the address, for example "Iceland", * or null if it is unknown. */
public String getCountryName() { return mCountryName; }
Sets the country name of the address to the given String, which may be null.
/** * Sets the country name of the address to the given String, which may * be null. */
public void setCountryName(String countryName) { mCountryName = countryName; }
Returns true if a latitude has been assigned to this Address, false otherwise.
/** * Returns true if a latitude has been assigned to this Address, * false otherwise. */
public boolean hasLatitude() { return mHasLatitude; }
Returns the latitude of the address if known.
Throws:
  • IllegalStateException – if this Address has not been assigned a latitude.
/** * Returns the latitude of the address if known. * * @throws IllegalStateException if this Address has not been assigned * a latitude. */
public double getLatitude() { if (mHasLatitude) { return mLatitude; } else { throw new IllegalStateException(); } }
Sets the latitude associated with this address.
/** * Sets the latitude associated with this address. */
public void setLatitude(double latitude) { mLatitude = latitude; mHasLatitude = true; }
Removes any latitude associated with this address.
/** * Removes any latitude associated with this address. */
public void clearLatitude() { mHasLatitude = false; }
Returns true if a longitude has been assigned to this Address, false otherwise.
/** * Returns true if a longitude has been assigned to this Address, * false otherwise. */
public boolean hasLongitude() { return mHasLongitude; }
Returns the longitude of the address if known.
Throws:
  • IllegalStateException – if this Address has not been assigned a longitude.
/** * Returns the longitude of the address if known. * * @throws IllegalStateException if this Address has not been assigned * a longitude. */
public double getLongitude() { if (mHasLongitude) { return mLongitude; } else { throw new IllegalStateException(); } }
Sets the longitude associated with this address.
/** * Sets the longitude associated with this address. */
public void setLongitude(double longitude) { mLongitude = longitude; mHasLongitude = true; }
Removes any longitude associated with this address.
/** * Removes any longitude associated with this address. */
public void clearLongitude() { mHasLongitude = false; }
Returns the phone number of the address if known, or null if it is unknown.
Throws:
  • IllegalStateException – if this Address has not been assigned a phone number.
/** * Returns the phone number of the address if known, * or null if it is unknown. * * @throws IllegalStateException if this Address has not been assigned * a phone number. */
public String getPhone() { return mPhone; }
Sets the phone number associated with this address.
/** * Sets the phone number associated with this address. */
public void setPhone(String phone) { mPhone = phone; }
Returns the public URL for the address if known, or null if it is unknown.
/** * Returns the public URL for the address if known, * or null if it is unknown. */
public String getUrl() { return mUrl; }
Sets the public URL associated with this address.
/** * Sets the public URL associated with this address. */
public void setUrl(String Url) { mUrl = Url; }
Returns additional provider-specific information about the address as a Bundle. The keys and values are determined by the provider. If no additional information is available, null is returned.
/** * Returns additional provider-specific information about the * address as a Bundle. The keys and values are determined * by the provider. If no additional information is available, * null is returned. * * <!-- * <p> A number of common key/value pairs are listed * below. Providers that use any of the keys on this list must * provide the corresponding value as described below. * * <ul> * </ul> * --> */
public Bundle getExtras() { return mExtras; }
Sets the extra information associated with this fix to the given Bundle.
/** * Sets the extra information associated with this fix to the * given Bundle. */
public void setExtras(Bundle extras) { mExtras = (extras == null) ? null : new Bundle(extras); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Address[addressLines=["); for (int i = 0; i <= mMaxAddressLineIndex; i++) { if (i > 0) { sb.append(','); } sb.append(i); sb.append(':'); String line = mAddressLines.get(i); if (line == null) { sb.append("null"); } else { sb.append('\"'); sb.append(line); sb.append('\"'); } } sb.append(']'); sb.append(",feature="); sb.append(mFeatureName); sb.append(",admin="); sb.append(mAdminArea); sb.append(",sub-admin="); sb.append(mSubAdminArea); sb.append(",locality="); sb.append(mLocality); sb.append(",thoroughfare="); sb.append(mThoroughfare); sb.append(",postalCode="); sb.append(mPostalCode); sb.append(",countryCode="); sb.append(mCountryCode); sb.append(",countryName="); sb.append(mCountryName); sb.append(",hasLatitude="); sb.append(mHasLatitude); sb.append(",latitude="); sb.append(mLatitude); sb.append(",hasLongitude="); sb.append(mHasLongitude); sb.append(",longitude="); sb.append(mLongitude); sb.append(",phone="); sb.append(mPhone); sb.append(",url="); sb.append(mUrl); sb.append(",extras="); sb.append(mExtras); sb.append(']'); return sb.toString(); } public static final Parcelable.Creator<Address> CREATOR = new Parcelable.Creator<Address>() { public Address createFromParcel(Parcel in) { String language = in.readString(); String country = in.readString(); Locale locale = country.length() > 0 ? new Locale(language, country) : new Locale(language); Address a = new Address(locale); int N = in.readInt(); if (N > 0) { a.mAddressLines = new HashMap<Integer, String>(N); for (int i = 0; i < N; i++) { int index = in.readInt(); String line = in.readString(); a.mAddressLines.put(index, line); a.mMaxAddressLineIndex = Math.max(a.mMaxAddressLineIndex, index); } } else { a.mAddressLines = null; a.mMaxAddressLineIndex = -1; } a.mFeatureName = in.readString(); a.mAdminArea = in.readString(); a.mSubAdminArea = in.readString(); a.mLocality = in.readString(); a.mSubLocality = in.readString(); a.mThoroughfare = in.readString(); a.mSubThoroughfare = in.readString(); a.mPremises = in.readString(); a.mPostalCode = in.readString(); a.mCountryCode = in.readString(); a.mCountryName = in.readString(); a.mHasLatitude = in.readInt() == 0 ? false : true; if (a.mHasLatitude) { a.mLatitude = in.readDouble(); } a.mHasLongitude = in.readInt() == 0 ? false : true; if (a.mHasLongitude) { a.mLongitude = in.readDouble(); } a.mPhone = in.readString(); a.mUrl = in.readString(); a.mExtras = in.readBundle(); return a; } public Address[] newArray(int size) { return new Address[size]; } }; public int describeContents() { return (mExtras != null) ? mExtras.describeContents() : 0; } public void writeToParcel(Parcel parcel, int flags) { parcel.writeString(mLocale.getLanguage()); parcel.writeString(mLocale.getCountry()); if (mAddressLines == null) { parcel.writeInt(0); } else { Set<Map.Entry<Integer, String>> entries = mAddressLines.entrySet(); parcel.writeInt(entries.size()); for (Map.Entry<Integer, String> e : entries) { parcel.writeInt(e.getKey()); parcel.writeString(e.getValue()); } } parcel.writeString(mFeatureName); parcel.writeString(mAdminArea); parcel.writeString(mSubAdminArea); parcel.writeString(mLocality); parcel.writeString(mSubLocality); parcel.writeString(mThoroughfare); parcel.writeString(mSubThoroughfare); parcel.writeString(mPremises); parcel.writeString(mPostalCode); parcel.writeString(mCountryCode); parcel.writeString(mCountryName); parcel.writeInt(mHasLatitude ? 1 : 0); if (mHasLatitude) { parcel.writeDouble(mLatitude); } parcel.writeInt(mHasLongitude ? 1 : 0); if (mHasLongitude){ parcel.writeDouble(mLongitude); } parcel.writeString(mPhone); parcel.writeString(mUrl); parcel.writeBundle(mExtras); } }