cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ste...@apache.org
Subject [06/17] git commit: Updated amazon-fireos platform + reverting some of the fixes in android code.
Date Thu, 05 Dec 2013 00:58:38 GMT
Updated amazon-fireos platform + reverting some of the fixes in android code.

1. We need to pass Looper.getMainLooper() to the requestLocationUpdates method. Otherwise,
we get a RUntime Exception : Can't create handler inside thread that has not called Looper.prepare().
This change is only required for EmbeddedWebView

2. Removed all changes added to android folder

3. Updated plugin.xml to use amazon folder instead of android for the amazon-firos port

4. Change to use amazon-fireos as a platform if user agent string contains 'cordova-amazon-fireos'


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/commit/8acd22de
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/tree/8acd22de
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/diff/8acd22de

Branch: refs/heads/master
Commit: 8acd22deaa6426376da38dc8885089ecbfbbd4b2
Parents: 9eb9efb
Author: Archana Naik <naika@lab126.com>
Authored: Fri Oct 18 14:59:29 2013 -0700
Committer: Archana Naik <naika@lab126.com>
Committed: Wed Oct 30 13:24:20 2013 -0700

----------------------------------------------------------------------
 plugin.xml                              |   8 +-
 src/amazon/CordovaLocationListener.java | 252 +++++++++++++++++++++++++++
 src/amazon/GPSListener.java             |  51 ++++++
 src/amazon/GeoBroker.java               | 205 ++++++++++++++++++++++
 src/amazon/NetworkListener.java         |  33 ++++
 src/android/GeoBroker.java              |   4 +-
 test/cordova-incl.js                    |   6 +-
 7 files changed, 550 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/8acd22de/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 56f1e97..0b7002a 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -80,10 +80,10 @@ xmlns:android="http://schemas.android.com/apk/res/android"
             <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
         </config-file>
 
-        <source-file src="src/android/GeoBroker.java" target-dir="src/org/apache/cordova/geolocation"
/>
-        <source-file src="src/android/GPSListener.java" target-dir="src/org/apache/cordova/geolocation"
/>
-        <source-file src="src/android/NetworkListener.java" target-dir="src/org/apache/cordova/geolocation"
/>
-        <source-file src="src/android/CordovaLocationListener.java" target-dir="src/org/apache/cordova/geolocation"
/>
+        <source-file src="src/amazon/GeoBroker.java" target-dir="src/org/apache/cordova/geolocation"
/>
+        <source-file src="src/amazon/GPSListener.java" target-dir="src/org/apache/cordova/geolocation"
/>
+        <source-file src="src/amazon/NetworkListener.java" target-dir="src/org/apache/cordova/geolocation"
/>
+        <source-file src="src/amazon/CordovaLocationListener.java" target-dir="src/org/apache/cordova/geolocation"
/>
 
     </platform>
     

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/8acd22de/src/amazon/CordovaLocationListener.java
----------------------------------------------------------------------
diff --git a/src/amazon/CordovaLocationListener.java b/src/amazon/CordovaLocationListener.java
new file mode 100755
index 0000000..8a29d2f
--- /dev/null
+++ b/src/amazon/CordovaLocationListener.java
@@ -0,0 +1,252 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+package org.apache.cordova.geolocation;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.apache.cordova.CallbackContext;
+
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.os.Bundle;
+import android.os.Looper;
+import android.util.Log;
+
+public class CordovaLocationListener implements LocationListener {
+    public static int PERMISSION_DENIED = 1;
+    public static int POSITION_UNAVAILABLE = 2;
+    public static int TIMEOUT = 3;
+
+    protected LocationManager locationManager;
+    private GeoBroker owner;
+    protected boolean running = false;
+
+    public HashMap<String, CallbackContext> watches = new HashMap<String, CallbackContext>();
+    private List<CallbackContext> callbacks = new ArrayList<CallbackContext>();
+    
+    private Timer timer = null;
+
+    private String TAG = "[Cordova Location Listener]";
+
+    public CordovaLocationListener(LocationManager manager, GeoBroker broker, String tag)
{
+        this.locationManager = manager;
+        this.owner = broker;
+        this.TAG = tag;
+    }
+
+    protected void fail(int code, String message) {
+    	this.cancelTimer();
+        for (CallbackContext callbackContext: this.callbacks)
+        {
+            this.owner.fail(code, message, callbackContext, false);
+        }
+        if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
+        {
+        	Log.d(TAG, "Stopping global listener");
+        	this.stop();
+        }
+        this.callbacks.clear();
+
+        Iterator<CallbackContext> it = this.watches.values().iterator();
+        while (it.hasNext()) {
+            this.owner.fail(code, message, it.next(), true);
+        }
+    }
+
+    private void win(Location loc) {
+    	this.cancelTimer();
+        for (CallbackContext callbackContext: this.callbacks)
+        {
+            this.owner.win(loc, callbackContext, false);
+        }
+        if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
+        {
+        	Log.d(TAG, "Stopping global listener");
+        	this.stop();
+        }
+        this.callbacks.clear();
+
+        Iterator<CallbackContext> it = this.watches.values().iterator();
+        while (it.hasNext()) {
+            this.owner.win(loc, it.next(), true);
+        }
+    }
+
+    /**
+     * Location Listener Methods
+     */
+
+    /**
+     * Called when the provider is disabled by the user.
+     *
+     * @param provider
+     */
+    public void onProviderDisabled(String provider) {
+        Log.d(TAG, "Location provider '" + provider + "' disabled.");
+        this.fail(POSITION_UNAVAILABLE, "GPS provider disabled.");
+    }
+
+    /**
+     * Called when the provider is enabled by the user.
+     *
+     * @param provider
+     */
+    public void onProviderEnabled(String provider) {
+        Log.d(TAG, "Location provider "+ provider + " has been enabled");
+    }
+
+    /**
+     * Called when the provider status changes. This method is called when a
+     * provider is unable to fetch a location or if the provider has recently
+     * become available after a period of unavailability.
+     *
+     * @param provider
+     * @param status
+     * @param extras
+     */
+    public void onStatusChanged(String provider, int status, Bundle extras) {
+        Log.d(TAG, "The status of the provider " + provider + " has changed");
+        if (status == 0) {
+            Log.d(TAG, provider + " is OUT OF SERVICE");
+            this.fail(CordovaLocationListener.POSITION_UNAVAILABLE, "Provider " + provider
+ " is out of service.");
+        }
+        else if (status == 1) {
+            Log.d(TAG, provider + " is TEMPORARILY_UNAVAILABLE");
+        }
+        else {
+            Log.d(TAG, provider + " is AVAILABLE");
+        }
+    }
+
+    /**
+     * Called when the location has changed.
+     *
+     * @param location
+     */
+    public void onLocationChanged(Location location) {
+        Log.d(TAG, "The location has been updated!");
+        this.win(location);
+    }
+
+    // PUBLIC
+
+    public int size() {
+        return this.watches.size() + this.callbacks.size();
+    }
+
+    public void addWatch(String timerId, CallbackContext callbackContext) {
+        this.watches.put(timerId, callbackContext);
+        if (this.size() == 1) {
+            this.start();
+        }
+    }
+    public void addCallback(CallbackContext callbackContext, int timeout) {
+    	if(this.timer == null) {
+    		this.timer = new Timer();
+    	}
+    	this.timer.schedule(new LocationTimeoutTask(callbackContext, this), timeout);
+        this.callbacks.add(callbackContext);        
+        if (this.size() == 1) {
+            this.start();
+        }
+    }
+    public void clearWatch(String timerId) {
+        if (this.watches.containsKey(timerId)) {
+            this.watches.remove(timerId);
+        }
+        if (this.size() == 0) {
+            this.stop();
+        }
+    }
+
+    /**
+     * Destroy listener.
+     */
+    public void destroy() {    	
+        this.stop();
+    }
+
+    // LOCAL
+
+    /**
+     * Start requesting location updates.
+     *
+     * @param interval
+     */
+    protected void start() {
+        if (!this.running) {
+            if (this.locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null)
{
+                this.running = true;
+                this.locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
60000, 10, this, Looper.getMainLooper());
+            } else {
+                this.fail(CordovaLocationListener.POSITION_UNAVAILABLE, "Network provider
is not available.");
+            }
+        }
+    }
+
+    /**
+     * Stop receiving location updates.
+     */
+    private void stop() {
+    	this.cancelTimer();
+        if (this.running) {
+            this.locationManager.removeUpdates(this);
+            this.running = false;
+        }
+    }
+    
+    private void cancelTimer() {
+    	if(this.timer != null) {
+    		this.timer.cancel();
+        	this.timer.purge();
+        	this.timer = null;
+    	}
+    }
+    
+    private class LocationTimeoutTask extends TimerTask {
+    	
+    	private CallbackContext callbackContext = null;
+    	private CordovaLocationListener listener = null;
+    	
+    	public LocationTimeoutTask(CallbackContext callbackContext, CordovaLocationListener
listener) {
+    		this.callbackContext = callbackContext;
+    		this.listener = listener;
+    	}
+
+		@Override
+		public void run() {
+			for (CallbackContext callbackContext: listener.callbacks) {
+				if(this.callbackContext == callbackContext) {
+					listener.callbacks.remove(callbackContext);
+					break;
+				}
+			}
+			
+			if(listener.size() == 0) {
+				listener.stop();
+			}
+		}    	
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/8acd22de/src/amazon/GPSListener.java
----------------------------------------------------------------------
diff --git a/src/amazon/GPSListener.java b/src/amazon/GPSListener.java
new file mode 100755
index 0000000..1d712e9
--- /dev/null
+++ b/src/amazon/GPSListener.java
@@ -0,0 +1,51 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+package org.apache.cordova.geolocation;
+
+import android.os.Looper;
+import android.location.LocationManager;
+
+/**
+ * This class handles requests for GPS location services.
+ *
+ */
+public class GPSListener extends CordovaLocationListener {
+    public GPSListener(LocationManager locationManager, GeoBroker m) {
+        super(locationManager, m, "[Cordova GPSListener]");
+    }
+
+
+    /**
+     * Start requesting location updates.
+     *
+     * @param interval
+     */
+    @Override
+    protected void start() {
+        if (!this.running) {
+            if (this.locationManager.getProvider(LocationManager.GPS_PROVIDER) != null) {
+                this.running = true;
+                this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
60000, 0, this, Looper.getMainLooper());
+            } else {
+                this.fail(CordovaLocationListener.POSITION_UNAVAILABLE, "GPS provider is
not available.");
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/8acd22de/src/amazon/GeoBroker.java
----------------------------------------------------------------------
diff --git a/src/amazon/GeoBroker.java b/src/amazon/GeoBroker.java
new file mode 100755
index 0000000..bd88d38
--- /dev/null
+++ b/src/amazon/GeoBroker.java
@@ -0,0 +1,205 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+package org.apache.cordova.geolocation;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PluginResult;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import android.content.Context;
+import android.location.Location;
+import android.location.LocationManager;
+
+/*
+ * This class is the interface to the Geolocation.  It's bound to the geo object.
+ *
+ * This class only starts and stops various GeoListeners, which consist of a GPS and a Network
Listener
+ */
+
+public class GeoBroker extends CordovaPlugin {
+    private GPSListener gpsListener;
+    private NetworkListener networkListener;
+    private LocationManager locationManager;    
+
+    /**
+     * Executes the request and returns PluginResult.
+     *
+     * @param action 		The action to execute.
+     * @param args 		JSONArry of arguments for the plugin.
+     * @param callbackContext	The callback id used when calling back into JavaScript.
+     * @return 			True if the action was valid, or false if not.
+     */
+    public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
throws JSONException {
+        if (locationManager == null) {
+            locationManager = (LocationManager) this.cordova.getActivity().getSystemService(Context.LOCATION_SERVICE);
+        }
+        if ( locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ||
+                locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER )) {
+            if (networkListener == null) {
+                networkListener = new NetworkListener(locationManager, this);
+            }
+            if (gpsListener == null) {
+                gpsListener = new GPSListener(locationManager, this);
+            }
+
+
+            if (action.equals("getLocation")) {
+                boolean enableHighAccuracy = args.getBoolean(0);
+                int maximumAge = args.getInt(1);
+                String provider = (enableHighAccuracy && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
? LocationManager.GPS_PROVIDER : LocationManager.NETWORK_PROVIDER;
+                Location last = this.locationManager.getLastKnownLocation(provider);
+                // Check if we can use lastKnownLocation to get a quick reading and use less
battery
+                if (last != null && (System.currentTimeMillis() - last.getTime())
<= maximumAge) {
+                    PluginResult result = new PluginResult(PluginResult.Status.OK, this.returnLocationJSON(last));
+                    callbackContext.sendPluginResult(result);
+                } else {
+                    this.getCurrentLocation(callbackContext, enableHighAccuracy, args.optInt(2,
60000));
+                }
+            }
+            else if (action.equals("addWatch")) {
+                String id = args.getString(0);
+                boolean enableHighAccuracy = args.getBoolean(1);
+                this.addWatch(id, callbackContext, enableHighAccuracy);
+            }
+            else if (action.equals("clearWatch")) {
+                String id = args.getString(0);
+                this.clearWatch(id);
+            }
+            else {
+                return false;
+            }
+        } else {
+            PluginResult.Status status = PluginResult.Status.NO_RESULT;
+            String message = "Location API is not available for this device.";
+            PluginResult result = new PluginResult(status, message);
+            callbackContext.sendPluginResult(result);
+        }
+        return true;
+    }
+
+    private void clearWatch(String id) {
+        this.gpsListener.clearWatch(id);
+        this.networkListener.clearWatch(id);
+    }
+
+    private void getCurrentLocation(CallbackContext callbackContext, boolean enableHighAccuracy,
int timeout) {
+        if (enableHighAccuracy && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
+            this.gpsListener.addCallback(callbackContext, timeout);
+        } else {
+            this.networkListener.addCallback(callbackContext, timeout);
+        }
+    }
+
+    private void addWatch(String timerId, CallbackContext callbackContext, boolean enableHighAccuracy)
{
+        if (enableHighAccuracy && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
+            this.gpsListener.addWatch(timerId, callbackContext);
+        } else {
+            this.networkListener.addWatch(timerId, callbackContext);
+        }
+    }
+
+    /**
+     * Called when the activity is to be shut down.
+     * Stop listener.
+     */
+    public void onDestroy() {
+        if (this.networkListener != null) {
+            this.networkListener.destroy();
+            this.networkListener = null;
+        }
+        if (this.gpsListener != null) {
+            this.gpsListener.destroy();
+            this.gpsListener = null;
+        }
+    }
+
+    /**
+     * Called when the view navigates.
+     * Stop the listeners.
+     */
+    public void onReset() {
+        this.onDestroy();
+    }
+
+    public JSONObject returnLocationJSON(Location loc) {
+        JSONObject o = new JSONObject();
+
+        try {
+            o.put("latitude", loc.getLatitude());
+            o.put("longitude", loc.getLongitude());
+            o.put("altitude", (loc.hasAltitude() ? loc.getAltitude() : null));
+            o.put("accuracy", loc.getAccuracy());
+            o.put("heading", (loc.hasBearing() ? (loc.hasSpeed() ? loc.getBearing() : null)
: null));
+            o.put("velocity", loc.getSpeed());
+            o.put("timestamp", loc.getTime());
+        } catch (JSONException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        return o;
+    }
+
+    public void win(Location loc, CallbackContext callbackContext, boolean keepCallback)
{
+    	PluginResult result = new PluginResult(PluginResult.Status.OK, this.returnLocationJSON(loc));
+    	result.setKeepCallback(keepCallback);
+        callbackContext.sendPluginResult(result);
+    }
+
+    /**
+     * Location failed.  Send error back to JavaScript.
+     * 
+     * @param code			The error code
+     * @param msg			The error message
+     * @throws JSONException 
+     */
+    public void fail(int code, String msg, CallbackContext callbackContext, boolean keepCallback)
{
+        JSONObject obj = new JSONObject();
+        String backup = null;
+        try {
+            obj.put("code", code);
+            obj.put("message", msg);
+        } catch (JSONException e) {
+            obj = null;
+            backup = "{'code':" + code + ",'message':'" + msg.replaceAll("'", "\'") + "'}";
+        }
+        PluginResult result;
+        if (obj != null) {
+            result = new PluginResult(PluginResult.Status.ERROR, obj);
+        } else {
+            result = new PluginResult(PluginResult.Status.ERROR, backup);
+        }
+
+        result.setKeepCallback(keepCallback);
+        callbackContext.sendPluginResult(result);
+    }
+
+    public boolean isGlobalListener(CordovaLocationListener listener)
+    {
+    	if (gpsListener != null && networkListener != null)
+    	{
+    		return gpsListener.equals(listener) || networkListener.equals(listener);
+    	}
+    	else
+    		return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/8acd22de/src/amazon/NetworkListener.java
----------------------------------------------------------------------
diff --git a/src/amazon/NetworkListener.java b/src/amazon/NetworkListener.java
new file mode 100755
index 0000000..aeb39ce
--- /dev/null
+++ b/src/amazon/NetworkListener.java
@@ -0,0 +1,33 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+package org.apache.cordova.geolocation;
+
+
+import android.location.LocationManager;
+
+/**
+ * This class handles requests for GPS location services.
+ *
+ */
+public class NetworkListener extends CordovaLocationListener {
+    public NetworkListener(LocationManager locationManager, GeoBroker m) {
+        super(locationManager, m, "[Cordova NetworkListener]");
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/8acd22de/src/android/GeoBroker.java
----------------------------------------------------------------------
diff --git a/src/android/GeoBroker.java b/src/android/GeoBroker.java
index bd88d38..dc836d9 100755
--- a/src/android/GeoBroker.java
+++ b/src/android/GeoBroker.java
@@ -65,8 +65,8 @@ public class GeoBroker extends CordovaPlugin {
             if (action.equals("getLocation")) {
                 boolean enableHighAccuracy = args.getBoolean(0);
                 int maximumAge = args.getInt(1);
-                String provider = (enableHighAccuracy && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
? LocationManager.GPS_PROVIDER : LocationManager.NETWORK_PROVIDER;
-                Location last = this.locationManager.getLastKnownLocation(provider);
+
+                Location last = this.locationManager.getLastKnownLocation(enableHighAccuracy
? LocationManager.GPS_PROVIDER: LocationManager.NETWORK_PROVIDER);
                 // Check if we can use lastKnownLocation to get a quick reading and use less
battery
                 if (last != null && (System.currentTimeMillis() - last.getTime())
<= maximumAge) {
                     PluginResult result = new PluginResult(PluginResult.Status.OK, this.returnLocationJSON(last));

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/8acd22de/test/cordova-incl.js
----------------------------------------------------------------------
diff --git a/test/cordova-incl.js b/test/cordova-incl.js
index 86c82e3..bc1dd7a 100644
--- a/test/cordova-incl.js
+++ b/test/cordova-incl.js
@@ -20,9 +20,9 @@
 */
 
 var PLAT;
-if (/Chrome/.exec(navigator.userAgent)) {
+if (/cordova-amazon-fireos/.exec(navigator.userAgent)) {
     PLAT = 'amazon-fireos';
-} else if (/Android/.exec(navigator.userAgent)) {
+}else if (/Android/.exec(navigator.userAgent)) {
     PLAT = 'android';
 } else if (/(iPad)|(iPhone)|(iPod)/.exec(navigator.userAgent)) {
     PLAT = 'ios';
@@ -63,7 +63,7 @@ if (!window._doNotWriteCordovaScript) {
 }
 
 function backHome() {
-	if (window.device && device.platform && device.platform.toLowerCase() ==
'android') {
+	if (window.device && device.platform && (device.platform.toLowerCase() ==
'android' || device.platform.toLowerCase() == 'amazon-fireos')) {
             navigator.app.backHistory();
 	}
 	else {


Mime
View raw message