[android] Added isoLines error ui

This commit is contained in:
Dmitry Donskoy 2020-03-17 17:08:22 +03:00 committed by Aleksandr Zatsepin
parent d0f84e0597
commit 53d20deb95
5 changed files with 75 additions and 7 deletions

View file

@ -69,6 +69,8 @@ import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.maps.maplayer.MapLayerCompositeController;
import com.mapswithme.maps.maplayer.Mode;
import com.mapswithme.maps.maplayer.OnIsolinesLayerToggleListener;
import com.mapswithme.maps.maplayer.isolines.IsolinesManager;
import com.mapswithme.maps.maplayer.isolines.IsolinesState;
import com.mapswithme.maps.maplayer.subway.OnSubwayLayerToggleListener;
import com.mapswithme.maps.maplayer.subway.SubwayManager;
import com.mapswithme.maps.maplayer.traffic.OnTrafficLayerToggleListener;
@ -200,8 +202,10 @@ public class MwmActivity extends BaseMwmFragmentActivity
public static final int REQ_CODE_ERROR_DRIVING_OPTIONS_DIALOG = 5;
public static final int REQ_CODE_DRIVING_OPTIONS = 6;
public static final int REQ_CODE_CATALOG_UNLIMITED_ACCESS = 7;
private static final int REQ_CODE_ISOLINES_ERROR = 8;
public static final String ERROR_DRIVING_OPTIONS_DIALOG_TAG = "error_driving_options_dialog_tag";
public static final String CATALOG_UNLIMITED_ACCESS_DIALOG_TAG = "catalog_unlimited_access_dialog_tag";
private static final String ISOLINES_ERROR_DIALOG_TAG = "isolines_dialog_tag";
// Map tasks that we run AFTER rendering initialized
private final Stack<MapTask> mTasks = new Stack<>();
@ -1223,6 +1227,25 @@ public class MwmActivity extends BaseMwmFragmentActivity
mToggleMapLayerController.toggleMode(Mode.ISOLINES);
}
private void onIsolinesStateChanged(@NonNull IsolinesState type)
{
if (type != IsolinesState.EXPIREDDATA)
{
type.activate(getApplicationContext());
return;
}
com.mapswithme.maps.dialog.AlertDialog dialog = new com.mapswithme.maps.dialog.AlertDialog.Builder()
.setTitleId(R.string.title_error_downloading_bookmarks)
.setMessageId(R.string.isolines_activation_error_dialog)
.setPositiveBtnId(R.string.ok)
.setNegativeBtnId(R.string.cancel)
.setFragManagerStrategyType(com.mapswithme.maps.dialog.AlertDialog.FragManagerStrategyType.ACTIVITY_FRAGMENT_MANAGER)
.setReqCode(REQ_CODE_ISOLINES_ERROR)
.build();
dialog.show(this, ISOLINES_ERROR_DIALOG_TAG);
}
@Override
public void onImportStarted(@NonNull String serverId)
{
@ -1406,6 +1429,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
BookmarkManager.INSTANCE.addLoadingListener(this);
BookmarkManager.INSTANCE.addCatalogListener(this);
RoutingController.get().attach(this);
IsolinesManager.from(getApplicationContext()).attach(this::onIsolinesStateChanged);
if (MapFragment.nativeIsEngineCreated())
LocationHelper.INSTANCE.attach(this);
mPlacePageController.onActivityStarted(this);
@ -1423,6 +1447,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
RoutingController.get().detach();
mPlacePageController.onActivityStopped(this);
MwmApplication.backgroundTracker(getActivity()).removeListener(this);
IsolinesManager.from(getApplicationContext()).detach();
}
@CallSuper
@ -2453,6 +2478,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
BookmarksCatalogActivity.startForResult(this,
BookmarkCategoriesActivity.REQ_CODE_DOWNLOAD_BOOKMARK_CATEGORY,
BookmarkManager.INSTANCE.getCatalogFrontendUrl(UTM.UTM_NONE));
else if (requestCode == REQ_CODE_ISOLINES_ERROR)
startActivity(new Intent(this, DownloaderActivity.class));
}
@Override

View file

@ -0,0 +1,8 @@
package com.mapswithme.maps.maplayer.isolines;
import androidx.annotation.NonNull;
public interface IsolinesErrorDialogListener
{
void onStateChanged(@NonNull IsolinesState type);
}

View file

@ -7,13 +7,14 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.mapswithme.maps.Framework;
import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.base.Detachable;
import com.mapswithme.maps.base.Initializable;
import com.mapswithme.maps.maplayer.subway.OnIsolinesChangedListener;
public class IsolinesManager implements Initializable<Void>
public class IsolinesManager implements Initializable<Void>, Detachable<IsolinesErrorDialogListener>
{
@NonNull
private final OnIsolinesChangedListener mListener;
private final OnIsolinesChangedListenerImpl mListener;
public IsolinesManager(@NonNull Application application)
{
@ -64,4 +65,16 @@ public class IsolinesManager implements Initializable<Void>
private static native void nativeAddListener(@NonNull OnIsolinesChangedListener listener);
private static native void nativeRemoveListener(@NonNull OnIsolinesChangedListener listener);
@Override
public void attach(@NonNull IsolinesErrorDialogListener listener)
{
mListener.attach(listener);
}
@Override
public void detach()
{
mListener.detach();
}
}

View file

@ -13,7 +13,7 @@ public enum IsolinesState
EXPIREDDATA
{
@Override
void activate(@NonNull Context context)
public void activate(@NonNull Context context)
{
Toast.makeText(context, R.string.isolines_activation_error_dialog, Toast.LENGTH_SHORT)
.show();
@ -22,14 +22,14 @@ public enum IsolinesState
NODATA
{
@Override
void activate(@NonNull Context context)
public void activate(@NonNull Context context)
{
Toast.makeText(context, R.string.isolines_location_error_dialog, Toast.LENGTH_SHORT)
.show();
}
};
void activate(@NonNull Context context)
public void activate(@NonNull Context context)
{
/* Do nothing by default */
}

View file

@ -3,12 +3,14 @@ package com.mapswithme.maps.maplayer.isolines;
import android.app.Application;
import androidx.annotation.NonNull;
import com.mapswithme.maps.base.Detachable;
import com.mapswithme.maps.maplayer.subway.OnIsolinesChangedListener;
class OnIsolinesChangedListenerImpl implements OnIsolinesChangedListener
class OnIsolinesChangedListenerImpl implements OnIsolinesChangedListener, Detachable<IsolinesErrorDialogListener>
{
@NonNull
private final Application mApp;
private IsolinesErrorDialogListener mListener;
OnIsolinesChangedListenerImpl(@NonNull Application app)
{
@ -19,6 +21,24 @@ class OnIsolinesChangedListenerImpl implements OnIsolinesChangedListener
public void onStateChanged(int type)
{
IsolinesState state = IsolinesState.values()[type];
state.activate(mApp);
if (mListener == null)
{
state.activate(mApp);
return;
}
mListener.onStateChanged(state);
}
@Override
public void attach(@NonNull IsolinesErrorDialogListener listener)
{
mListener = listener;
}
@Override
public void detach()
{
mListener = null;
}
}