diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index e9ebc34f0b..a5611e315b 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -82,9 +82,9 @@
android:value="ERROR" /-->
+ android:name="com.mapswithme.maps.SplashActivity"
+ android:configChanges="orientation|screenLayout|screenSize"
+ android:label="@string/app_name">
@@ -117,8 +117,8 @@
+ android:host="ge0.me"
+ android:scheme="http"/>
@@ -128,11 +128,11 @@
+ android:host="maps.google.com"
+ android:scheme="https"/>
+ android:host="maps.google.com"
+ android:scheme="http"/>
@@ -145,40 +145,44 @@
+ android:host="*"
+ android:mimeType="application/vnd.google-earth.kmz"/>
+ android:host="*"
+ android:mimeType="application/vnd.google-earth.kml+xml"/>
+ android:host="*"
+ android:mimeType="*/*"
+ android:pathPattern=".*\\.kmz"
+ android:scheme="file"/>
+ android:host="*"
+ android:mimeType="*/*"
+ android:pathPattern=".*\\.kml"
+ android:scheme="file"/>
-
+
+
+
+
+
+
diff --git a/android/src/com/mapswithme/maps/DownloadResourcesActivity.java b/android/src/com/mapswithme/maps/DownloadResourcesActivity.java
index 8a3c915536..f23745a5c9 100644
--- a/android/src/com/mapswithme/maps/DownloadResourcesActivity.java
+++ b/android/src/com/mapswithme/maps/DownloadResourcesActivity.java
@@ -214,9 +214,9 @@ public class DownloadResourcesActivity extends BaseMwmFragmentActivity
@CallSuper
@Override
- protected void safeOnCreate(@Nullable Bundle savedInstanceState)
+ protected void onCreate(@Nullable Bundle savedInstanceState)
{
- super.safeOnCreate(savedInstanceState);
+ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_download_resources);
initViewsAndListeners();
@@ -251,8 +251,9 @@ public class DownloadResourcesActivity extends BaseMwmFragmentActivity
@CallSuper
@Override
- protected void safeOnResume()
+ protected void onResume()
{
+ super.onResume();
if (!isFinishing())
LocationHelper.INSTANCE.addListener(mLocationListener, true);
}
@@ -488,8 +489,12 @@ public class DownloadResourcesActivity extends BaseMwmFragmentActivity
if (intent == null)
return false;
+ final Intent extra = intent.getParcelableExtra(SplashActivity.EXTRA_INTENT);
+ if (extra == null)
+ return false;
+
for (final IntentProcessor ip : mIntentProcessors)
- if (ip.isSupported(intent) && ip.process(intent))
+ if (ip.isSupported(extra) && ip.process(extra))
return true;
return false;
diff --git a/android/src/com/mapswithme/maps/MapFragment.java b/android/src/com/mapswithme/maps/MapFragment.java
index 9595021a98..8811b5c963 100644
--- a/android/src/com/mapswithme/maps/MapFragment.java
+++ b/android/src/com/mapswithme/maps/MapFragment.java
@@ -166,7 +166,7 @@ public class MapFragment extends BaseMwmFragment
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
final float exactDensityDpi = metrics.densityDpi;
- boolean firstStart = ((MwmActivity) getMwmActivity()).isFirstStart();
+ boolean firstStart = SplashActivity.isFirstStart();
if (firstStart)
PushwooshHelper.nativeProcessFirstLaunch();
diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java
index 729cbb38e8..80f56408a9 100644
--- a/android/src/com/mapswithme/maps/MwmActivity.java
+++ b/android/src/com/mapswithme/maps/MwmActivity.java
@@ -53,11 +53,8 @@ import com.mapswithme.maps.editor.EditorActivity;
import com.mapswithme.maps.editor.EditorHostFragment;
import com.mapswithme.maps.editor.FeatureCategoryActivity;
import com.mapswithme.maps.editor.ReportFragment;
-import com.mapswithme.maps.editor.ViralFragment;
import com.mapswithme.maps.location.CompassData;
import com.mapswithme.maps.location.LocationHelper;
-import com.mapswithme.maps.news.FirstStartFragment;
-import com.mapswithme.maps.news.NewsFragment;
import com.mapswithme.maps.routing.NavigationController;
import com.mapswithme.maps.routing.RoutingController;
import com.mapswithme.maps.routing.RoutingPlanController;
@@ -155,6 +152,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
private FadeView mFadeView;
+ @Nullable
private MyPositionButton mNavMyPosition;
private TrafficButton mTraffic;
@Nullable
@@ -176,8 +174,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
private FloatingSearchToolbarController mSearchController;
- // The first launch of application ever - onboarding screen will be shown.
- private boolean mFirstStart;
private boolean mPlacePageRestored;
private boolean mLocationErrorDialogAnnoying = false;
@@ -249,7 +245,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
int oldLeft, int oldTop, int oldRight, int oldBottom)
{
mScreenFullRect = new Rect(left, top, right, bottom);
- if (mPlacePageVisible && (mPlacePage == null || mPlacePage.GetPreview().getVisibility() != View.VISIBLE))
+ if (mPlacePageVisible && (mPlacePage == null || UiUtils.isHidden(mPlacePage.GetPreview())))
mPlacePageVisible = false;
recalculateVisibleRect(mScreenFullRect);
}
@@ -454,7 +450,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
@Override
protected void safeOnCreate(@Nullable Bundle savedInstanceState)
{
- super.safeOnCreate(savedInstanceState);
if (savedInstanceState != null)
mLocationErrorDialogAnnoying = savedInstanceState.getBoolean(EXTRA_LOCATION_DIALOG_IS_ANNOYING);
mIsFragmentContainer = getResources().getBoolean(R.bool.tabletLayout);
@@ -885,6 +880,12 @@ public class MwmActivity extends BaseMwmFragmentActivity
@Override
public void onDestroy()
{
+ if (!isInitializationComplete())
+ {
+ super.onDestroy();
+ return;
+ }
+
// TODO move listeners attach-deattach to onStart-onStop since onDestroy isn't guaranteed.
Framework.nativeRemoveMapObjectListener();
BottomSheetHelper.free();
@@ -917,7 +918,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
RoutingController.get().onSaveState();
outState.putBoolean(EXTRA_LOCATION_DIALOG_IS_ANNOYING, mLocationErrorDialogAnnoying);
- mNavMyPosition.onSaveState(outState);
+ if (mNavMyPosition != null)
+ mNavMyPosition.onSaveState(outState);
if(mNavAnimationController != null)
mNavAnimationController.onSaveState(outState);
@@ -928,9 +930,9 @@ public class MwmActivity extends BaseMwmFragmentActivity
}
@Override
- protected void safeOnRestoreInstanceState(@NonNull Bundle savedInstanceState)
+ protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState)
{
- super.safeOnRestoreInstanceState(savedInstanceState);
+ super.onRestoreInstanceState(savedInstanceState);
final State state = State.values()[savedInstanceState.getInt(STATE_PP, 0)];
if (mPlacePage != null && state != State.HIDDEN)
@@ -953,7 +955,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
if (mNavigationController != null)
mNavigationController.onRestoreState(savedInstanceState);
- mNavMyPosition.onRestoreState(savedInstanceState);
+ if (mNavMyPosition != null)
+ mNavMyPosition.onRestoreState(savedInstanceState);
if(mNavAnimationController != null)
mNavAnimationController.onRestoreState(savedInstanceState);
@@ -1018,9 +1021,11 @@ public class MwmActivity extends BaseMwmFragmentActivity
runTasks();
}
+ @CallSuper
@Override
- protected void safeOnResume()
+ protected void onResume()
{
+ super.onResume();
mPlacePageRestored = mPlacePage != null && mPlacePage.getState() != State.HIDDEN;
mSearchController.refreshToolbar();
mMainMenu.onResume(new Runnable()
@@ -1054,23 +1059,9 @@ public class MwmActivity extends BaseMwmFragmentActivity
}
@Override
- protected void safeOnResumeFragments()
+ protected void onResumeFragments()
{
- if (!RoutingController.get().isNavigating())
- {
- mFirstStart = FirstStartFragment.showOn(this);
- if (mFirstStart)
- return;
-
- if (!NewsFragment.showOn(this))
- {
- if (ViralFragment.shouldDisplay())
- new ViralFragment().show(getSupportFragmentManager(), "");
- else
- LikesManager.INSTANCE.showDialogs(this);
- }
- }
-
+ super.onResumeFragments();
RoutingController.get().restore();
if (mPlacePage != null)
mPlacePage.restore();
@@ -1095,11 +1086,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
super.onStart();
RoutingController.get().attach(this);
- }
-
- @Override
- protected void safeOnStart()
- {
if (MapFragment.nativeIsEngineCreated())
LocationHelper.INSTANCE.attach(this);
if (mTrafficButtonController != null)
@@ -1299,12 +1285,13 @@ public class MwmActivity extends BaseMwmFragmentActivity
});
if (mNavAnimationController != null)
mNavAnimationController.disappearZoomButtons();
- mNavMyPosition.hide();
+ if (mNavMyPosition != null)
+ mNavMyPosition.hide();
mTraffic.hide();
}
else
{
- if (mPlacePage.isHidden() && mNavAnimationController != null)
+ if (mPlacePage != null && mPlacePage.isHidden() && mNavAnimationController != null)
mNavAnimationController.appearZoomButtons();
if (!mIsFullscreenAnimating)
appearMenu(menu);
@@ -1323,7 +1310,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
adjustRuler(0, 0);
}
});
- mNavMyPosition.show();
+ if (mNavMyPosition != null)
+ mNavMyPosition.show();
mTraffic.show();
}
@@ -1811,17 +1799,11 @@ public class MwmActivity extends BaseMwmFragmentActivity
mSearchController.refreshToolbar();
}
- boolean isFirstStart()
- {
- boolean res = mFirstStart;
- mFirstStart = false;
- return res;
- }
-
@Override
public void onMyPositionModeChanged(int newMode)
{
- mNavMyPosition.update(newMode);
+ if (mNavMyPosition != null)
+ mNavMyPosition.update(newMode);
}
@Override
diff --git a/android/src/com/mapswithme/maps/MwmApplication.java b/android/src/com/mapswithme/maps/MwmApplication.java
index af8293af93..5d64e6f3f3 100644
--- a/android/src/com/mapswithme/maps/MwmApplication.java
+++ b/android/src/com/mapswithme/maps/MwmApplication.java
@@ -10,7 +10,6 @@ import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import android.support.multidex.MultiDex;
-import android.support.v7.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
@@ -33,6 +32,7 @@ import com.mapswithme.maps.sound.TtsPlayer;
import com.mapswithme.maps.traffic.TrafficManager;
import com.mapswithme.util.Config;
import com.mapswithme.util.Constants;
+import com.mapswithme.util.Counters;
import com.mapswithme.util.ThemeSwitcher;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
@@ -56,9 +56,7 @@ public class MwmApplication extends Application
private SharedPreferences mPrefs;
private AppBackgroundTracker mBackgroundTracker;
- private boolean mAreCountersInitialized;
private boolean mIsFrameworkInitialized;
- private boolean mIsPlatformInitialized;
private Handler mMainLoopHandler;
private final Object mMainQueueToken = new Object();
@@ -157,9 +155,6 @@ public class MwmApplication extends Application
public void initNativePlatform()
{
- if (mIsPlatformInitialized)
- return;
-
final boolean isInstallationIdFound = setInstallationIdToCrashlytics();
initTracker();
@@ -185,8 +180,6 @@ public class MwmApplication extends Application
mBackgroundTracker.addListener(mBackgroundListener);
TrackRecorder.init();
Editor.init();
-
- mIsPlatformInitialized = true;
}
public void initNativeCore()
@@ -264,11 +257,6 @@ public class MwmApplication extends Application
return mIsFrameworkInitialized;
}
- public boolean isPlatformInitialized()
- {
- return mIsPlatformInitialized;
- }
-
public String getApkPath()
{
try
@@ -370,19 +358,9 @@ public class MwmApplication extends Application
MyTracker.initTracker();
}
- public void initCounters()
- {
- if (!mAreCountersInitialized)
- {
- mAreCountersInitialized = true;
- Config.updateLaunchCounter();
- PreferenceManager.setDefaultValues(this, R.xml.prefs_main, false);
- }
- }
-
public static void onUpgrade()
{
- Config.resetAppSessionCounters();
+ Counters.resetAppSessionCounters();
}
@SuppressWarnings("unused")
diff --git a/android/src/com/mapswithme/maps/SplashActivity.java b/android/src/com/mapswithme/maps/SplashActivity.java
new file mode 100644
index 0000000000..2dc9545dc1
--- /dev/null
+++ b/android/src/com/mapswithme/maps/SplashActivity.java
@@ -0,0 +1,198 @@
+package com.mapswithme.maps;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.ActivityCompat;
+import android.support.v7.app.AppCompatActivity;
+
+import com.mapswithme.maps.ads.LikesManager;
+import com.mapswithme.maps.editor.ViralFragment;
+import com.mapswithme.maps.location.LocationHelper;
+import com.mapswithme.maps.news.BaseNewsFragment;
+import com.mapswithme.maps.news.FirstStartFragment;
+import com.mapswithme.maps.news.NewsFragment;
+import com.mapswithme.util.Counters;
+import com.mapswithme.util.UiUtils;
+import com.mapswithme.util.Utils;
+import com.mapswithme.util.concurrency.UiThread;
+
+import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
+import static android.Manifest.permission.ACCESS_FINE_LOCATION;
+import static android.Manifest.permission.GET_ACCOUNTS;
+import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+
+public class SplashActivity extends AppCompatActivity
+ implements BaseNewsFragment.NewsDialogListener
+{
+ public static final String[] PERMISSIONS = new String[]
+ {
+ WRITE_EXTERNAL_STORAGE,
+ ACCESS_COARSE_LOCATION,
+ ACCESS_FINE_LOCATION,
+ GET_ACCOUNTS
+ };
+ public static final String EXTRA_INTENT = "extra_intent";
+ private static final String EXTRA_ACTIVITY_TO_START = "extra_activity_to_start";
+ private static final int REQUEST_PERMISSIONS = 1;
+ private static final long DELAY = 100;
+
+ // The first launch of application ever - onboarding screen will be shown.
+ private static boolean sFirstStart;
+
+ private boolean mPermissionsGranted;
+
+ public static void start(@NonNull Context context,
+ @Nullable Class extends Activity> activityToStart)
+ {
+ Intent intent = new Intent(context, SplashActivity.class);
+ intent.putExtra(EXTRA_ACTIVITY_TO_START, activityToStart);
+ context.startActivity(intent);
+ }
+
+ public static boolean isFirstStart()
+ {
+ boolean res = sFirstStart;
+ sFirstStart = false;
+ return res;
+ }
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ Counters.initCounters(this);
+ initView();
+ }
+
+ @Override
+ protected void onResume()
+ {
+ super.onResume();
+ mPermissionsGranted = Utils.checkPermissions(this, PERMISSIONS);
+ if (!mPermissionsGranted)
+ {
+// TODO requestPermissions after Permissions dialog
+ ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_PERMISSIONS);
+ return;
+ }
+
+ UiThread.runLater(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ init();
+ resumeDialogs();
+ }
+ }, DELAY);
+ }
+
+ private void resumeDialogs()
+ {
+ // TODO show permissions dialog if Permissions is not granted
+ if (!mPermissionsGranted)
+ return;
+
+ sFirstStart = FirstStartFragment.showOn(this, this);
+ if (sFirstStart)
+ return;
+
+ if (!NewsFragment.showOn(this, this))
+ {
+ if (ViralFragment.shouldDisplay())
+ {
+ ViralFragment dialog = new ViralFragment();
+ dialog.onDismiss(new DialogInterface()
+ {
+ @Override
+ public void cancel()
+ {
+ processNavigation();
+ }
+
+ @Override
+ public void dismiss()
+ {
+ processNavigation();
+ }
+ });
+ dialog.show(getSupportFragmentManager(), "");
+ }
+ else
+ {
+ LikesManager.INSTANCE.showDialogs(this);
+ processNavigation();
+ }
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+ @NonNull int[] grantResults)
+ {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (grantResults.length == 0)
+ return;
+
+ boolean isWriteGranted = false;
+ for (int i = 0; i < permissions.length; ++i)
+ {
+ int result = grantResults[i];
+ String permission = permissions[i];
+ if (permission.equals(WRITE_EXTERNAL_STORAGE) && result == PERMISSION_GRANTED)
+ isWriteGranted = true;
+ }
+
+ if (isWriteGranted)
+ {
+ mPermissionsGranted = true;
+ init();
+ resumeDialogs();
+ }
+ else
+ {
+ finish();
+ }
+ }
+
+ @Override
+ public void onDialogDone()
+ {
+ processNavigation();
+ }
+
+ private void initView()
+ {
+ UiUtils.setupStatusBar(this);
+ setContentView(R.layout.activity_splash);
+ }
+
+ private void init()
+ {
+ MwmApplication.get().initNativePlatform();
+ MwmApplication.get().initNativeCore();
+ LocationHelper.INSTANCE.init();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void processNavigation()
+ {
+ Intent input = getIntent();
+ Intent intent = new Intent(this, DownloadResourcesActivity.class);
+ if (input != null)
+ {
+ Class extends Activity> type = (Class extends Activity>) input.getSerializableExtra(EXTRA_ACTIVITY_TO_START);
+ if (type != null)
+ intent = new Intent(this, type);
+ intent.putExtra(EXTRA_INTENT, input);
+ }
+ startActivity(intent);
+ finish();
+ }
+}
diff --git a/android/src/com/mapswithme/maps/ads/GooglePlusDialogFragment.java b/android/src/com/mapswithme/maps/ads/GooglePlusDialogFragment.java
index f4b2207412..0cb87fce36 100644
--- a/android/src/com/mapswithme/maps/ads/GooglePlusDialogFragment.java
+++ b/android/src/com/mapswithme/maps/ads/GooglePlusDialogFragment.java
@@ -11,8 +11,8 @@ import android.view.LayoutInflater;
import com.google.android.gms.plus.PlusOneButton;
import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseMwmDialogFragment;
-import com.mapswithme.util.Config;
import com.mapswithme.util.Constants;
+import com.mapswithme.util.Counters;
import com.mapswithme.util.statistics.Statistics;
public class GooglePlusDialogFragment extends BaseMwmDialogFragment
@@ -31,7 +31,7 @@ public class GooglePlusDialogFragment extends BaseMwmDialogFragment
@Override
public void onPlusOneClick(Intent intent)
{
- Config.setRatingApplied(GooglePlusDialogFragment.class);
+ Counters.setRatingApplied(GooglePlusDialogFragment.class);
dismiss();
startActivityForResult(intent, 0);
}
diff --git a/android/src/com/mapswithme/maps/ads/LikesManager.java b/android/src/com/mapswithme/maps/ads/LikesManager.java
index ae4e068456..07f9a2d521 100644
--- a/android/src/com/mapswithme/maps/ads/LikesManager.java
+++ b/android/src/com/mapswithme/maps/ads/LikesManager.java
@@ -8,8 +8,8 @@ import java.lang.ref.WeakReference;
import com.mapswithme.maps.BuildConfig;
import com.mapswithme.maps.routing.RoutingController;
-import com.mapswithme.util.Config;
import com.mapswithme.util.ConnectionState;
+import com.mapswithme.util.Counters;
import com.mapswithme.util.concurrency.UiThread;
public enum LikesManager
@@ -19,7 +19,7 @@ public enum LikesManager
private static final int DIALOG_DELAY_DEFAULT = 30000;
private static final int DIALOG_DELAY_SHORT = 5000;
- private static final int SESSION_NUM = Config.getSessionCount();
+ private static final int SESSION_NUM = Counters.getSessionCount();
/*
Maps type of like dialog to the dialog, performing like.
@@ -72,7 +72,7 @@ public enum LikesManager
sNewUsersMapping.put(55, LikeType.FACEBOOK_INVITE_NEW_USERS);
}
- private final boolean mIsNewUser = (Config.getFirstInstallVersion() == BuildConfig.VERSION_CODE);
+ private final boolean mIsNewUser = (Counters.getFirstInstallVersion() == BuildConfig.VERSION_CODE);
private Runnable mLikeRunnable;
private WeakReference mActivityRef;
@@ -95,10 +95,10 @@ public enum LikesManager
private void displayLikeDialog(final Class extends DialogFragment> dialogFragmentClass, final int delayMillis)
{
- if (Config.isSessionRated(SESSION_NUM) || Config.isRatingApplied(dialogFragmentClass))
+ if (Counters.isSessionRated(SESSION_NUM) || Counters.isRatingApplied(dialogFragmentClass))
return;
- Config.setRatedSession(SESSION_NUM);
+ Counters.setRatedSession(SESSION_NUM);
UiThread.cancelDelayedTasks(mLikeRunnable);
mLikeRunnable = new Runnable()
diff --git a/android/src/com/mapswithme/maps/ads/RateStoreDialogFragment.java b/android/src/com/mapswithme/maps/ads/RateStoreDialogFragment.java
index 5a710216e7..d08d98b220 100644
--- a/android/src/com/mapswithme/maps/ads/RateStoreDialogFragment.java
+++ b/android/src/com/mapswithme/maps/ads/RateStoreDialogFragment.java
@@ -22,8 +22,8 @@ import com.mapswithme.maps.BuildConfig;
import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseMwmDialogFragment;
-import com.mapswithme.util.Config;
import com.mapswithme.util.Constants;
+import com.mapswithme.util.Counters;
import com.mapswithme.util.Graphics;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
@@ -64,7 +64,7 @@ public class RateStoreDialogFragment extends BaseMwmDialogFragment implements Vi
mRating = rating;
if (rating >= BuildConfig.RATING_THRESHOLD)
{
- Config.setRatingApplied(RateStoreDialogFragment.class);
+ Counters.setRatingApplied(RateStoreDialogFragment.class);
dismiss();
Utils.openAppInMarket(getActivity(), BuildConfig.REVIEW_URL);
}
@@ -109,7 +109,7 @@ public class RateStoreDialogFragment extends BaseMwmDialogFragment implements Vi
switch (v.getId())
{
case R.id.btn__explain_bad_rating:
- Config.setRatingApplied(GooglePlusDialogFragment.class);
+ Counters.setRatingApplied(GooglePlusDialogFragment.class);
dismiss();
final Intent intent = new Intent(Intent.ACTION_SENDTO);
final PackageInfo info;
diff --git a/android/src/com/mapswithme/maps/background/ConnectivityChangedReceiver.java b/android/src/com/mapswithme/maps/background/ConnectivityChangedReceiver.java
index 740eef4908..13017f93c7 100644
--- a/android/src/com/mapswithme/maps/background/ConnectivityChangedReceiver.java
+++ b/android/src/com/mapswithme/maps/background/ConnectivityChangedReceiver.java
@@ -18,7 +18,8 @@ public class ConnectivityChangedReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
{
- if (!ConnectionState.isWifiConnected() || MapManager.nativeNeedMigrate())
+ if (!MwmApplication.get().isFrameworkInitialized() || !ConnectionState.isWifiConnected()
+ || MapManager.nativeNeedMigrate())
return;
final long lastEventTimestamp = prefs().getLong(DOWNLOAD_UPDATE_TIMESTAMP, 0);
diff --git a/android/src/com/mapswithme/maps/base/BaseActivityDelegate.java b/android/src/com/mapswithme/maps/base/BaseActivityDelegate.java
index 2d69367e0d..3431c4e3f8 100644
--- a/android/src/com/mapswithme/maps/base/BaseActivityDelegate.java
+++ b/android/src/com/mapswithme/maps/base/BaseActivityDelegate.java
@@ -1,23 +1,15 @@
package com.mapswithme.maps.base;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import com.mapswithme.maps.MwmApplication;
-import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.util.Config;
import com.mapswithme.util.UiUtils;
-import com.mapswithme.util.Utils;
import com.mapswithme.util.ViewServer;
import com.mapswithme.util.concurrency.UiThread;
import com.mapswithme.util.statistics.Statistics;
import com.my.tracker.MyTracker;
-import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
-
public class BaseActivityDelegate
{
@NonNull
@@ -33,7 +25,8 @@ public class BaseActivityDelegate
public void onCreate()
{
mThemeName = Config.getCurrentUiTheme();
- mActivity.get().setTheme(mActivity.getThemeResourceId(mThemeName));
+ if (mThemeName != null)
+ mActivity.get().setTheme(mActivity.getThemeResourceId(mThemeName));
}
public void onDestroy()
@@ -48,24 +41,18 @@ public class BaseActivityDelegate
public void onStart()
{
- if (!MwmApplication.get().isPlatformInitialized() || !Utils.isWriteExternalGranted(mActivity.get()))
- return;
Statistics.INSTANCE.startActivity(mActivity.get());
MyTracker.onStartActivity(mActivity.get());
}
public void onStop()
{
- if (!MwmApplication.get().isPlatformInitialized() || !Utils.isWriteExternalGranted(mActivity.get()))
- return;
Statistics.INSTANCE.stopActivity(mActivity.get());
MyTracker.onStopActivity(mActivity.get());
}
public void onResume()
{
- if (!MwmApplication.get().isPlatformInitialized() || !Utils.isWriteExternalGranted(mActivity.get()))
- return;
org.alohalytics.Statistics.logEvent("$onResume", mActivity.getClass().getSimpleName() + ":" +
UiUtils.deviceOrientationAsString(mActivity.get()));
ViewServer.get(mActivity.get()).setFocusedWindow(mActivity.get());
@@ -73,14 +60,12 @@ public class BaseActivityDelegate
public void onPause()
{
- if (!MwmApplication.get().isPlatformInitialized() || !Utils.isWriteExternalGranted(mActivity.get()))
- return;
org.alohalytics.Statistics.logEvent("$onPause", mActivity.getClass().getSimpleName());
}
public void onPostResume()
{
- if (mThemeName == null || mThemeName.equals(Config.getCurrentUiTheme()) || !Utils.isWriteExternalGranted(mActivity.get()))
+ if (mThemeName != null && mThemeName.equals(Config.getCurrentUiTheme()))
return;
// Workaround described in https://code.google.com/p/android/issues/detail?id=93731
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java b/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java
index be559b7756..d8833f9694 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmDialogFragment.java
@@ -1,28 +1,15 @@
package com.mapswithme.maps.base;
import android.os.Bundle;
-import android.support.annotation.CallSuper;
-import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.support.v4.app.DialogFragment;
-import android.view.View;
-import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.R;
import com.mapswithme.util.ThemeUtils;
-import com.mapswithme.util.Utils;
-
-import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
public class BaseMwmDialogFragment extends DialogFragment
{
- @Nullable
- private View mView;
- @Nullable
- private Bundle mSavedInstanceState;
-
protected final @StyleRes int getFullscreenTheme()
{
return (ThemeUtils.isNightTheme() ? R.style.MwmTheme_DialogFragment_Fullscreen_Night
@@ -43,20 +30,12 @@ public class BaseMwmDialogFragment extends DialogFragment
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
- mSavedInstanceState = savedInstanceState;
int style = getStyle();
int theme = getCustomTheme();
if (style != STYLE_NORMAL || theme != 0)
//noinspection WrongConstant
setStyle(style, theme);
-
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnCreate(savedInstanceState);
- }
-
- protected void safeOnCreate(@Nullable Bundle savedInstanceState)
- {
}
@Override
@@ -65,13 +44,6 @@ public class BaseMwmDialogFragment extends DialogFragment
super.onResume();
org.alohalytics.Statistics.logEvent("$onResume", getClass().getSimpleName()
+ ":" + com.mapswithme.util.UiUtils.deviceOrientationAsString(getActivity()));
-
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnResume();
- }
-
- protected void safeOnResume()
- {
}
@Override
@@ -80,58 +52,4 @@ public class BaseMwmDialogFragment extends DialogFragment
super.onPause();
org.alohalytics.Statistics.logEvent("$onPause", getClass().getSimpleName());
}
-
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
- {
- super.onViewCreated(view, savedInstanceState);
- mView = view;
- mSavedInstanceState = savedInstanceState;
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnViewCreated(view, savedInstanceState);
- }
-
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
- {
- }
-
- @CallSuper
- @Override
- public void onDestroyView()
- {
- mView = null;
- mSavedInstanceState = null;
- super.onDestroyView();
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
- {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (grantResults.length == 0)
- return;
-
- boolean isWriteGranted = false;
- for (int i = 0; i < permissions.length; ++i)
- {
- int result = grantResults[i];
- String permission = permissions[i];
- if (permission.equals(WRITE_EXTERNAL_STORAGE) && result == PERMISSION_GRANTED)
- isWriteGranted = true;
- }
-
- if (isWriteGranted)
- safeOnCreate(mSavedInstanceState);
-
- if (isWriteGranted && mView != null)
- {
- safeOnViewCreated(mView, mSavedInstanceState);
- safeOnResume();
- }
- }
-
- public BaseMwmFragmentActivity getMwmActivity()
- {
- return (BaseMwmFragmentActivity) getActivity();
- }
}
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmFragment.java b/android/src/com/mapswithme/maps/base/BaseMwmFragment.java
index 5a01b91df7..c86c4bc85f 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmFragment.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmFragment.java
@@ -1,24 +1,26 @@
package com.mapswithme.maps.base;
-import android.os.Bundle;
-import android.support.annotation.CallSuper;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import android.content.Context;
import android.support.v4.app.Fragment;
-import android.view.View;
+import android.support.v7.app.AppCompatActivity;
import com.mapswithme.maps.MwmApplication;
-import com.mapswithme.util.Utils;
-
-import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
public class BaseMwmFragment extends Fragment
{
- @Nullable
- private View mView;
- @Nullable
- private Bundle mSavedInstanceState;
+
+ @Override
+ public void onAttach(Context context)
+ {
+ super.onAttach(context);
+ if (context instanceof AppCompatActivity && !MwmApplication.get().isFrameworkInitialized())
+ {
+ ((AppCompatActivity)context).getSupportFragmentManager()
+ .beginTransaction()
+ .detach(this)
+ .commit();
+ }
+ }
@Override
public void onResume()
@@ -26,13 +28,6 @@ public class BaseMwmFragment extends Fragment
super.onResume();
org.alohalytics.Statistics.logEvent("$onResume", this.getClass().getSimpleName()
+ ":" + com.mapswithme.util.UiUtils.deviceOrientationAsString(getActivity()));
-
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnResume();
- }
-
- protected void safeOnResume()
- {
}
@Override
@@ -42,53 +37,6 @@ public class BaseMwmFragment extends Fragment
org.alohalytics.Statistics.logEvent("$onPause", this.getClass().getSimpleName());
}
- @CallSuper
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
- {
- super.onViewCreated(view, savedInstanceState);
- mView = view;
- mSavedInstanceState = savedInstanceState;
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnViewCreated(view, savedInstanceState);
- }
-
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
- {
- }
-
- @CallSuper
- @Override
- public void onDestroyView()
- {
- mView = null;
- mSavedInstanceState = null;
- super.onDestroyView();
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
- {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (grantResults.length == 0)
- return;
-
- boolean isWriteGranted = false;
- for (int i = 0; i < permissions.length; ++i)
- {
- int result = grantResults[i];
- String permission = permissions[i];
- if (permission.equals(WRITE_EXTERNAL_STORAGE) && result == PERMISSION_GRANTED)
- isWriteGranted = true;
- }
-
- if (isWriteGranted && mView != null)
- {
- safeOnViewCreated(mView, mSavedInstanceState);
- safeOnResume();
- }
- }
-
public BaseMwmFragmentActivity getMwmActivity()
{
return (BaseMwmFragmentActivity) getActivity();
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmFragmentActivity.java b/android/src/com/mapswithme/maps/base/BaseMwmFragmentActivity.java
index e73b965541..506cdffbf4 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmFragmentActivity.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmFragmentActivity.java
@@ -3,8 +3,8 @@ package com.mapswithme.maps.base;
import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
-import android.support.annotation.ColorRes;
import android.support.annotation.CallSuper;
+import android.support.annotation.ColorRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
@@ -13,41 +13,23 @@ import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
+import com.mapswithme.maps.MwmActivity;
import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.R;
+import com.mapswithme.maps.SplashActivity;
import com.mapswithme.util.Config;
-import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.util.ThemeUtils;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
-import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
-import static android.Manifest.permission.ACCESS_FINE_LOCATION;
-import static android.Manifest.permission.GET_ACCOUNTS;
-import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-
public class BaseMwmFragmentActivity extends AppCompatActivity
implements BaseActivity
{
- private static final int REQUEST_PERMISSIONS_START = 1;
- private static final int REQUEST_PERMISSIONS_RESUME = 2;
-
- private static final String[] START_PERMISSIONS = new String[]
- {
- WRITE_EXTERNAL_STORAGE,
- ACCESS_COARSE_LOCATION,
- ACCESS_FINE_LOCATION,
- GET_ACCOUNTS
- };
- private static final String[] RESUME_PERMISSIONS = new String[] {WRITE_EXTERNAL_STORAGE};
-
private final BaseActivityDelegate mBaseDelegate = new BaseActivityDelegate(this);
@Nullable
- private Bundle mSavedInstanceState;
- private boolean mRequestedFromOnCreate = false;
- private boolean mFromInstanceState = false;
+ private Bundle mSavedState;
+ private boolean mInitializationComplete = false;
@Override
public Activity get()
@@ -68,29 +50,23 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme);
}
+ @CallSuper
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
- mFromInstanceState = savedInstanceState != null;
- if (!Utils.checkPermissions(this, MwmApplication.get().isPlatformInitialized()
- ? RESUME_PERMISSIONS : START_PERMISSIONS,
- REQUEST_PERMISSIONS_START))
+ mSavedState = savedInstanceState;
+ if (!MwmApplication.get().isFrameworkInitialized()
+ || !Utils.checkPermissions(this, SplashActivity.PERMISSIONS))
{
- mRequestedFromOnCreate = true;
super.onCreate(savedInstanceState);
+ goToSplashScreen();
return;
}
+ mInitializationComplete = true;
- MwmApplication.get().initNativePlatform();
mBaseDelegate.onCreate();
-
super.onCreate(savedInstanceState);
- safeOnCreate(savedInstanceState);
- }
- @CallSuper
- protected void safeOnCreate(@Nullable Bundle savedInstanceState)
- {
setVolumeControlStream(AudioManager.STREAM_MUSIC);
final int layoutId = getContentLayoutResId();
if (layoutId != 0)
@@ -108,12 +84,18 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}
- MwmApplication.get().initNativeCore();
- MwmApplication.get().initCounters();
-
- LocationHelper.INSTANCE.init();
-
attachDefaultFragment();
+
+ safeOnCreate(savedInstanceState);
+ }
+
+ protected void safeOnCreate(@Nullable Bundle savedInstanceState)
+ {
+ }
+
+ protected boolean isInitializationComplete()
+ {
+ return mInitializationComplete;
}
@ColorRes
@@ -158,12 +140,6 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
{
super.onStart();
mBaseDelegate.onStart();
- if (MwmApplication.get().isPlatformInitialized())
- safeOnStart();
- }
-
- protected void safeOnStart()
- {
}
@Override
@@ -173,25 +149,6 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
mBaseDelegate.onStop();
}
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState)
- {
- super.onRestoreInstanceState(savedInstanceState);
- mSavedInstanceState = savedInstanceState;
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(this))
- safeOnRestoreInstanceState(savedInstanceState);
- }
-
- protected void safeOnRestoreInstanceState(@NonNull Bundle savedInstanceState)
- {
- }
-
- @Nullable
- public Bundle getSavedInstanceState()
- {
- return mSavedInstanceState;
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
@@ -203,23 +160,18 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
return super.onOptionsItemSelected(item);
}
+ @CallSuper
@Override
protected void onResume()
{
super.onResume();
- if (!mRequestedFromOnCreate && !Utils.checkPermissions(this, RESUME_PERMISSIONS,
- REQUEST_PERMISSIONS_RESUME))
+ if (!Utils.checkPermissions(this, SplashActivity.PERMISSIONS))
{
+ goToSplashScreen();
return;
}
mBaseDelegate.onResume();
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(this))
- safeOnResume();
- }
-
- protected void safeOnResume()
- {
}
@Override
@@ -229,19 +181,6 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
mBaseDelegate.onPostResume();
}
- @CallSuper
- @Override
- protected void onResumeFragments()
- {
- super.onResumeFragments();
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(this))
- safeOnResumeFragments();
- }
-
- protected void safeOnResumeFragments()
- {
- }
-
@Override
protected void onPause()
{
@@ -249,48 +188,6 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
mBaseDelegate.onPause();
}
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
- {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (grantResults.length == 0)
- return;
-
- boolean isWriteGranted = false;
- for (int i = 0; i < permissions.length; ++i)
- {
- int result = grantResults[i];
- String permission = permissions[i];
- if (permission.equals(WRITE_EXTERNAL_STORAGE) && result == PERMISSION_GRANTED)
- isWriteGranted = true;
- }
- if (isWriteGranted)
- {
- if (requestCode == REQUEST_PERMISSIONS_START)
- {
- MwmApplication.get().initNativePlatform();
- mBaseDelegate.onCreate();
- safeOnCreate(mSavedInstanceState);
- mBaseDelegate.onStart();
- if (mSavedInstanceState != null)
- safeOnRestoreInstanceState(mSavedInstanceState);
- mBaseDelegate.onResume();
- safeOnResume();
- if (!mFromInstanceState)
- safeOnResumeFragments();
- }
- else if (requestCode == REQUEST_PERMISSIONS_RESUME)
- {
- safeOnResume();
- safeOnResumeFragments();
- }
- }
- else
- {
- finish();
- }
- }
-
protected Toolbar getToolbar()
{
return (Toolbar) findViewById(R.id.toolbar);
@@ -355,4 +252,19 @@ public class BaseMwmFragmentActivity extends AppCompatActivity
{
return android.R.id.content;
}
+
+ private void goToSplashScreen()
+ {
+ Class extends Activity> type = null;
+ if (!(this instanceof MwmActivity))
+ type = getClass();
+ SplashActivity.start(this, type);
+ finish();
+ }
+
+ @Nullable
+ public Bundle getSavedInstanceState()
+ {
+ return mSavedState;
+ }
}
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmListFragment.java b/android/src/com/mapswithme/maps/base/BaseMwmListFragment.java
index 172571a922..86ed6705bf 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmListFragment.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmListFragment.java
@@ -1,10 +1,10 @@
package com.mapswithme.maps.base;
+import android.content.Context;
import android.os.Bundle;
-import android.support.annotation.CallSuper;
-import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ListFragment;
+import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
@@ -13,28 +13,22 @@ import com.mapswithme.maps.R;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
-import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-
@Deprecated
public abstract class BaseMwmListFragment extends ListFragment
{
private Toolbar mToolbar;
- @Nullable
- private View mView;
- @Nullable
- private Bundle mSavedInstanceState;
@Override
- public void onCreate(@Nullable Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnCreate(savedInstanceState);
- }
-
- protected void safeOnCreate(@Nullable Bundle savedInstanceState)
+ public void onAttach(Context context)
{
+ super.onAttach(context);
+ if (context instanceof AppCompatActivity && !MwmApplication.get().isFrameworkInitialized())
+ {
+ ((AppCompatActivity)context).getSupportFragmentManager()
+ .beginTransaction()
+ .detach(this)
+ .commit();
+ }
}
@Override
@@ -42,15 +36,6 @@ public abstract class BaseMwmListFragment extends ListFragment
{
super.onViewCreated(view, savedInstanceState);
- mView = view;
- mSavedInstanceState = savedInstanceState;
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnViewCreated(view, savedInstanceState);
- }
-
- @CallSuper
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
- {
mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
if (mToolbar != null)
{
@@ -66,33 +51,6 @@ public abstract class BaseMwmListFragment extends ListFragment
}
}
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
- {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (grantResults.length == 0)
- return;
-
- boolean isWriteGranted = false;
- for (int i = 0; i < permissions.length; ++i)
- {
- int result = grantResults[i];
- String permission = permissions[i];
- if (permission.equals(WRITE_EXTERNAL_STORAGE) && result == PERMISSION_GRANTED)
- isWriteGranted = true;
- }
-
- if (isWriteGranted)
- {
- safeOnCreate(mSavedInstanceState);
- if (mView != null)
- {
- safeOnViewCreated(mView, mSavedInstanceState);
- safeOnResume();
- }
- }
- }
-
public Toolbar getToolbar()
{
return mToolbar;
@@ -104,13 +62,6 @@ public abstract class BaseMwmListFragment extends ListFragment
super.onResume();
org.alohalytics.Statistics.logEvent("$onResume", getClass().getSimpleName() + ":" +
UiUtils.deviceOrientationAsString(getActivity()));
-
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnResume();
- }
-
- protected void safeOnResume()
- {
}
@Override
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmRecyclerFragment.java b/android/src/com/mapswithme/maps/base/BaseMwmRecyclerFragment.java
index 0438a2bb0a..5615944bed 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmRecyclerFragment.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmRecyclerFragment.java
@@ -1,11 +1,13 @@
package com.mapswithme.maps.base;
+import android.content.Context;
import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
+import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
@@ -19,9 +21,6 @@ import com.mapswithme.maps.widget.PlaceholderView;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
-import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-
public abstract class BaseMwmRecyclerFragment extends Fragment
{
private Toolbar mToolbar;
@@ -29,11 +28,6 @@ public abstract class BaseMwmRecyclerFragment extends Fragment
private RecyclerView mRecycler;
private PlaceholderView mPlaceholder;
- @Nullable
- private View mView;
- @Nullable
- private Bundle mSavedInstanceState;
-
protected abstract RecyclerView.Adapter createAdapter();
protected @LayoutRes int getLayoutRes()
@@ -47,26 +41,31 @@ public abstract class BaseMwmRecyclerFragment extends Fragment
return mRecycler != null ? mRecycler.getAdapter() : null;
}
+ @Override
+ public void onAttach(Context context)
+ {
+ super.onAttach(context);
+ if (context instanceof AppCompatActivity && !MwmApplication.get().isFrameworkInitialized())
+ {
+ ((AppCompatActivity)context).getSupportFragmentManager()
+ .beginTransaction()
+ .detach(this)
+ .commit();
+ }
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(getLayoutRes(), container, false);
}
+ @CallSuper
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
- mView = view;
- mSavedInstanceState = savedInstanceState;
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnViewCreated(view, savedInstanceState);
- }
-
- @CallSuper
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
- {
mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
if (mToolbar != null)
{
@@ -94,50 +93,6 @@ public abstract class BaseMwmRecyclerFragment extends Fragment
setupPlaceholder(mPlaceholder);
}
- @CallSuper
- @Override
- public void onDestroyView()
- {
- mView = null;
- mSavedInstanceState = null;
- super.onDestroyView();
- }
-
- @Override
- public void onActivityCreated(@Nullable Bundle savedInstanceState)
- {
- super.onActivityCreated(savedInstanceState);
- if (MwmApplication.get().isPlatformInitialized() && Utils.isWriteExternalGranted(getActivity()))
- safeOnActivityCreated(savedInstanceState);
- }
-
- protected void safeOnActivityCreated(@Nullable Bundle savedInstanceState)
- {
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
- {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (grantResults.length == 0)
- return;
-
- boolean isWriteGranted = false;
- for (int i = 0; i < permissions.length; ++i)
- {
- int result = grantResults[i];
- String permission = permissions[i];
- if (permission.equals(WRITE_EXTERNAL_STORAGE) && result == PERMISSION_GRANTED)
- isWriteGranted = true;
- }
-
- if (isWriteGranted && mView != null)
- {
- safeOnViewCreated(mView, mSavedInstanceState);
- safeOnActivityCreated(mSavedInstanceState);
- }
- }
-
public Toolbar getToolbar()
{
return mToolbar;
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java b/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java
index a2548098c8..72f27853b1 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java
@@ -1,7 +1,6 @@
package com.mapswithme.maps.base;
import android.os.Bundle;
-import android.support.annotation.CallSuper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
@@ -12,9 +11,8 @@ public class BaseMwmToolbarFragment extends BaseMwmFragment
{
protected ToolbarController mToolbarController;
- @CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
mToolbarController = onCreateToolbarController(view);
}
diff --git a/android/src/com/mapswithme/maps/base/BaseToolbarActivity.java b/android/src/com/mapswithme/maps/base/BaseToolbarActivity.java
index c295c161ea..58157b8e8c 100644
--- a/android/src/com/mapswithme/maps/base/BaseToolbarActivity.java
+++ b/android/src/com/mapswithme/maps/base/BaseToolbarActivity.java
@@ -14,20 +14,23 @@ public abstract class BaseToolbarActivity extends BaseMwmFragmentActivity
{
@CallSuper
@Override
- protected void safeOnCreate(@Nullable Bundle savedInstanceState)
+ protected void onCreate(@Nullable Bundle savedInstanceState)
{
- super.safeOnCreate(savedInstanceState);
+ super.onCreate(savedInstanceState);
Toolbar toolbar = getToolbar();
- UiUtils.extendViewWithStatusBar(toolbar);
- int title = getToolbarTitle();
- if (title == 0)
- toolbar.setTitle(getTitle());
- else
- toolbar.setTitle(title);
+ if (toolbar != null)
+ {
+ UiUtils.extendViewWithStatusBar(toolbar);
+ int title = getToolbarTitle();
+ if (title == 0)
+ toolbar.setTitle(getTitle());
+ else
+ toolbar.setTitle(title);
- UiUtils.showHomeUpButton(toolbar);
- displayToolbarAsActionBar();
+ UiUtils.showHomeUpButton(toolbar);
+ displayToolbarAsActionBar();
+ }
}
@StringRes
diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java
index b5931fa4cb..7aec8a9803 100644
--- a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java
+++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java
@@ -51,9 +51,9 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment
@CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
if (getAdapter() != null)
{
diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java
index b117183aa4..fd1cdd5f8f 100644
--- a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java
+++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java
@@ -43,8 +43,9 @@ public class BookmarksListFragment extends BaseMwmListFragment
@CallSuper
@Override
- protected void safeOnCreate(@Nullable Bundle savedInstanceState)
+ public void onCreate(@Nullable Bundle savedInstanceState)
{
+ super.onCreate(savedInstanceState);
mCategoryIndex = getArguments().getInt(ChooseBookmarkCategoryFragment.CATEGORY_ID, -1);
mCategory = BookmarkManager.INSTANCE.getCategory(mCategoryIndex);
}
@@ -57,9 +58,9 @@ public class BookmarksListFragment extends BaseMwmListFragment
@CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
initList();
setHasOptionsMenu(true);
ActionBar bar = ((AppCompatActivity) getActivity()).getSupportActionBar();
@@ -68,8 +69,9 @@ public class BookmarksListFragment extends BaseMwmListFragment
}
@Override
- protected void safeOnResume()
+ public void onResume()
{
+ super.onResume();
if (mAdapter == null)
return;
diff --git a/android/src/com/mapswithme/maps/downloader/DownloaderFragment.java b/android/src/com/mapswithme/maps/downloader/DownloaderFragment.java
index 12ff82a0d8..90a1f71792 100644
--- a/android/src/com/mapswithme/maps/downloader/DownloaderFragment.java
+++ b/android/src/com/mapswithme/maps/downloader/DownloaderFragment.java
@@ -116,9 +116,9 @@ public class DownloaderFragment extends BaseMwmRecyclerFragment
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
mSubscriberSlot = MapManager.nativeSubscribe(new MapManager.StorageCallback()
{
@Override
diff --git a/android/src/com/mapswithme/maps/editor/EditorFragment.java b/android/src/com/mapswithme/maps/editor/EditorFragment.java
index f1d6aacd73..3e9d737b0c 100644
--- a/android/src/com/mapswithme/maps/editor/EditorFragment.java
+++ b/android/src/com/mapswithme/maps/editor/EditorFragment.java
@@ -126,7 +126,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
@CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
mIsViewCreated = true;
diff --git a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java
index 11fae484d3..43c97abca0 100644
--- a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java
+++ b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java
@@ -121,9 +121,9 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
@CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
mToolbarController.findViewById(R.id.save).setOnClickListener(this);
mToolbarController.getToolbar().setNavigationOnClickListener(new View.OnClickListener()
diff --git a/android/src/com/mapswithme/maps/editor/FeatureCategoryFragment.java b/android/src/com/mapswithme/maps/editor/FeatureCategoryFragment.java
index 7153d2e801..e1ee89b7ab 100644
--- a/android/src/com/mapswithme/maps/editor/FeatureCategoryFragment.java
+++ b/android/src/com/mapswithme/maps/editor/FeatureCategoryFragment.java
@@ -34,9 +34,9 @@ public class FeatureCategoryFragment extends BaseMwmRecyclerFragment
@CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
if (getArguments() != null && getArguments().containsKey(FeatureCategoryActivity.EXTRA_FEATURE_CATEGORY))
mSelectedCategory = getArguments().getParcelable(FeatureCategoryActivity.EXTRA_FEATURE_CATEGORY);
diff --git a/android/src/com/mapswithme/maps/editor/StreetFragment.java b/android/src/com/mapswithme/maps/editor/StreetFragment.java
index c4a5addd03..7f233ebb8f 100644
--- a/android/src/com/mapswithme/maps/editor/StreetFragment.java
+++ b/android/src/com/mapswithme/maps/editor/StreetFragment.java
@@ -25,10 +25,10 @@ public class StreetFragment extends BaseMwmRecyclerFragment implements EditTextD
@CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
mSelectedString = Editor.nativeGetStreet();
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
}
@Override
diff --git a/android/src/com/mapswithme/maps/news/BaseNewsFragment.java b/android/src/com/mapswithme/maps/news/BaseNewsFragment.java
index 7b155fad2b..ff48ae8d4e 100644
--- a/android/src/com/mapswithme/maps/news/BaseNewsFragment.java
+++ b/android/src/com/mapswithme/maps/news/BaseNewsFragment.java
@@ -5,7 +5,9 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.annotation.ArrayRes;
+import android.support.annotation.CallSuper;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
@@ -39,6 +41,9 @@ public abstract class BaseNewsFragment extends BaseMwmDialogFragment
private int mPageCount;
+ @Nullable
+ private NewsDialogListener mListener;
+
abstract class Adapter extends PagerAdapter
{
private final int[] mImages;
@@ -285,18 +290,23 @@ public abstract class BaseNewsFragment extends BaseMwmDialogFragment
return res;
}
+ @CallSuper
protected void onDoneClick()
{
dismissAllowingStateLoss();
+ if (mListener != null)
+ mListener.onDialogDone();
}
@SuppressWarnings("TryWithIdenticalCatches")
static void create(@NonNull FragmentActivity activity,
- @NonNull Class extends BaseNewsFragment> clazz)
+ @NonNull Class extends BaseNewsFragment> clazz,
+ @Nullable NewsDialogListener listener)
{
try
{
final BaseNewsFragment fragment = clazz.newInstance();
+ fragment.mListener = listener;
activity.getSupportFragmentManager()
.beginTransaction()
.add(fragment, clazz.getName())
@@ -321,4 +331,9 @@ public abstract class BaseNewsFragment extends BaseMwmDialogFragment
fm.executePendingTransactions();
return true;
}
+
+ public interface NewsDialogListener
+ {
+ void onDialogDone();
+ }
}
diff --git a/android/src/com/mapswithme/maps/news/FirstStartFragment.java b/android/src/com/mapswithme/maps/news/FirstStartFragment.java
index 0de3368533..26c29cc8a4 100644
--- a/android/src/com/mapswithme/maps/news/FirstStartFragment.java
+++ b/android/src/com/mapswithme/maps/news/FirstStartFragment.java
@@ -3,13 +3,14 @@ package com.mapswithme.maps.news;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import com.mapswithme.maps.BuildConfig;
import com.mapswithme.maps.R;
import com.mapswithme.maps.location.LocationHelper;
-import com.mapswithme.util.Config;
+import com.mapswithme.util.Counters;
public class FirstStartFragment extends BaseNewsFragment
{
@@ -73,22 +74,23 @@ public class FirstStartFragment extends BaseNewsFragment
LocationHelper.INSTANCE.onExitFromFirstRun();
}
- public static boolean showOn(@NonNull FragmentActivity activity)
+ public static boolean showOn(@NonNull FragmentActivity activity,
+ @Nullable NewsDialogListener listener)
{
- if (Config.getFirstInstallVersion() < BuildConfig.VERSION_CODE)
+ if (Counters.getFirstInstallVersion() < BuildConfig.VERSION_CODE)
return false;
FragmentManager fm = activity.getSupportFragmentManager();
if (fm.isDestroyed())
return false;
- if (Config.isFirstStartDialogSeen() &&
+ if (Counters.isFirstStartDialogSeen() &&
!recreate(activity, FirstStartFragment.class))
return false;
- create(activity, FirstStartFragment.class);
+ create(activity, FirstStartFragment.class, listener);
- Config.setFirstStartDialogSeen();
+ Counters.setFirstStartDialogSeen();
return true;
}
}
diff --git a/android/src/com/mapswithme/maps/news/NewsFragment.java b/android/src/com/mapswithme/maps/news/NewsFragment.java
index 42c9d6a74b..9c33ee7281 100644
--- a/android/src/com/mapswithme/maps/news/NewsFragment.java
+++ b/android/src/com/mapswithme/maps/news/NewsFragment.java
@@ -1,6 +1,7 @@
package com.mapswithme.maps.news;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
@@ -8,8 +9,8 @@ import com.mapswithme.maps.BuildConfig;
import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.R;
import com.mapswithme.maps.downloader.UpdaterDialogFragment;
-import com.mapswithme.util.Config;
import com.mapswithme.util.concurrency.UiThread;
+import com.mapswithme.util.Counters;
public class NewsFragment extends BaseNewsFragment
{
@@ -91,22 +92,23 @@ public class NewsFragment extends BaseNewsFragment
* Displays "What's new" dialog on given {@code activity}. Or not.
* @return whether "What's new" dialog should be shown.
*/
- public static boolean showOn(@NonNull FragmentActivity activity)
+ public static boolean showOn(@NonNull FragmentActivity activity,
+ @Nullable NewsDialogListener listener)
{
- if (Config.getFirstInstallVersion() >= BuildConfig.VERSION_CODE)
+ if (Counters.getFirstInstallVersion() >= BuildConfig.VERSION_CODE)
return false;
FragmentManager fm = activity.getSupportFragmentManager();
if (fm.isDestroyed())
return false;
- if (Config.getLastWhatsNewVersion() / 10 >= BuildConfig.VERSION_CODE / 10 &&
+ if (Counters.getLastWhatsNewVersion() / 10 >= BuildConfig.VERSION_CODE / 10 &&
!recreate(activity, NewsFragment.class))
return false;
- create(activity, NewsFragment.class);
+ create(activity, NewsFragment.class, listener);
- Config.setWhatsNewShown();
+ Counters.setWhatsNewShown();
return true;
}
}
diff --git a/android/src/com/mapswithme/maps/search/SearchFragment.java b/android/src/com/mapswithme/maps/search/SearchFragment.java
index 627ab2bd6f..79e62919cc 100644
--- a/android/src/com/mapswithme/maps/search/SearchFragment.java
+++ b/android/src/com/mapswithme/maps/search/SearchFragment.java
@@ -288,9 +288,9 @@ public class SearchFragment extends BaseMwmFragment
@CallSuper
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
readArguments();
ViewGroup root = (ViewGroup) view;
@@ -390,8 +390,9 @@ public class SearchFragment extends BaseMwmFragment
}
- protected void safeOnResume()
+ public void onResume()
{
+ super.onResume();
LocationHelper.INSTANCE.addListener(mLocationListener, true);
mAppBarLayout.addOnOffsetChangedListener(mOffsetListener);
}
diff --git a/android/src/com/mapswithme/maps/search/SearchHistoryFragment.java b/android/src/com/mapswithme/maps/search/SearchHistoryFragment.java
index e9ae159e44..4f22c99985 100644
--- a/android/src/com/mapswithme/maps/search/SearchHistoryFragment.java
+++ b/android/src/com/mapswithme/maps/search/SearchHistoryFragment.java
@@ -36,9 +36,9 @@ public class SearchHistoryFragment extends BaseMwmRecyclerFragment
}
@Override
- protected void safeOnViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
- super.safeOnViewCreated(view, savedInstanceState);
+ super.onViewCreated(view, savedInstanceState);
getRecyclerView().setLayoutManager(new LinearLayoutManager(view.getContext()));
mPlaceHolder = (PlaceholderView) view.findViewById(R.id.placeholder);
mPlaceHolder.setContent(R.drawable.img_search_empty_history_light,
@@ -60,8 +60,9 @@ public class SearchHistoryFragment extends BaseMwmRecyclerFragment
@CallSuper
@Override
- protected void safeOnActivityCreated(@Nullable Bundle savedInstanceState)
+ public void onActivityCreated(@Nullable Bundle savedInstanceState)
{
+ super.onActivityCreated(savedInstanceState);
((SearchFragment) getParentFragment()).setRecyclerScrollListener(getRecyclerView());
}
}
diff --git a/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java b/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java
index 4357cf1f12..9972ebb66c 100644
--- a/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java
+++ b/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java
@@ -78,7 +78,7 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
}
@Override
- protected void safeOnViewCreated(@NonNull View view, Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, Bundle savedInstanceState)
{
final Bundle args = getArguments();
mCategoryId = args.getInt(EXTRA_CATEGORY_ID);
diff --git a/android/src/com/mapswithme/maps/widget/placepage/EditDescriptionFragment.java b/android/src/com/mapswithme/maps/widget/placepage/EditDescriptionFragment.java
index ab2e584d85..eda3ad6efb 100644
--- a/android/src/com/mapswithme/maps/widget/placepage/EditDescriptionFragment.java
+++ b/android/src/com/mapswithme/maps/widget/placepage/EditDescriptionFragment.java
@@ -50,7 +50,7 @@ public class EditDescriptionFragment extends BaseMwmDialogFragment
}
@Override
- protected void safeOnViewCreated(@NonNull View view, Bundle savedInstanceState)
+ public void onViewCreated(@NonNull View view, Bundle savedInstanceState)
{
mBookmark = getArguments().getParcelable(EXTRA_BOOKMARK);
String description = null;
diff --git a/android/src/com/mapswithme/util/Config.java b/android/src/com/mapswithme/util/Config.java
index 03f511bc8a..2b6092ddee 100644
--- a/android/src/com/mapswithme/util/Config.java
+++ b/android/src/com/mapswithme/util/Config.java
@@ -1,19 +1,11 @@
package com.mapswithme.util;
import android.support.annotation.NonNull;
-import android.support.v4.app.DialogFragment;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import com.mapswithme.maps.BuildConfig;
+import com.mapswithme.maps.MwmApplication;
public final class Config
{
- private static final String KEY_APP_FIRST_INSTALL_VERSION = "FirstInstallVersion";
- private static final String KEY_APP_LAUNCH_NUMBER = "LaunchNumber";
- private static final String KEY_APP_SESSION_NUMBER = "SessionNumber";
- private static final String KEY_APP_LAST_SESSION_TIMESTAMP = "LastSessionTimestamp";
- private static final String KEY_APP_FIRST_INSTALL_FLAVOR = "FirstInstallFlavor";
private static final String KEY_APP_STORAGE = "StoragePath";
private static final String KEY_TTS_ENABLED = "TtsEnabled";
@@ -25,13 +17,8 @@ public final class Config
private static final String KEY_PREF_STATISTICS = "StatisticsEnabled";
private static final String KEY_PREF_USE_GS = "UseGoogleServices";
- private static final String KEY_LIKES_RATED_DIALOG = "RatedDialog";
- private static final String KEY_LIKES_LAST_RATED_SESSION = "LastRatedSession";
-
private static final String KEY_MISC_DISCLAIMER_ACCEPTED = "IsDisclaimerApproved";
private static final String KEY_MISC_KITKAT_MIGRATED = "KitKatMigrationCompleted";
- private static final String KEY_MISC_NEWS_LAST_VERSION = "WhatsNewShownVersion";
- private static final String KEY_MISC_FIRST_START_DIALOG_SEEN = "FirstStartDialogSeen";
private static final String KEY_MISC_UI_THEME = "UiTheme";
private static final String KEY_MISC_UI_THEME_SETTINGS = "UiThemeSettings";
private static final String KEY_MISC_USE_MOBILE_DATA = "UseMobileData";
@@ -106,83 +93,6 @@ public final class Config
nativeSetBoolean(key, value);
}
- /**
- * Increments integer value.
- * @return Previous value before increment.
- */
- private static int increment(String key)
- {
- int res = getInt(key);
- setInt(key, res + 1);
- return res;
- }
-
- public static int getFirstInstallVersion()
- {
- return getInt(KEY_APP_FIRST_INSTALL_VERSION);
- }
-
- /**
- * Increments counter of app starts.
- * @return Previous value before increment.
- */
- private static int incrementLaunchNumber()
- {
- return increment(KEY_APP_LAUNCH_NUMBER);
- }
-
- /**
- * Session = single day, when app was started any number of times.
- */
- public static int getSessionCount()
- {
- return getInt(KEY_APP_SESSION_NUMBER);
- }
-
- private static void incrementSessionNumber()
- {
- long lastSessionTimestamp = getLong(KEY_APP_LAST_SESSION_TIMESTAMP);
- if (DateUtils.isToday(lastSessionTimestamp))
- return;
-
- setLong(KEY_APP_LAST_SESSION_TIMESTAMP, System.currentTimeMillis());
- increment(KEY_APP_SESSION_NUMBER);
- }
-
- public static void resetAppSessionCounters()
- {
- setInt(KEY_APP_LAUNCH_NUMBER, 0);
- setInt(KEY_APP_SESSION_NUMBER, 0);
- setLong(KEY_APP_LAST_SESSION_TIMESTAMP, 0L);
- setInt(KEY_LIKES_LAST_RATED_SESSION, 0);
- incrementSessionNumber();
- }
-
- public static String getInstallFlavor()
- {
- return getString(KEY_APP_FIRST_INSTALL_FLAVOR);
- }
-
- private static void updateInstallFlavor()
- {
- String installedFlavor = getInstallFlavor();
- if (TextUtils.isEmpty(installedFlavor))
- setString(KEY_APP_FIRST_INSTALL_FLAVOR, BuildConfig.FLAVOR);
- }
-
- public static void updateLaunchCounter()
- {
- if (incrementLaunchNumber() == 0)
- {
- if (getFirstInstallVersion() == 0)
- setInt(KEY_APP_FIRST_INSTALL_VERSION, BuildConfig.VERSION_CODE);
-
- updateInstallFlavor();
- }
-
- incrementSessionNumber();
- }
-
public static String getStoragePath()
{
return getString(KEY_APP_STORAGE);
@@ -235,12 +145,12 @@ public final class Config
public static boolean isStatisticsEnabled()
{
- return getBool(KEY_PREF_STATISTICS, true);
+ return MwmApplication.prefs().getBoolean(KEY_PREF_STATISTICS, true);
}
public static void setStatisticsEnabled(boolean enabled)
{
- setBool(KEY_PREF_STATISTICS, enabled);
+ MwmApplication.prefs().edit().putBoolean(KEY_PREF_STATISTICS, enabled).apply();
}
public static boolean useGoogleServices()
@@ -253,26 +163,6 @@ public final class Config
setBool(KEY_PREF_USE_GS, use);
}
- public static boolean isRatingApplied(Class extends DialogFragment> dialogFragmentClass)
- {
- return getBool(KEY_LIKES_RATED_DIALOG + dialogFragmentClass.getSimpleName());
- }
-
- public static void setRatingApplied(Class extends DialogFragment> dialogFragmentClass)
- {
- setBool(KEY_LIKES_RATED_DIALOG + dialogFragmentClass.getSimpleName());
- }
-
- public static boolean isSessionRated(int session)
- {
- return (getInt(KEY_LIKES_LAST_RATED_SESSION) >= session);
- }
-
- public static void setRatedSession(int session)
- {
- setInt(KEY_LIKES_LAST_RATED_SESSION, session);
- }
-
public static boolean isRoutingDisclaimerAccepted()
{
return getBool(KEY_MISC_DISCLAIMER_ACCEPTED);
@@ -293,26 +183,6 @@ public final class Config
setBool(KEY_MISC_KITKAT_MIGRATED);
}
- public static int getLastWhatsNewVersion()
- {
- return getInt(KEY_MISC_NEWS_LAST_VERSION);
- }
-
- public static void setWhatsNewShown()
- {
- setInt(KEY_MISC_NEWS_LAST_VERSION, BuildConfig.VERSION_CODE);
- }
-
- public static boolean isFirstStartDialogSeen()
- {
- return getBool(KEY_MISC_FIRST_START_DIALOG_SEEN);
- }
-
- public static void setFirstStartDialogSeen()
- {
- setBool(KEY_MISC_FIRST_START_DIALOG_SEEN);
- }
-
@NonNull
public static String getCurrentUiTheme()
{
diff --git a/android/src/com/mapswithme/util/Counters.java b/android/src/com/mapswithme/util/Counters.java
new file mode 100644
index 0000000000..91f8bfee34
--- /dev/null
+++ b/android/src/com/mapswithme/util/Counters.java
@@ -0,0 +1,176 @@
+package com.mapswithme.util;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.support.v7.preference.PreferenceManager;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+
+import com.mapswithme.maps.BuildConfig;
+import com.mapswithme.maps.MwmApplication;
+import com.mapswithme.maps.R;
+
+public final class Counters
+{
+ private static final String KEY_APP_LAUNCH_NUMBER = "LaunchNumber";
+ private static final String KEY_APP_FIRST_INSTALL_VERSION = "FirstInstallVersion";
+ private static final String KEY_APP_FIRST_INSTALL_FLAVOR = "FirstInstallFlavor";
+ private static final String KEY_APP_LAST_SESSION_TIMESTAMP = "LastSessionTimestamp";
+ private static final String KEY_APP_SESSION_NUMBER = "SessionNumber";
+ private static final String KEY_MISC_FIRST_START_DIALOG_SEEN = "FirstStartDialogSeen";
+ private static final String KEY_MISC_NEWS_LAST_VERSION = "WhatsNewShownVersion";
+ private static final String KEY_LIKES_LAST_RATED_SESSION = "LastRatedSession";
+
+ private static final String KEY_LIKES_RATED_DIALOG = "RatedDialog";
+
+ private Counters() {}
+
+ public static void initCounters(@NonNull Context context)
+ {
+ PreferenceManager.setDefaultValues(context, R.xml.prefs_main, false);
+ updateLaunchCounter();
+ }
+
+ public static int getFirstInstallVersion()
+ {
+ return MwmApplication.prefs().getInt(KEY_APP_FIRST_INSTALL_VERSION, 0);
+ }
+
+ public static boolean isFirstStartDialogSeen()
+ {
+ return MwmApplication.prefs().getBoolean(KEY_MISC_FIRST_START_DIALOG_SEEN, false);
+ }
+
+ public static void setFirstStartDialogSeen()
+ {
+ MwmApplication.prefs()
+ .edit()
+ .putBoolean(KEY_MISC_FIRST_START_DIALOG_SEEN, true)
+ .apply();
+ }
+
+ public static int getLastWhatsNewVersion()
+ {
+ return MwmApplication.prefs().getInt(KEY_MISC_NEWS_LAST_VERSION, 0);
+ }
+
+ public static void setWhatsNewShown()
+ {
+ MwmApplication.prefs()
+ .edit()
+ .putInt(KEY_MISC_NEWS_LAST_VERSION, BuildConfig.VERSION_CODE)
+ .apply();
+ }
+
+ public static void resetAppSessionCounters()
+ {
+ MwmApplication.prefs()
+ .edit()
+ .putInt(KEY_APP_LAUNCH_NUMBER, 0)
+ .putInt(KEY_APP_SESSION_NUMBER, 0)
+ .putLong(KEY_APP_LAST_SESSION_TIMESTAMP, 0L)
+ .putInt(KEY_LIKES_LAST_RATED_SESSION, 0)
+ .apply();
+ incrementSessionNumber();
+ }
+
+ public static boolean isSessionRated(int session)
+ {
+ return (MwmApplication.prefs().getInt(KEY_LIKES_LAST_RATED_SESSION, 0) >= session);
+ }
+
+ public static void setRatedSession(int session)
+ {
+ MwmApplication.prefs()
+ .edit()
+ .putInt(KEY_LIKES_LAST_RATED_SESSION, session)
+ .apply();
+ }
+
+ /**
+ * Session = single day, when app was started any number of times.
+ */
+ public static int getSessionCount()
+ {
+ return MwmApplication.prefs().getInt(KEY_APP_SESSION_NUMBER, 0);
+ }
+
+ public static boolean isRatingApplied(Class extends DialogFragment> dialogFragmentClass)
+ {
+ return MwmApplication.prefs()
+ .getBoolean(KEY_LIKES_RATED_DIALOG + dialogFragmentClass.getSimpleName(),
+ false);
+ }
+
+ public static void setRatingApplied(Class extends DialogFragment> dialogFragmentClass)
+ {
+ MwmApplication.prefs()
+ .edit()
+ .putBoolean(KEY_LIKES_RATED_DIALOG + dialogFragmentClass.getSimpleName(), true)
+ .apply();
+ }
+
+ public static String getInstallFlavor()
+ {
+ return MwmApplication.prefs().getString(KEY_APP_FIRST_INSTALL_FLAVOR, "");
+ }
+
+ private static void updateLaunchCounter()
+ {
+ if (incrementLaunchNumber() == 0)
+ {
+ if (getFirstInstallVersion() == 0)
+ {
+ MwmApplication.prefs()
+ .edit()
+ .putInt(KEY_APP_FIRST_INSTALL_VERSION, BuildConfig.VERSION_CODE)
+ .apply();
+ }
+
+ updateInstallFlavor();
+ }
+
+ incrementSessionNumber();
+ }
+
+ private static int incrementLaunchNumber()
+ {
+ return increment(KEY_APP_LAUNCH_NUMBER);
+ }
+
+ private static void updateInstallFlavor()
+ {
+ String installedFlavor = getInstallFlavor();
+ if (TextUtils.isEmpty(installedFlavor))
+ {
+ MwmApplication.prefs()
+ .edit()
+ .putString(KEY_APP_FIRST_INSTALL_FLAVOR, BuildConfig.FLAVOR)
+ .apply();
+ }
+ }
+
+ private static void incrementSessionNumber()
+ {
+ long lastSessionTimestamp = MwmApplication.prefs().getLong(KEY_APP_LAST_SESSION_TIMESTAMP, 0);
+ if (DateUtils.isToday(lastSessionTimestamp))
+ return;
+
+ MwmApplication.prefs()
+ .edit()
+ .putLong(KEY_APP_LAST_SESSION_TIMESTAMP, System.currentTimeMillis())
+ .apply();
+ increment(KEY_APP_SESSION_NUMBER);
+ }
+
+ private static int increment(@NonNull String key)
+ {
+ int value = MwmApplication.prefs().getInt(key, 0);
+ MwmApplication.prefs()
+ .edit()
+ .putInt(key, ++value)
+ .apply();
+ return value;
+ }
+}
diff --git a/android/src/com/mapswithme/util/MultipleTrackerReferrerReceiver.java b/android/src/com/mapswithme/util/MultipleTrackerReferrerReceiver.java
index b2ef57e552..17c62ecf33 100644
--- a/android/src/com/mapswithme/util/MultipleTrackerReferrerReceiver.java
+++ b/android/src/com/mapswithme/util/MultipleTrackerReferrerReceiver.java
@@ -16,7 +16,7 @@ public class MultipleTrackerReferrerReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
{
- MwmApplication.get().initCounters();
+ Counters.initCounters(context);
// parse & send referrer to Aloha
try
{
diff --git a/android/src/com/mapswithme/util/Utils.java b/android/src/com/mapswithme/util/Utils.java
index e06afe70da..737761dbc4 100644
--- a/android/src/com/mapswithme/util/Utils.java
+++ b/android/src/com/mapswithme/util/Utils.java
@@ -413,8 +413,7 @@ public class Utils
}
}
- public static boolean checkPermissions(@NonNull Activity activity, @NonNull String[] permissions,
- int requestCode)
+ public static boolean checkPermissions(@NonNull Activity activity, @NonNull String[] permissions)
{
if (Build.VERSION.SDK_INT >= 23)
{
@@ -425,15 +424,7 @@ public class Utils
if (!isGranted)
break;
}
- if (isGranted)
- {
- return true;
- }
- else
- {
- ActivityCompat.requestPermissions(activity, permissions, requestCode);
- return false;
- }
+ return isGranted;
}
//permission is automatically granted on sdk<23 upon installation
diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java
index e2e7bfb70d..c9448c9ad2 100644
--- a/android/src/com/mapswithme/util/statistics/Statistics.java
+++ b/android/src/com/mapswithme/util/statistics/Statistics.java
@@ -28,6 +28,7 @@ import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.maps.widget.placepage.Sponsored;
import com.mapswithme.util.Config;
import com.mapswithme.util.ConnectionState;
+import com.mapswithme.util.Counters;
import java.util.ArrayList;
import java.util.HashMap;
@@ -381,7 +382,7 @@ public enum Statistics
Config.setStatisticsEnabled(isEnabled);
// We track if user turned on/off statistics to understand data better.
- trackEvent(EventName.STATISTICS_STATUS_CHANGED + " " + Config.getInstallFlavor(),
+ trackEvent(EventName.STATISTICS_STATUS_CHANGED + " " + Counters.getInstallFlavor(),
params().add(EventParam.ENABLED, String.valueOf(isEnabled)));
}