forked from organicmaps/organicmaps
[android] Refactored obtaining system advertising info to use observers instead of waiting based on loop in ui thread
This commit is contained in:
parent
c729084d80
commit
6f607400b3
3 changed files with 93 additions and 3 deletions
android/src/com/mapswithme/maps
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package com.mapswithme.maps.analytics;
|
||||
|
||||
public interface AdvertisingObserver
|
||||
{
|
||||
void onAdvertisingInfoObtained();
|
||||
}
|
|
@ -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,11 +164,18 @@ 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()
|
||||
{
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue