Bug 1332434 - Add Baidu location support code (no libraries). r?snorp
MozReview-Commit-ID: 15VD6RLNQh6
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -16,16 +16,19 @@
android:targetSdkVersion="23"/>
<!-- The bouncer APK and the main APK should define the same set of
<permission>, <uses-permission>, and <uses-feature> elements. This reduces
the likelihood of permission-related surprises when installing the main APK
on top of a pre-installed bouncer APK. Add such shared elements in the
fileincluded here, so that they can be referenced by both APKs. -->
#include FennecManifest_permissions.xml.in
+#ifdef MOZ_ANDROID_MOZILLA_ONLINE
+#include ../thirdparty/baidu-geolocation-libs/manifests/BaiduLocationAndroidManifest_permissions.xml.in
+#endif
<application android:label="@string/moz_app_displayname"
android:icon="@drawable/icon"
android:logo="@drawable/logo"
android:name="@MOZ_ANDROID_APPLICATION_CLASS@"
android:hardwareAccelerated="true"
android:supportsRtl="true"
android:allowBackup="false"
@@ -260,16 +263,19 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
#include ../services/manifests/FxAccountAndroidManifest_activities.xml.in
#ifdef MOZ_ANDROID_SEARCH_ACTIVITY
#include ../search/manifests/SearchAndroidManifest_activities.xml.in
#endif
+#ifdef MOZ_ANDROID_MOZILLA_ONLINE
+#include ../thirdparty/baidu-geolocation-libs/manifests/BaiduLocationAndroidManifest_services.xml.in
+#endif
#ifdef MOZ_CRASHREPORTER
<activity android:name="org.mozilla.gecko.CrashReporter"
android:process="@ANDROID_PACKAGE_NAME@.CrashReporter"
android:label="@string/crash_reporter_title"
android:icon="@drawable/crash_reporter"
android:theme="@style/Gecko"
android:exported="false"
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -157,16 +157,20 @@ endif
ifdef MOZ_INSTALL_TRACKING
GECKOVIEW_JARS += gecko-thirdparty-adjust_sdk.jar
endif
ifdef MOZ_ANDROID_MMA
GECKOVIEW_JARS += gecko-thirdparty-leanplum_sdk.jar
endif
+ifdef MOZ_ANDROID_MOZILLA_ONLINE
+GECKOVIEW_JARS += $(topsrcdir)/mobile/android/thirdparty/baidu-geolocation-libs/BaiduLBS_Android.jar
+endif
+
geckoview_jars_classpath := $(subst $(NULL) ,:,$(strip $(GECKOVIEW_JARS)))
FENNEC_JARS = \
gecko-browser.jar \
gecko-thirdparty.jar \
services.jar \
$(NULL)
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -469,26 +469,38 @@ if CONFIG['MOZ_ANDROID_HLS_SUPPORT']:
'media/GeckoHlsRendererBase.java',
'media/GeckoHlsResourceWrapper.java',
'media/GeckoHlsSample.java',
'media/GeckoHlsVideoRenderer.java',
'media/GeckoVideoInfo.java',
'media/Utils.java',
]]
+if CONFIG['MOZ_ANDROID_MOZILLA_ONLINE']:
+ gvjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
+ 'baidu/BaiduLocation.java',
+ ]]
+else:
+ gvjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
+ 'baidu/stub/BaiduLocation.java',
+ ]]
gvjar.extra_jars += [
CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
'constants.jar',
'gecko-mozglue.jar',
'gecko-util.jar',
]
+if CONFIG['MOZ_ANDROID_MOZILLA_ONLINE']:
+ gvjar.extra_jars.append(thirdparty_source_dir + 'baidu-geolocation-libs/BaiduLBS_Android.jar')
+ gvjar.extra_jars.sort
+
gvjar.javac_flags += [
'-Xlint:all,-deprecation,-fallthrough',
'-J-Xmx512m',
'-J-Xms128m'
]
gbjar = add_java_jar('gecko-browser')
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
@@ -19,16 +19,17 @@ import java.net.URLConnection;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;
+import org.mozilla.gecko.BaiduLocation;
import org.mozilla.gecko.annotation.JNITarget;
import org.mozilla.gecko.annotation.RobocopTarget;
import org.mozilla.gecko.annotation.WrapForJNI;
import org.mozilla.gecko.gfx.BitmapUtils;
import org.mozilla.gecko.gfx.LayerView;
import org.mozilla.gecko.permissions.Permissions;
import org.mozilla.gecko.process.GeckoProcessManager;
import org.mozilla.gecko.util.HardwareCodecCapabilityUtils;
@@ -327,16 +328,25 @@ public class GeckoAppShell
} catch (final SecurityException e) {
Log.e(LOGTAG, "No location permission", e);
}
}
});
return;
}
+ if (AppConstants.MOZ_ANDROID_MOZILLA_ONLINE) {
+ // Use Baidu location client instead.
+ if (enable) {
+ BaiduLocation.start();
+ }
+ // Is there a way to stop the Baidu location client?
+ return;
+ }
+
LocationManager lm = getLocationManager(getApplicationContext());
if (lm == null) {
return;
}
if (!enable) {
lm.removeUpdates(getLocationListener());
return;
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/baidu/BaiduLocation.java
@@ -0,0 +1,68 @@
+package org.mozilla.gecko;
+
+import java.util.Date;
+
+import org.mozilla.gecko.GeckoAppShell;
+
+import android.location.Location;
+
+import com.baidu.location.BDLocation;
+import com.baidu.location.BDLocationListener;
+import com.baidu.location.LocationClient;
+import com.baidu.location.LocationClientOption;
+import com.baidu.location.Poi;
+
+public class BaiduLocation
+{
+ //Add for baidu geolocation
+ public static LocationClient mLocationClient = null;
+
+ public static void start() {
+ if (mLocationClient != null) {
+ mLocationClient.requestLocation();
+ return;
+ }
+ final String BAIDU_PROVIDER = "BAIDU_GEOLOCATION";
+ mLocationClient = new LocationClient(GeckoAppShell.getApplicationContext()); //声明LocationClient类
+ LocationClientOption option = new LocationClientOption();
+ option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
+ option.setCoorType("gcj02"); //可选,默认gcj02,设置返回的定位结果坐标系
+ int span = 5000;
+ option.setScanSpan(span); //可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
+ option.setIsNeedAddress(true); //可选,设置是否需要地址信息,默认不需要
+ option.setOpenGps(true); //可选,默认false,设置是否使用gps
+ option.setLocationNotify(true); //可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
+ option.setIsNeedLocationDescribe(true); //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
+ option.setIsNeedLocationPoiList(true); //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
+ option.setIgnoreKillProcess(false); //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
+ option.SetIgnoreCacheException(false); //可选,默认false,设置是否收集CRASH信息,默认收集
+ option.setEnableSimulateGps(false); //可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
+ mLocationClient.setLocOption(option);
+ // Register the listener
+ mLocationClient.registerLocationListener(new BDLocationListener() {
+ @Override
+ public void onReceiveLocation(BDLocation location) {
+ if (location == null) {
+ return;
+ }
+ // Baidu to Google location interfaces
+ Location mLocation = new Location(BAIDU_PROVIDER);
+ mLocation.setLatitude(location.getLatitude());
+ mLocation.setLongitude(location.getLongitude());
+ Date today = new Date();
+ mLocation.setTime(today.getTime());
+ if (location.getLocType() == BDLocation.TypeGpsLocation) { // GPS定位结果
+ mLocation.setSpeed(location.getSpeed());
+ }
+ if (location.hasRadius()) {
+ mLocation.setAccuracy(location.getRadius());
+ }
+ GeckoAppShell.getLocationListener().onLocationChanged(mLocation);
+ }
+ @Override
+ public void onConnectHotSpotMessage(String s, int i) {
+ }
+ });
+ mLocationClient.start();
+ }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/baidu/stub/BaiduLocation.java
@@ -0,0 +1,8 @@
+package org.mozilla.gecko;
+
+public class BaiduLocation
+{
+ public static void start() {
+ return;
+ }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/thirdparty/baidu-geolocation-libs/manifests/BaiduLocationAndroidManifest_permissions.xml.in
@@ -0,0 +1,18 @@
+<!-- 这个权限用于进行网络定位-->
+<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
+<!-- 这个权限用于访问GPS定位-->
+<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
+<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
+<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
+<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
+<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
+<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
+<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
+<!-- 用于读取手机当前的状态-->
+<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
+<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
+<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
+<!-- 访问网络,网络定位需要上网-->
+<uses-permission android:name="android.permission.INTERNET" />
+<!-- SD卡读取权限,用户写入离线定位数据-->
+<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
new file mode 100644
--- /dev/null
+++ b/mobile/android/thirdparty/baidu-geolocation-libs/manifests/BaiduLocationAndroidManifest_services.xml.in
@@ -0,0 +1,7 @@
+ <meta-data
+ android:name="com.baidu.lbsapi.API_KEY"
+ android:value="hdimaCqjMxWndBpxmP00Vdcqg2O57igm"/>
+ <service android:name="com.baidu.location.f"
+ android:enabled="true"
+ android:process=":remote">
+ </service>