forked from organicmaps/organicmaps
[android] Moved welcome/policy screen at the start of onboarding
[android] Removed static field about first start and put it in application
This commit is contained in:
parent
ca10737297
commit
09dbb58e48
4 changed files with 105 additions and 55 deletions
|
@ -198,7 +198,7 @@ public class MapFragment extends BaseMwmFragment
|
|||
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
final float exactDensityDpi = metrics.densityDpi;
|
||||
|
||||
final boolean firstStart = SplashActivity.isFirstStart();
|
||||
final boolean firstStart = MwmApplication.from(getActivity()).isFirstLaunch();
|
||||
if (!nativeCreateEngine(surface, (int) exactDensityDpi, firstStart, mLaunchByDeepLink,
|
||||
BuildConfig.VERSION_CODE))
|
||||
{
|
||||
|
|
|
@ -14,6 +14,7 @@ import com.mapswithme.maps.background.AppBackgroundTracker;
|
|||
import com.mapswithme.maps.background.NotificationChannelFactory;
|
||||
import com.mapswithme.maps.background.NotificationChannelProvider;
|
||||
import com.mapswithme.maps.background.Notifier;
|
||||
import com.mapswithme.maps.base.MediaPlayerWrapper;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
|
||||
import com.mapswithme.maps.downloader.CountryItem;
|
||||
import com.mapswithme.maps.downloader.MapManager;
|
||||
|
@ -24,7 +25,6 @@ import com.mapswithme.maps.location.LocationHelper;
|
|||
import com.mapswithme.maps.location.TrackRecorder;
|
||||
import com.mapswithme.maps.maplayer.subway.SubwayManager;
|
||||
import com.mapswithme.maps.maplayer.traffic.TrafficManager;
|
||||
import com.mapswithme.maps.base.MediaPlayerWrapper;
|
||||
import com.mapswithme.maps.routing.RoutingController;
|
||||
import com.mapswithme.maps.scheduling.ConnectivityJobScheduler;
|
||||
import com.mapswithme.maps.scheduling.ConnectivityListener;
|
||||
|
@ -43,8 +43,6 @@ import com.mapswithme.util.statistics.Statistics;
|
|||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class MwmApplication extends Application
|
||||
{
|
||||
|
@ -87,6 +85,7 @@ public class MwmApplication extends Application
|
|||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private GeofenceRegistry mGeofenceRegistry;
|
||||
private boolean mFirstLaunch;
|
||||
|
||||
@NonNull
|
||||
public SubwayManager getSubwayManager()
|
||||
|
@ -100,12 +99,21 @@ public class MwmApplication extends Application
|
|||
sSelf = this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the {@link #from(Context)} method instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static MwmApplication get()
|
||||
{
|
||||
return sSelf;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static MwmApplication from(@NonNull Context context)
|
||||
{
|
||||
return (MwmApplication) context.getApplicationContext();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Use {@link #backgroundTracker(Context)} instead.
|
||||
|
@ -376,6 +384,16 @@ public class MwmApplication extends Application
|
|||
return mLogger;
|
||||
}
|
||||
|
||||
public void setFirstLaunch(boolean isFirstLaunch)
|
||||
{
|
||||
mFirstLaunch = isFirstLaunch;
|
||||
}
|
||||
|
||||
public boolean isFirstLaunch()
|
||||
{
|
||||
return mFirstLaunch;
|
||||
}
|
||||
|
||||
private static class VisibleAppLaunchListener implements AppBackgroundTracker.OnVisibleAppLaunchListener
|
||||
{
|
||||
@Override
|
||||
|
|
|
@ -19,6 +19,7 @@ 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.BaseNewsFragment;
|
||||
import com.mapswithme.maps.news.NewsFragment;
|
||||
import com.mapswithme.maps.news.WelcomeDialogFragment;
|
||||
|
@ -36,20 +37,17 @@ import com.mapswithme.util.statistics.PushwooshHelper;
|
|||
import com.my.tracker.MyTracker;
|
||||
|
||||
public class SplashActivity extends AppCompatActivity
|
||||
implements BaseNewsFragment.NewsDialogListener, BaseActivity
|
||||
implements BaseNewsFragment.NewsDialogListener, BaseActivity,
|
||||
WelcomeDialogFragment.PolicyAgreementListener
|
||||
{
|
||||
private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC);
|
||||
private static final String TAG = SplashActivity.class.getSimpleName();
|
||||
private static final String EXTRA_CORE_INITIALIZED = "extra_core_initialized";
|
||||
private static final String EXTRA_ACTIVITY_TO_START = "extra_activity_to_start";
|
||||
public static final String EXTRA_INITIAL_INTENT = "extra_initial_intent";
|
||||
private static final int REQUEST_PERMISSIONS = 1;
|
||||
private static final long FIRST_START_DELAY = 1000;
|
||||
private static final long FIRST_START_DELAY = 300;
|
||||
private static final long DELAY = 100;
|
||||
|
||||
// The first launch of application ever - onboarding screen will be shown.
|
||||
private static boolean sFirstStart;
|
||||
|
||||
private View mIvLogo;
|
||||
private View mAppName;
|
||||
|
||||
|
@ -57,6 +55,16 @@ public class SplashActivity extends AppCompatActivity
|
|||
private boolean mNeedStoragePermission;
|
||||
private boolean mCanceled;
|
||||
|
||||
@NonNull
|
||||
private final Runnable mWelcomeScreenDelayedTask = new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
WelcomeDialogFragment.show(SplashActivity.this);
|
||||
}
|
||||
};
|
||||
|
||||
@NonNull
|
||||
private final Runnable mPermissionsDelayedTask = new Runnable()
|
||||
{
|
||||
|
@ -138,19 +146,13 @@ public class SplashActivity extends AppCompatActivity
|
|||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
public static boolean isFirstStart()
|
||||
{
|
||||
boolean res = sFirstStart;
|
||||
sFirstStart = false;
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
mBaseDelegate.onCreate();
|
||||
handleUpdateMapsFragmentCorrectly(savedInstanceState);
|
||||
UiThread.cancelDelayedTasks(mWelcomeScreenDelayedTask);
|
||||
UiThread.cancelDelayedTasks(mPermissionsDelayedTask);
|
||||
UiThread.cancelDelayedTasks(mInitCoreDelayedTask);
|
||||
UiThread.cancelDelayedTasks(mFinalDelayedTask);
|
||||
|
@ -211,6 +213,28 @@ public class SplashActivity extends AppCompatActivity
|
|||
super.onResume();
|
||||
mBaseDelegate.onResume();
|
||||
mCanceled = false;
|
||||
|
||||
if (Counters.isMigrationNeeded())
|
||||
{
|
||||
Config.migrateCountersToSharedPrefs();
|
||||
Counters.setMigrationExecuted();
|
||||
}
|
||||
|
||||
boolean isFirstLaunch = WelcomeDialogFragment.isFirstLaunch(this);
|
||||
if (isFirstLaunch)
|
||||
MwmApplication.from(this).setFirstLaunch(true);
|
||||
|
||||
if (isFirstLaunch || WelcomeDialogFragment.recreate(this))
|
||||
{
|
||||
UiThread.runLater(mWelcomeScreenDelayedTask, FIRST_START_DELAY);
|
||||
return;
|
||||
}
|
||||
|
||||
processPermissionGranting();
|
||||
}
|
||||
|
||||
private void processPermissionGranting()
|
||||
{
|
||||
mPermissionsGranted = PermissionsUtils.isExternalStorageGranted();
|
||||
DialogFragment storagePermissionsDialog = StoragePermissionsDialogFragment.find(this);
|
||||
DialogFragment permissionsDialog = PermissionsDialogFragment.find(this);
|
||||
|
@ -226,7 +250,7 @@ public class SplashActivity extends AppCompatActivity
|
|||
}
|
||||
permissionsDialog = PermissionsDialogFragment.find(this);
|
||||
if (permissionsDialog == null)
|
||||
UiThread.runLater(mPermissionsDelayedTask, FIRST_START_DELAY);
|
||||
UiThread.runLater(mPermissionsDelayedTask, DELAY);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -246,6 +270,7 @@ public class SplashActivity extends AppCompatActivity
|
|||
super.onPause();
|
||||
mBaseDelegate.onPause();
|
||||
mCanceled = true;
|
||||
UiThread.cancelDelayedTasks(mWelcomeScreenDelayedTask);
|
||||
UiThread.cancelDelayedTasks(mPermissionsDelayedTask);
|
||||
UiThread.cancelDelayedTasks(mInitCoreDelayedTask);
|
||||
UiThread.cancelDelayedTasks(mFinalDelayedTask);
|
||||
|
@ -277,20 +302,6 @@ public class SplashActivity extends AppCompatActivity
|
|||
return;
|
||||
}
|
||||
|
||||
if (Counters.isMigrationNeeded())
|
||||
{
|
||||
Config.migrateCountersToSharedPrefs();
|
||||
Counters.setMigrationExecuted();
|
||||
}
|
||||
|
||||
sFirstStart = WelcomeDialogFragment.showOn(this);
|
||||
if (sFirstStart)
|
||||
{
|
||||
PushwooshHelper.nativeProcessFirstLaunch();
|
||||
UiUtils.hide(mIvLogo, mAppName);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean showNews = NewsFragment.showOn(this, this);
|
||||
if (!showNews)
|
||||
{
|
||||
|
@ -356,6 +367,12 @@ public class SplashActivity extends AppCompatActivity
|
|||
processNavigation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPolicyAgreementApplied()
|
||||
{
|
||||
processPermissionGranting();
|
||||
}
|
||||
|
||||
private void initView()
|
||||
{
|
||||
UiUtils.setupStatusBar(this);
|
||||
|
@ -366,7 +383,15 @@ public class SplashActivity extends AppCompatActivity
|
|||
|
||||
private void init()
|
||||
{
|
||||
MwmApplication.get().initCore();
|
||||
MwmApplication app = MwmApplication.from(this);
|
||||
boolean success = app.initCore();
|
||||
if (!success || !app.isFirstLaunch())
|
||||
return;
|
||||
|
||||
PushwooshHelper.nativeProcessFirstLaunch();
|
||||
LocationHelper.INSTANCE.onEnteredIntoFirstRun();
|
||||
if (!LocationHelper.INSTANCE.isActive())
|
||||
LocationHelper.INSTANCE.start();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.mapswithme.maps.news;
|
|||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
|
@ -20,16 +21,21 @@ 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.location.LocationHelper;
|
||||
import com.mapswithme.util.Counters;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
|
||||
public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View.OnClickListener
|
||||
{
|
||||
@Nullable
|
||||
private BaseNewsFragment.NewsDialogListener mListener;
|
||||
private PolicyAgreementListener mListener;
|
||||
|
||||
public static boolean showOn(@NonNull FragmentActivity activity)
|
||||
public static void show(@NonNull FragmentActivity activity)
|
||||
{
|
||||
create(activity);
|
||||
Counters.setFirstStartDialogSeen();
|
||||
}
|
||||
|
||||
public static boolean isFirstLaunch(@NonNull FragmentActivity activity)
|
||||
{
|
||||
if (Counters.getFirstInstallVersion() < BuildConfig.VERSION_CODE)
|
||||
return false;
|
||||
|
@ -38,14 +44,7 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View
|
|||
if (fm.isDestroyed())
|
||||
return false;
|
||||
|
||||
if (Counters.isFirstStartDialogSeen() &&
|
||||
!recreate(activity))
|
||||
return false;
|
||||
|
||||
create(activity);
|
||||
|
||||
Counters.setFirstStartDialogSeen();
|
||||
return true;
|
||||
return !Counters.isFirstStartDialogSeen();
|
||||
}
|
||||
|
||||
private static void create(@NonNull FragmentActivity activity)
|
||||
|
@ -57,7 +56,7 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View
|
|||
.commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
private static boolean recreate(@NonNull FragmentActivity activity)
|
||||
public static boolean recreate(@NonNull FragmentActivity activity)
|
||||
{
|
||||
FragmentManager fm = activity.getSupportFragmentManager();
|
||||
Fragment f = fm.findFragmentByTag(WelcomeDialogFragment.class.getName());
|
||||
|
@ -79,7 +78,7 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View
|
|||
{
|
||||
super.onAttach(activity);
|
||||
if (activity instanceof BaseNewsFragment.NewsDialogListener)
|
||||
mListener = (BaseNewsFragment.NewsDialogListener) activity;
|
||||
mListener = (PolicyAgreementListener) activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -99,10 +98,6 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View
|
|||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState)
|
||||
{
|
||||
LocationHelper.INSTANCE.onEnteredIntoFirstRun();
|
||||
if (!LocationHelper.INSTANCE.isActive())
|
||||
LocationHelper.INSTANCE.start();
|
||||
|
||||
Dialog res = super.onCreateDialog(savedInstanceState);
|
||||
res.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
res.setCancelable(false);
|
||||
|
@ -110,13 +105,13 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View
|
|||
View content = View.inflate(getActivity(), R.layout.fragment_welcome, null);
|
||||
res.setContentView(content);
|
||||
content.findViewById(R.id.btn__continue).setOnClickListener(this);
|
||||
ImageView image = (ImageView) content.findViewById(R.id.iv__image);
|
||||
ImageView image = content.findViewById(R.id.iv__image);
|
||||
image.setImageResource(R.drawable.img_welcome);
|
||||
TextView title = (TextView) content.findViewById(R.id.tv__title);
|
||||
TextView title = content.findViewById(R.id.tv__title);
|
||||
title.setText(R.string.onboarding_welcome_title);
|
||||
TextView subtitle = (TextView) content.findViewById(R.id.tv__subtitle1);
|
||||
TextView subtitle = content.findViewById(R.id.tv__subtitle1);
|
||||
subtitle.setText(R.string.onboarding_welcome_first_subtitle);
|
||||
TextView terms = (TextView) content.findViewById(R.id.tv__subtitle2);
|
||||
TextView terms = content.findViewById(R.id.tv__subtitle2);
|
||||
UiUtils.show(terms);
|
||||
Resources rs = content.getResources();
|
||||
terms.setText(Html.fromHtml(rs.getString(R.string.onboarding_welcome_second_subtitle,
|
||||
|
@ -133,7 +128,19 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View
|
|||
return;
|
||||
|
||||
if (mListener != null)
|
||||
mListener.onDialogDone();
|
||||
mListener.onPolicyAgreementApplied();
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog)
|
||||
{
|
||||
super.onCancel(dialog);
|
||||
requireActivity().finish();
|
||||
}
|
||||
|
||||
public interface PolicyAgreementListener
|
||||
{
|
||||
void onPolicyAgreementApplied();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue