diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt index 95f17d0d9449..f0e6ffd6e4c7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt @@ -11,7 +11,6 @@ import android.os.Bundle import android.view.View import android.view.View.OnClickListener import androidx.annotation.StringRes -import androidx.appcompat.app.AppCompatActivity import androidx.compose.runtime.collectAsState import androidx.core.view.isVisible import androidx.fragment.app.Fragment @@ -52,7 +51,6 @@ import org.wordpress.android.ui.about.UnifiedAboutActivity import org.wordpress.android.ui.accounts.HelpActivity.Origin.ME_SCREEN_HELP import org.wordpress.android.ui.debug.DebugSettingsActivity import org.wordpress.android.ui.deeplinks.DeepLinkOpenWebLinksWithJetpackHelper -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil import org.wordpress.android.ui.main.MeViewModel.RecommendAppUiState import org.wordpress.android.ui.main.WPMainActivity.OnScrollToTopListener import org.wordpress.android.ui.main.emailverificationbanner.EmailVerificationBanner @@ -129,9 +127,6 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener { @Inject lateinit var uiHelpers: UiHelpers - @Inject - lateinit var jetpackFeatureRemovalUtils: JetpackFeatureRemovalOverlayUtil - @Inject lateinit var domainManagementFeatureConfig: DomainManagementFeatureConfig @@ -168,8 +163,11 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener { @Suppress("LongMethod") private fun MeFragmentBinding.setupViews() { - if (!BuildConfig.IS_JETPACK_APP && jetpackFeatureRemovalUtils.shouldHideJetpackFeatures()) { - with(requireActivity() as AppCompatActivity) { + // MeActivity hosts this fragment on its own, so it needs a toolbar; inside the bottom + // navigation's pager the host activity already provides one. + val meActivity = activity as? MeActivity + if (meActivity != null) { + with(meActivity) { setSupportActionBar(toolbarMain) supportActionBar?.apply { setHomeButtonEnabled(true) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsBuilder.kt index 2900a2e2b8da..993420ba72a7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteItemsBuilder.kt @@ -132,7 +132,7 @@ class SiteItemsBuilder @Inject constructor( List { return listOfNotNull( siteListItemBuilder.buildDomainsItemIfAvailable(params.site, params.onClick), - siteListItemBuilder.buildMeItemIfAvailable(params.site, params.onClick), + siteListItemBuilder.buildMeItemIfAvailable(params.onClick), siteListItemBuilder.buildSiteSettingsItemIfAvailable(params.site, params.onClick), siteListItemBuilder.buildApplicationPasswordsItemIfAvailable(params.site, params.onClick), ) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilder.kt index f719b524e216..489642f31234 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilder.kt @@ -195,14 +195,17 @@ class SiteListItemBuilder @Inject constructor( } else null } - @Suppress("ComplexCondition") - fun buildMeItemIfAvailable(site: SiteModel, onClick: (ListItemAction) -> Unit): ListItem? { - return if ((!buildConfigWrapper.isJetpackApp && - jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures() && - site.hasCapabilityManageOptions) || - (!buildConfigWrapper.isJetpackApp && - site.isSelfHostedAdmin) - ) { + /** + * The Me item replaces the bottom navigation's Me tab when that nav is hidden, so it's gated on + * exactly the same condition WPMainActivity uses to hide it. Me is account-level, so site + * capabilities deliberately play no part here. + * + * No explicit Jetpack app check is needed: [JetpackFeatureRemovalPhaseHelper.getCurrentPhase] + * returns null there, so [JetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures] is + * always false and the item never builds. + */ + fun buildMeItemIfAvailable(onClick: (ListItemAction) -> Unit): ListItem? { + return if (jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { ListItem( R.drawable.ic_user_primary_white_24, UiStringRes(R.string.me), diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/SiteItemFixtures.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/SiteItemFixtures.kt index f144d278f891..c77491767c25 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/SiteItemFixtures.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/SiteItemFixtures.kt @@ -113,6 +113,13 @@ val DOMAINS_ITEM = ListItem( onClick = ListItemInteraction.create(DOMAINS, SITE_ITEM_ACTION), listItemAction = DOMAINS ) +val ME_ITEM = ListItem( + R.drawable.ic_user_primary_white_24, + UiStringRes(R.string.me), + onClick = ListItemInteraction.create(ListItemAction.ME, SITE_ITEM_ACTION), + disablePrimaryIconTint = true, + listItemAction = ListItemAction.ME +) val SITE_MONITORING_ITEM = ListItem( R.drawable.gb_ic_tool, UiStringRes(R.string.site_monitoring), diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilderTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilderTest.kt index dc155f82181f..4b557a9d8090 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilderTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/items/listitem/SiteListItemBuilderTest.kt @@ -14,6 +14,7 @@ import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.ui.mysite.items.ACTIVITY_ITEM import org.wordpress.android.ui.mysite.items.ADMIN_ITEM import org.wordpress.android.ui.mysite.items.BACKUP_ITEM +import org.wordpress.android.ui.mysite.items.ME_ITEM import org.wordpress.android.ui.mysite.items.PAGES_ITEM import org.wordpress.android.ui.mysite.items.PEOPLE_ITEM import org.wordpress.android.ui.mysite.items.PLUGINS_ITEM @@ -337,6 +338,26 @@ class SiteListItemBuilderTest { assertThat(item).isNull() } + // Me stands in for the bottom navigation once Jetpack features are removed, so it is built + // for every site regardless of capabilities. + @Test + fun `me item built when jetpack features are removed, regardless of site capabilities`() { + whenever(jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()).thenReturn(true) + + val item = siteListItemBuilder.buildMeItemIfAvailable(SITE_ITEM_ACTION) + + assertThat(item).isEqualTo(ME_ITEM) + } + + @Test + fun `me item not built when jetpack features are not removed`() { + whenever(jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()).thenReturn(false) + + val item = siteListItemBuilder.buildMeItemIfAvailable(SITE_ITEM_ACTION) + + assertThat(item).isNull() + } + /* SITE MONITORING */ @Test fun `give jetpack app, when FF is true and site is atomic and admin, then site monitoring item is built`() {