1a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao/* 2a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * Copyright (C) 2010 The Android Open Source Project 3a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * 4a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * Licensed under the Apache License, Version 2.0 (the "License"); 5a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * you may not use this file except in compliance with the License. 6a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * You may obtain a copy of the License at 7a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * 8a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * http://www.apache.org/licenses/LICENSE-2.0 9a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * 10a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * Unless required by applicable law or agreed to in writing, software 11a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * distributed under the License is distributed on an "AS IS" BASIS, 12a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * See the License for the specific language governing permissions and 14a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * limitations under the License 15a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao */ 16a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 17a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taopackage com.android.server.location; 18a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 19a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.location.Country; 20a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.location.CountryListener; 21a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.test.AndroidTestCase; 22a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 23a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taopublic class ComprehensiveCountryDetectorTest extends AndroidTestCase { 24a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private class TestCountryDetector extends ComprehensiveCountryDetector { 25a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public final static String COUNTRY_ISO = "us"; 26a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private boolean mLocationBasedDetectorStarted; 27a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private boolean mLocationBasedDetectorStopped; 28a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected boolean mNotified; 29a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private boolean listenerAdded = false; 30a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 31a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private Country mNotifiedCountry; 32a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public TestCountryDetector() { 33a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao super(getContext()); 34a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 35a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 36a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void notifyLocationBasedListener(Country country) { 37a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mNotified = true; 38a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mNotifiedCountry = country; 39a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mLocationBasedCountryDetector.notifyListener(country); 40a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 41a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 42a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean locationBasedDetectorStarted() { 43a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mLocationBasedCountryDetector != null && mLocationBasedDetectorStarted; 44a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 45a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 46a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean locationBasedDetectorStopped() { 47a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mLocationBasedCountryDetector == null && mLocationBasedDetectorStopped; 48a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 49a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 50a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean locationRefreshStarted() { 51a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mLocationRefreshTimer != null; 52a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 53a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 54a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean locationRefreshCancelled() { 55a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mLocationRefreshTimer == null; 56a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 57a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 58a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 59a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected CountryDetectorBase createLocationBasedCountryDetector() { 60a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return new CountryDetectorBase(mContext) { 61a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 62a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public Country detectCountry() { 63a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mLocationBasedDetectorStarted = true; 64a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return null; 65a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 66a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 67a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 68a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void stop() { 69a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mLocationBasedDetectorStopped = true; 70a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 71a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 72a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 73a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 74a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 75a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getNetworkBasedCountry() { 76a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return null; 77a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 78a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 79a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 80a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getLastKnownLocationBasedCountry() { 81a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mNotifiedCountry; 82a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 83a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 84a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 85a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getSimBasedCountry() { 86a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return null; 87a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 88a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 89a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 90a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getLocaleCountry() { 91a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return null; 92a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 93a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 94a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 95a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected void runAfterDetectionAsync(final Country country, final Country detectedCountry, 96a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao final boolean notifyChange, final boolean startLocationBasedDetection) { 97a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao runAfterDetection(country, detectedCountry, notifyChange, startLocationBasedDetection); 98a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 99a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 100a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 101a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected boolean isAirplaneModeOff() { 102a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return true; 103a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 104a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 105a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 106a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected synchronized void addPhoneStateListener() { 107a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao listenerAdded = true; 108a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 109a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 110a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 111a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected synchronized void removePhoneStateListener() { 112a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao listenerAdded = false; 113a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 114a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 115a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 116a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected boolean isGeoCoderImplemented() { 117a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return true; 118a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 119a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 120a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean isPhoneStateListenerAdded() { 121a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return listenerAdded; 122a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 123a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 124a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 125a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private class CountryListenerImpl implements CountryListener { 126a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private boolean mNotified; 127a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private Country mCountry; 128a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 129a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void onCountryDetected(Country country) { 130a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mNotified = true; 131a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mCountry = country; 132a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 133a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 134a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean notified() { 135a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mNotified; 136a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 137a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 138a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public Country getCountry() { 139a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mCountry; 140a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 141a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 142a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 143a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testDetectNetworkBasedCountry() { 144a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao final Country resultCountry = new Country( 145a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector.COUNTRY_ISO, Country.COUNTRY_SOURCE_NETWORK); 146a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector() { 147a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 148a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getNetworkBasedCountry() { 149a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return resultCountry; 150a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 151a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 152a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 153a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 154a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Country country = countryDetector.detectCountry(); 155a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(country, resultCountry)); 156a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(listener.notified()); 157a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(countryDetector.locationBasedDetectorStarted()); 158a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(countryDetector.locationRefreshStarted()); 159a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.stop(); 160a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 161a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 162a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testDetectLocationBasedCountry() { 163a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao final Country resultCountry = new Country( 164a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector.COUNTRY_ISO, Country.COUNTRY_SOURCE_SIM); 165a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao final Country locationBasedCountry = new Country( 166a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector.COUNTRY_ISO, Country.COUNTRY_SOURCE_LOCATION); 167a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector() { 168a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 169a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getSimBasedCountry() { 170a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return resultCountry; 171a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 172a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 173a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 174a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 175a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Country country = countryDetector.detectCountry(); 176a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(country, resultCountry)); 177a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStarted()); 178a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.notifyLocationBasedListener(locationBasedCountry); 179a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(listener.notified()); 180a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(listener.getCountry(), locationBasedCountry)); 181a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStopped()); 182a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshStarted()); 183a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.stop(); 184a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshCancelled()); 185a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 186a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 187a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testLocaleBasedCountry() { 188a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao final Country resultCountry = new Country( 189a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector.COUNTRY_ISO, Country.COUNTRY_SOURCE_LOCALE); 190a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector() { 191a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 192a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getLocaleCountry() { 193a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return resultCountry; 194a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 195a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 196a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 197a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 198a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Country country = countryDetector.detectCountry(); 199a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(country, resultCountry)); 200a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(listener.notified()); 201a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStarted()); 202a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshStarted()); 203a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.stop(); 204a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshCancelled()); 205a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 206a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 207a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testStoppingDetector() { 208a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao // Test stopping detector when LocationBasedCountryDetector was started 209a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao final Country resultCountry = new Country( 210a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector.COUNTRY_ISO, Country.COUNTRY_SOURCE_SIM); 211a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector() { 212a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 213a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getSimBasedCountry() { 214a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return resultCountry; 215a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 216a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 217a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 218a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 219a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Country country = countryDetector.detectCountry(); 220a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(country, resultCountry)); 221a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStarted()); 222a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.stop(); 223a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao // The LocationBasedDetector should be stopped. 224a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStopped()); 225a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao // The location refresh should not running. 226a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshCancelled()); 227a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 228a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 229a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testLocationBasedCountryNotFound() { 230a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao final Country resultCountry = new Country( 231a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector.COUNTRY_ISO, Country.COUNTRY_SOURCE_SIM); 232a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector() { 233a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 234a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected Country getSimBasedCountry() { 235a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return resultCountry; 236a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 237a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 238a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 239a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 240a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Country country = countryDetector.detectCountry(); 241a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(country, resultCountry)); 242a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStarted()); 243a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.notifyLocationBasedListener(null); 244a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(listener.notified()); 245a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(listener.getCountry(), null)); 246a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStopped()); 247a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshStarted()); 248a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.stop(); 249a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshCancelled()); 250a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 251a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 252a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testNoCountryFound() { 253a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector(); 254a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 255a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 256a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Country country = countryDetector.detectCountry(); 257a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(country, null)); 258a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStarted()); 259a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.notifyLocationBasedListener(null); 260a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(listener.notified()); 261a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(sameCountry(listener.getCountry(), null)); 262a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStopped()); 263a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshStarted()); 264a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.stop(); 265a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationRefreshCancelled()); 266a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 267a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 268a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testAddRemoveListener() { 269a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector(); 270a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 271a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 272a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.isPhoneStateListenerAdded()); 273a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStarted()); 274a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(null); 275a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(countryDetector.isPhoneStateListenerAdded()); 276a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.locationBasedDetectorStopped()); 277a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 278a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 279a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testGeocoderNotImplemented() { 280a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao TestCountryDetector countryDetector = new TestCountryDetector() { 281a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 282a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected boolean isGeoCoderImplemented() { 283a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return false; 284a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 285a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao }; 286a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerImpl listener = new CountryListenerImpl(); 287a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(listener); 288a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(countryDetector.isPhoneStateListenerAdded()); 289a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(countryDetector.locationBasedDetectorStarted()); 290a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao countryDetector.setCountryListener(null); 291a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(countryDetector.isPhoneStateListenerAdded()); 292a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 293a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 294a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private boolean sameCountry(Country country1, Country country2) { 295a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return country1 == null && country2 == null || country1 != null && country2 != null && 296a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao country1.getCountryIso().equalsIgnoreCase(country2.getCountryIso()) && 297a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao country1.getSource() == country2.getSource(); 298a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 299a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao} 300