1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams * Copyright (C) 2007 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspackage android.location; 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 190b575de8ed0b628d84d256f5846500b0385979bdTim Murrayimport java.util.HashMap; 20bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Samsimport java.util.Locale; 210b575de8ed0b628d84d256f5846500b0385979bdTim Murrayimport java.util.Map; 22bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Samsimport java.util.Set; 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsimport android.os.Bundle; 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsimport android.os.Parcel; 26afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukimport android.os.Parcelable; 27246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk 28246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk/** 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * A class representing an Address, i.e, a set of Strings describing a location. 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 31c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk * The addres format is a simplified version of xAL (eXtensible Address Language) 328154954868694e1f233d87d4933a474518b1cb81Jason Sams * http://www.oasis-open.org/committees/ciq/ciq.html#6 338154954868694e1f233d87d4933a474518b1cb81Jason Sams */ 348154954868694e1f233d87d4933a474518b1cb81Jason Samspublic class Address implements Parcelable { 358154954868694e1f233d87d4933a474518b1cb81Jason Sams 368154954868694e1f233d87d4933a474518b1cb81Jason Sams private Locale mLocale; 378154954868694e1f233d87d4933a474518b1cb81Jason Sams 38225afd317e101a7be5fe02c0a86361146ea89f05Jason Sams private String mFeatureName; 39225afd317e101a7be5fe02c0a86361146ea89f05Jason Sams private HashMap<Integer, String> mAddressLines; 40afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk private int mMaxAddressLineIndex = -1; 41246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk private String mAdminArea; 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private String mSubAdminArea; 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private String mLocality; 44afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk private String mSubLocality; 45246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk private String mThoroughfare; 46246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk private String mSubThoroughfare; 47246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk private String mPremises; 48246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk private String mPostalCode; 4986087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines private String mCountryCode; 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private String mCountryName; 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private double mLatitude; 5250bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk private double mLongitude; 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private boolean mHasLatitude = false; 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private boolean mHasLongitude = false; 55afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk private String mPhone; 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private String mUrl; 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams private Bundle mExtras = null; 58afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 59c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk /** 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Constructs a new Address object set to the given Locale and with all 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * other fields initialized to null or false. 6286087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines */ 6386087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines public Address(Locale locale) { 6486087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines mLocale = locale; 6586087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines } 6686087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines 67afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk /** 68246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * Returns the Locale associated with this address. 69246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk */ 7050bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk public Locale getLocale() { 7150bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk return mLocale; 7250bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk } 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 74246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk /** 75246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * Returns the largest index currently in use to specify an address line. 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * If no address lines are specified, -1 is returned. 77246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk */ 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams public int getMaxAddressLineIndex() { 79246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk return mMaxAddressLineIndex; 80246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk } 81246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk 82246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk /** 83246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * Returns a line of the address numbered by the given index 8486087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines * (starting at 0), or null if no such line is present. 85417e6a486adb02b3b29ada9725286f554cc6d0d3Alex Sakhartchouk * 86246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * @throws IllegalArgumentException if index < 0 87246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk */ 88246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk public String getAddressLine(int index) { 8986087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines if (index < 0) { 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams throw new IllegalArgumentException("index = " + index + " < 0"); 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 9250bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk return mAddressLines == null? null : mAddressLines.get(index); 9350bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk } 9450bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk 9586087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines /** 96246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * Sets the line of the address numbered by index (starting at 0) to the 97246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * given String, which may be null. 98246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * 99246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * @throws IllegalArgumentException if index < 0 10086087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines */ 10186087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines public void setAddressLine(int index, String line) { 1027c52898ac201043a26b3edb7526d414684cfb96bJason Sams if (index < 0) { 1037c52898ac201043a26b3edb7526d414684cfb96bJason Sams throw new IllegalArgumentException("index = " + index + " < 0"); 1047c52898ac201043a26b3edb7526d414684cfb96bJason Sams } 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mAddressLines == null) { 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mAddressLines = new HashMap<Integer, String>(); 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 10886087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines mAddressLines.put(index, line); 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 11050bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk if (line == null) { 11186087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines // We've eliminated a line, recompute the max index 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mMaxAddressLineIndex = -1; 1130b575de8ed0b628d84d256f5846500b0385979bdTim Murray for (Integer i : mAddressLines.keySet()) { 114bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams mMaxAddressLineIndex = Math.max(mMaxAddressLineIndex, i); 115bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams } 116bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams } else { 117bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams mMaxAddressLineIndex = Math.max(mMaxAddressLineIndex, index); 118bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams } 119bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams } 120bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams 121bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams /** 122bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams * Returns the feature name of the address, for example, "Golden Gate Bridge", or null 123bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams * if it is unknown 124bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams */ 125bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams public String getFeatureName() { 126bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams return mFeatureName; 127bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams } 128bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams 129bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams /** 130bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams * Sets the feature name of the address to the given String, which may be null 131bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams */ 132bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams public void setFeatureName(String featureName) { 133bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams mFeatureName = featureName; 134bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams } 135bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams 136bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams /** 137bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams * Returns the administrative area name of the address, for example, "CA", or null if 1380b575de8ed0b628d84d256f5846500b0385979bdTim Murray * it is unknown 13986087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines */ 14050bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk public String getAdminArea() { 141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return mAdminArea; 142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 14386087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines 14486087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines /** 14586087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines * Sets the administrative area name of the address to the given String, which may be null 14686087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines */ 14786087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines public void setAdminArea(String adminArea) { 14886087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines this.mAdminArea = adminArea; 14986087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines } 15086087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines 15186087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines /** 15286087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines * Returns the sub-administrative area name of the address, for example, "Santa Clara County", 15386087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines * or null if it is unknown 15486087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines */ 15586087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines public String getSubAdminArea() { 15686087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines return mSubAdminArea; 15786087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines } 15886087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines 15986087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines /** 16086087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines * Sets the sub-administrative area name of the address to the given String, which may be null 16186087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines */ 16286087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines public void setSubAdminArea(String subAdminArea) { 16386087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines this.mSubAdminArea = subAdminArea; 16486087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines } 16586087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines 16686087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines /** 16786087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines * Returns the locality of the address, for example "Mountain View", or null if it is unknown. 16886087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines */ 16986087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines public String getLocality() { 17086087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines return mLocality; 17186087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines } 17286087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines 17386087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines /** 17486087f2f1da630d43f4010c246619f3fd4fad286Stephen Hines * Sets the locality of the address to the given String, which may be null. 175afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk */ 176e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams public void setLocality(String locality) { 177e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams mLocality = locality; 17850bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk } 17950bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk 18050bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk /** 18150bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk * Returns the sub-locality of the address, or null if it is unknown. 182246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * For example, this may correspond to the neighborhood of the locality. 18350bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk */ 18487319de2b16a185cf360827c96a42cf1fcaae744Jason Sams public String getSubLocality() { 185e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams return mSubLocality; 186e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams } 187e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 188e3150cfb3edb028407669e4a65e087eae77e718cJason Sams /** 189fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk * Sets the sub-locality of the address to the given String, which may be null. 190fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk */ 191fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk public void setSubLocality(String sublocality) { 192fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk mSubLocality = sublocality; 193fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk } 194fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk 195e3150cfb3edb028407669e4a65e087eae77e718cJason Sams /** 196fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk * Returns the thoroughfare name of the address, for example, "1600 Ampitheater Parkway", 19750bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk * which may be null 19850bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk */ 19950bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk public String getThoroughfare() { 200fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk return mThoroughfare; 201246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk } 20250bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk 203fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk /** 204fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk * Sets the thoroughfare name of the address, which may be null. 205afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk */ 206fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk public void setThoroughfare(String thoroughfare) { 207b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk this.mThoroughfare = thoroughfare; 208afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk } 209af12ac6a08651464f8d823add667c706f993b587Steve Block 210fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk /** 211fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk * Returns the sub-thoroughfare name of the address, which may be null. 212fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk * This may correspond to the street number of the address. 213fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk */ 214fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk public String getSubThoroughfare() { 215fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk return mSubThoroughfare; 216fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk } 217afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 218fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk /** 219fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk * Sets the sub-thoroughfare name of the address, which may be null. 220fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk */ 221f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams public void setSubThoroughfare(String subthoroughfare) { 222f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams this.mSubThoroughfare = subthoroughfare; 223f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams } 224f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams 225f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams /** 226a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams * Returns the premises of the address, or null if it is unknown. 227c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk */ 228c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk public String getPremises() { 229fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk return mPremises; 230fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk } 231afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 232ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams /** 233ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams * Sets the premises of the address to the given String, which may be null. 234ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams */ 235ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams public void setPremises(String premises) { 236ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams mPremises = premises; 237ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams } 238ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams 239ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams /** 240ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams * Returns the postal code of the address, for example "94110", 241ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams * or null if it is unknown. 242ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams */ 243ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams public String getPostalCode() { 244ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams return mPostalCode; 245ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams } 246ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams 247ef21edcc70fc2734a3dc7995d3c3af1f90d16ef8Jason Sams /** 248c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk * Sets the postal code of the address to the given String, which may 249c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk * be null. 250a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams */ 251c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk public void setPostalCode(String postalCode) { 252e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams mPostalCode = postalCode; 25396abf819e50b59ba8cf886c13f894633eb0a24baJason Sams } 254f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams 255f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams /** 25696abf819e50b59ba8cf886c13f894633eb0a24baJason Sams * Returns the country code of the address, for example "US", 25796abf819e50b59ba8cf886c13f894633eb0a24baJason Sams * or null if it is unknown. 258f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams */ 25996abf819e50b59ba8cf886c13f894633eb0a24baJason Sams public String getCountryCode() { 260f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams return mCountryCode; 261f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams } 262f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams 263f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams /** 264a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams * Sets the country code of the address to the given String, which may 265c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk * be null. 266f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams */ 267c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk public void setCountryCode(String countryCode) { 26896abf819e50b59ba8cf886c13f894633eb0a24baJason Sams mCountryCode = countryCode; 269f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams } 270f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams 27196abf819e50b59ba8cf886c13f894633eb0a24baJason Sams /** 27296abf819e50b59ba8cf886c13f894633eb0a24baJason Sams * Returns the localized country name of the address, for example "Iceland", 273246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk * or null if it is unknown. 274c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk */ 275f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams public String getCountryName() { 27650bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk return mCountryName; 27750bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk } 27850bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk 27950bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk /** 280a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams * Sets the country name of the address to the given String, which may 28196abf819e50b59ba8cf886c13f894633eb0a24baJason Sams * be null. 282f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams */ 283f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams public void setCountryName(String countryName) { 284f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams mCountryName = countryName; 285f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams } 286f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams 287c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk /** 28896abf819e50b59ba8cf886c13f894633eb0a24baJason Sams * Returns true if a latitude has been assigned to this Address, 28996abf819e50b59ba8cf886c13f894633eb0a24baJason Sams * false otherwise. 290c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk */ 291c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk public boolean hasLatitude() { 292a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams return mHasLatitude; 293f0c1df480304a72ce41e7d4b088319cbd7f0938aJason Sams } 29496abf819e50b59ba8cf886c13f894633eb0a24baJason Sams 295c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk /** 296afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk * Returns the latitude of the address if known. 297afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk * 298c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk * @throws IllegalStateException if this Address has not been assigned 299a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams * a latitude. 30096abf819e50b59ba8cf886c13f894633eb0a24baJason Sams */ 30196abf819e50b59ba8cf886c13f894633eb0a24baJason Sams public double getLatitude() { 30296abf819e50b59ba8cf886c13f894633eb0a24baJason Sams if (mHasLatitude) { 3039f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines return mLatitude; 3049f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines } else { 3059f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines throw new IllegalStateException(); 3069f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines } 3079f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines } 3089f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines 3099f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines /** 3109f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines * Sets the latitude associated with this address. 3119f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines */ 3129f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines public void setLatitude(double latitude) { 3139f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines mLatitude = latitude; 3149f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines mHasLatitude = true; 3159f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines } 3169f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines 3179f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines /** 3189f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines * Removes any latitude associated with this address. 3199f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines */ 3209f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines public void clearLatitude() { 3219f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines mHasLatitude = false; 3229f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines } 3239f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines 3249f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines /** 3259f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines * Returns true if a longitude has been assigned to this Address, 3269f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines * false otherwise. 3279f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines */ 3289f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines public boolean hasLongitude() { 3299f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines return mHasLongitude; 3309f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines } 3319f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines 3329f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines /** 3339f70a4e63825afe9f786483722e1669b3625f5e9Stephen Hines * Returns the longitude of the address if known. 334326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 335e5ffb879ae535a899a486285a23bea05e912480fJason Sams * @throws IllegalStateException if this Address has not been assigned 336326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * a longitude. 337326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 338326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams public double getLongitude() { 339c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams if (mHasLongitude) { 340a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams return mLongitude; 3412353ae303868d04e3a26002b2f2dc456c15e8170Jason Sams } else { 3422353ae303868d04e3a26002b2f2dc456c15e8170Jason Sams throw new IllegalStateException(); 343a572aca4eb4ddb32c10baa1f529431cfefd756b8Jason Sams } 344326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 345326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 346c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams /** 347c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams * Sets the longitude associated with this address. 348c975cf4a71b63ccbd20f1f3b3341c5f2e6025b45Jason Sams */ 349099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray public void setLongitude(double longitude) { 350dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk mLongitude = longitude; 35150bfc354e61e174a465893fd0dafe913f1954478Alex Sakhartchouk mHasLongitude = true; 352246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk } 353dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk 354dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk /** 355dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk * Removes any longitude associated with this address. 356dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk */ 357dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk public void clearLongitude() { 358246fbee66ccb17cb1f08a5420e104a709183bce1Alex Sakhartchouk mHasLongitude = false; 359dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk } 360099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray 361dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk /** 362dc763f345db3e796efc28dc4b4d8edffda5a803eAlex Sakhartchouk * Returns the phone number of the address if known, 363 * or null if it is unknown. 364 * 365 * @throws IllegalStateException if this Address has not been assigned 366 * a latitude. 367 */ 368 public String getPhone() { 369 return mPhone; 370 } 371 372 /** 373 * Sets the phone number associated with this address. 374 */ 375 public void setPhone(String phone) { 376 mPhone = phone; 377 } 378 379 /** 380 * Returns the public URL for the address if known, 381 * or null if it is unknown. 382 */ 383 public String getUrl() { 384 return mUrl; 385 } 386 387 /** 388 * Sets the public URL associated with this address. 389 */ 390 public void setUrl(String Url) { 391 mUrl = Url; 392 } 393 394 /** 395 * Returns additional provider-specific information about the 396 * address as a Bundle. The keys and values are determined 397 * by the provider. If no additional information is available, 398 * null is returned. 399 * 400 * <!-- 401 * <p> A number of common key/value pairs are listed 402 * below. Providers that use any of the keys on this list must 403 * provide the corresponding value as described below. 404 * 405 * <ul> 406 * </ul> 407 * --> 408 */ 409 public Bundle getExtras() { 410 return mExtras; 411 } 412 413 /** 414 * Sets the extra information associated with this fix to the 415 * given Bundle. 416 */ 417 public void setExtras(Bundle extras) { 418 mExtras = (extras == null) ? null : new Bundle(extras); 419 } 420 421 @Override 422 public String toString() { 423 StringBuilder sb = new StringBuilder(); 424 sb.append("Address[addressLines=["); 425 for (int i = 0; i <= mMaxAddressLineIndex; i++) { 426 if (i > 0) { 427 sb.append(','); 428 } 429 sb.append(i); 430 sb.append(':'); 431 String line = mAddressLines.get(i); 432 if (line == null) { 433 sb.append("null"); 434 } else { 435 sb.append('\"'); 436 sb.append(line); 437 sb.append('\"'); 438 } 439 } 440 sb.append(']'); 441 sb.append(",feature="); 442 sb.append(mFeatureName); 443 sb.append(",admin="); 444 sb.append(mAdminArea); 445 sb.append(",sub-admin="); 446 sb.append(mSubAdminArea); 447 sb.append(",locality="); 448 sb.append(mLocality); 449 sb.append(",thoroughfare="); 450 sb.append(mThoroughfare); 451 sb.append(",postalCode="); 452 sb.append(mPostalCode); 453 sb.append(",countryCode="); 454 sb.append(mCountryCode); 455 sb.append(",countryName="); 456 sb.append(mCountryName); 457 sb.append(",hasLatitude="); 458 sb.append(mHasLatitude); 459 sb.append(",latitude="); 460 sb.append(mLatitude); 461 sb.append(",hasLongitude="); 462 sb.append(mHasLongitude); 463 sb.append(",longitude="); 464 sb.append(mLongitude); 465 sb.append(",phone="); 466 sb.append(mPhone); 467 sb.append(",url="); 468 sb.append(mUrl); 469 sb.append(",extras="); 470 sb.append(mExtras); 471 sb.append(']'); 472 return sb.toString(); 473 } 474 475 public static final Parcelable.Creator<Address> CREATOR = 476 new Parcelable.Creator<Address>() { 477 public Address createFromParcel(Parcel in) { 478 String language = in.readString(); 479 String country = in.readString(); 480 Locale locale = country.length() > 0 ? 481 new Locale(language, country) : 482 new Locale(language); 483 Address a = new Address(locale); 484 485 int N = in.readInt(); 486 if (N > 0) { 487 a.mAddressLines = new HashMap<Integer, String>(N); 488 for (int i = 0; i < N; i++) { 489 int index = in.readInt(); 490 String line = in.readString(); 491 a.mAddressLines.put(index, line); 492 a.mMaxAddressLineIndex = 493 Math.max(a.mMaxAddressLineIndex, index); 494 } 495 } else { 496 a.mAddressLines = null; 497 a.mMaxAddressLineIndex = -1; 498 } 499 a.mFeatureName = in.readString(); 500 a.mAdminArea = in.readString(); 501 a.mSubAdminArea = in.readString(); 502 a.mLocality = in.readString(); 503 a.mSubLocality = in.readString(); 504 a.mThoroughfare = in.readString(); 505 a.mSubThoroughfare = in.readString(); 506 a.mPremises = in.readString(); 507 a.mPostalCode = in.readString(); 508 a.mCountryCode = in.readString(); 509 a.mCountryName = in.readString(); 510 a.mHasLatitude = in.readInt() == 0 ? false : true; 511 if (a.mHasLatitude) { 512 a.mLatitude = in.readDouble(); 513 } 514 a.mHasLongitude = in.readInt() == 0 ? false : true; 515 if (a.mHasLongitude) { 516 a.mLongitude = in.readDouble(); 517 } 518 a.mPhone = in.readString(); 519 a.mUrl = in.readString(); 520 a.mExtras = in.readBundle(); 521 return a; 522 } 523 524 public Address[] newArray(int size) { 525 return new Address[size]; 526 } 527 }; 528 529 public int describeContents() { 530 return (mExtras != null) ? mExtras.describeContents() : 0; 531 } 532 533 public void writeToParcel(Parcel parcel, int flags) { 534 parcel.writeString(mLocale.getLanguage()); 535 parcel.writeString(mLocale.getCountry()); 536 if (mAddressLines == null) { 537 parcel.writeInt(0); 538 } else { 539 Set<Map.Entry<Integer, String>> entries = mAddressLines.entrySet(); 540 parcel.writeInt(entries.size()); 541 for (Map.Entry<Integer, String> e : entries) { 542 parcel.writeInt(e.getKey()); 543 parcel.writeString(e.getValue()); 544 } 545 } 546 parcel.writeString(mFeatureName); 547 parcel.writeString(mAdminArea); 548 parcel.writeString(mSubAdminArea); 549 parcel.writeString(mLocality); 550 parcel.writeString(mSubLocality); 551 parcel.writeString(mThoroughfare); 552 parcel.writeString(mSubThoroughfare); 553 parcel.writeString(mPremises); 554 parcel.writeString(mPostalCode); 555 parcel.writeString(mCountryCode); 556 parcel.writeString(mCountryName); 557 parcel.writeInt(mHasLatitude ? 1 : 0); 558 if (mHasLatitude) { 559 parcel.writeDouble(mLatitude); 560 } 561 parcel.writeInt(mHasLongitude ? 1 : 0); 562 if (mHasLongitude){ 563 parcel.writeDouble(mLongitude); 564 } 565 parcel.writeString(mPhone); 566 parcel.writeString(mUrl); 567 parcel.writeBundle(mExtras); 568 } 569} 570