From a8c1305b2febcabfebc1160ce38d86ac11fe5257 Mon Sep 17 00:00:00 2001 From: ashiagr Date: Mon, 5 Dec 2022 15:34:21 +0530 Subject: [PATCH 01/24] Remove compose modal bottom sheet after use to fix talkback --- .../pocketcasts/ui/MainActivity.kt | 44 +++++++++++-------- app/src/main/res/layout/activity_main.xml | 2 +- .../views/EndOfYearLaunchBottomSheet.kt | 3 ++ .../compose/bottomsheet/ModalBottomSheet.kt | 22 ++++++++-- 4 files changed, 49 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/au/com/shiftyjelly/pocketcasts/ui/MainActivity.kt b/app/src/main/java/au/com/shiftyjelly/pocketcasts/ui/MainActivity.kt index 22d67c2c3ba..e5520909419 100644 --- a/app/src/main/java/au/com/shiftyjelly/pocketcasts/ui/MainActivity.kt +++ b/app/src/main/java/au/com/shiftyjelly/pocketcasts/ui/MainActivity.kt @@ -14,6 +14,7 @@ import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.widget.Toolbar import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.ui.platform.ComposeView import androidx.core.view.isVisible import androidx.core.view.updatePadding import androidx.fragment.app.Fragment @@ -32,7 +33,6 @@ import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingActivityContr import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTrackerWrapper import au.com.shiftyjelly.pocketcasts.analytics.FirebaseAnalyticsTracker -import au.com.shiftyjelly.pocketcasts.compose.AppTheme import au.com.shiftyjelly.pocketcasts.databinding.ActivityMainBinding import au.com.shiftyjelly.pocketcasts.discover.view.DiscoverFragment import au.com.shiftyjelly.pocketcasts.endofyear.StoriesFragment @@ -202,7 +202,9 @@ class MainActivity : lifecycleScope.launchWhenCreated { val isEligible = viewModel.isEndOfYearStoriesEligible() if (isEligible) { - showEndOfYearLaunchBottomSheet() + if (!settings.getEndOfYearModalHasBeenShown()) { + setupEndOfYearLaunchBottomSheet() + } if (settings.getEndOfYearShowBadge2022()) { binding.bottomNavigation.getOrCreateBadge(VR.id.navigation_profile) } @@ -505,23 +507,28 @@ class MainActivity : showBottomSheet(UpNextFragment.newInstance(source = source)) } - private fun showEndOfYearLaunchBottomSheet() { - binding.modalBottomSheet.setContent { - AppTheme(theme.activeTheme) { - val shouldShow by viewModel.shouldShowStoriesModal.collectAsState() - EndOfYearLaunchBottomSheet( - shouldShow = shouldShow, - onClick = { - showStoriesOrAccount(StoriesSource.MODAL.value) - }, - onExpanded = { - analyticsTracker.track(AnalyticsEvent.END_OF_YEAR_MODAL_SHOWN) - settings.setEndOfYearModalHasBeenShown(true) - viewModel.updateStoriesModalShowState(false) - } - ) + private fun setupEndOfYearLaunchBottomSheet() { + val viewGroup = binding.modalBottomSheet + viewGroup.removeAllViews() + viewGroup.addView( + ComposeView(viewGroup.context).apply { + setContent { + val shouldShow by viewModel.shouldShowStoriesModal.collectAsState() + EndOfYearLaunchBottomSheet( + parent = viewGroup, + shouldShow = shouldShow, + onClick = { + showStoriesOrAccount(StoriesSource.MODAL.value) + }, + onExpanded = { + analyticsTracker.track(AnalyticsEvent.END_OF_YEAR_MODAL_SHOWN) + settings.setEndOfYearModalHasBeenShown(true) + viewModel.updateStoriesModalShowState(false) + } + ) + } } - } + ) } override fun showStoriesOrAccount(source: String) { @@ -599,6 +606,7 @@ class MainActivity : viewModel.waitingForSignInToShowStories = false } else if (!settings.getEndOfYearModalHasBeenShown()) { viewModel.updateStoriesModalShowState(true) + setupEndOfYearLaunchBottomSheet() } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index b7a99246bec..508d9378ef6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -62,7 +62,7 @@ android:clickable="true" android:translationZ="200dp"/> - Unit, onExpanded: () -> Unit, ) { ModalBottomSheet( + parent = parent, shouldShow = shouldShow, onExpanded = onExpanded, content = BottomSheetContentState.Content( diff --git a/modules/services/compose/src/main/java/au/com/shiftyjelly/pocketcasts/compose/bottomsheet/ModalBottomSheet.kt b/modules/services/compose/src/main/java/au/com/shiftyjelly/pocketcasts/compose/bottomsheet/ModalBottomSheet.kt index 5e051dd9754..4f4054adc35 100644 --- a/modules/services/compose/src/main/java/au/com/shiftyjelly/pocketcasts/compose/bottomsheet/ModalBottomSheet.kt +++ b/modules/services/compose/src/main/java/au/com/shiftyjelly/pocketcasts/compose/bottomsheet/ModalBottomSheet.kt @@ -1,5 +1,6 @@ package au.com.shiftyjelly.pocketcasts.compose.bottomsheet +import android.view.ViewGroup import androidx.activity.compose.BackHandler import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.ExperimentalMaterialApi @@ -9,7 +10,11 @@ import androidx.compose.material.ModalBottomSheetValue import androidx.compose.material.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp @@ -19,6 +24,7 @@ import kotlinx.coroutines.launch @OptIn(ExperimentalMaterialApi::class) @Composable fun ModalBottomSheet( + parent: ViewGroup, onExpanded: () -> Unit, shouldShow: Boolean, content: BottomSheetContentState.Content, @@ -28,6 +34,7 @@ fun ModalBottomSheet( skipHalfExpanded = true, ) val coroutineScope = rememberCoroutineScope() + var isSheetShown by remember { mutableStateOf(false) } BackHandler(sheetState.isVisible) { hideBottomSheet(coroutineScope, sheetState) @@ -48,14 +55,23 @@ fun ModalBottomSheet( content = {} ) - if (!sheetState.isVisible && shouldShow) { - displayBottomSheet(coroutineScope, sheetState) - } LaunchedEffect(Unit) { snapshotFlow { sheetState.currentValue } .collect { if (sheetState.currentValue == ModalBottomSheetValue.Expanded) { onExpanded.invoke() + } else if (sheetState.currentValue == ModalBottomSheetValue.Hidden) { + if (isSheetShown) { + /* Remove bottom sheet from parent view when bottom sheet is hidden + on dismiss or back action for talkback to function properly. */ + parent.removeAllViews() + } else { + if (!sheetState.isVisible && shouldShow) { + /* Show bottom sheet when it is hidden on initial set up */ + displayBottomSheet(coroutineScope, sheetState) + isSheetShown = true + } + } } } } From 920570aeab23643bee250babd9a2debc8c3540cf Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Mon, 5 Dec 2022 10:23:11 -0500 Subject: [PATCH 02/24] Add import card to welcome screen --- .../onboarding/OnboardingFlowComposable.kt | 14 ++++++++++--- .../onboarding/OnboardingWelcomePage.kt | 20 ++++++++++++++++--- .../src/main/res/values/strings.xml | 3 +++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt index b583e309f2d..ccad8b6901e 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt @@ -7,6 +7,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController +import au.com.shiftyjelly.pocketcasts.account.onboarding.import.OnboardingImportFlow import au.com.shiftyjelly.pocketcasts.account.onboarding.recommendations.OnboardingRecommendationsFlow import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTrackerWrapper @@ -149,14 +150,20 @@ fun OnboardingFlowComposable( }, ) } + composable(OnboardingNavRoute.welcome) { OnboardingWelcomePage( isSignedInAsPlus = signInState?.isSignedInAsPlus ?: false, onContinue = completeOnboarding, onContinueToDiscover = completeOnboardingToDiscover, + onImportTapped = { navController.navigate(OnboardingNavRoute.import) }, onBackPressed = { navController.popBackStack() }, ) } + + composable(OnboardingNavRoute.import) { + OnboardingImportFlow() + } } } } @@ -172,12 +179,13 @@ private object AnalyticsProp { } private object OnboardingNavRoute { - const val logInOrSignUp = "log_in_or_sign_up" const val createFreeAccount = "create_free_account" + const val forgotPassword = "forgot_password" + const val import = "import" const val logIn = "log_in" const val logInGoogle = "log_in_google" - const val forgotPassword = "forgot_password" - const val recommendationsFlow = "recommendationsFlow" + const val logInOrSignUp = "log_in_or_sign_up" const val plusUpgrade = "upgrade_upgrade" + const val recommendationsFlow = "recommendationsFlow" const val welcome = "welcome" } diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt index 917a10fb1da..562472b4c31 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt @@ -53,6 +53,7 @@ fun OnboardingWelcomePage( isSignedInAsPlus: Boolean, onContinue: () -> Unit, onContinueToDiscover: () -> Unit, + onImportTapped: () -> Unit, onBackPressed: () -> Unit, ) { @@ -78,6 +79,7 @@ fun OnboardingWelcomePage( Content( isSignedInAsPlus = isSignedInAsPlus, onContinueToDiscover = onContinueToDiscover, + onImportTapped = onImportTapped, state = state, onContinue = onContinue, onNewsletterCheckedChanged = viewModel::updateNewsletter @@ -88,9 +90,10 @@ fun OnboardingWelcomePage( private fun Content( isSignedInAsPlus: Boolean, onContinueToDiscover: () -> Unit, + onImportTapped: () -> Unit, state: OnboardingWelcomeState, onContinue: () -> Unit, - onNewsletterCheckedChanged: (Boolean) -> Unit + onNewsletterCheckedChanged: (Boolean) -> Unit, ) { Column(Modifier.padding(horizontal = 24.dp)) { Spacer(modifier = Modifier.weight(1f)) @@ -113,6 +116,15 @@ private fun Content( modifier = Modifier.padding(end = 8.dp) ) + Spacer(Modifier.height(24.dp)) + CardSection( + titleRes = LR.string.onboarding_import_podcasts_title, + descriptionRes = LR.string.onboarding_import_podcasts_text, + actionRes = LR.string.onboarding_import_podcasts_button, + iconRes = IR.drawable.pc_bw_import, + onClick = onImportTapped + ) + Spacer(Modifier.height(24.dp)) CardSection( titleRes = LR.string.onboarding_welcome_recommendations_title, @@ -277,6 +289,7 @@ private fun OnboardingWelcomePagePreview(@PreviewParameter(ThemePreviewParameter OnboardingWelcomePage( onContinue = {}, onContinueToDiscover = {}, + onImportTapped = {}, onBackPressed = {}, isSignedInAsPlus = false ) @@ -288,12 +301,13 @@ private fun OnboardingWelcomePagePreview(@PreviewParameter(ThemePreviewParameter private fun OnboardingWelcomePagePlusPreview(@PreviewParameter(ThemePreviewParameterProvider::class) themeType: Theme.ThemeType) { AppThemeWithBackground(themeType) { Content( - onContinue = {}, - onContinueToDiscover = {}, isSignedInAsPlus = true, + onContinueToDiscover = {}, + onImportTapped = {}, state = OnboardingWelcomeState( newsletter = false ), + onContinue = {}, onNewsletterCheckedChanged = {}, ) } diff --git a/modules/services/localization/src/main/res/values/strings.xml b/modules/services/localization/src/main/res/values/strings.xml index 2d992213bfc..82f4fbbf9e1 100644 --- a/modules/services/localization/src/main/res/values/strings.xml +++ b/modules/services/localization/src/main/res/values/strings.xml @@ -1496,6 +1496,9 @@ Find under-the-radar and trending podcasts in our hand-curated Discover page. Find My Next Podcast Find Podcasts + Import your podcasts + Coming from another app? Bring your podcasts with you. + Import Podcasts From abdf08730cd71b0314e655a74faac9ac3fff9639 Mon Sep 17 00:00:00 2001 From: Jeremy Massel <1123407+jkmassel@users.noreply.github.com> Date: Mon, 5 Dec 2022 17:33:13 -0700 Subject: [PATCH 03/24] Use Release Toolkit for GlotPress Download --- fastlane/Fastfile | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index ba819cbfe34..f76de5aa8fd 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -20,6 +20,26 @@ PLAY_STORE_TRACK_AUTOMOTIVE_BETA = "automotive:beta" PLAY_STORE_TRACK_AUTOMOTIVE_PRODUCTION = "automotive:production" PLAY_STORE_TRACK_BETA = "beta" PLAY_STORE_TRACK_PRODUCTION = "production" +GLOTPRESS_APP_STRINGS_PROJECT_URL = 'https://translate.wordpress.com/projects/pocket-casts/android/' + +SUPPORTED_LOCALES = [ + { glotpress: "ar", android: "ar", google_play: "ar", promo_config: {}}, + { glotpress: "de", android: "de", google_play: "de-DE", promo_config: {} }, + { glotpress: "es", android: "es", google_play: "es-ES", promo_config: {} }, + { glotpress: "es", android: "es-rMX", google_play: "es-MX", promo_config: {} }, + { glotpress: "en-gb", android: "en-rGB", google_play: "en-GB", promo_config: {} }, + { glotpress: "fr", android: "fr", google_play: "fr-FR", promo_config: {} }, + { glotpress: "fr", android: "fr-rCA", google_play: "fr-CA", promo_config: {} }, + { glotpress: "it", android: "it", google_play: "it-IT", promo_config: {} }, + { glotpress: "ja", android: "ja", google_play: "ja-JP", promo_config: {} }, + { glotpress: "nl", android: "nl", google_play: "nl-NL", promo_config: {} }, + { glotpress: "nl", android: "nb", google_play: "nb-NB", promo_config: {} }, + { glotpress: "pt-br", android: "pt-rBR", google_play: "pt-BR", promo_config: {} }, + { glotpress: "ru", android: "ru", google_play: "ru-RU", promo_config: {} }, + { glotpress: "sv", android: "sv", google_play: "sv-SE", promo_config: {} }, + { glotpress: "zh-cn", android: "zh", google_play: "zh-CN", promo_config: {} }, + { glotpress: "zh-tw", android: "zh-rTW", google_play: "zh-TW", promo_config: {} }, +].freeze ######################################################################## # Environment @@ -169,6 +189,14 @@ platform :android do version = android_get_release_version() + # Download Localizations + android_download_translations( + res_dir: File.join('modules', 'services', 'localization', 'src', 'main', 'res'), + glotpress_url: GLOTPRESS_APP_STRINGS_PROJECT_URL, + locales: SUPPORTED_LOCALES, + lint_task: 'lintRelease' + ) + # Wrap up removebranchprotection(repository:GH_REPOSITORY, branch: "release/#{version["name"]}") setfrozentag(repository:GH_REPOSITORY, milestone: version["name"], freeze: false) From cef76f4106793641140a66f4bc18b15ab167d451 Mon Sep 17 00:00:00 2001 From: Jeremy Massel <1123407+jkmassel@users.noreply.github.com> Date: Mon, 5 Dec 2022 17:33:37 -0700 Subject: [PATCH 04/24] Remove standalone GlotPress Translation Script --- scripts/import_glotpress_translations.sh | 67 ------------------------ 1 file changed, 67 deletions(-) delete mode 100755 scripts/import_glotpress_translations.sh diff --git a/scripts/import_glotpress_translations.sh b/scripts/import_glotpress_translations.sh deleted file mode 100755 index 35343fce646..00000000000 --- a/scripts/import_glotpress_translations.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env ruby -require 'rubygems' -require 'fileutils' -require 'net/http' -require 'uri' -require 'nokogiri' -require 'typhoeus' - -Typhoeus::Config.user_agent = "custom user agent" - -languages = [ - { label: "Chinese (China)", code: "zh-cn", folder: "values-zh" }, - { label: "Chinese (Taiwan)", code: "zh-tw", folder: "values-zh-rTW" }, - { label: "German", code: "de", folder: "values-de" }, - { label: "Italian", code: "it", folder: "values-it" }, - { label: "Japanese", code: "ja", folder: "values-ja" }, - { label: "Portuguese (Brazil)", code: "pt-br", folder: "values-pt-rBR" }, - { label: "Spanish (Spain)", code: "es", folder: "values-es" }, - { label: "Spanish (Mexico)", code: "es-mx", folder: "values-es-rMX" }, - { label: "Swedish", code: "sv", folder: "values-sv" }, - { label: "Dutch", code: "nl", folder: "values-nl" }, - { label: "French (France)", code: "fr", folder: "values-fr" }, - { label: "French (Canada)", code: "fr-ca", folder: "values-fr-rCA" }, - { label: "Russian", code: "ru", folder: "values-ru" }, - { label: "Arabic", code: "ar", folder: "values-ar" }, - { label: "English (UK)", code: "en-gb", folder: "values-en-rGB" }, - { label: "Norwegian", code: "nb", folder: "values-nb" } -] - -def write_string_to_file(contents, file_name) - File.open(file_name, "w") do |file| - file.write(contents) - end -end - -def clean_xml(xml) - doc = Nokogiri.XML(xml) - doc.xpath('/resources/string').each do |string| - string.remove if string.text.length == 0 || string.text.include?("@string") - # remove nbsp characters - string.content = string.content.gsub(/[[:space:]]/, ' ') if string.text.length > 0 - end - xml = doc.to_xml - # remove empty lines - xml = xml.each_line.reject { |x| x.strip == "" }.join - xml -end - -resources_folder = File.expand_path("..", Dir.pwd), "modules/services/localization/src/main/res" - -languages.each do |language| - code = language[:code] - folder = File.join(resources_folder, language[:folder]) - FileUtils.mkdir_p folder - - file = File.join(folder, "strings.xml") - - url = "https://translate.wordpress.com/projects/pocket-casts/android/#{code}/default/export-translations/?format=android" - puts "Downloading #{url}" - response = Typhoeus.get(url) - if response.success? - xml = clean_xml(response.body) - write_string_to_file(xml, file) - else - puts "Call failed #{response.code}" - end -end \ No newline at end of file From 49c5bbdf152939667927e17cd433600f21f0f804 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Mon, 5 Dec 2022 22:22:06 -0500 Subject: [PATCH 05/24] Add import and import from castbox pages --- base.gradle | 1 + dependencies.gradle | 1 + .../onboarding/OnboardingFlowComposable.kt | 10 +- .../import/OnboardingImportCastbox.kt | 123 ++++++++++++++++++ .../onboarding/import/OnboardingImportFlow.kt | 37 ++++++ .../import/OnboardingImportStartPage.kt | 106 +++++++++++++++ .../src/main/res/drawable-hdpi/castbox.png | Bin 0 -> 9611 bytes .../src/main/res/drawable-hdpi/other_apps.png | Bin 0 -> 11014 bytes .../src/main/res/drawable-mdpi/castbox.png | Bin 0 -> 5208 bytes .../src/main/res/drawable-mdpi/other_apps.png | Bin 0 -> 5687 bytes .../src/main/res/drawable-xhdpi/castbox.png | Bin 0 -> 14470 bytes .../main/res/drawable-xhdpi/other_apps.png | Bin 0 -> 17287 bytes .../src/main/res/drawable-xxhdpi/castbox.png | Bin 0 -> 25599 bytes .../main/res/drawable-xxhdpi/other_apps.png | Bin 0 -> 34914 bytes .../src/main/res/drawable-xxxhdpi/castbox.png | Bin 0 -> 37139 bytes .../main/res/drawable-xxxhdpi/other_apps.png | Bin 0 -> 57528 bytes .../src/main/res/drawable/pc_bw_import.xml | 53 ++++++++ .../src/main/res/values/strings.xml | 13 ++ 18 files changed, 340 insertions(+), 4 deletions(-) create mode 100644 modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt create mode 100644 modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt create mode 100644 modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt create mode 100644 modules/services/images/src/main/res/drawable-hdpi/castbox.png create mode 100644 modules/services/images/src/main/res/drawable-hdpi/other_apps.png create mode 100644 modules/services/images/src/main/res/drawable-mdpi/castbox.png create mode 100644 modules/services/images/src/main/res/drawable-mdpi/other_apps.png create mode 100644 modules/services/images/src/main/res/drawable-xhdpi/castbox.png create mode 100644 modules/services/images/src/main/res/drawable-xhdpi/other_apps.png create mode 100644 modules/services/images/src/main/res/drawable-xxhdpi/castbox.png create mode 100644 modules/services/images/src/main/res/drawable-xxhdpi/other_apps.png create mode 100644 modules/services/images/src/main/res/drawable-xxxhdpi/castbox.png create mode 100644 modules/services/images/src/main/res/drawable-xxxhdpi/other_apps.png create mode 100644 modules/services/images/src/main/res/drawable/pc_bw_import.xml diff --git a/base.gradle b/base.gradle index 2c4bc2510ba..69b7cf0b2b6 100644 --- a/base.gradle +++ b/base.gradle @@ -195,6 +195,7 @@ dependencies { implementation androidLibs.flexbox implementation androidLibs.composeActivity implementation androidLibs.composeAnimation + implementation androidLibs.composeConstraint implementation androidLibs.composeIcons implementation androidLibs.composeLiveData implementation androidLibs.composeMaterial diff --git a/dependencies.gradle b/dependencies.gradle index 3bd4452e8ad..c16315e19f9 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -157,6 +157,7 @@ project.ext { viewPager: "androidx.viewpager2:viewpager2:1.0.0", composeActivity: "androidx.activity:activity-compose:1.5.1", composeAnimation: "androidx.compose.animation:animation:$versionCompose", + composeConstraint: "androidx.constraintlayout:constraintlayout-compose:1.0.1", composeIcons: "androidx.compose.material:material-icons-extended:$versionCompose", composeLiveData: "androidx.compose.runtime:runtime-livedata:$versionCompose", composeMaterial: "androidx.compose.material:material:$versionCompose", diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt index ccad8b6901e..72ec9de2e8c 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt @@ -156,13 +156,15 @@ fun OnboardingFlowComposable( isSignedInAsPlus = signInState?.isSignedInAsPlus ?: false, onContinue = completeOnboarding, onContinueToDiscover = completeOnboardingToDiscover, - onImportTapped = { navController.navigate(OnboardingNavRoute.import) }, + onImportTapped = { navController.navigate(OnboardingNavRoute.importFlow) }, onBackPressed = { navController.popBackStack() }, ) } - composable(OnboardingNavRoute.import) { - OnboardingImportFlow() + composable(OnboardingNavRoute.importFlow) { + OnboardingImportFlow( + onBackPressed = { navController.popBackStack() }, + ) } } } @@ -181,7 +183,7 @@ private object AnalyticsProp { private object OnboardingNavRoute { const val createFreeAccount = "create_free_account" const val forgotPassword = "forgot_password" - const val import = "import" + const val importFlow = "importFlow" const val logIn = "log_in" const val logInGoogle = "log_in_google" const val logInOrSignUp = "log_in_or_sign_up" diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt new file mode 100644 index 00000000000..db61ad4cf1a --- /dev/null +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt @@ -0,0 +1,123 @@ +package au.com.shiftyjelly.pocketcasts.account.onboarding.import + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import androidx.constraintlayout.compose.ConstraintLayout +import androidx.constraintlayout.compose.Dimension +import au.com.shiftyjelly.pocketcasts.compose.AppThemeWithBackground +import au.com.shiftyjelly.pocketcasts.compose.bars.ThemedTopAppBar +import au.com.shiftyjelly.pocketcasts.compose.buttons.RowButton +import au.com.shiftyjelly.pocketcasts.compose.components.TextH10 +import au.com.shiftyjelly.pocketcasts.compose.components.TextP40 +import au.com.shiftyjelly.pocketcasts.compose.preview.ThemePreviewParameterProvider +import au.com.shiftyjelly.pocketcasts.ui.theme.Theme +import au.com.shiftyjelly.pocketcasts.images.R as IR +import au.com.shiftyjelly.pocketcasts.localization.R as LR + +@Composable +fun OnboardingImportCastbox( + onBackPressed: () -> Unit +) { + Column { + + ThemedTopAppBar( + onNavigationClick = onBackPressed, + ) + + Column(Modifier.padding(horizontal = 24.dp)) { + + Image( + painter = painterResource(IR.drawable.castbox), + contentDescription = null, + modifier = Modifier.padding(vertical = 16.dp) + ) + + TextH10(stringResource(LR.string.onboarding_import_from_castbox)) + + Spacer(Modifier.height(16.dp)) + + NumberedList( + stringResource(LR.string.onboarding_import_from_castbox_step_1), + stringResource(LR.string.onboarding_import_from_castbox_step_2), + stringResource(LR.string.onboarding_import_from_castbox_step_3), + stringResource(LR.string.onboarding_import_from_castbox_step_4), + stringResource(LR.string.onboarding_import_from_castbox_step_5), + stringResource(LR.string.onboarding_import_from_castbox_step_6), + stringResource(LR.string.onboarding_import_from_castbox_step_7), + ) + } + + Spacer(Modifier.weight(1f)) + + RowButton( + text = stringResource(LR.string.onboarding_import_from_castbox_open), + onClick = {}, + ) + } +} + +@Composable +private fun NumberedList(vararg texts: String) { + ConstraintLayout(Modifier.fillMaxWidth()) { + val numberRefs = texts.map { createRef() } + val textRefs = texts.map { createRef() } + + val barrier = createEndBarrier(*numberRefs.toTypedArray()) + + texts.forEachIndexed { index, text -> + + val numberRef = numberRefs[index] + val textRef = textRefs[index] + + // Number + TextP40( + text = "${index + 1}.", + modifier = Modifier.constrainAs(numberRef) { + top.linkTo( + anchor = if (index == 0) parent.top else textRefs[index - 1].bottom, + margin = if (index == 0) 0.dp else 12.dp + ) + start.linkTo(parent.start) + } + ) + + // Indented text + TextP40( + text = text, + textAlign = TextAlign.Start, + modifier = Modifier + .constrainAs(textRef) { + top.linkTo(numberRef.top) + start.linkTo(barrier, 8.dp) + end.linkTo(parent.end) + height = Dimension.wrapContent + width = Dimension.fillToConstraints + } + ) + } + } +} + +@Preview +@Composable +fun OnboardingImportCastboxPreview( + @PreviewParameter(ThemePreviewParameterProvider::class) themeType: Theme.ThemeType, +) { + AppThemeWithBackground(themeType) { + OnboardingImportCastbox( + onBackPressed = {} + ) + } +} diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt new file mode 100644 index 00000000000..09676b0b3d4 --- /dev/null +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt @@ -0,0 +1,37 @@ +package au.com.shiftyjelly.pocketcasts.account.onboarding.import + +import androidx.compose.runtime.Composable +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController + +@Composable +fun OnboardingImportFlow( + onBackPressed: () -> Unit, +) { + + val navController = rememberNavController() + NavHost( + navController = navController, + startDestination = OnboardingImportNavRoute.start + ) { + composable(OnboardingImportNavRoute.start) { + OnboardingImportStartPage( + onCastboxClicked = { navController.navigate(OnboardingImportNavRoute.castbox) }, + onOtherAppsClicked = {}, + onBackPressed = { navController.popBackStack() }, + ) + } + + composable(OnboardingImportNavRoute.castbox) { + OnboardingImportCastbox( + onBackPressed = { navController.popBackStack() }, + ) + } + } +} + +private object OnboardingImportNavRoute { + const val start = "start" + const val castbox = "castbox" +} diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt new file mode 100644 index 00000000000..98a67659971 --- /dev/null +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt @@ -0,0 +1,106 @@ +package au.com.shiftyjelly.pocketcasts.account.onboarding.import + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import au.com.shiftyjelly.pocketcasts.compose.AppThemeWithBackground +import au.com.shiftyjelly.pocketcasts.compose.bars.ThemedTopAppBar +import au.com.shiftyjelly.pocketcasts.compose.components.TextH10 +import au.com.shiftyjelly.pocketcasts.compose.components.TextH40 +import au.com.shiftyjelly.pocketcasts.compose.components.TextP40 +import au.com.shiftyjelly.pocketcasts.compose.preview.ThemePreviewParameterProvider +import au.com.shiftyjelly.pocketcasts.ui.theme.Theme +import au.com.shiftyjelly.pocketcasts.images.R as IR +import au.com.shiftyjelly.pocketcasts.localization.R as LR + +@Composable +fun OnboardingImportStartPage( + onCastboxClicked: () -> Unit, + onOtherAppsClicked: () -> Unit, + onBackPressed: () -> Unit, +) { + Column { + + ThemedTopAppBar( + title = stringResource(LR.string.onboarding_welcome_back), + onNavigationClick = onBackPressed + ) + + TextH10( + text = stringResource(LR.string.onboarding_bring_your_podcasts), + modifier = Modifier.padding(horizontal = 24.dp) + ) + + Spacer(Modifier.height(8.dp)) + TextP40( + text = stringResource(LR.string.onboarding_coming_from_another_app), + modifier = Modifier.padding(horizontal = 24.dp) + ) + + Spacer(Modifier.height(24.dp)) + ImportRow( + text = stringResource(LR.string.onboarding_import_from_castbox), + iconRes = IR.drawable.castbox, + onClick = onCastboxClicked, + ) + + ImportRow( + text = stringResource(LR.string.onboarding_import_from_other_apps), + iconRes = IR.drawable.other_apps, + onClick = onOtherAppsClicked, + ) + + Spacer(Modifier.weight(1f)) + } +} + +@Composable +private fun ImportRow( + text: String, + @DrawableRes iconRes: Int, + onClick: () -> Unit, +) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .clickable { onClick() } + .padding(vertical = 8.dp, horizontal = 24.dp) + ) { + Image( + painter = painterResource(iconRes), + contentDescription = null, + ) + Spacer(Modifier.width(16.dp)) + TextH40(text) + } +} + +@Preview +@Composable +private fun OnboardingImportStartPagePreview( + @PreviewParameter(ThemePreviewParameterProvider::class) themeType: Theme.ThemeType, +) { + AppThemeWithBackground(themeType) { + OnboardingImportStartPage( + onCastboxClicked = {}, + onOtherAppsClicked = {}, + onBackPressed = {}, + ) + } +} diff --git a/modules/services/images/src/main/res/drawable-hdpi/castbox.png b/modules/services/images/src/main/res/drawable-hdpi/castbox.png new file mode 100644 index 0000000000000000000000000000000000000000..c11061406e0f7a4d894fa9872c925aa6e27e89a1 GIT binary patch literal 9611 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 AsQ>@~ literal 0 HcmV?d00001 diff --git a/modules/services/images/src/main/res/drawable-mdpi/castbox.png b/modules/services/images/src/main/res/drawable-mdpi/castbox.png new file mode 100644 index 0000000000000000000000000000000000000000..85a374312e35196f83092cc16eef92eaab62ffc2 GIT binary patch literal 5208 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 S{Sd?e0000= zSJipnxxdH$c9(szJOq|qlHeo2QX|Itq}nD8h;%yBfvILY;~zD~no-*tRB9tS1x?Z! zry4Ul)(lNZr;%8-xI$Zsj`(T^j4TUgM3G$(3cIim_Vs(+lkYp{`_4J{x9bR*+?~7k z-gD3S&i8(tbAJkc%R_6e=&F>Wdvo2eVS|$QcyG?i1KTwBS9J66!w;*69(u@JrGIeM z0+ZX!Se{phxP;H=aws^zLkW><)~t#8`ufz_vuD-by?fPy1q-5dI;}tY=p%t^5Lviz zp&Lx^=sCPr_9>N0>d28Jfbf9e@i>KjbX8TAdCui>x~{HHUw{4e@qq&e)br0j9}`Y8 z=kM$wj?#(5rj{*RmU;Q*muHWTj{apnpZ{68T;3PQ@u0RxZ2rZu4i5J~?G^8)Jfu(9 zH)tEg^Zi1h@YCVp;oAro!U;7Z62bgV2qs_zlz{Ksx9{SyiHRQ}v4e3yNF{>i^vLpU z>^KmP39l8f;s6%4hD;5)7n1-!_~3(!2uBi*nBi}G7%8JVrFZV!IeP*Lws&&! zPfJ9s!?tn-BMiZ|Zybz^6Mf4JCk|oBbLAY&&~QFCkL?=@qkuRcJb3U*B3{h(oQdAE zXU`>tLO?VlUgDFGDe=2ffVg`v{Yw>n95cfAAz_x7kZI-5oX__!C2%Vn$rBAk%jep> zX3zb?3opz;t{p)D6~tOZ!%0fgX3i2nm!yB}-%T+_`c}L%cup43x#R$**@s$`Hh1jJKLjPHsDX}(H-Cc5Yea_z<7bc}M>Qj&3#nH7gH z6LU`q%l0E$kft2jdnoycB@G<1q8+<-EzDI{|CLPzFe{5qXY8R(KX*D_DefRZl{iP> zG0L==H{3<@JD!_!F-C>kc|OqoswmJfOu7efL*0x(386znE23rBu3cZ+wryJ~lyKVg zv1yNLX=zDc^VKWXTMS|aHVrg(&zQ@z$=)mhu_xH_!4W6)XxkCcgIMI1L!P@RAwQ{( ziow|7@?_yD-xnPMGuOjlftjbvF1zeIm|gzO+O=y<*rW6|l6Z%qi*n{>Ob2h_iLA7g zNX0ZN2ir5kJ}diHG{Or%&=C9=6GOG5m?2xIS`l|e^j-s)e4*KDf-qfAov&hJO-=31 zPdxEN^WnpXBj6DcQBMWJv17+lD_5>u?Pugk9q?dsi-1w3KrL0E?#?ulba;swDO)p0 zSWaM0DxA*}s~DXm?2u&bEXbP-s%HZ_?bSm=LlM$y%$rnQaRro~R#$gjY}J?*lP3%m zP;0J0tTt#-S)%}!@ifj_0^2toyHAY6?&IU|#{W-1&)FiLCG(=ODpE_QSHaTeEOcB{ zhu130I>CYGiwUrmHfpiC71Of1$0{Vu6HT?SG*s8rTsJm0_Agk}lq{+?LrZmccUK?j z>3KVo$u3D4sEFPj*6x+^oh)-*nd)5twj;r6<9h?}#)%1hiOh~7o>t&n#|3drhG`h^ z;AKs)dO@u#cQw-{6>x}?Vl`(!p+cPPSo>5g7P=R-wO!rc-#?CzWsa>(3r92 zHdxfqb*2d0j!wWUJrmG1n1{7HPeI4RTKK_L&Cr1Tq~bI_R{+v#X3Ur|-qF!fl!>!=PMgRV`h`jrm>kWfwxySpsE@>Q*WHe!>0F#U^hB9OQ3`b%f#h#a`4y{P4IhY<88GH$2P*s|B0Zh zZxq(Odj_6a-pthaC}Ta8Xr^NMwUmv&8ibWQPQvb!1*7`kytp2||NApw{a2cy1Mk}! za_H@gaP`Y4VB>p(Mn#EX|F*nNH=u9WawHGLIC0jV8k@Wr)z;462;E`mo1`Y`$^}6u zS?yek4K32Fy*Gsl-6GqB4BGV4THRKgGJ_s{f7rICsU2psMhaRK~-d@oN?Tsmk zgD$^UN;yGx4V2-U9fKHq^6=^(H^X&k`_$g@(g+NVj-eJckV$CCC~a=S_#yL5np%TWgDsEiA(o{O9cnGD+*Cl?LC>a^`>0i~LORrAtL7w_9M zghXfIfu(iO-jp)!J?Qc8`@aFTcfA#hCM&icCMNKi5gR@ykMss#4!0C|VW*k&x`-jRV zUf(n?V>%FlyZd5jtIxsuMOib9!W`N9j}MMO&zLsn&p#f68+V)niUu?b5~&-iv#`6r zj4;Y(o@-}fVHKre_o*^C!!f~czoY`V)xlQzY%i|j-nO5ET~64xPlvDPATk+x>F z2MZ)9CbZ{l*Psmp?e$jANNq_91}Go)i_V`Q?vo-vm)D(yUQ7{9a%P0(tG_sS?-E!v%CJ5abl&t6e!=Pba?pe#x9 zToK8wwyB{~WR@{7-WrzgAHZB3HK4swf#mQ`x1G~zod;&-JByox3W-Etm+~xF6-NEI+lEN8oO6?q&Lu+lyJok>4O}F{Ak?D<+ zm&!ulG{4FcTbX?!f#3W>&M~=bpk$iKA=1%1YMIxHFhe}R`Wah0XeTcAz!pclNC8e% zvTbDur@bptb??O|JGsimg3xKSH(F_sZBv(PXQol@6})+>XqZ9F`u4&M-0{T}R35jq zMsRamnw*s)hel%z;f*QUDM0^GV!~5yJ^)`Hnkq@LEXWTr@`At6gh?7W=N8iDG8|@r z)0@DV0XsYJvE3X*C?W9XNsBZkDR&^DB;g14o^?cSTCCt-FOT4kFDP@qa#f^%d})d? zRPb2$sImWB+EV1`%+Yy_oScGHb5ntldA#E|_IN6ld?|gk3uiz!u9$c#f2N%s9qV_= ziYxOH)k@-7xeOVA98uf0acF=%?7PY4=))zYm+lxtZzS$j-G_ld zjUl1l{4A3n&b2cl7(&1F{jL$yw?3`aw(F{)eMZjNVAq*~iSaTI5k`dz-Pa?t z+HnQu=U3*SrP{8oJhpE{Q4GJOHI*RR;hDrOEFr`9CLEJjCy7&iVhW85FT5~I_4x3} zXdhH~9`8$V{)m=+bWpKDq6F$eC-euq#(^aKvumfps+KDBTal5ZsO_KpS3kVjSA?+4 zy>T8AdqcB>(N=5yMJFy!bi9d7tU_t8sDb&_p_IK;?ZT<@VOBz0QoEpK?wn?{bIb-H zZ^9XQIwNuLD}P?nZVis4%S&l)!Ps$=x{^fhTU2F2)_2|=hHi99$sRb(bK*?Un_fyupm@E;HbpJvd`hHAYA(PnVU;lC08d^7Y5qFDsUW$#7J3>uf(A2VzOow zxNY4fSs<_cgZ-|K(Sv#IGO~noz%;dcuuSzgwAN*ywV@jR;VU(;YEA}xOrCp+B&#chn-?f{yL=uhj|BJ~eh%>)V2bUEt*xrd}sLe{u;XOPm>@ zTH{j+uc6V0(&H7#QkP;B2yYJhsJ2C~cciL+_YPLhKryvtPDa zx9Z^MXU!5IzMu|h)^2VkD@o+sZoTzZYvbhH+?t!u(h^QYhdH23!aFIDi1o_%S0NJG zNOe-4Zq!u4(J`CjJ7PGXgc7gJDFDKB!;r3|4>L!HnJuNPbdY%)!f924BpxI%5EOlG z60h=%a77GA6c8cPn2Ei(@IdxF`G{~K!*SHD1bK4{m?6*3$0k1X^VssznGVdBQdTD1 zRA(l0bLs;@>ZgOre7rPXJ~ow6tQ@ugNhBd5A@gsjB;K#$K#4bGQ-KH8%2r%n2*5tf z2VA$QsNw*(fGC^)oQ#1?CK{mxVI^*!`&=_K zJvHHYEW!1*P~(ygDrPn2sW=toT}zLL?BHte^~LOvrXhOA;Y?BHMm4HN{ihFUj=G=^ zNi|`ho~ce7EZ6NkD#$6sRJ4Qj-HR|>)l4Ru+P-^nI;23W&{>J(y&uuR#{}RR0+7r@ zJo|9vJu}_Z#GB))l#kC#jj$R zo69zbv|ck^!;4pdo?q?M+&ES@+K6p|?$+v)dQAY0^zJl8~w0g)`hK zjRyu!zg1T^ZLKFwLWwXSF^iInCGc*pa~%7!H3)x5yoP^TQpVGv2bNp%mo~cI%ccTh0*S+APNNH!zgDHZ(NEX#B;OUVP!7naMn5A}%ZM za6*ZM+-9#Eb7TN&^AgmyZ!#>Z7pjK-f0Mtj3|rJ5x2aj!uS5 z&|xyAJ)^>JQM5Ougi|)?5iNgz|NV#i`}<2|(lTSHpma}#Z_TaW`qtb{8#n!TI!d*; zmr6c$N#yUwvB-BQk%}CqP|INiwy!{2s1KwPZWBAC75@n?th|0< z5`qvA%;yj$eZ?gz4cdJ^O-AKkDO`W;-?8#i1_rBAnP{^^>hpL())&YU^< zd+xcXbi)ldc!q`CBj9V-u1&r5)?4&FYt7?NJaPGo8&^G>Nu^uD5h7tbXTWWTunJxG zRAPd_{2@Tu6Cd;q;+bdzGhGRTwU#Ys`sx8Cz5UhB+y45lyY?U*qifczDe&)BbU;S( zpn=Gl)PVyBa+uIm-+TZ47v6T;?Z3#R)AM+tQM;ulk*c!av&urG6^aWxzO8~(H)qfo z7$MUr`NY)fAHX$CB1!+`nP=C2?|bVHVaqr=wESzYy;iRLl~OcW7|Q&*r?0OsUtL{2 zzTv?KKfHI{y(>UeJuC!M2A-! zMX&?mc=tVbt@z;&A3Zd8?%c6u%a#?07MSArOb;TG|M0^Pvm+xTISh5VzuU0kiygQ8 z#XU{aoBj+qaq)ghBvqmQ%peHj8YE1Z`zsZu!IQ^Vm`=dF;Zvvj{(b8&fAQSL4I4hj zraYeX5nl=4mF#e(&zW#~M|JD#ufHB)y`DzGv&CXDgB4uW*T251`R>2Hd&LE_XI)uc zTe~Qit(vRI2||#HiLF-xRsQotJq033^L7X;9}?r?e6etRe022SslHS1KKc0L|G9np z_I^yc3zE}ZQ(Q6cuz!?$HvUEO>z44=_SlOi?e6XE>S*$ z30chhQlIHz&nZ|61E@dRO^Ut(MsJy>Pb9J2OAQVVns>68N2{51Pgh#?pk*yu#ia#J zTIr!BAZpjV@=0UlSv<3}GaTUY23{0JG1k>(sxOWoKOSSs9WPq6sC+)ZI6Sv3!85@0 zr;T;`Y2((dTZs`QDf3J#IrPOrI7Zg7!z26|B^?#_nty)jBqneL7X8!`v#=P=&?WNc zO0dHV&f^GdPMnZwrhmi?=_lXLY3X3iCGjr2hCjf?m}`D3D)6Yiqoc#&Ky?Mfba*Ir dUh*@?ZvYbiqUs9s$Rq#&002ovPDHLkV1hGe2!;Rv literal 0 HcmV?d00001 diff --git a/modules/services/images/src/main/res/drawable-xhdpi/castbox.png b/modules/services/images/src/main/res/drawable-xhdpi/castbox.png new file mode 100644 index 0000000000000000000000000000000000000000..b46724a8b5de86ef1e9609280d086dbb8fbd4240 GIT binary patch literal 14470 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 Y0UG4S8|3>D)c^nh07*qoM6N<$f+@X}BLDyZ literal 0 HcmV?d00001 diff --git a/modules/services/images/src/main/res/drawable-xhdpi/other_apps.png b/modules/services/images/src/main/res/drawable-xhdpi/other_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..8267879a30b368399db0f74d3960972a94266ccf GIT binary patch literal 17287 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 t+GZ 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 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/services/localization/src/main/res/values/strings.xml b/modules/services/localization/src/main/res/values/strings.xml index 82f4fbbf9e1..1addebf97fc 100644 --- a/modules/services/localization/src/main/res/values/strings.xml +++ b/modules/services/localization/src/main/res/values/strings.xml @@ -1499,6 +1499,19 @@ Import your podcasts Coming from another app? Bring your podcasts with you. Import Podcasts + Bring your podcasts with you + Coming from another app? Import your podcasts and get listening. You can always do this later in settings. + Import from Castbox + Import from other apps + + Open Castbox. + Tap the \"Personal\" tab. + Tap "Settings". + Scroll down to \"OPML Export\" and tap it. + Tap \"Open in Pocket Casts\" if it shows, otherwise tap \"More..\". + Find the \"Copy to Pocket Casts\" action by scrolling the app icons horizontally. + Tap \"Copy to Pocket Casts\". + Open Castbox… From 96f2bb35d68801d266c0d829e712209aac13c3ac Mon Sep 17 00:00:00 2001 From: ashiagr Date: Tue, 6 Dec 2022 11:31:03 +0530 Subject: [PATCH 06/24] Add change log entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2e58cd3870..101f6f692cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ ([#575](https://github.com/Automattic/pocket-casts-android/pull/575)). * Fixed miniplayer play icon animation on theme change ([#527](https://github.com/Automattic/pocket-casts-android/pull/527)). + * Fixed talkback issues + ([#630](https://github.com/Automattic/pocket-casts-android/pull/630)). 7.27 ----- From 392d78cf635d5797e087433a42f099117db69490 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 10:21:37 -0500 Subject: [PATCH 07/24] Add import from other apps screen --- .../import/OnboardingImportCastbox.kt | 48 ------------- .../onboarding/import/OnboardingImportFlow.kt | 60 +++++++++++++++- .../import/OnboardingImportOtherApps.kt | 68 +++++++++++++++++++ .../src/main/res/values/strings.xml | 5 +- 4 files changed, 130 insertions(+), 51 deletions(-) create mode 100644 modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt index db61ad4cf1a..7a501871797 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt @@ -3,24 +3,19 @@ package au.com.shiftyjelly.pocketcasts.account.onboarding.import import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import androidx.constraintlayout.compose.ConstraintLayout -import androidx.constraintlayout.compose.Dimension import au.com.shiftyjelly.pocketcasts.compose.AppThemeWithBackground import au.com.shiftyjelly.pocketcasts.compose.bars.ThemedTopAppBar import au.com.shiftyjelly.pocketcasts.compose.buttons.RowButton import au.com.shiftyjelly.pocketcasts.compose.components.TextH10 -import au.com.shiftyjelly.pocketcasts.compose.components.TextP40 import au.com.shiftyjelly.pocketcasts.compose.preview.ThemePreviewParameterProvider import au.com.shiftyjelly.pocketcasts.ui.theme.Theme import au.com.shiftyjelly.pocketcasts.images.R as IR @@ -47,7 +42,6 @@ fun OnboardingImportCastbox( TextH10(stringResource(LR.string.onboarding_import_from_castbox)) Spacer(Modifier.height(16.dp)) - NumberedList( stringResource(LR.string.onboarding_import_from_castbox_step_1), stringResource(LR.string.onboarding_import_from_castbox_step_2), @@ -68,48 +62,6 @@ fun OnboardingImportCastbox( } } -@Composable -private fun NumberedList(vararg texts: String) { - ConstraintLayout(Modifier.fillMaxWidth()) { - val numberRefs = texts.map { createRef() } - val textRefs = texts.map { createRef() } - - val barrier = createEndBarrier(*numberRefs.toTypedArray()) - - texts.forEachIndexed { index, text -> - - val numberRef = numberRefs[index] - val textRef = textRefs[index] - - // Number - TextP40( - text = "${index + 1}.", - modifier = Modifier.constrainAs(numberRef) { - top.linkTo( - anchor = if (index == 0) parent.top else textRefs[index - 1].bottom, - margin = if (index == 0) 0.dp else 12.dp - ) - start.linkTo(parent.start) - } - ) - - // Indented text - TextP40( - text = text, - textAlign = TextAlign.Start, - modifier = Modifier - .constrainAs(textRef) { - top.linkTo(numberRef.top) - start.linkTo(barrier, 8.dp) - end.linkTo(parent.end) - height = Dimension.wrapContent - width = Dimension.fillToConstraints - } - ) - } - } -} - @Preview @Composable fun OnboardingImportCastboxPreview( diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt index 09676b0b3d4..26884af532e 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt @@ -1,9 +1,16 @@ package au.com.shiftyjelly.pocketcasts.account.onboarding.import +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.constraintlayout.compose.ConstraintLayout +import androidx.constraintlayout.compose.Dimension import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import au.com.shiftyjelly.pocketcasts.compose.components.TextP40 @Composable fun OnboardingImportFlow( @@ -18,14 +25,62 @@ fun OnboardingImportFlow( composable(OnboardingImportNavRoute.start) { OnboardingImportStartPage( onCastboxClicked = { navController.navigate(OnboardingImportNavRoute.castbox) }, - onOtherAppsClicked = {}, + onOtherAppsClicked = { navController.navigate(OnboardingImportNavRoute.otherApps) }, onBackPressed = { navController.popBackStack() }, ) } composable(OnboardingImportNavRoute.castbox) { OnboardingImportCastbox( - onBackPressed = { navController.popBackStack() }, + onBackPressed = { /* TODO */ }, + ) + } + + composable(OnboardingImportNavRoute.otherApps) { + OnboardingImportOtherApps( + onBackPressed = { /* TODO */ }, + ) + } + } +} + +@Composable +fun NumberedList(vararg texts: String) { + ConstraintLayout(Modifier.fillMaxWidth()) { + val numberRefs = texts.map { createRef() } + val textRefs = texts.map { createRef() } + + val barrier = createEndBarrier(*numberRefs.toTypedArray()) + + texts.forEachIndexed { index, text -> + + val numberRef = numberRefs[index] + val textRef = textRefs[index] + + // Number + TextP40( + text = "${index + 1}.", + modifier = Modifier.constrainAs(numberRef) { + top.linkTo( + anchor = if (index == 0) parent.top else textRefs[index - 1].bottom, + margin = if (index == 0) 0.dp else 12.dp + ) + start.linkTo(parent.start) + } + ) + + // Indented text + TextP40( + text = text, + textAlign = TextAlign.Start, + modifier = Modifier + .constrainAs(textRef) { + top.linkTo(numberRef.top) + start.linkTo(barrier, 8.dp) + end.linkTo(parent.end) + height = Dimension.wrapContent + width = Dimension.fillToConstraints + } ) } } @@ -34,4 +89,5 @@ fun OnboardingImportFlow( private object OnboardingImportNavRoute { const val start = "start" const val castbox = "castbox" + const val otherApps = "otherApps" } diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt new file mode 100644 index 00000000000..be29e86b830 --- /dev/null +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt @@ -0,0 +1,68 @@ +package au.com.shiftyjelly.pocketcasts.account.onboarding.import + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp +import au.com.shiftyjelly.pocketcasts.compose.AppThemeWithBackground +import au.com.shiftyjelly.pocketcasts.compose.bars.ThemedTopAppBar +import au.com.shiftyjelly.pocketcasts.compose.components.TextH10 +import au.com.shiftyjelly.pocketcasts.compose.components.TextP40 +import au.com.shiftyjelly.pocketcasts.compose.preview.ThemePreviewParameterProvider +import au.com.shiftyjelly.pocketcasts.ui.theme.Theme +import au.com.shiftyjelly.pocketcasts.images.R as IR +import au.com.shiftyjelly.pocketcasts.localization.R as LR + +@Composable +fun OnboardingImportOtherApps( + onBackPressed: () -> Unit, +) { + Column { + + ThemedTopAppBar( + onNavigationClick = onBackPressed, + ) + + Column(Modifier.padding(horizontal = 24.dp)) { + + Image( + painter = painterResource(IR.drawable.other_apps), + contentDescription = null, + modifier = Modifier.padding(vertical = 16.dp) + ) + + TextH10(stringResource(LR.string.onboarding_import_from_other_apps)) + + Spacer(Modifier.height(16.dp)) + TextP40(stringResource(LR.string.onboarding_can_import_from_opml)) + + Spacer(Modifier.height(16.dp)) + NumberedList( + stringResource(LR.string.onboarding_import_from_other_apps_step_1), + stringResource(LR.string.onboarding_import_from_other_apps_step_2), + stringResource(LR.string.onboarding_import_from_other_apps_step_3), + ) + } + Spacer(Modifier.weight(1f)) + } +} + +@Preview +@Composable +private fun OnboardingImportOtherAppsPreview( + @PreviewParameter(ThemePreviewParameterProvider::class) themeType: Theme.ThemeType, +) { + AppThemeWithBackground(themeType) { + OnboardingImportOtherApps( + onBackPressed = {}, + ) + } +} diff --git a/modules/services/localization/src/main/res/values/strings.xml b/modules/services/localization/src/main/res/values/strings.xml index 1addebf97fc..15aa9a1cc9a 100644 --- a/modules/services/localization/src/main/res/values/strings.xml +++ b/modules/services/localization/src/main/res/values/strings.xml @@ -1503,7 +1503,6 @@ Coming from another app? Import your podcasts and get listening. You can always do this later in settings. Import from Castbox Import from other apps - Open Castbox. Tap the \"Personal\" tab. Tap "Settings". @@ -1512,6 +1511,10 @@ Find the \"Copy to Pocket Casts\" action by scrolling the app icons horizontally. Tap \"Copy to Pocket Casts\". Open Castbox… + Pocket Casts can import podcasts from OPML files, so if your current app can export an OPML file, you can follow these steps: + Find the export option or open an OPML file. + Scroll horizontally until you see the Pocket Casts icon. + Tap "Copy to Pocket Casts". From f47184f830667e691670cb8007c141176e31b47e Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 11:10:09 -0500 Subject: [PATCH 08/24] Update import directions to be more generic I found that the Share menu behavior varied so much between different versions of Android, particularly when looking at different phone manufacturers, that it seemed better to just give some less specific directions. --- .../import/OnboardingImportCastbox.kt | 1 - .../src/main/res/values/strings.xml | 17 ++++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt index 7a501871797..585cd292d16 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt @@ -49,7 +49,6 @@ fun OnboardingImportCastbox( stringResource(LR.string.onboarding_import_from_castbox_step_4), stringResource(LR.string.onboarding_import_from_castbox_step_5), stringResource(LR.string.onboarding_import_from_castbox_step_6), - stringResource(LR.string.onboarding_import_from_castbox_step_7), ) } diff --git a/modules/services/localization/src/main/res/values/strings.xml b/modules/services/localization/src/main/res/values/strings.xml index 15aa9a1cc9a..357319262f5 100644 --- a/modules/services/localization/src/main/res/values/strings.xml +++ b/modules/services/localization/src/main/res/values/strings.xml @@ -1504,17 +1504,16 @@ Import from Castbox Import from other apps Open Castbox. - Tap the \"Personal\" tab. - Tap "Settings". - Scroll down to \"OPML Export\" and tap it. - Tap \"Open in Pocket Casts\" if it shows, otherwise tap \"More..\". - Find the \"Copy to Pocket Casts\" action by scrolling the app icons horizontally. - Tap \"Copy to Pocket Casts\". + Tap the \“Personal\” tab. + Tap “Settings”. + Scroll down to \“OPML Export\” and tap it. + @string/onboarding_import_from_other_apps_step_2 + @string/onboarding_import_from_other_apps_step_3 Open Castbox… Pocket Casts can import podcasts from OPML files, so if your current app can export an OPML file, you can follow these steps: - Find the export option or open an OPML file. - Scroll horizontally until you see the Pocket Casts icon. - Tap "Copy to Pocket Casts". + Find the other app\’s export option and export an OPML file. + Use your phone\’s \“Share\” menu to send the file to Pocket Casts. + Alternatively, import the file from Pocket Casts\’ \“Import & export OPML\” settings menu. From 7b138f9e41672837d6d66b3902c1d848b3b810ac Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 11:46:47 -0500 Subject: [PATCH 09/24] Wire up "Open Castbox" button --- .../import/OnboardingImportCastbox.kt | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt index 585cd292d16..ad632ed76bf 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt @@ -1,5 +1,6 @@ package au.com.shiftyjelly.pocketcasts.account.onboarding.import +import android.content.ActivityNotFoundException import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -7,6 +8,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -54,13 +56,34 @@ fun OnboardingImportCastbox( Spacer(Modifier.weight(1f)) - RowButton( - text = stringResource(LR.string.onboarding_import_from_castbox_open), - onClick = {}, - ) + val openCastbox = openCastboxFun() + // only show button if we can open the Castbox app + if (openCastbox != null) { + RowButton( + text = stringResource(LR.string.onboarding_import_from_castbox_open), + onClick = openCastbox, + ) + } } } +@Composable +private fun openCastboxFun(): (() -> Unit)? { + val context = LocalContext.current + return context + .packageManager + .getLaunchIntentForPackage("fm.castbox.audiobook.radio.podcast") + ?.let { intent -> + { + try { + context.startActivity(intent) + } catch (e: ActivityNotFoundException) { + // should only happen if the user uninstalls castbox after this screen is composed + } + } + } +} + @Preview @Composable fun OnboardingImportCastboxPreview( From f33cf2b1dd34a857e9861a67041a9bfcaed1c023 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 13:20:58 -0500 Subject: [PATCH 10/24] Use nested graph for import flow --- .../onboarding/OnboardingFlowComposable.kt | 13 ++-- .../onboarding/import/OnboardingImportFlow.kt | 65 +++++++++---------- 2 files changed, 37 insertions(+), 41 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt index 72ec9de2e8c..a096d1bce6b 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt @@ -8,6 +8,7 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import au.com.shiftyjelly.pocketcasts.account.onboarding.import.OnboardingImportFlow +import au.com.shiftyjelly.pocketcasts.account.onboarding.import.OnboardingImportFlow.importFlowGraph import au.com.shiftyjelly.pocketcasts.account.onboarding.recommendations.OnboardingRecommendationsFlow import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTrackerWrapper @@ -48,6 +49,9 @@ fun OnboardingFlowComposable( navController = navController, startDestination = OnboardingNavRoute.logInOrSignUp ) { + + importFlowGraph(navController) + composable(OnboardingNavRoute.logInOrSignUp) { OnboardingLoginOrSignUpPage( onNotNowClicked = { @@ -156,13 +160,7 @@ fun OnboardingFlowComposable( isSignedInAsPlus = signInState?.isSignedInAsPlus ?: false, onContinue = completeOnboarding, onContinueToDiscover = completeOnboardingToDiscover, - onImportTapped = { navController.navigate(OnboardingNavRoute.importFlow) }, - onBackPressed = { navController.popBackStack() }, - ) - } - - composable(OnboardingNavRoute.importFlow) { - OnboardingImportFlow( + onImportTapped = { navController.navigate(OnboardingImportFlow.route) }, onBackPressed = { navController.popBackStack() }, ) } @@ -183,7 +181,6 @@ private object AnalyticsProp { private object OnboardingNavRoute { const val createFreeAccount = "create_free_account" const val forgotPassword = "forgot_password" - const val importFlow = "importFlow" const val logIn = "log_in" const val logInGoogle = "log_in_google" const val logInOrSignUp = "log_in_or_sign_up" diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt index 26884af532e..722ef07d43e 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt @@ -7,39 +7,44 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout import androidx.constraintlayout.compose.Dimension -import androidx.navigation.compose.NavHost +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController +import androidx.navigation.navigation import au.com.shiftyjelly.pocketcasts.compose.components.TextP40 -@Composable -fun OnboardingImportFlow( - onBackPressed: () -> Unit, -) { +object OnboardingImportFlow { - val navController = rememberNavController() - NavHost( - navController = navController, - startDestination = OnboardingImportNavRoute.start - ) { - composable(OnboardingImportNavRoute.start) { - OnboardingImportStartPage( - onCastboxClicked = { navController.navigate(OnboardingImportNavRoute.castbox) }, - onOtherAppsClicked = { navController.navigate(OnboardingImportNavRoute.otherApps) }, - onBackPressed = { navController.popBackStack() }, - ) - } + const val route = "onboardingImportFlow" - composable(OnboardingImportNavRoute.castbox) { - OnboardingImportCastbox( - onBackPressed = { /* TODO */ }, - ) - } + private const val start = "start" + private const val castbox = "castbox" + private const val otherApps = "otherApps" - composable(OnboardingImportNavRoute.otherApps) { - OnboardingImportOtherApps( - onBackPressed = { /* TODO */ }, - ) + fun NavGraphBuilder.importFlowGraph(navController: NavController) { + navigation( + route = this@OnboardingImportFlow.route, + startDestination = start, + ) { + composable(start) { + OnboardingImportStartPage( + onCastboxClicked = { navController.navigate(castbox) }, + onOtherAppsClicked = { navController.navigate(otherApps) }, + onBackPressed = { navController.popBackStack() }, + ) + } + + composable(castbox) { + OnboardingImportCastbox( + onBackPressed = { /* TODO */ }, + ) + } + + composable(otherApps) { + OnboardingImportOtherApps( + onBackPressed = { /* TODO */ }, + ) + } } } } @@ -85,9 +90,3 @@ fun NumberedList(vararg texts: String) { } } } - -private object OnboardingImportNavRoute { - const val start = "start" - const val castbox = "castbox" - const val otherApps = "otherApps" -} From 2c6b39dccba6eb67aa643e17e59fdc3df59db437 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 14:06:12 -0500 Subject: [PATCH 11/24] Move upgrade flow into its own package --- .../account/onboarding/OnboardingFlowComposable.kt | 1 + .../account/onboarding/OnboardingWelcomePage.kt | 1 + .../{ => upgrade}/OnboardingPlusBottomSheet.kt | 10 +++++----- .../{ => upgrade}/OnboardingPlusFeaturesPage.kt | 6 +++--- .../{ => upgrade}/OnboardingPlusUpgradeFlow.kt | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) rename modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/{ => upgrade}/OnboardingPlusBottomSheet.kt (95%) rename modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/{ => upgrade}/OnboardingPlusFeaturesPage.kt (97%) rename modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/{ => upgrade}/OnboardingPlusUpgradeFlow.kt (99%) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt index b583e309f2d..9b04061edd1 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt @@ -8,6 +8,7 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import au.com.shiftyjelly.pocketcasts.account.onboarding.recommendations.OnboardingRecommendationsFlow +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusUpgradeFlow import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTrackerWrapper import au.com.shiftyjelly.pocketcasts.compose.AppThemeWithBackground diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt index 917a10fb1da..2b74844c5bc 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusFeatures import au.com.shiftyjelly.pocketcasts.account.viewmodel.OnboardingWelcomeState import au.com.shiftyjelly.pocketcasts.account.viewmodel.OnboardingWelcomeViewModel import au.com.shiftyjelly.pocketcasts.compose.AppThemeWithBackground diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusBottomSheet.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusBottomSheet.kt similarity index 95% rename from modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusBottomSheet.kt rename to modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusBottomSheet.kt index 343b2c9e4d3..df76968d80c 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusBottomSheet.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusBottomSheet.kt @@ -1,4 +1,4 @@ -package au.com.shiftyjelly.pocketcasts.account.onboarding +package au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade import android.content.res.Resources import android.view.ViewTreeObserver @@ -38,10 +38,10 @@ import androidx.compose.ui.unit.dp import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.hilt.navigation.compose.hiltViewModel -import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingPlusFeatures.PlusOutlinedRowButton -import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingPlusFeatures.PlusRowButton -import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingPlusFeatures.UnselectedPlusOutlinedRowButton -import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingPlusFeatures.plusGradientBrush +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusFeatures.PlusOutlinedRowButton +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusFeatures.PlusRowButton +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusFeatures.UnselectedPlusOutlinedRowButton +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusFeatures.plusGradientBrush import au.com.shiftyjelly.pocketcasts.account.viewmodel.OnboardingPlusBottomSheetState import au.com.shiftyjelly.pocketcasts.account.viewmodel.OnboardingPlusBottomSheetViewModel import au.com.shiftyjelly.pocketcasts.compose.bottomsheet.Pill diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusFeaturesPage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusFeaturesPage.kt similarity index 97% rename from modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusFeaturesPage.kt rename to modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusFeaturesPage.kt index 1a3b3470582..b35519ca8fc 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusFeaturesPage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusFeaturesPage.kt @@ -1,4 +1,4 @@ -package au.com.shiftyjelly.pocketcasts.account.onboarding +package au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade import android.os.Build import androidx.annotation.DrawableRes @@ -47,8 +47,8 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import au.com.shiftyjelly.pocketcasts.account.R -import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingPlusFeatures.PlusOutlinedRowButton -import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingPlusFeatures.PlusRowButton +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusFeatures.PlusOutlinedRowButton +import au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade.OnboardingPlusFeatures.PlusRowButton import au.com.shiftyjelly.pocketcasts.account.viewmodel.OnboardingPlusFeaturesViewModel import au.com.shiftyjelly.pocketcasts.compose.bars.NavigationIconButton import au.com.shiftyjelly.pocketcasts.compose.components.TextH10 diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusUpgradeFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusUpgradeFlow.kt similarity index 99% rename from modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusUpgradeFlow.kt rename to modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusUpgradeFlow.kt index 31ffb0966c3..fb07346254f 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingPlusUpgradeFlow.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusUpgradeFlow.kt @@ -1,4 +1,4 @@ -package au.com.shiftyjelly.pocketcasts.account.onboarding +package au.com.shiftyjelly.pocketcasts.account.onboarding.upgrade import androidx.activity.compose.BackHandler import androidx.compose.foundation.BorderStroke From 8ee40ec82299ad7b35d4239d63318990d720da7d Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 14:44:05 -0500 Subject: [PATCH 12/24] Force plus upgrade page to full height --- .../upgrade/OnboardingPlusFeaturesPage.kt | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusFeaturesPage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusFeaturesPage.kt index b35519ca8fc..82a4a6f1449 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusFeaturesPage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/upgrade/OnboardingPlusFeaturesPage.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.border import androidx.compose.foundation.gestures.scrollBy import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row @@ -18,6 +19,7 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -92,27 +94,31 @@ internal fun OnboardingPlusFeaturesPage( LaunchedEffect(Unit) { viewModel.onShown() } - Box( - Modifier - .verticalScroll(rememberScrollState()) - .background(background) - ) { - Background() + // Need this BoxWithConstraints so we can force the inner column to fill the screen + BoxWithConstraints(Modifier.fillMaxHeight()) { + + Box( + Modifier + .verticalScroll(rememberScrollState()) + .background(background) + ) { - Column { + Background() - Spacer(Modifier.height(8.dp)) - NavigationIconButton( - onNavigationClick = onBackPressed, - iconColor = Color.White, - modifier = Modifier - .height(48.dp) - .width(48.dp) - ) + Column( + Modifier.heightIn(min = this@BoxWithConstraints.maxHeight) + ) { - Spacer(Modifier.height(12.dp)) + Spacer(Modifier.height(8.dp)) + NavigationIconButton( + onNavigationClick = onBackPressed, + iconColor = Color.White, + modifier = Modifier + .height(48.dp) + .width(48.dp) + ) - Column { + Spacer(Modifier.height(12.dp)) IconRow(Modifier.padding(horizontal = 24.dp)) From c8bee0a71377ee69753d026420ddff31ac051b83 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 15:40:01 -0500 Subject: [PATCH 13/24] Have Talkback ignore list numbers --- .../onboarding/import/OnboardingImportFlow.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt index 722ef07d43e..ff3fa56dfc4 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt @@ -3,6 +3,7 @@ package au.com.shiftyjelly.pocketcasts.account.onboarding.import import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.clearAndSetSemantics import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout @@ -65,13 +66,15 @@ fun NumberedList(vararg texts: String) { // Number TextP40( text = "${index + 1}.", - modifier = Modifier.constrainAs(numberRef) { - top.linkTo( - anchor = if (index == 0) parent.top else textRefs[index - 1].bottom, - margin = if (index == 0) 0.dp else 12.dp - ) - start.linkTo(parent.start) - } + modifier = Modifier + .clearAndSetSemantics {} // ignore for accessibility + .constrainAs(numberRef) { + top.linkTo( + anchor = if (index == 0) parent.top else textRefs[index - 1].bottom, + margin = if (index == 0) 0.dp else 12.dp + ) + start.linkTo(parent.start) + } ) // Indented text From 0f0347ef985402f47e3c4180044944f4ce5bda2f Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 15:40:32 -0500 Subject: [PATCH 14/24] Hook up back buttons --- .../account/onboarding/import/OnboardingImportFlow.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt index ff3fa56dfc4..e4a2ef0b238 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportFlow.kt @@ -37,13 +37,13 @@ object OnboardingImportFlow { composable(castbox) { OnboardingImportCastbox( - onBackPressed = { /* TODO */ }, + onBackPressed = { navController.popBackStack() }, ) } composable(otherApps) { OnboardingImportOtherApps( - onBackPressed = { /* TODO */ }, + onBackPressed = { navController.popBackStack() }, ) } } From 67d767c82ead0a388508010ef5589558dc914638 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 15:51:23 -0500 Subject: [PATCH 15/24] Combine import steps --- .../account/onboarding/import/OnboardingImportCastbox.kt | 1 - .../account/onboarding/import/OnboardingImportOtherApps.kt | 1 - modules/services/localization/src/main/res/values/strings.xml | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt index ad632ed76bf..6d456574d34 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt @@ -50,7 +50,6 @@ fun OnboardingImportCastbox( stringResource(LR.string.onboarding_import_from_castbox_step_3), stringResource(LR.string.onboarding_import_from_castbox_step_4), stringResource(LR.string.onboarding_import_from_castbox_step_5), - stringResource(LR.string.onboarding_import_from_castbox_step_6), ) } diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt index be29e86b830..eb95e532112 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt @@ -48,7 +48,6 @@ fun OnboardingImportOtherApps( NumberedList( stringResource(LR.string.onboarding_import_from_other_apps_step_1), stringResource(LR.string.onboarding_import_from_other_apps_step_2), - stringResource(LR.string.onboarding_import_from_other_apps_step_3), ) } Spacer(Modifier.weight(1f)) diff --git a/modules/services/localization/src/main/res/values/strings.xml b/modules/services/localization/src/main/res/values/strings.xml index 357319262f5..1fda693a037 100644 --- a/modules/services/localization/src/main/res/values/strings.xml +++ b/modules/services/localization/src/main/res/values/strings.xml @@ -1508,12 +1508,10 @@ Tap “Settings”. Scroll down to \“OPML Export\” and tap it. @string/onboarding_import_from_other_apps_step_2 - @string/onboarding_import_from_other_apps_step_3 Open Castbox… Pocket Casts can import podcasts from OPML files, so if your current app can export an OPML file, you can follow these steps: Find the other app\’s export option and export an OPML file. - Use your phone\’s \“Share\” menu to send the file to Pocket Casts. - Alternatively, import the file from Pocket Casts\’ \“Import & export OPML\” settings menu. + Use your phone\’s \“Share\” menu to send the file to Pocket Casts. Alternatively, import the file from Pocket Casts\’ \“Import & export OPML\” settings menu. From 8f153657cb65ba2f4ef1710ba2235141870b9ec4 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 13:44:06 -0500 Subject: [PATCH 16/24] Use nested graph for Onboarding recommendations flow --- .../onboarding/OnboardingFlowComposable.kt | 43 ++++++------- .../OnboardingRecommendationsFlow.kt | 61 +++++++++---------- .../OnboardingRecommendationsStartPage.kt | 10 +++ 3 files changed, 60 insertions(+), 54 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt index a096d1bce6b..0949b6f2eb6 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt @@ -10,6 +10,7 @@ import androidx.navigation.compose.rememberNavController import au.com.shiftyjelly.pocketcasts.account.onboarding.import.OnboardingImportFlow import au.com.shiftyjelly.pocketcasts.account.onboarding.import.OnboardingImportFlow.importFlowGraph import au.com.shiftyjelly.pocketcasts.account.onboarding.recommendations.OnboardingRecommendationsFlow +import au.com.shiftyjelly.pocketcasts.account.onboarding.recommendations.OnboardingRecommendationsFlow.onboardingRecommendationsFlowGraph import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTrackerWrapper import au.com.shiftyjelly.pocketcasts.compose.AppThemeWithBackground @@ -52,6 +53,24 @@ fun OnboardingFlowComposable( importFlowGraph(navController) + onboardingRecommendationsFlowGraph( + onShown = { analyticsTracker.track(AnalyticsEvent.RECOMMENDATIONS_SHOWN) }, + onBackPressed = { + analyticsTracker.track(AnalyticsEvent.RECOMMENDATIONS_DISMISSED) + completeOnboarding() + }, + onComplete = { + navController.navigate( + if (signInState?.isSignedInAsPlus == false) { + OnboardingNavRoute.plusUpgrade + } else { + OnboardingNavRoute.welcome + } + ) + }, + navController = navController, + ) + composable(OnboardingNavRoute.logInOrSignUp) { OnboardingLoginOrSignUpPage( onNotNowClicked = { @@ -82,7 +101,7 @@ fun OnboardingFlowComposable( navController.popBackStack() }, onAccountCreated = { - navController.navigate(OnboardingNavRoute.recommendationsFlow) { + navController.navigate(OnboardingRecommendationsFlow.route) { // clear backstack after account is created popUpTo(OnboardingNavRoute.logInOrSignUp) { inclusive = true @@ -119,27 +138,6 @@ fun OnboardingFlowComposable( ) } - composable(OnboardingNavRoute.recommendationsFlow) { - OnboardingRecommendationsFlow( - onShown = { - analyticsTracker.track(AnalyticsEvent.RECOMMENDATIONS_SHOWN) - }, - onBackPressed = { - analyticsTracker.track(AnalyticsEvent.RECOMMENDATIONS_DISMISSED) - completeOnboarding() - }, - onComplete = { - navController.navigate( - if (signInState?.isSignedInAsPlus == false) { - OnboardingNavRoute.plusUpgrade - } else { - OnboardingNavRoute.welcome - } - ) - } - ) - } - composable(OnboardingNavRoute.plusUpgrade) { OnboardingPlusUpgradeFlow( onBackPressed = { navController.popBackStack() }, @@ -185,6 +183,5 @@ private object OnboardingNavRoute { const val logInGoogle = "log_in_google" const val logInOrSignUp = "log_in_or_sign_up" const val plusUpgrade = "upgrade_upgrade" - const val recommendationsFlow = "recommendationsFlow" const val welcome = "welcome" } diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt index c7c4d97618a..6f9b0e2f34a 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt @@ -1,42 +1,41 @@ package au.com.shiftyjelly.pocketcasts.account.onboarding.recommendations -import androidx.activity.compose.BackHandler -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.navigation.compose.NavHost +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController +import androidx.navigation.navigation import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingRecommendationsStartPage -@Composable -fun OnboardingRecommendationsFlow( - onShown: () -> Unit, - onBackPressed: () -> Unit, - onComplete: () -> Unit, -) { +object OnboardingRecommendationsFlow { - LaunchedEffect(Unit) { onShown() } - BackHandler { onBackPressed() } + const val route = "onboardingRecommendationsFlow" - val navController = rememberNavController() - NavHost( - navController = navController, - startDestination = OnboardingRecommendationsNavRoute.start + private const val start = "start" + private const val search = "search" + + fun NavGraphBuilder.onboardingRecommendationsFlowGraph( + onShown: () -> Unit, + onBackPressed: () -> Unit, + onComplete: () -> Unit, + navController: NavController, ) { - composable(OnboardingRecommendationsNavRoute.start) { - OnboardingRecommendationsStartPage( - onSearch = { navController.navigate(OnboardingRecommendationsNavRoute.search) }, - onComplete = onComplete, - ) - } - composable(OnboardingRecommendationsNavRoute.search) { - OnboardingRecommendationsSearchPage( - onBackPressed = { navController.popBackStack() }, - ) + navigation( + route = this@OnboardingRecommendationsFlow.route, + startDestination = start + ) { + composable(start) { + OnboardingRecommendationsStartPage( + onShown = onShown, + onSearch = { navController.navigate(search) }, + onBackPressed = onBackPressed, + onComplete = onComplete, + ) + } + composable(search) { + OnboardingRecommendationsSearchPage( + onBackPressed = { navController.popBackStack() }, + ) + } } } } -private object OnboardingRecommendationsNavRoute { - const val start = "start" - const val search = "search" -} diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt index 798f942188b..de767ef1a58 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt @@ -1,5 +1,6 @@ package au.com.shiftyjelly.pocketcasts.account.onboarding +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -13,6 +14,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -32,9 +34,15 @@ import au.com.shiftyjelly.pocketcasts.localization.R as LR @Composable fun OnboardingRecommendationsStartPage( + onShown: () -> Unit, onSearch: () -> Unit, + onBackPressed: () -> Unit, onComplete: () -> Unit, ) { + + LaunchedEffect(Unit) { onShown() } + BackHandler { onBackPressed() } + Column( Modifier .fillMaxHeight() @@ -96,6 +104,8 @@ private fun Preview( AppThemeWithBackground(themeType) { OnboardingRecommendationsStartPage( onSearch = {}, + onShown = {}, + onBackPressed = {}, onComplete = {}, ) } From c6b1a73779161203ae251b13d87aa835decf752d Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 13:45:40 -0500 Subject: [PATCH 17/24] Always go to upgrade from recommendations screen It is no longer possible to get the recommendations screen if you are a Plus user, so removing the logic that handled that possibility. --- .../account/onboarding/OnboardingFlowComposable.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt index 0949b6f2eb6..d3a15e9bdd5 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingFlowComposable.kt @@ -60,13 +60,7 @@ fun OnboardingFlowComposable( completeOnboarding() }, onComplete = { - navController.navigate( - if (signInState?.isSignedInAsPlus == false) { - OnboardingNavRoute.plusUpgrade - } else { - OnboardingNavRoute.welcome - } - ) + navController.navigate(OnboardingNavRoute.plusUpgrade) }, navController = navController, ) From ba25720644d7359b413d1c234b6413edde349421 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Tue, 6 Dec 2022 13:59:52 -0500 Subject: [PATCH 18/24] Hook up import button on recommendations screen --- .../OnboardingRecommendationsFlow.kt | 7 ++++++- .../OnboardingRecommendationsStartPage.kt | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt index 6f9b0e2f34a..bf0724733d2 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsFlow.kt @@ -4,7 +4,8 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import androidx.navigation.navigation -import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingRecommendationsStartPage +import au.com.shiftyjelly.pocketcasts.account.onboarding.import.OnboardingImportFlow +import au.com.shiftyjelly.pocketcasts.account.onboarding.import.OnboardingImportFlow.importFlowGraph object OnboardingRecommendationsFlow { @@ -23,9 +24,13 @@ object OnboardingRecommendationsFlow { route = this@OnboardingRecommendationsFlow.route, startDestination = start ) { + + importFlowGraph(navController) + composable(start) { OnboardingRecommendationsStartPage( onShown = onShown, + onImportClicked = { navController.navigate(OnboardingImportFlow.route) }, onSearch = { navController.navigate(search) }, onBackPressed = onBackPressed, onComplete = onComplete, diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt index de767ef1a58..8284a875018 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/recommendations/OnboardingRecommendationsStartPage.kt @@ -1,7 +1,8 @@ -package au.com.shiftyjelly.pocketcasts.account.onboarding +package au.com.shiftyjelly.pocketcasts.account.onboarding.recommendations import androidx.activity.compose.BackHandler import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -35,6 +36,7 @@ import au.com.shiftyjelly.pocketcasts.localization.R as LR @Composable fun OnboardingRecommendationsStartPage( onShown: () -> Unit, + onImportClicked: () -> Unit, onSearch: () -> Unit, onBackPressed: () -> Unit, onComplete: () -> Unit, @@ -53,10 +55,15 @@ fun OnboardingRecommendationsStartPage( horizontalArrangement = Arrangement.End, modifier = Modifier .fillMaxWidth() - .padding(bottom = 16.dp) + .padding(bottom = 18.dp) ) { - TextH30(stringResource(LR.string.onboarding_recommendations_import)) + TextH30( + text = stringResource(LR.string.onboarding_recommendations_import), + modifier = Modifier + .clickable { onImportClicked() } + .padding(horizontal = 16.dp, vertical = 9.dp) + ) } TextH10( @@ -103,8 +110,9 @@ private fun Preview( ) { AppThemeWithBackground(themeType) { OnboardingRecommendationsStartPage( - onSearch = {}, onShown = {}, + onImportClicked = {}, + onSearch = {}, onBackPressed = {}, onComplete = {}, ) From bcc3f664b06b73615389471cd4bc562769ae11eb Mon Sep 17 00:00:00 2001 From: ashiagr Date: Wed, 7 Dec 2022 17:14:39 +0530 Subject: [PATCH 19/24] Update cast sdk version --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 3bd4452e8ad..e2333d970e5 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -111,7 +111,7 @@ project.ext { browser: "androidx.browser:browser:1.4.0", percent: "androidx.percentlayout:percentlayout:1.0.0-rc02", preference: "androidx.preference:preference:1.2.0", - cast: "com.google.android.gms:play-services-cast-framework:21.1.0", + cast: "com.google.android.gms:play-services-cast-framework:21.2.0", desugarJdk: "com.android.tools:desugar_jdk_libs:1.1.5", // Firebase BoM (Bill of Materials enables you to manage all your Firebase library versions by specifying only one version) firebaseBom: "com.google.firebase:firebase-bom:30.5.0", From 47957ad0abf2cb4a37b6c37f2516074e9a7947c9 Mon Sep 17 00:00:00 2001 From: ashiagr Date: Wed, 7 Dec 2022 17:29:46 +0530 Subject: [PATCH 20/24] Add change log entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 101f6f692cf..5e3914f9d39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ ([#527](https://github.com/Automattic/pocket-casts-android/pull/527)). * Fixed talkback issues ([#630](https://github.com/Automattic/pocket-casts-android/pull/630)). + * Fixed skip forward/ backward buttons not showing in media notification while casting + ([#630](https://github.com/Automattic/pocket-casts-android/pull/630)). 7.27 ----- From ea2be928b379ac17813e43100e0502993c24e0a5 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Wed, 7 Dec 2022 07:55:55 -0500 Subject: [PATCH 21/24] Add scroll to onboarding screens --- .../account/onboarding/OnboardingWelcomePage.kt | 8 +++++++- .../account/onboarding/import/OnboardingImportCastbox.kt | 4 +++- .../onboarding/import/OnboardingImportOtherApps.kt | 4 +++- .../onboarding/import/OnboardingImportStartPage.kt | 4 +++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt index 562472b4c31..01eacd57fe1 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt @@ -14,7 +14,9 @@ import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material.Card import androidx.compose.material.Divider import androidx.compose.material.Icon @@ -95,7 +97,11 @@ private fun Content( onContinue: () -> Unit, onNewsletterCheckedChanged: (Boolean) -> Unit, ) { - Column(Modifier.padding(horizontal = 24.dp)) { + Column( + Modifier + .padding(horizontal = 24.dp) + .verticalScroll(rememberScrollState()) + ) { Spacer(modifier = Modifier.weight(1f)) if (isSignedInAsPlus) { diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt index 6d456574d34..afde785d7c8 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt @@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -27,7 +29,7 @@ import au.com.shiftyjelly.pocketcasts.localization.R as LR fun OnboardingImportCastbox( onBackPressed: () -> Unit ) { - Column { + Column(Modifier.verticalScroll(rememberScrollState())) { ThemedTopAppBar( onNavigationClick = onBackPressed, diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt index eb95e532112..fdbb74c7d4e 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt @@ -5,6 +5,8 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -25,7 +27,7 @@ import au.com.shiftyjelly.pocketcasts.localization.R as LR fun OnboardingImportOtherApps( onBackPressed: () -> Unit, ) { - Column { + Column(Modifier.verticalScroll(rememberScrollState())) { ThemedTopAppBar( onNavigationClick = onBackPressed, diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt index 98a67659971..684cc72c7e1 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt @@ -10,6 +10,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -34,7 +36,7 @@ fun OnboardingImportStartPage( onOtherAppsClicked: () -> Unit, onBackPressed: () -> Unit, ) { - Column { + Column(Modifier.verticalScroll(rememberScrollState())) { ThemedTopAppBar( title = stringResource(LR.string.onboarding_welcome_back), From 42724ad5e8469f4b63aeebd8605b0b2888a2d3a9 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Wed, 7 Dec 2022 08:48:19 -0500 Subject: [PATCH 22/24] Make scrollable columns fill screen height --- .../account/onboarding/OnboardingWelcomePage.kt | 2 ++ .../account/onboarding/import/OnboardingImportCastbox.kt | 7 ++++++- .../account/onboarding/import/OnboardingImportOtherApps.kt | 7 ++++++- .../account/onboarding/import/OnboardingImportStartPage.kt | 7 ++++++- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt index 01eacd57fe1..983b124a69a 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/OnboardingWelcomePage.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding @@ -100,6 +101,7 @@ private fun Content( Column( Modifier .padding(horizontal = 24.dp) + .fillMaxHeight() .verticalScroll(rememberScrollState()) ) { Spacer(modifier = Modifier.weight(1f)) diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt index afde785d7c8..f59fc32bf9e 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportCastbox.kt @@ -4,6 +4,7 @@ import android.content.ActivityNotFoundException import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState @@ -29,7 +30,11 @@ import au.com.shiftyjelly.pocketcasts.localization.R as LR fun OnboardingImportCastbox( onBackPressed: () -> Unit ) { - Column(Modifier.verticalScroll(rememberScrollState())) { + Column( + Modifier + .fillMaxHeight() + .verticalScroll(rememberScrollState()) + ) { ThemedTopAppBar( onNavigationClick = onBackPressed, diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt index fdbb74c7d4e..9f20a0b899b 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportOtherApps.kt @@ -3,6 +3,7 @@ package au.com.shiftyjelly.pocketcasts.account.onboarding.import import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState @@ -27,7 +28,11 @@ import au.com.shiftyjelly.pocketcasts.localization.R as LR fun OnboardingImportOtherApps( onBackPressed: () -> Unit, ) { - Column(Modifier.verticalScroll(rememberScrollState())) { + Column( + Modifier + .fillMaxHeight() + .verticalScroll(rememberScrollState()) + ) { ThemedTopAppBar( onNavigationClick = onBackPressed, diff --git a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt index 684cc72c7e1..4045d965098 100644 --- a/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt +++ b/modules/features/account/src/main/java/au/com/shiftyjelly/pocketcasts/account/onboarding/import/OnboardingImportStartPage.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -36,7 +37,11 @@ fun OnboardingImportStartPage( onOtherAppsClicked: () -> Unit, onBackPressed: () -> Unit, ) { - Column(Modifier.verticalScroll(rememberScrollState())) { + Column( + Modifier + .fillMaxHeight() + .verticalScroll(rememberScrollState()) + ) { ThemedTopAppBar( title = stringResource(LR.string.onboarding_welcome_back), From 14d8cab3fdd492fcc4e05664ced01630abb3ae23 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Wed, 7 Dec 2022 09:52:09 -0500 Subject: [PATCH 23/24] Bump version number --- version.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.properties b/version.properties index 6df385fc983..5e75e96b941 100644 --- a/version.properties +++ b/version.properties @@ -1,3 +1,3 @@ # Version Information for Vanilla / Release builds -versionName=7.28-rc-2 -versionCode=9057 +versionName=7.28-rc-3 +versionCode=9058 From 5e7c28e4d65bc85f228fb1a2bcefa2d61fefd67c Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Wed, 7 Dec 2022 12:29:50 -0500 Subject: [PATCH 24/24] Give substute fields a more descriptive name Otherwise if Android Studio is set to automatically add unambiguous imports it will immediately import one of these fields if it sees, for exampple, a uuid field used that hasn't been initialized. --- .../pocketcasts/player/viewmodel/PlayerViewModel.kt | 2 +- .../models/db/helper/UserEpisodePodcastSubstitute.kt | 4 ++-- .../shiftyjelly/pocketcasts/models/entity/UserEpisode.kt | 2 +- .../pocketcasts/repositories/extensions/Podcast.kt | 4 ++-- .../repositories/notification/NotificationDrawerImpl.kt | 2 +- .../pocketcasts/repositories/playback/PlaybackService.kt | 6 +++--- .../repositories/podcast/EpisodeManagerImpl.kt | 2 +- .../repositories/podcast/PodcastManagerImpl.kt | 5 ++--- .../pocketcasts/repositories/sync/UpNextSyncJob.kt | 8 ++++---- .../pocketcasts/repositories/widget/WidgetManagerImpl.kt | 2 +- 10 files changed, 18 insertions(+), 19 deletions(-) diff --git a/modules/features/player/src/main/java/au/com/shiftyjelly/pocketcasts/player/viewmodel/PlayerViewModel.kt b/modules/features/player/src/main/java/au/com/shiftyjelly/pocketcasts/player/viewmodel/PlayerViewModel.kt index fdc85553517..a7912173462 100644 --- a/modules/features/player/src/main/java/au/com/shiftyjelly/pocketcasts/player/viewmodel/PlayerViewModel.kt +++ b/modules/features/player/src/main/java/au/com/shiftyjelly/pocketcasts/player/viewmodel/PlayerViewModel.kt @@ -252,7 +252,7 @@ class PlayerViewModel @Inject constructor( if (it is Episode) { podcastManager.observePodcastByUuid(it.podcastUuid) } else { - Flowable.just(Podcast(uuid = UserEpisodePodcastSubstitute.uuid, title = UserEpisodePodcastSubstitute.title, overrideGlobalEffects = false)) + Flowable.just(Podcast(uuid = UserEpisodePodcastSubstitute.substituteUuid, title = UserEpisodePodcastSubstitute.substituteTitle, overrideGlobalEffects = false)) } } .map { PodcastEffectsPair(it, if (it.overrideGlobalEffects) it.playbackEffects else settings.getGlobalPlaybackEffects()) } diff --git a/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/db/helper/UserEpisodePodcastSubstitute.kt b/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/db/helper/UserEpisodePodcastSubstitute.kt index 81de4b34f99..171aa072bff 100644 --- a/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/db/helper/UserEpisodePodcastSubstitute.kt +++ b/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/db/helper/UserEpisodePodcastSubstitute.kt @@ -4,6 +4,6 @@ package au.com.shiftyjelly.pocketcasts.models.db.helper // I thought about making this an actual Podcast but then there // is nothing stopping it getting passed in to a podcast manager function. object UserEpisodePodcastSubstitute { - const val uuid = "da7aba5e-f11e-f11e-f11e-da7aba5ef11e" - const val title = "Custom Episode" + const val substituteUuid = "da7aba5e-f11e-f11e-f11e-da7aba5ef11e" + const val substituteTitle = "Custom Episode" } diff --git a/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/entity/UserEpisode.kt b/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/entity/UserEpisode.kt index 1ed44c5caf0..bae563cca28 100644 --- a/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/entity/UserEpisode.kt +++ b/modules/services/model/src/main/java/au/com/shiftyjelly/pocketcasts/models/entity/UserEpisode.kt @@ -53,7 +53,7 @@ data class UserEpisode( override var playing: Boolean = false override fun displaySubtitle(podcast: Podcast?): String { - return UserEpisodePodcastSubstitute.title + return UserEpisodePodcastSubstitute.substituteTitle } val isUploading: Boolean diff --git a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/extensions/Podcast.kt b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/extensions/Podcast.kt index 3beaf960661..235e300397a 100644 --- a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/extensions/Podcast.kt +++ b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/extensions/Podcast.kt @@ -8,9 +8,9 @@ val Podcast.largeArtworkUrl: String get() = getArtworkUrl(960) fun Podcast.getArtworkUrl(size: Int): String { - return if (uuid == UserEpisodePodcastSubstitute.uuid) thumbnailUrl ?: "" else PodcastImage.getArtworkUrl(size, uuid) + return if (uuid == UserEpisodePodcastSubstitute.substituteUuid) thumbnailUrl ?: "" else PodcastImage.getArtworkUrl(size, uuid) } fun Podcast.getArtworkJpgUrl(size: Int): String { - return if (uuid == UserEpisodePodcastSubstitute.uuid) thumbnailUrl ?: "" else PodcastImage.getArtworkJpgUrl(size, uuid) + return if (uuid == UserEpisodePodcastSubstitute.substituteUuid) thumbnailUrl ?: "" else PodcastImage.getArtworkJpgUrl(size, uuid) } diff --git a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/notification/NotificationDrawerImpl.kt b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/notification/NotificationDrawerImpl.kt index 02666bd36a8..9ab3f66c779 100644 --- a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/notification/NotificationDrawerImpl.kt +++ b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/notification/NotificationDrawerImpl.kt @@ -103,7 +103,7 @@ class NotificationDrawerImpl @Inject constructor( } val bitmap = if (podcast != null) loadArtwork(podcast) else if (episode is UserEpisode) loadUserEpisodeArtwork(episode) else null - val podcastTitle = (if (episode is Episode) podcast?.title else UserEpisodePodcastSubstitute.title) ?: "" + val podcastTitle = (if (episode is Episode) podcast?.title else UserEpisodePodcastSubstitute.substituteTitle) ?: "" val data = NotificationData( episodeUuid = episodeUuid, diff --git a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/PlaybackService.kt b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/PlaybackService.kt index 1369f26403f..55830aaf7e7 100644 --- a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/PlaybackService.kt +++ b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/PlaybackService.kt @@ -404,7 +404,7 @@ open class PlaybackService : MediaBrowserServiceCompat(), CoroutineScope { Timber.d("Loading sugggested children") val upNext = listOfNotNull(playbackManager.getCurrentEpisode()) + playbackManager.upNextQueue.queueEpisodes val mediaUpNext = upNext.take(NUM_SUGGESTED_ITEMS).mapNotNull { playable -> - val filesPodcast = Podcast(uuid = UserEpisodePodcastSubstitute.uuid, title = UserEpisodePodcastSubstitute.title) + val filesPodcast = Podcast(uuid = UserEpisodePodcastSubstitute.substituteUuid, title = UserEpisodePodcastSubstitute.substituteTitle) val parentPodcast = (if (playable is Episode) podcastManager.findPodcastByUuid(playable.podcastUuid) else filesPodcast) ?: return@mapNotNull null AutoConverter.convertEpisodeToMediaItem(this, playable, parentPodcast) } @@ -433,7 +433,7 @@ open class PlaybackService : MediaBrowserServiceCompat(), CoroutineScope { private fun loadRecentChildren(): ArrayList { Timber.d("Loading recent children") val upNext = playbackManager.getCurrentEpisode() ?: return arrayListOf() - val filesPodcast = Podcast(uuid = UserEpisodePodcastSubstitute.uuid, title = UserEpisodePodcastSubstitute.title) + val filesPodcast = Podcast(uuid = UserEpisodePodcastSubstitute.substituteUuid, title = UserEpisodePodcastSubstitute.substituteTitle) val parentPodcast = (if (upNext is Episode) podcastManager.findPodcastByUuid(upNext.podcastUuid) else filesPodcast) ?: return arrayListOf() Timber.d("Recent item ${upNext.title}") @@ -545,7 +545,7 @@ open class PlaybackService : MediaBrowserServiceCompat(), CoroutineScope { protected suspend fun loadFilesChildren(): List { return userEpisodeManager.findUserEpisodes().map { - val podcast = Podcast(uuid = UserEpisodePodcastSubstitute.uuid, title = UserEpisodePodcastSubstitute.title, thumbnailUrl = it.artworkUrl) + val podcast = Podcast(uuid = UserEpisodePodcastSubstitute.substituteUuid, title = UserEpisodePodcastSubstitute.substituteTitle, thumbnailUrl = it.artworkUrl) AutoConverter.convertEpisodeToMediaItem(this, it, podcast) } } diff --git a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/EpisodeManagerImpl.kt b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/EpisodeManagerImpl.kt index 649491527ef..9e3156f6d90 100644 --- a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/EpisodeManagerImpl.kt +++ b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/EpisodeManagerImpl.kt @@ -1062,7 +1062,7 @@ class EpisodeManagerImpl @Inject constructor( override fun downloadMissingEpisode(episodeUuid: String, podcastUuid: String, skeletonEpisode: Episode, podcastManager: PodcastManager, downloadMetaData: Boolean): Maybe { return episodeDao.existsRx(episodeUuid) .flatMapMaybe { episodeExists -> - if (episodeExists || podcastUuid == UserEpisodePodcastSubstitute.uuid) { + if (episodeExists || podcastUuid == UserEpisodePodcastSubstitute.substituteUuid) { observePlayableByUuid(episodeUuid).firstElement() } else { podcastCacheServerManager.getPodcastAndEpisode(podcastUuid, episodeUuid).flatMapMaybe { response -> diff --git a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/PodcastManagerImpl.kt b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/PodcastManagerImpl.kt index 085d48e3029..6bc1b1f7302 100644 --- a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/PodcastManagerImpl.kt +++ b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/podcast/PodcastManagerImpl.kt @@ -4,7 +4,6 @@ import android.content.Context import au.com.shiftyjelly.pocketcasts.models.db.AppDatabase import au.com.shiftyjelly.pocketcasts.models.db.helper.TopPodcast import au.com.shiftyjelly.pocketcasts.models.db.helper.UserEpisodePodcastSubstitute -import au.com.shiftyjelly.pocketcasts.models.db.helper.UserEpisodePodcastSubstitute.uuid import au.com.shiftyjelly.pocketcasts.models.entity.Episode import au.com.shiftyjelly.pocketcasts.models.entity.Folder import au.com.shiftyjelly.pocketcasts.models.entity.Podcast @@ -742,8 +741,8 @@ class PodcastManagerImpl @Inject constructor( override fun buildUserEpisodePodcast(episode: UserEpisode): Podcast { return Podcast( - uuid = UserEpisodePodcastSubstitute.uuid, - title = UserEpisodePodcastSubstitute.title, + uuid = UserEpisodePodcastSubstitute.substituteUuid, + title = UserEpisodePodcastSubstitute.substituteTitle, thumbnailUrl = episode.getUrlForArtwork() ) } diff --git a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/sync/UpNextSyncJob.kt b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/sync/UpNextSyncJob.kt index 59f856423e6..272e65f69cf 100644 --- a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/sync/UpNextSyncJob.kt +++ b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/sync/UpNextSyncJob.kt @@ -144,7 +144,7 @@ class UpNextSyncJob : JobService() { val uuids = change.uuids?.splitIgnoreEmpty(",") ?: listOf() val episodes = uuids.map { uuid -> val episode = runBlocking { episodeManager.findPlayableByUuid(uuid) } - val podcastUuid = if (episode is Episode) episode.podcastUuid else UserEpisodePodcastSubstitute.uuid + val podcastUuid = if (episode is Episode) episode.podcastUuid else UserEpisodePodcastSubstitute.substituteUuid UpNextSyncRequest.ChangeEpisode( uuid, episode?.title, @@ -164,7 +164,7 @@ class UpNextSyncJob : JobService() { val uuid = change.uuid val episode = if (uuid == null) null else runBlocking { episodeManager.findPlayableByUuid(uuid) } val publishedDate = episode?.publishedDate?.switchInvalidForNow()?.toIsoString() - val podcastUuid = if (episode is Episode) episode.podcastUuid else UserEpisodePodcastSubstitute.uuid + val podcastUuid = if (episode is Episode) episode.podcastUuid else UserEpisodePodcastSubstitute.substituteUuid return UpNextSyncRequest.Change( action = change.type, modified = change.modified, @@ -189,7 +189,7 @@ class UpNextSyncJob : JobService() { } // import missing podcasts - val podcastUuids: List = response.episodes?.mapNotNull { it.podcast }?.filter { it != UserEpisodePodcastSubstitute.uuid } ?: emptyList() + val podcastUuids: List = response.episodes?.mapNotNull { it.podcast }?.filter { it != UserEpisodePodcastSubstitute.substituteUuid } ?: emptyList() val addMissingPodcast: Completable = Observable.fromIterable(podcastUuids).flatMapCompletable { podcastUuid -> podcastManager.findOrDownloadPodcastRx(podcastUuid = podcastUuid).ignoreElement() } @@ -201,7 +201,7 @@ class UpNextSyncJob : JobService() { if (podcastUuid == null) { Observable.empty() } else { - if (podcastUuid == UserEpisodePodcastSubstitute.uuid) { + if (podcastUuid == UserEpisodePodcastSubstitute.substituteUuid) { userEpisodeManager.downloadMissingUserEpisode(episodeUuid, placeholderTitle = responseEpisode.title, placeholderPublished = responseEpisode.published?.parseIsoDate()).toObservable() } else { val skeletonEpisode = responseEpisode.toSkeletonEpisode(podcastUuid) diff --git a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/widget/WidgetManagerImpl.kt b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/widget/WidgetManagerImpl.kt index c5d58f7e64b..00706e39324 100644 --- a/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/widget/WidgetManagerImpl.kt +++ b/modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/widget/WidgetManagerImpl.kt @@ -144,7 +144,7 @@ class WidgetManagerImpl @Inject constructor( return } - val podcastTitle = podcast?.title ?: UserEpisodePodcastSubstitute.title + val podcastTitle = podcast?.title ?: UserEpisodePodcastSubstitute.substituteTitle views.setContentDescription(R.id.widget_artwork, "$podcastTitle. Open Pocket Casts") views.setImageViewResource(R.id.widget_artwork, IR.drawable.defaultartwork_small_dark)