From f8cc9cafe5dae989a3b74916e080fece2305d872 Mon Sep 17 00:00:00 2001 From: alexzatsepin Date: Fri, 9 Dec 2016 20:44:29 +0300 Subject: [PATCH] [android] Adjusted behaviour of traffic toasts and dialogs --- .../src/com/mapswithme/maps/MwmActivity.java | 8 ++++- .../maps/routing/NavigationController.java | 6 ++-- .../maps/traffic/TrafficManager.java | 16 +++++---- .../widget/TrafficButtonController.java | 34 ++++++++++++------- 4 files changed, 40 insertions(+), 24 deletions(-) diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 8f64c8a8b0..7b9c8df85f 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -142,6 +142,8 @@ public class MwmActivity extends BaseMwmFragmentActivity private TrafficButton mTraffic; @Nullable private NavigationButtonsAnimationController mNavAnimationController; + @Nullable + private TrafficButtonController mTrafficButtonController; private View mPositionChooser; @@ -538,6 +540,7 @@ public class MwmActivity extends BaseMwmFragmentActivity mNavMyPosition = new MyPositionButton(myPosition); ImageButton traffic = (ImageButton) frame.findViewById(R.id.traffic); mTraffic = new TrafficButton(this, traffic); + mTrafficButtonController = new TrafficButtonController(mTraffic, this); mNavAnimationController = new NavigationButtonsAnimationController(zoomIn, zoomOut, myPosition); } @@ -929,7 +932,8 @@ public class MwmActivity extends BaseMwmFragmentActivity if (MapFragment.nativeIsEngineCreated()) LocationHelper.INSTANCE.attach(this); - TrafficManager.INSTANCE.attach(new TrafficButtonController(mTraffic, this)); + if (mTrafficButtonController != null) + TrafficManager.INSTANCE.attach(mTrafficButtonController); if (mNavigationController != null) TrafficManager.INSTANCE.attach(mNavigationController); } @@ -941,6 +945,8 @@ public class MwmActivity extends BaseMwmFragmentActivity LocationHelper.INSTANCE.detach(!isFinishing()); RoutingController.get().detach(); TrafficManager.INSTANCE.detachAll(); + if (mTrafficButtonController != null) + mTrafficButtonController.destroy(); } @Override diff --git a/android/src/com/mapswithme/maps/routing/NavigationController.java b/android/src/com/mapswithme/maps/routing/NavigationController.java index c401792cd3..79f14b8e58 100644 --- a/android/src/com/mapswithme/maps/routing/NavigationController.java +++ b/android/src/com/mapswithme/maps/routing/NavigationController.java @@ -349,7 +349,7 @@ public class NavigationController implements TrafficManager.TrafficCallback } @Override - public void onNoData() + public void onNoData(boolean notify) { // no op } @@ -361,13 +361,13 @@ public class NavigationController implements TrafficManager.TrafficCallback } @Override - public void onExpiredData() + public void onExpiredData(boolean notify) { // no op } @Override - public void onExpiredApp() + public void onExpiredApp(boolean notify) { // no op } diff --git a/android/src/com/mapswithme/maps/traffic/TrafficManager.java b/android/src/com/mapswithme/maps/traffic/TrafficManager.java index 90b6ecb7de..149c2ef2d9 100644 --- a/android/src/com/mapswithme/maps/traffic/TrafficManager.java +++ b/android/src/com/mapswithme/maps/traffic/TrafficManager.java @@ -2,7 +2,6 @@ package com.mapswithme.maps.traffic; import android.support.annotation.MainThread; import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.util.Log; import com.mapswithme.util.Utils; @@ -23,6 +22,8 @@ public enum TrafficManager private final TrafficState.StateChangeListener mStateChangeListener = new TrafficStateListener(); @TrafficState.Value private int mState = TrafficState.DISABLED; + @TrafficState.Value + private int mLastPostedState = mState; @NonNull private final List mCallbacks = new ArrayList<>(); private boolean mInitialized = false; @@ -137,7 +138,7 @@ public enum TrafficManager break; case TrafficState.NO_DATA: - callback.onNoData(); + callback.onNoData(mLastPostedState != mState); break; case TrafficState.OUTDATED: @@ -149,16 +150,17 @@ public enum TrafficManager break; case TrafficState.EXPIRED_DATA: - callback.onExpiredData(); + callback.onExpiredData(mLastPostedState != mState); break; case TrafficState.EXPIRED_APP: - callback.onExpiredApp(); + callback.onExpiredApp(mLastPostedState != mState); break; default: throw new IllegalArgumentException("Unsupported traffic state: " + mState); } + mLastPostedState = mState; } }); } @@ -176,9 +178,9 @@ public enum TrafficManager void onDisabled(); void onWaitingData(); void onOutdated(); - void onNoData(); void onNetworkError(); - void onExpiredData(); - void onExpiredApp(); + void onNoData(boolean notify); + void onExpiredData(boolean notify); + void onExpiredApp(boolean notify); } } diff --git a/android/src/com/mapswithme/maps/traffic/widget/TrafficButtonController.java b/android/src/com/mapswithme/maps/traffic/widget/TrafficButtonController.java index 09653bb6a0..2896361518 100644 --- a/android/src/com/mapswithme/maps/traffic/widget/TrafficButtonController.java +++ b/android/src/com/mapswithme/maps/traffic/widget/TrafficButtonController.java @@ -2,8 +2,10 @@ package com.mapswithme.maps.traffic.widget; import android.app.Activity; import android.app.AlertDialog; +import android.app.Dialog; import android.content.DialogInterface; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.view.View; import android.widget.Toast; @@ -16,7 +18,8 @@ public class TrafficButtonController implements TrafficManager.TrafficCallback private final TrafficButton mButton; @NonNull private final Activity mActivity; - private boolean mErrorDlgShown; + @Nullable + private Dialog mDialog; public TrafficButtonController(@NonNull TrafficButton button, @NonNull Activity activity) { @@ -50,16 +53,17 @@ public class TrafficButtonController implements TrafficManager.TrafficCallback } @Override - public void onNoData() + public void onNoData(boolean notify) { mButton.turnOn(); - Toast.makeText(mActivity, R.string.traffic_data_unavailable, Toast.LENGTH_SHORT).show(); + if (notify) + Toast.makeText(mActivity, R.string.traffic_data_unavailable, Toast.LENGTH_SHORT).show(); } @Override public void onNetworkError() { - if (mErrorDlgShown) + if (mDialog != null && mDialog.isShowing()) return; AlertDialog.Builder builder = new AlertDialog.Builder(mActivity) @@ -70,7 +74,6 @@ public class TrafficButtonController implements TrafficManager.TrafficCallback public void onClick(DialogInterface dialog, int which) { TrafficManager.INSTANCE.disable(); - mErrorDlgShown = false; } }) .setCancelable(true) @@ -80,26 +83,31 @@ public class TrafficButtonController implements TrafficManager.TrafficCallback public void onCancel(DialogInterface dialog) { TrafficManager.INSTANCE.disable(); - mErrorDlgShown = false; - } }); - builder.show(); - mErrorDlgShown = true; + mDialog = builder.show(); + } + + public void destroy() + { + if (mDialog != null && mDialog.isShowing()) + mDialog.cancel(); } @Override - public void onExpiredData() + public void onExpiredData(boolean notify) { mButton.turnOn(); - Toast.makeText(mActivity, R.string.traffic_update_maps_text, Toast.LENGTH_SHORT).show(); + if (notify) + Toast.makeText(mActivity, R.string.traffic_update_maps_text, Toast.LENGTH_SHORT).show(); } @Override - public void onExpiredApp() + public void onExpiredApp(boolean notify) { mButton.turnOn(); - Toast.makeText(mActivity, R.string.traffic_update_app, Toast.LENGTH_SHORT).show(); + if (notify) + Toast.makeText(mActivity, R.string.traffic_update_app, Toast.LENGTH_SHORT).show(); } private class OnTrafficClickListener implements View.OnClickListener