From 3b09c46593d515dcd9af5ef676a8c286371f05f8 Mon Sep 17 00:00:00 2001 From: Ajesh R Pai Date: Tue, 31 Jan 2023 16:59:11 +0530 Subject: [PATCH 1/7] Adds: logic for showing the overlay in phase 4 for shortcuts --- .../JetpackFeatureRemovalOverlayUtil.kt | 1 + .../android/ui/main/WPMainActivity.java | 38 +++++++++++++++++++ .../android/analytics/AnalyticsTracker.java | 3 +- .../analytics/AnalyticsTrackerNosara.java | 2 + 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt index 2c4f407c052c..39b3c5caaf3b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/jetpackoverlay/JetpackFeatureRemovalOverlayUtil.kt @@ -334,6 +334,7 @@ class JetpackFeatureRemovalOverlayUtil @Inject constructor( enum class JetpackFeatureCollectionOverlaySource(val label: String) { FEATURE_CARD("card"), APP_OPEN("app_open"), + DISABLED_ENTRY_POINT("disabled_entry_point"), UNSPECIFIED("unspecified"); companion object { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index dffdeea58981..94d6e6aa318c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -77,6 +77,7 @@ import org.wordpress.android.ui.LocaleAwareActivity; import org.wordpress.android.ui.PagePostCreationSourcesDetail; import org.wordpress.android.ui.RequestCodes; +import org.wordpress.android.ui.Shortcut; import org.wordpress.android.ui.ShortcutsNavigator; import org.wordpress.android.ui.WPTooltipView; import org.wordpress.android.ui.accounts.LoginActivity; @@ -159,7 +160,9 @@ import org.wordpress.android.workers.weeklyroundup.WeeklyRoundupScheduler; import java.util.EnumSet; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.inject.Inject; @@ -366,6 +369,8 @@ public void onCreate(Bundle savedInstanceState) { initSelectedSite(); mShortcutsNavigator.showTargetScreen(getIntent().getStringExtra( ShortcutsNavigator.ACTION_OPEN_SHORTCUT), this, getSelectedSite()); + showJetpackOverlayIfNeeded(getIntent().getStringExtra( + ShortcutsNavigator.ACTION_OPEN_SHORTCUT)); } else if (openRequestedPage) { handleOpenPageIntent(getIntent()); } else if (isQuickStartRequestedFromPush) { @@ -486,6 +491,39 @@ && getIntent().getExtras().getBoolean(ARG_CONTINUE_JETPACK_CONNECT, false)) { displayJetpackFeatureCollectionOverlayIfNeeded(); } + private void showJetpackOverlayIfNeeded(String action) { + Shortcut shortcut = Shortcut.fromActionString(action); + if (shortcut == null) { + AppLog.e(AppLog.T.MAIN, String.format("Unknown Android Shortcut action[%s]", action)); + return; + } + + Map trackingProperties = new HashMap<>(); + trackingProperties.put("calling_function", "shortcut"); + + switch (shortcut) { + case CREATE_NEW_POST: + break; + case OPEN_STATS: + case OPEN_NOTIFICATIONS: + mAnalyticsTrackerWrapper.track( + Stat.JETPACK_FEATURE_INCORRECTLY_ACCESSED, trackingProperties); + if (mJetpackFeatureRemovalOverlayUtil.shouldHideJetpackFeatures()) { + JetpackFeatureFullScreenOverlayFragment.newInstance( + null, + false, + false, + SiteCreationSource.UNSPECIFIED, + true, + JetpackFeatureCollectionOverlaySource.DISABLED_ENTRY_POINT + ).show(getSupportFragmentManager(), JetpackFeatureFullScreenOverlayFragment.TAG); + } + break; + default: + AppLog.e(AppLog.T.MAIN, String.format("Unknown Android Shortcut[%s]", shortcut)); + } + } + private void setUpMainView() { if (!mJetpackFeatureRemovalOverlayUtil.shouldHideJetpackFeatures()) { if (mBottomNav != null) { diff --git a/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java b/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java index e4e8ff3cf3fd..ae37358d8a70 100644 --- a/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java +++ b/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java @@ -1004,7 +1004,8 @@ public enum Stat { REMOVE_FEATURE_CARD_LINK_TAPPED, REMOVE_FEATURE_CARD_MENU_ACCESSED, REMOVE_FEATURE_CARD_HIDE_TAPPED, - REMOVE_FEATURE_CARD_REMIND_LATER_TAPPED + REMOVE_FEATURE_CARD_REMIND_LATER_TAPPED, + JETPACK_FEATURE_INCORRECTLY_ACCESSED } private static final List TRACKERS = new ArrayList<>(); diff --git a/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java b/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java index cdf5afc46e6e..f7db1c5e6d21 100644 --- a/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java +++ b/libs/analytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java @@ -2503,6 +2503,8 @@ public static String getEventNameForStat(AnalyticsTracker.Stat stat) { return "remove_feature_card_hide_tapped"; case REMOVE_FEATURE_CARD_REMIND_LATER_TAPPED: return "remove_feature_card_remind_later_tapped"; + case JETPACK_FEATURE_INCORRECTLY_ACCESSED: + return "jetpack_feature_incorrectly_accessed"; } return null; } From 53546bf6e706a031af09e51e27635d5a151b8d51 Mon Sep 17 00:00:00 2001 From: Ajesh R Pai Date: Tue, 31 Jan 2023 18:55:56 +0530 Subject: [PATCH 2/7] Reverts: Partially the commit to disable the deeplink in phase 4 --- .../DeepLinkingIntentReceiverViewModel.kt | 22 +------------------ .../DeepLinkingIntentReceiverViewModelTest.kt | 3 +-- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModel.kt index 18e1a673ad45..1d9c7c6e06c1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModel.kt @@ -18,7 +18,6 @@ import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenL import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.ShowSignInFlow import org.wordpress.android.ui.deeplinks.handlers.DeepLinkHandlers import org.wordpress.android.ui.deeplinks.handlers.ServerTrackingHandler -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper import org.wordpress.android.util.UriWrapper import org.wordpress.android.util.analytics.AnalyticsUtilsWrapper import org.wordpress.android.viewmodel.Event @@ -38,7 +37,6 @@ class DeepLinkingIntentReceiverViewModel private val deepLinkTrackingUtils: DeepLinkTrackingUtils, private val analyticsUtilsWrapper: AnalyticsUtilsWrapper, private val openWebLinksWithJetpackHelper: DeepLinkOpenWebLinksWithJetpackHelper, - private val jetpackFeatureRemovalPhaseHelper: JetpackFeatureRemovalPhaseHelper ) : ScopedViewModel(uiDispatcher) { private val _navigateAction = MutableLiveData>() val navigateAction = _navigateAction as LiveData> @@ -111,7 +109,7 @@ class DeepLinkingIntentReceiverViewModel * and builds the navigation action based on them */ private fun handleUrl(uriWrapper: UriWrapper, action: String? = null): Boolean { - return interceptNavigationActionIfNeeded(buildNavigateAction(uriWrapper))?.also { + return buildNavigateAction(uriWrapper)?.also { if (action != null) { deepLinkTrackingUtils.track(action, it, uriWrapper) } @@ -123,24 +121,6 @@ class DeepLinkingIntentReceiverViewModel } != null } - @Suppress("ComplexMethod") - private fun interceptNavigationActionIfNeeded(navigationAction: NavigateAction?): NavigateAction?{ - if (!jetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) - return navigationAction - - return when (navigationAction) { - NavigateAction.OpenStats, - is NavigateAction.OpenStatsForTimeframe, - is NavigateAction.OpenStatsForSite, - is NavigateAction.OpenStatsForSiteAndTimeframe, - NavigateAction.OpenReader, - is NavigateAction.OpenInReader, - is NavigateAction.ViewPostInReader, - NavigateAction.OpenNotifications -> null - else -> navigationAction - } - } - private fun loginIsUnnecessary(action: NavigateAction): Boolean { return accountStore.hasAccessToken() || action is OpenInBrowser || diff --git a/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModelTest.kt index a5c8ec0fbad5..9476cf193d82 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/deeplinks/DeepLinkingIntentReceiverViewModelTest.kt @@ -72,8 +72,7 @@ class DeepLinkingIntentReceiverViewModelTest : BaseUnitTest() { serverTrackingHandler, deepLinkTrackingUtils, analyticsUtilsWrapper, - openWebLinksWithJetpackHelper, - jetpackFeatureRemovalPhaseHelper + openWebLinksWithJetpackHelper ) isFinished = false viewModel.finish.observeForever { From e9f2c43fc5f5af720e24490fbe8bd878fc3da6af Mon Sep 17 00:00:00 2001 From: Ajesh R Pai Date: Tue, 31 Jan 2023 18:57:40 +0530 Subject: [PATCH 3/7] Adds: the logic to show feature removal overlay in phase 4 Adds: the logic to handle the logic of showing jetpack feature removal overlay on phase 4 when clicking at the deeplink --- .../android/ui/main/WPMainActivity.java | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index 94d6e6aa318c..8d0dd5a457d0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -492,6 +492,9 @@ && getIntent().getExtras().getBoolean(ARG_CONTINUE_JETPACK_CONNECT, false)) { } private void showJetpackOverlayIfNeeded(String action) { + if (!mJetpackFeatureRemovalOverlayUtil.shouldHideJetpackFeatures()) { + return; + } Shortcut shortcut = Shortcut.fromActionString(action); if (shortcut == null) { AppLog.e(AppLog.T.MAIN, String.format("Unknown Android Shortcut action[%s]", action)); @@ -506,24 +509,26 @@ private void showJetpackOverlayIfNeeded(String action) { break; case OPEN_STATS: case OPEN_NOTIFICATIONS: - mAnalyticsTrackerWrapper.track( - Stat.JETPACK_FEATURE_INCORRECTLY_ACCESSED, trackingProperties); - if (mJetpackFeatureRemovalOverlayUtil.shouldHideJetpackFeatures()) { - JetpackFeatureFullScreenOverlayFragment.newInstance( - null, - false, - false, - SiteCreationSource.UNSPECIFIED, - true, - JetpackFeatureCollectionOverlaySource.DISABLED_ENTRY_POINT - ).show(getSupportFragmentManager(), JetpackFeatureFullScreenOverlayFragment.TAG); - } + showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); break; default: AppLog.e(AppLog.T.MAIN, String.format("Unknown Android Shortcut[%s]", shortcut)); } } + private void showJetpackFeatureOverlayAccessedInCorrectly(Map trackingProperties) { + mAnalyticsTrackerWrapper.track( + Stat.JETPACK_FEATURE_INCORRECTLY_ACCESSED, trackingProperties); + JetpackFeatureFullScreenOverlayFragment.newInstance( + null, + false, + false, + SiteCreationSource.UNSPECIFIED, + true, + JetpackFeatureCollectionOverlaySource.DISABLED_ENTRY_POINT + ).show(getSupportFragmentManager(), JetpackFeatureFullScreenOverlayFragment.TAG); + } + private void setUpMainView() { if (!mJetpackFeatureRemovalOverlayUtil.shouldHideJetpackFeatures()) { if (mBottomNav != null) { @@ -811,6 +816,7 @@ protected void onNewIntent(Intent intent) { private void handleOpenPageIntent(Intent intent) { String pagePosition = intent.getStringExtra(ARG_OPEN_PAGE); + Log.e("Main", "handleOpenPageIntent " + pagePosition); if (!TextUtils.isEmpty(pagePosition)) { switch (pagePosition) { case ARG_MY_SITE: @@ -818,10 +824,22 @@ private void handleOpenPageIntent(Intent intent) { break; case ARG_NOTIFICATIONS: setUpMainView(); + if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + Map trackingProperties = new HashMap<>(); + trackingProperties.put("calling_function", "deeplink"); + showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); + break; + } if (mBottomNav != null) mBottomNav.setCurrentSelectedPage(PageType.NOTIFS); break; case ARG_READER: setUpMainView(); + if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + Map trackingProperties = new HashMap<>(); + trackingProperties.put("calling_function", "deeplink"); + showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); + break; + } if (intent.getBooleanExtra(ARG_READER_BOOKMARK_TAB, false) && mBottomNav != null && mBottomNav .getActiveFragment() instanceof ReaderFragment) { ((ReaderFragment) mBottomNav.getActiveFragment()).requestBookmarkTab(); @@ -841,6 +859,12 @@ private void handleOpenPageIntent(Intent intent) { if (!mSelectedSiteRepository.hasSelectedSite()) { initSelectedSite(); } + if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + Map trackingProperties = new HashMap<>(); + trackingProperties.put("calling_function", "deeplink"); + showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); + break; + } if (intent.hasExtra(ARG_STATS_TIMEFRAME)) { ActivityLauncher.viewBlogStatsForTimeframe(this, getSelectedSite(), (StatsTimeframe) intent.getSerializableExtra(ARG_STATS_TIMEFRAME)); From 4a2bc81d1a5c7d1df51dda48e826e4e57b0c8b6e Mon Sep 17 00:00:00 2001 From: Ajesh R Pai Date: Tue, 31 Jan 2023 19:34:45 +0530 Subject: [PATCH 4/7] Reverts: the commit to handle the logic of deeplink in phase 4 --- .../wordpress/android/ui/reader/ReaderPostPagerActivity.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.java index 4b0d69038fc5..48fb10522cae 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.java @@ -48,7 +48,6 @@ import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureFullScreenOverlayViewModel; import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureOverlayActions.ForwardToJetpack; import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalOverlayUtil.JetpackFeatureCollectionOverlaySource; -import org.wordpress.android.ui.jetpackoverlay.JetpackFeatureRemovalPhaseHelper; import org.wordpress.android.ui.mysite.SelectedSiteRepository; import org.wordpress.android.ui.posts.EditPostActivity; import org.wordpress.android.ui.prefs.AppPrefs; @@ -167,7 +166,6 @@ public enum DirectOperation { @Inject JetpackAppMigrationFlowUtils mJetpackAppMigrationFlowUtils; private JetpackFeatureFullScreenOverlayViewModel mJetpackFullScreenViewModel; @Inject AccountStore mAccountStore; - @Inject JetpackFeatureRemovalPhaseHelper mJetpackFeatureRemovalPhaseHelper; @Override public void onCreate(Bundle savedInstanceState) { @@ -299,7 +297,7 @@ private void handleDeepLinking() { host = uri.getHost(); } - if (uri == null || mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + if (uri == null) { mReaderTracker.trackDeepLink(AnalyticsTracker.Stat.DEEP_LINKED, action, host, uri); // invalid uri so, just show the entry screen Intent intent = new Intent(this, WPLaunchActivity.class); From 47ec312eb048bcb2d757cc4239f2fdd639128a63 Mon Sep 17 00:00:00 2001 From: Annmarie Ziegler Date: Tue, 31 Jan 2023 09:21:31 -0500 Subject: [PATCH 5/7] Add stats, notifications, and reader when capturing the calling_function --- .../java/org/wordpress/android/ui/main/WPMainActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index 8d0dd5a457d0..a0a94f81adeb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -826,7 +826,7 @@ private void handleOpenPageIntent(Intent intent) { setUpMainView(); if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { Map trackingProperties = new HashMap<>(); - trackingProperties.put("calling_function", "deeplink"); + trackingProperties.put("calling_function", "deeplink_notifications"); showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); break; } @@ -836,7 +836,7 @@ private void handleOpenPageIntent(Intent intent) { setUpMainView(); if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { Map trackingProperties = new HashMap<>(); - trackingProperties.put("calling_function", "deeplink"); + trackingProperties.put("calling_function", "deeplink_reader"); showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); break; } @@ -861,7 +861,7 @@ private void handleOpenPageIntent(Intent intent) { } if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { Map trackingProperties = new HashMap<>(); - trackingProperties.put("calling_function", "deeplink"); + trackingProperties.put("calling_function", "deeplink_stats"); showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); break; } From 60c018d00c3204217284deed80d712bf45200131 Mon Sep 17 00:00:00 2001 From: Annmarie Ziegler Date: Tue, 31 Jan 2023 09:33:09 -0500 Subject: [PATCH 6/7] Add shortcut name when capturing the calling_function event --- .../main/java/org/wordpress/android/ui/main/WPMainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index a0a94f81adeb..5513a827329b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -502,7 +502,7 @@ private void showJetpackOverlayIfNeeded(String action) { } Map trackingProperties = new HashMap<>(); - trackingProperties.put("calling_function", "shortcut"); + trackingProperties.put("calling_function", "shortcut_" + shortcut.name()); switch (shortcut) { case CREATE_NEW_POST: From a944ddb7ca2ffd8b54e854f6493b46e7c592717b Mon Sep 17 00:00:00 2001 From: Annmarie Ziegler Date: Tue, 31 Jan 2023 10:55:52 -0500 Subject: [PATCH 7/7] Address lint issues --- .../main/java/org/wordpress/android/ui/main/WPMainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index 5513a827329b..5e28003de5de 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -825,7 +825,7 @@ private void handleOpenPageIntent(Intent intent) { case ARG_NOTIFICATIONS: setUpMainView(); if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { - Map trackingProperties = new HashMap<>(); + Map trackingProperties = new HashMap<>(); trackingProperties.put("calling_function", "deeplink_notifications"); showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); break;