MockLocationProvider.java revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Copyright 2013 The Chromium Authors. All rights reserved. 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// found in the LICENSE file. 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpackage org.chromium.content.browser.test.util; 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectimport android.os.Handler; 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectimport android.os.HandlerThread; 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectimport android.os.Message; 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectimport org.chromium.content.browser.LocationProviderAdapter; 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectimport org.chromium.content.browser.LocationProviderFactory; 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/** 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * A mock location provider. When started, runs a background thread that periodically 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * posts location updates. This does not involve any system Location APIs and thus 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * does not require any special permissions in the test app or on the device. 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic class MockLocationProvider implements LocationProviderFactory.LocationProvider { 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project private boolean mIsRunning; 2134fb29696b0f3abf61b10f8d053b1f33d501de0aMark Salyzyn private Handler mHandler; 2234fb29696b0f3abf61b10f8d053b1f33d501de0aMark Salyzyn private HandlerThread mHandlerThread; 237562408b2261d38415453378b6188f74fda99d88Mathias Agopian private static final Object mLock = new Object(); 247562408b2261d38415453378b6188f74fda99d88Mathias Agopian 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project private static final int UPDATE_LOCATION_MSG = 100; 261b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public MockLocationProvider() { 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public void stopUpdates() { 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mHandlerThread != null) { 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHandlerThread.quit(); 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project @Override 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public void start(boolean gpsEnabled) { 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsRunning) return; 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mHandlerThread == null) { 417fc9a6fdf146ded90b51c52f4a05d797294dcb85Glenn Kasten startMockLocationProviderThread(); 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsRunning = true; 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project synchronized (mLock) { 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHandler.sendEmptyMessage(UPDATE_LOCATION_MSG); 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 495ff1dd576bb93c45b44088a51544a18fc43ebf58Steve Block 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project @Override 51e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten public void stop() { 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!mIsRunning) return; 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsRunning = false; 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project synchronized (mLock) { 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHandler.removeMessages(UPDATE_LOCATION_MSG); 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5829357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project @Override 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public boolean isRunning() { 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return mIsRunning; 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 643856b090cd04ba5dd4a59a12430ed724d5995909Steve Block private void startMockLocationProviderThread() { 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project assert mHandlerThread == null; 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project assert mHandler == null; 6729357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHandlerThread = new HandlerThread("MockLocationProviderImpl"); 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHandlerThread.start(); 708d6cc842e8d525405c68e57fdf3bc5da0b4d7e87Glenn Kasten mHandler = new Handler(mHandlerThread.getLooper()) { 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project @Override 7229357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block public void handleMessage(Message msg) { 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project synchronized (mLock) { 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (msg.what == UPDATE_LOCATION_MSG) { 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project newLocation(); 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sendEmptyMessageDelayed(UPDATE_LOCATION_MSG, 250); 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 793856b090cd04ba5dd4a59a12430ed724d5995909Steve Block } 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project private void newLocation() { 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LocationProviderAdapter.newLocationAvailable( 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 0, 0, System.currentTimeMillis() / 1000.0, 863856b090cd04ba5dd4a59a12430ed724d5995909Steve Block false, 0, 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project true, 0.5, 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project false, 0, 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project false, 0); 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project