From 99da6de2e8f9e01038b9048b5b2df3c2122d97c0 Mon Sep 17 00:00:00 2001 From: Andy Witrisna Date: Wed, 20 Nov 2024 12:38:06 -0800 Subject: [PATCH] SDKS-3595 Remove Deprecated Sample Apps --- .../workflows/bitbar-prepare-artifacts.yaml | 4 +- {samples => e2e}/app/.gitignore | 0 {samples => e2e}/app/build.gradle.kts | 0 {samples => e2e}/app/proguard-rules.pro | 0 .../example/app/ExampleInstrumentedTest.kt | 0 .../app/src/main/AndroidManifest.xml | 0 .../src/main/java/com/example/app/Alert.kt | 0 .../main/java/com/example/app/AppDrawer.kt | 0 .../main/java/com/example/app/AppNavHost.kt | 0 .../src/main/java/com/example/app/AuthApp.kt | 0 .../main/java/com/example/app/Destinations.kt | 0 .../src/main/java/com/example/app/Error.kt | 0 .../java/com/example/app/LogoutViewModel.kt | 0 .../main/java/com/example/app/MainActivity.kt | 0 .../java/com/example/app/MainViewModel.kt | 0 .../com/example/app/PreferenceViewModel.kt | 0 .../app/callback/AppIntegrityCallback.kt | 0 .../example/app/callback/AttributeInput.kt | 0 .../callback/BooleanAttributeInputCallback.kt | 0 .../example/app/callback/ChoiceCallback.kt | 0 .../app/callback/ConfirmationCallback.kt | 0 .../app/callback/DeviceBindingCallback.kt | 0 .../app/callback/DeviceProfileCallback.kt | 0 .../callback/DeviceSigningVerifierCallback.kt | 0 .../com/example/app/callback/IdPCallback.kt | 0 .../example/app/callback/KbaCreateCallback.kt | 0 .../com/example/app/callback/NameCallback.kt | 0 .../callback/NumberAttributeInputCallback.kt | 0 .../example/app/callback/PasswordCallback.kt | 0 .../PingOneProtectEvaluationCallback.kt | 0 .../PingOneProtectInitializeCallback.kt | 0 .../app/callback/PollingWaitCallback.kt | 0 .../example/app/callback/ReCaptchaCallback.kt | 0 .../callback/ReCaptchaEnterpriseCallback.kt | 0 .../example/app/callback/SelectIdPCallback.kt | 0 .../callback/StringAttributeInputCallback.kt | 0 .../callback/TermsAndConditionsCallback.kt | 0 .../example/app/callback/TextInputCallback.kt | 0 .../app/callback/TextOutputCallback.kt | 0 .../WebAuthnAuthenticationCallback.kt | 0 .../callback/WebAuthnRegistrationCallback.kt | 0 .../CustomAppPinDeviceAuthenticator.kt | 0 .../com/example/app/centralize/Centralize.kt | 0 .../centralize/CentralizeLoginViewModel.kt | 0 .../example/app/centralize/CentralizeState.kt | 0 .../example/app/device/DeviceProfileRoute.kt | 0 .../app/device/DeviceProfileViewModel.kt | 0 .../main/java/com/example/app/env/EnvRoute.kt | 0 .../java/com/example/app/env/EnvViewModel.kt | 9 +- .../main/java/com/example/app/ig/IGRoute.kt | 0 .../main/java/com/example/app/ig/IGState.kt | 0 .../com/example/app/ig/IGTransitionState.kt | 0 .../java/com/example/app/ig/IGViewModel.kt | 0 .../java/com/example/app/journey/Journey.kt | 0 .../com/example/app/journey/JourneyRoute.kt | 0 .../com/example/app/journey/JourneyState.kt | 0 .../example/app/journey/JourneyViewModel.kt | 0 .../app/selfservice/SelfServiceRoute.kt | 0 .../app/selfservice/SelfServiceState.kt | 0 .../app/selfservice/SelfServiceViewModel.kt | 6 +- .../com/example/app/setting/SettingRoute.kt | 0 .../com/example/app/setting/SettingState.kt | 0 .../app/setting/SettingTransitionState.kt | 0 .../example/app/setting/SettingViewModel.kt | 0 .../app/storage/CustomStorageWithFallback.kt | 0 .../com/example/app/storage/MemoryStorage.kt | 0 .../example/app/storage/MyCustomStorage.kt | 0 .../main/java/com/example/app/theme/Color.kt | 0 .../main/java/com/example/app/theme/Shape.kt | 0 .../main/java/com/example/app/theme/Theme.kt | 0 .../main/java/com/example/app/theme/Type.kt | 0 .../main/java/com/example/app/token/Token.kt | 0 .../java/com/example/app/token/TokenState.kt | 0 .../com/example/app/token/TokenViewModel.kt | 0 .../com/example/app/userkeys/UserKeyState.kt | 0 .../com/example/app/userkeys/UserKeysRoute.kt | 0 .../com/example/app/userkeys/UserKeysState.kt | 0 .../example/app/userkeys/UserKeysViewModel.kt | 0 .../example/app/userprofile/UserProfile.kt | 0 .../app/userprofile/UserProfileState.kt | 0 .../app/userprofile/UserProfileViewModel.kt | 0 .../com/example/app/webauthn/WebAuthnRoute.kt | 0 .../com/example/app/webauthn/WebAuthnState.kt | 0 .../example/app/webauthn/WebAuthnViewModel.kt | 0 .../src/main/res/animator/logo_animator.xml | 0 .../drawable-v24/ic_launcher_foreground.xml | 0 .../src/main/res/drawable/animated_logo.xml | 0 .../app/src/main/res/drawable/apple_black.png | Bin .../app/src/main/res/drawable/forgerock.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../app/src/main/res/drawable/ping_logo.xml | 0 .../src/main/res/font/montserrat_medium.ttf | Bin .../src/main/res/font/montserrat_regular.ttf | Bin .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../app/src/main/res/values-night/themes.xml | 0 .../app/src/main/res/values/colors.xml | 0 .../app/src/main/res/values/strings.xml | 0 .../app/src/main/res/values/themes.xml | 0 .../java/com/example/app/ExampleUnitTest.kt | 0 {samples => e2e}/debug.jks | Bin forgerock-auth-ui/build.gradle | 6 + samples/auth/.gitignore | 1 - samples/auth/build.gradle | 100 ---- samples/auth/proguard-rules.pro | 21 - samples/auth/src/main/AndroidManifest.xml | 119 ---- .../auth/src/main/ic_launcher-playstore.png | Bin 20519 -> 0 bytes samples/auth/src/main/ic_launcher-web.png | Bin 22656 -> 0 bytes samples/auth/src/main/ic_logo-playstore.png | Bin 20583 -> 0 bytes samples/auth/src/main/ic_logo-web.png | Bin 22397 -> 0 bytes .../auth/CustomCookieInterceptor.java | 37 -- .../auth/ForceAuthRequestInterceptor.java | 38 -- .../InjectHeaderAuthRequestInterceptor.java | 30 - .../java/org/forgerock/auth/MainActivity.java | 529 ------------------ .../forgerock/auth/MyCustomDeviceProfile.java | 77 --- .../auth/NoSessionRequestInterceptor.java | 38 -- .../forgerock/auth/TreeDialogFragment.java | 78 --- .../auth/WebAuthnKeysListActivity.java | 164 ------ .../drawable-v24/ic_launcher_foreground.xml | 41 -- .../res/drawable/ic_launcher_background.xml | 81 --- .../res/drawable/ic_launcher_foreground.xml | 20 - .../src/main/res/layout/activity_main.xml | 54 -- .../layout/activity_web_authn_keys_list.xml | 53 -- .../src/main/res/layout/fragment_tree.xml | 75 --- .../src/main/res/layout/web_authn_key_row.xml | 21 - samples/auth/src/main/res/menu/menu.xml | 61 -- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../main/res/mipmap-anydpi-v26/ic_logo.xml | 5 - .../res/mipmap-anydpi-v26/ic_logo_round.xml | 5 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1904 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 2243 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3799 -> 0 bytes .../auth/src/main/res/mipmap-hdpi/ic_logo.png | Bin 1933 -> 0 bytes .../res/mipmap-hdpi/ic_logo_foreground.png | Bin 2243 -> 0 bytes .../main/res/mipmap-hdpi/ic_logo_round.png | Bin 3873 -> 0 bytes .../src/main/res/mipmap-hdpi/ic_success.png | Bin 1340 -> 0 bytes .../main/res/mipmap-hdpi/ic_success_round.png | Bin 2962 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1164 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 1495 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2324 -> 0 bytes .../auth/src/main/res/mipmap-mdpi/ic_logo.png | Bin 1187 -> 0 bytes .../res/mipmap-mdpi/ic_logo_foreground.png | Bin 1495 -> 0 bytes .../main/res/mipmap-mdpi/ic_logo_round.png | Bin 2351 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_success.png | Bin 993 -> 0 bytes .../main/res/mipmap-mdpi/ic_success_round.png | Bin 1931 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 2723 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 3135 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 5579 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_logo.png | Bin 2731 -> 0 bytes .../res/mipmap-xhdpi/ic_logo_foreground.png | Bin 3135 -> 0 bytes .../main/res/mipmap-xhdpi/ic_logo_round.png | Bin 5644 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_success.png | Bin 1737 -> 0 bytes .../res/mipmap-xhdpi/ic_success_round.png | Bin 4164 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 4346 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 4866 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 8831 -> 0 bytes .../src/main/res/mipmap-xxhdpi/ic_logo.png | Bin 4352 -> 0 bytes .../res/mipmap-xxhdpi/ic_logo_foreground.png | Bin 4866 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_logo_round.png | Bin 8984 -> 0 bytes .../src/main/res/mipmap-xxhdpi/ic_success.png | Bin 2507 -> 0 bytes .../res/mipmap-xxhdpi/ic_success_round.png | Bin 6457 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 5903 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 6846 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 12760 -> 0 bytes .../src/main/res/mipmap-xxxhdpi/ic_logo.png | Bin 5955 -> 0 bytes .../res/mipmap-xxxhdpi/ic_logo_foreground.png | Bin 6846 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_logo_round.png | Bin 12890 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_success.png | Bin 3351 -> 0 bytes .../res/mipmap-xxxhdpi/ic_success_round.png | Bin 9248 -> 0 bytes samples/auth/src/main/res/values/colors.xml | 13 - samples/auth/src/main/res/values/dimens.xml | 13 - .../res/values/ic_launcher_background.xml | 4 - .../main/res/values/ic_logo_background.xml | 4 - samples/auth/src/main/res/values/strings.xml | 56 -- samples/auth/src/main/res/values/styles.xml | 35 -- samples/authenticator/.gitignore | 7 - samples/authenticator/build.gradle | 88 --- samples/authenticator/google-services.json | 40 -- samples/authenticator/proguard-rules.pro | 21 - .../src/main/AndroidManifest.xml | 114 ---- .../src/main/ic_launcher-playstore.png | Bin 12146 -> 0 bytes .../sample/camera/CameraScanActivity.java | 174 ------ .../sample/camera/QrCodeAnalyzer.java | 67 --- .../sample/controller/AuthenticatorModel.java | 214 ------- .../AuthenticatorModelListener.java | 20 - .../sample/controller/FcmService.java | 140 ----- .../controller/GooglePlayServicesUtil.java | 47 -- .../TestPushRequestInterceptor.java | 48 -- .../view/activity/AccountsActivity.java | 312 ----------- .../view/activity/AddMechanismActivity.java | 190 ------- .../activity/BaseNotificationActivity.java | 77 --- .../view/activity/DeleteAccountActivity.java | 69 --- .../view/activity/LauncherActivity.java | 39 -- .../view/activity/NotificationsActivity.java | 179 ------ .../activity/PushNotificationActivity.java | 389 ------------- .../sample/view/adapter/AccountAdapter.java | 88 --- .../view/adapter/NotificationAdapter.java | 72 --- .../view/layout/AccountDetailLayout.java | 182 ------ .../sample/view/layout/AccountLayout.java | 89 --- .../view/layout/MechanismIconLayout.java | 120 ---- .../view/layout/NotificationLayout.java | 117 ---- .../res/drawable-anydpi/icon_approved.xml | 11 - .../main/res/drawable-anydpi/icon_denied.xml | 11 - .../main/res/drawable-anydpi/icon_expired.xml | 11 - .../main/res/drawable-anydpi/icon_hotp.xml | 24 - .../res/drawable-anydpi/icon_notification.xml | 11 - .../main/res/drawable-anydpi/icon_pending.xml | 11 - .../main/res/drawable-anydpi/icon_push.xml | 24 - .../main/res/drawable-anydpi/icon_refresh.xml | 11 - .../main/res/drawable-anydpi/icon_totp.xml | 24 - .../main/res/drawable-hdpi/approvebutton.xml | 16 - .../src/main/res/drawable-hdpi/denybutton.xml | 16 - .../drawable-hdpi/forgerock_notification.png | Bin 699 -> 0 bytes .../main/res/drawable-hdpi/icon_approved.png | Bin 525 -> 0 bytes .../main/res/drawable-hdpi/icon_denied.png | Bin 506 -> 0 bytes .../main/res/drawable-hdpi/icon_expired.png | Bin 474 -> 0 bytes .../src/main/res/drawable-hdpi/icon_hotp.png | Bin 377 -> 0 bytes .../res/drawable-hdpi/icon_notification.png | Bin 335 -> 0 bytes .../main/res/drawable-hdpi/icon_pending.png | Bin 553 -> 0 bytes .../src/main/res/drawable-hdpi/icon_push.png | Bin 402 -> 0 bytes .../main/res/drawable-hdpi/icon_refresh.png | Bin 464 -> 0 bytes .../src/main/res/drawable-hdpi/icon_totp.png | Bin 372 -> 0 bytes .../drawable-hdpi/notification_background.xml | 13 - .../drawable-mdpi/forgerock_notification.png | Bin 418 -> 0 bytes .../main/res/drawable-mdpi/icon_approved.png | Bin 330 -> 0 bytes .../main/res/drawable-mdpi/icon_denied.png | Bin 335 -> 0 bytes .../main/res/drawable-mdpi/icon_expired.png | Bin 295 -> 0 bytes .../src/main/res/drawable-mdpi/icon_hotp.png | Bin 263 -> 0 bytes .../res/drawable-mdpi/icon_notification.png | Bin 235 -> 0 bytes .../main/res/drawable-mdpi/icon_pending.png | Bin 373 -> 0 bytes .../src/main/res/drawable-mdpi/icon_push.png | Bin 273 -> 0 bytes .../main/res/drawable-mdpi/icon_refresh.png | Bin 315 -> 0 bytes .../src/main/res/drawable-mdpi/icon_totp.png | Bin 267 -> 0 bytes .../drawable-xhdpi/forgerock_notification.png | Bin 1012 -> 0 bytes .../main/res/drawable-xhdpi/icon_approved.png | Bin 678 -> 0 bytes .../main/res/drawable-xhdpi/icon_denied.png | Bin 658 -> 0 bytes .../main/res/drawable-xhdpi/icon_expired.png | Bin 611 -> 0 bytes .../src/main/res/drawable-xhdpi/icon_hotp.png | Bin 434 -> 0 bytes .../res/drawable-xhdpi/icon_notification.png | Bin 386 -> 0 bytes .../main/res/drawable-xhdpi/icon_pending.png | Bin 732 -> 0 bytes .../src/main/res/drawable-xhdpi/icon_push.png | Bin 483 -> 0 bytes .../main/res/drawable-xhdpi/icon_refresh.png | Bin 596 -> 0 bytes .../src/main/res/drawable-xhdpi/icon_totp.png | Bin 454 -> 0 bytes .../forgerock_notification.png | Bin 1816 -> 0 bytes .../res/drawable-xxhdpi/icon_approved.png | Bin 945 -> 0 bytes .../main/res/drawable-xxhdpi/icon_denied.png | Bin 980 -> 0 bytes .../main/res/drawable-xxhdpi/icon_expired.png | Bin 853 -> 0 bytes .../main/res/drawable-xxhdpi/icon_hotp.png | Bin 604 -> 0 bytes .../res/drawable-xxhdpi/icon_notification.png | Bin 550 -> 0 bytes .../main/res/drawable-xxhdpi/icon_pending.png | Bin 1008 -> 0 bytes .../main/res/drawable-xxhdpi/icon_push.png | Bin 681 -> 0 bytes .../main/res/drawable-xxhdpi/icon_refresh.png | Bin 882 -> 0 bytes .../main/res/drawable-xxhdpi/icon_totp.png | Bin 621 -> 0 bytes .../new_notification_background.xml | 13 - .../forgerock_notification.png | Bin 2848 -> 0 bytes .../res/drawable/forgerock_logo_white.png | Bin 14706 -> 0 bytes .../res/drawable/forgerock_placeholder.png | Bin 42323 -> 0 bytes .../res/drawable/ic_launcher_foreground.xml | 15 - .../src/main/res/drawable/launch_screen.xml | 17 - .../src/main/res/drawable/launcher_logo.png | Bin 16962 -> 0 bytes .../src/main/res/layout/activity_account.xml | 40 -- .../res/layout/activity_account_delete.xml | 89 --- .../res/layout/activity_add_mechanism.xml | 22 - .../main/res/layout/activity_camera_scan.xml | 22 - .../src/main/res/layout/activity_launcher.xml | 26 - .../res/layout/activity_notifications.xml | 40 -- .../res/layout/activity_push_notification.xml | 175 ------ .../src/main/res/layout/layout_account.xml | 111 ---- .../main/res/layout/layout_account_detail.xml | 98 ---- .../main/res/layout/layout_mechanism_icon.xml | 40 -- .../main/res/layout/layout_notification.xml | 64 --- .../src/main/res/menu/account.xml | 15 - .../authenticator/src/main/res/menu/main.xml | 19 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1389 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3201 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 997 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 1953 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1898 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 4480 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 3090 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 7425 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4357 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 10677 -> 0 bytes .../src/main/res/values/colors.xml | 32 -- .../res/values/ic_launcher_background.xml | 4 - .../src/main/res/values/strings.xml | 95 ---- .../src/main/res/values/styles.xml | 61 -- .../main/res/xml/network_security_config.xml | 13 - samples/kotlin/.gitignore | 1 - samples/kotlin/build.gradle | 88 --- samples/kotlin/proguard-rules.pro | 21 - samples/kotlin/src/main/AndroidManifest.xml | 74 --- .../kotlinapp/ChoiceDialogFragment.kt | 82 --- .../forgerock/kotlinapp/FRSessionActivity.kt | 115 ---- .../kotlinapp/ForgeRockApplication.kt | 21 - .../com/forgerock/kotlinapp/MainActivity.kt | 306 ---------- .../forgerock/kotlinapp/NodeDialogFragment.kt | 128 ----- .../forgerock/kotlinapp/UserInfoFragment.kt | 97 ---- .../drawable-v24/ic_launcher_foreground.xml | 30 - .../res/drawable/ic_launcher_background.xml | 170 ------ .../src/main/res/layout/activity_main.xml | 50 -- .../src/main/res/layout/choice_node.xml | 56 -- .../src/main/res/layout/fragment_node.xml | 93 --- .../main/res/layout/fragment_user_info.xml | 112 ---- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1404 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2898 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 982 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1772 -> 0 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1900 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3918 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 2884 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5914 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3844 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 7778 -> 0 bytes .../src/main/res/values-night/themes.xml | 16 - samples/kotlin/src/main/res/values/colors.xml | 10 - .../kotlin/src/main/res/values/strings.xml | 40 -- samples/kotlin/src/main/res/values/themes.xml | 16 - samples/quickstart/.gitignore | 1 - samples/quickstart/build.gradle | 46 -- samples/quickstart/proguard-rules.pro | 21 - .../quickstart/src/main/AndroidManifest.xml | 36 -- .../forgerock/quickstart/MainActivity.java | 76 --- .../quickstart/NodeDialogFragment.java | 83 --- .../drawable-v24/ic_launcher_foreground.xml | 37 -- .../res/drawable/ic_launcher_background.xml | 177 ------ .../src/main/res/layout/activity_main.xml | 46 -- .../src/main/res/layout/fragment_node.xml | 80 --- .../res/mipmap-anydpi-v26/ic_launcher.xml | 12 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1404 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2898 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 982 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1772 -> 0 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1900 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3918 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 2884 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5914 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3844 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 7778 -> 0 bytes .../src/main/res/values-night/themes.xml | 23 - .../quickstart/src/main/res/values/colors.xml | 17 - .../src/main/res/values/strings.xml | 31 - .../quickstart/src/main/res/values/themes.xml | 23 - settings.gradle.kts | 21 +- 360 files changed, 17 insertions(+), 8176 deletions(-) rename {samples => e2e}/app/.gitignore (100%) rename {samples => e2e}/app/build.gradle.kts (100%) rename {samples => e2e}/app/proguard-rules.pro (100%) rename {samples => e2e}/app/src/androidTest/java/com/example/app/ExampleInstrumentedTest.kt (100%) rename {samples => e2e}/app/src/main/AndroidManifest.xml (100%) rename {samples => e2e}/app/src/main/java/com/example/app/Alert.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/AppDrawer.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/AppNavHost.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/AuthApp.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/Destinations.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/Error.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/LogoutViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/MainActivity.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/MainViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/PreferenceViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/AppIntegrityCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/AttributeInput.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/BooleanAttributeInputCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/ChoiceCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/ConfirmationCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/DeviceBindingCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/DeviceProfileCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/IdPCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/KbaCreateCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/NameCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/NumberAttributeInputCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/PasswordCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/PingOneProtectEvaluationCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/PingOneProtectInitializeCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/PollingWaitCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/ReCaptchaCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/ReCaptchaEnterpriseCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/SelectIdPCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/StringAttributeInputCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/TermsAndConditionsCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/TextInputCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/TextOutputCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/WebAuthnAuthenticationCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/WebAuthnRegistrationCallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/callback/binding/CustomAppPinDeviceAuthenticator.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/centralize/Centralize.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/centralize/CentralizeLoginViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/centralize/CentralizeState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/device/DeviceProfileRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/device/DeviceProfileViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/env/EnvRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/env/EnvViewModel.kt (96%) rename {samples => e2e}/app/src/main/java/com/example/app/ig/IGRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/ig/IGState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/ig/IGTransitionState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/ig/IGViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/journey/Journey.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/journey/JourneyRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/journey/JourneyState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/journey/JourneyViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/selfservice/SelfServiceRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/selfservice/SelfServiceState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/selfservice/SelfServiceViewModel.kt (94%) rename {samples => e2e}/app/src/main/java/com/example/app/setting/SettingRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/setting/SettingState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/setting/SettingTransitionState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/setting/SettingViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/storage/CustomStorageWithFallback.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/storage/MemoryStorage.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/storage/MyCustomStorage.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/theme/Color.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/theme/Shape.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/theme/Theme.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/theme/Type.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/token/Token.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/token/TokenState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/token/TokenViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/userkeys/UserKeyState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/userkeys/UserKeysRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/userkeys/UserKeysState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/userkeys/UserKeysViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/userprofile/UserProfile.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/userprofile/UserProfileState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/userprofile/UserProfileViewModel.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/webauthn/WebAuthnRoute.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/webauthn/WebAuthnState.kt (100%) rename {samples => e2e}/app/src/main/java/com/example/app/webauthn/WebAuthnViewModel.kt (100%) rename {samples => e2e}/app/src/main/res/animator/logo_animator.xml (100%) rename {samples => e2e}/app/src/main/res/drawable-v24/ic_launcher_foreground.xml (100%) rename {samples => e2e}/app/src/main/res/drawable/animated_logo.xml (100%) rename {samples => e2e}/app/src/main/res/drawable/apple_black.png (100%) rename {samples => e2e}/app/src/main/res/drawable/forgerock.xml (100%) rename {samples => e2e}/app/src/main/res/drawable/ic_launcher_background.xml (100%) rename {samples => e2e}/app/src/main/res/drawable/ping_logo.xml (100%) rename {samples => e2e}/app/src/main/res/font/montserrat_medium.ttf (100%) rename {samples => e2e}/app/src/main/res/font/montserrat_regular.ttf (100%) rename {samples => e2e}/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {samples => e2e}/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {samples => e2e}/app/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {samples => e2e}/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {samples => e2e}/app/src/main/res/values-night/themes.xml (100%) rename {samples => e2e}/app/src/main/res/values/colors.xml (100%) rename {samples => e2e}/app/src/main/res/values/strings.xml (100%) rename {samples => e2e}/app/src/main/res/values/themes.xml (100%) rename {samples => e2e}/app/src/test/java/com/example/app/ExampleUnitTest.kt (100%) rename {samples => e2e}/debug.jks (100%) delete mode 100644 samples/auth/.gitignore delete mode 100644 samples/auth/build.gradle delete mode 100644 samples/auth/proguard-rules.pro delete mode 100644 samples/auth/src/main/AndroidManifest.xml delete mode 100644 samples/auth/src/main/ic_launcher-playstore.png delete mode 100644 samples/auth/src/main/ic_launcher-web.png delete mode 100644 samples/auth/src/main/ic_logo-playstore.png delete mode 100644 samples/auth/src/main/ic_logo-web.png delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/CustomCookieInterceptor.java delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/ForceAuthRequestInterceptor.java delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/InjectHeaderAuthRequestInterceptor.java delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/MainActivity.java delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/MyCustomDeviceProfile.java delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/NoSessionRequestInterceptor.java delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/TreeDialogFragment.java delete mode 100644 samples/auth/src/main/java/org/forgerock/auth/WebAuthnKeysListActivity.java delete mode 100644 samples/auth/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 samples/auth/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 samples/auth/src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 samples/auth/src/main/res/layout/activity_main.xml delete mode 100644 samples/auth/src/main/res/layout/activity_web_authn_keys_list.xml delete mode 100644 samples/auth/src/main/res/layout/fragment_tree.xml delete mode 100644 samples/auth/src/main/res/layout/web_authn_key_row.xml delete mode 100644 samples/auth/src/main/res/menu/menu.xml delete mode 100644 samples/auth/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 samples/auth/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 samples/auth/src/main/res/mipmap-anydpi-v26/ic_logo.xml delete mode 100644 samples/auth/src/main/res/mipmap-anydpi-v26/ic_logo_round.xml delete mode 100755 samples/auth/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 samples/auth/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 samples/auth/src/main/res/mipmap-hdpi/ic_logo.png delete mode 100644 samples/auth/src/main/res/mipmap-hdpi/ic_logo_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-hdpi/ic_logo_round.png delete mode 100644 samples/auth/src/main/res/mipmap-hdpi/ic_success.png delete mode 100644 samples/auth/src/main/res/mipmap-hdpi/ic_success_round.png delete mode 100755 samples/auth/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 samples/auth/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 samples/auth/src/main/res/mipmap-mdpi/ic_logo.png delete mode 100644 samples/auth/src/main/res/mipmap-mdpi/ic_logo_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-mdpi/ic_logo_round.png delete mode 100644 samples/auth/src/main/res/mipmap-mdpi/ic_success.png delete mode 100644 samples/auth/src/main/res/mipmap-mdpi/ic_success_round.png delete mode 100755 samples/auth/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 samples/auth/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 samples/auth/src/main/res/mipmap-xhdpi/ic_logo.png delete mode 100644 samples/auth/src/main/res/mipmap-xhdpi/ic_logo_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-xhdpi/ic_logo_round.png delete mode 100644 samples/auth/src/main/res/mipmap-xhdpi/ic_success.png delete mode 100644 samples/auth/src/main/res/mipmap-xhdpi/ic_success_round.png delete mode 100755 samples/auth/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 samples/auth/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 samples/auth/src/main/res/mipmap-xxhdpi/ic_logo.png delete mode 100644 samples/auth/src/main/res/mipmap-xxhdpi/ic_logo_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-xxhdpi/ic_logo_round.png delete mode 100644 samples/auth/src/main/res/mipmap-xxhdpi/ic_success.png delete mode 100644 samples/auth/src/main/res/mipmap-xxhdpi/ic_success_round.png delete mode 100755 samples/auth/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 samples/auth/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 samples/auth/src/main/res/mipmap-xxxhdpi/ic_logo.png delete mode 100644 samples/auth/src/main/res/mipmap-xxxhdpi/ic_logo_foreground.png delete mode 100644 samples/auth/src/main/res/mipmap-xxxhdpi/ic_logo_round.png delete mode 100644 samples/auth/src/main/res/mipmap-xxxhdpi/ic_success.png delete mode 100644 samples/auth/src/main/res/mipmap-xxxhdpi/ic_success_round.png delete mode 100644 samples/auth/src/main/res/values/colors.xml delete mode 100644 samples/auth/src/main/res/values/dimens.xml delete mode 100644 samples/auth/src/main/res/values/ic_launcher_background.xml delete mode 100644 samples/auth/src/main/res/values/ic_logo_background.xml delete mode 100644 samples/auth/src/main/res/values/strings.xml delete mode 100644 samples/auth/src/main/res/values/styles.xml delete mode 100644 samples/authenticator/.gitignore delete mode 100644 samples/authenticator/build.gradle delete mode 100644 samples/authenticator/google-services.json delete mode 100644 samples/authenticator/proguard-rules.pro delete mode 100644 samples/authenticator/src/main/AndroidManifest.xml delete mode 100644 samples/authenticator/src/main/ic_launcher-playstore.png delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/camera/CameraScanActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/camera/QrCodeAnalyzer.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/controller/AuthenticatorModel.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/controller/AuthenticatorModelListener.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/controller/FcmService.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/controller/GooglePlayServicesUtil.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/controller/TestPushRequestInterceptor.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/activity/AccountsActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/activity/AddMechanismActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/activity/BaseNotificationActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/activity/DeleteAccountActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/activity/LauncherActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/activity/NotificationsActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/activity/PushNotificationActivity.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/adapter/AccountAdapter.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/adapter/NotificationAdapter.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/layout/AccountDetailLayout.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/layout/AccountLayout.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/layout/MechanismIconLayout.java delete mode 100644 samples/authenticator/src/main/java/org/forgerock/authenticator/sample/view/layout/NotificationLayout.java delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_approved.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_denied.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_expired.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_hotp.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_notification.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_pending.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_push.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_refresh.xml delete mode 100644 samples/authenticator/src/main/res/drawable-anydpi/icon_totp.xml delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/approvebutton.xml delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/denybutton.xml delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/forgerock_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_approved.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_denied.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_expired.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_hotp.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_pending.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_push.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_refresh.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/icon_totp.png delete mode 100644 samples/authenticator/src/main/res/drawable-hdpi/notification_background.xml delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/forgerock_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_approved.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_denied.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_expired.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_hotp.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_pending.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_push.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_refresh.png delete mode 100644 samples/authenticator/src/main/res/drawable-mdpi/icon_totp.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/forgerock_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_approved.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_denied.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_expired.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_hotp.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_pending.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_push.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_refresh.png delete mode 100644 samples/authenticator/src/main/res/drawable-xhdpi/icon_totp.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/forgerock_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_approved.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_denied.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_expired.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_hotp.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_pending.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_push.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_refresh.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/icon_totp.png delete mode 100644 samples/authenticator/src/main/res/drawable-xxhdpi/new_notification_background.xml delete mode 100644 samples/authenticator/src/main/res/drawable-xxxhdpi/forgerock_notification.png delete mode 100644 samples/authenticator/src/main/res/drawable/forgerock_logo_white.png delete mode 100644 samples/authenticator/src/main/res/drawable/forgerock_placeholder.png delete mode 100644 samples/authenticator/src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 samples/authenticator/src/main/res/drawable/launch_screen.xml delete mode 100644 samples/authenticator/src/main/res/drawable/launcher_logo.png delete mode 100644 samples/authenticator/src/main/res/layout/activity_account.xml delete mode 100644 samples/authenticator/src/main/res/layout/activity_account_delete.xml delete mode 100644 samples/authenticator/src/main/res/layout/activity_add_mechanism.xml delete mode 100755 samples/authenticator/src/main/res/layout/activity_camera_scan.xml delete mode 100644 samples/authenticator/src/main/res/layout/activity_launcher.xml delete mode 100644 samples/authenticator/src/main/res/layout/activity_notifications.xml delete mode 100644 samples/authenticator/src/main/res/layout/activity_push_notification.xml delete mode 100644 samples/authenticator/src/main/res/layout/layout_account.xml delete mode 100644 samples/authenticator/src/main/res/layout/layout_account_detail.xml delete mode 100644 samples/authenticator/src/main/res/layout/layout_mechanism_icon.xml delete mode 100644 samples/authenticator/src/main/res/layout/layout_notification.xml delete mode 100644 samples/authenticator/src/main/res/menu/account.xml delete mode 100644 samples/authenticator/src/main/res/menu/main.xml delete mode 100644 samples/authenticator/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 samples/authenticator/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 samples/authenticator/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 samples/authenticator/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 samples/authenticator/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 samples/authenticator/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 samples/authenticator/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 samples/authenticator/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 samples/authenticator/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 samples/authenticator/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 samples/authenticator/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 samples/authenticator/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 samples/authenticator/src/main/res/values/colors.xml delete mode 100644 samples/authenticator/src/main/res/values/ic_launcher_background.xml delete mode 100644 samples/authenticator/src/main/res/values/strings.xml delete mode 100644 samples/authenticator/src/main/res/values/styles.xml delete mode 100644 samples/authenticator/src/main/res/xml/network_security_config.xml delete mode 100644 samples/kotlin/.gitignore delete mode 100644 samples/kotlin/build.gradle delete mode 100644 samples/kotlin/proguard-rules.pro delete mode 100644 samples/kotlin/src/main/AndroidManifest.xml delete mode 100644 samples/kotlin/src/main/java/com/forgerock/kotlinapp/ChoiceDialogFragment.kt delete mode 100644 samples/kotlin/src/main/java/com/forgerock/kotlinapp/FRSessionActivity.kt delete mode 100644 samples/kotlin/src/main/java/com/forgerock/kotlinapp/ForgeRockApplication.kt delete mode 100644 samples/kotlin/src/main/java/com/forgerock/kotlinapp/MainActivity.kt delete mode 100644 samples/kotlin/src/main/java/com/forgerock/kotlinapp/NodeDialogFragment.kt delete mode 100644 samples/kotlin/src/main/java/com/forgerock/kotlinapp/UserInfoFragment.kt delete mode 100644 samples/kotlin/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 samples/kotlin/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 samples/kotlin/src/main/res/layout/activity_main.xml delete mode 100644 samples/kotlin/src/main/res/layout/choice_node.xml delete mode 100644 samples/kotlin/src/main/res/layout/fragment_node.xml delete mode 100644 samples/kotlin/src/main/res/layout/fragment_user_info.xml delete mode 100644 samples/kotlin/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 samples/kotlin/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 samples/kotlin/src/main/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 samples/kotlin/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 samples/kotlin/src/main/res/values-night/themes.xml delete mode 100644 samples/kotlin/src/main/res/values/colors.xml delete mode 100644 samples/kotlin/src/main/res/values/strings.xml delete mode 100644 samples/kotlin/src/main/res/values/themes.xml delete mode 100644 samples/quickstart/.gitignore delete mode 100644 samples/quickstart/build.gradle delete mode 100644 samples/quickstart/proguard-rules.pro delete mode 100644 samples/quickstart/src/main/AndroidManifest.xml delete mode 100644 samples/quickstart/src/main/java/org/forgerock/quickstart/MainActivity.java delete mode 100644 samples/quickstart/src/main/java/org/forgerock/quickstart/NodeDialogFragment.java delete mode 100644 samples/quickstart/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 samples/quickstart/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 samples/quickstart/src/main/res/layout/activity_main.xml delete mode 100644 samples/quickstart/src/main/res/layout/fragment_node.xml delete mode 100644 samples/quickstart/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 samples/quickstart/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 samples/quickstart/src/main/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 samples/quickstart/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 samples/quickstart/src/main/res/values-night/themes.xml delete mode 100644 samples/quickstart/src/main/res/values/colors.xml delete mode 100644 samples/quickstart/src/main/res/values/strings.xml delete mode 100644 samples/quickstart/src/main/res/values/themes.xml diff --git a/.github/workflows/bitbar-prepare-artifacts.yaml b/.github/workflows/bitbar-prepare-artifacts.yaml index e68585c2..caaa34be 100644 --- a/.github/workflows/bitbar-prepare-artifacts.yaml +++ b/.github/workflows/bitbar-prepare-artifacts.yaml @@ -50,7 +50,7 @@ jobs: - name: Sign app-debug-androidTest.apk uses: r0adkll/sign-android-release@v1 with: - releaseDirectory: samples/app/build/outputs/apk/androidTest/debug + releaseDirectory: e2e/app/build/outputs/apk/androidTest/debug signingKeyBase64: ${{ secrets.SIGNING_KEYSTORE }} alias: ${{ secrets.SIGNING_ALIAS }} keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }} @@ -76,7 +76,7 @@ jobs: if: success() with: name: app-debug-androidTest-signed.apk - path: samples/app/build/outputs/apk/androidTest/debug/app-debug-androidTest-signed.apk + path: e2e/app/build/outputs/apk/androidTest/debug/app-debug-androidTest-signed.apk - name: Publish forgerock-integration-tests-debug-androidTest-signed.apk uses: actions/upload-artifact@v3 diff --git a/samples/app/.gitignore b/e2e/app/.gitignore similarity index 100% rename from samples/app/.gitignore rename to e2e/app/.gitignore diff --git a/samples/app/build.gradle.kts b/e2e/app/build.gradle.kts similarity index 100% rename from samples/app/build.gradle.kts rename to e2e/app/build.gradle.kts diff --git a/samples/app/proguard-rules.pro b/e2e/app/proguard-rules.pro similarity index 100% rename from samples/app/proguard-rules.pro rename to e2e/app/proguard-rules.pro diff --git a/samples/app/src/androidTest/java/com/example/app/ExampleInstrumentedTest.kt b/e2e/app/src/androidTest/java/com/example/app/ExampleInstrumentedTest.kt similarity index 100% rename from samples/app/src/androidTest/java/com/example/app/ExampleInstrumentedTest.kt rename to e2e/app/src/androidTest/java/com/example/app/ExampleInstrumentedTest.kt diff --git a/samples/app/src/main/AndroidManifest.xml b/e2e/app/src/main/AndroidManifest.xml similarity index 100% rename from samples/app/src/main/AndroidManifest.xml rename to e2e/app/src/main/AndroidManifest.xml diff --git a/samples/app/src/main/java/com/example/app/Alert.kt b/e2e/app/src/main/java/com/example/app/Alert.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/Alert.kt rename to e2e/app/src/main/java/com/example/app/Alert.kt diff --git a/samples/app/src/main/java/com/example/app/AppDrawer.kt b/e2e/app/src/main/java/com/example/app/AppDrawer.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/AppDrawer.kt rename to e2e/app/src/main/java/com/example/app/AppDrawer.kt diff --git a/samples/app/src/main/java/com/example/app/AppNavHost.kt b/e2e/app/src/main/java/com/example/app/AppNavHost.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/AppNavHost.kt rename to e2e/app/src/main/java/com/example/app/AppNavHost.kt diff --git a/samples/app/src/main/java/com/example/app/AuthApp.kt b/e2e/app/src/main/java/com/example/app/AuthApp.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/AuthApp.kt rename to e2e/app/src/main/java/com/example/app/AuthApp.kt diff --git a/samples/app/src/main/java/com/example/app/Destinations.kt b/e2e/app/src/main/java/com/example/app/Destinations.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/Destinations.kt rename to e2e/app/src/main/java/com/example/app/Destinations.kt diff --git a/samples/app/src/main/java/com/example/app/Error.kt b/e2e/app/src/main/java/com/example/app/Error.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/Error.kt rename to e2e/app/src/main/java/com/example/app/Error.kt diff --git a/samples/app/src/main/java/com/example/app/LogoutViewModel.kt b/e2e/app/src/main/java/com/example/app/LogoutViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/LogoutViewModel.kt rename to e2e/app/src/main/java/com/example/app/LogoutViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/MainActivity.kt b/e2e/app/src/main/java/com/example/app/MainActivity.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/MainActivity.kt rename to e2e/app/src/main/java/com/example/app/MainActivity.kt diff --git a/samples/app/src/main/java/com/example/app/MainViewModel.kt b/e2e/app/src/main/java/com/example/app/MainViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/MainViewModel.kt rename to e2e/app/src/main/java/com/example/app/MainViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/PreferenceViewModel.kt b/e2e/app/src/main/java/com/example/app/PreferenceViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/PreferenceViewModel.kt rename to e2e/app/src/main/java/com/example/app/PreferenceViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/callback/AppIntegrityCallback.kt b/e2e/app/src/main/java/com/example/app/callback/AppIntegrityCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/AppIntegrityCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/AppIntegrityCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/AttributeInput.kt b/e2e/app/src/main/java/com/example/app/callback/AttributeInput.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/AttributeInput.kt rename to e2e/app/src/main/java/com/example/app/callback/AttributeInput.kt diff --git a/samples/app/src/main/java/com/example/app/callback/BooleanAttributeInputCallback.kt b/e2e/app/src/main/java/com/example/app/callback/BooleanAttributeInputCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/BooleanAttributeInputCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/BooleanAttributeInputCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/ChoiceCallback.kt b/e2e/app/src/main/java/com/example/app/callback/ChoiceCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/ChoiceCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/ChoiceCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/ConfirmationCallback.kt b/e2e/app/src/main/java/com/example/app/callback/ConfirmationCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/ConfirmationCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/ConfirmationCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/DeviceBindingCallback.kt b/e2e/app/src/main/java/com/example/app/callback/DeviceBindingCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/DeviceBindingCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/DeviceBindingCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/DeviceProfileCallback.kt b/e2e/app/src/main/java/com/example/app/callback/DeviceProfileCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/DeviceProfileCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/DeviceProfileCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt b/e2e/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/DeviceSigningVerifierCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/IdPCallback.kt b/e2e/app/src/main/java/com/example/app/callback/IdPCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/IdPCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/IdPCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/KbaCreateCallback.kt b/e2e/app/src/main/java/com/example/app/callback/KbaCreateCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/KbaCreateCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/KbaCreateCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/NameCallback.kt b/e2e/app/src/main/java/com/example/app/callback/NameCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/NameCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/NameCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/NumberAttributeInputCallback.kt b/e2e/app/src/main/java/com/example/app/callback/NumberAttributeInputCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/NumberAttributeInputCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/NumberAttributeInputCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/PasswordCallback.kt b/e2e/app/src/main/java/com/example/app/callback/PasswordCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/PasswordCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/PasswordCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/PingOneProtectEvaluationCallback.kt b/e2e/app/src/main/java/com/example/app/callback/PingOneProtectEvaluationCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/PingOneProtectEvaluationCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/PingOneProtectEvaluationCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/PingOneProtectInitializeCallback.kt b/e2e/app/src/main/java/com/example/app/callback/PingOneProtectInitializeCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/PingOneProtectInitializeCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/PingOneProtectInitializeCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/PollingWaitCallback.kt b/e2e/app/src/main/java/com/example/app/callback/PollingWaitCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/PollingWaitCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/PollingWaitCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/ReCaptchaCallback.kt b/e2e/app/src/main/java/com/example/app/callback/ReCaptchaCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/ReCaptchaCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/ReCaptchaCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/ReCaptchaEnterpriseCallback.kt b/e2e/app/src/main/java/com/example/app/callback/ReCaptchaEnterpriseCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/ReCaptchaEnterpriseCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/ReCaptchaEnterpriseCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/SelectIdPCallback.kt b/e2e/app/src/main/java/com/example/app/callback/SelectIdPCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/SelectIdPCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/SelectIdPCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/StringAttributeInputCallback.kt b/e2e/app/src/main/java/com/example/app/callback/StringAttributeInputCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/StringAttributeInputCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/StringAttributeInputCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/TermsAndConditionsCallback.kt b/e2e/app/src/main/java/com/example/app/callback/TermsAndConditionsCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/TermsAndConditionsCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/TermsAndConditionsCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/TextInputCallback.kt b/e2e/app/src/main/java/com/example/app/callback/TextInputCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/TextInputCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/TextInputCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/TextOutputCallback.kt b/e2e/app/src/main/java/com/example/app/callback/TextOutputCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/TextOutputCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/TextOutputCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/WebAuthnAuthenticationCallback.kt b/e2e/app/src/main/java/com/example/app/callback/WebAuthnAuthenticationCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/WebAuthnAuthenticationCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/WebAuthnAuthenticationCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/WebAuthnRegistrationCallback.kt b/e2e/app/src/main/java/com/example/app/callback/WebAuthnRegistrationCallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/WebAuthnRegistrationCallback.kt rename to e2e/app/src/main/java/com/example/app/callback/WebAuthnRegistrationCallback.kt diff --git a/samples/app/src/main/java/com/example/app/callback/binding/CustomAppPinDeviceAuthenticator.kt b/e2e/app/src/main/java/com/example/app/callback/binding/CustomAppPinDeviceAuthenticator.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/callback/binding/CustomAppPinDeviceAuthenticator.kt rename to e2e/app/src/main/java/com/example/app/callback/binding/CustomAppPinDeviceAuthenticator.kt diff --git a/samples/app/src/main/java/com/example/app/centralize/Centralize.kt b/e2e/app/src/main/java/com/example/app/centralize/Centralize.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/centralize/Centralize.kt rename to e2e/app/src/main/java/com/example/app/centralize/Centralize.kt diff --git a/samples/app/src/main/java/com/example/app/centralize/CentralizeLoginViewModel.kt b/e2e/app/src/main/java/com/example/app/centralize/CentralizeLoginViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/centralize/CentralizeLoginViewModel.kt rename to e2e/app/src/main/java/com/example/app/centralize/CentralizeLoginViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/centralize/CentralizeState.kt b/e2e/app/src/main/java/com/example/app/centralize/CentralizeState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/centralize/CentralizeState.kt rename to e2e/app/src/main/java/com/example/app/centralize/CentralizeState.kt diff --git a/samples/app/src/main/java/com/example/app/device/DeviceProfileRoute.kt b/e2e/app/src/main/java/com/example/app/device/DeviceProfileRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/device/DeviceProfileRoute.kt rename to e2e/app/src/main/java/com/example/app/device/DeviceProfileRoute.kt diff --git a/samples/app/src/main/java/com/example/app/device/DeviceProfileViewModel.kt b/e2e/app/src/main/java/com/example/app/device/DeviceProfileViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/device/DeviceProfileViewModel.kt rename to e2e/app/src/main/java/com/example/app/device/DeviceProfileViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/env/EnvRoute.kt b/e2e/app/src/main/java/com/example/app/env/EnvRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/env/EnvRoute.kt rename to e2e/app/src/main/java/com/example/app/env/EnvRoute.kt diff --git a/samples/app/src/main/java/com/example/app/env/EnvViewModel.kt b/e2e/app/src/main/java/com/example/app/env/EnvViewModel.kt similarity index 96% rename from samples/app/src/main/java/com/example/app/env/EnvViewModel.kt rename to e2e/app/src/main/java/com/example/app/env/EnvViewModel.kt index 8e3cb893..e58c0e01 100644 --- a/samples/app/src/main/java/com/example/app/env/EnvViewModel.kt +++ b/e2e/app/src/main/java/com/example/app/env/EnvViewModel.kt @@ -1,8 +1,8 @@ /* - * Copyright (c) 2023-2024 ForgeRock. All rights reserved. + * Copyright (c) 2023 - 2024 ForgeRock. All rights reserved. * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. + * This software may be modified and distributed under the terms + * of the MIT license. See the LICENSE file for details. */ package com.example.app.env @@ -19,9 +19,8 @@ import org.forgerock.android.auth.FROptions import org.forgerock.android.auth.FROptionsBuilder import org.forgerock.android.auth.Logger -private val TAG = EnvViewModel::class.java.simpleName - const val USER_PROFILE_JOURNEY = "UserProfile" +private val TAG = EnvViewModel::class.java.simpleName class EnvViewModel : ViewModel() { diff --git a/samples/app/src/main/java/com/example/app/ig/IGRoute.kt b/e2e/app/src/main/java/com/example/app/ig/IGRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/ig/IGRoute.kt rename to e2e/app/src/main/java/com/example/app/ig/IGRoute.kt diff --git a/samples/app/src/main/java/com/example/app/ig/IGState.kt b/e2e/app/src/main/java/com/example/app/ig/IGState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/ig/IGState.kt rename to e2e/app/src/main/java/com/example/app/ig/IGState.kt diff --git a/samples/app/src/main/java/com/example/app/ig/IGTransitionState.kt b/e2e/app/src/main/java/com/example/app/ig/IGTransitionState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/ig/IGTransitionState.kt rename to e2e/app/src/main/java/com/example/app/ig/IGTransitionState.kt diff --git a/samples/app/src/main/java/com/example/app/ig/IGViewModel.kt b/e2e/app/src/main/java/com/example/app/ig/IGViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/ig/IGViewModel.kt rename to e2e/app/src/main/java/com/example/app/ig/IGViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/journey/Journey.kt b/e2e/app/src/main/java/com/example/app/journey/Journey.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/journey/Journey.kt rename to e2e/app/src/main/java/com/example/app/journey/Journey.kt diff --git a/samples/app/src/main/java/com/example/app/journey/JourneyRoute.kt b/e2e/app/src/main/java/com/example/app/journey/JourneyRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/journey/JourneyRoute.kt rename to e2e/app/src/main/java/com/example/app/journey/JourneyRoute.kt diff --git a/samples/app/src/main/java/com/example/app/journey/JourneyState.kt b/e2e/app/src/main/java/com/example/app/journey/JourneyState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/journey/JourneyState.kt rename to e2e/app/src/main/java/com/example/app/journey/JourneyState.kt diff --git a/samples/app/src/main/java/com/example/app/journey/JourneyViewModel.kt b/e2e/app/src/main/java/com/example/app/journey/JourneyViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/journey/JourneyViewModel.kt rename to e2e/app/src/main/java/com/example/app/journey/JourneyViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/selfservice/SelfServiceRoute.kt b/e2e/app/src/main/java/com/example/app/selfservice/SelfServiceRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/selfservice/SelfServiceRoute.kt rename to e2e/app/src/main/java/com/example/app/selfservice/SelfServiceRoute.kt diff --git a/samples/app/src/main/java/com/example/app/selfservice/SelfServiceState.kt b/e2e/app/src/main/java/com/example/app/selfservice/SelfServiceState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/selfservice/SelfServiceState.kt rename to e2e/app/src/main/java/com/example/app/selfservice/SelfServiceState.kt diff --git a/samples/app/src/main/java/com/example/app/selfservice/SelfServiceViewModel.kt b/e2e/app/src/main/java/com/example/app/selfservice/SelfServiceViewModel.kt similarity index 94% rename from samples/app/src/main/java/com/example/app/selfservice/SelfServiceViewModel.kt rename to e2e/app/src/main/java/com/example/app/selfservice/SelfServiceViewModel.kt index ff11207f..28a44440 100644 --- a/samples/app/src/main/java/com/example/app/selfservice/SelfServiceViewModel.kt +++ b/e2e/app/src/main/java/com/example/app/selfservice/SelfServiceViewModel.kt @@ -35,9 +35,9 @@ class SelfServiceViewModel : ViewModel() { when (device) { is OathDevice -> repo.oath.delete(device) is PushDevice -> repo.push.delete(device) - is WebAuthnDevice -> repo.webAuthn.update(device) - is BoundDevice -> repo.bound.update(device) - is ProfileDevice -> repo.profile.update(device) + is WebAuthnDevice -> repo.webAuthn.delete(device) + is BoundDevice -> repo.bound.delete(device) + is ProfileDevice -> repo.profile.delete(device) else -> throw IllegalArgumentException("Unsupported Device Type") } fetch(selectedType) diff --git a/samples/app/src/main/java/com/example/app/setting/SettingRoute.kt b/e2e/app/src/main/java/com/example/app/setting/SettingRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/setting/SettingRoute.kt rename to e2e/app/src/main/java/com/example/app/setting/SettingRoute.kt diff --git a/samples/app/src/main/java/com/example/app/setting/SettingState.kt b/e2e/app/src/main/java/com/example/app/setting/SettingState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/setting/SettingState.kt rename to e2e/app/src/main/java/com/example/app/setting/SettingState.kt diff --git a/samples/app/src/main/java/com/example/app/setting/SettingTransitionState.kt b/e2e/app/src/main/java/com/example/app/setting/SettingTransitionState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/setting/SettingTransitionState.kt rename to e2e/app/src/main/java/com/example/app/setting/SettingTransitionState.kt diff --git a/samples/app/src/main/java/com/example/app/setting/SettingViewModel.kt b/e2e/app/src/main/java/com/example/app/setting/SettingViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/setting/SettingViewModel.kt rename to e2e/app/src/main/java/com/example/app/setting/SettingViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/storage/CustomStorageWithFallback.kt b/e2e/app/src/main/java/com/example/app/storage/CustomStorageWithFallback.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/storage/CustomStorageWithFallback.kt rename to e2e/app/src/main/java/com/example/app/storage/CustomStorageWithFallback.kt diff --git a/samples/app/src/main/java/com/example/app/storage/MemoryStorage.kt b/e2e/app/src/main/java/com/example/app/storage/MemoryStorage.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/storage/MemoryStorage.kt rename to e2e/app/src/main/java/com/example/app/storage/MemoryStorage.kt diff --git a/samples/app/src/main/java/com/example/app/storage/MyCustomStorage.kt b/e2e/app/src/main/java/com/example/app/storage/MyCustomStorage.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/storage/MyCustomStorage.kt rename to e2e/app/src/main/java/com/example/app/storage/MyCustomStorage.kt diff --git a/samples/app/src/main/java/com/example/app/theme/Color.kt b/e2e/app/src/main/java/com/example/app/theme/Color.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/theme/Color.kt rename to e2e/app/src/main/java/com/example/app/theme/Color.kt diff --git a/samples/app/src/main/java/com/example/app/theme/Shape.kt b/e2e/app/src/main/java/com/example/app/theme/Shape.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/theme/Shape.kt rename to e2e/app/src/main/java/com/example/app/theme/Shape.kt diff --git a/samples/app/src/main/java/com/example/app/theme/Theme.kt b/e2e/app/src/main/java/com/example/app/theme/Theme.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/theme/Theme.kt rename to e2e/app/src/main/java/com/example/app/theme/Theme.kt diff --git a/samples/app/src/main/java/com/example/app/theme/Type.kt b/e2e/app/src/main/java/com/example/app/theme/Type.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/theme/Type.kt rename to e2e/app/src/main/java/com/example/app/theme/Type.kt diff --git a/samples/app/src/main/java/com/example/app/token/Token.kt b/e2e/app/src/main/java/com/example/app/token/Token.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/token/Token.kt rename to e2e/app/src/main/java/com/example/app/token/Token.kt diff --git a/samples/app/src/main/java/com/example/app/token/TokenState.kt b/e2e/app/src/main/java/com/example/app/token/TokenState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/token/TokenState.kt rename to e2e/app/src/main/java/com/example/app/token/TokenState.kt diff --git a/samples/app/src/main/java/com/example/app/token/TokenViewModel.kt b/e2e/app/src/main/java/com/example/app/token/TokenViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/token/TokenViewModel.kt rename to e2e/app/src/main/java/com/example/app/token/TokenViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/userkeys/UserKeyState.kt b/e2e/app/src/main/java/com/example/app/userkeys/UserKeyState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/userkeys/UserKeyState.kt rename to e2e/app/src/main/java/com/example/app/userkeys/UserKeyState.kt diff --git a/samples/app/src/main/java/com/example/app/userkeys/UserKeysRoute.kt b/e2e/app/src/main/java/com/example/app/userkeys/UserKeysRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/userkeys/UserKeysRoute.kt rename to e2e/app/src/main/java/com/example/app/userkeys/UserKeysRoute.kt diff --git a/samples/app/src/main/java/com/example/app/userkeys/UserKeysState.kt b/e2e/app/src/main/java/com/example/app/userkeys/UserKeysState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/userkeys/UserKeysState.kt rename to e2e/app/src/main/java/com/example/app/userkeys/UserKeysState.kt diff --git a/samples/app/src/main/java/com/example/app/userkeys/UserKeysViewModel.kt b/e2e/app/src/main/java/com/example/app/userkeys/UserKeysViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/userkeys/UserKeysViewModel.kt rename to e2e/app/src/main/java/com/example/app/userkeys/UserKeysViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/userprofile/UserProfile.kt b/e2e/app/src/main/java/com/example/app/userprofile/UserProfile.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/userprofile/UserProfile.kt rename to e2e/app/src/main/java/com/example/app/userprofile/UserProfile.kt diff --git a/samples/app/src/main/java/com/example/app/userprofile/UserProfileState.kt b/e2e/app/src/main/java/com/example/app/userprofile/UserProfileState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/userprofile/UserProfileState.kt rename to e2e/app/src/main/java/com/example/app/userprofile/UserProfileState.kt diff --git a/samples/app/src/main/java/com/example/app/userprofile/UserProfileViewModel.kt b/e2e/app/src/main/java/com/example/app/userprofile/UserProfileViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/userprofile/UserProfileViewModel.kt rename to e2e/app/src/main/java/com/example/app/userprofile/UserProfileViewModel.kt diff --git a/samples/app/src/main/java/com/example/app/webauthn/WebAuthnRoute.kt b/e2e/app/src/main/java/com/example/app/webauthn/WebAuthnRoute.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/webauthn/WebAuthnRoute.kt rename to e2e/app/src/main/java/com/example/app/webauthn/WebAuthnRoute.kt diff --git a/samples/app/src/main/java/com/example/app/webauthn/WebAuthnState.kt b/e2e/app/src/main/java/com/example/app/webauthn/WebAuthnState.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/webauthn/WebAuthnState.kt rename to e2e/app/src/main/java/com/example/app/webauthn/WebAuthnState.kt diff --git a/samples/app/src/main/java/com/example/app/webauthn/WebAuthnViewModel.kt b/e2e/app/src/main/java/com/example/app/webauthn/WebAuthnViewModel.kt similarity index 100% rename from samples/app/src/main/java/com/example/app/webauthn/WebAuthnViewModel.kt rename to e2e/app/src/main/java/com/example/app/webauthn/WebAuthnViewModel.kt diff --git a/samples/app/src/main/res/animator/logo_animator.xml b/e2e/app/src/main/res/animator/logo_animator.xml similarity index 100% rename from samples/app/src/main/res/animator/logo_animator.xml rename to e2e/app/src/main/res/animator/logo_animator.xml diff --git a/samples/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/e2e/app/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from samples/app/src/main/res/drawable-v24/ic_launcher_foreground.xml rename to e2e/app/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/samples/app/src/main/res/drawable/animated_logo.xml b/e2e/app/src/main/res/drawable/animated_logo.xml similarity index 100% rename from samples/app/src/main/res/drawable/animated_logo.xml rename to e2e/app/src/main/res/drawable/animated_logo.xml diff --git a/samples/app/src/main/res/drawable/apple_black.png b/e2e/app/src/main/res/drawable/apple_black.png similarity index 100% rename from samples/app/src/main/res/drawable/apple_black.png rename to e2e/app/src/main/res/drawable/apple_black.png diff --git a/samples/app/src/main/res/drawable/forgerock.xml b/e2e/app/src/main/res/drawable/forgerock.xml similarity index 100% rename from samples/app/src/main/res/drawable/forgerock.xml rename to e2e/app/src/main/res/drawable/forgerock.xml diff --git a/samples/app/src/main/res/drawable/ic_launcher_background.xml b/e2e/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from samples/app/src/main/res/drawable/ic_launcher_background.xml rename to e2e/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/samples/app/src/main/res/drawable/ping_logo.xml b/e2e/app/src/main/res/drawable/ping_logo.xml similarity index 100% rename from samples/app/src/main/res/drawable/ping_logo.xml rename to e2e/app/src/main/res/drawable/ping_logo.xml diff --git a/samples/app/src/main/res/font/montserrat_medium.ttf b/e2e/app/src/main/res/font/montserrat_medium.ttf similarity index 100% rename from samples/app/src/main/res/font/montserrat_medium.ttf rename to e2e/app/src/main/res/font/montserrat_medium.ttf diff --git a/samples/app/src/main/res/font/montserrat_regular.ttf b/e2e/app/src/main/res/font/montserrat_regular.ttf similarity index 100% rename from samples/app/src/main/res/font/montserrat_regular.ttf rename to e2e/app/src/main/res/font/montserrat_regular.ttf diff --git a/samples/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/e2e/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from samples/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to e2e/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/samples/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/e2e/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from samples/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to e2e/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/samples/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/e2e/app/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from samples/app/src/main/res/mipmap-hdpi/ic_launcher.webp rename to e2e/app/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/samples/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/e2e/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from samples/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to e2e/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/samples/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/e2e/app/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from samples/app/src/main/res/mipmap-mdpi/ic_launcher.webp rename to e2e/app/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/samples/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/e2e/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from samples/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to e2e/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/samples/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/e2e/app/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from samples/app/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to e2e/app/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/samples/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/e2e/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from samples/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to e2e/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/samples/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/e2e/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from samples/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to e2e/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/samples/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/e2e/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from samples/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to e2e/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/e2e/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to e2e/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/e2e/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to e2e/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/samples/app/src/main/res/values-night/themes.xml b/e2e/app/src/main/res/values-night/themes.xml similarity index 100% rename from samples/app/src/main/res/values-night/themes.xml rename to e2e/app/src/main/res/values-night/themes.xml diff --git a/samples/app/src/main/res/values/colors.xml b/e2e/app/src/main/res/values/colors.xml similarity index 100% rename from samples/app/src/main/res/values/colors.xml rename to e2e/app/src/main/res/values/colors.xml diff --git a/samples/app/src/main/res/values/strings.xml b/e2e/app/src/main/res/values/strings.xml similarity index 100% rename from samples/app/src/main/res/values/strings.xml rename to e2e/app/src/main/res/values/strings.xml diff --git a/samples/app/src/main/res/values/themes.xml b/e2e/app/src/main/res/values/themes.xml similarity index 100% rename from samples/app/src/main/res/values/themes.xml rename to e2e/app/src/main/res/values/themes.xml diff --git a/samples/app/src/test/java/com/example/app/ExampleUnitTest.kt b/e2e/app/src/test/java/com/example/app/ExampleUnitTest.kt similarity index 100% rename from samples/app/src/test/java/com/example/app/ExampleUnitTest.kt rename to e2e/app/src/test/java/com/example/app/ExampleUnitTest.kt diff --git a/samples/debug.jks b/e2e/debug.jks similarity index 100% rename from samples/debug.jks rename to e2e/debug.jks diff --git a/forgerock-auth-ui/build.gradle b/forgerock-auth-ui/build.gradle index 09160e8b..81ed0c63 100644 --- a/forgerock-auth-ui/build.gradle +++ b/forgerock-auth-ui/build.gradle @@ -29,6 +29,12 @@ android { } } + kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } + } + compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 diff --git a/samples/auth/.gitignore b/samples/auth/.gitignore deleted file mode 100644 index 796b96d1..00000000 --- a/samples/auth/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/samples/auth/build.gradle b/samples/auth/build.gradle deleted file mode 100644 index f66d4217..00000000 --- a/samples/auth/build.gradle +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2019 - 2024 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -android { - - namespace 'org.forgerock.auth' - - compileSdk 35 - defaultConfig { - applicationId "org.forgerock.auth" - minSdkVersion 23 - targetSdkVersion 35 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - resValue "string", "forgerock_sso_permission", "com.forgerock.permission" - - manifestPlaceholders = [ - forgerock_sso_permission :"com.forgerock.permission" - ] - - - } - buildTypes { - release { - minifyEnabled true - shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - debug { - } - } - - buildFeatures { - buildConfig true - } - - signingConfigs { - debug { - storeFile file('../debug.jks') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } -} - -dependencies { - - implementation project(':forgerock-auth') - implementation project(':forgerock-auth-ui') - - /* - implementation 'org.forgerock:forgerock-auth:3.3.3' - implementation 'org.forgerock:forgerock-auth-ui:3.3.3' - */ - - implementation 'com.squareup.okhttp3:okhttp:4.11.0' - implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0' - - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'com.google.android.material:material:1.8.0' - implementation 'com.google.android.gms:play-services-location:21.0.1' - implementation 'com.google.android.gms:play-services-safetynet:18.0.1' - implementation 'androidx.annotation:annotation:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'net.openid:appauth:0.11.1' - implementation 'com.google.android.gms:play-services-fido:20.0.1' - - //SocialLogin - implementation 'com.google.android.gms:play-services-auth:20.5.0' - implementation 'com.facebook.android:facebook-login:16.0.0' - - //For App integrity - implementation 'com.google.android.play:integrity:1.3.0' - - //Device Binding + JWT - implementation 'com.nimbusds:nimbus-jose-jwt:9.37.3' - implementation 'androidx.biometric:biometric-ktx:1.2.0-alpha05' - - //Application Pin - implementation 'com.madgag.spongycastle:bcpkix-jdk15on:1.58.0.0' - implementation 'androidx.security:security-crypto:1.1.0-alpha05' - -} diff --git a/samples/auth/proguard-rules.pro b/samples/auth/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/samples/auth/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/samples/auth/src/main/AndroidManifest.xml b/samples/auth/src/main/AndroidManifest.xml deleted file mode 100644 index 6c5f1b31..00000000 --- a/samples/auth/src/main/AndroidManifest.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/auth/src/main/ic_launcher-playstore.png b/samples/auth/src/main/ic_launcher-playstore.png deleted file mode 100644 index 4483d82b1dcbb0c156f7896b349be986b5503471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20519 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 diff --git a/samples/auth/src/main/ic_logo-playstore.png b/samples/auth/src/main/ic_logo-playstore.png deleted file mode 100644 index 3ad4b01df8c9e759857270eab5ced760159beaae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20583 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 diff --git a/samples/auth/src/main/ic_logo-web.png b/samples/auth/src/main/ic_logo-web.png deleted file mode 100644 index 7032013cfd5145a57d0b5ca063e7f3ef49be134a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22397 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 TPXDkACQb, CookieInterceptor { - @NonNull - @Override - public Request intercept(@NonNull Request request) { - return request; - } - - @NonNull - @Override - public Request intercept(@NonNull Request request, Action tag) { - return request; - } - - @NonNull - @Override - public List intercept(@NonNull List cookies) { - List newCookies = new ArrayList<>(); - newCookies.addAll(cookies); - newCookies.add(new Cookie.Builder().domain("localhost").name("test").value("testValue").httpOnly().secure().build()); - - return newCookies; - } -} diff --git a/samples/auth/src/main/java/org/forgerock/auth/ForceAuthRequestInterceptor.java b/samples/auth/src/main/java/org/forgerock/auth/ForceAuthRequestInterceptor.java deleted file mode 100644 index b056a71d..00000000 --- a/samples/auth/src/main/java/org/forgerock/auth/ForceAuthRequestInterceptor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2020 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -package org.forgerock.auth; - -import android.net.Uri; - -import androidx.annotation.NonNull; - -import org.forgerock.android.auth.Action; -import org.forgerock.android.auth.FRRequestInterceptor; -import org.forgerock.android.auth.Request; -import org.forgerock.android.auth.RequestInterceptor; - -import static org.forgerock.android.auth.Action.START_AUTHENTICATE; - -/** - * Sample {@link RequestInterceptor} to add ForceAuth - */ -public class ForceAuthRequestInterceptor implements FRRequestInterceptor { - - @NonNull - @Override - public Request intercept(@NonNull Request request, Action tag) { - if (tag.getType().equals(START_AUTHENTICATE)) { - return request.newBuilder() - .url(Uri.parse(request.url().toString()) - .buildUpon() - .appendQueryParameter("ForceAuth", "true").toString()) - .build(); - } - return request; - } -} diff --git a/samples/auth/src/main/java/org/forgerock/auth/InjectHeaderAuthRequestInterceptor.java b/samples/auth/src/main/java/org/forgerock/auth/InjectHeaderAuthRequestInterceptor.java deleted file mode 100644 index f4b9c2a2..00000000 --- a/samples/auth/src/main/java/org/forgerock/auth/InjectHeaderAuthRequestInterceptor.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2020 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -package org.forgerock.auth; - -import androidx.annotation.NonNull; - -import org.forgerock.android.auth.Action; -import org.forgerock.android.auth.Request; -import org.forgerock.android.auth.FRRequestInterceptor; - -/** - * Sample {@link FRRequestInterceptor} to add header - */ -public class InjectHeaderAuthRequestInterceptor implements FRRequestInterceptor { - - @NonNull - @Override - public Request intercept(@NonNull Request request, Action action) { - return request.newBuilder() - .addHeader("headerName", "headerValue") - .addHeader("headerName", "headerValue2") - .build(); - - } -} diff --git a/samples/auth/src/main/java/org/forgerock/auth/MainActivity.java b/samples/auth/src/main/java/org/forgerock/auth/MainActivity.java deleted file mode 100644 index ec820f0e..00000000 --- a/samples/auth/src/main/java/org/forgerock/auth/MainActivity.java +++ /dev/null @@ -1,529 +0,0 @@ -/* - * Copyright (c) 2019 - 2023 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -package org.forgerock.auth; - -import static android.Manifest.permission.ACCESS_COARSE_LOCATION; -import static android.Manifest.permission.ACCESS_FINE_LOCATION; -import static android.view.View.INVISIBLE; -import static android.view.View.VISIBLE; -import static com.google.android.material.snackbar.Snackbar.LENGTH_LONG; -import static org.forgerock.android.auth.ui.SimpleLoginActivity.ERROR_EXTRA; - -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Color; -import android.os.Bundle; -import android.text.InputType; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; - -import com.google.android.material.snackbar.Snackbar; -import com.nimbusds.jwt.JWTParser; - -import org.forgerock.android.auth.AccessToken; -import org.forgerock.android.auth.Config; -import org.forgerock.android.auth.FRAuth; -import org.forgerock.android.auth.FRDevice; -import org.forgerock.android.auth.FRListener; -import org.forgerock.android.auth.FRSession; -import org.forgerock.android.auth.FRUser; -import org.forgerock.android.auth.Logger; -import org.forgerock.android.auth.PolicyAdvice; -import org.forgerock.android.auth.SecureCookieJar; -import org.forgerock.android.auth.UserInfo; -import org.forgerock.android.auth.interceptor.AccessTokenInterceptor; -import org.forgerock.android.auth.interceptor.AdviceHandler; -import org.forgerock.android.auth.interceptor.IdentityGatewayAdviceInterceptor; -import org.forgerock.android.auth.ui.AdviceDialogHandler; -import org.forgerock.android.auth.ui.LoginFragment; -import org.forgerock.android.auth.ui.SimpleLoginActivity; -import org.forgerock.android.auth.ui.SimpleRegisterActivity; -import org.jetbrains.annotations.NotNull; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.logging.HttpLoggingInterceptor; - -public class MainActivity extends AppCompatActivity { - - public static final int AUTH_REQUEST_CODE = 100; - public static final int REQUEST_CODE = 100; - private static final String TAG = MainActivity.class.getSimpleName(); - public static final String LAUNCH_BROWSER = "LAUNCH_BROWSER"; - - private ImageView success; - private TextView content; - private ProgressBar progressBar; - - private boolean launchBrowser = false; - - @Override - protected void onCreate(Bundle savedInstanceState) { - - /* - RequestInterceptorRegistry.getInstance().register( - new ForceAuthRequestInterceptor(), - new CustomCookieInterceptor(), - new NoSessionRequestInterceptor() - ); - */ - - //CallbackFactory.getInstance().register(MyCustomDeviceProfile.class); - FRAuth.start(this); - Logger.set(Logger.Level.DEBUG); - super.onCreate(savedInstanceState); - - setContentView(org.forgerock.auth.R.layout.activity_main); - success = findViewById(org.forgerock.auth.R.id.success); - content = findViewById(org.forgerock.auth.R.id.content); - progressBar = findViewById(org.forgerock.auth.R.id.progressBar); - progressBar.setVisibility(INVISIBLE); - - if (getIntent() != null) { - if (getIntent().getData() != null) { - Intent resume = new Intent(this, SimpleLoginActivity.class); - resume.setData(getIntent().getData()); - startActivityForResult(resume, AUTH_REQUEST_CODE); - } - } - - if (savedInstanceState != null) { - launchBrowser = savedInstanceState.getBoolean(LAUNCH_BROWSER, launchBrowser); - if (launchBrowser) { - launchBrowser(); - } - } - - } - - @Override - protected void onSaveInstanceState(@NonNull Bundle outState) { - outState.putBoolean(LAUNCH_BROWSER, launchBrowser); - super.onSaveInstanceState(outState); - } - - @Override - protected void onPostResume() { - super.onPostResume(); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - - // Check which request we're responding to - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == AUTH_REQUEST_CODE) { - // Make sure the request was successful - if (resultCode == RESULT_OK) { - if (data!= null && data.getStringExtra(ERROR_EXTRA) != null) { - Snackbar.make(findViewById(org.forgerock.auth.R.id.success), "Login Failed:" + - data.getStringExtra(ERROR_EXTRA) , LENGTH_LONG).show(); - } else { - success.setVisibility(VISIBLE); - userinfo(); - } - } - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(org.forgerock.auth.R.menu.menu, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle item selection - switch (item.getItemId()) { - case org.forgerock.auth.R.id.login: - success.setVisibility(INVISIBLE); - content.setText(""); - TreeDialogFragment.newInstance().show(getSupportFragmentManager(), "TREE"); - return true; - - case org.forgerock.auth.R.id.register: - success.setVisibility(INVISIBLE); - content.setText(""); - Intent registerIntent = new Intent(this, SimpleRegisterActivity.class); - startActivityForResult(registerIntent, AUTH_REQUEST_CODE); - return true; - - case org.forgerock.auth.R.id.logout: - success.setVisibility(INVISIBLE); - content.setText(""); - if (FRUser.getCurrentUser() != null) { - FRUser.getCurrentUser().logout(); - } - TreeDialogFragment.newInstance().show(getSupportFragmentManager(), "TREE"); - - return true; - case org.forgerock.auth.R.id.profile: - checkPermission(); - success.setVisibility(View.GONE); - FRDevice.getInstance().getProfile(new FRListener() { - @Override - public void onSuccess(JSONObject result) { - runOnUiThread(() -> { - try { - content.setText(result.toString(4)); - } catch (JSONException e) { - Logger.warn(TAG, e, "Failed to convert json to string"); - } - }); - } - - @Override - public void onException(Exception e) { - Logger.warn(TAG, e, "Failed to retrieve device profile"); - } - }); - return true; - case R.id.userinfo: - userinfo(); - return true; - case org.forgerock.auth.R.id.invoke: - - OkHttpClient.Builder builder = new OkHttpClient.Builder() - .followRedirects(false); - - if (Logger.isDebugEnabled()) { - HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); - interceptor.level(HttpLoggingInterceptor.Level.BODY); - builder.addInterceptor(interceptor); - } - - builder.addInterceptor(new IdentityGatewayAdviceInterceptor() { - @Override - public AdviceHandler getAdviceHandler(PolicyAdvice advice) { - return new AdviceDialogHandler(); - } - }); - builder.addInterceptor(new AccessTokenInterceptor()); - builder.cookieJar(SecureCookieJar.builder() - .context(this.getApplicationContext()) - .build()); - - OkHttpClient client = builder.build(); - Request request = new Request.Builder().url("https://openig.petrov.ca/products").build(); - client.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - runOnUiThread(() -> content.setText(e.getMessage())); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - runOnUiThread(() -> { - if (response.isSuccessful()) { - try { - content.setText("Response:" + response.body().string()); - } catch (IOException e) { - content.setText(e.getMessage()); - } - } else { - content.setText("Failed:" + response.message()); - } - }); - } - }); - return true; - - case R.id.token: - JSONObject output = new JSONObject(); - if (FRUser.getCurrentUser() != null) { - FRUser.getCurrentUser().getAccessToken(new FRListener() { - @Override - public void onSuccess(AccessToken result) { - try { - put(output, "ACCESS_TOKEN_RAW", new JSONObject(result.toJson())); - } catch (JSONException e) { - //ignore - } - try { - put(output, "ACCESS_TOKEN", new JSONObject(JWTParser.parse(result.getValue()).getJWTClaimsSet().toString())); - } catch (Exception e) { - e.printStackTrace(); - } - try { - put(output, "REFRESH_TOKEN", new JSONObject(JWTParser.parse(result.getRefreshToken()).getJWTClaimsSet().toString())); - } catch (Exception e) { - } - try { - put(output, "ID_TOKEN", new JSONObject(JWTParser.parse(result.getIdToken()).getJWTClaimsSet().toString())); - } catch (Exception e) { - //ignore - } - - runOnUiThread(() -> { - try { - success.setVisibility(View.GONE); - content.setText(output.toString(2)); - } catch (JSONException e) { - //ignore - } - }); - } - - @Override - public void onException(Exception e) { - put(output, "ERROR", e.getMessage()); - } - }); - - if (FRSession.getCurrentSession() != null) { - if (FRSession.getCurrentSession().getSessionToken() != null) { - put(output, "SESSION", FRSession.getCurrentSession().getSessionToken().getValue()); - } - } - } - return true; - - case R.id.revokeToken: - progressBar.setVisibility(VISIBLE); - revokeAccessToken(); - return true; - case R.id.trustAllCert: - - try { - final TrustManager trustManager = new X509TrustManager() { - @Override - public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return new java.security.cert.X509Certificate[] {}; - } - }; - SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[] { trustManager }, new java.security.SecureRandom()); - Config.getInstance().reset(); - Config.getInstance().init(this, null); - Config.getInstance().setBuildSteps(Collections.singletonList(builder1 -> { - builder1.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustManager); - builder1.hostnameVerifier((s, sslSession) -> true); - })); - - } catch (NoSuchAlgorithmException | KeyManagementException e) { - runOnUiThread(() -> content.setText(e.getMessage())); - } - - case R.id.webAuthn: - success.setVisibility(INVISIBLE); - content.setText(""); - listWebAuthnCredentials(); - return true; - - default: - return super.onOptionsItemSelected(item); - } - } - - private void put(JSONObject object, String key, Object value) { - try { - object.put(key, value); - } catch (JSONException e) { - //ignore - } - } - - public void userinfo() { - if (FRUser.getCurrentUser() != null) { - FRUser.getCurrentUser().getUserInfo(new FRListener() { - @Override - public void onSuccess(final UserInfo result) { - runOnUiThread(() -> { - progressBar.setVisibility(INVISIBLE); - try { - content.setText(result.getRaw().toString(2)); - } catch (JSONException e) { - onException(e); - } - }); - } - - @Override - public void onException(final Exception e) { - runOnUiThread(() -> { - progressBar.setVisibility(INVISIBLE); - content.setText(e.getMessage()); - }); - } - }); - } else { - content.setText("No User Session"); - } - } - - private void revokeAccessToken() { - if (FRUser.getCurrentUser() != null) { - FRUser.getCurrentUser().revokeAccessToken(new FRListener() { - @Override - public void onSuccess(Void result) { - runOnUiThread(() -> { - progressBar.setVisibility(INVISIBLE); - content.setText("Access token revoked"); - }); - } - - @Override - public void onException(Exception e) { - runOnUiThread(() -> { - progressBar.setVisibility(INVISIBLE); - content.setText("Access token revoked locally only!\n"); - content.append("Error message: " + e.getMessage()); - }); - } - }); - } else { - progressBar.setVisibility(INVISIBLE); - content.setText("No User Session"); - } - } - - private void listWebAuthnCredentials() { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("List WebAuthn Credentials"); - builder.setMessage("List all credentials by RpId"); - final EditText rpIdInput = new EditText(this); - rpIdInput.setInputType(InputType.TYPE_CLASS_TEXT); - builder.setView(rpIdInput); - - // Set up the buttons - builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String rpId = rpIdInput.getText().toString(); - dialog.dismiss(); - - progressBar.setVisibility(INVISIBLE); - content.setText(""); - - if (rpId != null) { - - Intent webAuthnList = new Intent(MainActivity.this, WebAuthnKeysListActivity.class); - webAuthnList.putExtra("RPID", rpId); - MainActivity.this.startActivity(webAuthnList); - } - } - }); - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - progressBar.setVisibility(INVISIBLE); - content.setText(""); - dialog.dismiss(); - } - }); - - AlertDialog dialog = builder.create(); - dialog.setOnShowListener( new DialogInterface.OnShowListener() { - @Override - public void onShow(DialogInterface arg0) { - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.WHITE); - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setBackgroundColor(Color.GRAY); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.WHITE); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setBackgroundColor(Color.DKGRAY); - } - }); - - dialog.show(); - } - - private void checkPermission() { - if (ActivityCompat.shouldShowRequestPermissionRationale(Objects.requireNonNull(this), - ACCESS_FINE_LOCATION)) { - AlertDialog alertDialog = new AlertDialog.Builder(this) - .setMessage("We need location to next") - .setPositiveButton("OK", (dialog, which) -> ActivityCompat.requestPermissions(MainActivity.this, - new String[]{ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION}, REQUEST_CODE)) - .create(); - alertDialog.show(); - } else { - ActivityCompat.requestPermissions(MainActivity.this, - new String[]{ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION}, REQUEST_CODE); - } - } - - - public void launchTree(String result) { - Intent loginIntent = new Intent(this, SimpleLoginActivity.class); - loginIntent.putExtra(LoginFragment.TREE_NAME, result); - startActivityForResult(loginIntent, AUTH_REQUEST_CODE); - } - - public void launchBrowser() { - launchBrowser = true; - - FRUser.browser().appAuthConfigurer() - .authorizationRequest(r -> { - Map additionalParameters = new HashMap<>(); - additionalParameters.put("service", "Simple"); - additionalParameters.put("KEY2", "VALUE2"); - //r.setAdditionalParameters(additionalParameters); - //r.setLoginHint("login"); - //r.setPrompt("login"); - }) - .customTabsIntent(t -> { - t.setShowTitle(false); - t.setToolbarColor(getResources().getColor(R.color.colorAccent)); - }).done() - .login(this, new FRListener() { - @Override - public void onSuccess(FRUser result) { - launchBrowser = false; - userinfo(); - } - - @Override - public void onException(Exception e) { - launchBrowser = false; - runOnUiThread(() -> { - progressBar.setVisibility(INVISIBLE); - content.setText(e.getMessage()); - }); - - } - }); - } -} diff --git a/samples/auth/src/main/java/org/forgerock/auth/MyCustomDeviceProfile.java b/samples/auth/src/main/java/org/forgerock/auth/MyCustomDeviceProfile.java deleted file mode 100644 index 4827fdd8..00000000 --- a/samples/auth/src/main/java/org/forgerock/auth/MyCustomDeviceProfile.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2020 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -package org.forgerock.auth; - -import android.content.Context; - -import androidx.annotation.Keep; - -import org.forgerock.android.auth.FRListener; -import org.forgerock.android.auth.Listener; -import org.forgerock.android.auth.callback.DeviceProfileCallback; -import org.forgerock.android.auth.collector.DeviceCollector; -import org.forgerock.android.auth.collector.FRDeviceCollector; -import org.forgerock.android.auth.collector.HardwareCollector; -import org.forgerock.android.auth.collector.LocationCollector; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.List; - -/** - * Sample to customize DeviceProfileCallback - */ -public class MyCustomDeviceProfile extends DeviceProfileCallback { - - public MyCustomDeviceProfile() { - } - - @Keep - public MyCustomDeviceProfile(JSONObject jsonObject, int index) { - super(jsonObject, index); - } - - @Override - public void execute(Context context, FRListener listener) { - - FRDeviceCollector.FRDeviceCollectorBuilder builder = FRDeviceCollector.builder(); - if (isMetadata()) { - builder.collector(new DeviceCollector() { - - private final List COLLECTORS = new ArrayList<>(); - - @Override - public String getName() { - return "metadata"; - } - - @Override - public void collect(Context context, FRListener listener) { - COLLECTORS.add(new HardwareCollector()); - collect(context, listener, new JSONObject(), COLLECTORS); - } - }); - } - if (isLocation()) { - builder.collector(new LocationCollector()); - } - - builder.build().collect(context, new FRListener() { - @Override - public void onSuccess(JSONObject result) { - setValue(result.toString()); - Listener.onSuccess(listener, null); - } - - @Override - public void onException(Exception e) { - Listener.onException(listener, null); - } - }); - } -} diff --git a/samples/auth/src/main/java/org/forgerock/auth/NoSessionRequestInterceptor.java b/samples/auth/src/main/java/org/forgerock/auth/NoSessionRequestInterceptor.java deleted file mode 100644 index ffe5a852..00000000 --- a/samples/auth/src/main/java/org/forgerock/auth/NoSessionRequestInterceptor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2020 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -package org.forgerock.auth; - -import android.net.Uri; - -import androidx.annotation.NonNull; - -import org.forgerock.android.auth.Action; -import org.forgerock.android.auth.FRRequestInterceptor; -import org.forgerock.android.auth.Request; -import org.forgerock.android.auth.RequestInterceptor; - -import static org.forgerock.android.auth.Action.AUTHENTICATE; - -/** - * Sample {@link RequestInterceptor} to add noSession - */ -public class NoSessionRequestInterceptor implements FRRequestInterceptor { - - @NonNull - @Override - public Request intercept(@NonNull Request request, Action tag) { - if (tag.getType().equals(AUTHENTICATE)) { - return request.newBuilder() - .url(Uri.parse(request.url().toString()) - .buildUpon() - .appendQueryParameter("noSession", "true").toString()) - .build(); - } - return request; - } -} diff --git a/samples/auth/src/main/java/org/forgerock/auth/TreeDialogFragment.java b/samples/auth/src/main/java/org/forgerock/auth/TreeDialogFragment.java deleted file mode 100644 index 409afb9f..00000000 --- a/samples/auth/src/main/java/org/forgerock/auth/TreeDialogFragment.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2020 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -package org.forgerock.auth; - -import android.content.Context; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; - -import org.forgerock.android.auth.FRListener; -import org.forgerock.android.auth.Listener; - -/** - * Reference implementation of handing Advice with {@link DialogFragment} - */ -public class TreeDialogFragment extends DialogFragment { - - private MainActivity listener; - - public static TreeDialogFragment newInstance() { - return new TreeDialogFragment(); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Override - public void onResume() { - super.onResume(); - ViewGroup.LayoutParams params = getDialog().getWindow().getAttributes(); - params.width = ViewGroup.LayoutParams.MATCH_PARENT; - params.height = ViewGroup.LayoutParams.WRAP_CONTENT; - getDialog().getWindow().setAttributes((android.view.WindowManager.LayoutParams) params); - } - - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - - View view = inflater.inflate(R.layout.fragment_tree, container, false); - Button start = view.findViewById(R.id.start); - start.setOnClickListener(v -> { - dismiss(); - TextView treeName = view.findViewById(R.id.treeName); - listener.launchTree(treeName.getText().toString()); - }); - Button launchBrowser = view.findViewById(R.id.launchBrowser); - launchBrowser.setOnClickListener(v -> { - dismiss(); - listener.launchBrowser(); - }); - - return view; - } - - @Override - public void onAttach(@NonNull Context context) { - super.onAttach(context); - if (context instanceof MainActivity) { - listener = (MainActivity) context; - } - } -} diff --git a/samples/auth/src/main/java/org/forgerock/auth/WebAuthnKeysListActivity.java b/samples/auth/src/main/java/org/forgerock/auth/WebAuthnKeysListActivity.java deleted file mode 100644 index 808f59f9..00000000 --- a/samples/auth/src/main/java/org/forgerock/auth/WebAuthnKeysListActivity.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2023 ForgeRock. All rights reserved. - * - * This software may be modified and distributed under the terms - * of the MIT license. See the LICENSE file for details. - */ - -package org.forgerock.auth; - -import android.app.ListActivity; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import androidx.appcompat.app.AlertDialog; - -import org.forgerock.android.auth.WebAuthnDataRepository; -import org.forgerock.android.auth.webauthn.FRWebAuthn; -import org.forgerock.android.auth.webauthn.PublicKeyCredentialSource; - -import java.util.ArrayList; -import java.util.List; - -public class WebAuthnKeysListActivity extends ListActivity { - private TextView mainText; - private String rpId; - private List listValues; - private FRWebAuthn frWebAuthn; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - rpId = getIntent().getStringExtra("RPID"); - - setContentView(R.layout.activity_web_authn_keys_list); - mainText = (TextView) findViewById(R.id.mainText); - mainText.setText("WebAuthn Credentials for RpID \"" + rpId + "\""); - - WebAuthnDataRepository repository = new WebAuthnDataRepository(this, null); - frWebAuthn = new FRWebAuthn(this, repository); - reloadCredentials(); - } - - private void reloadCredentials() { - List credentialSourceList = frWebAuthn.loadAllCredentials(rpId); - ArrayList credentialSourceListArrayList = new ArrayList<>(); - credentialSourceListArrayList.addAll(credentialSourceList); - // Create a new adapter and display the keys. - WebAuthnArrayAdapter arrayAdapter = new WebAuthnArrayAdapter(this, credentialSourceListArrayList); - setListAdapter(arrayAdapter); - } - - // when an item of the list is clicked - @Override - protected void onListItemClick(ListView list, View view, int position, long id) { - super.onListItemClick(list, view, position, id); - - PublicKeyCredentialSource selectedItem = (PublicKeyCredentialSource) getListView().getItemAtPosition(position); - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("Delete WebAuthn Credentials"); - builder.setMessage("Do you want to delete WebAuthn Credentials \"" + selectedItem.getOtherUI() + "\"?"); - - // Set up the buttons - builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - frWebAuthn.deleteCredentials(selectedItem); - reloadCredentials(); - dialog.dismiss(); - } - }); - builder.setNegativeButton("NO", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - - AlertDialog dialog = builder.create(); - dialog.setOnShowListener( new DialogInterface.OnShowListener() { - @Override - public void onShow(DialogInterface arg0) { - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.WHITE); - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setBackgroundColor(Color.GRAY); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.WHITE); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setBackgroundColor(Color.DKGRAY); - } - }); - - dialog.show(); - } - - public void onDeleteAll(View view) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("Delete ALL WebAuthn Credentials?"); - builder.setMessage("Are you sure you want to delete all WebAuthn Credentials with RpID \"" + rpId + "\"?"); - - // Set up the buttons - builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - frWebAuthn.deleteCredentials(rpId); - reloadCredentials(); - dialog.dismiss(); - } - }); - builder.setNegativeButton("NO", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - - AlertDialog dialog = builder.create(); - dialog.setOnShowListener( new DialogInterface.OnShowListener() { - @Override - public void onShow(DialogInterface arg0) { - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.WHITE); - dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setBackgroundColor(Color.GRAY); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.WHITE); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setBackgroundColor(Color.DKGRAY); - } - }); - - dialog.show(); - } - - public void onClickCancel(View view) { - finish(); - } -} - -class WebAuthnArrayAdapter extends ArrayAdapter { - public WebAuthnArrayAdapter(Context context, ArrayList credentials) { - super(context, 0, credentials); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - // Get the data item for this position - PublicKeyCredentialSource credential = getItem(position); - - // Check if an existing view is being reused, otherwise inflate the view - if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.web_authn_key_row, parent, false); - } - // Lookup view for data population - TextView listText = (TextView) convertView.findViewById(R.id.listText); - - // Populate the data into the template view using the data object - listText.setText(credential.getOtherUI()); - - // Return the completed view to render on screen - return convertView; - } -} \ No newline at end of file diff --git a/samples/auth/src/main/res/drawable-v24/ic_launcher_foreground.xml b/samples/auth/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 67094d42..00000000 --- a/samples/auth/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - diff --git a/samples/auth/src/main/res/drawable/ic_launcher_background.xml b/samples/auth/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index f84ae980..00000000 --- a/samples/auth/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/auth/src/main/res/drawable/ic_launcher_foreground.xml b/samples/auth/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index d0802a73..00000000 --- a/samples/auth/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/samples/auth/src/main/res/layout/activity_main.xml b/samples/auth/src/main/res/layout/activity_main.xml deleted file mode 100644 index e1c72078..00000000 --- a/samples/auth/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/auth/src/main/res/layout/activity_web_authn_keys_list.xml b/samples/auth/src/main/res/layout/activity_web_authn_keys_list.xml deleted file mode 100644 index 21f9effd..00000000 --- a/samples/auth/src/main/res/layout/activity_web_authn_keys_list.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - -