Index: content/public/test/android/javatests/src/org/chromium/content/browser/test/util/MockLocationProvider.java |
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/MockLocationProvider.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/MockLocationProvider.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..147144fdb9ad6920f8fe4da96cfd5a8fd97ad8b8 |
--- /dev/null |
+++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/MockLocationProvider.java |
@@ -0,0 +1,86 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.content.browser.test.util; |
+ |
+import android.os.Handler; |
+import android.os.HandlerThread; |
+import android.os.Message; |
+ |
+import org.chromium.content.browser.LocationProvider; |
+import org.chromium.content.browser.LocationProviderFactory; |
+ |
+public class MockLocationProvider implements LocationProviderFactory.LocationProviderImpl { |
+ private boolean mIsRunning; |
+ private Handler mHandler; |
+ private HandlerThread mHandlerThread; |
+ private static final Object mLock = new Object(); |
+ |
+ private static final int UPDATE_LOCATION = 100; |
+ |
+ public MockLocationProvider() { |
+ } |
+ |
+ public void stopUpdates() { |
+ if (mHandlerThread != null) { |
+ mHandlerThread.quit(); |
+ } |
+ } |
+ |
+ @Override |
+ public void start(boolean gpsEnabled) { |
+ if (mHandlerThread == null) { |
+ startMockLocationProviderThread(); |
+ } |
+ |
+ if (mIsRunning) return; |
bulach
2013/12/11 15:48:39
nit: would be clearer to move this check first.
benm (inactive)
2013/12/11 20:08:51
Done.
|
+ mIsRunning = true; |
+ synchronized (mLock) { |
+ mHandler.sendEmptyMessage(UPDATE_LOCATION); |
+ } |
+ } |
+ |
+ @Override |
+ public void stop() { |
+ if (!mIsRunning) return; |
+ mIsRunning = false; |
+ synchronized (mLock) { |
+ mHandler.removeMessages(UPDATE_LOCATION); |
+ } |
+ } |
+ |
+ @Override |
+ public boolean isRunning() { |
+ return mIsRunning; |
+ } |
+ |
+ private void startMockLocationProviderThread() { |
+ assert mHandlerThread == null; |
+ assert mHandler == null; |
+ |
+ mHandlerThread = new HandlerThread("MockLocationProviderImpl"); |
+ mHandlerThread.start(); |
+ mHandler = new Handler(mHandlerThread.getLooper()) { |
+ @Override |
+ public void handleMessage(Message msg) { |
+ synchronized(mLock) { |
+ if (msg.what == UPDATE_LOCATION) { |
+ newLocation(); |
+ sendEmptyMessageDelayed(UPDATE_LOCATION, 250); |
+ } |
+ } |
+ } |
+ }; |
+ } |
+ |
+ private void newLocation() { |
+ LocationProvider.nativeNewLocationAvailable( |
+ 0, 0, System.currentTimeMillis() / 1000.0, |
+ false, 0, |
+ true, 0.5, |
+ false, 0, |
+ false, 0); |
+ } |
+}; |
+ |