19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.location;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Locale;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Set;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class representing an Address, i.e, a set of Strings describing a location.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The addres format is a simplified version of xAL (eXtensible Address Language)
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.oasis-open.org/committees/ciq/ciq.html#6
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Address implements Parcelable {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Locale mLocale;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mFeatureName;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private HashMap<Integer, String> mAddressLines;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mMaxAddressLineIndex = -1;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mAdminArea;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mSubAdminArea;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mLocality;
44a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    private String mSubLocality;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mThoroughfare;
46a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    private String mSubThoroughfare;
47a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    private String mPremises;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mPostalCode;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mCountryCode;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mCountryName;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private double mLatitude;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private double mLongitude;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mHasLatitude = false;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mHasLongitude = false;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mPhone;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mUrl;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Bundle mExtras = null;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructs a new Address object set to the given Locale and with all
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * other fields initialized to null or false.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Address(Locale locale) {
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLocale = locale;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the Locale associated with this address.
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Locale getLocale() {
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mLocale;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the largest index currently in use to specify an address line.
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If no address lines are specified, -1 is returned.
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getMaxAddressLineIndex() {
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mMaxAddressLineIndex;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a line of the address numbered by the given index
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (starting at 0), or null if no such line is present.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IllegalArgumentException if index < 0
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAddressLine(int index) {
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (index < 0) {
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("index = " + index + " < 0");
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAddressLines == null? null :  mAddressLines.get(index);
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the line of the address numbered by index (starting at 0) to the
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * given String, which may be null.
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IllegalArgumentException if index < 0
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setAddressLine(int index, String line) {
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (index < 0) {
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("index = " + index + " < 0");
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mAddressLines == null) {
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mAddressLines = new HashMap<Integer, String>();
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAddressLines.put(index, line);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (line == null) {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // We've eliminated a line, recompute the max index
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mMaxAddressLineIndex = -1;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (Integer i : mAddressLines.keySet()) {
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mMaxAddressLineIndex = Math.max(mMaxAddressLineIndex, i);
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mMaxAddressLineIndex = Math.max(mMaxAddressLineIndex, index);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the feature name of the address, for example, "Golden Gate Bridge", or null
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if it is unknown
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getFeatureName() {
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mFeatureName;
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the feature name of the address to the given String, which may be null
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setFeatureName(String featureName) {
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mFeatureName = featureName;
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the administrative area name of the address, for example, "CA", or null if
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * it is unknown
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAdminArea() {
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAdminArea;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the administrative area name of the address to the given String, which may be null
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setAdminArea(String adminArea) {
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.mAdminArea = adminArea;
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the sub-administrative area name of the address, for example, "Santa Clara County",
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if it is unknown
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getSubAdminArea() {
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSubAdminArea;
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the sub-administrative area name of the address to the given String, which may be null
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSubAdminArea(String subAdminArea) {
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.mSubAdminArea = subAdminArea;
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the locality of the address, for example "Mountain View", or null if it is unknown.
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getLocality() {
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mLocality;
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the locality of the address to the given String, which may be null.
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLocality(String locality) {
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLocality = locality;
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
181a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * Returns the sub-locality of the address, or null if it is unknown.
182a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * For example, this may correspond to the neighborhood of the locality.
183a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     */
184a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    public String getSubLocality() {
185a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru        return mSubLocality;
186a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    }
187a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru
188a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    /**
189a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * Sets the sub-locality of the address to the given String, which may be null.
190a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     */
191a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    public void setSubLocality(String sublocality) {
192a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru        mSubLocality = sublocality;
193a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    }
194a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru
195a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    /**
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the thoroughfare name of the address, for example, "1600 Ampitheater Parkway",
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which may be null
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getThoroughfare() {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mThoroughfare;
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the thoroughfare name of the address, which may be null.
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setThoroughfare(String thoroughfare) {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.mThoroughfare = thoroughfare;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
211a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * Returns the sub-thoroughfare name of the address, which may be null.
212a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * This may correspond to the street number of the address.
213a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     */
214a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    public String getSubThoroughfare() {
215a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru        return mSubThoroughfare;
216a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    }
217a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru
218a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    /**
219a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * Sets the sub-thoroughfare name of the address, which may be null.
220a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     */
221a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    public void setSubThoroughfare(String subthoroughfare) {
222a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru        this.mSubThoroughfare = subthoroughfare;
223a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    }
224a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru
225a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    /**
226a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * Returns the premises of the address, or null if it is unknown.
227a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     */
228a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    public String getPremises() {
229a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru        return mPremises;
230a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    }
231a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru
232a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    /**
233a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     * Sets the premises of the address to the given String, which may be null.
234a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru     */
235a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    public void setPremises(String premises) {
236a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru        mPremises = premises;
237a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    }
238a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru
239a8675f67e33bc7337d148358783b0fd138b501ffJean-Baptiste Queru    /**
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the postal code of the address, for example "94110",
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if it is unknown.
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getPostalCode() {
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPostalCode;
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the postal code of the address to the given String, which may
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be null.
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setPostalCode(String postalCode) {
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPostalCode = postalCode;
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the country code of the address, for example "US",
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if it is unknown.
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getCountryCode() {
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mCountryCode;
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the country code of the address to the given String, which may
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be null.
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setCountryCode(String countryCode) {
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCountryCode = countryCode;
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the localized country name of the address, for example "Iceland",
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if it is unknown.
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getCountryName() {
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mCountryName;
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the country name of the address to the given String, which may
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be null.
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setCountryName(String countryName) {
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCountryName = countryName;
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns true if a latitude has been assigned to this Address,
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * false otherwise.
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasLatitude() {
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mHasLatitude;
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the latitude of the address if known.
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IllegalStateException if this Address has not been assigned
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a latitude.
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double getLatitude() {
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mHasLatitude) {
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mLatitude;
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalStateException();
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the latitude associated with this address.
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLatitude(double latitude) {
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLatitude = latitude;
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHasLatitude = true;
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Removes any latitude associated with this address.
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void clearLatitude() {
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHasLatitude = false;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns true if a longitude has been assigned to this Address,
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * false otherwise.
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasLongitude() {
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mHasLongitude;
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the longitude of the address if known.
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IllegalStateException if this Address has not been assigned
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a longitude.
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double getLongitude() {
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mHasLongitude) {
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mLongitude;
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalStateException();
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the longitude associated with this address.
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLongitude(double longitude) {
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLongitude = longitude;
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHasLongitude = true;
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Removes any longitude associated with this address.
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void clearLongitude() {
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHasLongitude = false;
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the phone number of the address if known,
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if it is unknown.
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IllegalStateException if this Address has not been assigned
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a latitude.
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getPhone() {
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPhone;
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the phone number associated with this address.
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setPhone(String phone) {
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPhone = phone;
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the public URL for the address if known,
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null if it is unknown.
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getUrl() {
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mUrl;
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the public URL associated with this address.
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setUrl(String Url) {
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mUrl = Url;
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns additional provider-specific information about the
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * address as a Bundle.  The keys and values are determined
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the provider.  If no additional information is available,
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * null is returned.
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <!--
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p> A number of common key/value pairs are listed
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * below. Providers that use any of the keys on this list must
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * provide the corresponding value as described below.
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <ul>
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * </ul>
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * -->
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Bundle getExtras() {
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mExtras;
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the extra information associated with this fix to the
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * given Bundle.
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setExtras(Bundle extras) {
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mExtras = (extras == null) ? null : new Bundle(extras);
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuilder sb = new StringBuilder();
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append("Address[addressLines=[");
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i <= mMaxAddressLineIndex; i++) {
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (i > 0) {
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(',');
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append(i);
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append(':');
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String line = mAddressLines.get(i);
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (line == null) {
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append("null");
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append('\"');
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append(line);
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sb.append('\"');
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(']');
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",feature=");
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mFeatureName);
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",admin=");
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mAdminArea);
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",sub-admin=");
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mSubAdminArea);
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",locality=");
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mLocality);
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",thoroughfare=");
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mThoroughfare);
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",postalCode=");
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mPostalCode);
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",countryCode=");
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mCountryCode);
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",countryName=");
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mCountryName);
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",hasLatitude=");
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mHasLatitude);
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",latitude=");
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mLatitude);
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",hasLongitude=");
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mHasLongitude);
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",longitude=");
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mLongitude);
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",phone=");
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mPhone);
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",url=");
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mUrl);
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(",extras=");
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(mExtras);
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(']');
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sb.toString();
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<Address> CREATOR =
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Parcelable.Creator<Address>() {
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Address createFromParcel(Parcel in) {
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String language = in.readString();
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String country = in.readString();
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Locale locale = country.length() > 0 ?
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Locale(language, country) :
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Locale(language);
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Address a = new Address(locale);
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int N = in.readInt();
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (N > 0) {
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                a.mAddressLines = new HashMap<Integer, String>(N);
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                for (int i = 0; i < N; i++) {
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    int index = in.readInt();
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    String line = in.readString();
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    a.mAddressLines.put(index, line);
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    a.mMaxAddressLineIndex =
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Math.max(a.mMaxAddressLineIndex, index);
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                a.mAddressLines = null;
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                a.mMaxAddressLineIndex = -1;
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mFeatureName = in.readString();
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mAdminArea = in.readString();
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mSubAdminArea = in.readString();
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mLocality = in.readString();
503e6ec57727e2da14a9027293858d97a84b08768b1Paul Watts            a.mSubLocality = in.readString();
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mThoroughfare = in.readString();
505e6ec57727e2da14a9027293858d97a84b08768b1Paul Watts            a.mSubThoroughfare = in.readString();
506e6ec57727e2da14a9027293858d97a84b08768b1Paul Watts            a.mPremises = in.readString();
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mPostalCode = in.readString();
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mCountryCode = in.readString();
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mCountryName = in.readString();
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mHasLatitude = in.readInt() == 0 ? false : true;
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (a.mHasLatitude) {
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                a.mLatitude = in.readDouble();
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mHasLongitude = in.readInt() == 0 ? false : true;
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (a.mHasLongitude) {
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                a.mLongitude = in.readDouble();
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mPhone = in.readString();
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mUrl = in.readString();
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            a.mExtras = in.readBundle();
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return a;
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Address[] newArray(int size) {
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new Address[size];
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return (mExtras != null) ? mExtras.describeContents() : 0;
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel parcel, int flags) {
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mLocale.getLanguage());
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mLocale.getCountry());
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mAddressLines == null) {
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            parcel.writeInt(0);
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Set<Map.Entry<Integer, String>> entries = mAddressLines.entrySet();
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            parcel.writeInt(entries.size());
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (Map.Entry<Integer, String> e : entries) {
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                parcel.writeInt(e.getKey());
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                parcel.writeString(e.getValue());
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mFeatureName);
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mAdminArea);
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mSubAdminArea);
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mLocality);
550e6ec57727e2da14a9027293858d97a84b08768b1Paul Watts        parcel.writeString(mSubLocality);
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mThoroughfare);
552e6ec57727e2da14a9027293858d97a84b08768b1Paul Watts        parcel.writeString(mSubThoroughfare);
553e6ec57727e2da14a9027293858d97a84b08768b1Paul Watts        parcel.writeString(mPremises);
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mPostalCode);
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mCountryCode);
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mCountryName);
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(mHasLatitude ? 1 : 0);
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mHasLatitude) {
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            parcel.writeDouble(mLatitude);
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(mHasLongitude ? 1 : 0);
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mHasLongitude){
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            parcel.writeDouble(mLongitude);
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mPhone);
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeString(mUrl);
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeBundle(mExtras);
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
570