diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8de6802b5..835e1f4c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -93,6 +93,13 @@ + + + + + diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java index fbe209f23..136437cef 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java @@ -12,6 +12,7 @@ import android.util.Log; import nodomain.freeyourgadget.gadgetbridge.externalevents.K9Receiver; import nodomain.freeyourgadget.gadgetbridge.externalevents.MusicPlaybackReceiver; +import nodomain.freeyourgadget.gadgetbridge.externalevents.PebbleReceiver; import nodomain.freeyourgadget.gadgetbridge.externalevents.PhoneCallReceiver; import nodomain.freeyourgadget.gadgetbridge.externalevents.SMSReceiver; @@ -48,6 +49,7 @@ public class GB { PhoneCallReceiver.class, SMSReceiver.class, K9Receiver.class, + PebbleReceiver.class, MusicPlaybackReceiver.class, //NotificationListener.class, // disabling this leads to loss of permission to read notifications }; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/K9Receiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/K9Receiver.java index 3997886c5..b5992e695 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/K9Receiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/K9Receiver.java @@ -20,11 +20,11 @@ public class K9Receiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); - if (!sharedPrefs.getBoolean("notifications_k9mail", true)) { + if ("never".equals(sharedPrefs.getString("notification_mode_k9mail", "when_screen_off"))) { return; } - if (!sharedPrefs.getBoolean("notifications_k9mail_whenscreenon", false)) { - PowerManager powermanager = (PowerManager) context.getSystemService(context.POWER_SERVICE); + if ("when_screen_off".equals(sharedPrefs.getString("notification_mode_k9mail", "when_screen_off"))) { + PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); if (powermanager.isScreenOn()) { return; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java index df51e1e2f..18662c400 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java @@ -69,8 +69,9 @@ public class NotificationListener extends NotificationListenerService { if (source.equals("android") || source.equals("com.android.systemui") || source.equals("com.android.dialer") || + source.equals("com.android.mms") || source.equals("com.fsck.k9") || - source.equals("com.android.mms")) { + source.equals("eu.siacs.conversations")) { return; } @@ -82,7 +83,7 @@ public class NotificationListener extends NotificationListenerService { Bundle extras = notification.extras; String title = extras.getCharSequence(Notification.EXTRA_TITLE).toString(); - String content = ""; + String content = null; if (extras.containsKey(Notification.EXTRA_TEXT)) { CharSequence contentCS = extras.getCharSequence(Notification.EXTRA_TEXT); if (contentCS != null) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/PebbleReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/PebbleReceiver.java new file mode 100644 index 000000000..fe45002bf --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/PebbleReceiver.java @@ -0,0 +1,60 @@ +package nodomain.freeyourgadget.gadgetbridge.externalevents; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.PowerManager; +import android.preference.PreferenceManager; +import android.util.Log; + +import org.json.JSONArray; +import org.json.JSONException; + +import nodomain.freeyourgadget.gadgetbridge.BluetoothCommunicationService; + +public class PebbleReceiver extends BroadcastReceiver { + + private final String TAG = this.getClass().getSimpleName(); + + @Override + public void onReceive(Context context, Intent intent) { + + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); + if ("never".equals(sharedPrefs.getString("notification_mode_pebblemsg", "when_screen_off"))) { + return; + } + if ("when_screen_off".equals(sharedPrefs.getString("notification_mode_pebblemsg", "when_screen_off"))) { + PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + if (powermanager.isScreenOn()) { + return; + } + } + + String title; + String body; + + String messageType = intent.getStringExtra("messageType"); + if (!messageType.equals("PEBBLE_ALERT")) { + Log.i(TAG, "non PEBBLE_ALERT message type not supported"); + return; + } + String notificationData = intent.getStringExtra("notificationData"); + try { + JSONArray notificationJSON = new JSONArray(notificationData); + title = notificationJSON.getJSONObject(0).getString("title"); + body = notificationJSON.getJSONObject(0).getString("body"); + } catch (JSONException e) { + e.printStackTrace(); + return; + } + + if (title != null && body != null) { + Intent startIntent = new Intent(context, BluetoothCommunicationService.class); + startIntent.setAction(BluetoothCommunicationService.ACTION_NOTIFICATION_SMS); + startIntent.putExtra("notification_sender", title); + startIntent.putExtra("notification_body", body); + context.startService(startIntent); + } + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java index 709d3485a..e22836c0c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java @@ -17,11 +17,11 @@ public class SMSReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); - if (!sharedPrefs.getBoolean("notifications_sms", true)) { + if ("never".equals(sharedPrefs.getString("notification_mode_sms", "when_screen_off"))) { return; } - if (!sharedPrefs.getBoolean("notifications_sms_whenscreenon", false)) { - PowerManager powermanager = (PowerManager) context.getSystemService(context.POWER_SERVICE); + if ("when_screen_off".equals(sharedPrefs.getString("notification_mode_sms", "when_screen_off"))) { + PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); if (powermanager.isScreenOn()) { return; } @@ -30,8 +30,8 @@ public class SMSReceiver extends BroadcastReceiver { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); - for (int i = 0; i < pdus.length; i++) { - byte[] pdu = (byte[]) pdus[i]; + for (Object pdu1 : pdus) { + byte[] pdu = (byte[]) pdu1; SmsMessage message = SmsMessage.createFromPdu(pdu); String body = message.getDisplayMessageBody(); String sender = message.getOriginatingAddress(); diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b276cbf61..9e8ffc10c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -27,10 +27,15 @@ Synchronisiere die Uhrzeit nach dem Verbindungsaufbau Benachrichtigungen - SMS Benachrichtigungen - K9-Mail Benachrichtigungen + SMS + K9-Mail + Pebble Benachrichtigungen + Unterstützung für Applikationen, die Benachrichtigungnen per Intent an die Pebble senden. Das wird für Conversations benötigt. Andere Benachrichtigungen … auch wenn der Bilschrim an ist + immer + wenn der Bilschirm ausgeschaltet ist + nie Entwickleroptionen Miband MAC-Adresse diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 000000000..c808fd1f2 --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,14 @@ + + + + @string/always + @string/when_screen_off + @string/never + + + always + when_screen_off + never + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0e0387dcc..47a07f259 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,11 +27,17 @@ Sync time when connecting Notifications - Notification for SMS - Notification for K9-Mail + SMS + K9-Mail + Pebble Messages + Support for applications which send Notifications to the Pebble via Intent. Needed for Conversation support. Generic notification support … also when screen is on + always + when screen is off + never + Developer Options Miband address diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index d53fde119..ca0024956 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -1,59 +1,51 @@ - + android:key="pref_key_general" + android:title="@string/pref_header_general"> + + android:key="pref_key_datetime" + android:title="@string/pref_header_datetime"> - - + + - - - - - - - + - - + android:key="pref_key_development" + android:title="@string/pref_header_development"> + android:key="development_miaddr" + android:maxLength="17" + android:title="@string/pref_title_development_miaddr" /> \ No newline at end of file