Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorАлександр Зацепин <az@mapswithme.com>2019-05-15 17:58:24 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2019-05-17 18:45:59 +0300
commit6f607400b3cde96383d6980f57fe187966f61785 (patch)
tree3363dfbd6a0c768423686e9785b6388109d6445e /android
parentc729084d80646d391bb0a3a7b707590d479bb619 (diff)
[android] Refactored obtaining system advertising info to use observers instead of waiting based on loop in ui thread
Diffstat (limited to 'android')
-rw-r--r--android/src/com/mapswithme/maps/SplashActivity.java66
-rw-r--r--android/src/com/mapswithme/maps/analytics/AdvertisingObserver.java6
-rw-r--r--android/src/com/mapswithme/maps/analytics/ExternalLibrariesMediator.java24
3 files changed, 93 insertions, 3 deletions
diff --git a/android/src/com/mapswithme/maps/SplashActivity.java b/android/src/com/mapswithme/maps/SplashActivity.java
index 3ec4f8e9c7..41f4a1a2ea 100644
--- a/android/src/com/mapswithme/maps/SplashActivity.java
+++ b/android/src/com/mapswithme/maps/SplashActivity.java
@@ -14,9 +14,11 @@ import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.mapswithme.maps.ads.Banner;
+import com.mapswithme.maps.analytics.AdvertisingObserver;
import com.mapswithme.maps.analytics.ExternalLibrariesMediator;
import com.mapswithme.maps.base.BaseActivity;
import com.mapswithme.maps.base.BaseActivityDelegate;
+import com.mapswithme.maps.base.Detachable;
import com.mapswithme.maps.downloader.UpdaterDialogFragment;
import com.mapswithme.maps.editor.ViralFragment;
import com.mapswithme.maps.location.LocationHelper;
@@ -54,6 +56,7 @@ public class SplashActivity extends AppCompatActivity
private boolean mPermissionsGranted;
private boolean mNeedStoragePermission;
private boolean mCanceled;
+ private boolean mWaitForAdvertisingInfo;
@NonNull
private final Runnable mWelcomeScreenDelayedTask = new Runnable()
@@ -88,13 +91,16 @@ public class SplashActivity extends AppCompatActivity
return;
}
- ExternalLibrariesMediator mediator = ((MwmApplication) getApplicationContext()).getMediator();
+ ExternalLibrariesMediator mediator = MwmApplication.from(getApplicationContext()).getMediator();
if (!mediator.isAdvertisingInfoObtained())
{
- UiThread.runLater(mInitCoreDelayedTask, DELAY);
+ LOGGER.i(TAG, "Advertising info not obtained yet, wait...");
+ mWaitForAdvertisingInfo = true;
return;
}
+ mWaitForAdvertisingInfo = false;
+
if (!mediator.isLimitAdTrackingEnabled())
{
LOGGER.i(TAG, "Limit ad tracking disabled, sensitive tracking initialized");
@@ -134,6 +140,9 @@ public class SplashActivity extends AppCompatActivity
@NonNull
private final BaseActivityDelegate mBaseDelegate = new BaseActivityDelegate(this);
+ @NonNull
+ private final AdvertisingInfoObserver mAdvertisingObserver = new AdvertisingInfoObserver();
+
public static void start(@NonNull Context context,
@Nullable Class<? extends Activity> activityToStart,
@Nullable Intent initialIntent)
@@ -205,6 +214,10 @@ public class SplashActivity extends AppCompatActivity
{
super.onStart();
mBaseDelegate.onStart();
+ mAdvertisingObserver.attach(this);
+ ExternalLibrariesMediator mediator = MwmApplication.from(this).getMediator();
+ LOGGER.d(TAG, "Add advertising observer");
+ mediator.addAdvertisingObserver(mAdvertisingObserver);
}
@Override
@@ -261,6 +274,11 @@ public class SplashActivity extends AppCompatActivity
if (storagePermissionsDialog != null)
storagePermissionsDialog.dismiss();
+ runInitCoreTask();
+ }
+
+ private void runInitCoreTask()
+ {
UiThread.runLater(mInitCoreDelayedTask, DELAY);
}
@@ -281,6 +299,10 @@ public class SplashActivity extends AppCompatActivity
{
super.onStop();
mBaseDelegate.onStop();
+ mAdvertisingObserver.detach();
+ ExternalLibrariesMediator mediator = MwmApplication.from(this).getMediator();
+ LOGGER.d(TAG, "Remove advertising observer");
+ mediator.removeAdvertisingObserver(mAdvertisingObserver);
}
@Override
@@ -434,4 +456,44 @@ public class SplashActivity extends AppCompatActivity
throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme);
}
+
+ boolean isWaitForAdvertisingInfo()
+ {
+ return mWaitForAdvertisingInfo;
+ }
+
+ private static class AdvertisingInfoObserver implements AdvertisingObserver,
+ Detachable<SplashActivity>
+ {
+ @Nullable
+ private SplashActivity mActivity;
+
+ @Override
+ public void onAdvertisingInfoObtained()
+ {
+ LOGGER.i(TAG, "Advertising info obtained");
+ if (mActivity == null)
+ return;
+
+ if (!mActivity.isWaitForAdvertisingInfo())
+ {
+ LOGGER.i(TAG, "Advertising info not waited");
+ return;
+ }
+
+ mActivity.runInitCoreTask();
+ }
+
+ @Override
+ public void attach(@NonNull SplashActivity object)
+ {
+ mActivity = object;
+ }
+
+ @Override
+ public void detach()
+ {
+ mActivity = null;
+ }
+ }
}
diff --git a/android/src/com/mapswithme/maps/analytics/AdvertisingObserver.java b/android/src/com/mapswithme/maps/analytics/AdvertisingObserver.java
new file mode 100644
index 0000000000..d04621b394
--- /dev/null
+++ b/android/src/com/mapswithme/maps/analytics/AdvertisingObserver.java
@@ -0,0 +1,6 @@
+package com.mapswithme.maps.analytics;
+
+public interface AdvertisingObserver
+{
+ void onAdvertisingInfoObtained();
+}
diff --git a/android/src/com/mapswithme/maps/analytics/ExternalLibrariesMediator.java b/android/src/com/mapswithme/maps/analytics/ExternalLibrariesMediator.java
index e8714d6eb3..4e58ad1375 100644
--- a/android/src/com/mapswithme/maps/analytics/ExternalLibrariesMediator.java
+++ b/android/src/com/mapswithme/maps/analytics/ExternalLibrariesMediator.java
@@ -33,6 +33,8 @@ import com.my.target.common.MyTargetPrivacy;
import io.fabric.sdk.android.Fabric;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
public class ExternalLibrariesMediator
@@ -51,6 +53,8 @@ public class ExternalLibrariesMediator
private AdvertisingInfo mAdvertisingInfo;
@Nullable
private String mFirstLaunchDeepLink;
+ @NonNull
+ private List<AdvertisingObserver> mAdvertisingObservers = new ArrayList<>();
public ExternalLibrariesMediator(@NonNull Application application)
{
@@ -160,12 +164,19 @@ public class ExternalLibrariesMediator
}
@UiThread
- void setAdvertisingInfo(@NonNull AdvertisingInfo info)
+ private void setAdvertisingInfo(@NonNull AdvertisingInfo info)
{
mAdvertisingInfo = info;
}
@UiThread
+ private void notifyObservers()
+ {
+ for (AdvertisingObserver observer : mAdvertisingObservers)
+ observer.onAdvertisingInfoObtained();
+ }
+
+ @UiThread
public boolean isAdvertisingInfoObtained()
{
return mAdvertisingInfo != null;
@@ -210,6 +221,16 @@ public class ExternalLibrariesMediator
return firstLaunchDeepLink;
}
+ public void addAdvertisingObserver(@NonNull AdvertisingObserver observer)
+ {
+ mAdvertisingObservers.add(observer);
+ }
+
+ public void removeAdvertisingObserver(@NonNull AdvertisingObserver observer)
+ {
+ mAdvertisingObservers.remove(observer);
+ }
+
private class FirstLaunchDeeplinkListener implements AppsFlyerConversionListener
{
@Override
@@ -288,6 +309,7 @@ public class ExternalLibrariesMediator
{
super.onPostExecute(info);
mMediator.setAdvertisingInfo(info);
+ mMediator.notifyObservers();
}
}