From 70443914c9108339b31074510e9f76297f8356bc Mon Sep 17 00:00:00 2001 From: Roman Tsisyk Date: Sat, 27 Mar 2021 17:33:17 +0300 Subject: [PATCH] [android]: Remove onboarding screens Signed-off-by: Roman Tsisyk --- .../layout-land/map_navigation_buttons.xml | 22 -- android/res/layout/map_navigation_buttons.xml | 23 -- .../src/com/mapswithme/maps/MwmActivity.java | 71 +--- .../NavigationButtonsAnimationController.java | 39 +- .../com/mapswithme/maps/SplashActivity.java | 137 +------ .../maps/onboarding/OnboardingTip.java | 91 ----- .../com/mapswithme/maps/onboarding/Utils.java | 23 -- .../onboarding/WelcomeDialogFragment.java | 361 ------------------ .../maps/routing/NavigationController.java | 6 +- 9 files changed, 19 insertions(+), 754 deletions(-) delete mode 100644 android/src/com/mapswithme/maps/onboarding/OnboardingTip.java delete mode 100644 android/src/com/mapswithme/maps/onboarding/Utils.java delete mode 100644 android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java diff --git a/android/res/layout-land/map_navigation_buttons.xml b/android/res/layout-land/map_navigation_buttons.xml index c82bab43e1..2df6dd6d6f 100644 --- a/android/res/layout-land/map_navigation_buttons.xml +++ b/android/res/layout-land/map_navigation_buttons.xml @@ -63,26 +63,4 @@ android:background="?nav_background" android:contentDescription="@string/core_my_position" android:tint="@null"/> - - - - - - - diff --git a/android/res/layout/map_navigation_buttons.xml b/android/res/layout/map_navigation_buttons.xml index 64edf25882..2b548b03f8 100644 --- a/android/res/layout/map_navigation_buttons.xml +++ b/android/res/layout/map_navigation_buttons.xml @@ -63,27 +63,4 @@ android:layout_marginTop="@dimen/nav_zoom_top" android:layout_alignParentTop="true" android:layout_alignParentEnd="true"/> - - - - - - - diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 9808be4c2b..f4b13119e8 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -82,15 +82,8 @@ import com.mapswithme.maps.maplayer.subway.SubwayManager; import com.mapswithme.maps.maplayer.traffic.OnTrafficLayerToggleListener; import com.mapswithme.maps.maplayer.traffic.TrafficManager; import com.mapswithme.maps.maplayer.traffic.widget.TrafficButton; -import com.mapswithme.maps.news.OnboardingStep; import com.mapswithme.maps.onboarding.IntroductionDialogFragment; import com.mapswithme.maps.onboarding.IntroductionScreenFactory; -import com.mapswithme.maps.onboarding.OnboardingTip; -import com.mapswithme.maps.onboarding.WelcomeDialogFragment; -import com.mapswithme.maps.promo.Promo; -import com.mapswithme.maps.promo.PromoAfterBooking; -import com.mapswithme.maps.promo.PromoBookingDialogFragment; -import com.mapswithme.maps.purchase.BookmarksAllSubscriptionActivity; import com.mapswithme.maps.purchase.FailedPurchaseChecker; import com.mapswithme.maps.purchase.PurchaseCallback; import com.mapswithme.maps.purchase.PurchaseController; @@ -183,7 +176,6 @@ public class MwmActivity extends BaseMwmFragmentActivity AlertDialogCallback, RoutingModeListener, AppBackgroundTracker.OnTransitionListener, MaterialTapTargetPrompt.PromptStateChangeListener, - WelcomeDialogFragment.OnboardingStepPassedListener, OnIsolinesLayerToggleListener, OnGuidesLayerToggleListener, GuidesGalleryListener, @@ -293,8 +285,6 @@ public class MwmActivity extends BaseMwmFragmentActivity private MenuController mMainMenuController; @Nullable private Tutorial mTutorial; - @Nullable - private OnboardingTip mOnboardingTip; @SuppressWarnings("NotNullFieldNotInitialized") @NonNull private Toolbar mPlacePageToolbar; @@ -518,7 +508,6 @@ public class MwmActivity extends BaseMwmFragmentActivity if (savedInstanceState != null) { mLocationErrorDialogAnnoying = savedInstanceState.getBoolean(EXTRA_LOCATION_DIALOG_IS_ANNOYING); - mOnboardingTip = savedInstanceState.getParcelable(EXTRA_ONBOARDING_TIP); } mIsTabletLayout = getResources().getBoolean(R.bool.tabletLayout); @@ -784,32 +773,9 @@ public class MwmActivity extends BaseMwmFragmentActivity mNavMyPosition = new MyPositionButton(myPosition, mOnMyPositionClickListener); initToggleMapLayerController(frame); - View openSubsScreenBtnContainer = frame.findViewById(R.id.subs_screen_btn_container); - final OnboardingTip tip = OnboardingTip.get(); - boolean hasOnBoardingView = false; /* mOnboardingTip == null && tip != null - && MwmApplication.from(this).isFirstLaunch(); */ mNavAnimationController = new NavigationButtonsAnimationController( - zoomIn, zoomOut, myPosition, getWindow().getDecorView().getRootView(), this, - hasOnBoardingView ? openSubsScreenBtnContainer : null); - - UiUtils.showIf(hasOnBoardingView, openSubsScreenBtnContainer); - if (hasOnBoardingView) - { - openSubsScreenBtnContainer.findViewById(R.id.onboarding_btn) - .setOnClickListener(v -> onBoardingBtnClicked(tip)); - } - } - - private void onBoardingBtnClicked(@NonNull OnboardingTip tip) - { - if (mNavAnimationController == null) - return; - - mNavAnimationController.hideOnBoardingTipBtn(); - mOnboardingTip = tip; - OnboardingStep step = com.mapswithme.maps.onboarding.Utils.getOnboardingStepByTip(mOnboardingTip); - WelcomeDialogFragment.showOnboardinStep(this, step); + zoomIn, zoomOut, myPosition, getWindow().getDecorView().getRootView(), this); } private void initToggleMapLayerController(@NonNull View frame) @@ -970,7 +936,6 @@ public class MwmActivity extends BaseMwmFragmentActivity // orientation changing, etc. Otherwise, the saved route might be restored at undesirable moment. RoutingController.get().deleteSavedRoute(); - outState.putParcelable(EXTRA_ONBOARDING_TIP, mOnboardingTip); super.onSaveInstanceState(outState); } @@ -2599,40 +2564,6 @@ public class MwmActivity extends BaseMwmFragmentActivity } } - public void onOnboardingStepPassed(@NonNull OnboardingStep step) - { - if (mOnboardingTip == null) - throw new AssertionError("Onboarding tip must be non-null at this point!"); - - switch (step) - { - case DISCOVER_GUIDES: - case CHECK_OUT_SIGHTS: - BookmarksCatalogActivity.startForResult(this, - BookmarkCategoriesActivity.REQ_CODE_DOWNLOAD_BOOKMARK_CATEGORY, - mOnboardingTip.getUrl()); - break; - case SUBSCRIBE_TO_CATALOG: - BookmarksAllSubscriptionActivity.startForResult(this); - break; - default: - throw new UnsupportedOperationException("Onboarding step '" + step + "' not supported " + - "for sponsored button"); - } - } - - @Override - public void onLastOnboardingStepPassed() - { - // Do nothing by default. - } - - @Override - public void onOnboardingStepCancelled() - { - // Do nothing by default. - } - @Override public void onGalleryGuideSelected(@NonNull String url) { diff --git a/android/src/com/mapswithme/maps/NavigationButtonsAnimationController.java b/android/src/com/mapswithme/maps/NavigationButtonsAnimationController.java index ef083390ad..eb2e394007 100644 --- a/android/src/com/mapswithme/maps/NavigationButtonsAnimationController.java +++ b/android/src/com/mapswithme/maps/NavigationButtonsAnimationController.java @@ -4,8 +4,6 @@ import android.content.res.Resources; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.view.View; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.location.LocationState; @@ -21,8 +19,6 @@ class NavigationButtonsAnimationController private final View mZoomOut; @NonNull private final View mMyPosition; - @Nullable - private View mObBoardingTipBtnContainer; @Nullable private final OnTranslationChangedListener mTranslationListener; @@ -38,12 +34,10 @@ class NavigationButtonsAnimationController NavigationButtonsAnimationController(@NonNull View zoomIn, @NonNull View zoomOut, @NonNull View myPosition, @NonNull final View contentView, - @Nullable OnTranslationChangedListener translationListener, - @Nullable View onBoardingTipBtnContainer) + @Nullable OnTranslationChangedListener translationListener) { mZoomOut = zoomOut; mZoomIn = zoomIn; - mObBoardingTipBtnContainer = onBoardingTipBtnContainer; checkZoomButtonsVisibility(); mMyPosition = myPosition; Resources res = mZoomIn.getResources(); @@ -53,12 +47,6 @@ class NavigationButtonsAnimationController calculateLimitTranslations(); contentView.addOnLayoutChangeListener(new ContentViewLayoutChangeListener(contentView)); mTranslationListener = translationListener; - if (onBoardingTipBtnContainer != null) - { - Animation animation = AnimationUtils.loadAnimation(onBoardingTipBtnContainer.getContext(), - R.anim.dog_btn_rotation); - onBoardingTipBtnContainer.findViewById(R.id.onboarding_btn).setAnimation(animation); - } } private void checkZoomButtonsVisibility() @@ -113,15 +101,12 @@ class NavigationButtonsAnimationController mMyPosition.setTranslationY(translation); mZoomOut.setTranslationY(translation); mZoomIn.setTranslationY(translation); - if (mObBoardingTipBtnContainer != null) - mObBoardingTipBtnContainer.setTranslationY(translation); + if (mZoomIn.getVisibility() == View.VISIBLE && !isViewInsideLimits(mZoomIn)) { UiUtils.invisible(mZoomIn, mZoomOut); - if (mObBoardingTipBtnContainer != null) - UiUtils.invisible(mObBoardingTipBtnContainer); if (mTranslationListener != null) mTranslationListener.onFadeOutZoomButtons(); @@ -130,8 +115,6 @@ class NavigationButtonsAnimationController && isViewInsideLimits(mZoomIn)) { UiUtils.show(mZoomIn, mZoomOut); - if (mObBoardingTipBtnContainer != null) - UiUtils.show(mObBoardingTipBtnContainer); if (mTranslationListener != null) mTranslationListener.onFadeInZoomButtons(); } @@ -168,19 +151,6 @@ class NavigationButtonsAnimationController return; UiUtils.hide(mZoomIn, mZoomOut); - if (mObBoardingTipBtnContainer == null) - return; - - UiUtils.hide(mObBoardingTipBtnContainer); - } - - void hideOnBoardingTipBtn() - { - if (mObBoardingTipBtnContainer == null) - return; - - mObBoardingTipBtnContainer.setVisibility(View.GONE); - mObBoardingTipBtnContainer = null; } void appearZoomButtons() @@ -189,11 +159,6 @@ class NavigationButtonsAnimationController return; UiUtils.show(mZoomIn, mZoomOut); - - if (mObBoardingTipBtnContainer == null) - return; - - UiUtils.show(mObBoardingTipBtnContainer); } private static boolean showZoomButtons() diff --git a/android/src/com/mapswithme/maps/SplashActivity.java b/android/src/com/mapswithme/maps/SplashActivity.java index e5952f9051..103ec1e784 100644 --- a/android/src/com/mapswithme/maps/SplashActivity.java +++ b/android/src/com/mapswithme/maps/SplashActivity.java @@ -12,15 +12,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import com.mapswithme.maps.base.BaseActivity; import com.mapswithme.maps.base.BaseActivityDelegate; import com.mapswithme.maps.downloader.UpdaterDialogFragment; import com.mapswithme.maps.editor.ViralFragment; import com.mapswithme.maps.location.LocationHelper; -import com.mapswithme.maps.news.OnboardingStep; import com.mapswithme.maps.onboarding.BaseNewsFragment; -import com.mapswithme.maps.onboarding.WelcomeDialogFragment; import com.mapswithme.maps.permissions.PermissionsDialogFragment; import com.mapswithme.maps.permissions.StoragePermissionsDialogFragment; import com.mapswithme.util.Config; @@ -33,11 +32,8 @@ import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; public class SplashActivity extends AppCompatActivity - implements BaseNewsFragment.NewsDialogListener, BaseActivity, - WelcomeDialogFragment.PolicyAgreementListener, - WelcomeDialogFragment.OnboardingStepPassedListener + implements BaseNewsFragment.NewsDialogListener, BaseActivity { - private static final String EXTRA_CURRENT_ONBOARDING_STEP = "extra_current_onboarding_step"; private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC); private static final String TAG = SplashActivity.class.getSimpleName(); private static final String EXTRA_ACTIVITY_TO_START = "extra_activity_to_start"; @@ -53,33 +49,6 @@ public class SplashActivity extends AppCompatActivity private boolean mNeedStoragePermission; private boolean mCanceled; - @NonNull - private final Runnable mUserAgreementDelayedTask = new Runnable() - { - @Override - public void run() - { - WelcomeDialogFragment.show(SplashActivity.this); - } - }; - - @NonNull - private final Runnable mOnboardingStepsTask = new Runnable() - { - @Override - public void run() - { - if (mCurrentOnboardingStep != null) - { - WelcomeDialogFragment.showOnboardinStepsStartWith(SplashActivity.this, - mCurrentOnboardingStep); - return; - } - - WelcomeDialogFragment.showOnboardinSteps(SplashActivity.this); - } - }; - @NonNull private final Runnable mPermissionsDelayedTask = new Runnable() { @@ -127,9 +96,6 @@ public class SplashActivity extends AppCompatActivity @NonNull private final BaseActivityDelegate mBaseDelegate = new BaseActivityDelegate(this); - @Nullable - private OnboardingStep mCurrentOnboardingStep; - public static void start(@NonNull Context context, @Nullable Class activityToStart, @Nullable Intent initialIntent) @@ -147,10 +113,7 @@ public class SplashActivity extends AppCompatActivity { super.onCreate(savedInstanceState); mBaseDelegate.onCreate(); - handleOnboardingStep(savedInstanceState); handleUpdateMapsFragmentCorrectly(savedInstanceState); - UiThread.cancelDelayedTasks(mUserAgreementDelayedTask); - UiThread.cancelDelayedTasks(mOnboardingStepsTask); UiThread.cancelDelayedTasks(mPermissionsDelayedTask); UiThread.cancelDelayedTasks(mInitCoreDelayedTask); UiThread.cancelDelayedTasks(mFinalDelayedTask); @@ -158,18 +121,6 @@ public class SplashActivity extends AppCompatActivity initView(); } - private void handleOnboardingStep(@Nullable Bundle savedInstanceState) - { - if (savedInstanceState == null) - return; - - if (!savedInstanceState.containsKey(EXTRA_CURRENT_ONBOARDING_STEP)) - return; - - int step = savedInstanceState.getInt(EXTRA_CURRENT_ONBOARDING_STEP); - mCurrentOnboardingStep = OnboardingStep.values()[step]; - } - @Override protected void onNewIntent(Intent intent) { @@ -231,35 +182,10 @@ public class SplashActivity extends AppCompatActivity Counters.setMigrationExecuted(context); } - final boolean isFirstLaunch = WelcomeDialogFragment.isFirstLaunch(this); + final boolean isFirstLaunch = isFirstLaunch(); if (isFirstLaunch) MwmApplication.from(this).setFirstLaunch(true); - boolean isWelcomeFragmentOnScreen = false; - DialogFragment welcomeFragment = WelcomeDialogFragment.find(this); - if (welcomeFragment != null) - { - isWelcomeFragmentOnScreen = true; - welcomeFragment.dismissAllowingStateLoss(); - } - - if (isFirstLaunch || isWelcomeFragmentOnScreen) - { - if (WelcomeDialogFragment.isAgreementDeclined(this)) - { - UiThread.runLater(mUserAgreementDelayedTask, FIRST_START_DELAY); - return; - } - else - { - if (processPermissionGranting()) - { - UiThread.runLater(mOnboardingStepsTask, DELAY); - return; - } - } - } - if (processPermissionGranting()) runInitCoreTask(); } @@ -306,8 +232,6 @@ public class SplashActivity extends AppCompatActivity super.onPause(); mBaseDelegate.onPause(); mCanceled = true; - UiThread.cancelDelayedTasks(mUserAgreementDelayedTask); - UiThread.cancelDelayedTasks(mOnboardingStepsTask); UiThread.cancelDelayedTasks(mPermissionsDelayedTask); UiThread.cancelDelayedTasks(mInitCoreDelayedTask); UiThread.cancelDelayedTasks(mFinalDelayedTask); @@ -320,14 +244,6 @@ public class SplashActivity extends AppCompatActivity mBaseDelegate.onStop(); } - @Override - protected void onSaveInstanceState(Bundle outState) - { - super.onSaveInstanceState(outState); - if (mCurrentOnboardingStep != null) - outState.putInt(EXTRA_CURRENT_ONBOARDING_STEP, mCurrentOnboardingStep.ordinal()); - } - @Override protected void onDestroy() { @@ -412,41 +328,6 @@ public class SplashActivity extends AppCompatActivity processNavigation(); } - @Override - public void onPolicyAgreementApplied() - { - boolean permissionsGranted = processPermissionGranting(); - if (!permissionsGranted) - return; - - boolean isFirstLaunch = WelcomeDialogFragment.isFirstLaunch(this); - if (isFirstLaunch) - { - UiThread.runLater(mOnboardingStepsTask, DELAY); - return; - } - - runInitCoreTask(); - } - - @Override - public void onLastOnboardingStepPassed() - { - runInitCoreTask(); - } - - @Override - public void onOnboardingStepCancelled() - { - finish(); - } - - @Override - public void onOnboardingStepPassed(@NonNull OnboardingStep step) - { - mCurrentOnboardingStep = step; - } - private void initView() { UiUtils.setupStatusBar(this); @@ -508,4 +389,16 @@ public class SplashActivity extends AppCompatActivity throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme); } + + boolean isFirstLaunch() + { + if (Counters.getFirstInstallVersion(getApplicationContext()) < BuildConfig.VERSION_CODE) + return false; + + FragmentManager fm = getSupportFragmentManager(); + if (fm.isDestroyed()) + return false; + + return !Counters.isFirstStartDialogSeen(this); + } } diff --git a/android/src/com/mapswithme/maps/onboarding/OnboardingTip.java b/android/src/com/mapswithme/maps/onboarding/OnboardingTip.java deleted file mode 100644 index 92e19095b1..0000000000 --- a/android/src/com/mapswithme/maps/onboarding/OnboardingTip.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.mapswithme.maps.onboarding; - -import android.os.Parcel; -import android.os.Parcelable; - -import androidx.annotation.IntDef; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -public class OnboardingTip implements Parcelable -{ - // The order is important, must corresponds to - // OnboardingTip::Type enum at map/onboarding.hpp. - public static final int DISCOVER_CATALOG= 0; - public static final int DOWNLOAD_SAMPLES = 1; - public static final int BUY_SUBSCRIPTION = 2; - - protected OnboardingTip(Parcel in) - { - mType = in.readInt(); - mUrl = in.readString(); - } - - @Override - public void writeToParcel(Parcel dest, int flags) - { - dest.writeInt(mType); - dest.writeString(mUrl); - } - - @Retention(RetentionPolicy.SOURCE) - @IntDef({ DISCOVER_CATALOG, DOWNLOAD_SAMPLES, BUY_SUBSCRIPTION}) - @interface ScreenType {} - - @ScreenType - private final int mType; - @NonNull - private final String mUrl; - - @SuppressWarnings("unused") - OnboardingTip(@ScreenType int type, @NonNull String url) - { - mType = type; - mUrl = url; - } - - @ScreenType - public int getType() - { - return mType; - } - - @NonNull - public String getUrl() - { - return mUrl; - } - - @Nullable - public static OnboardingTip get() - { - return nativeGetTip(); - } - - @Nullable - private static native OnboardingTip nativeGetTip(); - - public static final Creator CREATOR = new Creator() - { - @Override - public OnboardingTip createFromParcel(Parcel in) - { - return new OnboardingTip(in); - } - - @Override - public OnboardingTip[] newArray(int size) - { - return new OnboardingTip[size]; - } - }; - - @Override - public int describeContents() - { - return 0; - } -} diff --git a/android/src/com/mapswithme/maps/onboarding/Utils.java b/android/src/com/mapswithme/maps/onboarding/Utils.java deleted file mode 100644 index 3ffbc382e0..0000000000 --- a/android/src/com/mapswithme/maps/onboarding/Utils.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mapswithme.maps.onboarding; - -import androidx.annotation.NonNull; -import com.mapswithme.maps.news.OnboardingStep; - -public class Utils -{ - @NonNull - public static OnboardingStep getOnboardingStepByTip(@NonNull OnboardingTip tip) - { - switch (tip.getType()) - { - case OnboardingTip.BUY_SUBSCRIPTION: - return OnboardingStep.SUBSCRIBE_TO_CATALOG; - case OnboardingTip.DISCOVER_CATALOG: - return OnboardingStep.DISCOVER_GUIDES; - case OnboardingTip.DOWNLOAD_SAMPLES: - return OnboardingStep.CHECK_OUT_SIGHTS; - default: - throw new UnsupportedOperationException("Unsupported onboarding tip: " + tip); - } - } -} diff --git a/android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java b/android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java deleted file mode 100644 index e896aedd51..0000000000 --- a/android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.mapswithme.maps.onboarding; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.os.Bundle; -import android.text.TextUtils; -import android.view.View; -import android.view.Window; -import android.widget.CheckBox; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; -import com.mapswithme.maps.BuildConfig; -import com.mapswithme.maps.Framework; -import com.mapswithme.maps.R; -import com.mapswithme.maps.base.BaseMwmDialogFragment; -import com.mapswithme.maps.news.OnboardingStep; -import com.mapswithme.util.Counters; -import com.mapswithme.util.SharedPropertiesUtils; -import com.mapswithme.util.ThemeUtils; -import com.mapswithme.util.UiUtils; - -import java.util.Arrays; -import java.util.List; -import java.util.Stack; - -public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View.OnClickListener -{ - private static final String ARG_SPECIFIC_STEP = "arg_specific_step"; - private static final String ARG_HAS_MANY_STEPS = "arg_has_many_steps"; - - @NonNull - private final Stack mOnboardingSteps = new Stack<>(); - - @Nullable - private PolicyAgreementListener mPolicyAgreementListener; - - @Nullable - private OnboardingStepPassedListener mOnboardingStepPassedListener; - - @Nullable - private OnboardingStep mOnboardinStep; - - @SuppressWarnings("NullableProblems") - @NonNull - private View mContentView; - -// @SuppressWarnings("NullableProblems") -// @NonNull -// private ImageView mImage; - - @SuppressWarnings("NullableProblems") - @NonNull - private TextView mTitle; - - @SuppressWarnings("NullableProblems") - @NonNull - private TextView mSubtitle; - - @SuppressWarnings("NullableProblems") - @NonNull - private TextView mAcceptBtn; - - @SuppressWarnings("NullableProblems") - @NonNull - private CheckBox mTermOfUseCheckbox; - - @SuppressWarnings("NullableProblems") - @NonNull - private CheckBox mPrivacyPolicyCheckbox; - - public static void show(@NonNull FragmentActivity activity) - { - create(activity, null); - } - - public static void showOnboardinSteps(@NonNull FragmentActivity activity) - { - Bundle args = new Bundle(); - args.putBoolean(ARG_HAS_MANY_STEPS, true); - create(activity, args); - } - - public static void showOnboardinStepsStartWith(@NonNull FragmentActivity activity, - @NonNull OnboardingStep startStep) - { - Bundle args = new Bundle(); - args.putBoolean(ARG_HAS_MANY_STEPS, true); - args.putInt(ARG_SPECIFIC_STEP, startStep.ordinal()); - create(activity, args); - } - - public static void showOnboardinStep(@NonNull FragmentActivity activity, - @NonNull OnboardingStep step) - { - Bundle args = new Bundle(); - args.putInt(ARG_SPECIFIC_STEP, step.ordinal()); - create(activity, args); - } - - public static boolean isFirstLaunch(@NonNull FragmentActivity activity) - { - if (Counters.getFirstInstallVersion(activity.getApplicationContext()) < BuildConfig.VERSION_CODE) - return false; - - FragmentManager fm = activity.getSupportFragmentManager(); - if (fm.isDestroyed()) - return false; - - return !Counters.isFirstStartDialogSeen(activity); - } - - private static void create(@NonNull FragmentActivity activity, @Nullable Bundle args) - { - final WelcomeDialogFragment fragment = new WelcomeDialogFragment(); - fragment.setArguments(args); - activity.getSupportFragmentManager() - .beginTransaction() - .add(fragment, WelcomeDialogFragment.class.getName()) - .commitAllowingStateLoss(); - } - - @Nullable - public static DialogFragment find(@NonNull FragmentActivity activity) - { - final FragmentManager fm = activity.getSupportFragmentManager(); - if (fm.isDestroyed()) - return null; - - Fragment f = fm.findFragmentByTag(WelcomeDialogFragment.class.getName()); - return (DialogFragment) f; - } - - @Override - public void onAttach(Activity activity) - { - super.onAttach(activity); - if (activity instanceof BaseNewsFragment.NewsDialogListener) - mPolicyAgreementListener = (PolicyAgreementListener) activity; - if (activity instanceof OnboardingStepPassedListener) - mOnboardingStepPassedListener = (OnboardingStepPassedListener) activity; - } - - @Override - public void onDetach() - { - mPolicyAgreementListener = null; - super.onDetach(); - } - - @Override - protected int getCustomTheme() - { - return ThemeUtils.isNightTheme(requireContext()) ? R.style.MwmTheme_DialogFragment_NoFullscreen_Night - : R.style.MwmTheme_DialogFragment_NoFullscreen; - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) - { - Dialog res = super.onCreateDialog(savedInstanceState); - res.requestWindowFeature(Window.FEATURE_NO_TITLE); - res.setCancelable(false); - - hanldeOnboardingSteps(); - - mContentView = View.inflate(getActivity(), R.layout.fragment_welcome, null); - res.setContentView(mContentView); - mAcceptBtn = mContentView.findViewById(R.id.accept_btn); - mAcceptBtn.setOnClickListener(this); -// mImage = mContentView.findViewById(R.id.iv__image); -// mImage.setImageResource(R.drawable.img_welcome); - mTitle = mContentView.findViewById(R.id.tv__title); - List headers = Arrays.asList(getString(R.string.new_onboarding_step1_header), - getString(R.string.new_onboarding_step1_header_2)); - String titleText = TextUtils.join(UiUtils.NEW_STRING_DELIMITER, headers); - mTitle.setText(titleText); - mSubtitle = mContentView.findViewById(R.id.tv__subtitle1); - mSubtitle.setText(R.string.sign_message_gdpr); - - initUserAgreementViews(); - bindWelcomeScreenType(); - - return res; - } - - private void hanldeOnboardingSteps() - { - Bundle args = getArguments(); - if (args != null) - { - boolean hasManySteps = args.containsKey(ARG_HAS_MANY_STEPS); - if (hasManySteps) - { - mOnboardingSteps.push(OnboardingStep.SHARE_EMOTIONS); - mOnboardingSteps.push(OnboardingStep.EXPERIENCE); - mOnboardingSteps.push(OnboardingStep.DREAM_AND_PLAN); - } - - boolean hasSpecificStep = args.containsKey(ARG_SPECIFIC_STEP); - if (hasSpecificStep) - mOnboardinStep = - OnboardingStep.values()[args.getInt(ARG_SPECIFIC_STEP)]; - - if (hasManySteps && hasSpecificStep) - { - OnboardingStep step = null; - while (!mOnboardinStep.equals(step)) - { - step = mOnboardingSteps.pop(); - } - mOnboardinStep = step; - return; - } - - if (hasManySteps) - mOnboardinStep = mOnboardingSteps.pop(); - } - } - - private void initUserAgreementViews() - { - mTermOfUseCheckbox = mContentView.findViewById(R.id.term_of_use_welcome_checkbox); - mTermOfUseCheckbox.setChecked( - SharedPropertiesUtils.isTermOfUseAgreementConfirmed(requireContext())); - - mPrivacyPolicyCheckbox = mContentView.findViewById(R.id.privacy_policy_welcome_checkbox); - mPrivacyPolicyCheckbox.setChecked( - SharedPropertiesUtils.isPrivacyPolicyAgreementConfirmed(requireContext())); - - mTermOfUseCheckbox.setOnCheckedChangeListener( - (buttonView, isChecked) -> onTermsOfUseViewChanged(isChecked)); - mPrivacyPolicyCheckbox.setOnCheckedChangeListener( - (buttonView, isChecked) -> onPrivacyPolicyViewChanged(isChecked)); - - UiUtils.linkifyView(mContentView, R.id.privacy_policy_welcome, - R.string.sign_agree_pp_gdpr, Framework.nativeGetPrivacyPolicyLink()); - - UiUtils.linkifyView(mContentView, R.id.term_of_use_welcome, - R.string.sign_agree_tof_gdpr, Framework.nativeGetTermsOfUseLink()); - } - - private void onPrivacyPolicyViewChanged(boolean isChecked) - { - SharedPropertiesUtils.putPrivacyPolicyAgreement(requireContext(), isChecked); - onCheckedValueChanged(isChecked, mTermOfUseCheckbox.isChecked()); - } - - private void onTermsOfUseViewChanged(boolean isChecked) - { - SharedPropertiesUtils.putTermOfUseAgreement(requireContext(), isChecked); - onCheckedValueChanged(isChecked, mPrivacyPolicyCheckbox.isChecked()); - } - - private void onCheckedValueChanged(boolean isChecked, - boolean isAnotherConditionChecked) - - { - boolean isAgreementGranted = isChecked && isAnotherConditionChecked; - if (!isAgreementGranted) - return; - - if (mPolicyAgreementListener != null) - mPolicyAgreementListener.onPolicyAgreementApplied(); - dismissAllowingStateLoss(); - } - - private void bindWelcomeScreenType() - { - boolean hasBindingType = mOnboardinStep != null; - UiUtils.showIf(hasBindingType, mContentView, R.id.button_container); - - boolean hasDeclineBtn = hasBindingType - && mOnboardinStep.hasDeclinedButton(); - TextView declineBtn = mContentView.findViewById(R.id.decline_btn); - UiUtils.showIf(hasDeclineBtn, declineBtn); - - View userAgreementBlock = mContentView.findViewById(R.id.user_agreement_block); - UiUtils.hideIf(hasBindingType, userAgreementBlock); - - if (hasDeclineBtn) - declineBtn.setText(mOnboardinStep.getDeclinedButtonResId()); - - if (!hasBindingType) - return; - - mTitle.setText(mOnboardinStep.getTitle()); -// mImage.setImageResource(mOnboardinStep.getImage()); - mAcceptBtn.setText(mOnboardinStep.getAcceptButtonResId()); - declineBtn.setOnClickListener(v -> onDeclineBtnClicked()); - mSubtitle.setText(mOnboardinStep.getSubtitle()); - } - - private void onDeclineBtnClicked() - { - Counters.setFirstStartDialogSeen(requireContext()); - dismissAllowingStateLoss(); - } - - @Override - public void onClick(View v) - { - if (v.getId() != R.id.accept_btn) - return; - - if (!mOnboardingSteps.isEmpty()) - { - mOnboardinStep = mOnboardingSteps.pop(); - if (mOnboardingStepPassedListener != null) - mOnboardingStepPassedListener.onOnboardingStepPassed(mOnboardinStep); - bindWelcomeScreenType(); - return; - } - - if (mOnboardinStep != null && mOnboardingStepPassedListener != null) - mOnboardingStepPassedListener.onOnboardingStepPassed(mOnboardinStep); - - Counters.setFirstStartDialogSeen(requireContext()); - dismissAllowingStateLoss(); - - if (mOnboardingStepPassedListener != null) - mOnboardingStepPassedListener.onLastOnboardingStepPassed(); - } - - @Override - public void onCancel(DialogInterface dialog) - { - super.onCancel(dialog); - if (!isAgreementDeclined(requireContext())) - Counters.setFirstStartDialogSeen(requireContext()); - if (mOnboardingStepPassedListener != null) - mOnboardingStepPassedListener.onOnboardingStepCancelled(); - } - - public static boolean isAgreementDeclined(@NonNull Context context) - { - return !SharedPropertiesUtils.isTermOfUseAgreementConfirmed(context) - || !SharedPropertiesUtils.isPrivacyPolicyAgreementConfirmed(context); - - } - - public interface PolicyAgreementListener - { - void onPolicyAgreementApplied(); - } - - public interface OnboardingStepPassedListener - { - void onOnboardingStepPassed(@NonNull OnboardingStep step); - void onLastOnboardingStepPassed(); - void onOnboardingStepCancelled(); - } -} diff --git a/android/src/com/mapswithme/maps/routing/NavigationController.java b/android/src/com/mapswithme/maps/routing/NavigationController.java index a41ce133f5..c01b9163d6 100644 --- a/android/src/com/mapswithme/maps/routing/NavigationController.java +++ b/android/src/com/mapswithme/maps/routing/NavigationController.java @@ -81,8 +81,6 @@ public class NavigationController implements Application.ActivityLifecycleCallba private final SearchWheel mSearchWheel; @NonNull private final View mSpeedViewContainer; - @NonNull - private final View mOnboardingBtn; private boolean mShowTimeLeft = true; @@ -155,7 +153,6 @@ public class NavigationController implements Application.ActivityLifecycleCallba mSearchButtonFrame = activity.findViewById(R.id.search_button_frame); mSearchWheel = new SearchWheel(mSearchButtonFrame); - mOnboardingBtn = activity.findViewById(R.id.onboarding_btn); ImageView bookmarkButton = mSearchButtonFrame.findViewById(R.id.btn_bookmarks); bookmarkButton.setImageDrawable(Graphics.tint(bookmarkButton.getContext(), @@ -383,8 +380,7 @@ public class NavigationController implements Application.ActivityLifecycleCallba public void updateSearchButtonsTranslation(float translation) { - int offset = UiUtils.isVisible(mOnboardingBtn) ? mOnboardingBtn.getHeight() : 0; - mSearchButtonFrame.setTranslationY(translation + offset); + mSearchButtonFrame.setTranslationY(translation); } public void fadeInSearchButtons()