From 34a8b5fe728a8ddf21de1377706a63abea1903f7 Mon Sep 17 00:00:00 2001 From: Dmitry Donskoy Date: Tue, 21 Jan 2020 17:23:47 +0300 Subject: [PATCH] [android] Added map layer error activation (disabled) --- android/jni/CMakeLists.txt | 1 + android/jni/com/mapswithme/maps/Framework.cpp | 5 ++ android/jni/com/mapswithme/maps/Framework.hpp | 2 + .../maps/isolines/IsolinesManager.cpp | 35 ++++++++++++++ .../com/mapswithme/maps/MwmApplication.java | 2 +- .../maplayer/AbstractMapLayerListener.java | 44 +++++++++++++++++ .../OnTransitSchemeChangedListener.java | 10 ++++ .../maplayer/isolines/IsolinesManager.java | 47 ++++++++++++------- .../IsolinesStateChangedListener.java | 20 ++++++++ .../OnTransitSchemeChangedListener.java | 31 ------------ .../maps/maplayer/subway/SubwayManager.java | 42 ++++++----------- .../subway/SubwayStateChangedListener.java | 25 ++++++++++ 12 files changed, 186 insertions(+), 78 deletions(-) create mode 100644 android/jni/com/mapswithme/maps/isolines/IsolinesManager.cpp create mode 100644 android/src/com/mapswithme/maps/maplayer/AbstractMapLayerListener.java create mode 100644 android/src/com/mapswithme/maps/maplayer/OnTransitSchemeChangedListener.java create mode 100644 android/src/com/mapswithme/maps/maplayer/isolines/IsolinesStateChangedListener.java delete mode 100644 android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java create mode 100644 android/src/com/mapswithme/maps/maplayer/subway/SubwayStateChangedListener.java diff --git a/android/jni/CMakeLists.txt b/android/jni/CMakeLists.txt index 91d056bc97..c589950371 100644 --- a/android/jni/CMakeLists.txt +++ b/android/jni/CMakeLists.txt @@ -69,6 +69,7 @@ set( com/mapswithme/maps/taxi/TaxiManager.cpp com/mapswithme/maps/TrackRecorder.cpp com/mapswithme/maps/TrafficState.cpp + com/mapswithme/maps/isolines/IsolinesManager.cpp com/mapswithme/maps/subway/SubwayManager.cpp com/mapswithme/maps/ugc/UGC.cpp com/mapswithme/maps/UserMarkHelper.cpp diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 4062613f2e..98d8bebcd6 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -609,6 +609,11 @@ void Framework::SetTransitSchemeListener(TransitReadManager::TransitStateChanged m_onTransitStateChangedFn = function; } +void Framework::SetIsolinesListener(TransitReadManager::TransitStateChangedFn const & function) +{ + m_onIsolinesStateChangedFn = function; +} + bool Framework::IsTrafficEnabled() { return m_work.GetTrafficManager().IsEnabled(); diff --git a/android/jni/com/mapswithme/maps/Framework.hpp b/android/jni/com/mapswithme/maps/Framework.hpp index 34070d2c79..a04fe79665 100644 --- a/android/jni/com/mapswithme/maps/Framework.hpp +++ b/android/jni/com/mapswithme/maps/Framework.hpp @@ -78,6 +78,7 @@ namespace android TrafficManager::TrafficStateChangedFn m_onTrafficStateChangedFn; TransitReadManager::TransitStateChangedFn m_onTransitStateChangedFn; + TransitReadManager::TransitStateChangedFn m_onIsolinesStateChangedFn; bool m_isChoosePositionMode; @@ -167,6 +168,7 @@ namespace android void SetTrafficStateListener(TrafficManager::TrafficStateChangedFn const & fn); void SetTransitSchemeListener(TransitReadManager::TransitStateChangedFn const & fn); + void SetIsolinesListener(TransitReadManager::TransitStateChangedFn const & fn); bool IsTrafficEnabled(); void EnableTraffic(); void DisableTraffic(); diff --git a/android/jni/com/mapswithme/maps/isolines/IsolinesManager.cpp b/android/jni/com/mapswithme/maps/isolines/IsolinesManager.cpp new file mode 100644 index 0000000000..71835f3a82 --- /dev/null +++ b/android/jni/com/mapswithme/maps/isolines/IsolinesManager.cpp @@ -0,0 +1,35 @@ +#include +#include +#include "com/mapswithme/core/jni_helper.hpp" +#include "com/mapswithme/platform/Platform.hpp" + +using namespace std::placeholders; + +extern "C" +{ +/*static void TransitSchemeStateChanged(TransitReadManager::TransitSchemeState state, + std::shared_ptr const & listener) +{ + JNIEnv * env = jni::GetEnv(); + env->CallVoidMethod(*listener, + jni::GetMethodID(env, *listener, "onTransitStateChanged", "(I)V"), + static_cast(state)); +}*/ + + +JNIEXPORT void JNICALL +Java_com_mapswithme_maps_maplayer_isolines_IsolinesManager_nativeAddListener(JNIEnv *env, jclass clazz, jobject listener) +{ + CHECK(g_framework, ("Framework isn't created yet!")); +/* g_framework->SetIsolinesListener(std::bind(&TransitSchemeStateChanged, + std::placeholders::_1, + jni::make_global_ref(listener)));*/ +} + +JNIEXPORT void JNICALL +Java_com_mapswithme_maps_maplayer_isolines_IsolinesManager_nativeRemoveListener(JNIEnv * env, jclass clazz) +{ + CHECK(g_framework, ("Framework isn't created yet!")); +// g_framework->SetIsolinesListener(TransitReadManager::TransitStateChangedFn()); +} +} diff --git a/android/src/com/mapswithme/maps/MwmApplication.java b/android/src/com/mapswithme/maps/MwmApplication.java index e80e3caa08..c8548cad33 100644 --- a/android/src/com/mapswithme/maps/MwmApplication.java +++ b/android/src/com/mapswithme/maps/MwmApplication.java @@ -190,7 +190,7 @@ public class MwmApplication extends Application implements AppBackgroundTracker. mBackgroundTracker = new AppBackgroundTracker(); mBackgroundTracker.addListener(mVisibleAppLaunchListener); mSubwayManager = new SubwayManager(this); - mIsolinesManager = new IsolinesManager(); + mIsolinesManager = new IsolinesManager(this); mConnectivityListener = new ConnectivityJobScheduler(this); mConnectivityListener.listen(); diff --git a/android/src/com/mapswithme/maps/maplayer/AbstractMapLayerListener.java b/android/src/com/mapswithme/maps/maplayer/AbstractMapLayerListener.java new file mode 100644 index 0000000000..11a0bcbbd5 --- /dev/null +++ b/android/src/com/mapswithme/maps/maplayer/AbstractMapLayerListener.java @@ -0,0 +1,44 @@ +package com.mapswithme.maps.maplayer; + +import androidx.annotation.NonNull; + +public abstract class AbstractMapLayerListener +{ + @NonNull + private final OnTransitSchemeChangedListener mSchemeChangedListener; + + public AbstractMapLayerListener(@NonNull OnTransitSchemeChangedListener listener) + { + mSchemeChangedListener = listener; + } + + public final void setEnabled(boolean isEnabled) + { + if (isEnabled == isEnabled()) + return; + + setEnabledInternal(isEnabled); + } + + public final void toggle() + { + setEnabled(!isEnabled()); + } + + public final void initialize() + { + registerListener(); + } + + @NonNull + protected OnTransitSchemeChangedListener getSchemeChangedListener() + { + return mSchemeChangedListener; + } + + public abstract boolean isEnabled(); + + protected abstract void setEnabledInternal(boolean isEnabled); + + protected abstract void registerListener(); +} diff --git a/android/src/com/mapswithme/maps/maplayer/OnTransitSchemeChangedListener.java b/android/src/com/mapswithme/maps/maplayer/OnTransitSchemeChangedListener.java new file mode 100644 index 0000000000..865f4ed539 --- /dev/null +++ b/android/src/com/mapswithme/maps/maplayer/OnTransitSchemeChangedListener.java @@ -0,0 +1,10 @@ +package com.mapswithme.maps.maplayer; + +import androidx.annotation.MainThread; + +public interface OnTransitSchemeChangedListener +{ + @SuppressWarnings("unused") + @MainThread + void onTransitStateChanged(int type); +} diff --git a/android/src/com/mapswithme/maps/maplayer/isolines/IsolinesManager.java b/android/src/com/mapswithme/maps/maplayer/isolines/IsolinesManager.java index 9ad930f1db..f1694e5a5e 100644 --- a/android/src/com/mapswithme/maps/maplayer/isolines/IsolinesManager.java +++ b/android/src/com/mapswithme/maps/maplayer/isolines/IsolinesManager.java @@ -1,13 +1,39 @@ package com.mapswithme.maps.maplayer.isolines; +import android.app.Application; import android.content.Context; import androidx.annotation.NonNull; import com.mapswithme.maps.Framework; import com.mapswithme.maps.MwmApplication; +import com.mapswithme.maps.maplayer.AbstractMapLayerListener; +import com.mapswithme.maps.maplayer.OnTransitSchemeChangedListener; -public class IsolinesManager +public class IsolinesManager extends AbstractMapLayerListener { + public IsolinesManager(@NonNull Application application) + { + super(new IsolinesStateChangedListener(application)); + } + + @Override + public boolean isEnabled() + { + return Framework.nativeIsIsolinesLayerEnabled(); + } + + @Override + protected void setEnabledInternal(boolean isEnabled) + { + Framework.nativeSetIsolinesLayerEnabled(isEnabled); + } + + @Override + protected void registerListener() + { + nativeAddListener(getSchemeChangedListener()); + } + @NonNull public static IsolinesManager from(@NonNull Context context) { @@ -15,21 +41,6 @@ public class IsolinesManager return app.getIsolinesManager(); } - public boolean isEnabled() - { - return Framework.nativeIsIsolinesLayerEnabled(); - } - - public void setEnabled(boolean isEnabled) - { - if (isEnabled == isEnabled()) - return; - - Framework.nativeSetIsolinesLayerEnabled(isEnabled); - } - - public void toggle() - { - setEnabled(!isEnabled()); - } + private static native void nativeAddListener(@NonNull OnTransitSchemeChangedListener listener); + private static native void nativeRemoveListener(@NonNull OnTransitSchemeChangedListener listener); } diff --git a/android/src/com/mapswithme/maps/maplayer/isolines/IsolinesStateChangedListener.java b/android/src/com/mapswithme/maps/maplayer/isolines/IsolinesStateChangedListener.java new file mode 100644 index 0000000000..1189451c82 --- /dev/null +++ b/android/src/com/mapswithme/maps/maplayer/isolines/IsolinesStateChangedListener.java @@ -0,0 +1,20 @@ +package com.mapswithme.maps.maplayer.isolines; + +import android.app.Application; + +import androidx.annotation.NonNull; +import com.mapswithme.maps.content.AbstractContextualListener; +import com.mapswithme.maps.maplayer.OnTransitSchemeChangedListener; + +class IsolinesStateChangedListener extends AbstractContextualListener implements OnTransitSchemeChangedListener +{ + IsolinesStateChangedListener(@NonNull Application app) + { + super(app); + } + + @Override + public void onTransitStateChanged(int type) + { + } +} diff --git a/android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java b/android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java deleted file mode 100644 index 4b51994761..0000000000 --- a/android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.mapswithme.maps.maplayer.subway; - -import android.app.Application; -import android.content.Context; -import androidx.annotation.MainThread; -import androidx.annotation.NonNull; - -import com.mapswithme.maps.content.AbstractContextualListener; - -interface OnTransitSchemeChangedListener -{ - @SuppressWarnings("unused") - @MainThread - void onTransitStateChanged(int type); - - class Default extends AbstractContextualListener implements OnTransitSchemeChangedListener - { - public Default(@NonNull Application context) - { - super(context); - } - - @Override - public void onTransitStateChanged(int index) - { - Context app = getContext(); - TransitSchemeState state = TransitSchemeState.values()[index]; - state.activate(app); - } - } -} diff --git a/android/src/com/mapswithme/maps/maplayer/subway/SubwayManager.java b/android/src/com/mapswithme/maps/maplayer/subway/SubwayManager.java index 40f8aa31d6..e22b144b8d 100644 --- a/android/src/com/mapswithme/maps/maplayer/subway/SubwayManager.java +++ b/android/src/com/mapswithme/maps/maplayer/subway/SubwayManager.java @@ -6,43 +6,29 @@ import androidx.annotation.NonNull; import com.mapswithme.maps.Framework; import com.mapswithme.maps.MwmApplication; +import com.mapswithme.maps.maplayer.AbstractMapLayerListener; +import com.mapswithme.maps.maplayer.OnTransitSchemeChangedListener; -public class SubwayManager +public class SubwayManager extends AbstractMapLayerListener { - @NonNull - private final OnTransitSchemeChangedListener mSchemeChangedListener; - public SubwayManager(@NonNull Application application) { - mSchemeChangedListener = new OnTransitSchemeChangedListener.Default(application); + super(new SubwayStateChangedListener(application)); } - public void setEnabled(boolean isEnabled) - { - if (isEnabled == isEnabled()) - return; + @Override + public boolean isEnabled() { + return Framework.nativeIsTransitSchemeEnabled(); + } + @Override + protected void setEnabledInternal(boolean isEnabled) { Framework.nativeSetTransitSchemeEnabled(isEnabled); Framework.nativeSaveSettingSchemeEnabled(isEnabled); } - public boolean isEnabled() - { - return Framework.nativeIsTransitSchemeEnabled(); - } - - public void toggle() - { - setEnabled(!isEnabled()); - } - - public void initialize() - { - registerListener(); - } - - private void registerListener() - { - nativeAddListener(mSchemeChangedListener); + @Override + protected void registerListener() { + nativeAddListener(getSchemeChangedListener()); } @NonNull @@ -51,7 +37,7 @@ public class SubwayManager MwmApplication app = (MwmApplication) context.getApplicationContext(); return app.getSubwayManager(); } - private static native void nativeAddListener(@NonNull OnTransitSchemeChangedListener listener); + private static native void nativeAddListener(@NonNull OnTransitSchemeChangedListener listener); private static native void nativeRemoveListener(@NonNull OnTransitSchemeChangedListener listener); } diff --git a/android/src/com/mapswithme/maps/maplayer/subway/SubwayStateChangedListener.java b/android/src/com/mapswithme/maps/maplayer/subway/SubwayStateChangedListener.java new file mode 100644 index 0000000000..3c4a963b7b --- /dev/null +++ b/android/src/com/mapswithme/maps/maplayer/subway/SubwayStateChangedListener.java @@ -0,0 +1,25 @@ +package com.mapswithme.maps.maplayer.subway; + +import android.app.Application; +import android.content.Context; + +import androidx.annotation.NonNull; + +import com.mapswithme.maps.content.AbstractContextualListener; +import com.mapswithme.maps.maplayer.OnTransitSchemeChangedListener; + +public class SubwayStateChangedListener extends AbstractContextualListener implements OnTransitSchemeChangedListener +{ + SubwayStateChangedListener(@NonNull Application context) + { + super(context); + } + + @Override + public void onTransitStateChanged(int index) + { + Context app = getContext(); + TransitSchemeState state = TransitSchemeState.values()[index]; + state.activate(app); + } +}