[android] Replaced initialization code by Initializable interface

This commit is contained in:
Александр Зацепин 2020-02-26 18:14:59 +03:00 committed by yoksnod
parent 3c37d28e3f
commit 0380e2ba0a
20 changed files with 185 additions and 115 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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)

View file

@ -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();
}

View file

@ -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());

View file

@ -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)
{

View file

@ -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);

View file

@ -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();

View file

@ -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);
}

View file

@ -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);

View file

@ -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.
*/

View file

@ -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;

View file

@ -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.
}
/**

View file

@ -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();

View file

@ -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>
{

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}

View file

@ -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;

View file

@ -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))