diff --git a/.classpath b/.classpath index ae50e9d9..9f892e85 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 57a440a4..4aac3e48 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -12,6 +12,7 @@ + diff --git a/assets/gap.js b/assets/gap.js index b81f3dc5..1926a740 100644 --- a/assets/gap.js +++ b/assets/gap.js @@ -4,7 +4,7 @@ * website: http://phonegap.com * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the - * “Software”), to deal in the Software without restriction, including + * Software), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to @@ -13,7 +13,7 @@ * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE @@ -284,16 +284,24 @@ var Device = { return Device.exec("vibrate") }, - playSound: function(clip) { - xsound = "sound:"; - if (Device.whatPlatform == "Android") { - xsound = "playSound"; - return Device.exec(xsound + clip); - } - - return Device.exec(xsound + clip); - } - + playSound: function(clip) { + xsound = "sound:"; + if (Device.whatPlatform == "Android") { + xsound = "playSound"; + return Device.exec(xsound + clip); + } + return Device.exec(xsound + clip); + }, + + // notifications + notification: { + watchPosition: function(filter) { + window.DroidGap.notificationWatchPosition(filter); + }, + clearWatch: function(filter) { + window.DroidGap.notificationClearWatch(filter); + } + } } function gotLocation(lat, lon) { diff --git a/assets/index.html b/assets/index.html index de87a53e..de1c458f 100644 --- a/assets/index.html +++ b/assets/index.html @@ -15,11 +15,11 @@ initGap = function() { // Device.init() initializes OS-Device values - Device.init(); + // UNDO Device.init(); // Device.Location.init() to initalize location - Device.Location.init(); + // UNDO Device.Location.init(); //Device.Acceleration.callback = updateAccel; } @@ -86,7 +86,24 @@ updateAccel = function(){ } -addLoadEvent(initGap); +receiveSmsNotification = function(func) +{ + if (func == 'watchPosition') { + Device.notification.watchPosition('SMS'); + } else + if (func == 'clearWatch') { + Device.notification.clearWatch('SMS'); + } +} + +function onReceiveSms(number, message) +{ + $('number').value = number; + $('message').value = message +} + + + // UNDO addLoadEvent(initGap); @@ -105,6 +122,7 @@ addLoadEvent(initGap);
  • Vibration
  • Play Sound
  • Photo...
  • +
  • Notification...
  • About
  • @@ -218,6 +236,26 @@ addLoadEvent(initGap); - +
    +

    Notification

    +
    + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/bin/DroidGap.apk b/bin/DroidGap.apk index 1294fd45..a5154afd 100644 Binary files a/bin/DroidGap.apk and b/bin/DroidGap.apk differ diff --git a/bin/classes.dex b/bin/classes.dex index 4fc49a6d..2033b46f 100644 Binary files a/bin/classes.dex and b/bin/classes.dex differ diff --git a/bin/com/nitobi/phonegap/AccelTuple.class b/bin/com/nitobi/phonegap/AccelTuple.class index c169d985..b023969b 100644 Binary files a/bin/com/nitobi/phonegap/AccelTuple.class and b/bin/com/nitobi/phonegap/AccelTuple.class differ diff --git a/bin/com/nitobi/phonegap/CameraHandler.class b/bin/com/nitobi/phonegap/CameraHandler.class index d1c55bae..87db7fad 100644 Binary files a/bin/com/nitobi/phonegap/CameraHandler.class and b/bin/com/nitobi/phonegap/CameraHandler.class differ diff --git a/bin/com/nitobi/phonegap/CameraListener.class b/bin/com/nitobi/phonegap/CameraListener.class index 6d5eb962..fd0cf9be 100644 Binary files a/bin/com/nitobi/phonegap/CameraListener.class and b/bin/com/nitobi/phonegap/CameraListener.class differ diff --git a/bin/com/nitobi/phonegap/DroidGap$MyWebChromeClient.class b/bin/com/nitobi/phonegap/DroidGap$MyWebChromeClient.class index d08936f0..ad51e474 100644 Binary files a/bin/com/nitobi/phonegap/DroidGap$MyWebChromeClient.class and b/bin/com/nitobi/phonegap/DroidGap$MyWebChromeClient.class differ diff --git a/bin/com/nitobi/phonegap/DroidGap.class b/bin/com/nitobi/phonegap/DroidGap.class index 084c9d5f..132a749e 100644 Binary files a/bin/com/nitobi/phonegap/DroidGap.class and b/bin/com/nitobi/phonegap/DroidGap.class differ diff --git a/bin/com/nitobi/phonegap/GeoTuple.class b/bin/com/nitobi/phonegap/GeoTuple.class index 93bc4a86..abc64963 100644 Binary files a/bin/com/nitobi/phonegap/GeoTuple.class and b/bin/com/nitobi/phonegap/GeoTuple.class differ diff --git a/bin/com/nitobi/phonegap/GpsListener.class b/bin/com/nitobi/phonegap/GpsListener.class index 64b88b96..582bcc94 100644 Binary files a/bin/com/nitobi/phonegap/GpsListener.class and b/bin/com/nitobi/phonegap/GpsListener.class differ diff --git a/bin/com/nitobi/phonegap/NetworkListener.class b/bin/com/nitobi/phonegap/NetworkListener.class index 9fde9fbe..1fd9193f 100644 Binary files a/bin/com/nitobi/phonegap/NetworkListener.class and b/bin/com/nitobi/phonegap/NetworkListener.class differ diff --git a/bin/com/nitobi/phonegap/Orientation.class b/bin/com/nitobi/phonegap/Orientation.class index f654506c..a5595ae2 100644 Binary files a/bin/com/nitobi/phonegap/Orientation.class and b/bin/com/nitobi/phonegap/Orientation.class differ diff --git a/bin/com/nitobi/phonegap/PhoneGap$1.class b/bin/com/nitobi/phonegap/PhoneGap$1.class index a30a025b..205e8096 100644 Binary files a/bin/com/nitobi/phonegap/PhoneGap$1.class and b/bin/com/nitobi/phonegap/PhoneGap$1.class differ diff --git a/bin/com/nitobi/phonegap/PhoneGap$2.class b/bin/com/nitobi/phonegap/PhoneGap$2.class index 35be8929..78cc1a05 100644 Binary files a/bin/com/nitobi/phonegap/PhoneGap$2.class and b/bin/com/nitobi/phonegap/PhoneGap$2.class differ diff --git a/bin/com/nitobi/phonegap/PhoneGap.class b/bin/com/nitobi/phonegap/PhoneGap.class index 20e6eac2..de6ec807 100644 Binary files a/bin/com/nitobi/phonegap/PhoneGap.class and b/bin/com/nitobi/phonegap/PhoneGap.class differ diff --git a/bin/com/nitobi/phonegap/R$attr.class b/bin/com/nitobi/phonegap/R$attr.class index f94be60a..23dc64ed 100644 Binary files a/bin/com/nitobi/phonegap/R$attr.class and b/bin/com/nitobi/phonegap/R$attr.class differ diff --git a/bin/com/nitobi/phonegap/R$drawable.class b/bin/com/nitobi/phonegap/R$drawable.class index e81430a8..862620ca 100644 Binary files a/bin/com/nitobi/phonegap/R$drawable.class and b/bin/com/nitobi/phonegap/R$drawable.class differ diff --git a/bin/com/nitobi/phonegap/R$id.class b/bin/com/nitobi/phonegap/R$id.class index 21850e97..ef630e1a 100644 Binary files a/bin/com/nitobi/phonegap/R$id.class and b/bin/com/nitobi/phonegap/R$id.class differ diff --git a/bin/com/nitobi/phonegap/R$layout.class b/bin/com/nitobi/phonegap/R$layout.class index c43a5eea..6d977387 100644 Binary files a/bin/com/nitobi/phonegap/R$layout.class and b/bin/com/nitobi/phonegap/R$layout.class differ diff --git a/bin/com/nitobi/phonegap/R$raw.class b/bin/com/nitobi/phonegap/R$raw.class index 145e16cb..21cf9055 100644 Binary files a/bin/com/nitobi/phonegap/R$raw.class and b/bin/com/nitobi/phonegap/R$raw.class differ diff --git a/bin/com/nitobi/phonegap/R$string.class b/bin/com/nitobi/phonegap/R$string.class index 1994ce71..53d84ae2 100644 Binary files a/bin/com/nitobi/phonegap/R$string.class and b/bin/com/nitobi/phonegap/R$string.class differ diff --git a/bin/com/nitobi/phonegap/R.class b/bin/com/nitobi/phonegap/R.class index 942c719f..16bcfcf5 100644 Binary files a/bin/com/nitobi/phonegap/R.class and b/bin/com/nitobi/phonegap/R.class differ diff --git a/bin/com/nitobi/phonegap/SmsListener.class b/bin/com/nitobi/phonegap/SmsListener.class new file mode 100644 index 00000000..c174d51f Binary files /dev/null and b/bin/com/nitobi/phonegap/SmsListener.class differ diff --git a/bin/resources.ap_ b/bin/resources.ap_ index 7cb51327..2151e64d 100644 Binary files a/bin/resources.ap_ and b/bin/resources.ap_ differ diff --git a/src/com/nitobi/phonegap/PhoneGap.java b/src/com/nitobi/phonegap/PhoneGap.java index 1d930f54..773e1f1c 100644 --- a/src/com/nitobi/phonegap/PhoneGap.java +++ b/src/com/nitobi/phonegap/PhoneGap.java @@ -4,7 +4,7 @@ package com.nitobi.phonegap; * website: http://phonegap.com * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the - * “Software”), to deal in the Software without restriction, including + * Software), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to @@ -13,7 +13,7 @@ package com.nitobi.phonegap; * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE @@ -24,17 +24,14 @@ package com.nitobi.phonegap; import java.io.IOException; import android.content.Context; +import android.content.IntentFilter; import android.hardware.SensorManager; import android.location.Location; -import android.location.LocationManager; -import android.location.LocationListener; import android.location.LocationProvider; import android.media.MediaPlayer; -import android.os.Bundle; import android.os.Handler; import android.os.Vibrator; import android.telephony.TelephonyManager; -import android.util.Log; import android.webkit.WebView; public class PhoneGap{ @@ -51,6 +48,7 @@ public class PhoneGap{ private GpsListener mGps; private NetworkListener mNetwork; protected LocationProvider provider; + SmsListener mSmsListener; public PhoneGap(Context ctx, Handler handler, WebView appView) { this.mCtx = ctx; @@ -58,6 +56,7 @@ public class PhoneGap{ this.mAppView = appView; mGps = new GpsListener(ctx); mNetwork = new NetworkListener(ctx); + mSmsListener = new SmsListener(ctx,mAppView); } public void updateAccel(){ @@ -155,11 +154,7 @@ public class PhoneGap{ mp.prepare(); mp.start(); } - - - - - + //mp.setDataSource("file:///android_asset/" + filename); //mp.setDataSource("http://ventrix.nsdc.gr/stuff/TERMITES_SKONH.mp3"); mp.prepare(); @@ -214,5 +209,29 @@ public class PhoneGap{ return version; } + public void notificationWatchPosition(String filter) + /** + * Starts the listener for incoming notifications of type filter + * TODO: JavaScript Call backs for success and error handling. More filter types. + */ + { + if (filter.contains("SMS")) + { + IntentFilter mFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); + mCtx.registerReceiver(mSmsListener,mFilter); + } + } + public void notificationClearWatch(String filter) + /** + * Stops the listener for incoming notifications of type filter + * TODO: JavaScript Call backs for success and error handling + */ + { + if (filter.contains("SMS")) + { + mCtx.unregisterReceiver(mSmsListener); + } + } + } diff --git a/src/com/nitobi/phonegap/SmsListener.java b/src/com/nitobi/phonegap/SmsListener.java new file mode 100644 index 00000000..00b6e973 --- /dev/null +++ b/src/com/nitobi/phonegap/SmsListener.java @@ -0,0 +1,67 @@ +package com.nitobi.phonegap; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.telephony.gsm.SmsMessage; +import android.util.Log; +import android.webkit.WebView; + +public class SmsListener extends BroadcastReceiver +{ + private WebView mAppView; + + public SmsListener(Context ctx, WebView mAppView) + { + this.mAppView = mAppView; + } + + String ACTION = "android.provider.Telephony.SMS_RECEIVED"; + + public void onReceive(Context ctx, Intent intent) + { + SmsMessage[] msg; + if (intent.getAction().equals(ACTION)) + { + msg = getMessagesFromIntent(intent); + String smsContent = null; + String sendersNumber = null; + for(int i=0; i < msg.length; i++) + { + sendersNumber = msg[i].getDisplayOriginatingAddress(); + smsContent = msg[i].getDisplayMessageBody(); + } + onReceiveSMS(sendersNumber, smsContent); + } + } + + public void onReceiveSMS(String sendersNumber, String smsContent) + /** + * Call back to Java Script + */ + { + mAppView.loadUrl("javascript:onReceiveSms('"+sendersNumber+"',"+"'"+ smsContent +"'"+")"); + } + + private SmsMessage[] getMessagesFromIntent(Intent intent) + { + SmsMessage retMsgs[] = null; + Bundle bdl = intent.getExtras(); + try + { + Object pdus[] = (Object [])bdl.get("pdus"); + retMsgs = new SmsMessage[pdus.length]; + for(int n=0; n < pdus.length; n++) + { + byte[] byteData = (byte[])pdus[n]; + retMsgs[n] = SmsMessage.createFromPdu(byteData); + } + } catch(Exception e) + { + Log.e("SMS_getMessagesFromIntent", "fail", e); + } + return retMsgs; + } + +}