[android] add: Ads in downloader.

This commit is contained in:
Alexander Marchuk 2016-09-28 02:40:51 +03:00
parent a289083067
commit a6c109b3e2
7 changed files with 465 additions and 71 deletions

View file

@ -49,7 +49,7 @@ dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.8.0'
compile 'com.google.code.gson:gson:2.6.1'
compile 'com.pushwoosh:pushwoosh:4.6.3'
compile 'com.my.tracker:mytracker-sdk:1.3.2'
compile 'com.my.tracker:mytracker-sdk:1.3.5'
compile fileTree(dir: '3rd_party', include: '*.jar')
// BottomSheet
compile project(":3rd_party:BottomSheet")

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/height_item_multiline"
android:paddingLeft="@dimen/margin_base"
android:paddingRight="@dimen/margin_base"
android:background="?clickableBackground"
android:clipToPadding="false"
tools:background="#200000FF">
<Button
android:id="@+id/downloader_ad_action"
style="@style/MwmWidget.Button.Accent"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
tools:text="Install"/>
<ImageView
android:id="@+id/downloader_ad_icon"
android:layout_width="@dimen/downloader_ad_icon_size"
android:layout_height="@dimen/downloader_ad_icon_size"
android:layout_centerVertical="true"
tools:background="#8000FF00"/>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="@dimen/margin_base"
android:layout_marginRight="@dimen/margin_half"
android:layout_toRightOf="@id/downloader_ad_icon"
android:layout_toLeftOf="@id/downloader_ad_action"
android:layout_centerVertical="true"
tools:background="#20FF0000">
<TextView
android:id="@+id/downloader_ad_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/MwmTextAppearance.Body1"
android:maxLines="2"
android:ellipsize="end"
tools:text="This is the coolest advertisment ever!!!"
tools:background="#40FF0000"/>
<TextView
android:id="@+id/downloader_ad_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/MwmTextAppearance.Body4"
android:maxLines="2"
android:ellipsize="end"
tools:text="Buy me now\nCan you hear me?"
tools:background="#60FFFF00"/>
</LinearLayout>
</RelativeLayout>

View file

@ -39,6 +39,7 @@
<dimen name="place_page_buttons_height">56dp</dimen>
<dimen name="downloader_status_size">40dp</dimen>
<dimen name="downloader_ad_icon_size">@dimen/downloader_status_size</dimen>
<dimen name="search_progress_size">32dp</dimen>
<dimen name="panel_width">360dp</dimen>

View file

@ -16,7 +16,6 @@ import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
@ -87,6 +86,7 @@ import ru.mail.android.mytarget.nativeads.NativeAppwallAd;
import ru.mail.android.mytarget.nativeads.banners.NativeAppwallBanner;
import java.io.Serializable;
import java.util.List;
import java.util.Stack;
public class MwmActivity extends BaseMwmFragmentActivity
@ -956,7 +956,41 @@ public class MwmActivity extends BaseMwmFragmentActivity
@Override
public void onDismissDialog(NativeAppwallAd nativeAppwallAd) {}
};
mMytargetHelper = new MytargetHelper(listener, this);
mMytargetHelper = new MytargetHelper(new MytargetHelper.Listener<Void>()
{
private void onNoAdsInternal()
{
mMainMenu.setVisible(MainMenu.Item.SHOWCASE, false);
}
@Override
public void onNoAds()
{
onNoAdsInternal();
}
@Override
public void onDataReady(Void data)
{
mMytargetHelper.loadShowcase(new MytargetHelper.Listener<List<NativeAppwallBanner>>()
{
@Override
public void onNoAds()
{
onNoAdsInternal();
}
@Override
public void onDataReady(List<NativeAppwallBanner> banners)
{
mMainMenu.setShowcaseText(banners.get(0).getTitle());
mMainMenu.setVisible(MainMenu.Item.SHOWCASE, true);
}
}, MwmActivity.this);
}
});
}
@Override

View file

@ -15,6 +15,7 @@ public final class CountryItem implements Comparable<CountryItem>
static final int CATEGORY_NEAR_ME = 0;
static final int CATEGORY_DOWNLOADED = 1;
static final int CATEGORY_AVAILABLE = 2;
static final int CATEGORY__LAST = CATEGORY_AVAILABLE;
// Must correspond to NodeStatus in storage_defines.hpp
public static final int STATUS_UNKNOWN = 0;

View file

@ -3,9 +3,11 @@ package com.mapswithme.maps.downloader;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Typeface;
import android.location.Location;
import android.support.annotation.DrawableRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
@ -19,16 +21,10 @@ import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import com.mapswithme.maps.MwmActivity;
import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.R;
@ -37,31 +33,54 @@ import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.maps.routing.RoutingController;
import com.mapswithme.util.BottomSheetHelper;
import com.mapswithme.util.StringUtils;
import com.mapswithme.util.ThemeUtils;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.statistics.MytargetHelper;
import com.mapswithme.util.statistics.Statistics;
import com.timehop.stickyheadersrecyclerview.StickyRecyclerHeadersAdapter;
import com.timehop.stickyheadersrecyclerview.StickyRecyclerHeadersDecoration;
import ru.mail.android.mytarget.core.models.banners.AbstractBanner;
import ru.mail.android.mytarget.nativeads.banners.NativeAppwallBanner;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolder>
class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolderWrapper>
implements StickyRecyclerHeadersAdapter<DownloaderAdapter.HeaderViewHolder>
{
private static final String HEADER_ADVERTISMENT_TITLE = "MY.COM";
private static final int HEADER_ADVERTISMENT_ID = CountryItem.CATEGORY__LAST + 1;
private static final int KIND_COUNTRY = 0;
private static final int KIND_ADVERTISMENT = 1;
private final RecyclerView mRecycler;
private final Activity mActivity;
private final DownloaderFragment mFragment;
private final StickyRecyclerHeadersDecoration mHeadersDecoration;
private boolean mMyMapsMode = true;
private boolean mAdsLoaded;
private boolean mAdsLoading;
private boolean mShowAds;
private boolean mSearchResultsMode;
private String mSearchQuery;
private final List<CountryItem> mItems = new ArrayList<>();
private final Map<String, CountryItem> mCountryIndex = new HashMap<>(); // Country.id -> Country
private final List<NativeAppwallBanner> mAds = new ArrayList<>();
private final SparseArray<String> mHeaders = new SparseArray<>();
private final Stack<PathEntry> mPath = new Stack<>(); // Holds navigation history. The last element is the current level.
private int mNearMeCount;
private int mListenerSlot;
private MytargetHelper mMytargetHelper;
private enum MenuItem
{
@ -248,9 +267,9 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
for (int i = first; i <= last; i++)
{
ViewHolder vh = (ViewHolder)mRecycler.findViewHolderForAdapterPosition(i);
if (vh != null && vh.mItem.id.equals(countryId))
vh.bind(vh.mItem);
ViewHolderWrapper vh = (ViewHolderWrapper)mRecycler.findViewHolderForAdapterPosition(i);
if (vh != null && vh.mKind == KIND_COUNTRY && ((CountryItem)vh.mHolder.mItem).id.equals(countryId))
vh.mHolder.rebind();
}
}
@ -284,7 +303,59 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
}
};
class ViewHolder extends RecyclerView.ViewHolder
private View createViewHolderFrame(ViewGroup parent, int kind)
{
return inflate(parent, (kind == KIND_ADVERTISMENT ? R.layout.downloader_item_ad
: R.layout.downloader_item));
}
class ViewHolderWrapper extends RecyclerView.ViewHolder
{
private final int mKind;
private final BaseInnerViewHolder mHolder;
ViewHolderWrapper(ViewGroup parent, int kind)
{
super(createViewHolderFrame(parent, kind));
mKind = kind;
mHolder = (kind == KIND_ADVERTISMENT) ? new AdViewHolder(itemView)
: new ItemViewHolder(itemView);
}
@SuppressWarnings("unchecked")
void bind(int position)
{
int kind = DownloaderAdapter.this.getItemViewType(position);
if (kind == KIND_ADVERTISMENT)
{
mHolder.bind(mAds.get(position - mNearMeCount));
return;
}
if (position > mNearMeCount)
position -= getAdsCount();
mHolder.bind(mItems.get(position));
}
}
private static abstract class BaseInnerViewHolder<T>
{
T mItem;
void bind(T item)
{
mItem = item;
}
void rebind()
{
bind(mItem);
}
}
private class ItemViewHolder extends BaseInnerViewHolder<CountryItem>
{
private final DownloaderStatusIcon mStatusIcon;
private final TextView mName;
@ -292,8 +363,6 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
private final TextView mFoundName;
private final TextView mSize;
private CountryItem mItem;
private void processClick(boolean clickOnStatus)
{
switch (mItem.status)
@ -409,10 +478,8 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
}).tint().show();
}
public ViewHolder(View frame)
ItemViewHolder(View frame)
{
super(frame);
mStatusIcon = new DownloaderStatusIcon(frame.findViewById(R.id.downloader_status_frame))
{
@Override
@ -480,9 +547,10 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
});
}
@Override
void bind(CountryItem item)
{
mItem = item;
super.bind(item);
if (mSearchResultsMode)
{
@ -530,21 +598,84 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
}
}
class HeaderViewHolder extends RecyclerView.ViewHolder {
class HeaderViewHolder extends RecyclerView.ViewHolder
{
private final TextView mTitle;
HeaderViewHolder(View frame) {
HeaderViewHolder(View frame)
{
super(frame);
mTitle = (TextView) frame.findViewById(R.id.title);
}
void bind(int position) {
mTitle.setText(mHeaders.get(mItems.get(position).headerId));
void bind(int position)
{
if (position >= mNearMeCount && position < mNearMeCount + getAdsCount())
mTitle.setText(HEADER_ADVERTISMENT_TITLE);
else
mTitle.setText(mHeaders.get(mItems.get(position).headerId));
}
}
class AdViewHolder extends BaseInnerViewHolder<NativeAppwallBanner>
{
private final ImageView mIcon;
private final TextView mTitle;
private final TextView mSubtitle;
private final Button mAction;
private NativeAppwallBanner mData;
private final View.OnClickListener mClickListener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (mData == null)
return;
String packageId = ((AbstractBanner)mData).getBundleId();
if (mData.isAppInstalled())
{
PackageManager pm = MwmApplication.get().getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(packageId);
if (intent != null)
mActivity.startActivity(intent);
} else
mMytargetHelper.onBannerClick(mData);
}
};
AdViewHolder(View frame)
{
mIcon = (ImageView)frame.findViewById(R.id.downloader_ad_icon);
mTitle = (TextView)frame.findViewById(R.id.downloader_ad_title);
mSubtitle = (TextView)frame.findViewById(R.id.downloader_ad_subtitle);
mAction = (Button)frame.findViewById(R.id.downloader_ad_action);
UiUtils.updateAccentButton(mAction);
mAction.setOnClickListener(mClickListener);
frame.setOnClickListener(mClickListener);
}
@Override
void bind(NativeAppwallBanner item)
{
mData = item;
super.bind(item);
mIcon.setImageBitmap(item.getIcon().getBitmap());
mTitle.setText(item.getTitle());
mSubtitle.setText(item.getDescription());
// TODO: Texts?
mAction.setText(item.isAppInstalled() ? "Run" : "Install");
}
}
private void collectHeaders()
{
mNearMeCount = 0;
mHeaders.clear();
if (mSearchResultsMode)
return;
@ -562,6 +693,8 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
mHeaders.put(headerId, MwmApplication.get().getString(R.string.downloader_near_me_subtitle));
prev = ci.category;
}
mNearMeCount++;
break;
case CountryItem.CATEGORY_DOWNLOADED:
@ -575,7 +708,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
default:
int prevHeader = headerId;
headerId = CountryItem.CATEGORY_AVAILABLE + ci.name.charAt(0);
headerId = CountryItem.CATEGORY_AVAILABLE * 10 + ci.name.charAt(0);
if (headerId != prevHeader)
mHeaders.put(headerId, ci.name.substring(0, 1).toUpperCase());
@ -609,6 +742,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
MapManager.nativeListItems(parent, lat, lon, hasLocation, mMyMapsMode, mItems);
processData();
loadAds();
}
void setSearchResultsMode(Collection<CountryItem> results, String query)
@ -639,13 +773,13 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
for (CountryItem ci: mItems)
mCountryIndex.put(ci.id, ci);
mHeadersDecoration.invalidateHeaders();
notifyDataSetChanged();
if (mItems.isEmpty())
mFragment.setupPlaceholder();
mFragment.showPlaceholder(mItems.isEmpty());
mHeadersDecoration.invalidateHeaders();
notifyDataSetChanged();
}
DownloaderAdapter(DownloaderFragment fragment)
@ -657,22 +791,39 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
mRecycler.addItemDecoration(mHeadersDecoration);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
private View inflate(ViewGroup parent, @LayoutRes int layoutId)
{
return new ViewHolder(LayoutInflater.from(mActivity).inflate(R.layout.downloader_item, parent, false));
return LayoutInflater.from(mActivity).inflate(layoutId, parent, false);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position)
public int getItemViewType(int position)
{
holder.bind(mItems.get(position));
if (position < mNearMeCount)
return KIND_COUNTRY;
if (position < mNearMeCount + getAdsCount())
return KIND_ADVERTISMENT;
return KIND_COUNTRY;
}
@Override
public ViewHolderWrapper onCreateViewHolder(ViewGroup parent, int viewType)
{
return new ViewHolderWrapper(parent, viewType);
}
@Override
public void onBindViewHolder(ViewHolderWrapper holder, int position)
{
holder.bind(position);
}
@Override
public HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent)
{
return new HeaderViewHolder(LayoutInflater.from(mActivity).inflate(R.layout.downloader_item_header, parent, false));
return new HeaderViewHolder(inflate(parent, R.layout.downloader_item_header));
}
@Override
@ -684,13 +835,26 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
@Override
public long getHeaderId(int position)
{
if (position >= mNearMeCount)
{
if (position < mNearMeCount + getAdsCount())
return HEADER_ADVERTISMENT_ID;
position -= getAdsCount();
}
return mItems.get(position).headerId;
}
private int getAdsCount()
{
return (mShowAds ? mAds.size() : 0);
}
@Override
public int getItemCount()
{
return mItems.size();
return mItems.size() + getAdsCount();
}
private void goDeeper(CountryItem child, boolean refresh)
@ -776,6 +940,93 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
return mMyMapsMode;
}
/**
* Loads banner if:
* <ul>
* <li>Not in `my maps` mode;</li>
* <li>Currently at root level;</li>
* <li>Day mode is active;</li>
* <li>There is at least one map downloaded.</li>
* </ul>
*/
private void loadAds()
{
mShowAds = false;
if (mAdsLoading)
return;
if (mMyMapsMode || !CountryItem.isRoot(getCurrentRootId()))
return;
if (!ThemeUtils.isDefaultTheme())
return;
if (MapManager.nativeGetDownloadedCount() < 1)
return;
mShowAds = true;
if (mAdsLoaded)
{
mHeadersDecoration.invalidateHeaders();
notifyItemRangeInserted(mNearMeCount, mAds.size());
return;
}
mAdsLoading = true;
mMytargetHelper = new MytargetHelper(new MytargetHelper.Listener<Void>()
{
private void onNoAdsInternal()
{
mAdsLoading = false;
mAdsLoaded = true;
int oldSize = mAds.size();
mAds.clear();
if (oldSize > 0)
{
mHeadersDecoration.invalidateHeaders();
notifyItemRangeRemoved(mNearMeCount, oldSize);
}
}
@Override
public void onNoAds()
{
onNoAdsInternal();
}
@Override
public void onDataReady(Void data)
{
mMytargetHelper.loadShowcase(new MytargetHelper.Listener<List<NativeAppwallBanner>>()
{
@Override
public void onNoAds()
{
onNoAdsInternal();
}
@Override
public void onDataReady(List<NativeAppwallBanner> banners)
{
mAdsLoading = false;
mAdsLoaded = true;
int oldSize = mAds.size();
mAds.clear();
mAds.addAll(banners);
mHeadersDecoration.invalidateHeaders();
if (oldSize == 0)
notifyItemRangeInserted(mNearMeCount, mAds.size());
else
notifyDataSetChanged();
}
}, mActivity);
}
});
}
void attach()
{
mListenerSlot = MapManager.nativeSubscribe(mStorageCallback);
@ -784,6 +1035,11 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
void detach()
{
MapManager.nativeUnsubscribe(mListenerSlot);
if (mMytargetHelper != null)
mMytargetHelper.cancel();
mAdsLoading = false;
}
boolean isSearchResultsMode()

View file

@ -5,11 +5,6 @@ import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.WorkerThread;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.mapswithme.maps.MwmApplication;
import com.mapswithme.maps.PrivateVariables;
import com.mapswithme.maps.R;
@ -18,6 +13,15 @@ import com.mapswithme.util.concurrency.ThreadPool;
import com.mapswithme.util.concurrency.UiThread;
import ru.mail.android.mytarget.core.net.Hosts;
import ru.mail.android.mytarget.nativeads.NativeAppwallAd;
import ru.mail.android.mytarget.nativeads.banners.NativeAppwallBanner;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import static com.mapswithme.maps.MwmApplication.prefs;
public final class MytargetHelper
{
@ -30,23 +34,24 @@ public final class MytargetHelper
private static final int TIMEOUT = 1000;
private NativeAppwallAd mShowcase;
private Activity mActivity;
private NativeAppwallAd.AppwallAdListener mListener;
private boolean mCancelled;
public interface Listener<T>
{
void onNoAds();
void onDataReady(T data);
}
static
{
Hosts.setMyComHost();
}
public MytargetHelper(@NonNull NativeAppwallAd.AppwallAdListener listener, @NonNull Activity activity)
public MytargetHelper(final @NonNull Listener<Void> listener)
{
mListener = listener;
mActivity = activity;
if (!ConnectionState.isConnected() ||
!isShowcaseSwitchedOnLocal())
if (!ConnectionState.isConnected() || !isShowcaseSwitchedOnLocal())
{
listener.onNoAd("Switched off", null);
listener.onNoAds();
return;
}
@ -56,21 +61,22 @@ public final class MytargetHelper
public void run()
{
final boolean showShowcase = getShowcaseSetting();
if (mCancelled)
return;
UiThread.run(new Runnable()
{
@Override
public void run()
{
if (mListener == null || mActivity == null)
if (mCancelled)
return;
if (!showShowcase)
{
mListener.onNoAd("Switched off on server", null);
return;
}
loadShowcase(mListener, mActivity);
if (showShowcase)
listener.onDataReady(null);
else
listener.onNoAds();
}
});
}
@ -79,14 +85,13 @@ public final class MytargetHelper
public void cancel()
{
mListener = null;
mActivity = null;
mCancelled = true;
}
@WorkerThread
private static boolean getShowcaseSetting()
{
final long lastCheckMillis = MwmApplication.prefs().getLong(PREF_CHECK_MILLIS, 0);
final long lastCheckMillis = prefs().getLong(PREF_CHECK_MILLIS, 0);
final long currentMillis = System.currentTimeMillis();
if (currentMillis - lastCheckMillis < CHECK_INTERVAL_MILLIS)
return isShowcaseSwitchedOnServer();
@ -121,20 +126,58 @@ public final class MytargetHelper
return false;
}
private void loadShowcase(NativeAppwallAd.AppwallAdListener listener, Activity activity)
public void loadShowcase(final @NonNull Listener<List<NativeAppwallBanner>> listener, Activity activity)
{
mShowcase = new NativeAppwallAd(Integer.parseInt(PrivateVariables.myTargetSlot()), activity);
mShowcase.setListener(listener);
mShowcase.load();
if (mShowcase == null)
mShowcase = loadAds(listener, activity);
}
private NativeAppwallAd loadAds(final @NonNull Listener<List<NativeAppwallBanner>> listener, Activity activity)
{
NativeAppwallAd res = new NativeAppwallAd(PrivateVariables.myTargetSlot(), activity);
res.setListener(new NativeAppwallAd.AppwallAdListener()
{
@Override
public void onLoad(NativeAppwallAd ad)
{
if (mCancelled)
return;
if (ad.getBanners().isEmpty())
listener.onNoAds();
else
listener.onDataReady(ad.getBanners());
}
@Override
public void onNoAd(String s, NativeAppwallAd nativeAppwallAd)
{
listener.onNoAds();
}
@Override
public void onClick(NativeAppwallBanner nativeAppwallBanner, NativeAppwallAd nativeAppwallAd) {}
@Override
public void onDismissDialog(NativeAppwallAd nativeAppwallAd) {}
});
res.load();
return res;
}
public void onBannerClick(NativeAppwallBanner banner)
{
mShowcase.handleBannerClick(banner);
}
public void displayShowcase()
{
if (!mShowcase.getBanners().isEmpty())
mShowcase.handleBannerClick(mShowcase.getBanners().get(0));
onBannerClick(mShowcase.getBanners().get(0));
}
public static boolean isShowcaseSwitchedOnLocal()
private static boolean isShowcaseSwitchedOnLocal()
{
return PreferenceManager.getDefaultSharedPreferences(MwmApplication.get())
.getBoolean(MwmApplication.get().getString(R.string.pref_showcase_switched_on), false);
@ -142,12 +185,14 @@ public final class MytargetHelper
public static boolean isShowcaseSwitchedOnServer()
{
return MwmApplication.prefs().getBoolean(PREF_CHECK, false);
return prefs().getBoolean(PREF_CHECK, true);
}
private static void setShowcaseSwitchedOnServer(boolean switchedOn)
{
MwmApplication.prefs().edit().putLong(PREF_CHECK_MILLIS, System.currentTimeMillis())
.putBoolean(PREF_CHECK, switchedOn).apply();
prefs().edit()
.putLong(PREF_CHECK_MILLIS, System.currentTimeMillis())
.putBoolean(PREF_CHECK, switchedOn)
.apply();
}
}