forked from organicmaps/organicmaps
[android] Replaced initialization code by Initializable interface
This commit is contained in:
parent
3c37d28e3f
commit
0380e2ba0a
20 changed files with 185 additions and 115 deletions
android/src/com/mapswithme
maps
MwmActivity.javaMwmApplication.javaPurchaseOperationObservable.java
base
location
maplayer
purchase
routing
search
sound
widget/placepage
util/sharing
|
@ -519,8 +519,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
|
||||
setContentView(R.layout.activity_map);
|
||||
|
||||
mPlacePageController = PlacePageFactory.createPlacePageController(this, this, this, this);
|
||||
mPlacePageController.initialize();
|
||||
mPlacePageController = PlacePageFactory.createPlacePageController(this, this, this);
|
||||
mPlacePageController.initialize(this);
|
||||
mPlacePageController.onActivityCreated(this, savedInstanceState);
|
||||
|
||||
mChartController = new ChartController(this);
|
||||
|
@ -535,7 +535,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
mSearchController.setVisibilityListener(this);
|
||||
SearchEngine.INSTANCE.addListener(this);
|
||||
|
||||
SharingHelper.INSTANCE.initialize();
|
||||
SharingHelper.INSTANCE.initialize(null);
|
||||
|
||||
initControllersAndValidatePurchases(savedInstanceState);
|
||||
|
||||
|
|
|
@ -5,9 +5,9 @@ import android.content.Context;
|
|||
import android.content.SharedPreferences;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.multidex.MultiDex;
|
||||
|
||||
import com.appsflyer.AppsFlyerLib;
|
||||
import com.mapswithme.maps.analytics.ExternalLibrariesMediator;
|
||||
import com.mapswithme.maps.background.AppBackgroundTracker;
|
||||
|
@ -283,16 +283,16 @@ public class MwmApplication extends Application implements AppBackgroundTracker.
|
|||
MapManager.nativeSubscribe(mStorageCallbacks);
|
||||
|
||||
initNativeStrings();
|
||||
SearchEngine.INSTANCE.initialize();
|
||||
SearchEngine.INSTANCE.initialize(null);
|
||||
BookmarkManager.loadBookmarks();
|
||||
TtsPlayer.INSTANCE.init(this);
|
||||
TtsPlayer.INSTANCE.initialize(this);
|
||||
ThemeSwitcher.restart(false);
|
||||
LocationHelper.INSTANCE.initialize();
|
||||
RoutingController.get().initialize();
|
||||
TrafficManager.INSTANCE.initialize();
|
||||
SubwayManager.from(this).initialize();
|
||||
IsolinesManager.from(this).initialize();
|
||||
mPurchaseOperationObservable.initialize();
|
||||
LocationHelper.INSTANCE.initialize(null);
|
||||
RoutingController.get().initialize(null);
|
||||
TrafficManager.INSTANCE.initialize(null);
|
||||
SubwayManager.from(this).initialize(null);
|
||||
IsolinesManager.from(this).initialize(null);
|
||||
mPurchaseOperationObservable.initialize(null);
|
||||
mBackgroundTracker.addListener(this);
|
||||
mFrameworkInitialized = true;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package com.mapswithme.maps;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
import android.util.Base64;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.purchase.CoreStartTransactionObserver;
|
||||
import com.mapswithme.maps.purchase.CoreValidationObserver;
|
||||
import com.mapswithme.maps.purchase.PurchaseUtils;
|
||||
|
@ -17,7 +19,8 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
public class PurchaseOperationObservable implements Framework.PurchaseValidationListener,
|
||||
Framework.StartTransactionListener
|
||||
Framework.StartTransactionListener,
|
||||
Initializable<Void>
|
||||
{
|
||||
private static final String TAG = PurchaseOperationObservable.class.getSimpleName();
|
||||
@NonNull
|
||||
|
@ -42,7 +45,8 @@ public class PurchaseOperationObservable implements Framework.PurchaseValidation
|
|||
return application.getPurchaseOperationObservable();
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
@Override
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
mLogger = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.BILLING);
|
||||
mLogger.i(TAG, "Initializing purchase operation observable...");
|
||||
|
@ -50,6 +54,12 @@ public class PurchaseOperationObservable implements Framework.PurchaseValidation
|
|||
Framework.nativeStartPurchaseTransactionListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onValidatePurchase(int code, @NonNull String serverId, @NonNull String vendorId,
|
||||
@NonNull String encodedPurchaseData)
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package com.mapswithme.maps.base;
|
||||
|
||||
public interface Initializable
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public interface Initializable<T>
|
||||
{
|
||||
void initialize();
|
||||
void initialize(@Nullable T t);
|
||||
void destroy();
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.google.android.gms.common.ConnectionResult;
|
|||
import com.google.android.gms.common.GoogleApiAvailability;
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.bookmarks.data.FeatureId;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.routing.RoutingController;
|
||||
|
@ -21,7 +22,7 @@ import com.mapswithme.util.Utils;
|
|||
import com.mapswithme.util.log.Logger;
|
||||
import com.mapswithme.util.log.LoggerFactory;
|
||||
|
||||
public enum LocationHelper
|
||||
public enum LocationHelper implements Initializable<Void>
|
||||
{
|
||||
INSTANCE;
|
||||
|
||||
|
@ -154,8 +155,8 @@ public enum LocationHelper
|
|||
}
|
||||
};
|
||||
|
||||
@UiThread
|
||||
public void initialize()
|
||||
@Override
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
initProvider();
|
||||
LocationState.nativeSetListener(mMyPositionModeListener);
|
||||
|
@ -163,6 +164,12 @@ public enum LocationHelper
|
|||
MwmApplication.backgroundTracker().addListener(mOnTransition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
private void initProvider()
|
||||
{
|
||||
mLogger.d(TAG, "initProvider", new Throwable());
|
||||
|
|
|
@ -4,11 +4,13 @@ import android.app.Application;
|
|||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.maplayer.subway.OnIsolinesChangedListener;
|
||||
|
||||
public class IsolinesManager
|
||||
public class IsolinesManager implements Initializable<Void>
|
||||
{
|
||||
@NonNull
|
||||
private final OnIsolinesChangedListener mListener;
|
||||
|
@ -41,11 +43,18 @@ public class IsolinesManager
|
|||
setEnabled(!isEnabled());
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
@Override
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
registerListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static IsolinesManager from(@NonNull Context context)
|
||||
{
|
||||
|
|
|
@ -2,12 +2,14 @@ package com.mapswithme.maps.maplayer.subway;
|
|||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
|
||||
public class SubwayManager
|
||||
public class SubwayManager implements Initializable<Void>
|
||||
{
|
||||
@NonNull
|
||||
private final OnTransitSchemeChangedListener mSchemeChangedListener;
|
||||
|
@ -35,11 +37,18 @@ public class SubwayManager
|
|||
setEnabled(!isEnabled());
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
@Override
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
registerListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
private void registerListener()
|
||||
{
|
||||
nativeAddListener(mSchemeChangedListener);
|
||||
|
|
|
@ -2,7 +2,8 @@ package com.mapswithme.maps.maplayer.traffic;
|
|||
|
||||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.util.log.Logger;
|
||||
import com.mapswithme.util.log.LoggerFactory;
|
||||
|
||||
|
@ -10,7 +11,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
@MainThread
|
||||
public enum TrafficManager
|
||||
public enum TrafficManager implements Initializable<Void>
|
||||
{
|
||||
INSTANCE;
|
||||
private final static String TAG = TrafficManager.class.getSimpleName();
|
||||
|
@ -28,13 +29,20 @@ public enum TrafficManager
|
|||
|
||||
private boolean mInitialized = false;
|
||||
|
||||
public void initialize()
|
||||
@Override
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
mLogger.d(TAG, "Initialization of traffic manager and setting the listener for traffic state changes");
|
||||
TrafficState.nativeSetListener(mStateChangeListener);
|
||||
mInitialized = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
public void toggle()
|
||||
{
|
||||
checkInitialization();
|
||||
|
|
|
@ -2,9 +2,9 @@ package com.mapswithme.maps.purchase;
|
|||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.billingclient.api.BillingClient;
|
||||
import com.android.billingclient.api.Purchase;
|
||||
import com.android.billingclient.api.SkuDetails;
|
||||
|
@ -40,8 +40,11 @@ abstract class AbstractPurchaseController<V, B, UiCallback extends PurchaseCallb
|
|||
}
|
||||
|
||||
@Override
|
||||
public final void initialize(@NonNull Activity activity)
|
||||
public final void initialize(@Nullable Activity activity)
|
||||
{
|
||||
if (activity == null)
|
||||
throw new AssertionError("Activity must be non-null");
|
||||
|
||||
mBillingManager.initialize(activity);
|
||||
onInitialize(activity);
|
||||
}
|
||||
|
|
|
@ -36,8 +36,11 @@ public class FailedBookmarkPurchaseController implements PurchaseController<Fail
|
|||
}
|
||||
|
||||
@Override
|
||||
public void initialize(@NonNull Activity activity)
|
||||
public void initialize(@Nullable Activity activity)
|
||||
{
|
||||
if (activity == null)
|
||||
throw new AssertionError("Activity must be non-null!");
|
||||
|
||||
mBillingManager.initialize(activity);
|
||||
mValidator.addCallback(mValidationCallback);
|
||||
mBillingManager.addCallback(mBillingCallback);
|
||||
|
|
|
@ -2,28 +2,20 @@ package com.mapswithme.maps.purchase;
|
|||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.base.Savable;
|
||||
|
||||
/**
|
||||
* Provides necessary purchase functionality to the UI. Controls whole platform-specific billing
|
||||
* process. This controller has to be used only within {@link #initialize(Activity)} and {@link #destroy()}
|
||||
* process. This controller has to be used only within
|
||||
* {@link com.mapswithme.maps.base.Initializable#initialize}
|
||||
* and {@link com.mapswithme.maps.base.Initializable#destroy()}
|
||||
* interval.
|
||||
*/
|
||||
public interface PurchaseController<T> extends Savable<Bundle>
|
||||
public interface PurchaseController<T> extends Savable<Bundle>, Initializable<Activity>
|
||||
{
|
||||
/**
|
||||
* Initializes the controller.
|
||||
* @param activity the activity which controller serves.
|
||||
*/
|
||||
void initialize(@NonNull Activity activity);
|
||||
|
||||
/**
|
||||
* Destroys the controller.
|
||||
*/
|
||||
void destroy();
|
||||
|
||||
/**
|
||||
* Indicates whether the purchase flow is supported by this device or not.
|
||||
*/
|
||||
|
|
|
@ -1,27 +1,26 @@
|
|||
package com.mapswithme.maps.routing;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import androidx.annotation.DimenRes;
|
||||
import androidx.annotation.IntRange;
|
||||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.core.util.Pair;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.DimenRes;
|
||||
import androidx.annotation.IntRange;
|
||||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.util.Pair;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.bookmarks.data.FeatureId;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.downloader.MapManager;
|
||||
import com.mapswithme.maps.location.LocationHelper;
|
||||
import com.mapswithme.maps.taxi.TaxiInfo;
|
||||
import com.mapswithme.maps.taxi.TaxiInfoError;
|
||||
|
@ -44,7 +43,7 @@ import static com.mapswithme.util.statistics.Statistics.EventName.ROUTING_POINT_
|
|||
import static com.mapswithme.util.statistics.Statistics.EventName.ROUTING_POINT_REMOVE;
|
||||
|
||||
@androidx.annotation.UiThread
|
||||
public class RoutingController implements TaxiManager.TaxiListener
|
||||
public class RoutingController implements TaxiManager.TaxiListener, Initializable<Void>
|
||||
{
|
||||
private static final String TAG = RoutingController.class.getSimpleName();
|
||||
|
||||
|
@ -280,7 +279,8 @@ public class RoutingController implements TaxiManager.TaxiListener
|
|||
mContainer = container;
|
||||
}
|
||||
|
||||
public void initialize()
|
||||
@Override
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
mLastRouterType = Framework.nativeGetLastUsedRouter();
|
||||
mInvalidRoutePointsTransactionId = Framework.nativeInvalidRoutePointsTransactionId();
|
||||
|
@ -293,6 +293,12 @@ public class RoutingController implements TaxiManager.TaxiListener
|
|||
TaxiManager.INSTANCE.setTaxiListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
public void detach()
|
||||
{
|
||||
mContainer = null;
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.mapswithme.maps.search;
|
|||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.api.ParsedMwmRequest;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
|
@ -20,7 +19,7 @@ public enum SearchEngine implements NativeSearchListener,
|
|||
NativeMapSearchListener,
|
||||
NativeBookmarkSearchListener,
|
||||
NativeBookingFilterListener,
|
||||
Initializable
|
||||
Initializable<Void>
|
||||
{
|
||||
INSTANCE;
|
||||
|
||||
|
@ -252,7 +251,7 @@ public enum SearchEngine implements NativeSearchListener,
|
|||
}
|
||||
|
||||
@Override
|
||||
public void initialize()
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
nativeInit();
|
||||
}
|
||||
|
@ -260,7 +259,7 @@ public enum SearchEngine implements NativeSearchListener,
|
|||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// Do nothing.
|
||||
// No op.
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,13 +3,14 @@ package com.mapswithme.maps.sound;
|
|||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.base.MediaPlayerWrapper;
|
||||
import com.mapswithme.util.Config;
|
||||
import com.mapswithme.util.log.Logger;
|
||||
|
@ -35,7 +36,7 @@ import java.util.Locale;
|
|||
* <p>
|
||||
* If no core supported languages can be used by the system, TTS is locked down and can not be enabled and used.
|
||||
*/
|
||||
public enum TtsPlayer
|
||||
public enum TtsPlayer implements Initializable<Context>
|
||||
{
|
||||
INSTANCE;
|
||||
|
||||
|
@ -136,7 +137,8 @@ public enum TtsPlayer
|
|||
setEnabled(false);
|
||||
}
|
||||
|
||||
public void init(Context context)
|
||||
@Override
|
||||
public void initialize(@Nullable Context context)
|
||||
{
|
||||
if (mTts != null || mInitializing || mUnavailable)
|
||||
return;
|
||||
|
@ -162,6 +164,12 @@ public enum TtsPlayer
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
public boolean isSpeaking()
|
||||
{
|
||||
return mTts != null && mTts.isSpeaking();
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.mapswithme.maps.widget.placepage;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.os.Bundle;
|
||||
|
||||
|
@ -8,7 +9,7 @@ import com.mapswithme.maps.base.Initializable;
|
|||
import com.mapswithme.maps.base.Savable;
|
||||
import com.mapswithme.maps.base.Supportable;
|
||||
|
||||
public interface PlacePageController<T> extends Initializable, Savable<Bundle>,
|
||||
public interface PlacePageController<T> extends Initializable<Activity>, Savable<Bundle>,
|
||||
Application.ActivityLifecycleCallbacks,
|
||||
Supportable<T>
|
||||
{
|
||||
|
|
|
@ -13,8 +13,6 @@ import java.util.List;
|
|||
|
||||
class PlacePageControllerComposite implements PlacePageController<MapObject>
|
||||
{
|
||||
@NonNull
|
||||
private final Activity mActivity;
|
||||
@NonNull
|
||||
private final AdsRemovalPurchaseControllerProvider mAdsProvider;
|
||||
@NonNull
|
||||
|
@ -27,12 +25,10 @@ class PlacePageControllerComposite implements PlacePageController<MapObject>
|
|||
@NonNull
|
||||
private PlacePageController<MapObject> mActiveController;
|
||||
|
||||
PlacePageControllerComposite(@NonNull Activity activity,
|
||||
@NonNull AdsRemovalPurchaseControllerProvider adsProvider,
|
||||
PlacePageControllerComposite(@NonNull AdsRemovalPurchaseControllerProvider adsProvider,
|
||||
@NonNull SlideListener slideListener,
|
||||
@Nullable RoutingModeListener routingModeListener)
|
||||
{
|
||||
mActivity = activity;
|
||||
mAdsProvider = adsProvider;
|
||||
mSlideListener = slideListener;
|
||||
mRoutingModeListener = routingModeListener;
|
||||
|
@ -112,19 +108,19 @@ class PlacePageControllerComposite implements PlacePageController<MapObject>
|
|||
}
|
||||
|
||||
@Override
|
||||
public void initialize()
|
||||
public void initialize(@Nullable Activity activity)
|
||||
{
|
||||
if (!mControllers.isEmpty())
|
||||
throw new AssertionError("Place page controllers already initialized!");
|
||||
|
||||
PlacePageController<MapObject> richController =
|
||||
createRichPlacePageController(mActivity, mAdsProvider, mSlideListener, mRoutingModeListener);
|
||||
richController.initialize();
|
||||
createRichPlacePageController(mAdsProvider, mSlideListener, mRoutingModeListener);
|
||||
richController.initialize(activity);
|
||||
mControllers.add(richController);
|
||||
|
||||
PlacePageController<MapObject> simpleController =
|
||||
createSimplePlacePageController(mActivity, mSlideListener);
|
||||
simpleController.initialize();
|
||||
createSimplePlacePageController(mSlideListener);
|
||||
simpleController.initialize(activity);
|
||||
mControllers.add(simpleController);
|
||||
|
||||
mActiveController = richController;
|
||||
|
@ -136,6 +132,9 @@ class PlacePageControllerComposite implements PlacePageController<MapObject>
|
|||
if (mControllers.isEmpty())
|
||||
throw new AssertionError("Place page controllers already destroyed!");
|
||||
|
||||
for (PlacePageController<MapObject> controller: mControllers)
|
||||
controller.destroy();
|
||||
|
||||
mControllers.clear();
|
||||
}
|
||||
|
||||
|
@ -178,17 +177,17 @@ class PlacePageControllerComposite implements PlacePageController<MapObject>
|
|||
|
||||
@NonNull
|
||||
private static PlacePageController<MapObject> createRichPlacePageController(
|
||||
@NonNull Activity activity, @NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull PlacePageController.SlideListener listener,
|
||||
@Nullable RoutingModeListener routingModeListener)
|
||||
{
|
||||
return new RichPlacePageController(activity, provider, listener, routingModeListener);
|
||||
return new RichPlacePageController(provider, listener, routingModeListener);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static PlacePageController<MapObject> createSimplePlacePageController(
|
||||
@NonNull Activity activity, @NonNull PlacePageController.SlideListener listener)
|
||||
@NonNull PlacePageController.SlideListener listener)
|
||||
{
|
||||
return new SimplePlacePageController(activity, listener);
|
||||
return new SimplePlacePageController(listener);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,10 +10,10 @@ public class PlacePageFactory
|
|||
{
|
||||
@NonNull
|
||||
public static PlacePageController<MapObject> createPlacePageController(
|
||||
@NonNull Activity activity, @NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull PlacePageController.SlideListener slideListener,
|
||||
@NonNull RoutingModeListener routingModeListener)
|
||||
{
|
||||
return new PlacePageControllerComposite(activity, provider, slideListener, routingModeListener);
|
||||
return new PlacePageControllerComposite(provider, slideListener, routingModeListener);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.mapswithme.maps.Framework;
|
|||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.ads.CompoundNativeAdLoader;
|
||||
import com.mapswithme.maps.ads.DefaultAdTracker;
|
||||
import com.mapswithme.maps.ads.Factory;
|
||||
import com.mapswithme.maps.ads.MwmNativeAd;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.bookmarks.data.RoadWarningMarkType;
|
||||
|
@ -47,8 +48,6 @@ public class RichPlacePageController implements PlacePageController<MapObject>,
|
|||
private static final String TAG = RichPlacePageController.class.getSimpleName();
|
||||
private static final int ANIM_BANNER_APPEARING_MS = 300;
|
||||
private static final int ANIM_CHANGE_PEEK_HEIGHT_MS = 100;
|
||||
@NonNull
|
||||
private final Activity mActivity;
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private AnchorBottomSheetBehavior<View> mPlacePageBehavior;
|
||||
|
@ -81,8 +80,9 @@ public class RichPlacePageController implements PlacePageController<MapObject>,
|
|||
private final AdsRemovalPurchaseControllerProvider mPurchaseControllerProvider;
|
||||
@NonNull
|
||||
private final SlideListener mSlideListener;
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private final GestureDetectorCompat mGestureDetector;
|
||||
private GestureDetectorCompat mGestureDetector;
|
||||
@Nullable
|
||||
private final RoutingModeListener mRoutingModeListener;
|
||||
@NonNull
|
||||
|
@ -196,30 +196,33 @@ public class RichPlacePageController implements PlacePageController<MapObject>,
|
|||
return height - mPlacePageBehavior.getPeekHeight();
|
||||
}
|
||||
|
||||
RichPlacePageController(@NonNull Activity activity,
|
||||
@NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
RichPlacePageController(@NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull SlideListener listener,
|
||||
@Nullable RoutingModeListener routingModeListener)
|
||||
{
|
||||
mActivity = activity;
|
||||
mPurchaseControllerProvider = provider;
|
||||
mSlideListener = listener;
|
||||
mGestureDetector = new GestureDetectorCompat(activity, new PlacePageGestureListener());
|
||||
mRoutingModeListener = routingModeListener;
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
@Override
|
||||
public void initialize()
|
||||
public void initialize(@Nullable Activity activity)
|
||||
{
|
||||
Resources res = mActivity.getResources();
|
||||
if (activity == null)
|
||||
throw new AssertionError("Activity must be non-null!");
|
||||
|
||||
|
||||
mGestureDetector = new GestureDetectorCompat(activity, new PlacePageGestureListener());
|
||||
|
||||
Resources res = activity.getResources();
|
||||
mViewportMinHeight = res.getDimensionPixelSize(R.dimen.viewport_min_height);
|
||||
mOpenBannerTouchSlop = res.getDimensionPixelSize(R.dimen.placepage_banner_open_touch_slop);
|
||||
mToolbar = mActivity.findViewById(R.id.pp_toolbar);
|
||||
mToolbar = activity.findViewById(R.id.pp_toolbar);
|
||||
UiUtils.extendViewWithStatusBar(mToolbar);
|
||||
UiUtils.showHomeUpButton(mToolbar);
|
||||
mToolbar.setNavigationOnClickListener(v -> close(true));
|
||||
mPlacePage = mActivity.findViewById(R.id.placepage);
|
||||
mPlacePage = activity.findViewById(R.id.placepage);
|
||||
mPlacePageBehavior = AnchorBottomSheetBehavior.from(mPlacePage);
|
||||
mPlacePageBehavior.addBottomSheetCallback(mSheetCallback);
|
||||
mPlacePage.setOnTouchListener((v, event) -> mGestureDetector.onTouchEvent(event));
|
||||
|
@ -229,16 +232,16 @@ public class RichPlacePageController implements PlacePageController<MapObject>,
|
|||
|
||||
ViewGroup bannerContainer = mPlacePage.findViewById(R.id.banner_container);
|
||||
DefaultAdTracker tracker = new DefaultAdTracker();
|
||||
CompoundNativeAdLoader loader = com.mapswithme.maps.ads.Factory.createCompoundLoader(tracker,
|
||||
tracker);
|
||||
CompoundNativeAdLoader loader = Factory.createCompoundLoader(tracker,
|
||||
tracker);
|
||||
mBannerController = new BannerController(bannerContainer, loader, tracker,
|
||||
mPurchaseControllerProvider, this, this);
|
||||
|
||||
mButtonsLayout = mActivity.findViewById(R.id.pp_buttons_layout);
|
||||
mButtonsLayout = activity.findViewById(R.id.pp_buttons_layout);
|
||||
ViewGroup buttons = mButtonsLayout.findViewById(R.id.container);
|
||||
mPlacePage.initButtons(buttons);
|
||||
UiUtils.bringViewToFrontOf(mButtonsLayout, mPlacePage);
|
||||
UiUtils.bringViewToFrontOf(mActivity.findViewById(R.id.app_bar), mPlacePage);
|
||||
UiUtils.bringViewToFrontOf(activity.findViewById(R.id.app_bar), mPlacePage);
|
||||
mPlacePageTracker = new PlacePageTracker(mPlacePage, mButtonsLayout);
|
||||
LocationHelper.INSTANCE.addListener(this);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.mapswithme.maps.widget.placepage;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
|
@ -14,8 +15,9 @@ import com.trafi.anchorbottomsheetbehavior.AnchorBottomSheetBehavior;
|
|||
|
||||
public class SimplePlacePageController implements PlacePageController<MapObject>
|
||||
{
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private final Activity mActivity;
|
||||
private Application mApplication;
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private View mSheet;
|
||||
|
@ -40,7 +42,7 @@ public class SimplePlacePageController implements PlacePageController<MapObject>
|
|||
@Override
|
||||
public void onSheetDirectionIconChange()
|
||||
{
|
||||
if (UiUtils.isLandscape(mActivity))
|
||||
if (UiUtils.isLandscape(mApplication))
|
||||
return;
|
||||
|
||||
PlacePageUtils.setPullDrawable(mSheetBehavior, mSheet, R.id.pull_icon);
|
||||
|
@ -49,21 +51,21 @@ public class SimplePlacePageController implements PlacePageController<MapObject>
|
|||
@Override
|
||||
public void onSheetDetailsOpened()
|
||||
{
|
||||
if (UiUtils.isLandscape(mActivity))
|
||||
if (UiUtils.isLandscape(mApplication))
|
||||
PlacePageUtils.moveViewPortRight(mSheet, mViewPortMinWidth);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSheetCollapsed()
|
||||
{
|
||||
if (UiUtils.isLandscape(mActivity))
|
||||
if (UiUtils.isLandscape(mApplication))
|
||||
PlacePageUtils.moveViewPortRight(mSheet, mViewPortMinWidth);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSheetSliding(int top)
|
||||
{
|
||||
if (UiUtils.isLandscape(mActivity))
|
||||
if (UiUtils.isLandscape(mApplication))
|
||||
return;
|
||||
|
||||
mSlideListener.onPlacePageSlide(top);
|
||||
|
@ -72,7 +74,7 @@ public class SimplePlacePageController implements PlacePageController<MapObject>
|
|||
@Override
|
||||
public void onSheetSlideFinish()
|
||||
{
|
||||
if (UiUtils.isLandscape(mActivity))
|
||||
if (UiUtils.isLandscape(mApplication))
|
||||
return;
|
||||
|
||||
PlacePageUtils.moveViewportUp(mSheet, mViewportMinHeight);
|
||||
|
@ -84,10 +86,8 @@ public class SimplePlacePageController implements PlacePageController<MapObject>
|
|||
|
||||
private boolean mDeactivateMapSelection = true;
|
||||
|
||||
SimplePlacePageController(@NonNull Activity activity,
|
||||
@NonNull SlideListener slideListener)
|
||||
SimplePlacePageController(@NonNull SlideListener slideListener)
|
||||
{
|
||||
mActivity = activity;
|
||||
mSlideListener = slideListener;
|
||||
}
|
||||
|
||||
|
@ -157,9 +157,12 @@ public class SimplePlacePageController implements PlacePageController<MapObject>
|
|||
}
|
||||
|
||||
@Override
|
||||
public void initialize()
|
||||
public void initialize(@Nullable Activity activity)
|
||||
{
|
||||
mSheet = mActivity.findViewById(R.id.elevation_profile);
|
||||
if (activity == null)
|
||||
throw new AssertionError("Activity must be non-null");
|
||||
mApplication = activity.getApplication();
|
||||
mSheet = activity.findViewById(R.id.elevation_profile);
|
||||
mViewportMinHeight = mSheet.getResources().getDimensionPixelSize(R.dimen.viewport_min_height);
|
||||
mViewPortMinWidth = mSheet.getResources().getDimensionPixelSize(R.dimen.viewport_min_width);
|
||||
mSheetBehavior = AnchorBottomSheetBehavior.from(mSheet);
|
||||
|
@ -195,7 +198,7 @@ public class SimplePlacePageController implements PlacePageController<MapObject>
|
|||
return;
|
||||
|
||||
mMapObject = object;
|
||||
if (UiUtils.isLandscape(mActivity))
|
||||
if (UiUtils.isLandscape(mApplication))
|
||||
{
|
||||
// In case when bottom sheet was collapsed for vertical orientation then after rotation
|
||||
// we should expand bottom sheet forcibly for horizontal orientation. It's by design.
|
||||
|
@ -214,7 +217,7 @@ public class SimplePlacePageController implements PlacePageController<MapObject>
|
|||
if (mDeactivateMapSelection)
|
||||
Framework.nativeDeactivatePopup();
|
||||
mDeactivateMapSelection = true;
|
||||
if (UiUtils.isLandscape(mActivity))
|
||||
if (UiUtils.isLandscape(mApplication))
|
||||
{
|
||||
PlacePageUtils.moveViewPortRight(mSheet, mViewPortMinWidth);
|
||||
return;
|
||||
|
|
|
@ -8,20 +8,21 @@ import android.content.SharedPreferences;
|
|||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.cocosw.bottomsheet.BottomSheet;
|
||||
import com.google.gson.Gson;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkSharingResult;
|
||||
import com.mapswithme.util.BottomSheetHelper;
|
||||
import com.mapswithme.maps.dialog.DialogUtils;
|
||||
import com.mapswithme.util.BottomSheetHelper;
|
||||
import com.mapswithme.util.concurrency.ThreadPool;
|
||||
import com.mapswithme.util.concurrency.UiThread;
|
||||
import com.mapswithme.util.log.Logger;
|
||||
|
@ -36,7 +37,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public enum SharingHelper
|
||||
public enum SharingHelper implements Initializable<Void>
|
||||
{
|
||||
INSTANCE;
|
||||
|
||||
|
@ -53,7 +54,8 @@ public enum SharingHelper
|
|||
@Nullable
|
||||
private ProgressDialog mProgressDialog;
|
||||
|
||||
public void initialize()
|
||||
@Override
|
||||
public void initialize(@Nullable Void aVoid)
|
||||
{
|
||||
ThreadPool.getStorage().execute(
|
||||
() ->
|
||||
|
@ -70,6 +72,12 @@ public enum SharingHelper
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
// No op.
|
||||
}
|
||||
|
||||
private static SharingTarget[] parse(String json)
|
||||
{
|
||||
if (TextUtils.isEmpty(json))
|
||||
|
|
Loading…
Add table
Reference in a new issue