├── .gitignore
├── README.md
├── app
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── de
│ │ └── radioshuttle
│ │ └── mqttpushclient
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── assets
│ │ └── svg
│ │ │ ├── ac_unit.svg
│ │ │ ├── access_alarms.svg
│ │ │ ├── access_time.svg
│ │ │ ├── add_alert.svg
│ │ │ ├── airplanemode_active.svg
│ │ │ ├── airplanemode_inactive.svg
│ │ │ ├── alarm.svg
│ │ │ ├── alarm_off.svg
│ │ │ ├── alarm_on.svg
│ │ │ ├── battery_alert.svg
│ │ │ ├── battery_full.svg
│ │ │ ├── check_box.svg
│ │ │ ├── check_box_outline_blank.svg
│ │ │ ├── check_circle.svg
│ │ │ ├── check_circle_outline.svg
│ │ │ ├── clear.svg
│ │ │ ├── emoji_objects.svg
│ │ │ ├── error.svg
│ │ │ ├── error_outline.svg
│ │ │ ├── forward_10.svg
│ │ │ ├── forward_30.svg
│ │ │ ├── forward_5.svg
│ │ │ ├── house.svg
│ │ │ ├── indeterminate_check_box.svg
│ │ │ ├── lock.svg
│ │ │ ├── lock_open.svg
│ │ │ ├── mail.svg
│ │ │ ├── not_interested.svg
│ │ │ ├── notification_important.svg
│ │ │ ├── notifications.svg
│ │ │ ├── notifications_active.svg
│ │ │ ├── notifications_none.svg
│ │ │ ├── notifications_off.svg
│ │ │ ├── notifications_paused.svg
│ │ │ ├── pause_circle_filled.svg
│ │ │ ├── pause_circle_outline.svg
│ │ │ ├── phone_disabled.svg
│ │ │ ├── phone_enabled.svg
│ │ │ ├── play_arrow.svg
│ │ │ ├── play_circle_filled.svg
│ │ │ ├── play_circle_outline.svg
│ │ │ ├── radio_button_checked.svg
│ │ │ ├── radio_button_unchecked.svg
│ │ │ ├── replay.svg
│ │ │ ├── replay_10.svg
│ │ │ ├── replay_30.svg
│ │ │ ├── replay_5.svg
│ │ │ ├── rss_feed.svg
│ │ │ ├── security.svg
│ │ │ ├── send.svg
│ │ │ ├── sentiment_dissatisfied.svg
│ │ │ ├── sentiment_satisfied.svg
│ │ │ ├── sentiment_very_dissatisfied.svg
│ │ │ ├── sentiment_very_satisfied.svg
│ │ │ ├── signal_wifi_4_bar.svg
│ │ │ ├── signal_wifi_off.svg
│ │ │ ├── thumb_down.svg
│ │ │ ├── thumb_up.svg
│ │ │ ├── timer.svg
│ │ │ ├── timer_off.svg
│ │ │ ├── toggle_off.svg
│ │ │ ├── toggle_on.svg
│ │ │ ├── update.svg
│ │ │ ├── videocam.svg
│ │ │ ├── videocam_off.svg
│ │ │ ├── visibility.svg
│ │ │ ├── visibility_off.svg
│ │ │ ├── volume_down.svg
│ │ │ ├── volume_mute.svg
│ │ │ ├── volume_off.svg
│ │ │ ├── volume_up.svg
│ │ │ ├── vpn_key.svg
│ │ │ ├── warning.svg
│ │ │ ├── wb_incandescent.svg
│ │ │ ├── wb_sunny.svg
│ │ │ ├── wifi.svg
│ │ │ └── wifi_off.svg
│ ├── java
│ │ └── de
│ │ │ └── radioshuttle
│ │ │ ├── db
│ │ │ ├── AppDatabase.java
│ │ │ ├── Code.java
│ │ │ ├── MqttMessage.java
│ │ │ └── MqttMessageDao.java
│ │ │ ├── fcm
│ │ │ ├── MessagingService.java
│ │ │ └── Notifications.java
│ │ │ ├── mqttpushclient
│ │ │ ├── AboutActivity.java
│ │ │ ├── AccountListActivity.java
│ │ │ ├── AccountRecyclerViewAdapter.java
│ │ │ ├── AccountViewModel.java
│ │ │ ├── ActionsActivity.java
│ │ │ ├── ActionsRecyclerViewAdapter.java
│ │ │ ├── ActionsViewModel.java
│ │ │ ├── CertificateErrorDialog.java
│ │ │ ├── ConfirmClearDialog.java
│ │ │ ├── EditAccountActivity.java
│ │ │ ├── EditActionActivity.java
│ │ │ ├── EditTopicActivity.java
│ │ │ ├── HelpActivity.java
│ │ │ ├── InsecureConnectionDialog.java
│ │ │ ├── JavaScriptEditorActivity.java
│ │ │ ├── JavaScriptViewModel.java
│ │ │ ├── MessagesActivity.java
│ │ │ ├── MessagesPagedListAdapter.java
│ │ │ ├── MessagesViewModel.java
│ │ │ ├── NotificationPermissionHandler.java
│ │ │ ├── NotificationTypeAdapter.java
│ │ │ ├── PrivacyActivity.java
│ │ │ ├── PushAccount.java
│ │ │ ├── TopicsActivity.java
│ │ │ ├── TopicsRecyclerViewAdapter.java
│ │ │ ├── TopicsViewModel.java
│ │ │ └── dash
│ │ │ │ ├── ColorLabel.java
│ │ │ │ ├── ColorPickerDialog.java
│ │ │ │ ├── CustomItem.java
│ │ │ │ ├── DBUtils.java
│ │ │ │ ├── DColor.java
│ │ │ │ ├── DashBoardActionListener.java
│ │ │ │ ├── DashBoardActivity.java
│ │ │ │ ├── DashBoardAdapter.java
│ │ │ │ ├── DashBoardEditActivity.java
│ │ │ │ ├── DashBoardJavaScript.java
│ │ │ │ ├── DashBoardViewModel.java
│ │ │ │ ├── DashConstraintLayout.java
│ │ │ │ ├── DetailViewDialog.java
│ │ │ │ ├── GroupItem.java
│ │ │ │ ├── IconHelper.java
│ │ │ │ ├── ImageChooserActivity.java
│ │ │ │ ├── ImageChooserAdapter.java
│ │ │ │ ├── ImageChooserViewModel.java
│ │ │ │ ├── ImageDataSource.java
│ │ │ │ ├── ImageDataSourceUser.java
│ │ │ │ ├── ImageResource.java
│ │ │ │ ├── ImportFiles.java
│ │ │ │ ├── Item.java
│ │ │ │ ├── JavaScriptExcecutor.java
│ │ │ │ ├── Message.java
│ │ │ │ ├── OptionDeleteDialog.java
│ │ │ │ ├── OptionEditDialog.java
│ │ │ │ ├── OptionList.java
│ │ │ │ ├── OptionListAdapter.java
│ │ │ │ ├── OptionListEditAdapter.java
│ │ │ │ ├── ProgressItem.java
│ │ │ │ ├── Switch.java
│ │ │ │ ├── TextItem.java
│ │ │ │ └── ViewState.java
│ │ │ ├── net
│ │ │ ├── ActionsRequest.java
│ │ │ ├── AppTrustManager.java
│ │ │ ├── CertException.java
│ │ │ ├── ClientError.java
│ │ │ ├── Cmd.java
│ │ │ ├── Connection.java
│ │ │ ├── DashboardRequest.java
│ │ │ ├── DeleteToken.java
│ │ │ ├── DistinguishedNameParser.java
│ │ │ ├── HostVerificationError.java
│ │ │ ├── IncompatibleProtocolException.java
│ │ │ ├── InsecureConnection.java
│ │ │ ├── MQTTException.java
│ │ │ ├── OkHostnameVerifier.java
│ │ │ ├── PublishRequest.java
│ │ │ ├── Request.java
│ │ │ ├── SSLUtils.java
│ │ │ ├── ServerError.java
│ │ │ └── TopicsRequest.java
│ │ │ └── utils
│ │ │ ├── FirebaseTokens.java
│ │ │ ├── HeliosUTF8Decoder.java
│ │ │ ├── HeliosUTF8Encoder.java
│ │ │ ├── JavaScript.java
│ │ │ ├── ModifyPagedList.java
│ │ │ ├── MqttUtils.java
│ │ │ └── Utils.java
│ └── res
│ │ ├── drawable-hdpi
│ │ └── ic_notification_devices_other_img.png
│ │ ├── drawable-mdpi
│ │ └── ic_notification_devices_other_img.png
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable-xhdpi
│ │ └── ic_notification_devices_other_img.png
│ │ ├── drawable-xxhdpi
│ │ └── ic_notification_devices_other_img.png
│ │ ├── drawable
│ │ ├── color_label_selector.xml
│ │ ├── ic_button_close.xml
│ │ ├── ic_button_error.xml
│ │ ├── ic_button_refresh.xml
│ │ ├── ic_button_send.xml
│ │ ├── ic_check.xml
│ │ ├── ic_check_background.xml
│ │ ├── ic_circle_error.xml
│ │ ├── ic_circle_neutral.xml
│ │ ├── ic_circle_ok.xml
│ │ ├── ic_circle_warning.xml
│ │ ├── ic_error_image_background.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_locked_image_background.xml
│ │ ├── ic_menu_actions.xml
│ │ ├── ic_menu_add.xml
│ │ ├── ic_menu_dashboard.xml
│ │ ├── ic_menu_delete.xml
│ │ ├── ic_menu_edit.xml
│ │ ├── ic_menu_list.xml
│ │ ├── ic_menu_save.xml
│ │ ├── ic_menu_search.xml
│ │ ├── ic_menu_topics.xml
│ │ ├── ic_menu_widgets.xml
│ │ ├── ic_menu_zoom.xml
│ │ ├── ic_notification_devices_other_vec.xml
│ │ ├── ic_topic_disabled.xml
│ │ ├── ic_topic_prio_high.xml
│ │ ├── ic_topic_prio_low.xml
│ │ ├── ic_topic_prio_medium.xml
│ │ ├── ic_warning.xml
│ │ ├── rounded_corners_background.xml
│ │ ├── rowhighlight.xml
│ │ ├── rowselector.xml
│ │ ├── xic_ac_unit.xml
│ │ ├── xic_access_alarms.xml
│ │ ├── xic_access_time.xml
│ │ ├── xic_add_alert.xml
│ │ ├── xic_airplanemode_active.xml
│ │ ├── xic_airplanemode_inactive.xml
│ │ ├── xic_alarm_off.xml
│ │ ├── xic_alarm_on.xml
│ │ ├── xic_battery_alert.xml
│ │ ├── xic_battery_full.xml
│ │ ├── xic_check_box.xml
│ │ ├── xic_check_box_outline_blank.xml
│ │ ├── xic_check_circle.xml
│ │ ├── xic_check_circle_outline.xml
│ │ ├── xic_clear.xml
│ │ ├── xic_emoji_objects.xml
│ │ ├── xic_error.xml
│ │ ├── xic_error_outline.xml
│ │ ├── xic_forward_10.xml
│ │ ├── xic_forward_30.xml
│ │ ├── xic_forward_5.xml
│ │ ├── xic_house.xml
│ │ ├── xic_indeterminate_check_box.xml
│ │ ├── xic_lock.xml
│ │ ├── xic_lock_open.xml
│ │ ├── xic_mail.xml
│ │ ├── xic_not_interested.xml
│ │ ├── xic_notification_important.xml
│ │ ├── xic_notifications.xml
│ │ ├── xic_notifications_active.xml
│ │ ├── xic_notifications_none.xml
│ │ ├── xic_notifications_off.xml
│ │ ├── xic_notifications_paused.xml
│ │ ├── xic_pause_circle_filled.xml
│ │ ├── xic_pause_circle_outline.xml
│ │ ├── xic_phone_disabled.xml
│ │ ├── xic_phone_enabled.xml
│ │ ├── xic_play_arrow.xml
│ │ ├── xic_play_circle_filled.xml
│ │ ├── xic_play_circle_outline.xml
│ │ ├── xic_radio_button_checked.xml
│ │ ├── xic_radio_button_unchecked.xml
│ │ ├── xic_replay.xml
│ │ ├── xic_replay_10.xml
│ │ ├── xic_replay_30.xml
│ │ ├── xic_replay_5.xml
│ │ ├── xic_rss_feed.xml
│ │ ├── xic_security.xml
│ │ ├── xic_send.xml
│ │ ├── xic_sentiment_dissatisfied.xml
│ │ ├── xic_sentiment_satisfied.xml
│ │ ├── xic_sentiment_very_dissatisfied.xml
│ │ ├── xic_sentiment_very_satisfied.xml
│ │ ├── xic_signal_wifi_4_bar.xml
│ │ ├── xic_signal_wifi_off.xml
│ │ ├── xic_thumbs_down.xml
│ │ ├── xic_thumbs_up.xml
│ │ ├── xic_timer.xml
│ │ ├── xic_timer_off.xml
│ │ ├── xic_toggle_off.xml
│ │ ├── xic_toggle_on.xml
│ │ ├── xic_update.xml
│ │ ├── xic_videocam.xml
│ │ ├── xic_videocam_off.xml
│ │ ├── xic_visibility.xml
│ │ ├── xic_visibility_off.xml
│ │ ├── xic_volume_down.xml
│ │ ├── xic_volume_mute.xml
│ │ ├── xic_volume_off.xml
│ │ ├── xic_volume_up.xml
│ │ ├── xic_vpn_key.xml
│ │ ├── xic_warning.xml
│ │ ├── xic_wb_incandescent.xml
│ │ ├── xic_wb_sunny.xml
│ │ ├── xic_wifi.xml
│ │ └── xic_wifi_off.xml
│ │ ├── layout-land
│ │ └── dialog_detail_view.xml
│ │ ├── layout
│ │ ├── activity_about.xml
│ │ ├── activity_account_list.xml
│ │ ├── activity_account_row.xml
│ │ ├── activity_actions.xml
│ │ ├── activity_actions_row.xml
│ │ ├── activity_dash_board.xml
│ │ ├── activity_dash_board_edit.xml
│ │ ├── activity_dash_board_edit_option_dlg.xml
│ │ ├── activity_dash_board_edit_option_row.xml
│ │ ├── activity_dash_board_item_custom.xml
│ │ ├── activity_dash_board_item_error_img.xml
│ │ ├── activity_dash_board_item_group.xml
│ │ ├── activity_dash_board_item_optionlist.xml
│ │ ├── activity_dash_board_item_optionlist_row.xml
│ │ ├── activity_dash_board_item_progress.xml
│ │ ├── activity_dash_board_item_switch.xml
│ │ ├── activity_dash_board_item_text.xml
│ │ ├── activity_edit_account.xml
│ │ ├── activity_edit_action.xml
│ │ ├── activity_edit_topic.xml
│ │ ├── activity_help.xml
│ │ ├── activity_image_chooser.xml
│ │ ├── activity_image_chooser_cell.xml
│ │ ├── activity_image_chooser_cell_none.xml
│ │ ├── activity_java_script_editor.xml
│ │ ├── activity_messages.xml
│ │ ├── activity_messages_row.xml
│ │ ├── activity_privacy.xml
│ │ ├── activity_topics.xml
│ │ ├── activity_topics_row.xml
│ │ ├── dialog_color_body.xml
│ │ ├── dialog_color_cell.xml
│ │ ├── dialog_detail_view.xml
│ │ └── spinner_notification_type_item.xml
│ │ ├── menu
│ │ ├── activity_account.xml
│ │ ├── activity_account_action.xml
│ │ ├── activity_actions.xml
│ │ ├── activity_actions_action.xml
│ │ ├── activity_dash_board.xml
│ │ ├── activity_dash_board_action.xml
│ │ ├── activity_dash_board_edit.xml
│ │ ├── activity_edit_account.xml
│ │ ├── activity_edit_action.xml
│ │ ├── activity_edit_topic.xml
│ │ ├── activity_help.xml
│ │ ├── activity_image_chooser.xml
│ │ ├── activity_java_script_editor.xml
│ │ ├── activity_messages.xml
│ │ ├── activity_topics.xml
│ │ └── activity_topics_action.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ ├── ic_radioshuttle.png
│ │ └── ic_radioshuttle_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ ├── ic_radioshuttle.png
│ │ └── ic_radioshuttle_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ ├── ic_radioshuttle.png
│ │ └── ic_radioshuttle_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ ├── ic_radioshuttle.png
│ │ └── ic_radioshuttle_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ ├── ic_radioshuttle.png
│ │ └── ic_radioshuttle_round.png
│ │ ├── raw
│ │ ├── cv_clock.html
│ │ ├── cv_color_picker.html
│ │ ├── cv_empty.html
│ │ ├── cv_gauge.html
│ │ ├── cv_light_switch_with_color_chooser.html
│ │ ├── cv_line_graph.html
│ │ ├── cv_thermometer.html
│ │ ├── javascript_color.js
│ │ ├── javascript_wrapper_filterscript.js
│ │ ├── javascript_wrapper_webview.js
│ │ └── radioshuttle_ca.pem
│ │ ├── values-night
│ │ └── colors.xml
│ │ ├── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ ├── backup_rules.xml
│ │ ├── network_security_config.xml
│ │ └── new_backup_rules.xml
│ └── test
│ └── java
│ └── de
│ └── radioshuttle
│ └── mqttpushclient
│ └── ExampleUnitTest.java
├── build.gradle
├── docs
├── dev
│ └── javascript_interface.rtd
├── playstore
│ └── app_icon_store.png
└── readme
│ ├── LICENSE-apache-2.0.txt
│ ├── app_icon.png
│ └── title_image.png
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | local.properties
3 | .idea
4 | .DS_Store
5 | captures
6 | build
7 | .externalNativeBuild
8 | app/build
9 | app/release
10 | **/*.iml
11 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 |
5 | if(project.hasProperty("MQTTPushClient.signing")
6 | && new File(project.property("MQTTPushClient.signing") + "signing.gradle").exists()) {
7 | apply from: project.property("MQTTPushClient.signing") + "signing.gradle"
8 | }
9 | defaultConfig {
10 | applicationId "de.radioshuttle.mqttpushclient"
11 | minSdkVersion 19
12 | targetSdkVersion 34
13 | compileSdk 34
14 | versionCode 71
15 | versionName "2.0.10"
16 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
17 | vectorDrawables.useSupportLibrary = true
18 | multiDexEnabled true
19 | }
20 |
21 | buildTypes {
22 | release {
23 | minifyEnabled false
24 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
25 | }
26 | }
27 |
28 | compileOptions {
29 | sourceCompatibility JavaVersion.VERSION_1_8
30 | targetCompatibility JavaVersion.VERSION_1_8
31 | }
32 |
33 | productFlavors {
34 | }
35 | namespace 'de.radioshuttle.mqttpushclient'
36 | }
37 |
38 | dependencies {
39 | implementation fileTree(include: ['*.jar'], dir: 'libs')
40 | implementation 'androidx.appcompat:appcompat:1.6.1'
41 | implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
42 | implementation 'androidx.recyclerview:recyclerview:1.2.0'
43 | implementation 'androidx.legacy:legacy-support-v4:1.0.0'
44 | implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
45 | implementation 'androidx.paging:paging-runtime:2.1.2'
46 | implementation "androidx.multidex:multidex:2.0.1"
47 |
48 | implementation 'com.squareup.duktape:duktape-android:1.3.0'
49 |
50 | implementation 'com.google.android.material:material:1.3.0'
51 | implementation 'com.google.android.gms:play-services-base:17.6.0'
52 | implementation 'com.google.firebase:firebase-messaging:23.2.1'
53 |
54 | testImplementation 'junit:junit:4.12'
55 | androidTestImplementation 'androidx.test:runner:1.3.0'
56 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
57 | }
58 |
59 | dependencies {
60 | implementation 'androidx.room:room-runtime:2.3.0'
61 | annotationProcessor 'androidx.room:room-compiler:2.3.0'
62 | }
63 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/de/radioshuttle/mqttpushclient/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package de.radioshuttle.mqttpushclient;
2 |
3 | import android.content.Context;
4 | import androidx.test.InstrumentationRegistry;
5 | import androidx.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("de.radioshuttle.mqttpushclient", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/ac_unit.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/access_alarms.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/access_time.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/add_alert.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/airplanemode_active.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/airplanemode_inactive.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/alarm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/alarm_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/alarm_on.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/battery_alert.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/battery_full.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/check_box.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/check_box_outline_blank.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/check_circle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/check_circle_outline.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/clear.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/emoji_objects.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/error.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/error_outline.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/forward_10.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/forward_30.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/forward_5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/house.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/indeterminate_check_box.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/lock.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/lock_open.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/mail.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/not_interested.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/notification_important.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/notifications.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/notifications_active.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/notifications_none.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/notifications_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/notifications_paused.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/pause_circle_filled.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/pause_circle_outline.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/phone_disabled.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/phone_enabled.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/play_arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/play_circle_filled.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/play_circle_outline.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/radio_button_checked.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/radio_button_unchecked.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/replay.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/replay_10.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/replay_30.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/replay_5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/rss_feed.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/security.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/send.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/sentiment_dissatisfied.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/sentiment_satisfied.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/sentiment_very_dissatisfied.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/sentiment_very_satisfied.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/signal_wifi_4_bar.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/signal_wifi_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/thumb_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/thumb_up.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/timer.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/timer_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/toggle_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/toggle_on.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/update.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/videocam.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/videocam_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/visibility.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/visibility_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/volume_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/volume_mute.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/volume_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/volume_up.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/vpn_key.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/warning.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/wb_incandescent.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/wb_sunny.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/wifi.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/assets/svg/wifi_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/db/AppDatabase.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.db;
8 |
9 | import androidx.room.Database;
10 | import androidx.room.Room;
11 | import androidx.room.RoomDatabase;
12 |
13 | import android.content.Context;
14 |
15 | @Database(entities = {MqttMessage.class, Code.class}, version = 3)
16 | public abstract class AppDatabase extends RoomDatabase {
17 |
18 | public abstract MqttMessageDao mqttMessageDao();
19 |
20 | public static synchronized AppDatabase getInstance(final Context appContext) {
21 |
22 | if (db == null) {
23 | db = Room.databaseBuilder(appContext, AppDatabase.class, "mqtt_messages_db")
24 | .fallbackToDestructiveMigration()
25 | .build();
26 | }
27 | return db;
28 | }
29 |
30 | private static AppDatabase db;
31 |
32 | private final static String TAG = AppDatabase.class.getSimpleName();
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/db/Code.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.db;
8 |
9 | import androidx.room.Entity;
10 | import androidx.room.Index;
11 | import androidx.room.PrimaryKey;
12 |
13 | @Entity (tableName = "codes", indices = {@Index(value = {"name"}, unique = true)})
14 | public class Code {
15 | @PrimaryKey(autoGenerate = true)
16 | private int id;
17 |
18 | private String name;
19 |
20 | public int getId() {
21 | return id;
22 | }
23 |
24 | public void setId(int id) {
25 | this.id = id;
26 | }
27 |
28 | public String getName() {
29 | return name;
30 | }
31 |
32 | public void setName(String name) {
33 | this.name = name;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/PrivacyActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient;
8 |
9 | import androidx.appcompat.app.AppCompatActivity;
10 |
11 | import android.content.Intent;
12 | import android.net.Uri;
13 | import android.os.Bundle;
14 | import android.view.MenuItem;
15 | import android.view.View;
16 | import android.widget.Button;
17 |
18 | public class PrivacyActivity extends AppCompatActivity {
19 |
20 | @Override
21 | protected void onCreate(Bundle savedInstanceState) {
22 | super.onCreate(savedInstanceState);
23 | setContentView(R.layout.activity_privacy);
24 |
25 | setTitle(R.string.title_privacy);
26 |
27 | Button privacyButton = findViewById(R.id.privacyURL);
28 | if (privacyButton != null) {
29 | privacyButton.setOnClickListener(new View.OnClickListener() {
30 | @Override
31 | public void onClick(View v) {
32 | Uri webpage = Uri.parse("https://www.helios.de/web/EN/privacy.html");
33 | Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
34 | startActivity(webIntent);
35 | }
36 | });
37 | }
38 |
39 | getSupportActionBar().setDisplayHomeAsUpEnabled(true);
40 | }
41 |
42 | @Override
43 | public boolean onOptionsItemSelected(MenuItem item) {
44 | switch (item.getItemId()) {
45 | case android.R.id.home:
46 | handleBackPressed();
47 | return true;
48 | default:
49 | return super.onOptionsItemSelected(item);
50 | }
51 | }
52 |
53 | @Override
54 | public void onBackPressed() {
55 | handleBackPressed();
56 | // super.onBackPressed();
57 | }
58 |
59 | protected void handleBackPressed() {
60 | setResult(AppCompatActivity.RESULT_CANCELED); //TODO:
61 | finish();
62 | }
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/dash/DColor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient.dash;
8 |
9 | import android.content.Context;
10 | import android.content.res.TypedArray;
11 | import android.util.TypedValue;
12 |
13 | import de.radioshuttle.mqttpushclient.R;
14 |
15 | public class DColor {
16 | public final static long OS_DEFAULT = 0x0100000000L;
17 | public final static long CLEAR = 0x0200000000L;
18 |
19 | public static int fetchAccentColor(Context context) {
20 | return fetchColor(context, R.attr.colorAccent);
21 | }
22 |
23 | public static int fetchColor(Context context, int attr) {
24 | TypedValue typedValue = new TypedValue();
25 |
26 | TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[] { attr });
27 | int color = a.getColor(0, 0);
28 |
29 | a.recycle();
30 |
31 | return color;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/dash/DashBoardActionListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient.dash;
8 |
9 | public interface DashBoardActionListener {
10 | void onItemClicked(Item item);
11 | void onSelectionChange(int noBefore, int no);
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/dash/DashConstraintLayout.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient.dash;
8 |
9 | import android.content.Context;
10 | import android.util.AttributeSet;
11 | import android.view.MotionEvent;
12 |
13 | import androidx.constraintlayout.widget.ConstraintLayout;
14 |
15 | // intercepts all motion events to childs
16 | public class DashConstraintLayout extends ConstraintLayout {
17 | public DashConstraintLayout(Context context) {
18 | super(context);
19 | }
20 |
21 | public DashConstraintLayout(Context context, AttributeSet attrs) {
22 | super(context, attrs);
23 | }
24 |
25 | public DashConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr) {
26 | super(context, attrs, defStyleAttr);
27 | }
28 |
29 | public void setInterceptTouchEvent(boolean intercept) {
30 | mInterceptTouchEvent = intercept;
31 | }
32 |
33 | @Override
34 | public boolean onInterceptTouchEvent(MotionEvent ev) {
35 | return mInterceptTouchEvent;
36 | }
37 |
38 | private boolean mInterceptTouchEvent = true;
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/dash/GroupItem.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient.dash;
8 |
9 | public class GroupItem extends Item {
10 |
11 | public GroupItem() {
12 | }
13 |
14 | @Override
15 | public String getType() {
16 | return "group";
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/dash/Message.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient.dash;
8 |
9 | import java.util.Comparator;
10 |
11 | import de.radioshuttle.db.MqttMessage;
12 |
13 | public class Message extends MqttMessage {
14 | public int status;
15 |
16 | public static class AscComparator implements Comparator {
17 | @Override
18 | public int compare(Message o1, Message o2) {
19 | int cmp = 0;
20 | long w1 = (o1 == null ? 0L : o1.getWhen());
21 | long w2 = (o2 == null ? 0L : o2.getWhen());
22 | int s1 = (o1 == null ? 0 : o1.getSeqno());
23 | int s2 = (o2 == null ? 0 : o2.getSeqno());
24 |
25 | if (w1 < w2) {
26 | cmp = -1;
27 | } else if (w1 > w2) {
28 | cmp = 1;
29 | } else if (s1 < s2) {
30 | cmp = -1;
31 | } else if (s1 > s2) {
32 | cmp = 1;
33 | }
34 | return cmp;
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/dash/OptionDeleteDialog.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient.dash;
8 |
9 | import android.app.Activity;
10 | import android.app.AlertDialog;
11 | import android.app.Dialog;
12 | import android.content.DialogInterface;
13 | import android.os.Bundle;
14 |
15 | import androidx.fragment.app.DialogFragment;
16 |
17 | import de.radioshuttle.mqttpushclient.R;
18 |
19 | public class OptionDeleteDialog extends DialogFragment {
20 | @Override
21 | public Dialog onCreateDialog(Bundle savedInstanceState) {
22 | super.onCreate(savedInstanceState);
23 |
24 | Bundle args = getArguments();
25 | final int n = args.getInt(NO_SELECTED, 2);
26 |
27 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
28 | builder.setTitle(getString(R.string.dlg_delete_option_title));
29 | if (n == 1) {
30 | builder.setMessage(getString(R.string.dlg_delete_option_msg));
31 | } else {
32 | builder.setMessage(getString(R.string.dlg_delete_option_msg_pl));
33 | }
34 |
35 | builder.setPositiveButton(R.string.action_delete_topics, new DialogInterface.OnClickListener() {
36 | @Override
37 | public void onClick(DialogInterface dialog, int which) {
38 | Activity a = getActivity();
39 | if (a instanceof DashBoardEditActivity) {
40 | ((DashBoardEditActivity) a).deleteSelectedOptions();
41 | }
42 | }
43 | });
44 |
45 | builder.setNegativeButton(R.string.action_cancel, new DialogInterface.OnClickListener() {
46 | @Override
47 | public void onClick(DialogInterface dialog, int which) {
48 | }
49 | });
50 |
51 | AlertDialog dlg = builder.create();
52 | dlg.setCanceledOnTouchOutside(false);
53 |
54 | return dlg;
55 | }
56 |
57 | public final static String NO_SELECTED = "NO_SELECTED";
58 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/mqttpushclient/dash/TextItem.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.mqttpushclient.dash;
8 |
9 | import org.json.JSONException;
10 | import org.json.JSONObject;
11 |
12 | public class TextItem extends Item {
13 |
14 | @Override
15 | public String getType() {
16 | return "text";
17 | }
18 |
19 | @Override
20 | public JSONObject toJSONObject() throws JSONException {
21 | JSONObject o = super.toJSONObject();
22 | o.put("input_type", inputtype);
23 | return o;
24 | }
25 |
26 | protected void setJSONData(JSONObject o) {
27 | super.setJSONData(o);
28 | inputtype = o.optInt("input_type");
29 | }
30 |
31 | public final static int TYPE_STRING = 0;
32 | public final static int TYPE_NUMBER = 1;
33 |
34 | public int inputtype;
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/CertException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 | import java.security.cert.CertificateException;
10 | import java.security.cert.X509Certificate;
11 |
12 | public class CertException extends CertificateException {
13 |
14 | public CertException(Throwable orgCause, int reason, X509Certificate[] chain) {
15 | super(orgCause);
16 | this.reason = reason;
17 | this.chain = chain;
18 | }
19 |
20 | public X509Certificate[] chain;
21 | public int reason;
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/ClientError.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 | public class ClientError extends Exception {
10 | public ClientError(String msg) {
11 | super(msg);
12 | }
13 |
14 | public ClientError(Throwable t) {
15 | super(t);
16 |
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/HostVerificationError.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2020 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 | import java.security.cert.X509Certificate;
10 |
11 | import javax.net.ssl.SSLHandshakeException;
12 |
13 | public class HostVerificationError extends SSLHandshakeException {
14 |
15 | public HostVerificationError(String reason, X509Certificate[] chain) {
16 | super(reason);
17 | this.chain = chain;
18 | }
19 |
20 | public X509Certificate[] chain;
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/IncompatibleProtocolException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 | import android.content.Context;
10 |
11 | import java.io.IOException;
12 |
13 | import de.radioshuttle.mqttpushclient.R;
14 |
15 | public class IncompatibleProtocolException extends IOException {
16 | public IncompatibleProtocolException(int expectedMajor, int expectedMinor, int currMajor, int currentMin, Context context) {
17 | mExpectedMajor = expectedMajor;
18 | mExpectedMinor = expectedMinor;
19 | mCurrentMajor = currMajor;
20 | mCurrentMinor = currentMin;
21 | mAppContext = context.getApplicationContext();
22 | }
23 |
24 | @Override
25 | public String getMessage() {
26 | return getLocalizedMessage();
27 | }
28 |
29 | @Override
30 | public String getLocalizedMessage() {
31 | String msg;
32 | String localizedMsg = mAppContext.getResources().getString(R.string.errormsg_incompatible_protocol);
33 | if (localizedMsg != null)
34 | msg = String.format(localizedMsg, mExpectedMajor, mExpectedMinor, mCurrentMajor, mCurrentMinor);
35 | else
36 | msg = null;
37 | return msg;
38 | }
39 |
40 | private Context mAppContext;
41 |
42 | private int mExpectedMajor;
43 | private int mExpectedMinor;
44 | private int mCurrentMajor;
45 | private int mCurrentMinor;
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/InsecureConnection.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 | public class InsecureConnection extends Exception {
10 | public InsecureConnection() {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/MQTTException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 | public class MQTTException extends ServerError {
10 |
11 | public MQTTException(int code, String msg) {
12 | super(code, msg);
13 | }
14 |
15 | public MQTTException(int code, String msg, int loginAccountInfo) {
16 | super(code, msg);
17 | accountInfo = loginAccountInfo;
18 | }
19 |
20 | /** 1 = MQTT error performing login, but accout data matches local stored credntials */
21 | public int accountInfo; // set if MQTT exception occured on server while login
22 |
23 | public static final short REASON_CODE_SUBSCRIBE_FAILED = 0x80;
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/SSLUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 |
10 | import java.security.SecureRandom;
11 |
12 | import javax.net.ssl.HostnameVerifier;
13 | import javax.net.ssl.SSLContext;
14 | import javax.net.ssl.SSLSocketFactory;
15 | import javax.net.ssl.TrustManager;
16 |
17 | public class SSLUtils {
18 |
19 | public static SSLSocketFactory getPushServerSSLSocketFactory() throws Exception {
20 | if (pushServerSocketFactory == null) {
21 | synchronized (lock) {
22 | if (pushServerSocketFactory == null) {
23 | pushServerSocketFactory = createSslSocketFactory();
24 | }
25 | }
26 | }
27 | return pushServerSocketFactory;
28 | }
29 |
30 | public static HostnameVerifier getPushServeHostVerifier() {
31 | // return HttpsURLConnection.getDefaultHostnameVerifier(); //TODO: see fix for document hub
32 | return OkHostnameVerifier.INSTANCE;
33 | }
34 |
35 | private static SSLSocketFactory createSslSocketFactory() throws Exception {
36 | SSLContext sslContext = SSLContext.getInstance("TLS");
37 | sslContext.init(null, new TrustManager[] {new AppTrustManager()}, new SecureRandom());
38 | return sslContext.getSocketFactory();
39 | }
40 |
41 | private static SSLSocketFactory pushServerSocketFactory = null;
42 | private static Object lock = new Object();
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/net/ServerError.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.net;
8 |
9 | public class ServerError extends Exception {
10 | public ServerError(int code, String msg) {
11 | super(msg);
12 | errorCode = code;
13 | }
14 |
15 | public int errorCode;
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/utils/HeliosUTF8Decoder.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.utils;
8 |
9 | import java.text.Format;
10 |
11 | public class HeliosUTF8Decoder extends Format {
12 |
13 | /* HELIOS UTF-8 special chars */
14 | private static final String HELIOS_UTF8_FIRST = "2357";
15 | private static final String[] HELIOS_UTF8_SECOND = {"2af", "acef", "ce", "c" };
16 | private static final String[] HELIOS_UTF8_REPLACE = {"\"*/", ":<>?", "\\^", "|" };
17 |
18 |
19 | @Override
20 | public StringBuffer format(Object obj, StringBuffer toAppendTo, java.text.FieldPosition pos) {
21 | if (obj != null)
22 | return toAppendTo.append(decodeHeliosUTF8(obj.toString()));
23 | return toAppendTo;
24 | }
25 |
26 | @Override
27 | public Object parseObject(String source, java.text.ParsePosition pos) {
28 | return decodeHeliosUTF8(source.substring(pos.getIndex()));
29 | }
30 |
31 | @Override
32 | public java.text.AttributedCharacterIterator formatToCharacterIterator(Object obj) {
33 | return null;
34 | }
35 |
36 | private static String decodeHeliosUTF8(String fname) {
37 | int l = fname.length();
38 | if (l < 3)
39 | return fname;
40 |
41 | int i = fname.indexOf('^');
42 | if (i < 0)
43 | return fname;
44 |
45 | StringBuffer b = new StringBuffer(l);
46 | b.append(fname.substring(0, i));
47 | int pos, cpos;
48 | while (l - i >= 3) {
49 | switch (fname.charAt(i)) {
50 | case '^':
51 | if ( (pos = HELIOS_UTF8_FIRST.indexOf(fname.charAt(++i))) > -1
52 | && (cpos = HELIOS_UTF8_SECOND[pos].indexOf(fname.charAt(i + 1))) > -1) {
53 | b.append(HELIOS_UTF8_REPLACE[pos].charAt(cpos));
54 | i += 2;
55 | continue;
56 | } else
57 | b.append(fname.charAt(i - 1));
58 | break;
59 | default:
60 | b.append(fname.charAt(i++));
61 | break;
62 | }
63 | }
64 | return b.append(fname.substring(i)).toString();
65 | }
66 | }
--------------------------------------------------------------------------------
/app/src/main/java/de/radioshuttle/utils/HeliosUTF8Encoder.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | package de.radioshuttle.utils;
8 |
9 | import java.text.Format;
10 |
11 | public class HeliosUTF8Encoder extends Format {
12 |
13 | /* HELIOS UTF-8 special chars */
14 | private static final String HELIOS_SPECIAL_CHARS = "/\\^*?<>|:\"";
15 | private static final String[] HELIOS_REPLACE_CHARS = { "^2f", "^5c", "^5e", "^2a", "^3f", "^3c", "^3e", "^7c", "^3a", "^22" };
16 |
17 | public StringBuffer format(Object obj, StringBuffer toAppendTo, java.text.FieldPosition pos) {
18 | if (obj != null)
19 | return toAppendTo.append(encodeHeliosUTF8(obj.toString()));
20 | return toAppendTo;
21 | }
22 |
23 | public Object parseObject(String source, java.text.ParsePosition pos) {
24 | return encodeHeliosUTF8(source.substring(pos.getIndex()));
25 | }
26 |
27 | public java.text.AttributedCharacterIterator formatToCharacterIterator(Object obj) {
28 | return null;
29 | }
30 |
31 | private static String encodeHeliosUTF8(String fname) {
32 | if (fname == null)
33 | return null;
34 | StringBuffer b = new StringBuffer(fname);
35 | int pos, l = b.length();
36 | for (int i = 0; i < l; i++) {
37 | if ((pos = HELIOS_SPECIAL_CHARS.indexOf(b.charAt(i))) > -1) {
38 | b.replace(i++, i++, HELIOS_REPLACE_CHARS[pos]);
39 | l += 2;
40 | }
41 | }
42 | return b.toString();
43 | }
44 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_notification_devices_other_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/drawable-hdpi/ic_notification_devices_other_img.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_notification_devices_other_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/drawable-mdpi/ic_notification_devices_other_img.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_notification_devices_other_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/drawable-xhdpi/ic_notification_devices_other_img.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_notification_devices_other_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/drawable-xxhdpi/ic_notification_devices_other_img.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/color_label_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_button_close.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_button_error.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_button_refresh.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_button_send.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_error.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_neutral.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_ok.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_warning.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_error_image_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_locked_image_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_actions.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_add.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_dashboard.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_delete.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_edit.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_list.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_save.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_search.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_topics.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_widgets.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_zoom.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_devices_other_vec.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_topic_disabled.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_topic_prio_high.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
13 |
16 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_topic_prio_low.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_topic_prio_medium.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_warning.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rounded_corners_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rowhighlight.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rowselector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_ac_unit.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_access_alarms.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_access_time.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_add_alert.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_airplanemode_active.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_airplanemode_inactive.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_alarm_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_alarm_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_battery_alert.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_battery_full.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_check_box.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_check_box_outline_blank.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_check_circle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_check_circle_outline.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_clear.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_emoji_objects.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_error.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_error_outline.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_forward_10.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_forward_30.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_forward_5.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_house.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_indeterminate_check_box.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_lock.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_lock_open.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_mail.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_not_interested.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_notification_important.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_notifications.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_notifications_active.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_notifications_none.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_notifications_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_notifications_paused.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_pause_circle_filled.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_pause_circle_outline.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_phone_disabled.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_phone_enabled.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_play_arrow.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_play_circle_filled.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_play_circle_outline.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_radio_button_checked.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_radio_button_unchecked.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_replay.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_replay_10.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_replay_30.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_replay_5.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_rss_feed.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_security.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_send.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_sentiment_dissatisfied.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_sentiment_satisfied.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_sentiment_very_dissatisfied.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_sentiment_very_satisfied.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_signal_wifi_4_bar.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_signal_wifi_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_thumbs_down.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_thumbs_up.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_timer.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_timer_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_toggle_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_toggle_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_update.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_videocam.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_videocam_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_visibility.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_visibility_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_volume_down.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_volume_mute.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_volume_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_volume_up.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_vpn_key.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_warning.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_wb_incandescent.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_wb_sunny.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_wifi.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/xic_wifi_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_account_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
15 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_actions.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
19 |
20 |
28 |
29 |
37 |
38 |
39 |
40 |
46 |
47 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_actions_row.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
21 |
22 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_dash_board_edit_option_row.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
21 |
22 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_dash_board_item_custom.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
26 |
27 |
28 |
29 |
39 |
40 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_dash_board_item_error_img.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
16 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_dash_board_item_group.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
21 |
22 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_dash_board_item_optionlist.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
27 |
28 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_dash_board_item_optionlist_row.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
21 |
22 |
31 |
32 |
43 |
44 |
54 |
55 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_help.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_image_chooser_cell.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
20 |
21 |
35 |
36 |
46 |
47 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_image_chooser_cell_none.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_messages_row.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
22 |
23 |
32 |
33 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_privacy.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
26 |
27 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_topics.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
19 |
20 |
28 |
29 |
37 |
38 |
39 |
45 |
46 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_color_body.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_color_cell.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
17 |
27 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/spinner_notification_type_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_account.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_account_action.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_actions.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_actions_action.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_dash_board_action.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_edit_account.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
15 |
16 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_edit_action.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_edit_topic.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_help.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_image_chooser.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
17 |
18 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_java_script_editor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
15 |
16 | -
22 |
23 |
28 |
33 |
38 |
43 |
48 |
49 |
50 |
51 |
52 |
57 |
58 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_messages.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
12 |
13 |
19 |
20 |
26 |
27 |
28 |
29 |
30 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_topics.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
10 |
11 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_topics_action.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_radioshuttle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-hdpi/ic_radioshuttle.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_radioshuttle_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-hdpi/ic_radioshuttle_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_radioshuttle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-mdpi/ic_radioshuttle.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_radioshuttle_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-mdpi/ic_radioshuttle_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_radioshuttle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xhdpi/ic_radioshuttle.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_radioshuttle_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xhdpi/ic_radioshuttle_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_radioshuttle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxhdpi/ic_radioshuttle.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_radioshuttle_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxhdpi/ic_radioshuttle_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_radioshuttle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxxhdpi/ic_radioshuttle.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_radioshuttle_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/app/src/main/res/mipmap-xxxhdpi/ic_radioshuttle_round.png
--------------------------------------------------------------------------------
/app/src/main/res/raw/cv_color_picker.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/cv_empty.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/javascript_color.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019 HELIOS Software GmbH
3 | * 30827 Garbsen (Hannover) Germany
4 | * Licensed under the Apache License, Version 2.0
5 | */
6 |
7 | if (typeof MQTT === 'undefined') {
8 | MQTT = new Object();
9 | }
10 |
11 | MQTT.Color = {
12 | rgba : function(r, g, b, a) {
13 | return ((a & 0x7F) << 24 | (r & 0xff) << 16 | (g & 0xff) << 8 | (b & 0xff)) + (a & 80 ? 0x80000000 : 0);
14 | },
15 | rgb : function(r, g, b) {
16 | return this.rgba(r, g, b, 0xFF);
17 | },
18 | red : function(color) {
19 | return (color >>> 16) & 0xFF;
20 | },
21 | green : function(color) {
22 | return (color >>> 8) & 0xFF;
23 | },
24 | blue : function(color) {
25 | return color & 0xFF;
26 | },
27 | alpha : function(color) {
28 | return (color >>> 24) & 0xFF;
29 | },
30 |
31 | WHITE : 0xffffffff,
32 | LT_GRAY : 0xffa0a0a0,
33 | DK_GRAY : 0xff575757,
34 | BLACK : 0xff000000,
35 | TAN : 0xffe9debb,
36 | YELLOW : 0xffffee33,
37 | ORANGE : 0xffff9233,
38 | RED : 0xffad2323,
39 | BROWN : 0xff814a19,
40 | LT_GREEN : 0xff81c57a,
41 | GREEN : 0xff1d6914,
42 | PINK : 0xffffcdf3,
43 | PURPLE : 0xff8126c0,
44 | CYAN : 0xff29d0d0,
45 | LT_BLUE : 0xff9dafff,
46 | BLUE : 0xff2a4bd7,
47 | TRANSPARENT : 0,
48 | OS_DEFAULT : 0x0100000000,
49 | CLEAR : 0x0200000000
50 | };
51 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/javascript_wrapper_filterscript.js:
--------------------------------------------------------------------------------
1 | view.setUserData = function(data) {
2 | var jsonStr = JSON.stringify(data);
3 | if (jsonStr.length > 1048576) {
4 | throw "User data is limited to 1 MB.";
5 | }
6 | this._setUserData(JSON.stringify(data));
7 | };
8 |
9 | view.getUserData = function() {
10 | var data = this._getUserData();
11 | return data ? JSON.parse(data) : null;
12 | };
13 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/javascript_wrapper_webview.js:
--------------------------------------------------------------------------------
1 | MQTT.view = MQTT.getView(),
2 | MQTT.view.setUserData = function(data) {
3 | var jsonStr = JSON.stringify(data);
4 | if (jsonStr.length > 1048576) {
5 | throw "User data is limited to 1 MB.";
6 | }
7 | this._setUserData(JSON.stringify(data));
8 | };
9 | MQTT.view.getUserData = function() {
10 | var data = this._getUserData();
11 | return data ? JSON.parse(data) : null;
12 | };
13 | MQTT.view.getHistoricalData = function() {
14 | var result = null;
15 | var data = this._getHistoricalData();
16 | if (data) {
17 | result = JSON.parse(data);
18 | for(var i = 0; i < result.length; i++) {
19 | result[i].receivedDate = new Date(result[i]._received);
20 | result[i].raw = MQTT.hex2buf(result[i]._raw);
21 | }
22 | }
23 | return result;
24 | };
25 | MQTT.view.getParameters = function() {
26 | return JSON.parse(this._getParameters());
27 | };
28 | MQTT.buf2hex = function (buffer) {
29 | var byteArray = new Uint8Array(buffer);
30 | var hexStr = '';
31 | for(var i = 0; i < byteArray.length; i++) {
32 | var hex = byteArray[i].toString(16);
33 | var paddedHex = ('00' + hex).slice(-2);
34 | hexStr += paddedHex;
35 | }
36 | return hexStr;
37 | };
38 |
39 | MQTT.hex2buf = function (hex) {
40 | if (!hex) {
41 | hex = '';
42 | }
43 | if (hex.length % 2 == 1) {
44 | hex = '0' + hex;
45 | }
46 | var buf = new ArrayBuffer(hex.length / 2);
47 | var dv = new DataView(buf);
48 | var j = 0;
49 | for(var i = 0; i < hex.length; i += 2) {
50 | dv.setUint8(j, parseInt(hex.substring(i, i + 2), 16));
51 | j++;
52 | }
53 | return buf;
54 | };
55 |
56 | MQTT.publish = function (topic, msg, retain) {
57 | var requestStarted = false;
58 | if (typeof msg === 'string') {
59 | requestStarted = MQTT._publishStr(topic, msg, retain === true);
60 | } else if (msg instanceof ArrayBuffer) {
61 | requestStarted = MQTT._publishHex(topic, MQTT.buf2hex(msg), retain === true);
62 | } else {
63 | throw "MQTT.publish(): arg msg must be of type String or ArrayBuffer";
64 | }
65 | return requestStarted;
66 | };
67 |
68 | function _onMqttMessage(receivedDateMillis, topic, payloadStr, payloadHEX) {
69 | var msg = new Object();
70 | if (!payloadHEX) payloadHEX = '';
71 | if (!payloadStr) payloadStr = '';
72 | msg.receivedDate = new Date(Number(receivedDateMillis));
73 | msg.topic = topic;
74 | msg.text = payloadStr;
75 | msg.raw = MQTT.hex2buf(payloadHEX);
76 | onMqttMessage(msg);
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/radioshuttle_ca.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIEiTCCA3GgAwIBAgIJAOB3mQfQQUDdMA0GCSqGSIb3DQEBBQUAMIGJMQswCQYD
3 | VQQGEwJERTEWMBQGA1UECBMNTmllZGVyc2FjaHNlbjEQMA4GA1UEBxMHR2FyYnNl
4 | bjEYMBYGA1UEChMPUmFkaW9zaHV0dGxlLmRlMRwwGgYDVQQLExNTb2Z0d2FyZURl
5 | dmVsb3BtZW50MRgwFgYDVQQDEw9yYWRpb3NodXR0bGUuZGUwHhcNMTgxMTA1MTUx
6 | NjAzWhcNNDgxMDI4MTUxNjAzWjCBiTELMAkGA1UEBhMCREUxFjAUBgNVBAgTDU5p
7 | ZWRlcnNhY2hzZW4xEDAOBgNVBAcTB0dhcmJzZW4xGDAWBgNVBAoTD1JhZGlvc2h1
8 | dHRsZS5kZTEcMBoGA1UECxMTU29mdHdhcmVEZXZlbG9wbWVudDEYMBYGA1UEAxMP
9 | cmFkaW9zaHV0dGxlLmRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
10 | pmdhOuVQUPbMZDSlo0PjOgDdXl57LFBFmGOTIaFFikKRthoac2ANgKAK+nRfOi6q
11 | sy8KR7PrsWelpiqMnlbu8HOI5UE6mEJH7LUgIQUJMBnc10rZfvW9rQaSuh4X32Ti
12 | szugsV6Ad4XEEFtJQKh4Y2HLiLF1czsQgu8yPlPMQtr2KpxY+zzxQmMwWzdjLdpL
13 | /TUWtxzkqEsloKvMKpSgkk0Kw1+kR7c6GTWerRsJt2pHhzfjxdGShdmKakhf49LM
14 | iLjYr4RyOI3sPLihdvG1SGv2NarHzeoXRXdibrvzwUTu5JxEV3U+9irjAILHBGCj
15 | 2xmOai/vvTuLKb0skWSCtQIDAQABo4HxMIHuMB0GA1UdDgQWBBSJCuvjA2PsYKzh
16 | dTqAEIKJg9a91TCBvgYDVR0jBIG2MIGzgBSJCuvjA2PsYKzhdTqAEIKJg9a91aGB
17 | j6SBjDCBiTELMAkGA1UEBhMCREUxFjAUBgNVBAgTDU5pZWRlcnNhY2hzZW4xEDAO
18 | BgNVBAcTB0dhcmJzZW4xGDAWBgNVBAoTD1JhZGlvc2h1dHRsZS5kZTEcMBoGA1UE
19 | CxMTU29mdHdhcmVEZXZlbG9wbWVudDEYMBYGA1UEAxMPcmFkaW9zaHV0dGxlLmRl
20 | ggkA4HeZB9BBQN0wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAMr/3
21 | ABudkYwThAT3MNqfB0prpL635ukcWLyIcTung9WvaGHPZ6f0+nZomcWgcu9sg3fb
22 | b7m35JXp3/oINrw4jar+JmhtHkAt7a+lCZ8uh1Gv+DRS47Ia4slzpaWPbK8SCFnz
23 | Bi9JAV+eAUhEiu+r7Ez530zII9aeldvdoLoulE6QBSB1QN8+qnOsFzmub6elgHLa
24 | J1oqHiuiXouSUNeQP+uGdKmserrXqhnS6I2iVfg/qM/ZMZw1/T0SH/zsrAHoYS0/
25 | MEpvbkTUg7rFt6MTkoL4WkR9/36oPISRUc9JAfn+Y4+llpaYnQuvdry+Cj26fq3g
26 | iiywEXaGuQsbGWeLbw==
27 | -----END CERTIFICATE-----
28 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 |
6 | #004D40
7 |
8 | #D84315
9 | #4CAF50
10 | #FDD835
11 |
12 | #1B5E20
13 |
14 | #00000000
15 | #00000000
16 | #FF7043
17 |
18 | #9dafff
19 | #00000000
20 |
21 | #FFFFFFFF
22 |
23 | #FFFFFFFF
24 | #FFFFFFFF
25 |
26 | #80000000
27 | #35FFFFFF
28 | #616161
29 | #303030
30 |
31 | #000000
32 | #FFFFFF
33 | #FFFFFF
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 |
6 | #FFBBDEFB
7 |
8 | #ca322e
9 | #2b932f
10 | #ffb846
11 |
12 | #FFEE58
13 |
14 | #e8eaf6
15 | #C5CAE9
16 | #ff1500
17 |
18 | #3F51B5
19 | #dedede
20 |
21 | #FF000000
22 |
23 | #89000000
24 | #FF000000
25 |
26 | #80000000
27 | #d7d7d7
28 | #d7d7d7
29 | #FAFAFA
30 |
31 | #FFFFFF
32 | #000000
33 | #000000
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4dp
4 | 100dp
5 | 150dp
6 | 200dp
7 |
8 | 4dp
9 | 96dp
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/new_backup_rules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/test/java/de/radioshuttle/mqttpushclient/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package de.radioshuttle.mqttpushclient;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 |
5 | repositories {
6 | google()
7 | mavenCentral()
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:8.1.1'
11 |
12 | // NOTE: Do not place your application dependencies here; they belong
13 | // in the individual module build.gradle files
14 | classpath 'com.google.gms:google-services:4.3.10'
15 | }
16 | }
17 |
18 | allprojects {
19 | repositories {
20 | google()
21 | mavenCentral()
22 | }
23 | }
24 |
25 | task clean(type: Delete) {
26 | delete rootProject.buildDir
27 | }
28 |
--------------------------------------------------------------------------------
/docs/dev/javascript_interface.rtd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/docs/dev/javascript_interface.rtd
--------------------------------------------------------------------------------
/docs/playstore/app_icon_store.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/docs/playstore/app_icon_store.png
--------------------------------------------------------------------------------
/docs/readme/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/docs/readme/app_icon.png
--------------------------------------------------------------------------------
/docs/readme/title_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/docs/readme/title_image.png
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | android.enableJetifier=true
10 | android.useAndroidX=true
11 | org.gradle.jvmargs=-Xmx1536m
12 | MQTTPushClient.signing=/helios/release/Android/MQTTPushClient/
13 | android.defaults.buildfeatures.buildconfig=true
14 | android.nonTransitiveRClass=false
15 | android.nonFinalResIds=false
16 | # When configured, Gradle will run in incubating parallel mode.
17 | # This option should only be used with decoupled projects. More details, visit
18 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
19 | # org.gradle.parallel=true
20 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RadioShuttle/MQTTPushClient_Android/d7a6bda611d298ee13532fb2529929b99081ba19/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Oct 15 12:14:43 CEST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
7 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------