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/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..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 @@ -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,44 @@ && getIntent().getExtras().getBoolean(ARG_CONTINUE_JETPACK_CONNECT, false)) { displayJetpackFeatureCollectionOverlayIfNeeded(); } + 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)); + return; + } + + Map trackingProperties = new HashMap<>(); + trackingProperties.put("calling_function", "shortcut_" + shortcut.name()); + + switch (shortcut) { + case CREATE_NEW_POST: + break; + case OPEN_STATS: + case OPEN_NOTIFICATIONS: + 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) { @@ -773,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: @@ -780,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_notifications"); + 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_reader"); + showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); + break; + } if (intent.getBooleanExtra(ARG_READER_BOOKMARK_TAB, false) && mBottomNav != null && mBottomNav .getActiveFragment() instanceof ReaderFragment) { ((ReaderFragment) mBottomNav.getActiveFragment()).requestBookmarkTab(); @@ -803,6 +859,12 @@ private void handleOpenPageIntent(Intent intent) { if (!mSelectedSiteRepository.hasSelectedSite()) { initSelectedSite(); } + if (mJetpackFeatureRemovalPhaseHelper.shouldRemoveJetpackFeatures()) { + Map trackingProperties = new HashMap<>(); + trackingProperties.put("calling_function", "deeplink_stats"); + showJetpackFeatureOverlayAccessedInCorrectly(trackingProperties); + break; + } if (intent.hasExtra(ARG_STATS_TIMEFRAME)) { ActivityLauncher.viewBlogStatsForTimeframe(this, getSelectedSite(), (StatsTimeframe) intent.getSerializableExtra(ARG_STATS_TIMEFRAME)); 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); 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 { 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; }