├── .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 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | 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 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 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 |