From 4b916e48be37e4b5ebbb267fa1ac74818df5ed49 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Tue, 17 Feb 2026 09:50:53 -0800 Subject: [PATCH 1/5] delete old example --- Examples/OneSignalDemo/.gitignore | 8 - Examples/OneSignalDemo/app/build.gradle | 122 -- .../app/src/huawei/AndroidManifest.xml | 20 - .../HmsMessageServiceAppLevel.java | 62 - .../app/src/main/AndroidManifest.xml | 91 -- .../app/src/main/assets/api_key.txt | 2 - .../app/src/main/assets/fonts/Sarala-Bold.ttf | Bin 224888 -> 0 bytes .../src/main/assets/fonts/Sarala-Regular.ttf | Bin 227208 -> 0 bytes .../sdktest/activity/MainActivity.java | 48 - .../sdktest/activity/SecondaryActivity.java | 16 - .../sdktest/activity/SplashActivity.java | 28 - .../EnumSelectionRecyclerViewAdapter.java | 94 -- .../InAppMessageRecyclerViewAdapter.java | 123 -- .../NotificationRecyclerViewAdapter.java | 120 -- .../adapter/PairRecyclerViewAdapter.java | 104 -- .../adapter/SingleRecyclerViewAdapter.java | 99 -- .../SubscriptionRecyclerViewAdapter.java | 105 -- .../sdktest/application/MainApplication.java | 155 -- .../sdktest/application/MainApplicationKT.kt | 157 -- .../callback/AddPairAlertDialogCallback.java | 10 - .../callback/EnumSelectionCallback.java | 7 - .../callback/PairItemActionCallback.java | 7 - .../SendOutcomeAlertDialogCallback.java | 10 - .../callback/SingleItemActionCallback.java | 7 - .../SubscriptionItemActionCallback.java | 9 - .../callback/UpdateAlertDialogCallback.java | 8 - .../com/onesignal/sdktest/constant/Tag.java | 5 - .../com/onesignal/sdktest/constant/Text.java | 32 - .../sdktest/model/ActivityViewModel.java | 54 - .../sdktest/model/MainActivityViewModel.java | 937 ------------ .../model/SplashActivityViewModel.java | 147 -- .../notification/NotificationData.java | 194 --- .../NotificationServiceExtension.java | 28 - .../OneSignalNotificationSender.java | 95 -- .../onesignal/sdktest/type/InAppMessage.java | 26 - .../onesignal/sdktest/type/Notification.java | 129 -- .../onesignal/sdktest/type/OutcomeEvent.java | 32 - .../com/onesignal/sdktest/type/ToastType.java | 28 - .../sdktest/ui/CustomAlertDialogBuilder.java | 195 --- .../sdktest/ui/FixAppBarLayoutBehavior.java | 45 - .../sdktest/ui/RecyclerViewBuilder.java | 34 - .../com/onesignal/sdktest/util/Animate.java | 18 - .../com/onesignal/sdktest/util/Dialog.java | 374 ----- .../java/com/onesignal/sdktest/util/Font.java | 28 - .../com/onesignal/sdktest/util/IntentTo.java | 30 - .../onesignal/sdktest/util/InterfaceUtil.java | 31 - .../onesignal/sdktest/util/ProfileUtil.java | 148 -- .../sdktest/util/SharedPreferenceUtil.java | 65 - .../com/onesignal/sdktest/util/Toaster.java | 57 - .../java/com/onesignal/sdktest/util/Util.java | 28 - .../app/src/main/res/anim/fade_in.xml | 5 - .../app/src/main/res/anim/fade_out.xml | 5 - .../ripple_selector_red_white.xml | 11 - .../ripple_selector_white_red.xml | 11 - .../app/src/main/res/drawable/divider.xml | 6 - .../app/src/main/res/drawable/no_divider.xml | 6 - .../drawable/ripple_selector_red_white.xml | 10 - .../drawable/ripple_selector_white_red.xml | 11 - .../main/res/layout/activity_secondary.xml | 8 - .../layout/add_pair_alert_dialog_layout.xml | 69 - ...um_selection_recycler_view_item_layout.xml | 25 - .../main/res/layout/main_activity_layout.xml | 1275 ----------------- ...app_messages_recycler_view_item_layout.xml | 76 - ...otifications_recycler_view_item_layout.xml | 76 - .../layout/pair_recycler_view_item_layout.xml | 53 - .../send_outcome_alert_dialog_layout.xml | 145 -- .../single_recycler_view_item_layout.xml | 35 - .../res/layout/splash_activity_layout.xml | 16 - ...subscription_recycler_view_item_layout.xml | 83 -- .../res/layout/title_body_notification.xml | 29 - .../res/layout/toaster_toast_card_layout.xml | 53 - .../res/layout/update_alert_dialog_layout.xml | 37 - .../app/src/main/res/values/colors.xml | 23 - .../app/src/main/res/values/strings.xml | 69 - .../app/src/main/res/values/styles.xml | 48 - Examples/OneSignalDemo/build.gradle | 40 - Examples/OneSignalDemo/gradle.properties | 20 - Examples/OneSignalDemo/settings.gradle | 1 - .../app/agconnect-services.json | 96 -- .../OneSignalDemoV2/app/google-services.json | 30 - .../OneSignalDemoV2/app/proguard-rules.pro | 21 - .../ic_alert_octagon_white_48dp.png | Bin 763 -> 0 bytes .../res/drawable-hdpi/ic_alert_white_48dp.png | Bin 1178 -> 0 bytes .../res/drawable-hdpi/ic_bell_white_24dp.png | Bin 635 -> 0 bytes .../ic_brightness_percent_white_24dp.png | Bin 772 -> 0 bytes .../res/drawable-hdpi/ic_cart_white_24dp.png | Bin 714 -> 0 bytes .../ic_checkbox_marked_circle_white_48dp.png | Bin 1525 -> 0 bytes .../ic_chevron_down_white_48dp.png | Bin 588 -> 0 bytes .../ic_chevron_up_white_48dp.png | Bin 578 -> 0 bytes .../res/drawable-hdpi/ic_email_white_48dp.png | Bin 1017 -> 0 bytes .../ic_gesture_tap_white_24dp.png | Bin 798 -> 0 bytes .../ic_human_greeting_white_24dp.png | Bin 751 -> 0 bytes .../res/drawable-hdpi/ic_image_white_24dp.png | Bin 649 -> 0 bytes .../ic_information_white_48dp.png | Bin 1352 -> 0 bytes .../ic_map_marker_white_24dp.png | Bin 793 -> 0 bytes .../drawable-hdpi/ic_message_white_48dp.png | Bin 675 -> 0 bytes .../drawable-hdpi/ic_newspaper_white_24dp.png | Bin 576 -> 0 bytes .../res/drawable-hdpi/ic_star_white_24dp.png | Bin 764 -> 0 bytes .../ic_alert_octagon_white_48dp.png | Bin 621 -> 0 bytes .../res/drawable-mdpi/ic_alert_white_48dp.png | Bin 902 -> 0 bytes .../res/drawable-mdpi/ic_bell_white_24dp.png | Bin 508 -> 0 bytes .../ic_brightness_percent_white_24dp.png | Bin 646 -> 0 bytes .../res/drawable-mdpi/ic_cart_white_24dp.png | Bin 544 -> 0 bytes .../ic_checkbox_marked_circle_white_48dp.png | Bin 994 -> 0 bytes .../ic_chevron_down_white_48dp.png | Bin 510 -> 0 bytes .../ic_chevron_up_white_48dp.png | Bin 500 -> 0 bytes .../res/drawable-mdpi/ic_email_white_48dp.png | Bin 757 -> 0 bytes .../ic_gesture_tap_white_24dp.png | Bin 578 -> 0 bytes .../ic_human_greeting_white_24dp.png | Bin 588 -> 0 bytes .../res/drawable-mdpi/ic_image_white_24dp.png | Bin 506 -> 0 bytes .../ic_information_white_48dp.png | Bin 940 -> 0 bytes .../ic_map_marker_white_24dp.png | Bin 604 -> 0 bytes .../drawable-mdpi/ic_message_white_48dp.png | Bin 537 -> 0 bytes .../drawable-mdpi/ic_newspaper_white_24dp.png | Bin 472 -> 0 bytes .../res/drawable-mdpi/ic_star_white_24dp.png | Bin 609 -> 0 bytes .../drawable-nodpi/onesignal_rectangle.png | Bin 18638 -> 0 bytes .../res/drawable-nodpi/onesignal_square.png | Bin 99328 -> 0 bytes .../ic_alert_octagon_white_48dp.png | Bin 994 -> 0 bytes .../drawable-xhdpi/ic_alert_white_48dp.png | Bin 1402 -> 0 bytes .../res/drawable-xhdpi/ic_bell_white_24dp.png | Bin 698 -> 0 bytes .../ic_brightness_percent_white_24dp.png | Bin 932 -> 0 bytes .../res/drawable-xhdpi/ic_cart_white_24dp.png | Bin 867 -> 0 bytes .../ic_checkbox_marked_circle_white_48dp.png | Bin 1994 -> 0 bytes .../ic_chevron_down_white_48dp.png | Bin 668 -> 0 bytes .../ic_chevron_up_white_48dp.png | Bin 687 -> 0 bytes .../drawable-xhdpi/ic_email_white_48dp.png | Bin 1319 -> 0 bytes .../ic_gesture_tap_white_24dp.png | Bin 911 -> 0 bytes .../ic_human_greeting_white_24dp.png | Bin 873 -> 0 bytes .../drawable-xhdpi/ic_image_white_24dp.png | Bin 731 -> 0 bytes .../ic_information_white_48dp.png | Bin 1716 -> 0 bytes .../ic_map_marker_white_24dp.png | Bin 921 -> 0 bytes .../drawable-xhdpi/ic_message_white_48dp.png | Bin 786 -> 0 bytes .../ic_newspaper_white_24dp.png | Bin 621 -> 0 bytes .../res/drawable-xhdpi/ic_star_white_24dp.png | Bin 924 -> 0 bytes .../ic_alert_octagon_white_48dp.png | Bin 1504 -> 0 bytes .../drawable-xxhdpi/ic_alert_white_48dp.png | Bin 1860 -> 0 bytes .../drawable-xxhdpi/ic_bell_white_24dp.png | Bin 979 -> 0 bytes .../ic_brightness_percent_white_24dp.png | Bin 1213 -> 0 bytes .../drawable-xxhdpi/ic_cart_white_24dp.png | Bin 1218 -> 0 bytes .../ic_checkbox_marked_circle_white_48dp.png | Bin 3041 -> 0 bytes .../ic_chevron_down_white_48dp.png | Bin 793 -> 0 bytes .../ic_chevron_up_white_48dp.png | Bin 813 -> 0 bytes .../drawable-xxhdpi/ic_email_white_48dp.png | Bin 1788 -> 0 bytes .../ic_gesture_tap_white_24dp.png | Bin 1319 -> 0 bytes .../ic_human_greeting_white_24dp.png | Bin 1248 -> 0 bytes .../drawable-xxhdpi/ic_image_white_24dp.png | Bin 975 -> 0 bytes .../ic_information_white_48dp.png | Bin 2625 -> 0 bytes .../ic_map_marker_white_24dp.png | Bin 1436 -> 0 bytes .../drawable-xxhdpi/ic_message_white_48dp.png | Bin 1024 -> 0 bytes .../ic_newspaper_white_24dp.png | Bin 736 -> 0 bytes .../drawable-xxhdpi/ic_star_white_24dp.png | Bin 1346 -> 0 bytes .../ic_alert_octagon_white_48dp.png | Bin 1848 -> 0 bytes .../drawable-xxxhdpi/ic_alert_white_48dp.png | Bin 2329 -> 0 bytes .../drawable-xxxhdpi/ic_bell_white_24dp.png | Bin 1269 -> 0 bytes .../ic_brightness_percent_white_24dp.png | Bin 1630 -> 0 bytes .../drawable-xxxhdpi/ic_cart_white_24dp.png | Bin 1571 -> 0 bytes .../ic_checkbox_marked_circle_white_48dp.png | Bin 4124 -> 0 bytes .../ic_chevron_down_white_48dp.png | Bin 999 -> 0 bytes .../ic_chevron_up_white_48dp.png | Bin 1032 -> 0 bytes .../drawable-xxxhdpi/ic_email_white_48dp.png | Bin 2257 -> 0 bytes .../ic_gesture_tap_white_24dp.png | Bin 1624 -> 0 bytes .../ic_human_greeting_white_24dp.png | Bin 1620 -> 0 bytes .../drawable-xxxhdpi/ic_image_white_24dp.png | Bin 1210 -> 0 bytes .../ic_information_white_48dp.png | Bin 3520 -> 0 bytes .../ic_map_marker_white_24dp.png | Bin 1809 -> 0 bytes .../ic_message_white_48dp.png | Bin 1304 -> 0 bytes .../ic_newspaper_white_24dp.png | Bin 921 -> 0 bytes .../drawable-xxxhdpi/ic_star_white_24dp.png | Bin 1795 -> 0 bytes .../res/drawable/ic_launcher_background.xml | 170 --- .../res/drawable/ic_launcher_foreground.xml | 34 - .../res/mipmap-hdpi/ic_onesignal_launcher.png | Bin 5972 -> 0 bytes .../res/mipmap-mdpi/ic_onesignal_launcher.png | Bin 3989 -> 0 bytes .../mipmap-xhdpi/ic_onesignal_launcher.png | Bin 8639 -> 0 bytes .../mipmap-xxhdpi/ic_onesignal_launcher.png | Bin 13885 -> 0 bytes .../mipmap-xxxhdpi/ic_onesignal_launcher.png | Bin 20157 -> 0 bytes .../gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - Examples/OneSignalDemoV2/gradlew | 234 --- Examples/OneSignalDemoV2/gradlew.bat | 89 -- .../demo}/app/agconnect-services.json | 0 .../demo}/app/build.gradle.kts | 0 .../demo}/app/google-services.json | 0 .../demo}/app/proguard-rules.pro | 0 .../demo}/app/src/huawei/AndroidManifest.xml | 0 .../notification/HmsMessageServiceAppLevel.kt | 0 .../demo}/app/src/main/AndroidManifest.xml | 0 .../sdktest/application/MainApplication.kt | 0 .../sdktest/data/model/InAppMessageType.kt | 0 .../sdktest/data/model/NotificationType.kt | 0 .../sdktest/data/network/OneSignalService.kt | 0 .../data/repository/OneSignalRepository.kt | 0 .../sdktest/ui/components/ActionButton.kt | 0 .../sdktest/ui/components/Dialogs.kt | 0 .../sdktest/ui/components/ListComponents.kt | 0 .../sdktest/ui/components/LoadingOverlay.kt | 0 .../sdktest/ui/components/LogView.kt | 0 .../sdktest/ui/components/SectionCard.kt | 0 .../sdktest/ui/components/ToggleRow.kt | 0 .../onesignal/sdktest/ui/main/MainActivity.kt | 0 .../onesignal/sdktest/ui/main/MainScreen.kt | 0 .../sdktest/ui/main/MainViewModel.kt | 0 .../com/onesignal/sdktest/ui/main/Sections.kt | 0 .../sdktest/ui/secondary/SecondaryActivity.kt | 0 .../com/onesignal/sdktest/ui/theme/Theme.kt | 0 .../com/onesignal/sdktest/util/LogManager.kt | 0 .../sdktest/util/SharedPreferenceUtil.kt | 0 .../onesignal/sdktest/util/TooltipHelper.kt | 0 .../ic_alert_octagon_white_48dp.png | Bin .../res/drawable-hdpi/ic_alert_white_48dp.png | Bin .../res/drawable-hdpi/ic_bell_white_24dp.png | Bin .../ic_brightness_percent_white_24dp.png | Bin .../res/drawable-hdpi/ic_cart_white_24dp.png | Bin .../ic_checkbox_marked_circle_white_48dp.png | Bin .../ic_chevron_down_white_48dp.png | Bin .../ic_chevron_up_white_48dp.png | Bin .../res/drawable-hdpi/ic_email_white_48dp.png | Bin .../ic_gesture_tap_white_24dp.png | Bin .../ic_human_greeting_white_24dp.png | Bin .../res/drawable-hdpi/ic_image_white_24dp.png | Bin .../ic_information_white_48dp.png | Bin .../ic_map_marker_white_24dp.png | Bin .../drawable-hdpi/ic_message_white_48dp.png | Bin .../drawable-hdpi/ic_newspaper_white_24dp.png | Bin .../res/drawable-hdpi/ic_star_white_24dp.png | Bin .../ic_alert_octagon_white_48dp.png | Bin .../res/drawable-mdpi/ic_alert_white_48dp.png | Bin .../res/drawable-mdpi/ic_bell_white_24dp.png | Bin .../ic_brightness_percent_white_24dp.png | Bin .../res/drawable-mdpi/ic_cart_white_24dp.png | Bin .../ic_checkbox_marked_circle_white_48dp.png | Bin .../ic_chevron_down_white_48dp.png | Bin .../ic_chevron_up_white_48dp.png | Bin .../res/drawable-mdpi/ic_email_white_48dp.png | Bin .../ic_gesture_tap_white_24dp.png | Bin .../ic_human_greeting_white_24dp.png | Bin .../res/drawable-mdpi/ic_image_white_24dp.png | Bin .../ic_information_white_48dp.png | Bin .../ic_map_marker_white_24dp.png | Bin .../drawable-mdpi/ic_message_white_48dp.png | Bin .../drawable-mdpi/ic_newspaper_white_24dp.png | Bin .../res/drawable-mdpi/ic_star_white_24dp.png | Bin .../drawable-nodpi/onesignal_rectangle.png | Bin .../res/drawable-nodpi/onesignal_square.png | Bin .../ic_alert_octagon_white_48dp.png | Bin .../drawable-xhdpi/ic_alert_white_48dp.png | Bin .../res/drawable-xhdpi/ic_bell_white_24dp.png | Bin .../ic_brightness_percent_white_24dp.png | Bin .../res/drawable-xhdpi/ic_cart_white_24dp.png | Bin .../ic_checkbox_marked_circle_white_48dp.png | Bin .../ic_chevron_down_white_48dp.png | Bin .../ic_chevron_up_white_48dp.png | Bin .../drawable-xhdpi/ic_email_white_48dp.png | Bin .../ic_gesture_tap_white_24dp.png | Bin .../ic_human_greeting_white_24dp.png | Bin .../drawable-xhdpi/ic_image_white_24dp.png | Bin .../ic_information_white_48dp.png | Bin .../ic_map_marker_white_24dp.png | Bin .../drawable-xhdpi/ic_message_white_48dp.png | Bin .../ic_newspaper_white_24dp.png | Bin .../res/drawable-xhdpi/ic_star_white_24dp.png | Bin .../ic_alert_octagon_white_48dp.png | Bin .../drawable-xxhdpi/ic_alert_white_48dp.png | Bin .../drawable-xxhdpi/ic_bell_white_24dp.png | Bin .../ic_brightness_percent_white_24dp.png | Bin .../drawable-xxhdpi/ic_cart_white_24dp.png | Bin .../ic_checkbox_marked_circle_white_48dp.png | Bin .../ic_chevron_down_white_48dp.png | Bin .../ic_chevron_up_white_48dp.png | Bin .../drawable-xxhdpi/ic_email_white_48dp.png | Bin .../ic_gesture_tap_white_24dp.png | Bin .../ic_human_greeting_white_24dp.png | Bin .../drawable-xxhdpi/ic_image_white_24dp.png | Bin .../ic_information_white_48dp.png | Bin .../ic_map_marker_white_24dp.png | Bin .../drawable-xxhdpi/ic_message_white_48dp.png | Bin .../ic_newspaper_white_24dp.png | Bin .../drawable-xxhdpi/ic_star_white_24dp.png | Bin .../ic_alert_octagon_white_48dp.png | Bin .../drawable-xxxhdpi/ic_alert_white_48dp.png | Bin .../drawable-xxxhdpi/ic_bell_white_24dp.png | Bin .../ic_brightness_percent_white_24dp.png | Bin .../drawable-xxxhdpi/ic_cart_white_24dp.png | Bin .../ic_checkbox_marked_circle_white_48dp.png | Bin .../ic_chevron_down_white_48dp.png | Bin .../ic_chevron_up_white_48dp.png | Bin .../drawable-xxxhdpi/ic_email_white_48dp.png | Bin .../ic_gesture_tap_white_24dp.png | Bin .../ic_human_greeting_white_24dp.png | Bin .../drawable-xxxhdpi/ic_image_white_24dp.png | Bin .../ic_information_white_48dp.png | Bin .../ic_map_marker_white_24dp.png | Bin .../ic_message_white_48dp.png | Bin .../ic_newspaper_white_24dp.png | Bin .../drawable-xxxhdpi/ic_star_white_24dp.png | Bin .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-hdpi/ic_onesignal_launcher.png | Bin .../res/mipmap-mdpi/ic_onesignal_launcher.png | Bin .../mipmap-xhdpi/ic_onesignal_launcher.png | Bin .../mipmap-xxhdpi/ic_onesignal_launcher.png | Bin .../mipmap-xxxhdpi/ic_onesignal_launcher.png | Bin .../demo}/app/src/main/res/values/colors.xml | 0 .../demo}/app/src/main/res/values/strings.xml | 0 .../demo}/app/src/main/res/values/styles.xml | 0 .../demo}/build.gradle.kts | 0 .../demo}/buildSrc/build.gradle.kts | 0 .../buildSrc/src/main/kotlin/Dependencies.kt | 0 .../buildSrc/src/main/kotlin/Versions.kt | 0 .../demo}/build_app_prompt.md | 0 .../demo}/gradle.properties | 0 .../demo}/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../OneSignalDemo => examples/demo}/gradlew | 0 .../demo}/gradlew.bat | 0 .../demo}/settings.gradle.kts | 0 315 files changed, 7097 deletions(-) delete mode 100644 Examples/OneSignalDemo/.gitignore delete mode 100644 Examples/OneSignalDemo/app/build.gradle delete mode 100644 Examples/OneSignalDemo/app/src/huawei/AndroidManifest.xml delete mode 100644 Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java delete mode 100644 Examples/OneSignalDemo/app/src/main/AndroidManifest.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/assets/api_key.txt delete mode 100644 Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Bold.ttf delete mode 100644 Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Regular.ttf delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/MainActivity.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SecondaryActivity.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/activity/SplashActivity.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/EnumSelectionRecyclerViewAdapter.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/InAppMessageRecyclerViewAdapter.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/NotificationRecyclerViewAdapter.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/PairRecyclerViewAdapter.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SingleRecyclerViewAdapter.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SubscriptionRecyclerViewAdapter.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplicationKT.kt delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/AddPairAlertDialogCallback.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/EnumSelectionCallback.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/PairItemActionCallback.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SendOutcomeAlertDialogCallback.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SingleItemActionCallback.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SubscriptionItemActionCallback.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/UpdateAlertDialogCallback.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Tag.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/ActivityViewModel.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/SplashActivityViewModel.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationData.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/InAppMessage.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/Notification.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/OutcomeEvent.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/ToastType.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/CustomAlertDialogBuilder.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/FixAppBarLayoutBehavior.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/RecyclerViewBuilder.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Animate.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Font.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/IntentTo.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/InterfaceUtil.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Toaster.java delete mode 100644 Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Util.java delete mode 100644 Examples/OneSignalDemo/app/src/main/res/anim/fade_in.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/anim/fade_out.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_red_white.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_white_red.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/drawable/divider.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/drawable/no_divider.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_red_white.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_white_red.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/activity_secondary.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/add_pair_alert_dialog_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/enum_selection_recycler_view_item_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/main_in_app_messages_recycler_view_item_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/main_notifications_recycler_view_item_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/pair_recycler_view_item_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/send_outcome_alert_dialog_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/single_recycler_view_item_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/splash_activity_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/subscription_recycler_view_item_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/title_body_notification.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/toaster_toast_card_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/layout/update_alert_dialog_layout.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/values/colors.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/values/strings.xml delete mode 100644 Examples/OneSignalDemo/app/src/main/res/values/styles.xml delete mode 100644 Examples/OneSignalDemo/build.gradle delete mode 100644 Examples/OneSignalDemo/gradle.properties delete mode 100644 Examples/OneSignalDemo/settings.gradle delete mode 100644 Examples/OneSignalDemoV2/app/agconnect-services.json delete mode 100644 Examples/OneSignalDemoV2/app/google-services.json delete mode 100644 Examples/OneSignalDemoV2/app/proguard-rules.pro delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_alert_octagon_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_alert_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_bell_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_brightness_percent_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_cart_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_checkbox_marked_circle_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_chevron_down_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_chevron_up_white_48dp.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_email_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_gesture_tap_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_human_greeting_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_image_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_information_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_map_marker_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_message_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_newspaper_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-hdpi/ic_star_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_alert_octagon_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_alert_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_bell_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_brightness_percent_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_cart_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_checkbox_marked_circle_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_chevron_down_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_chevron_up_white_48dp.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_email_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_gesture_tap_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_human_greeting_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_image_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_information_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_map_marker_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_message_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_newspaper_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-mdpi/ic_star_white_24dp.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable-nodpi/onesignal_rectangle.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable-nodpi/onesignal_square.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_alert_octagon_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_alert_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_bell_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_brightness_percent_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_cart_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_checkbox_marked_circle_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_chevron_down_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_chevron_up_white_48dp.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_email_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_gesture_tap_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_human_greeting_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_image_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_information_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_map_marker_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_message_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_newspaper_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xhdpi/ic_star_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_alert_octagon_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_alert_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_bell_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_brightness_percent_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_cart_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_checkbox_marked_circle_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_chevron_down_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_chevron_up_white_48dp.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_email_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_gesture_tap_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_human_greeting_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_information_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_map_marker_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_message_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_newspaper_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_alert_octagon_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_alert_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_bell_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_brightness_percent_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_cart_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_checkbox_marked_circle_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_chevron_down_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_chevron_up_white_48dp.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_email_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_gesture_tap_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_human_greeting_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_information_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_map_marker_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_message_white_48dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_newspaper_white_24dp.png delete mode 100755 Examples/OneSignalDemoV2/app/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/mipmap-hdpi/ic_onesignal_launcher.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/mipmap-mdpi/ic_onesignal_launcher.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/mipmap-xhdpi/ic_onesignal_launcher.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/mipmap-xxhdpi/ic_onesignal_launcher.png delete mode 100644 Examples/OneSignalDemoV2/app/src/main/res/mipmap-xxxhdpi/ic_onesignal_launcher.png delete mode 100644 Examples/OneSignalDemoV2/gradle/wrapper/gradle-wrapper.jar delete mode 100644 Examples/OneSignalDemoV2/gradle/wrapper/gradle-wrapper.properties delete mode 100755 Examples/OneSignalDemoV2/gradlew delete mode 100644 Examples/OneSignalDemoV2/gradlew.bat rename {Examples/OneSignalDemo => examples/demo}/app/agconnect-services.json (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/build.gradle.kts (100%) rename {Examples/OneSignalDemo => examples/demo}/app/google-services.json (100%) rename {Examples/OneSignalDemo => examples/demo}/app/proguard-rules.pro (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/huawei/AndroidManifest.xml (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/AndroidManifest.xml (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/application/MainApplication.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/data/model/InAppMessageType.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/data/model/NotificationType.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/data/network/OneSignalService.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/data/repository/OneSignalRepository.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/components/ActionButton.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/components/Dialogs.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/components/ListComponents.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/components/LoadingOverlay.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/components/LogView.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/components/SectionCard.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/components/ToggleRow.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/main/MainActivity.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/main/MainScreen.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/main/MainViewModel.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/main/Sections.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/secondary/SecondaryActivity.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/ui/theme/Theme.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/util/LogManager.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/java/com/onesignal/sdktest/util/TooltipHelper.kt (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_alert_octagon_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_alert_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_bell_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_brightness_percent_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_cart_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_checkbox_marked_circle_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_chevron_down_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_chevron_up_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_email_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_gesture_tap_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_human_greeting_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_image_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_information_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_map_marker_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_message_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_newspaper_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-hdpi/ic_star_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_alert_octagon_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_alert_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_bell_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_brightness_percent_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_cart_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_checkbox_marked_circle_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_chevron_down_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_chevron_up_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_email_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_gesture_tap_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_human_greeting_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_image_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_information_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_map_marker_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_message_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_newspaper_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-mdpi/ic_star_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-nodpi/onesignal_rectangle.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-nodpi/onesignal_square.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_alert_octagon_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_alert_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_bell_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_brightness_percent_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_cart_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_checkbox_marked_circle_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_chevron_down_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_chevron_up_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_email_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_gesture_tap_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_human_greeting_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_image_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_information_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_map_marker_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_message_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_newspaper_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xhdpi/ic_star_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_alert_octagon_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_alert_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_bell_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_brightness_percent_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_cart_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_checkbox_marked_circle_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_chevron_down_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_chevron_up_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_email_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_gesture_tap_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_human_greeting_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_information_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_map_marker_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_message_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_newspaper_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_alert_octagon_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_alert_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_bell_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_brightness_percent_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_cart_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_checkbox_marked_circle_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_chevron_down_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_chevron_up_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_email_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_gesture_tap_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_human_greeting_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_information_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_map_marker_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_message_white_48dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_newspaper_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable/ic_launcher_background.xml (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/mipmap-hdpi/ic_onesignal_launcher.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/mipmap-mdpi/ic_onesignal_launcher.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/mipmap-xhdpi/ic_onesignal_launcher.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/mipmap-xxhdpi/ic_onesignal_launcher.png (100%) rename {Examples/OneSignalDemo => examples/demo}/app/src/main/res/mipmap-xxxhdpi/ic_onesignal_launcher.png (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/res/values/colors.xml (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/res/values/strings.xml (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/app/src/main/res/values/styles.xml (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/build.gradle.kts (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/buildSrc/build.gradle.kts (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/buildSrc/src/main/kotlin/Dependencies.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/buildSrc/src/main/kotlin/Versions.kt (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/build_app_prompt.md (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/gradle.properties (100%) rename {Examples/OneSignalDemo => examples/demo}/gradle/wrapper/gradle-wrapper.jar (100%) rename {Examples/OneSignalDemo => examples/demo}/gradle/wrapper/gradle-wrapper.properties (100%) rename {Examples/OneSignalDemo => examples/demo}/gradlew (100%) rename {Examples/OneSignalDemo => examples/demo}/gradlew.bat (100%) rename {Examples/OneSignalDemoV2 => examples/demo}/settings.gradle.kts (100%) diff --git a/Examples/OneSignalDemo/.gitignore b/Examples/OneSignalDemo/.gitignore deleted file mode 100644 index 24bfabcdf9..0000000000 --- a/Examples/OneSignalDemo/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.gradle -local.properties -.DS_Store -/build -/captures -*.gpg -/**/.idea -*.iml \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/build.gradle b/Examples/OneSignalDemo/app/build.gradle deleted file mode 100644 index c994d6615d..0000000000 --- a/Examples/OneSignalDemo/app/build.gradle +++ /dev/null @@ -1,122 +0,0 @@ -plugins { - id 'com.android.application' - id 'kotlin-android' -} - -android { - namespace 'com.onesignal.sdktest' - compileSdkVersion 34 - defaultConfig { - minSdkVersion 21 - targetSdkVersion 34 - versionCode 1 - versionName "1.0" - multiDexEnabled true - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - flavorDimensions "default" - } - -// signingConfigs { -// huawei { -// storeFile file('SdkTest.jks') -// keyAlias 'SdkTest' -// keyPassword '' -// storePassword '' -// v1SigningEnabled true -// v2SigningEnabled true -// } -// } - - productFlavors { - gms { - dimension "default" - applicationId "com.onesignal.sdktest" - } - huawei { - dimension "default" - minSdkVersion 21 - applicationId "com.onesignal.sdktest" - } - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - debug { -// signingConfig null -// productFlavors.huawei.signingConfig signingConfigs.huawei - debuggable true - // Note: profileable is automatically enabled when debuggable=true - // Enable method tracing for detailed performance analysis - testCoverageEnabled false - } - // Profileable release build for performance testing - profileable { - initWith release - debuggable false - profileable true - minifyEnabled false - signingConfig signingConfigs.debug - matchingFallbacks = ['release'] - } - } - - kotlinOptions { - jvmTarget = '1.8' - } - - // Forced downgrade to Java 1.8 for compiling the application due to Android N error when building - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - packagingOptions { - exclude 'androidsupportmultidexversion.txt' - } - - task flavorSelection() { - def tasksList = gradle.startParameter.taskRequests.toString() - if (tasksList.contains('Gms')) { - apply plugin: 'com.google.gms.google-services' - googleServices { disableVersionCheck = true } - } else if (tasksList.contains('Huawei')) { - apply plugin: 'com.huawei.agconnect' - } - } -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'androidx.multidex:multidex:2.0.1' - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'androidx.vectordrawable:vectordrawable:1.1.0' - - implementation 'com.google.android.material:material:1.7.0' - implementation 'com.google.android.gms:play-services-location:21.0.0' - - implementation 'com.github.bumptech.glide:glide:4.12.0' - - /** START - Google Play Builds **/ - gmsImplementation("com.onesignal:OneSignal:$SDK_VERSION") - /** END - Google Play Builds **/ - - /** START - Huawei Builds **/ - // Omit Google / Firebase libraries for Huawei builds. - huaweiImplementation("com.onesignal:OneSignal:$SDK_VERSION") { - exclude group: 'com.google.android.gms', module: 'play-services-gcm' - exclude group: 'com.google.android.gms', module: 'play-services-analytics' - exclude group: 'com.google.android.gms', module: 'play-services-location' - exclude group: 'com.google.firebase', module: 'firebase-messaging' - } - // Add HMS Push library - huaweiImplementation 'com.huawei.hms:push:6.3.0.304' - // Optionally add HMS location - huaweiImplementation 'com.huawei.hms:location:4.0.0.300' - /** END - Huawei Builds **/ -} diff --git a/Examples/OneSignalDemo/app/src/huawei/AndroidManifest.xml b/Examples/OneSignalDemo/app/src/huawei/AndroidManifest.xml deleted file mode 100644 index 6778b0ea3b..0000000000 --- a/Examples/OneSignalDemo/app/src/huawei/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java b/Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java deleted file mode 100644 index 1d49484664..0000000000 --- a/Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.onesignal.sdktest.notification; - -import android.os.Bundle; -import android.util.Log; - -import com.huawei.hms.push.HmsMessageService; -import com.huawei.hms.push.RemoteMessage; -import com.onesignal.notifications.bridges.OneSignalHmsEventBridge; -import com.onesignal.sdktest.constant.Tag; - -public class HmsMessageServiceAppLevel extends HmsMessageService { - - /** - * When an app calls the getToken method to apply for a token from the server, - * if the server does not return the token during current method calling, the server can return the token through this method later. - * This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing. - * - * @param token token - * @param bundle bundle - */ - @Override - public void onNewToken(String token, Bundle bundle) { - Log.d(Tag.LOG_TAG, "HmsMessageServiceAppLevel onNewToken refresh token:" + token + " bundle: " + bundle); - - // Forward event on to OneSignal SDK - OneSignalHmsEventBridge.INSTANCE.onNewToken(this, token, bundle); - } - - @Deprecated - @Override - public void onNewToken(String token) { - Log.d(Tag.LOG_TAG, "HmsMessageServiceAppLevel onNewToken refresh token:" + token); - - // Forward event on to OneSignal SDK - OneSignalHmsEventBridge.INSTANCE.onNewToken(this, token); - } - - /** - * This method is called in the following cases: - * 1. "Data messages" - App process is alive when received. - * 2. "Notification Message" - foreground_show = false and app is in focus - * This method callback must be completed in 10 seconds. Start a new Job if more time is needed. - * - * @param message RemoteMessage - */ - @Override - public void onMessageReceived(RemoteMessage message) { - Log.d(Tag.LOG_TAG, "HMS onMessageReceived: " + message); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.ttl:" + message.getTtl()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.data:" + message.getData()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.title: " + message.getNotification().getTitle()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.body: " + message.getNotification().getBody()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.icon: " + message.getNotification().getIcon()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.color: " + message.getNotification().getColor()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.channelId: " + message.getNotification().getChannelId()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.imageURL: " + message.getNotification().getImageUrl()); - Log.d(Tag.LOG_TAG, "HMS onMessageReceived.tag: " + message.getNotification().getTag()); - - // Forward event on to OneSignal SDK - OneSignalHmsEventBridge.INSTANCE.onMessageReceived(this, message); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/AndroidManifest.xml b/Examples/OneSignalDemo/app/src/main/AndroidManifest.xml deleted file mode 100644 index 98ac927a3a..0000000000 --- a/Examples/OneSignalDemo/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/assets/api_key.txt b/Examples/OneSignalDemo/app/src/main/assets/api_key.txt deleted file mode 100644 index 652febffec..0000000000 --- a/Examples/OneSignalDemo/app/src/main/assets/api_key.txt +++ /dev/null @@ -1,2 +0,0 @@ -Insert Amazon API Key here. -https://documentation.onesignal.com/docs/generate-an-amazon-api-key \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Bold.ttf b/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Bold.ttf deleted file mode 100644 index f9c11ca7948e4acf163d5f16f6fce59b5a22dad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224888 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 diff --git a/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Regular.ttf b/Examples/OneSignalDemo/app/src/main/assets/fonts/Sarala-Regular.ttf deleted file mode 100644 index df722b2ad3ce956ad427e97a48adb880a152fbcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227208 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%0Dj4S4tC)?;4s`}(a+Rn;B_lpO>m{bmC64e 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 { - - private Font font; - private LayoutInflater layoutInflater; - - private Context context; - private Object[] enums; - private EnumSelectionCallback callback; - - - public EnumSelectionRecyclerViewAdapter(Context context, Object[] enums, EnumSelectionCallback callback) { - this.context = context; - this.enums = enums; - this.callback = callback; - - this.font = new Font(context); - this.layoutInflater = LayoutInflater.from(context); - } - - - @Override - public int getItemViewType(int position) { - return 0; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = layoutInflater.inflate(R.layout.enum_selection_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new EnumSelectionViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((EnumSelectionViewHolder) holder).setData(position, enums[position].toString()); - } - - @Override - public int getItemCount() { - return enums.length; - } - - - public class EnumSelectionViewHolder extends RecyclerView.ViewHolder { - - private RelativeLayout enumRelativeLayout; - private TextView enumTextView; - - private String title; - - EnumSelectionViewHolder(View itemView) { - super(itemView); - - enumRelativeLayout = itemView.findViewById(R.id.enum_selection_recycler_view_item_relative_layout); - enumTextView = itemView.findViewById(R.id.enum_selection_recycler_view_item_text_view); - } - - private void setData(int position, String title) { - this.title = title; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(int position) { - enumRelativeLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - callback.onSelection(title); - } - }); - - font.applyFont(enumTextView, font.saralaRegular); - enumTextView.setText(title); - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/InAppMessageRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/InAppMessageRecyclerViewAdapter.java deleted file mode 100644 index fe6884c1c2..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/InAppMessageRecyclerViewAdapter.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.graphics.Bitmap; -import android.os.Handler; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.target.BitmapImageViewTarget; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.type.InAppMessage; -import com.onesignal.sdktest.type.ToastType; -import com.onesignal.sdktest.util.Animate; -import com.onesignal.sdktest.util.Toaster; - -public class InAppMessageRecyclerViewAdapter extends RecyclerView.Adapter { - - private Animate animate; - private LayoutInflater layoutInflater; - private Toaster toaster; - - private Context context; - private InAppMessage[] inAppMessages; - - - public InAppMessageRecyclerViewAdapter(Context context, InAppMessage[] inAppMessages) { - this.context = context; - this.inAppMessages = inAppMessages; - - this.animate = new Animate(); - this.layoutInflater = LayoutInflater.from(context); - this.toaster = new Toaster(context); - } - - - @Override - public int getItemViewType(int position) { - return 0; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = layoutInflater.inflate(R.layout.main_in_app_messages_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new InAppMessageViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((InAppMessageViewHolder) holder).setData(position, inAppMessages[position]); - } - - @Override - public int getItemCount() { - return inAppMessages.length; - } - - - public class InAppMessageViewHolder extends RecyclerView.ViewHolder { - - private LinearLayout inAppMessageLinearLayout; - private ImageView inAppMessageImageView; - private ProgressBar inAppMessageProgressBar; - private TextView inAppMessageTextView; - - private InAppMessage inAppMessage; - - InAppMessageViewHolder(View itemView) { - super(itemView); - - inAppMessageLinearLayout = itemView.findViewById(R.id.in_app_message_recycler_view_item_linear_layout); - inAppMessageImageView = itemView.findViewById(R.id.in_app_message_recycler_view_item_image_view); - inAppMessageProgressBar = itemView.findViewById(R.id.in_app_message_recycler_view_item_progress_bar); - inAppMessageTextView = itemView.findViewById(R.id.in_app_message_recycler_view_item_text_view); - } - - private void setData(int position, InAppMessage inAppMessage) { - this.inAppMessage = inAppMessage; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(int position) { - animate.toggleAnimationView(true, View.INVISIBLE, inAppMessageImageView, inAppMessageProgressBar); - - inAppMessageLinearLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String message = "In-App Messaging Coming Soon..."; - toaster.makeCustomViewToast(message, ToastType.INFO); - } - }); - - inAppMessageTextView.setText(inAppMessage.getTitle()); - - Glide.with(context) - .asBitmap() - .load(inAppMessage.getIconUrl()) - .into(new BitmapImageViewTarget(inAppMessageImageView) { - @Override - protected void setResource(Bitmap resource) { - inAppMessageImageView.setImageBitmap(resource); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - animate.toggleAnimationView(false, View.INVISIBLE, inAppMessageImageView, inAppMessageProgressBar); - } - }, 300); - } - }); - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/NotificationRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/NotificationRecyclerViewAdapter.java deleted file mode 100644 index b4cb9050f3..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/NotificationRecyclerViewAdapter.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.graphics.Bitmap; -import android.os.Handler; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.target.BitmapImageViewTarget; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.notification.OneSignalNotificationSender; -import com.onesignal.sdktest.type.Notification; -import com.onesignal.sdktest.util.Animate; - -public class NotificationRecyclerViewAdapter extends RecyclerView.Adapter { - - private Animate animate; - private LayoutInflater layoutInflater; - - private Context context; - private Notification[] notifications; - - - public NotificationRecyclerViewAdapter(Context context, Notification[] notifications) { - this.context = context; - this.notifications = notifications; - - this.animate = new Animate(); - this.layoutInflater = LayoutInflater.from(context); - } - - - @Override - public int getItemViewType(int position) { - return 0; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = layoutInflater.inflate(R.layout.main_notifications_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new NotificationViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((NotificationViewHolder) holder).setData(position, notifications[position]); - } - - @Override - public int getItemCount() { - return notifications.length; - } - - - public class NotificationViewHolder extends RecyclerView.ViewHolder { - - private LinearLayout notificationLinearLayout; - private ImageView notificationImageView; - private ProgressBar notificationProgressBar; - private TextView notificationTextView; - - private Notification notification; - - NotificationViewHolder(View itemView) { - super(itemView); - - notificationLinearLayout = itemView.findViewById(R.id.notification_recycler_view_item_linear_layout); - notificationImageView = itemView.findViewById(R.id.notification_recycler_view_item_image_view); - notificationProgressBar = itemView.findViewById(R.id.notification_recycler_view_item_progress_bar); - notificationTextView = itemView.findViewById(R.id.notification_recycler_view_item_text_view); - } - - private void setData(int position, Notification notification) { - this.notification = notification; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(int position) { - animate.toggleAnimationView(true, View.INVISIBLE, notificationImageView, notificationProgressBar); - - notificationLinearLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - OneSignalNotificationSender.sendDeviceNotification(notification); - } - }); - - notificationTextView.setText(notification.getGroup()); - - Glide.with(context) - .asBitmap() - .load(notification.getIconUrl()) - .into(new BitmapImageViewTarget(notificationImageView) { - @Override - protected void setResource(Bitmap resource) { - notificationImageView.setImageBitmap(resource); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - animate.toggleAnimationView(false, View.INVISIBLE, notificationImageView, notificationProgressBar); - } - }, 300); - } - }); - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/PairRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/PairRecyclerViewAdapter.java deleted file mode 100644 index 6315ba5b0d..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/PairRecyclerViewAdapter.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.callback.PairItemActionCallback; -import com.onesignal.sdktest.util.Util; - -import java.util.ArrayList; -import java.util.Map; - -public class PairRecyclerViewAdapter extends RecyclerView.Adapter { - - private LayoutInflater layoutInflater; - - private Context context; - - private ArrayList tags; - private PairItemActionCallback callback; - - public PairRecyclerViewAdapter(Context context, ArrayList tags, PairItemActionCallback callback) { - this.context = context; - - this.tags = tags; - this.callback = callback; - - layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) { - View view = layoutInflater.inflate(R.layout.pair_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new PairViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((PairViewHolder) holder).setData(position, tags.get(position)); - } - - @Override - public int getItemCount() { - return tags.size(); - } - - public class PairViewHolder extends RecyclerView.ViewHolder { - - private RelativeLayout pairRelativeLayout; - private TextView pairKeyTextView; - private TextView pairValueTextView; - - private Map.Entry pair; - - PairViewHolder(View itemView) { - super(itemView); - - pairRelativeLayout = itemView.findViewById(R.id.pair_recycler_view_item_relative_layout); - pairKeyTextView = itemView.findViewById(R.id.pair_recycler_view_item_key_text_view); - pairValueTextView = itemView.findViewById(R.id.pair_recycler_view_item_value_text_view); - } - - private void setData(int position, Map.Entry pair) { - this.pair = pair; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(final int position) { - - pairKeyTextView.setText(pair.getKey().toString()); - - String value = pair.getValue().toString(); - - if (Util.isBoolean(value)) - value += " (bool)"; - else if (Util.isInteger(value)) - value += " (int)"; - else if (Util.isFloat(value)) - value += " (float)"; - else - value += " (str)"; - pairValueTextView.setText(value); - - pairRelativeLayout.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - callback.onLongClick(pair.getKey().toString()); - return false; - } - }); - - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SingleRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SingleRecyclerViewAdapter.java deleted file mode 100644 index 7cae936707..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SingleRecyclerViewAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.callback.SingleItemActionCallback; -import com.onesignal.sdktest.util.Util; - -import java.util.ArrayList; - -public class SingleRecyclerViewAdapter extends RecyclerView.Adapter { - - private LayoutInflater layoutInflater; - - private Context context; - - private ArrayList values; - private SingleItemActionCallback callback; - - public SingleRecyclerViewAdapter(Context context, ArrayList values, SingleItemActionCallback callback) { - this.context = context; - - this.values = values; - this.callback = callback; - - layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) { - View view = layoutInflater.inflate(R.layout.single_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new SingleViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((SingleViewHolder) holder).setData(position, values.get(position)); - } - - @Override - public int getItemCount() { - return values.size(); - } - - public class SingleViewHolder extends RecyclerView.ViewHolder { - - private RelativeLayout singleRelativeLayout; - private TextView singleTextView; - - private Object item; - - SingleViewHolder(View itemView) { - super(itemView); - - singleRelativeLayout = itemView.findViewById(R.id.single_recycler_view_item_relative_layout); - singleTextView = itemView.findViewById(R.id.single_recycler_view_item_text_view); - } - - private void setData(int position, Object item) { - this.item = item; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(final int position) { - String value = item.toString(); - - if (Util.isBoolean(value)) - value += " (bool)"; - else if (Util.isInteger(value)) - value += " (int)"; - else if (Util.isFloat(value)) - value += " (float)"; - else - value += " (str)"; - singleTextView.setText(value); - - singleRelativeLayout.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - callback.onLongClick(item.toString()); - return false; - } - }); - - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SubscriptionRecyclerViewAdapter.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SubscriptionRecyclerViewAdapter.java deleted file mode 100644 index c7a49f2645..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/adapter/SubscriptionRecyclerViewAdapter.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.onesignal.sdktest.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.callback.SingleItemActionCallback; -import com.onesignal.sdktest.callback.SubscriptionItemActionCallback; -import com.onesignal.user.subscriptions.IEmailSubscription; -import com.onesignal.user.subscriptions.ISmsSubscription; -import com.onesignal.user.subscriptions.ISubscription; - -import java.util.ArrayList; - -public class SubscriptionRecyclerViewAdapter extends RecyclerView.Adapter { - - private LayoutInflater layoutInflater; - - private Context context; - - private ArrayList subscriptions; - private SubscriptionItemActionCallback callback; - - public SubscriptionRecyclerViewAdapter(Context context, ArrayList subscriptions, SubscriptionItemActionCallback callback) { - this.context = context; - - this.subscriptions = subscriptions; - this.callback = callback; - - layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) { - View view = layoutInflater.inflate(R.layout.subscription_recycler_view_item_layout, parent, false); - view.setHasTransientState(true); - return new SubscriptionViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - ((SubscriptionViewHolder) holder).setData(position, subscriptions.get(position)); - } - - @Override - public int getItemCount() { - return subscriptions.size(); - } - - public class SubscriptionViewHolder extends RecyclerView.ViewHolder { - - private LinearLayout singleLinearLayout; - private TextView idTextView; - private TextView addressTitleTextView; - private TextView addressTextView; - - private ISubscription item; - - SubscriptionViewHolder(View itemView) { - super(itemView); - - singleLinearLayout = itemView.findViewById(R.id.subscription_recycler_view_item_linear_layout); - idTextView = itemView.findViewById(R.id.subscription_recycler_view_item_id_text_view); - addressTitleTextView = itemView.findViewById(R.id.subscription_recycler_view_item_address_title_text_view); - addressTextView = itemView.findViewById(R.id.subscription_recycler_view_item_address_text_view); - } - - private void setData(int position, ISubscription item) { - this.item = item; - populateInterfaceElements(position); - } - - private void populateInterfaceElements(final int position) { - idTextView.setText(item.getId()); - - if(item instanceof IEmailSubscription) { - addressTitleTextView.setText(R.string.email_colon); - addressTextView.setText(((IEmailSubscription) item).getEmail()); - } - else if(item instanceof ISmsSubscription) { - addressTitleTextView.setText(R.string.sms_colon); - addressTextView.setText(((ISmsSubscription) item).getNumber()); - } - - singleLinearLayout.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - callback.onLongClick(item); - return false; - } - }); - - } - - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java deleted file mode 100644 index df299d9e57..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.onesignal.sdktest.application; - -import android.annotation.SuppressLint; -import android.os.StrictMode; -import android.util.Log; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.multidex.MultiDexApplication; - -import com.onesignal.Continue; -import com.onesignal.OneSignal; -import com.onesignal.inAppMessages.IInAppMessageClickListener; -import com.onesignal.inAppMessages.IInAppMessageClickEvent; -import com.onesignal.inAppMessages.IInAppMessageDidDismissEvent; -import com.onesignal.inAppMessages.IInAppMessageDidDisplayEvent; -import com.onesignal.inAppMessages.IInAppMessageLifecycleListener; -import com.onesignal.debug.LogLevel; -import com.onesignal.inAppMessages.IInAppMessageWillDismissEvent; -import com.onesignal.inAppMessages.IInAppMessageWillDisplayEvent; -import com.onesignal.notifications.IDisplayableNotification; -import com.onesignal.notifications.INotificationLifecycleListener; -import com.onesignal.notifications.INotificationWillDisplayEvent; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.constant.Tag; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.notification.OneSignalNotificationSender; -import com.onesignal.sdktest.util.SharedPreferenceUtil; -import com.onesignal.user.state.IUserStateObserver; -import com.onesignal.user.state.UserChangedState; -import com.onesignal.user.state.UserState; -import org.json.JSONObject; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -/** - * This Java implementation is not used any more. Use {@link MainApplicationKT} instead. - * The Kotlin version provides better async handling and modern coroutines support. - * - */ -public class MainApplication extends MultiDexApplication { - private static final int SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION = 2000; - - public MainApplication() { - // run strict mode to surface any potential issues easier - StrictMode.enableDefaults(); - Log.w(Tag.LOG_TAG, "MainApplication (Java) is deprecated. Please use MainApplicationKT (Kotlin) instead."); - } - - @SuppressLint("NewApi") - @Override - public void onCreate() { - super.onCreate(); - Log.w(Tag.LOG_TAG, "DEPRECATED: Using MainApplication (Java). Please migrate to MainApplicationKT (Kotlin) for better async support."); - - OneSignal.getDebug().setLogLevel(LogLevel.DEBUG); - - // OneSignal Initialization - String appId = SharedPreferenceUtil.getOneSignalAppId(this); - // If cached app id is null use the default, otherwise use cached. - if (appId == null) { - appId = getString(R.string.onesignal_app_id); - SharedPreferenceUtil.cacheOneSignalAppId(this, appId); - } - - OneSignalNotificationSender.setAppId(appId); - - OneSignal.initWithContext(this, appId); - - // Ensure calling requestPermission in a thread right after initWithContext does not crash - // This will reproduce result similar to Kotlin CouroutineScope.launch{}, which may potentially crash the app - ExecutorService executor = Executors.newSingleThreadExecutor(); - @SuppressLint({"NewApi", "LocalSuppress"}) CompletableFuture future = CompletableFuture.runAsync(() -> { - OneSignal.getNotifications().requestPermission(true, Continue.none()); - }, executor); - future.join(); // Waits for the task to complete - executor.shutdown(); - - OneSignal.getInAppMessages().addLifecycleListener(new IInAppMessageLifecycleListener() { - @Override - public void onWillDisplay(@NonNull IInAppMessageWillDisplayEvent event) { - Log.v(Tag.LOG_TAG, "onWillDisplayInAppMessage"); - } - - @Override - public void onDidDisplay(@NonNull IInAppMessageDidDisplayEvent event) { - Log.v(Tag.LOG_TAG, "onDidDisplayInAppMessage"); - } - - @Override - public void onWillDismiss(@NonNull IInAppMessageWillDismissEvent event) { - Log.v(Tag.LOG_TAG, "onWillDismissInAppMessage"); - } - - @Override - public void onDidDismiss(@NonNull IInAppMessageDidDismissEvent event) { - Log.v(Tag.LOG_TAG, "onDidDismissInAppMessage"); - } - }); - - OneSignal.getInAppMessages().addClickListener(new IInAppMessageClickListener() { - @Override - public void onClick(@Nullable IInAppMessageClickEvent event) { - Log.v(Tag.LOG_TAG, "INotificationClickListener.inAppMessageClicked"); - } - }); - - OneSignal.getNotifications().addClickListener(event -> - { - Log.v(Tag.LOG_TAG, "INotificationClickListener.onClick fired" + - " with event: " + event); - }); - - OneSignal.getNotifications().addForegroundLifecycleListener(new INotificationLifecycleListener() { - @Override - public void onWillDisplay(@NonNull INotificationWillDisplayEvent event) { - Log.v(Tag.LOG_TAG, "INotificationLifecycleListener.onWillDisplay fired" + - " with event: " + event); - - IDisplayableNotification notification = event.getNotification(); - JSONObject data = notification.getAdditionalData(); - - //Prevent OneSignal from displaying the notification immediately on return. Spin - //up a new thread to mimic some asynchronous behavior, when the async behavior (which - //takes 2 seconds) completes, then the notification can be displayed. - event.preventDefault(); - Runnable r = () -> { - try { - Thread.sleep(SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION); - } catch (InterruptedException ignored) { - } - - notification.display(); - }; - - Thread t = new Thread(r); - t.start(); - } - }); - - OneSignal.getUser().addObserver(new IUserStateObserver() { - @Override - public void onUserStateChange(@NonNull UserChangedState state) { - UserState currentUserState = state.getCurrent(); - Log.v(Tag.LOG_TAG, "onUserStateChange fired " + currentUserState.toJSONObject()); - } - }); - - OneSignal.getInAppMessages().setPaused(true); - OneSignal.getLocation().setShared(false); - - Log.d(Tag.LOG_TAG, Text.ONESIGNAL_SDK_INIT); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplicationKT.kt b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplicationKT.kt deleted file mode 100644 index c9c61be6a5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplicationKT.kt +++ /dev/null @@ -1,157 +0,0 @@ -package com.onesignal.sdktest.application - -/** - * Modern Kotlin implementation of MainApplication. - * - * This replaces the deprecated MainApplication.java with: - * - Better async handling using Kotlin Coroutines - * - Modern OneSignal API usage - * - Cleaner code structure - * - Proper ANR prevention - * - * @see MainApplication.java (deprecated Java version) - */ -import android.annotation.SuppressLint -import android.os.StrictMode -import android.util.Log -import androidx.annotation.NonNull -import androidx.multidex.MultiDexApplication -import com.onesignal.OneSignal -import com.onesignal.debug.LogLevel -import com.onesignal.inAppMessages.IInAppMessageClickEvent -import com.onesignal.inAppMessages.IInAppMessageClickListener -import com.onesignal.inAppMessages.IInAppMessageDidDismissEvent -import com.onesignal.inAppMessages.IInAppMessageDidDisplayEvent -import com.onesignal.inAppMessages.IInAppMessageLifecycleListener -import com.onesignal.inAppMessages.IInAppMessageWillDismissEvent -import com.onesignal.inAppMessages.IInAppMessageWillDisplayEvent -import com.onesignal.notifications.IDisplayableNotification -import com.onesignal.notifications.INotificationClickEvent -import com.onesignal.notifications.INotificationClickListener -import com.onesignal.notifications.INotificationLifecycleListener -import com.onesignal.notifications.INotificationWillDisplayEvent -import com.onesignal.sdktest.R -import com.onesignal.sdktest.constant.Tag -import com.onesignal.sdktest.constant.Text -import com.onesignal.sdktest.notification.OneSignalNotificationSender -import com.onesignal.sdktest.util.SharedPreferenceUtil -import com.onesignal.user.state.IUserStateObserver -import com.onesignal.user.state.UserChangedState -import com.onesignal.user.state.UserState -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.launch - -class MainApplicationKT : MultiDexApplication() { - - private val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) - - init { - // run strict mode to surface any potential issues easier - StrictMode.enableDefaults() - } - - @SuppressLint("NewApi") - override fun onCreate() { - super.onCreate() - OneSignal.Debug.logLevel = LogLevel.DEBUG - - // OneSignal Initialization - var appId = SharedPreferenceUtil.getOneSignalAppId(this) - // If cached app id is null use the default, otherwise use cached. - if (appId == null) { - appId = getString(R.string.onesignal_app_id) - SharedPreferenceUtil.cacheOneSignalAppId(this, appId) - } - - OneSignalNotificationSender.setAppId(appId) - - // Initialize OneSignal asynchronously on background thread to avoid ANR - applicationScope.launch { - OneSignal.initWithContextSuspend(this@MainApplicationKT, appId) - Log.d(Tag.LOG_TAG, "OneSignal async init completed") - - // Set up all OneSignal listeners after successful async initialization - setupOneSignalListeners() - - // Request permission - this will internally switch to Main thread for UI operations - // Even though the MainActivity comes on top of this, we can still request permission by tapping the prompt push button. - OneSignal.Notifications.requestPermission(true) - - Log.d(Tag.LOG_TAG, Text.ONESIGNAL_SDK_INIT) - } - } - - private fun setupOneSignalListeners() { - OneSignal.InAppMessages.addLifecycleListener(object : IInAppMessageLifecycleListener { - override fun onWillDisplay(@NonNull event: IInAppMessageWillDisplayEvent) { - Log.v(Tag.LOG_TAG, "onWillDisplayInAppMessage") - } - - override fun onDidDisplay(@NonNull event: IInAppMessageDidDisplayEvent) { - Log.v(Tag.LOG_TAG, "onDidDisplayInAppMessage") - } - - override fun onWillDismiss(@NonNull event: IInAppMessageWillDismissEvent) { - Log.v(Tag.LOG_TAG, "onWillDismissInAppMessage") - } - - override fun onDidDismiss(@NonNull event: IInAppMessageDidDismissEvent) { - Log.v(Tag.LOG_TAG, "onDidDismissInAppMessage") - } - }) - - OneSignal.InAppMessages.addClickListener(object : IInAppMessageClickListener { - override fun onClick(event: IInAppMessageClickEvent) { - Log.v(Tag.LOG_TAG, "INotificationClickListener.inAppMessageClicked") - } - }) - - OneSignal.Notifications.addClickListener(object : INotificationClickListener { - override fun onClick(event: INotificationClickEvent) { - Log.v(Tag.LOG_TAG, "INotificationClickListener.onClick fired" + - " with event: " + event) - } - }) - - OneSignal.Notifications.addForegroundLifecycleListener(object : INotificationLifecycleListener { - override fun onWillDisplay(@NonNull event: INotificationWillDisplayEvent) { - Log.v(Tag.LOG_TAG, "INotificationLifecycleListener.onWillDisplay fired" + - " with event: " + event) - - val notification: IDisplayableNotification = event.notification - - //Prevent OneSignal from displaying the notification immediately on return. Spin - //up a new thread to mimic some asynchronous behavior, when the async behavior (which - //takes 2 seconds) completes, then the notification can be displayed. - event.preventDefault() - val r = Runnable { - try { - Thread.sleep(SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION.toLong()) - } catch (ignored: InterruptedException) { - } - - notification.display() - } - - val t = Thread(r) - t.start() - } - }) - - OneSignal.User.addObserver(object : IUserStateObserver { - override fun onUserStateChange(@NonNull state: UserChangedState) { - val currentUserState: UserState = state.current - Log.v(Tag.LOG_TAG, "onUserStateChange fired " + currentUserState.toJSONObject()) - } - }) - - OneSignal.InAppMessages.paused = true - OneSignal.Location.isShared = false - } - - companion object { - private const val SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION = 2000 - } -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/AddPairAlertDialogCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/AddPairAlertDialogCallback.java deleted file mode 100644 index cb836c7bcc..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/AddPairAlertDialogCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.onesignal.sdktest.callback; - -import android.util.Pair; - -public interface AddPairAlertDialogCallback { - - void onSuccess(Pair pair); - void onFailure(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/EnumSelectionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/EnumSelectionCallback.java deleted file mode 100644 index c65dc236d1..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/EnumSelectionCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface EnumSelectionCallback { - - void onSelection(String title); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/PairItemActionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/PairItemActionCallback.java deleted file mode 100644 index 57a9aacb51..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/PairItemActionCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface PairItemActionCallback { - - void onLongClick(String key); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SendOutcomeAlertDialogCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SendOutcomeAlertDialogCallback.java deleted file mode 100644 index e66ef198e7..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SendOutcomeAlertDialogCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.onesignal.sdktest.callback; - -import com.onesignal.sdktest.type.OutcomeEvent; - -public interface SendOutcomeAlertDialogCallback { - - boolean onSuccess(OutcomeEvent outcomeEvent, String name, String value); - void onFailure(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SingleItemActionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SingleItemActionCallback.java deleted file mode 100644 index ea38662efc..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SingleItemActionCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface SingleItemActionCallback { - - void onLongClick(String value); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SubscriptionItemActionCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SubscriptionItemActionCallback.java deleted file mode 100644 index 579faaa25b..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SubscriptionItemActionCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.onesignal.sdktest.callback; - -import com.onesignal.user.subscriptions.ISubscription; - -public interface SubscriptionItemActionCallback { - - void onLongClick(ISubscription value); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/UpdateAlertDialogCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/UpdateAlertDialogCallback.java deleted file mode 100644 index e48c58618c..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/UpdateAlertDialogCallback.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.onesignal.sdktest.callback; - -public interface UpdateAlertDialogCallback { - - void onSuccess(String update); - void onFailure(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Tag.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Tag.java deleted file mode 100644 index 927df53e4f..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Tag.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.onesignal.sdktest.constant; - -public class Tag { - public static final String LOG_TAG = "sdktest"; -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java deleted file mode 100644 index b3e7344f7d..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.onesignal.sdktest.constant; - -public class Text { - - public static final String EMPTY = ""; - - public static final String ONESIGNAL_SDK_INIT = "OneSignal SDK initialized"; - public static final String PRIVACY_CONSENT_REQUIRED_SET = "Privacy consent required set"; - - public static final String APP_ID_IS_REQUIRED = "App id is required"; - public static final String INVALID_APP_ID = "Invalid app id"; - - public static final String ALIAS_LABEL_IS_REQUIRED = "Alias label is required"; - - public static final String EMAIL_IS_REQUIRED = "Email is required"; - public static final String INVALID_EMAIL = "Invalid email"; - - public static final String SMS_IS_REQUIRED = "SMS number is required"; - - public static final String EXTERNAL_USER_ID_IS_REQUIRED = "External user id is required"; - - public static final String KEY_IS_REQUIRED = "Key is required"; - - public static final String ERROR = "Error"; - - public static final String BUTTON_ADD = "ADD"; - public static final String BUTTON_SEND = "SEND"; - public static final String BUTTON_UPDATE = "UPDATE"; - public static final String BUTTON_LOGIN = "LOGIN"; - - public static final String BUTTON_CANCEL = "CANCEL"; -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/ActivityViewModel.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/ActivityViewModel.java deleted file mode 100644 index 8aeb6fcbd3..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/ActivityViewModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.onesignal.sdktest.model; - -import android.app.Activity; -import android.content.Context; -import androidx.appcompat.app.AppCompatActivity; - -import com.onesignal.notifications.IPermissionObserver; - -/** - * This is the interface created with a few generic methods for setting a ViewModel - * as the responsible guardian of an Activity - */ -public interface ActivityViewModel extends IPermissionObserver { - - /** - * Casts Context of the given Activity to an Activity object - * @return - Activity used to get to specific methods to the Activity - */ - Activity getActivity(); - - /** - * Casts Context of the given Activity to an AppCompatActivity object - * @return - AppCompatActivity used to get to specific methods to the Activity - */ - AppCompatActivity getAppCompatActivity(); - - /** - * Context is passed in and used to define all of the ui elements across the activity - * and initialize any other objects that may be used through out the activity - * @param context - Context context of the given Activity being setup - * @return - ViewModel implementing the ActivityViewModel - */ - ActivityViewModel onActivityCreated(Context context); - - /** - * This method is for calling any setup methods and applying any fonts - * Called at the end of onCreate strung after onActivityCreated is called - * @return - ViewModel implementing the ActivityViewModel - */ - ActivityViewModel setupInterfaceElements(); - - /** - * Some Activities use a Toolbar and this is a generic method for setting it, design it, and controlling it - * If it is not used, it will be left empty - */ - void setupToolbar(); - - /** - * Methods for handling network connected and disconnected states - */ - void networkConnected(); - void networkDisconnected(); - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java deleted file mode 100644 index c88c630dc6..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java +++ /dev/null @@ -1,937 +0,0 @@ -package com.onesignal.sdktest.model; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Context; -import com.google.android.material.appbar.AppBarLayout; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.core.widget.NestedScrollView; -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.appcompat.widget.Toolbar; -import android.content.Intent; -import android.os.Build; -import android.util.Pair; -import android.view.View; -import android.view.ViewTreeObserver; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.Switch; -import android.widget.TextView; -import com.onesignal.Continue; -import com.onesignal.OneSignal; -import com.onesignal.sdktest.adapter.SubscriptionRecyclerViewAdapter; -import com.onesignal.user.subscriptions.IPushSubscription; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.activity.SecondaryActivity; -import com.onesignal.sdktest.adapter.InAppMessageRecyclerViewAdapter; -import com.onesignal.sdktest.adapter.NotificationRecyclerViewAdapter; -import com.onesignal.sdktest.adapter.PairRecyclerViewAdapter; -import com.onesignal.sdktest.callback.AddPairAlertDialogCallback; -import com.onesignal.sdktest.callback.PairItemActionCallback; -import com.onesignal.sdktest.callback.SendOutcomeAlertDialogCallback; -import com.onesignal.sdktest.callback.UpdateAlertDialogCallback; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.type.InAppMessage; -import com.onesignal.sdktest.type.Notification; -import com.onesignal.sdktest.type.OutcomeEvent; -import com.onesignal.sdktest.type.ToastType; -import com.onesignal.sdktest.ui.RecyclerViewBuilder; -import com.onesignal.sdktest.util.Animate; -import com.onesignal.sdktest.util.Dialog; -import com.onesignal.sdktest.util.Font; -import com.onesignal.sdktest.util.IntentTo; -import com.onesignal.sdktest.util.SharedPreferenceUtil; -import com.onesignal.sdktest.util.ProfileUtil; -import com.onesignal.sdktest.util.Toaster; -import com.onesignal.user.subscriptions.ISubscription; -import com.onesignal.user.subscriptions.IPushSubscriptionObserver; -import com.onesignal.user.subscriptions.PushSubscriptionChangedState; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -@RequiresApi(api = Build.VERSION_CODES.N) -public class MainActivityViewModel implements ActivityViewModel, IPushSubscriptionObserver { - - private Animate animate; - private Dialog dialog; - private Font font; - private IntentTo intentTo; - private RecyclerViewBuilder recyclerViewBuilder; - private Toaster toaster; - - private AppBarLayout appBarLayout; - private Toolbar toolbar; - private LinearLayout privacyConsentLinearLayout; - private NestedScrollView nestedScrollView; - - // Privacy Consent - private TextView privacyConsentTitleTextView; - private TextView privacyConsentDescriptionTextView; - private Button privacyConsentAllowButton; - - // App - private TextView appTitleTextView; - private RelativeLayout appIdRelativeLayout; - private TextView appIdTitleTextView; - private TextView appIdTextView; - private Button loginUserButton; - private Button logoutUserButton; - - // Alias - private TextView aliasTitleTextView; - private RecyclerView aliasesRecyclerView; - private PairRecyclerViewAdapter aliasesRecyclerViewAdapter; - private TextView noAliasesTextView; - private Button addAliasButton; - - // Email - private TextView emailHeaderTextView; - private TextView noEmailsTextView; - private Button addEmailButton; - - // SMS - private TextView smsHeaderTextView; - private TextView noSmssTextView; - private Button addSMSButton; - - // Tags - private TextView tagsTitleTextView; - private TextView noTagsTextView; - private RecyclerView tagsRecyclerView; - private PairRecyclerViewAdapter tagPairRecyclerViewAdapter; - - private RecyclerView emailsRecyclerView; - private SubscriptionRecyclerViewAdapter emailsRecyclerViewAdapter; - private RecyclerView smssRecyclerView; - private SubscriptionRecyclerViewAdapter smssRecyclerViewAdapter; - - private Button addTagButton; - - // Notification Demo - private TextView pushNotificationTitleTextView; - private TextView sendPushNotificationTitleTextView; - private RecyclerView pushNotificationRecyclerView; - private NotificationRecyclerViewAdapter pushNotificationRecyclerViewAdapter; - - // Outcomes - private TextView outcomeTitleTextView; - private Button sendOutcomeButton; - - // Triggers - private TextView triggersTitleTextView; - private TextView noTriggersTextView; - private RecyclerView triggersRecyclerView; - private PairRecyclerViewAdapter triggerPairRecyclerViewAdapter; - private Button addTriggerButton; - - // In App Messaging Demo - private TextView inAppMessagingTitleTextView; - private TextView sendInAppMessagingTitleTextView; - private RecyclerView inAppMessagingRecyclerView; - private InAppMessageRecyclerViewAdapter inAppMessagingRecyclerViewAdapter; - - // Location - private TextView locationTitleTextView; - private RelativeLayout locationSharedRelativeLayout; - private TextView locationSharedTextView; - private TextView locationSharedDescriptionTextView; - private Switch locationSharedSwitch; - private Button promptLocationButton; - - // Push - private TextView pushSubscriptionIdTitleTextView; - private TextView pushSubscriptionIdTextView; - private RelativeLayout pushSubscriptionEnabledRelativeLayout; - private TextView pushSubscriptionEnabledTitleTextView; - private Switch pushSubscriptionEnabledSwitch; - private LinearLayout promptPushBottonLayout; - private Button promptPushButton; - private RelativeLayout pauseInAppMessagesRelativeLayout; - private TextView pauseInAppMessagesTextView; - private TextView pauseInAppMessagesDescriptionTextView; - private Switch pauseInAppMessagesSwitch; - private Button revokeConsentButton; - - private boolean shouldScrollTop = false; - - private Context context; - - private HashMap aliasSet; - private ArrayList aliasArrayList; - private ArrayList emailArrayList; - private ArrayList smsArrayList; - - private HashMap tagSet; - private ArrayList tagArrayList; - - private HashMap triggerSet; - private ArrayList triggerArrayList; - - @Override - public Activity getActivity() { - return (Activity) context; - } - - @Override - public AppCompatActivity getAppCompatActivity() { - return (AppCompatActivity) context; - } - - @Override - public ActivityViewModel onActivityCreated(Context context) { - this.context = context; - - animate = new Animate(); - dialog = new Dialog(context); - font = new Font(context); - intentTo = new IntentTo(context); - recyclerViewBuilder = new RecyclerViewBuilder(context); - toaster = new Toaster(context); - - appBarLayout = getActivity().findViewById(R.id.main_activity_app_bar_layout); - toolbar = getActivity().findViewById(R.id.main_activity_toolbar); - privacyConsentLinearLayout = getActivity().findViewById(R.id.main_activity_privacy_consent_linear_layout); - nestedScrollView = getActivity().findViewById(R.id.main_activity_nested_scroll_view); - - privacyConsentTitleTextView = getActivity().findViewById(R.id.main_activity_privacy_consent_title_text_view); - privacyConsentDescriptionTextView = getActivity().findViewById(R.id.main_activity_privacy_consent_description_text_view); - privacyConsentAllowButton = getActivity().findViewById(R.id.main_activity_privacy_consent_allow_button); - - appTitleTextView = getActivity().findViewById(R.id.main_activity_account_title_text_view); - appIdRelativeLayout = getActivity().findViewById(R.id.main_activity_account_details_app_id_relative_layout); - appIdTitleTextView = getActivity().findViewById(R.id.main_activity_account_details_app_id_title_text_view); - appIdTextView = getActivity().findViewById(R.id.main_activity_account_details_app_id_text_view); - revokeConsentButton = getActivity().findViewById(R.id.main_activity_app_revoke_consent_button); - loginUserButton = getActivity().findViewById(R.id.main_activity_login_user_button); - logoutUserButton = getActivity().findViewById(R.id.main_activity_logout_user_button); - - aliasTitleTextView = getActivity().findViewById(R.id.main_activity_aliases_title_text_view); - noAliasesTextView = getActivity().findViewById(R.id.main_activity_aliases_no_aliases_text_view); - addAliasButton = getActivity().findViewById(R.id.main_activity_add_alias_button); - aliasesRecyclerView = getActivity().findViewById(R.id.main_activity_aliases_recycler_view); - - emailHeaderTextView = getActivity().findViewById(R.id.main_activity_email_title_text_view); - noEmailsTextView = getActivity().findViewById(R.id.main_activity_emails_no_emails_text_view); - addEmailButton = getActivity().findViewById(R.id.main_activity_add_email_button); - emailsRecyclerView = getActivity().findViewById(R.id.main_activity_emails_recycler_view); - - smsHeaderTextView = getActivity().findViewById(R.id.main_activity_sms_title_text_view); - noSmssTextView = getActivity().findViewById(R.id.main_activity_smss_no_smss_text_view); - addSMSButton = getActivity().findViewById(R.id.main_activity_add_sms_button); - smssRecyclerView = getActivity().findViewById(R.id.main_activity_smss_recycler_view); - - tagsTitleTextView = getActivity().findViewById(R.id.main_activity_tags_title_text_view); - noTagsTextView = getActivity().findViewById(R.id.main_activity_tags_no_tags_text_view); - tagsRecyclerView = getActivity().findViewById(R.id.main_activity_tags_recycler_view); - addTagButton = getActivity().findViewById(R.id.main_activity_add_tags_button); - - pushNotificationTitleTextView = getActivity().findViewById(R.id.main_activity_push_notification_title_text_view); - sendPushNotificationTitleTextView= getActivity().findViewById(R.id.main_activity_send_push_notification_title_text_view); - pushNotificationRecyclerView = getActivity().findViewById(R.id.main_activity_push_notification_recycler_view); - - outcomeTitleTextView = getActivity().findViewById(R.id.main_activity_outcomes_title_text_view); - sendOutcomeButton = getActivity().findViewById(R.id.main_activity_outcomes_send_outcome_button); - - triggersTitleTextView = getActivity().findViewById(R.id.main_activity_in_app_messages_triggers_title_text_view); - noTriggersTextView = getActivity().findViewById(R.id.main_activity_in_app_messages_triggers_no_triggers_text_view); - triggersRecyclerView = getActivity().findViewById(R.id.main_activity_in_app_messages_triggers_recycler_view); - addTriggerButton = getActivity().findViewById(R.id.main_activity_add_triggers_button); - - inAppMessagingTitleTextView = getActivity().findViewById(R.id.main_activity_in_app_messaging_title_text_view); - sendInAppMessagingTitleTextView = getActivity().findViewById(R.id.main_activity_send_in_app_messaging_title_text_view); - inAppMessagingRecyclerView = getActivity().findViewById(R.id.main_activity_in_app_messaging_recycler_view); - - locationTitleTextView = getActivity().findViewById(R.id.main_activity_location_title_text_view); - locationSharedRelativeLayout = getActivity().findViewById(R.id.main_activity_location_shared_relative_layout); - locationSharedTextView = getActivity().findViewById(R.id.main_activity_location_shared_text_view); - locationSharedDescriptionTextView = getActivity().findViewById(R.id.main_activity_location_shared_info_text_view); - locationSharedSwitch = getActivity().findViewById(R.id.main_activity_location_shared_switch); - promptLocationButton = getActivity().findViewById(R.id.main_activity_location_prompt_location_button); - - pushSubscriptionEnabledRelativeLayout = getActivity().findViewById(R.id.main_activity_push_subscription_relative_layout); - pushSubscriptionEnabledTitleTextView = getActivity().findViewById(R.id.main_activity_push_subscription_info_text_view); - pushSubscriptionIdTitleTextView = getActivity().findViewById(R.id.main_activity_push_subscription_id_title_text_view); - pushSubscriptionIdTextView = getActivity().findViewById(R.id.main_activity_push_subscription_id_text_view); - pushSubscriptionEnabledSwitch = getActivity().findViewById(R.id.main_activity_push_subscription_switch); - - promptPushBottonLayout = getActivity().findViewById(R.id.main_activity_push_prompt_layout); - promptPushButton = getActivity().findViewById(R.id.main_activity_push_prompt_push_button); - - pauseInAppMessagesRelativeLayout = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_relative_layout); - pauseInAppMessagesTextView = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_text_view); - pauseInAppMessagesDescriptionTextView = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_info_text_view); - pauseInAppMessagesSwitch = getActivity().findViewById(R.id.main_activity_iam_pause_in_app_messages_switch); - - Button navigateNextActivity = getActivity().findViewById(R.id.main_activity_navigate_button); - navigateNextActivity.setOnClickListener(v -> { - getActivity().startActivity(new Intent(getActivity(), SecondaryActivity.class)); - }); - - aliasSet = new HashMap<>(); - aliasArrayList = new ArrayList<>(); - - emailArrayList = new ArrayList<>(); - smsArrayList = new ArrayList<>(); - - tagSet = new HashMap<>(); - tagArrayList = new ArrayList<>(); - - triggerSet = new HashMap<>(); - triggerArrayList = new ArrayList<>(); - - OneSignal.getUser().getPushSubscription().addObserver(this); - return this; - } - - @Override - public ActivityViewModel setupInterfaceElements() { - font.applyFont(appTitleTextView, font.saralaBold); - font.applyFont(privacyConsentTitleTextView, font.saralaBold); - font.applyFont(privacyConsentDescriptionTextView, font.saralaRegular); - font.applyFont(privacyConsentAllowButton, font.saralaBold); - font.applyFont(appIdTitleTextView, font.saralaBold); - font.applyFont(appIdTextView, font.saralaRegular); - font.applyFont(loginUserButton, font.saralaBold); - font.applyFont(logoutUserButton, font.saralaBold); - font.applyFont(aliasTitleTextView, font.saralaBold); - font.applyFont(noAliasesTextView, font.saralaBold); - font.applyFont(emailHeaderTextView, font.saralaBold); - font.applyFont(noEmailsTextView, font.saralaBold); - font.applyFont(smsHeaderTextView, font.saralaBold); - font.applyFont(noSmssTextView, font.saralaBold); - font.applyFont(tagsTitleTextView, font.saralaBold); - font.applyFont(noTagsTextView, font.saralaBold); - font.applyFont(addTagButton, font.saralaBold); - font.applyFont(pushNotificationTitleTextView, font.saralaBold); - font.applyFont(sendPushNotificationTitleTextView, font.saralaBold); - font.applyFont(outcomeTitleTextView, font.saralaBold); - font.applyFont(sendOutcomeButton, font.saralaBold); - font.applyFont(triggersTitleTextView, font.saralaBold); - font.applyFont(noTriggersTextView, font.saralaBold); - font.applyFont(addTriggerButton, font.saralaBold); - font.applyFont(inAppMessagingTitleTextView, font.saralaBold); - font.applyFont(sendInAppMessagingTitleTextView, font.saralaBold); - font.applyFont(locationTitleTextView, font.saralaBold); - font.applyFont(locationSharedTextView, font.saralaBold); - font.applyFont(locationSharedDescriptionTextView, font.saralaRegular); - font.applyFont(promptLocationButton, font.saralaBold); - font.applyFont(promptPushButton, font.saralaBold); - font.applyFont(pushSubscriptionEnabledTitleTextView, font.saralaBold); - font.applyFont(pushSubscriptionIdTitleTextView, font.saralaBold); - font.applyFont(pauseInAppMessagesTextView, font.saralaBold); - font.applyFont(pauseInAppMessagesDescriptionTextView, font.saralaRegular); - font.applyFont(revokeConsentButton, font.saralaBold); - - boolean hasConsent = SharedPreferenceUtil.getUserPrivacyConsent(context); - setupConsentLayout(hasConsent); - - if (hasConsent) - postPrivacyConsentSetup(); - - return this; - } - - @Override - public void setupToolbar() { - toolbar.setTitle(Text.EMPTY); - getAppCompatActivity().setSupportActionBar(toolbar); - } - - @Override - public void networkConnected() { - - } - - @Override - public void networkDisconnected() { - - } - - @Override - public void onNotificationPermissionChange(@Nullable boolean permission) { - refreshSubscriptionState(); - } - - private void setupConsentLayout(boolean hasConsent) { - int consentVisibility = hasConsent ? View.GONE : View.VISIBLE; - int scrollVisibility = hasConsent ? View.VISIBLE : View.GONE; - privacyConsentLinearLayout.setVisibility(consentVisibility); - nestedScrollView.setVisibility(scrollVisibility); - appBarLayout.setExpanded(true); - - privacyConsentAllowButton.setOnClickListener(v -> { - togglePrivacyConsent(true); - postPrivacyConsentSetup(); - }); - } - - private void postPrivacyConsentSetup() { - setupLayout(); - refreshState(); - } - - public void setupLayout() { - setupScrollView(); - setupAppLayout(); - setupUserLayout(); - setupLocationLayout(); - setupPushNotificationLayout(); - setupInAppMessagingLayout(); - } - - private void setupScrollView() { - nestedScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { - @Override - public void onScrollChanged() { - int scrollY = nestedScrollView.getScrollY(); - shouldScrollTop = scrollY != 0; - } - }); - } - - private void setupAppLayout() { - revokeConsentButton.setOnClickListener(v -> togglePrivacyConsent(false)); - - loginUserButton.setOnClickListener(v -> { - dialog.createUpdateAlertDialog("", Dialog.DialogAction.LOGIN, ProfileUtil.FieldType.EXTERNAL_USER_ID, new UpdateAlertDialogCallback() { - @Override - public void onSuccess(String update) { - if (update != null && !update.isEmpty()) { - OneSignal.login(update); - refreshState(); - } - } - - @Override - public void onFailure() { - - } - }); - }); - - logoutUserButton.setOnClickListener(v -> { - OneSignal.logout(); - refreshState(); - }); - } - - private void setupUserLayout() { - setupAliasLayout(); - setupEmailLayout(); - setupSMSLayout(); - setupTagsLayout(); - setupOutcomeLayout(); - setupTriggersLayout(); - } - - private void setupAliasLayout() { - setupAliasesRecyclerView(); - addAliasButton.setOnClickListener(v -> dialog.createAddPairAlertDialog("Add Alias", ProfileUtil.FieldType.ALIAS, new AddPairAlertDialogCallback() { - @Override - public void onSuccess(Pair pair) { - if (pair.second == null || pair.second.toString().isEmpty()) { - OneSignal.getUser().removeAlias(pair.first); - aliasSet.remove(pair.first); - toaster.makeCustomViewToast("Deleted alias " + pair.first, ToastType.SUCCESS); - } else { - OneSignal.getUser().addAlias(pair.first, pair.second.toString()); - aliasSet.put(pair.first, pair.second); - toaster.makeCustomViewToast("Added alias " + pair.first, ToastType.SUCCESS); - } - - refreshAliasRecyclerView(); - } - - @Override - public void onFailure() { - refreshAliasRecyclerView(); - } - })); - } - - private void setupAliasesRecyclerView() { - recyclerViewBuilder.setupRecyclerView(aliasesRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - aliasesRecyclerView.setLayoutManager(linearLayoutManager); - aliasesRecyclerViewAdapter = new PairRecyclerViewAdapter(context, aliasArrayList, new PairItemActionCallback() { - @Override - public void onLongClick(String key) { - OneSignal.getUser().removeAlias(key); - aliasSet.remove(key); - refreshAliasRecyclerView(); - toaster.makeCustomViewToast("Deleted alias " + key, ToastType.SUCCESS); - } - }); - aliasesRecyclerView.setAdapter(aliasesRecyclerViewAdapter); - } - - private void refreshAliasRecyclerView() { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - aliasArrayList.clear(); - aliasArrayList.addAll(aliasSet.entrySet()); - - if (aliasArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, aliasesRecyclerView, noAliasesTextView); - } else { - animate.toggleAnimationView(true, View.GONE, aliasesRecyclerView, noAliasesTextView); - } - - aliasesRecyclerViewAdapter.notifyDataSetChanged(); - } - }); - } - - @Override - public void onPushSubscriptionChange(@NonNull PushSubscriptionChangedState state) { - refreshSubscriptionState(); - } - - private class DummySubscription implements ISubscription { - - private String _id; - public DummySubscription(String id) { - _id = id; - } - - @NonNull - @Override - public String getId() { - return _id; - } - } - - private void setupEmailLayout() { - setupEmailRecyclerView(); - - MainActivityViewModel self = this; - addEmailButton.setOnClickListener(v -> dialog.createUpdateAlertDialog("", Dialog.DialogAction.ADD, ProfileUtil.FieldType.EMAIL, new UpdateAlertDialogCallback() { - @Override - public void onSuccess(String value) { - if (value != null && !value.isEmpty()) { - OneSignal.getUser().addEmail(value); - emailArrayList.add(new DummySubscription(value)); - toaster.makeCustomViewToast("Added email " + value, ToastType.SUCCESS); - } - - refreshEmailRecyclerView(); - } - - @Override - public void onFailure() { - refreshEmailRecyclerView(); - } - })); - } - - private void setupSMSLayout() { - setupSMSRecyclerView(); - - MainActivityViewModel self = this; - addSMSButton.setOnClickListener(v -> dialog.createUpdateAlertDialog("", Dialog.DialogAction.ADD, ProfileUtil.FieldType.SMS, new UpdateAlertDialogCallback() { - @Override - public void onSuccess(String value) { - if (value != null && !value.isEmpty()) { - OneSignal.getUser().addSms(value); - smsArrayList.add(new DummySubscription(value)); - toaster.makeCustomViewToast("Added SMS " + value, ToastType.SUCCESS); - } - - refreshSMSRecyclerView(); - } - - @Override - public void onFailure() { - refreshSMSRecyclerView(); - } - })); - } - - private void setupTagsLayout() { - setupTagRecyclerView(); - - addTagButton.setOnClickListener(v -> dialog.createAddPairAlertDialog("Add Tag", ProfileUtil.FieldType.TAG, new AddPairAlertDialogCallback() { - @Override - public void onSuccess(Pair pair) { - if (pair.second == null || pair.second.toString().isEmpty()) { - OneSignal.getUser().removeTag(pair.first); - tagSet.remove(pair.first); - toaster.makeCustomViewToast("Deleted tag " + pair.first, ToastType.SUCCESS); - } else { - OneSignal.getUser().addTag(pair.first, pair.second.toString()); - tagSet.put(pair.first, pair.second); - toaster.makeCustomViewToast("Added tag " + pair.first, ToastType.SUCCESS); - } - - refreshTagRecyclerView(); - } - - @Override - public void onFailure() { - refreshTagRecyclerView(); - } - })); - } - - private void setupTagRecyclerView() { - recyclerViewBuilder.setupRecyclerView(tagsRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - tagsRecyclerView.setLayoutManager(linearLayoutManager); - tagPairRecyclerViewAdapter = new PairRecyclerViewAdapter(context, tagArrayList, new PairItemActionCallback() { - @Override - public void onLongClick(String key) { - OneSignal.getUser().removeTag(key); - tagSet.remove(key); - refreshTagRecyclerView(); - toaster.makeCustomViewToast("Deleted tag " + key, ToastType.SUCCESS); - } - }); - tagsRecyclerView.setAdapter(tagPairRecyclerViewAdapter); - } - - private void refreshTagRecyclerView() { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - tagArrayList.clear(); - tagArrayList.addAll(tagSet.entrySet()); - - if (tagArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, tagsRecyclerView, noTagsTextView); - } else { - animate.toggleAnimationView(true, View.GONE, tagsRecyclerView, noTagsTextView); - } - - tagPairRecyclerViewAdapter.notifyDataSetChanged(); - } - }); - } - - private void setupEmailRecyclerView() { - recyclerViewBuilder.setupRecyclerView(emailsRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - emailsRecyclerView.setLayoutManager(linearLayoutManager); - emailsRecyclerViewAdapter = new SubscriptionRecyclerViewAdapter(context, emailArrayList, value -> { - String email = ((DummySubscription)value).getId(); - OneSignal.getUser().removeEmail(email); - emailArrayList.remove(value); - refreshEmailRecyclerView(); - toaster.makeCustomViewToast("Deleted email " + email, ToastType.SUCCESS); - }); - emailsRecyclerView.setAdapter(emailsRecyclerViewAdapter); - } - - private void refreshEmailRecyclerView() { - getActivity().runOnUiThread(() -> { - if (emailArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, emailsRecyclerView, noEmailsTextView); - } else { - animate.toggleAnimationView(true, View.GONE, emailsRecyclerView, noEmailsTextView); - } - - emailsRecyclerViewAdapter.notifyDataSetChanged(); - }); - } - - private void setupSMSRecyclerView() { - recyclerViewBuilder.setupRecyclerView(smssRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - smssRecyclerView.setLayoutManager(linearLayoutManager); - smssRecyclerViewAdapter = new SubscriptionRecyclerViewAdapter(context, smsArrayList, value -> { - String number = ((DummySubscription)value).getId(); - OneSignal.getUser().removeSms(number); - smsArrayList.remove(value); - refreshSMSRecyclerView(); - toaster.makeCustomViewToast("Deleted SMS " + number, ToastType.SUCCESS); - }); - smssRecyclerView.setAdapter(smssRecyclerViewAdapter); - } - - private void refreshSMSRecyclerView() { - getActivity().runOnUiThread(() -> { - if (smsArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, smssRecyclerView, noSmssTextView); - } else { - animate.toggleAnimationView(true, View.GONE, smssRecyclerView, noSmssTextView); - } - - smssRecyclerViewAdapter.notifyDataSetChanged(); - }); - } - - private void setupOutcomeLayout() { - sendOutcomeButton.setOnClickListener(v -> dialog.createSendOutcomeAlertDialog("Select an Outcome Type...", new SendOutcomeAlertDialogCallback() { - @Override - public boolean onSuccess(OutcomeEvent outcomeEvent, String name, String value) { - switch (outcomeEvent) { - case OUTCOME: - OneSignal.getSession().addOutcome(name); - break; - case UNIQUE_OUTCOME: - OneSignal.getSession().addUniqueOutcome(name); - break; - case OUTCOME_WITH_VALUE: - if (value.isEmpty()) { - toaster.makeCustomViewToast("Please enter an outcome value!", ToastType.ERROR); - return false; - } - - OneSignal.getSession().addOutcomeWithValue(name, Float.parseFloat(value)); - break; - } - - return true; - } - - @Override - public void onFailure() { - - } - })); - } - - private void setupTriggersLayout() { - animate.toggleAnimationView(true, View.GONE, triggersRecyclerView, noTriggersTextView); - - setupTriggerRecyclerView(); - addTriggerButton.setOnClickListener(v -> dialog.createAddPairAlertDialog("Add Trigger", ProfileUtil.FieldType.TRIGGER, new AddPairAlertDialogCallback() { - @Override - public void onSuccess(Pair pair) { - if (pair.second == null || pair.second.toString().isEmpty()) { - OneSignal.getInAppMessages().removeTrigger(pair.first); - triggerSet.remove(pair.first); - toaster.makeCustomViewToast("Deleted trigger " + pair.first, ToastType.SUCCESS); - } else { - OneSignal.getInAppMessages().addTrigger(pair.first, pair.second.toString()); - triggerSet.put(pair.first, pair.second); - toaster.makeCustomViewToast("Added trigger " + pair.first, ToastType.SUCCESS); - } - - refreshTriggerRecyclerView(); - } - - @Override - public void onFailure() { - refreshTriggerRecyclerView(); - } - })); - } - - private void setupTriggerRecyclerView() { - recyclerViewBuilder.setupRecyclerView(triggersRecyclerView, 20, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - triggersRecyclerView.setLayoutManager(linearLayoutManager); - triggerPairRecyclerViewAdapter = new PairRecyclerViewAdapter(context, triggerArrayList, key -> { - OneSignal.getInAppMessages().removeTrigger(key); - triggerSet.remove(key); - - refreshTriggerRecyclerView(); - - toaster.makeCustomViewToast("Deleted trigger " + key, ToastType.SUCCESS); - }); - triggersRecyclerView.setAdapter(triggerPairRecyclerViewAdapter); - } - - private void refreshTriggerRecyclerView() { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - triggerArrayList.clear(); - triggerArrayList.addAll(triggerSet.entrySet()); - - if (triggerArrayList.size() > 0) { - animate.toggleAnimationView(false, View.GONE, triggersRecyclerView, noTriggersTextView); - } else { - animate.toggleAnimationView(true, View.GONE, triggersRecyclerView, noTriggersTextView); - } - - triggerPairRecyclerViewAdapter.notifyDataSetChanged(); - } - }); - } - - private void setupLocationLayout() { - setupLocationSharedSwitch(); - setupPromptLocationButton(); - } - - private void setupLocationSharedSwitch() { - locationSharedRelativeLayout.setOnClickListener(v -> { - boolean isLocationShared = !locationSharedSwitch.isChecked(); - locationSharedSwitch.setChecked(isLocationShared); - SharedPreferenceUtil.cacheLocationSharedStatus(context, isLocationShared); - }); - - boolean isLocationShared = SharedPreferenceUtil.getCachedLocationSharedStatus(context); - locationSharedSwitch.setChecked(isLocationShared); - locationSharedSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - SharedPreferenceUtil.cacheLocationSharedStatus(context, isChecked); - OneSignal.getLocation().setShared(isChecked); - }); - } - - private void setupPromptLocationButton() { - promptLocationButton.setOnClickListener(v -> { - OneSignal.getLocation().requestPermission(Continue.none()); - }); - } - - private void setupPushNotificationLayout() { - setupSubscriptionSwitch(); - setupPromptPushButton(); - setupSendNotificationsLayout(); - } - - private void setupSubscriptionSwitch() { - refreshSubscriptionState(); - // Add a listener to toggle the push notification enablement for the push subscription. - pushSubscriptionEnabledSwitch.setOnClickListener(v -> { - IPushSubscription subscription = OneSignal.getUser().getPushSubscription(); - if(pushSubscriptionEnabledSwitch.isChecked()) { - subscription.optIn(); - } - else { - subscription.optOut(); - } - }); - } - - private void setupPromptPushButton() { - promptPushButton.setOnClickListener(v -> { - ExecutorService executor = Executors.newSingleThreadExecutor(); - @SuppressLint({"NewApi", "LocalSuppress"}) CompletableFuture future = CompletableFuture.runAsync(() -> { - OneSignal.getNotifications().requestPermission(true, Continue.none()); - }, executor); - future.join(); // Waits for the task to complete - executor.shutdown(); - }); - } - - private void refreshSubscriptionState() { - boolean isPermissionEnabled = OneSignal.getNotifications().getPermission(); - IPushSubscription pushSubscription = OneSignal.getUser().getPushSubscription(); - - pushSubscriptionIdTextView.setText(pushSubscription.getId()); - promptPushBottonLayout.setVisibility(isPermissionEnabled ? View.GONE : View.VISIBLE); - pushSubscriptionEnabledRelativeLayout.setEnabled(isPermissionEnabled); - pushSubscriptionEnabledSwitch.setEnabled(isPermissionEnabled); - pushSubscriptionEnabledSwitch.setChecked(pushSubscription.getOptedIn()); - } - - private void setupSendNotificationsLayout() { - recyclerViewBuilder.setupRecyclerView(pushNotificationRecyclerView, 16, false, true); - GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2); - pushNotificationRecyclerView.setLayoutManager(gridLayoutManager); - - pushNotificationRecyclerViewAdapter = new NotificationRecyclerViewAdapter(context, Notification.values()); - pushNotificationRecyclerView.setAdapter(pushNotificationRecyclerViewAdapter); - } - - private void setupInAppMessagingLayout() { - setupPauseInAppMessagesSwitch(); - setupSendIAMsLayout(); - } - - private void setupPauseInAppMessagesSwitch() { - pauseInAppMessagesRelativeLayout.setOnClickListener(v -> { - boolean isInAppMessagesPaused = pauseInAppMessagesSwitch.isChecked(); - pauseInAppMessagesSwitch.setChecked(!isInAppMessagesPaused); - }); - - pauseInAppMessagesSwitch.setChecked(SharedPreferenceUtil.getCachedInAppMessagingPausedStatus(context)); - pauseInAppMessagesSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - OneSignal.getInAppMessages().setPaused(isChecked); - SharedPreferenceUtil.cacheInAppMessagingPausedStatus(context, isChecked); - }); - } - - private void setupSendIAMsLayout() { - recyclerViewBuilder.setupRecyclerView(inAppMessagingRecyclerView, 4, false, true); - GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2); - inAppMessagingRecyclerView.setLayoutManager(gridLayoutManager); - - inAppMessagingRecyclerViewAdapter = new InAppMessageRecyclerViewAdapter(context, InAppMessage.values()); - inAppMessagingRecyclerView.setAdapter(inAppMessagingRecyclerViewAdapter); - } - - public boolean scrollToTopIfAvailable() { - if (shouldScrollTop) { - if (nestedScrollView != null) { - nestedScrollView.smoothScrollTo(0, 0); - appBarLayout.setExpanded(true); - } - } - return shouldScrollTop; - } - - private String getOneSignalAppId() { - return SharedPreferenceUtil.getOneSignalAppId(context); - } - - private void togglePrivacyConsent(boolean hasConsent) { - OneSignal.setConsentGiven(hasConsent); - SharedPreferenceUtil.cacheUserPrivacyConsent(context, hasConsent); - - shouldScrollTop = hasConsent; - - int consentVisibility = hasConsent ? View.GONE : View.VISIBLE; - int scrollVisibility = hasConsent ? View.VISIBLE : View.GONE; - privacyConsentLinearLayout.setVisibility(consentVisibility); - nestedScrollView.setVisibility(scrollVisibility); - - appBarLayout.setExpanded(true); - } - - - - private void refreshState() { - // appId - appIdTextView.setText(getOneSignalAppId()); - - // aliases -// aliasSet.clear(); -// for (Map.Entry aliasEntry :OneSignal.getUser().getAliases().entrySet()) { -// aliasSet.put(aliasEntry.getKey(), aliasEntry.getValue()); -// } -// refreshAliasRecyclerView(); - - // email subscriptions -// emailArrayList.clear(); -// List emailSubs = OneSignal.getUser().getSubscriptions().getEmails(); -// for (IEmailSubscription emailSub: emailSubs) { -// emailArrayList.add(emailSub); -// } -// refreshEmailRecyclerView(); - - // sms subscriptions -// smsArrayList.clear(); -// List smsSubs = OneSignal.getUser().getSubscriptions().getSmss(); -// for (ISmsSubscription smsSub: smsSubs) { -// smsArrayList.add(smsSub); -// } -// refreshSMSRecyclerView(); - - // tags -// tagSet.clear(); -// for (Map.Entry tagEntry :OneSignal.getUser().getTags().entrySet()) { -// tagSet.put(tagEntry.getKey(), tagEntry.getValue()); -// } -// refreshTagRecyclerView(); - - // triggers - triggerSet.clear(); - // triggers are not persisted, they are always "starting from scratch" - refreshTriggerRecyclerView(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/SplashActivityViewModel.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/SplashActivityViewModel.java deleted file mode 100644 index c3116b9058..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/SplashActivityViewModel.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.onesignal.sdktest.model; - -import android.app.Activity; -import android.content.Context; -import android.os.Handler; -import android.util.Log; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.onesignal.OneSignal; -import com.onesignal.sdktest.constant.Tag; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.util.IntentTo; -import com.onesignal.sdktest.util.SharedPreferenceUtil; - -public class SplashActivityViewModel implements ActivityViewModel { - - private IntentTo intentTo; - - private Context context; - - private boolean[] tasks = {false, false, false}; - - @Override - public Activity getActivity() { - return (Activity) context; - } - - @Override - public AppCompatActivity getAppCompatActivity() { - return (AppCompatActivity) context; - } - - @Override - public ActivityViewModel onActivityCreated(Context context) { - this.context = context; - intentTo = new IntentTo(context); - setupOneSignalSDK(); - return this; - } - - @Override - public ActivityViewModel setupInterfaceElements() { - return this; - } - - @Override - public void setupToolbar() { - - } - - @Override - public void networkConnected() { - - } - - @Override - public void networkDisconnected() { - - } - - private void setupOneSignalSDK() { - boolean privacyConsent = true; - - OneSignal.setConsentRequired(privacyConsent); - - boolean isLocationShared = SharedPreferenceUtil.getCachedLocationSharedStatus(context); - OneSignal.getLocation().setShared(isLocationShared); - - boolean isInAppMessagingPaused = SharedPreferenceUtil.getCachedInAppMessagingPausedStatus(context); - OneSignal.getInAppMessages().setPaused(isInAppMessagingPaused); - - Log.d(Tag.LOG_TAG, Text.PRIVACY_CONSENT_REQUIRED_SET + ": " + privacyConsent); - -// boolean isEmailCached = attemptSignIn(new EmailUpdateCallback() { -// @Override -// public void onSuccess() { -// tasks[0] = true; -// attemptEnterApplication(); -// } -// -// @Override -// public void onFailure() { -// tasks[0] = true; -// attemptEnterApplication(); -// } -// }); -// if (!isEmailCached) { - tasks[0] = true; - attemptEnterApplication(); -// } - - new Thread() { - public void run() { - boolean isExternalUserIdCached = attemptExternalUserId(); - tasks[1] = true; - - attemptEnterApplication(); - } - }.start(); - - new Thread() { - public void run() { - boolean hasConsent = SharedPreferenceUtil.getUserPrivacyConsent(context); - // TODO() -// OneSignal.provideUserConsent(hasConsent); - tasks[2] = true; - - attemptEnterApplication(); - } - }.start(); - } - -// public boolean attemptSignIn(EmailUpdateCallback callback) { -// boolean isEmailCached = SharedPreferenceUtil.exists(context, SharedPreferenceUtil.USER_EMAIL_SHARED_PREF); -// if (isEmailCached) { -// String email = SharedPreferenceUtil.getCachedUserEmail(context); -// currentUser.setEmail(email, callback); -// } -// return isEmailCached; -// return false; -// } - - public boolean attemptExternalUserId() { - boolean isExternalUserIdCached = SharedPreferenceUtil.exists(context, SharedPreferenceUtil.USER_EXTERNAL_USER_ID_SHARED_PREF); - if (isExternalUserIdCached) { - String externalUserId = SharedPreferenceUtil.getCachedUserExternalUserId(context); -// currentUser.setExternalUserId(context, externalUserId); - } - return isExternalUserIdCached; - } - - private void attemptEnterApplication() { - for (boolean task : tasks) { - if (!task) - return; - } - - ((Activity) context).runOnUiThread(() -> new Handler().postDelayed(() -> intentTo.mainActivity(), 1000)); - } - - @Override - public void onNotificationPermissionChange(@Nullable boolean permission) { - - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationData.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationData.java deleted file mode 100644 index 411b912f22..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationData.java +++ /dev/null @@ -1,194 +0,0 @@ -package com.onesignal.sdktest.notification; - -public class NotificationData { - - public static final String[][] GENERAL_DATA = { - new String[]{ - "Liked post", - "Michael DiCioccio liked your post!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbell_red.png?alt=media&token=c80c4e76-1fd7-4912-93f4-f1aee1d98b20", - "" - }, - new String[]{ - "Birthdays", - "Say happy birthday to Rodrigo and 5 others!", - "https://images.vexels.com/media/users/3/147226/isolated/preview/068af50eededd7a739aac52d8e509ab5-three-candles-birthday-cake-icon-by-vexels.png", - "" - }, - new String[]{ - "New Post", - "Neil just posted for the first time in while, check it out!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbell_red.png?alt=media&token=c80c4e76-1fd7-4912-93f4-f1aee1d98b20", - "" - } - }; - - public static final String[][] GREETING_DATA = { - new String[]{ - "", - "Welcome to Nike!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting-red.png?alt=media&token=cb9f3418-db61-443c-955a-57e664d30271", - "" - }, - new String[]{ - "", - "Welcome to Adidas!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting-red.png?alt=media&token=cb9f3418-db61-443c-955a-57e664d30271", - "" - }, - new String[]{ - "", - "Welcome to Sandra’s cooking blog!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting-red.png?alt=media&token=cb9f3418-db61-443c-955a-57e664d30271", - "" - } - }; - - public static final String[][] PROMOTION_DATA = { - new String[]{ - "", - "Get 20% off site-wide!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent-red.png?alt=media&token=9e43c45e-8bcc-413e-8a42-612020c406ba", - "" - }, - new String[]{ - "", - "Half-off all shoes today only!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent-red.png?alt=media&token=9e43c45e-8bcc-413e-8a42-612020c406ba", - "" - }, - new String[]{ - "", - "3 hour flash sale!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent-red.png?alt=media&token=9e43c45e-8bcc-413e-8a42-612020c406ba", - "" - } - }; - - public static final String[][] BREAKING_NEWS_DATA = { - new String[]{ - "The rap game wont be the same", - "Nipsey Hussle shot dead in his own hometown!", - "https://pbs.twimg.com/profile_images/719602655337656321/kQUzR2Es_400x400.jpg", - "https://lab.fm/wp-content/uploads/2019/04/nipsey-hussle-cipriani-diamond-ball-2018-nyc-credit-jstone-shutterstock@1800x1013.jpg" - }, - new String[]{ - "CNN being bought by Fox?", - "Fox has shown an increasing interest in purchasing Fox and because of some other deals this year it could actually happen!", - "https://www.thewrap.com/sites/default/wp-content/uploads/files/2013/Jul/08/101771/gallupinside.png", - "https://i.ytimg.com/vi/C8YBKBuX43Q/maxresdefault.jpg" - }, - new String[]{ - "Teslas next venture!", - "Tesla releasing fully autonomous driving service!", - "https://i.etsystatic.com/13567406/r/il/6657a5/1083941709/il_794xN.1083941709_k3vi.jpg", - "https://electrek.co/wp-content/uploads/sites/3/2018/01/screen-shot-2018-01-04-at-12-59-25-pm.jpg?quality=82&strip=all&w=1600" - } - }; - - public static final String[][] ABANDONED_CART_DATA = { - new String[]{ - "", - "You have some shoes left in your cart!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart-red.png?alt=media&token=3e9ca206-540c-4275-8f21-1840e9cba930", - "" - }, - new String[]{ - "", - "Still want to buy the dress you saw?", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart-red.png?alt=media&token=3e9ca206-540c-4275-8f21-1840e9cba930", - "" - }, - new String[]{ - "", - "20% off the shoes you saw today.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart-red.png?alt=media&token=3e9ca206-540c-4275-8f21-1840e9cba930", - "" - } - }; - - public static final String[][] NEW_POST_DATA = { - new String[]{ - "", - "I just published a new blog post!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage-red.png?alt=media&token=3f44fd3d-27a5-4d05-9544-423edf2f6284", - "" - }, - new String[]{ - "", - "Come check out my new blog post on aliens!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage-red.png?alt=media&token=3f44fd3d-27a5-4d05-9544-423edf2f6284", - "" - }, - new String[]{ - "", - "10 places you have to see before you die.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage-red.png?alt=media&token=3f44fd3d-27a5-4d05-9544-423edf2f6284", - "" - } - }; - - public static final String[][] RE_ENGAGEMENT_DATA = { - new String[]{ - "", - "Your friend George just joined Facebook", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap-red.png?alt=media&token=8ea7f6db-18e4-4fdd-aabf-ac97f04522fd", - "" - }, - new String[]{ - "", - "Can you beat level 23?", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap-red.png?alt=media&token=8ea7f6db-18e4-4fdd-aabf-ac97f04522fd", - "" - }, - new String[]{ - "", - "Check out our Fall collection!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap-red.png?alt=media&token=8ea7f6db-18e4-4fdd-aabf-ac97f04522fd", - "" - } - }; - - public static final String[][] RATING_DATA = { - new String[]{ - "", - "How was your food/experience at Chipotle?", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar-red.png?alt=media&token=e18e99ce-96ad-4ee5-b0b9-40c7f90613d1", - "" - }, - new String[]{ - "", - "Rate your experience with Amazon.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar-red.png?alt=media&token=e18e99ce-96ad-4ee5-b0b9-40c7f90613d1", - "" - }, - new String[]{ - "", - "Let your Lyft driver know how the ride was.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar-red.png?alt=media&token=e18e99ce-96ad-4ee5-b0b9-40c7f90613d1", - "" - } - }; - - public static final String[][] LOCATION_DATA = { - new String[]{ - "", - "Your friend Neil is sharing his location with you.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fmap-marker-red.png?alt=media&token=42631ed8-053b-4c28-a193-4d144001a474", - "" - }, - new String[]{ - "", - "An armed robbery occured at 34th and Market Street today.", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fmap-marker-red.png?alt=media&token=42631ed8-053b-4c28-a193-4d144001a474", - "" - }, - new String[]{ - "", - "Logic is performing at the Wells Fargo Center this weekend!", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fmap-marker-red.png?alt=media&token=42631ed8-053b-4c28-a193-4d144001a474", - "" - } - }; - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java deleted file mode 100644 index 6f1c603da5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/NotificationServiceExtension.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.notification; - -import android.util.Log; - -import com.onesignal.notifications.IActionButton; -import com.onesignal.notifications.IDisplayableMutableNotification; -import com.onesignal.notifications.INotificationReceivedEvent; -import com.onesignal.notifications.INotificationServiceExtension; -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.constant.Tag; - -public class NotificationServiceExtension implements INotificationServiceExtension { - - @Override - public void onNotificationReceived(INotificationReceivedEvent event) { - Log.v(Tag.LOG_TAG, "IRemoteNotificationReceivedHandler fired" + " with INotificationReceivedEvent: " + event.toString()); - - IDisplayableMutableNotification notification = event.getNotification(); - - if (notification.getActionButtons() != null) { - for (IActionButton button : notification.getActionButtons()) { - Log.v(Tag.LOG_TAG, "ActionButton: " + button.toString()); - } - } - - notification.setExtender(builder -> builder.setColor(event.getContext().getResources().getColor(R.color.colorPrimary))); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java deleted file mode 100644 index 96c870c13a..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.onesignal.sdktest.notification; - -import android.os.Build; -import android.util.Log; - -import com.onesignal.OneSignal; -import com.onesignal.user.subscriptions.IPushSubscription; -import com.onesignal.sdktest.constant.Tag; -import com.onesignal.sdktest.type.Notification; - -import org.json.JSONObject; - -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Scanner; - -public class OneSignalNotificationSender { - - public static void setAppId(String appId) { - _appId = appId; - } - private static String _appId = ""; - - /** - * Send a notification to this device through the OneSignal Platform. Note this form of the - * API should not be used in a production setting as it is not safe. Rather, the device should - * make an API call to it's own backend, which should handle the API call to OneSignal (where it - * can safely provide the application API Key). - * - * @param notification The notification that is to be sent. - */ - public static void sendDeviceNotification(final Notification notification) { - new Thread(() -> { - IPushSubscription subscription = OneSignal.getUser().getPushSubscription(); - - if (!subscription.getOptedIn()) - return; - - int pos = notification.getTemplatePos(); - try { - JSONObject notificationContent = new JSONObject("{'app_id': '" + _appId + "', 'include_player_ids': ['" + subscription.getId() + "']," + - "'headings': {'en': '" + notification.getTitle(pos) + "'}," + - "'contents': {'en': '" + notification.getMessage(pos) + "'}," + - "'small_icon': '" + notification.getSmallIconRes() + "'," + - "'large_icon': '" + notification.getLargeIconUrl(pos) + "'," + - "'big_picture': '" + notification.getBigPictureUrl(pos) + "'," + - "'android_group': '" + notification.getGroup() + "'," + - "'buttons': " + notification.getButtons() + "," + - "'android_led_color': 'FFE9444E'," + - "'android_accent_color': 'FFE9444E'," + - "'android_sound': 'nil'}"); - - HttpURLConnection con = (HttpURLConnection) new URL("https://onesignal.com/api/v1/notifications").openConnection(); - - con.setUseCaches(false); - con.setConnectTimeout(30000); - con.setReadTimeout(30000); - con.setRequestProperty("Accept", "application/vnd.onesignal.v1+json"); - con.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); - con.setRequestMethod("POST"); - con.setDoOutput(true); - con.setDoInput(true); - - byte[] outputBytes = notificationContent.toString().getBytes(StandardCharsets.UTF_8); - con.setFixedLengthStreamingMode(outputBytes.length); - con.getOutputStream().write(outputBytes); - - int httpResponse = con.getResponseCode(); - - if(httpResponse == HttpURLConnection.HTTP_ACCEPTED || httpResponse == HttpURLConnection.HTTP_OK) { - InputStream inputStream = con.getInputStream(); - Scanner scanner = new Scanner(inputStream, "UTF-8"); - String responseStr = ""; - if (scanner.useDelimiter("\\A").hasNext()) - responseStr = scanner.next(); - scanner.close(); - Log.d(Tag.LOG_TAG, "Success sending notification: " + responseStr); - } - else { - InputStream inputStream = con.getErrorStream(); - Scanner scanner = new Scanner(inputStream, "UTF-8"); - String responseStr = ""; - if (scanner.useDelimiter("\\A").hasNext()) - responseStr = scanner.next(); - scanner.close(); - Log.d(Tag.LOG_TAG, "Failure sending notification: " + responseStr); - } - } catch (Exception e) { - e.printStackTrace(); - } - }).start(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/InAppMessage.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/InAppMessage.java deleted file mode 100644 index eca0e9c3b2..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/InAppMessage.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.onesignal.sdktest.type; - -public enum InAppMessage { - - TOP_BANNER("Top Banner", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Ftop_banner_icon.png?alt=media&token=88fe1f2f-01c0-44fb-bb88-c1a4bf00969d"), - BOTTOM_BANNER("Bottom Banner", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Fbottom_banner_icon.png?alt=media&token=a8faee09-137d-4049-b41b-0dc3c66b0d8e"), - CENTER_MODAL("Center Modal", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Fcenter_modal_icon.png?alt=media&token=c0998b1e-5bab-404a-bfaa-e432ec298bdf"), - FULL_SCREEN("Full Screen", "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/IN_APP_MESSAGE_ICON%2Ffull_screen_icon.png?alt=media&token=db3bb9ea-c61c-4df7-9f1f-6673316a4395"); - - private final String title; - private final String icon; - - InAppMessage(String title, String iconUrl) { - this.title = title; - this.icon = iconUrl; - } - - public String getTitle() { - return title; - } - - public String getIconUrl() { - return icon; - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/Notification.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/Notification.java deleted file mode 100644 index 4c1ddb4093..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/Notification.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.onesignal.sdktest.type; - -import com.onesignal.sdktest.notification.NotificationData; - -public enum Notification { - - GENERAL("General", - NotificationData.GENERAL_DATA, - "ic_bell_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbell.png?alt=media&token=73c2bdd9-355f-42bb-80d7-aead737a9dbc", - "[]", - true, - 0), - - GREETING("Greetings", - NotificationData.GREETING_DATA, - "ic_human_greeting_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fhuman-greeting.png?alt=media&token=178bd69d-634e-40b3-ac32-b56c88e6cd6a", - "[]", - true, - 0), - - PROMOTIONS("Promotions", - NotificationData.PROMOTION_DATA, - "ic_brightness_percent_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fbrightness-percent.png?alt=media&token=6a8b4348-ad51-4e3a-97d0-4deb46b1576e", - "[]", - true, - 0), - - BREAKING_NEWS("Breaking News", - NotificationData.BREAKING_NEWS_DATA, - "ic_newspaper_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fnewspaper.png?alt=media&token=053e419b-14f1-4f0d-a439-bb5b46d1b917", - "[{'id': 'id1', 'text': 'view', 'icon': ''}, {'id': 'id2', 'text': 'save', 'icon': ''}, {'id': 'id3', 'text': 'share', 'icon': ''}]", - true, - 0), - - ABANDONED_CART("Abandoned Cart", - NotificationData.ABANDONED_CART_DATA, - "ic_cart_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fcart.png?alt=media&token=cf7f4d13-6aa2-4824-9b2f-42e5f33f545b", - "[]", - true, - 0), - - NEW_POST("New Post", - NotificationData.NEW_POST_DATA, - "ic_image_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fimage.png?alt=media&token=6fb66f31-23de-4c76-a2ff-da40d46ebf15", - "[]", - true, - 0), - - RE_ENGAGEMENT("Re-Engagement", - NotificationData.RE_ENGAGEMENT_DATA, - "ic_gesture_tap_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fgesture-tap.png?alt=media&token=045ddcb9-f4e5-457e-8577-baa0e264e227", - "[]", - true, - 0), - - RATING("Rating", - NotificationData.RATING_DATA, - "ic_star_white_24dp", - "https://firebasestorage.googleapis.com/v0/b/onesignaltest-e7802.appspot.com/o/NOTIFICATION_ICON%2Fstar.png?alt=media&token=da0987e5-a635-488f-9fba-24a1ee5d704a", - "[]", - true, - 0); - - private final String title; - private final String[][] data; - private final String smallIconRes; - private final String iconUrl; - private final String buttons; - private final boolean shouldShow; - private int pos; - - Notification(String title, String[][] data, String smallIconRes, String iconUrl, String buttons, boolean shouldShow, int pos) { - this.title = title; - this.data = data; - this.smallIconRes = smallIconRes; - this.iconUrl = iconUrl; - this.buttons = buttons; - this.shouldShow = shouldShow; - this.pos = pos; - } - - public String getGroup() { - return title; - } - - public String getTitle(int pos) { - return data[pos][0]; - } - - public String getMessage(int pos) { - return data[pos][1]; - } - - public String getSmallIconRes() { - return smallIconRes; - } - - public String getIconUrl() { - return iconUrl; - } - - public String getLargeIconUrl(int pos) { - return data[pos][2]; - } - - public String getBigPictureUrl(int pos) { - return data[pos][3]; - } - - public String getButtons() { - return buttons; - } - - public boolean shouldShow() { - return shouldShow; - } - - public int getTemplatePos() { - if (pos > 2) pos = 0; - return pos++; - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/OutcomeEvent.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/OutcomeEvent.java deleted file mode 100644 index d1cc277411..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/OutcomeEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.onesignal.sdktest.type; - -public enum OutcomeEvent { - - OUTCOME("Normal Outcome"), - UNIQUE_OUTCOME("Unique Outcome"), - OUTCOME_WITH_VALUE("Outcome with Value"); - - String title; - - OutcomeEvent(String title) { - this.title = title; - } - - public static OutcomeEvent enumFromTitleString(String title) { - for (OutcomeEvent outcomeEvent : OutcomeEvent.values()) { - if (title.equals(outcomeEvent.getTitle())) - return outcomeEvent; - } - - return null; - } - - public String getTitle() { - return title; - } - - @Override - public String toString() { - return getTitle(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/ToastType.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/ToastType.java deleted file mode 100644 index 3da88ad419..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/type/ToastType.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.type; - -import com.onesignal.sdktest.R; - -public enum ToastType { - - INFO(R.drawable.ic_information_white_48dp, R.color.colorToastInfo), - SUCCESS(R.drawable.ic_checkbox_marked_circle_white_48dp, R.color.colorToastSuccess), - WARNING(R.drawable.ic_alert_white_48dp, R.color.colorToastWarning), - ERROR(R.drawable.ic_alert_octagon_white_48dp, R.color.colorToastError); - - private int icon; - private int color; - - ToastType(int icon, int color) { - this.icon = icon; - this.color = color; - } - - public int getIcon() { - return icon; - } - - public int getColor() { - return color; - } - -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/CustomAlertDialogBuilder.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/CustomAlertDialogBuilder.java deleted file mode 100644 index 3350c70356..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/CustomAlertDialogBuilder.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.onesignal.sdktest.ui; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.view.KeyEvent; -import android.view.View; -import android.widget.Button; - -import com.onesignal.sdktest.R; - -public class CustomAlertDialogBuilder extends AlertDialog.Builder { - - /* - * Click listener - */ - private DialogInterface.OnClickListener mPositiveButtonListener = null; - private DialogInterface.OnClickListener mNegativeButtonListener = null; - private DialogInterface.OnClickListener mNeutralButtonListener = null; - private DialogInterface.OnDismissListener mOnDismissListener = null; - - /* - * Buttons text - */ - private CharSequence mPositiveButtonText = null; - private CharSequence mNegativeButtonText = null; - private CharSequence mNeutralButtonText = null; - - - /* - * Buttons - */ - private Button positiveButton; - private Button negativeButton; - - private View view; - private Boolean mCancelOnTouchOutside = null; - private boolean isCancelable = true; - - public CustomAlertDialogBuilder(Context context, View view) { - super(context); - this.view = view; - } - - public CustomAlertDialogBuilder setOnDismissListener(DialogInterface.OnDismissListener listener) { - mOnDismissListener = listener; - return this; - } - - @Override - public CustomAlertDialogBuilder setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) { - mNegativeButtonListener = listener; - mNegativeButtonText = text; - return this; - } - - @Override - public CustomAlertDialogBuilder setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener) { - mNeutralButtonListener = listener; - mNeutralButtonText = text; - return this; - } - - @Override - public CustomAlertDialogBuilder setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) { - mPositiveButtonListener = listener; - mPositiveButtonText = text; - return this; - } - - @Override - public CustomAlertDialogBuilder setNegativeButton(int textId, DialogInterface.OnClickListener listener) { - setNegativeButton(getContext().getString(textId), listener); - return this; - } - - @Override - public CustomAlertDialogBuilder setNeutralButton(int textId, DialogInterface.OnClickListener listener) { - setNeutralButton(getContext().getString(textId), listener); - return this; - } - - @Override - public CustomAlertDialogBuilder setPositiveButton(int textId, DialogInterface.OnClickListener listener) { - setPositiveButton(getContext().getString(textId), listener); - return this; - } - - public CustomAlertDialogBuilder setCanceledOnTouchOutside(boolean cancelOnTouchOutside) { - mCancelOnTouchOutside = cancelOnTouchOutside; - return this; - } - - @Override - public AlertDialog create() { - throw new UnsupportedOperationException("CustomAlertDialogBuilder.create(): use show() instead.."); - } - - public Button getPositiveButtonElement() { - return positiveButton; - } - - public Button getNegativeButtonElement() { - return negativeButton; - } - - public void setIsCancelable(boolean isCancelable) { - this.isCancelable = isCancelable; - } - - @Override - public AlertDialog show() { - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext(), R.style.WhiteThemeAlertDialog); - alertDialogBuilder.setView(view); - alertDialogBuilder.setOnKeyListener(new DialogInterface.OnKeyListener() { - @Override - public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { - switch (keyCode) { - case KeyEvent.KEYCODE_BACK: - return !isCancelable; - } - return false; - } - }); - final AlertDialog alertDialog = alertDialogBuilder.create(); - - DialogInterface.OnClickListener emptyOnClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { } - }; - - // Enable buttons (needed for Android 1.6) - otherwise later getButton() returns null - if (mPositiveButtonText != null) { - alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, mPositiveButtonText, emptyOnClickListener); - } - - if (mNegativeButtonText != null) { - alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, mNegativeButtonText, emptyOnClickListener); - } - - if (mNeutralButtonText != null) { - alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, mNeutralButtonText, emptyOnClickListener); - } - - // Set OnDismissListener if available - if (mOnDismissListener != null) { - alertDialog.setOnDismissListener(mOnDismissListener); - } - - if (mCancelOnTouchOutside != null) { - alertDialog.setCanceledOnTouchOutside(mCancelOnTouchOutside); - } - - alertDialog.show(); - - // Set the OnClickListener directly on the Button object, avoiding the auto-dismiss feature - // IMPORTANT: this must be after alert.show(), otherwise the button doesn't exist.. - // If the listener are null don't do anything so that they will still dismiss the dialog when clicked - if (mPositiveButtonListener != null) { - alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - mPositiveButtonListener.onClick(alertDialog, AlertDialog.BUTTON_POSITIVE); - } - }); - } - - if (mNegativeButtonListener != null) { - alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - mNegativeButtonListener.onClick(alertDialog, AlertDialog.BUTTON_NEGATIVE); - } - }); - } - - if (mNeutralButtonListener != null) { - alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - mNeutralButtonListener.onClick(alertDialog, AlertDialog.BUTTON_NEUTRAL); - } - }); - } - - positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); - negativeButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); - - return alertDialog; - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/FixAppBarLayoutBehavior.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/FixAppBarLayoutBehavior.java deleted file mode 100644 index cc3a0e7ffe..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/FixAppBarLayoutBehavior.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.onesignal.sdktest.ui; - -import android.content.Context; -import com.google.android.material.appbar.AppBarLayout; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.view.ViewCompat; -import android.util.AttributeSet; -import android.view.View; - - -public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior { - - public FixAppBarLayoutBehavior() { - super(); - } - - public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, - int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) { - super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, - dxUnconsumed, dyUnconsumed, type); - stopNestedScrollIfNeeded(dyUnconsumed, child, target, type); - } - - @Override - public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, - View target, int dx, int dy, int[] consumed, int type) { - super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type); - stopNestedScrollIfNeeded(dy, child, target, type); - } - - private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) { - if (type == ViewCompat.TYPE_NON_TOUCH) { - final int currOffset = getTopAndBottomOffset(); - if ((dy < 0 && currOffset == 0) - || (dy > 0 && currOffset == -child.getTotalScrollRange())) { - ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH); - } - } - } -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/RecyclerViewBuilder.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/RecyclerViewBuilder.java deleted file mode 100644 index 236f940386..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/ui/RecyclerViewBuilder.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.onesignal.sdktest.ui; - -import android.content.Context; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.RecyclerView; - -import com.onesignal.sdktest.R; - -public class RecyclerViewBuilder { - - private Context context; - - - public RecyclerViewBuilder(Context context) { - this.context = context; - } - - public void setupRecyclerView(RecyclerView recyclerView, int viewCache, boolean hasDivider, boolean isVertical) { - DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator(); - - int orientation = isVertical ? DividerItemDecoration.VERTICAL : DividerItemDecoration.HORIZONTAL; - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, orientation); - - int divider = hasDivider ? R.drawable.divider : R.drawable.no_divider; - dividerItemDecoration.setDrawable(context.getResources().getDrawable(divider)); - - recyclerView.setItemAnimator(defaultItemAnimator); - recyclerView.addItemDecoration(dividerItemDecoration); - recyclerView.setHasFixedSize(false); - recyclerView.setItemViewCacheSize(viewCache); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Animate.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Animate.java deleted file mode 100644 index a2d994f4ee..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Animate.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.view.View; - -public class Animate { - - public Animate() { - } - - public void toggleAnimationView(boolean showAnimation, int visibility, View view, View anim) { - int viewVis = showAnimation ? visibility : View.VISIBLE; - int animVis = showAnimation ? View.VISIBLE : visibility; - - view.setVisibility(viewVis); - anim.setVisibility(animVis); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java deleted file mode 100644 index 797d06372e..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java +++ /dev/null @@ -1,374 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.drawable.Drawable; -import com.google.android.material.textfield.TextInputLayout; -import androidx.cardview.widget.CardView; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import android.util.Pair; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.adapter.EnumSelectionRecyclerViewAdapter; -import com.onesignal.sdktest.callback.AddPairAlertDialogCallback; -import com.onesignal.sdktest.callback.EnumSelectionCallback; -import com.onesignal.sdktest.callback.SendOutcomeAlertDialogCallback; -import com.onesignal.sdktest.callback.UpdateAlertDialogCallback; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.type.OutcomeEvent; -import com.onesignal.sdktest.type.ToastType; -import com.onesignal.sdktest.ui.CustomAlertDialogBuilder; -import com.onesignal.sdktest.ui.RecyclerViewBuilder; - -public class Dialog { - - private Font font; - private LayoutInflater layoutInflater; - private RecyclerViewBuilder recyclerViewBuilder; - private Toaster toaster; - - private Context context; - - public Dialog(Context context) { - this.context = context; - - font = new Font(context); - layoutInflater = LayoutInflater.from(context); - recyclerViewBuilder = new RecyclerViewBuilder(context); - toaster = new Toaster(context); - } - - public enum DialogAction { - LOGIN, - ADD, - UPDATE - } - - /** - * Create an AlertDialog for when the user updates a single value field - * Click OK to verify and update the field being updated - */ - public void createUpdateAlertDialog(final String content, final DialogAction action, final ProfileUtil.FieldType field, final UpdateAlertDialogCallback callback) { - View updateAlertDialogView = layoutInflater.inflate(R.layout.update_alert_dialog_layout, null, false); - - final TextInputLayout updateAlertDialogTextInputLayout = updateAlertDialogView.findViewById(R.id.update_alert_dialog_text_input_layout); - final EditText updateAlertDialogEditText = updateAlertDialogView.findViewById(R.id.update_alert_dialog_edit_text); - final ProgressBar updateAlertDialogProgressBar = updateAlertDialogView.findViewById(R.id.update_alert_dialog_progress_bar); - - String hintTitle = action == DialogAction.LOGIN ? field.getTitle() : "New " + field.getTitle(); - updateAlertDialogTextInputLayout.setHint(hintTitle); - updateAlertDialogEditText.setText(content); - - font.applyFont(updateAlertDialogTextInputLayout, font.saralaBold); - font.applyFont(updateAlertDialogEditText, font.saralaBold); - - final CustomAlertDialogBuilder updateAlertDialog = new CustomAlertDialogBuilder(context, updateAlertDialogView); - updateAlertDialog.setView(updateAlertDialogView); - updateAlertDialog.setIsCancelable(true); - updateAlertDialog.setCanceledOnTouchOutside(false); - - String buttonText = Text.BUTTON_UPDATE; - - switch (action) { - case ADD: - buttonText = Text.BUTTON_ADD; - break; - case UPDATE: - buttonText = Text.BUTTON_UPDATE; - break; - case LOGIN: - buttonText = Text.BUTTON_LOGIN; - break; - } - updateAlertDialog.setPositiveButton(buttonText, new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, int which) { - toggleUpdateAlertDialogAttributes(true); - - final String newContent = updateAlertDialogEditText.getText().toString().trim(); - - if (newContent.equals(content)) { - InterfaceUtil.hideKeyboardFrom(context, updateAlertDialogEditText); - - toggleUpdateAlertDialogAttributes(false); - dialog.dismiss(); - } else if (ProfileUtil.isContentValid(field, updateAlertDialogTextInputLayout)) { - InterfaceUtil.hideKeyboardFrom(context, updateAlertDialogEditText); - toggleUpdateAlertDialogAttributes(false); - dialog.dismiss(); - callback.onSuccess(newContent); - } else { - toggleUpdateAlertDialogAttributes(false); - } - } - - private void toggleUpdateAlertDialogAttributes(boolean disableAttributes) { - int progressVisibility = disableAttributes ? View.VISIBLE : View.GONE; - updateAlertDialogProgressBar.setVisibility(progressVisibility); - - int buttonVisibility = disableAttributes ? View.GONE : View.VISIBLE; - updateAlertDialog.getPositiveButtonElement().setVisibility(buttonVisibility); - updateAlertDialog.getNegativeButtonElement().setVisibility(buttonVisibility); - - updateAlertDialog.getPositiveButtonElement().setEnabled(!disableAttributes); - updateAlertDialog.getNegativeButtonElement().setEnabled(!disableAttributes); - updateAlertDialog.setIsCancelable(!disableAttributes); - } - }).setNegativeButton(Text.BUTTON_CANCEL, null); - updateAlertDialog.show(); - updateAlertDialogEditText.requestFocus(); - } - - /** - * Create an AlertDialog for when the user updates a single value field - * Click OK to verify and update the field being updated - */ - public void createAddPairAlertDialog(String content, final ProfileUtil.FieldType field, final AddPairAlertDialogCallback callback) { - final View addPairAlertDialogView = layoutInflater.inflate(R.layout.add_pair_alert_dialog_layout, null, false); - - final TextView addPairAlertDialogTitleTextView = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_title_text_view); - final TextInputLayout addPairAlertDialogKeyTextInputLayout = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_key_text_input_layout); - final EditText addPairAlertDialogKeyEditText = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_key_edit_text); - final TextInputLayout addPairAlertDialogValueTextInputLayout = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_value_text_input_layout); - final EditText addPairAlertDialogValueEditText = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_value_edit_text); - final ProgressBar addPairAlertDialogProgressBar = addPairAlertDialogView.findViewById(R.id.add_pair_alert_dialog_progress_bar); - - addPairAlertDialogKeyTextInputLayout.setHint("Key"); - addPairAlertDialogValueTextInputLayout.setHint("Value"); - addPairAlertDialogTitleTextView.setText(content); - - font.applyFont(addPairAlertDialogTitleTextView, font.saralaBold); - font.applyFont(addPairAlertDialogKeyTextInputLayout, font.saralaBold); - font.applyFont(addPairAlertDialogKeyEditText, font.saralaBold); - font.applyFont(addPairAlertDialogValueTextInputLayout, font.saralaBold); - font.applyFont(addPairAlertDialogValueEditText, font.saralaBold); - - final CustomAlertDialogBuilder addPairAlertDialog = new CustomAlertDialogBuilder(context, addPairAlertDialogView); - addPairAlertDialog.setView(addPairAlertDialogView); - addPairAlertDialog.setIsCancelable(true); - addPairAlertDialog.setCanceledOnTouchOutside(false); - addPairAlertDialog.setPositiveButton(Text.BUTTON_ADD, new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, int which) { - toggleUpdateAlertDialogAttributes(true); - - final String pairKey = addPairAlertDialogKeyEditText.getText().toString().trim(); - final String pairStringValue = addPairAlertDialogValueEditText.getText().toString().trim(); - - Object pairValue = pairStringValue; - if (Util.isBoolean(pairStringValue)) { - pairValue = Boolean.parseBoolean(pairStringValue.toLowerCase()); - } else if (Util.isInteger(pairStringValue)) { - pairValue = Long.parseLong(pairStringValue); - } else if (Util.isFloat(pairStringValue)) { - pairValue = Double.parseDouble(pairStringValue); - } - - if (ProfileUtil.isContentValid(field, addPairAlertDialogKeyTextInputLayout)) { - InterfaceUtil.hideKeyboardFrom(context, addPairAlertDialogView); - dialog.dismiss(); - callback.onSuccess(new Pair<>(pairKey, pairValue)); - } else { - toggleUpdateAlertDialogAttributes(false); - } - } - - private void toggleUpdateAlertDialogAttributes(boolean disableAttributes) { - int progressVisibility = disableAttributes ? View.VISIBLE : View.GONE; - addPairAlertDialogProgressBar.setVisibility(progressVisibility); - - int buttonVisibility = disableAttributes ? View.GONE : View.VISIBLE; - addPairAlertDialog.getPositiveButtonElement().setVisibility(buttonVisibility); - addPairAlertDialog.getNegativeButtonElement().setVisibility(buttonVisibility); - - addPairAlertDialog.getPositiveButtonElement().setEnabled(!disableAttributes); - addPairAlertDialog.getNegativeButtonElement().setEnabled(!disableAttributes); - addPairAlertDialog.setIsCancelable(!disableAttributes); - } - - }).setNegativeButton(Text.BUTTON_CANCEL, null); - addPairAlertDialog.show(); - addPairAlertDialogKeyEditText.requestFocus(); - } - - public void createSendOutcomeAlertDialog(final String content, final SendOutcomeAlertDialogCallback callback) { - final View sendOutcomeAlertDialogView = layoutInflater.inflate(R.layout.send_outcome_alert_dialog_layout, null, false); - - final CardView sendOutcomeDialogTitleCardView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_card_view); - final RelativeLayout sendOutcomeDialogTitleRelativeLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_relative_layout); - final TextView sendOutcomeDialogTitleTextView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_text_view); - final ImageView sendOutcomeDialogTitleArrowImageView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_arrow_image_view); - final RecyclerView sendOutcomeDialogSelectionRecyclerView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_recycler_view); - final LinearLayout sendOutcomeDialogSelectionContentLinearLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_content_linear_layout); - final TextInputLayout sendOutcomeDialogNameTextInputLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_name_text_input_layout); - final EditText sendOutcomeDialogNameEditText = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_name_edit_text); - final TextInputLayout sendOutcomeDialogValueTextInputLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_value_text_input_layout); - final EditText sendOutcomeDialogValueEditText = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_value_edit_text); - final ProgressBar sendOutcomeDialogProgressBar = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_progress_bar); - - sendOutcomeDialogNameTextInputLayout.setHint("Name"); - sendOutcomeDialogValueTextInputLayout.setHint("Value"); - sendOutcomeDialogTitleTextView.setText(content); - - font.applyFont(sendOutcomeDialogTitleTextView, font.saralaBold); - font.applyFont(sendOutcomeDialogNameTextInputLayout, font.saralaBold); - font.applyFont(sendOutcomeDialogValueTextInputLayout, font.saralaBold); - - sendOutcomeDialogTitleCardView.setCardElevation(8f); - - recyclerViewBuilder.setupRecyclerView(sendOutcomeDialogSelectionRecyclerView, 3, false, true); - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context); - sendOutcomeDialogSelectionRecyclerView.setLayoutManager(linearLayoutManager); - EnumSelectionRecyclerViewAdapter enumSelectionRecyclerViewAdapter = new EnumSelectionRecyclerViewAdapter(context, OutcomeEvent.values(), new EnumSelectionCallback() { - @Override - public void onSelection(String title) { - int nameVisibility = View.GONE; - int valueVisibility = View.GONE; - - OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(title); - if (outcomeEvent == null) { - Drawable arrow = context.getResources().getDrawable(R.drawable.ic_chevron_down_white_48dp); - sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow); - sendOutcomeDialogTitleCardView.setCardElevation(0f); - sendOutcomeDialogSelectionRecyclerView.setVisibility(View.GONE); - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.GONE); - - sendOutcomeDialogNameEditText.setVisibility(nameVisibility); - sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility); - return; - } - - switch(outcomeEvent) { - case OUTCOME: - case UNIQUE_OUTCOME: - nameVisibility = View.VISIBLE; - break; - case OUTCOME_WITH_VALUE: - nameVisibility = View.VISIBLE; - valueVisibility = View.VISIBLE; - break; - } - - sendOutcomeDialogTitleTextView.setText(outcomeEvent.getTitle()); - - Drawable arrow = context.getResources().getDrawable(R.drawable.ic_chevron_down_white_48dp); - sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow); - sendOutcomeDialogTitleCardView.setCardElevation(0f); - sendOutcomeDialogSelectionRecyclerView.setVisibility(View.GONE); - - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.VISIBLE); - sendOutcomeDialogNameTextInputLayout.setVisibility(nameVisibility); - sendOutcomeDialogNameEditText.setVisibility(nameVisibility); - sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility); - sendOutcomeDialogValueEditText.setVisibility(valueVisibility); - } - }); - sendOutcomeDialogSelectionRecyclerView.setAdapter(enumSelectionRecyclerViewAdapter); - - sendOutcomeDialogTitleRelativeLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - boolean showMenu = sendOutcomeDialogSelectionRecyclerView.getVisibility() == View.GONE; - Drawable arrow = context.getResources().getDrawable(showMenu ? R.drawable.ic_chevron_up_white_48dp : R.drawable.ic_chevron_down_white_48dp); - int menuVisibility = showMenu ? View.VISIBLE : View.GONE; - int contentVisibility = showMenu ? View.GONE : View.VISIBLE; - float shadow = showMenu ? 8f : 0f; - - sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow); - sendOutcomeDialogTitleCardView.setCardElevation(shadow); - sendOutcomeDialogSelectionRecyclerView.setVisibility(menuVisibility); - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(contentVisibility); - - - int nameVisibility = View.GONE; - int valueVisibility = View.GONE; - - String selectedTitle = sendOutcomeDialogTitleTextView.getText().toString(); - OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(selectedTitle); - - if (outcomeEvent == null) { - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.GONE); - return; - } - - if (!showMenu) { - switch (outcomeEvent) { - case OUTCOME: - case UNIQUE_OUTCOME: - nameVisibility = View.VISIBLE; - break; - case OUTCOME_WITH_VALUE: - nameVisibility = View.VISIBLE; - valueVisibility = View.VISIBLE; - break; - } - } - - sendOutcomeDialogSelectionContentLinearLayout.setVisibility(nameVisibility); - sendOutcomeDialogNameEditText.setVisibility(nameVisibility); - sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility); - sendOutcomeDialogValueEditText.setVisibility(valueVisibility); - } - }); - - final CustomAlertDialogBuilder sendOutcomeAlertDialog = new CustomAlertDialogBuilder(context, sendOutcomeAlertDialogView); - sendOutcomeAlertDialog.setView(sendOutcomeAlertDialogView); - sendOutcomeAlertDialog.setIsCancelable(true); - sendOutcomeAlertDialog.setCanceledOnTouchOutside(false); - sendOutcomeAlertDialog.setPositiveButton(Text.BUTTON_SEND, new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, int which) { - toggleUpdateAlertDialogAttributes(true); - - String selectedTitle = sendOutcomeDialogTitleTextView.getText().toString(); - OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(selectedTitle); - - if (outcomeEvent == null) { - toaster.makeCustomViewToast("Please select an outcome type!", ToastType.ERROR); - toggleUpdateAlertDialogAttributes(false); - return; - } - - String name = sendOutcomeDialogNameEditText.getText().toString().trim(); - String value = sendOutcomeDialogValueEditText.getText().toString().trim(); - - if (name.isEmpty()) { - toaster.makeCustomViewToast("Please enter an outcome name!", ToastType.ERROR); - toggleUpdateAlertDialogAttributes(false); - return; - } - - if(callback.onSuccess(outcomeEvent, name, value)) { - toggleUpdateAlertDialogAttributes(false); - dialog.dismiss(); - InterfaceUtil.hideKeyboardFrom(context, sendOutcomeAlertDialogView); - } - } - - private void toggleUpdateAlertDialogAttributes(boolean disableAttributes) { - int progressVisibility = disableAttributes ? View.VISIBLE : View.GONE; - sendOutcomeDialogProgressBar.setVisibility(progressVisibility); - - int buttonVisibility = disableAttributes ? View.GONE : View.VISIBLE; - sendOutcomeAlertDialog.getPositiveButtonElement().setVisibility(buttonVisibility); - sendOutcomeAlertDialog.getNegativeButtonElement().setVisibility(buttonVisibility); - - sendOutcomeAlertDialog.getPositiveButtonElement().setEnabled(!disableAttributes); - sendOutcomeAlertDialog.getNegativeButtonElement().setEnabled(!disableAttributes); - sendOutcomeAlertDialog.setIsCancelable(!disableAttributes); - } - - }).setNegativeButton(Text.BUTTON_CANCEL, null); - sendOutcomeAlertDialog.show(); - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Font.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Font.java deleted file mode 100644 index aff8304a73..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Font.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.content.Context; -import android.graphics.Typeface; -import com.google.android.material.textfield.TextInputLayout; -import android.view.View; -import android.widget.TextView; - -public class Font { - - public Typeface saralaRegular; - public Typeface saralaBold; - - - public Font(Context context) { - saralaRegular = Typeface.createFromAsset(context.getAssets(), "fonts/Sarala-Regular.ttf"); - saralaBold = Typeface.createFromAsset(context.getAssets(), "fonts/Sarala-Bold.ttf"); - } - - public void applyFont(View view, Typeface typeface) { - if (view instanceof TextView) { - ((TextView) view).setTypeface(typeface); - } else if (view instanceof TextInputLayout) { - ((TextInputLayout) view).setTypeface(typeface); - } - } - -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/IntentTo.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/IntentTo.java deleted file mode 100644 index d99f53b339..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/IntentTo.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.app.Activity; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -import androidx.annotation.RequiresApi; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.activity.MainActivity; - -public class IntentTo { - - private Context context; - - public IntentTo(Context context) { - this.context = context; - } - - @RequiresApi(api = Build.VERSION_CODES.N) - public void mainActivity() { - Intent mainActivityIntent = new Intent(context, MainActivity.class); - ComponentName componentName = mainActivityIntent.getComponent(); - mainActivityIntent = Intent.makeRestartActivityTask(componentName); - context.startActivity(mainActivityIntent); - ((Activity) context).overridePendingTransition(R.anim.fade_in, R.anim.fade_out); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/InterfaceUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/InterfaceUtil.java deleted file mode 100644 index 48bf7b918f..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/InterfaceUtil.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.app.Activity; -import android.content.Context; -import android.view.View; -import android.view.inputmethod.InputMethodManager; - -public class InterfaceUtil { - - public static float getScreenDensity(Context context) { - return context.getResources().getDisplayMetrics().density; - } - - public static int getScreenWidth(Context context) { - return ((Activity) context).getWindowManager().getDefaultDisplay().getWidth(); - } - - public static int getScreenHeight(Context context) { - return ((Activity) context).getWindowManager().getDefaultDisplay().getHeight(); - } - - public static void showKeyboardFrom(Context context) { - InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); - } - - public static void hideKeyboardFrom(Context context, View view) { - InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java deleted file mode 100644 index 9a026c5f47..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.onesignal.sdktest.util; - -import com.google.android.material.textfield.TextInputLayout; -import android.util.Patterns; - -import com.onesignal.sdktest.constant.Text; - -public class ProfileUtil { - - public enum FieldType { - - APP_ID("App Id"), - ALIAS("Alias"), - EMAIL("Email"), - SMS("SMS"), - EXTERNAL_USER_ID("External User Id"), - - TAG("Tags"), - TRIGGER("Triggers"); - - private final String title; - - FieldType(String title) { - this.title = title; - } - - public String getTitle() { - return title; - } - } - - private static boolean isAppIdValid(TextInputLayout appIdTextInputLayout) { - appIdTextInputLayout.setErrorEnabled(false); - if (appIdTextInputLayout.getEditText() != null) { - String appId = appIdTextInputLayout.getEditText().getText().toString().trim(); - if (appId.isEmpty()) { - appIdTextInputLayout.setError(Text.APP_ID_IS_REQUIRED); - return false; - } - if (appId.length() != 36) { - appIdTextInputLayout.setError(Text.INVALID_APP_ID); - return false; - } - } else { - appIdTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - private static boolean isAliasValid(TextInputLayout appIdTextInputLayout) { - appIdTextInputLayout.setErrorEnabled(false); - if (appIdTextInputLayout.getEditText() != null) { - String aliasLabel = appIdTextInputLayout.getEditText().getText().toString().trim(); - if (aliasLabel.isEmpty()) { - appIdTextInputLayout.setError(Text.ALIAS_LABEL_IS_REQUIRED); - return false; - } - } else { - appIdTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - public static boolean isEmailValid(TextInputLayout emailTextInputLayout) { - emailTextInputLayout.setErrorEnabled(false); - if (emailTextInputLayout.getEditText() != null) { - String email = emailTextInputLayout.getEditText().getText().toString().trim(); - if (email.isEmpty()) { - emailTextInputLayout.setError(Text.EMAIL_IS_REQUIRED); - return false; - } - if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { - emailTextInputLayout.setError(Text.INVALID_EMAIL); - return false; - } - } else { - emailTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - public static boolean isSMSValid(TextInputLayout smsTextInputLayout) { - smsTextInputLayout.setErrorEnabled(false); - if (smsTextInputLayout.getEditText() != null) { - String smsNumber = smsTextInputLayout.getEditText().getText().toString().trim(); - if (smsNumber.isEmpty()) { - smsTextInputLayout.setError(Text.SMS_IS_REQUIRED); - return false; - } - } else { - smsTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - private static boolean isExternalUserIdValid(TextInputLayout externalUserIdTextInputLayout) { - externalUserIdTextInputLayout.setErrorEnabled(false); - if (externalUserIdTextInputLayout.getEditText() != null) { - String externalUserId = externalUserIdTextInputLayout.getEditText().getText().toString().trim(); - if (externalUserId.isEmpty()) { - externalUserIdTextInputLayout.setError(Text.EXTERNAL_USER_ID_IS_REQUIRED); - return false; - } - } else { - externalUserIdTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - private static boolean isKeyValid(TextInputLayout keyTextInputLayout) { - keyTextInputLayout.setErrorEnabled(false); - if (keyTextInputLayout.getEditText() != null) { - String key = keyTextInputLayout.getEditText().getText().toString().trim(); - if (key.isEmpty()) { - keyTextInputLayout.setError(Text.KEY_IS_REQUIRED); - return false; - } - } else { - keyTextInputLayout.setError(Text.ERROR); - return false; - } - return true; - } - - static boolean isContentValid(FieldType field, TextInputLayout alertDialogTextInputLayout) { - switch (field) { - case APP_ID: - return isAppIdValid(alertDialogTextInputLayout); - case ALIAS: - return isAliasValid(alertDialogTextInputLayout); - case EMAIL: - return isEmailValid(alertDialogTextInputLayout); - case SMS: - return isSMSValid(alertDialogTextInputLayout); - case EXTERNAL_USER_ID: - return isExternalUserIdValid(alertDialogTextInputLayout); - case TAG: - case TRIGGER: - return isKeyValid(alertDialogTextInputLayout); - } - return false; - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java deleted file mode 100644 index 5cb286d7bf..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.content.Context; -import android.content.SharedPreferences; - -import com.onesignal.sdktest.constant.Text; - -public class SharedPreferenceUtil { - - private static final String APP_SHARED_PREFS = "com.onesignal.sdktest"; - - public static final String OS_APP_ID_SHARED_PREF = "OS_APP_ID_SHARED_PREF"; - private static final String PRIVACY_CONSENT_SHARED_PREF = "PRIVACY_CONSENT_SHARED_PREF"; - public static final String USER_EXTERNAL_USER_ID_SHARED_PREF = "USER_EXTERNAL_USER_ID_SHARED_PREF"; - private static final String LOCATION_SHARED_PREF = "LOCATION_SHARED_PREF"; - private static final String IN_APP_MESSAGING_PAUSED_PREF = "IN_APP_MESSAGING_PAUSED_PREF"; - - private static SharedPreferences getSharedPreference(Context context) { - return context.getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); - } - - public static boolean exists(Context context, String key) { - return getSharedPreference(context).contains(key); - } - - public static String getOneSignalAppId(Context context) { - return getSharedPreference(context).getString(OS_APP_ID_SHARED_PREF, "77e32082-ea27-42e3-a898-c72e141824ef"); - } - - public static boolean getUserPrivacyConsent(Context context) { - return getSharedPreference(context).getBoolean(PRIVACY_CONSENT_SHARED_PREF, false); - } - - public static String getCachedUserExternalUserId(Context context) { - return getSharedPreference(context).getString(USER_EXTERNAL_USER_ID_SHARED_PREF, Text.EMPTY); - } - - public static boolean getCachedLocationSharedStatus(Context context) { - return getSharedPreference(context).getBoolean(LOCATION_SHARED_PREF, false); - } - - public static boolean getCachedInAppMessagingPausedStatus(Context context) { - return getSharedPreference(context).getBoolean(IN_APP_MESSAGING_PAUSED_PREF, true); - } - - public static void cacheOneSignalAppId(Context context, String appId) { - getSharedPreference(context).edit().putString(OS_APP_ID_SHARED_PREF, appId).apply(); - } - - public static void cacheUserPrivacyConsent(Context context, boolean privacyConsent) { - getSharedPreference(context).edit().putBoolean(PRIVACY_CONSENT_SHARED_PREF, privacyConsent).apply(); - } - - public static void cacheUserExternalUserId(Context context, String userId) { - getSharedPreference(context).edit().putString(USER_EXTERNAL_USER_ID_SHARED_PREF, userId).apply(); - } - - public static void cacheLocationSharedStatus(Context context, boolean subscribed) { - getSharedPreference(context).edit().putBoolean(LOCATION_SHARED_PREF, subscribed).apply(); - } - - public static void cacheInAppMessagingPausedStatus(Context context, boolean paused) { - getSharedPreference(context).edit().putBoolean(IN_APP_MESSAGING_PAUSED_PREF, paused).apply(); - } -} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Toaster.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Toaster.java deleted file mode 100644 index d41aafd1be..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Toaster.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.onesignal.sdktest.util; - -import android.app.Activity; -import android.content.Context; -import android.graphics.drawable.Drawable; -import androidx.cardview.widget.CardView; -import android.view.Gravity; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import com.onesignal.sdktest.R; -import com.onesignal.sdktest.constant.Text; -import com.onesignal.sdktest.type.ToastType; - -public class Toaster { - - private Context context; - private Font font; - - public Toaster(Context context) { - this.context = context; - - font = new Font(context); - } - - public void makeToast(String bread) { - Toast.makeText(context, bread, Toast.LENGTH_SHORT).show(); - } - - public void makeLongToast(String bread) { - Toast.makeText(context, bread, Toast.LENGTH_LONG).show(); - } - - public void makeCustomViewToast(String bread, ToastType toastType) { - View toastView = ((Activity) context).getLayoutInflater().inflate(R.layout.toaster_toast_card_layout, null, false); - CardView toastCardView = toastView.findViewById(R.id.toaster_toast_card_view); - ImageView toastIcon = toastView.findViewById(R.id.toaster_toast_image_view); - TextView toastTextView = toastView.findViewById(R.id.toaster_toast_text_view); - - int color = context.getResources().getColor(toastType.getColor()); - toastCardView.setCardBackgroundColor(color); - - toastTextView.setTypeface(font.saralaBold); - toastTextView.setText(bread); - - Drawable icon = context.getResources().getDrawable(toastType.getIcon()); - toastIcon.setImageDrawable(icon); - - Toast toast = Toast.makeText(context, Text.EMPTY, Toast.LENGTH_LONG); - toast.setGravity(Gravity.CENTER, 0, (int) (InterfaceUtil.getScreenHeight(context) * 0.25f)); - toast.setView(toastView); - toast.show(); - } - -} \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Util.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Util.java deleted file mode 100644 index 737c927a78..0000000000 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Util.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.onesignal.sdktest.util; - -public class Util { - - public static boolean isBoolean(String string) { - string = string.toLowerCase(); - return (string.equals("true") || string.equals("false")); - } - - public static boolean isInteger(String string) { - try { - Long.parseLong(string); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - public static boolean isFloat(String string) { - try { - Double.parseDouble(string); - return true; - } catch (NumberFormatException e) { - return false; - } - } - -} diff --git a/Examples/OneSignalDemo/app/src/main/res/anim/fade_in.xml b/Examples/OneSignalDemo/app/src/main/res/anim/fade_in.xml deleted file mode 100644 index 508851c6d5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/anim/fade_in.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/anim/fade_out.xml b/Examples/OneSignalDemo/app/src/main/res/anim/fade_out.xml deleted file mode 100644 index 3be6cf46b7..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/anim/fade_out.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_red_white.xml b/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_red_white.xml deleted file mode 100644 index 9ee1d9ebe6..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_red_white.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_white_red.xml b/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_white_red.xml deleted file mode 100644 index 80114e3322..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable-v21/ripple_selector_white_red.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/divider.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/divider.xml deleted file mode 100644 index 453e94ec1c..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/divider.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/no_divider.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/no_divider.xml deleted file mode 100644 index d4943f5968..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/no_divider.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_red_white.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_red_white.xml deleted file mode 100644 index f3a53ae07f..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_red_white.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_white_red.xml b/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_white_red.xml deleted file mode 100644 index b042e412eb..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/drawable/ripple_selector_white_red.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/activity_secondary.xml b/Examples/OneSignalDemo/app/src/main/res/layout/activity_secondary.xml deleted file mode 100644 index 267817f25b..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/activity_secondary.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/add_pair_alert_dialog_layout.xml b/Examples/OneSignalDemo/app/src/main/res/layout/add_pair_alert_dialog_layout.xml deleted file mode 100644 index dd54164959..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/add_pair_alert_dialog_layout.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/enum_selection_recycler_view_item_layout.xml b/Examples/OneSignalDemo/app/src/main/res/layout/enum_selection_recycler_view_item_layout.xml deleted file mode 100644 index 6dbbc6d3a8..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/enum_selection_recycler_view_item_layout.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml b/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml deleted file mode 100644 index ee4ce93cb5..0000000000 --- a/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml +++ /dev/null @@ -1,1275 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -