Panagiotis Triantafyllou

plugin configuration

Showing 697 changed files with 3333 additions and 1297 deletions
......@@ -43,7 +43,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':libraries:warply_android_sdk')
implementation project(':warply_android_sdk')
//Support
implementation 'androidx.appcompat:appcompat:1.4.1'
......
......@@ -5,11 +5,13 @@ buildscript {
mavenCentral()
google()
maven { url 'https://developer.huawei.com/repo/' }
maven { url 'https://plugins.gradle.org/m2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.huawei.agconnect:agcp:1.6.2.300'
classpath 'io.github.gradle-nexus:publish-plugin:1.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
......@@ -21,5 +23,9 @@ allprojects {
mavenCentral()
google()
maven { url 'https://developer.huawei.com/repo/' }
maven { url 'https://plugins.gradle.org/m2/' }
}
}
apply plugin: 'io.github.gradle-nexus.publish-plugin'
apply from: "${rootDir}/scripts/publish-root.gradle"
\ No newline at end of file
......
package ly.warp.sdk.views;
import android.content.Context;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.text.TextUtils;
import ly.warp.sdk.BuildConfig;
import ly.warp.sdk.Warply;
import ly.warp.sdk.fragments.WarpViewFragment;
import ly.warp.sdk.io.callbacks.CallbackReceiver;
import ly.warp.sdk.io.callbacks.SimpleCallbackReceiver;
import ly.warp.sdk.io.models.CampaignList;
import ly.warp.sdk.io.request.WarplyInboxRequest;
public class CampaignViewLoader implements CallbackReceiver<CampaignList> {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private DisplayBuilder mLastDisplayBuilder;
private SimpleCallbackReceiver<CampaignList> mExternalListener;
// ===========================================================
// Constructors
// ===========================================================
public CampaignViewLoader(Context context) {
Warply.getInitializer(context).init();
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onSuccess(CampaignList result) {
if (result != null && result.size() > 0) {
showWarplyFragment(mLastDisplayBuilder, result.get(0).getSessionUUID());
}
notifySuccessExternalListener(result);
}
@Override
public void onFailure(int errorCode) {
notifyFailureExternalListener(errorCode);
}
// ===========================================================
// Methods
// ===========================================================
private void requestCampaignsIfNeed(DisplayBuilder builder, WarplyInboxRequest request, String sessionUuid) {
if (request != null && TextUtils.isEmpty(sessionUuid)) {
mLastDisplayBuilder = builder;
Warply.getInbox(request, this);
} else if (!TextUtils.isEmpty(sessionUuid)) {
showWarplyFragment(builder, sessionUuid);
notifySuccessExternalListener(null);
}
}
private void showWarplyFragment(DisplayBuilder builder, String sessionUuid) {
if (builder != null && builder.fragmentManager != null) {
WarpViewFragment warpFragment = WarpViewFragment.newInstance(sessionUuid, builder.isUseProgress, builder.isShowCloseBtn);
FragmentTransaction transaction = builder.fragmentManager.beginTransaction()
.replace(builder.containerId, warpFragment,
WarpViewFragment.class.getSimpleName())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (builder.isAddToBackStack) {
transaction.addToBackStack(null);
}
try {
transaction.commit();
} catch (IllegalStateException e) {
if (BuildConfig.DEBUG) {
e.printStackTrace();
}
}
}
}
private void notifySuccessExternalListener(CampaignList campaigns) {
if (mExternalListener != null) {
mExternalListener.onSuccess(campaigns);
}
}
private void notifyFailureExternalListener(int errorCode) {
if (mExternalListener != null) {
mExternalListener.onFailure(errorCode);
}
}
// ===========================================================
// Getter & Setter
// ===========================================================
public void setCampaignsListener(SimpleCallbackReceiver<CampaignList> listener) {
this.mExternalListener = listener;
}
public DisplayBuilder DisplayBuilder() {
return new DisplayBuilder();
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
public class DisplayBuilder {
private boolean isUseProgress = false;
private boolean isShowCloseBtn = true;
private boolean isAddToBackStack = true;
private FragmentManager fragmentManager;
private int containerId;
public void display(FragmentActivity activity, WarplyInboxRequest request) {
if (activity != null && !activity.isFinishing()) {
display(activity, android.R.id.content, request);
}
}
public void display(FragmentActivity activity, int containerId, WarplyInboxRequest request) {
if (activity != null && !activity.isFinishing()) {
this.fragmentManager = activity.getSupportFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, request, null);
}
}
public void display(Fragment parentFragment, int containerId, WarplyInboxRequest request) {
if (parentFragment != null && parentFragment.getActivity() != null && !parentFragment.getActivity().isFinishing()) {
this.fragmentManager = parentFragment.getChildFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, request, null);
}
}
public void display(FragmentActivity activity, String sessionUuid) {
if (activity != null && !activity.isFinishing()) {
display(activity, android.R.id.content, sessionUuid);
}
}
public void display(FragmentActivity activity, int containerId, String sessionUuid) {
if (activity != null && !activity.isFinishing()) {
this.fragmentManager = activity.getSupportFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, null, sessionUuid);
}
}
public void display(Fragment parentFragment, int containerId, String sessionUuid) {
if (parentFragment != null && parentFragment.getActivity() != null && !parentFragment.getActivity().isFinishing()) {
this.fragmentManager = parentFragment.getChildFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, null, sessionUuid);
}
}
public DisplayBuilder setUseProgress(boolean use) {
this.isUseProgress = use;
return this;
}
public DisplayBuilder setShowCloseBtn(boolean show) {
this.isShowCloseBtn = show;
return this;
}
public DisplayBuilder setAddToBackStack(boolean add) {
this.isAddToBackStack = add;
return this;
}
}
}
package ly.warp.sdk.views.adapters.mix;
import android.os.AsyncTask;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import ly.warp.sdk.io.models.Campaign;
import ly.warp.sdk.utils.WarpUtils;
import ly.warp.sdk.utils.managers.WarplyAnalyticsManager;
/**
* Helper class that used within the {@Link CampaignsMixController}
* and allow to track native campaigns events.
* Mix adapters monitor 2 types of events: view campaign in list and click on campaign item.
*/
public class CampaignsMixTracker {
// ===========================================================
// Constants
// ===========================================================
private enum TrackEvent {
CAMPAIGN_VIEW("native_campaign_view"), CAMPAIGN_CLICK("native_campaign_click");
private String type;
TrackEvent(String type) {
this.type = type;
}
public String getTrackMessage(@NonNull Campaign campaign) {
return type + ":" + campaign.getSessionUUID();
}
}
// ===========================================================
// Fields
// ===========================================================
private CampaignsMixController mMixController;
private int mOldFirstVisibleItem = -1;
private HashSet<Integer> mVisibleCampaignIndexes;
private Set<Integer> mNewCampaignIndexes;
private Set<Integer> mUpdatedCampaignIndexes;
// ===========================================================
// Constructors
// ===========================================================
public CampaignsMixTracker(@NonNull CampaignsMixController mixController) {
mMixController = mixController;
mVisibleCampaignIndexes = new HashSet<>();
mNewCampaignIndexes = new HashSet<>();
mUpdatedCampaignIndexes = new HashSet<>();
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
/**
* call in onScroll for correct results
*
* @param firstVisiblePosition - first visible position in global adapter
* @param lastVisibleItemPosition - last visible position in global adapter
*/
public void trackCampaignsView(int firstVisiblePosition, int lastVisibleItemPosition) {
if (lastVisibleItemPosition >= firstVisiblePosition && mOldFirstVisibleItem != firstVisiblePosition) {
mOldFirstVisibleItem = firstVisiblePosition;
/*Log.i("list_view_scroll", "first: " + firstVisibleItem + " visibleCount: " + visibleItemCount +
" last: " +lastVisibleItem);*/
mNewCampaignIndexes.clear();
mUpdatedCampaignIndexes.clear();
for (int i = firstVisiblePosition; i < lastVisibleItemPosition + 1; i++) {
if (mMixController.getItemViewType(i) == mMixController.getCampaignItemViewType()) {
// if new campaign index
if (mVisibleCampaignIndexes.add(i)) {
mNewCampaignIndexes.add(i);
} else {
mUpdatedCampaignIndexes.add(i);
}
}
}
// retain only visible indexes
mVisibleCampaignIndexes.clear();
mVisibleCampaignIndexes.addAll(mUpdatedCampaignIndexes);
mVisibleCampaignIndexes.addAll(mNewCampaignIndexes);
// update new campaigns
if (mNewCampaignIndexes.size() > 0) {
new TrackCampaignsTask(mNewCampaignIndexes, TrackEvent.CAMPAIGN_VIEW).execute();
}
}
}
public void trackCampaignClick(Campaign campaign) {
if (campaign != null) {
new TrackCampaignsTask(campaign, TrackEvent.CAMPAIGN_CLICK).execute();
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
private class TrackCampaignsTask extends AsyncTask<Void, Void, Void> {
private List<Campaign> mmTrackCampaigns;
private TrackEvent mmTrackEvent;
private TrackCampaignsTask(Set<Integer> indexes, TrackEvent event) {
mmTrackEvent = event;
if (indexes != null && indexes.size() > 0) {
mmTrackCampaigns = new ArrayList<>(indexes.size());
for (int index : indexes) {
Campaign camp = mMixController.getCampaignItem(index);
if (camp != null) {
mmTrackCampaigns.add(camp);
}
}
}
}
private TrackCampaignsTask(Campaign campaign, TrackEvent event) {
mmTrackEvent = event;
if (campaign != null) {
mmTrackCampaigns = new ArrayList<>(1);
mmTrackCampaigns.add(campaign);
}
}
@Override
protected Void doInBackground(Void... params) {
if (mmTrackCampaigns != null) {
for (Campaign campaign : mmTrackCampaigns) {
WarplyAnalyticsManager.logEvent(null, mmTrackEvent.getTrackMessage(campaign), null);
WarpUtils.log("track_campaigns - " + mmTrackEvent.getTrackMessage(campaign) + " - " + campaign.getTitle());
}
}
return null;
}
}
}
package ly.warp.sdk.views.dialogs;
import android.content.Context;
import androidx.appcompat.app.AlertDialog;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import ly.warp.sdk.R;
import ly.warp.sdk.activities.WarpViewActivity;
import ly.warp.sdk.io.models.Campaign;
/**
* Created by Panagiotis Triantafyllou on 28-Mar-19.
*/
public class InAppDialog {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private static Context mContext;
private static AlertDialog mInAppDialog;
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public static void showDefaultInAppDialog(Context context, Campaign campaignToShow, boolean showViewBtn, int v) {
mContext = context;
showDefaultInAppDialog(context, campaignToShow, showViewBtn);
}
private static void showDefaultInAppDialog(final Context context, final Campaign campaignToShow, boolean showViewBtn) {
if (mInAppDialog != null && mInAppDialog.isShowing()) {
mInAppDialog.dismiss();
}
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customView = inflater.inflate(R.layout.layout_inapp_alert_dialog_default, null);
LinearLayout customButtonsView = customView.findViewById(R.id.ll_custom_buttons_view);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.RIGHT | Gravity.END;
ImageView campaignImage = customView.findViewById(R.id.iv_inapp_image);
TextView campaignTitle = customView.findViewById(R.id.tv_inapp_title);
TextView campaignSubtitle = customView.findViewById(R.id.tv_inapp_subtitle);
Glide
.with(context)
.load(campaignToShow.getLogoUrl())
.placeholder(R.drawable.ic_default_campaign)
.into(campaignImage);
campaignTitle.setText(campaignToShow.getTitle());
campaignSubtitle.setText(campaignToShow.getSubtitle());
if (showViewBtn) {
String[] items = {"View", "Close"};
TextView viewBtn = new TextView(context);
viewBtn.setId(0);
viewBtn.setTag(items[0]);
viewBtn.setText(items[0]);
viewBtn.setTextAppearance(context, R.style.InAppButtonsStyle);
viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(WarpViewActivity.createIntentFromSessionUUID(mContext,
campaignToShow.getSessionUUID()));
mInAppDialog.dismiss();
}
});
customButtonsView.addView(viewBtn, params);
// dialog.setItems(items, new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int which) {
// switch (which) {
// case 0:
// context.startActivity(WarpViewActivity.createIntentFromSessionUUID(context,
// campaignToShow.getSessionUUID()));
// break;
//
// case 1:
// break;
// }
// }
// });
mInAppDialog = new AlertDialog.Builder(context)
.setView(customView)
.create();
mInAppDialog.show();
} else {
// AlertDialog.Builder dialog = new AlertDialog.Builder(context);
// mInAppDialog.setView(customView);
// mInAppDialog.setNegativeButton("Close", new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int id) {
// }
// });
// mInAppDialog = new AlertDialog.Builder(context)
// .create();
// mInAppDialog.show();
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
package ly.warp.sdk.views.dialogs;
public interface OnClickButtonListener {
void onClickButton(int which);
}
\ No newline at end of file
package ly.warp.sdk.views.dialogs;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import java.util.Date;
public class RateDialog {
private static RateDialog singleton;
private Context context;
private final RateDialogOptions options = new RateDialogOptions();
private int installDate = -1;
private int launchTimes = -1;
private int remindInterval = 1;
private int eventsTimes = -1;
private boolean isDebug = false;
public RateDialog(Context context) {
this.context = context;
}
public static RateDialog with(Context context) {
if (singleton == null) {
synchronized (RateDialog.class) {
if (singleton == null) {
singleton = new RateDialog(context);
}
}
}
return singleton;
}
public void launch() {
if(RatePreferenceHelper.isFirstLaunch(context)) {
RatePreferenceHelper.setInstallDate(context);
}
RatePreferenceHelper.setLaunchTimes(context, RatePreferenceHelper.getLaunchTimes(context) + 1);
}
public static boolean showRateDialogIfMeetsConditions(Activity activity) {
boolean isMeetsConditions = singleton.isDebug || singleton.shouldShowRateDialog();
if (isMeetsConditions) {
singleton.showRateDialog(activity);
}
return isMeetsConditions;
}
public static boolean passSignificantEventAndConditions(Activity activity) {
return passSignificantEvent(activity, singleton.shouldShowRateDialog());
}
private static boolean passSignificantEvent(Activity activity, boolean shouldShow) {
int eventTimes = RatePreferenceHelper.getEventTimes(activity);
RatePreferenceHelper.setEventTimes(activity, ++eventTimes);
boolean isMeetsConditions = singleton.isDebug || (singleton.isOverEventTimes() && shouldShow);
if (isMeetsConditions) {
singleton.showRateDialog(activity);
}
return isMeetsConditions;
}
public RateDialog clearPreferenceSettings() {
RatePreferenceHelper.setAgreeShowDialog(context, true);
RatePreferenceHelper.clearSharedPreferences(context);
return this;
}
private static boolean isOverDate(long targetDate, int threshold) {
return new Date().getTime() - targetDate >= threshold * 24 * 60 * 60 * 1000;
}
public boolean shouldShowRateDialog() {
return RatePreferenceHelper.getIsAgreeShowDialog(context) &&
isOverLaunchTimes() &&
isOverInstallDate() &&
isOverIntervalDate();
}
public boolean isOverInstallDate() {
if(installDate == -1)
return true;
return isOverDate(RatePreferenceHelper.getInstallDate(context), installDate);
}
public boolean isOverIntervalDate() {
return isOverDate(RatePreferenceHelper.getRemindIntervalDate(context), remindInterval);
}
public boolean isOverLaunchTimes() {
if(launchTimes == -1)
return true;
return RatePreferenceHelper.getLaunchTimes(context) >= launchTimes;
}
public boolean isOverEventTimes() {
if(eventsTimes == -1)
return true;
return RatePreferenceHelper.getEventTimes(context) >= launchTimes;
}
public RateDialog setInstallDate(int installDate) {
this.installDate = installDate;
return this;
}
public RateDialog setLaunchTimes(int launchTimes) {
this.launchTimes = launchTimes;
return this;
}
public RateDialog setRemindInterval(int remindInterval) {
this.remindInterval = remindInterval;
return this;
}
public RateDialog setEventsTimes(int eventsTimes) {
this.eventsTimes = eventsTimes;
return this;
}
public RateDialog setShowNeutralButton(boolean isShowNeutralButton) {
options.setShowNeutralButton(isShowNeutralButton);
return this;
}
public RateDialog setShowTitle(boolean isShowTitle) {
options.setShowTitle(isShowTitle);
return this;
}
public RateDialog setView(View view) {
options.setView(view);
return this;
}
public RateDialog setOnClickButtonListener(OnClickButtonListener listener) {
options.setListener(listener);
return this;
}
public RateDialog setTitle(int resourceId) {
options.setTitleResId(resourceId);
return this;
}
public RateDialog setTitle(String title) {
options.setTitleText(title);
return this;
}
public RateDialog setMessage(int resourceId) {
options.setMessageResId(resourceId);
return this;
}
public RateDialog setMessage(String message) {
options.setMessageText(message);
return this;
}
public RateDialog setTextPositive(int resourceId) {
options.setTextPositiveResId(resourceId);
return this;
}
public RateDialog setTextPositive(String positiveText) {
options.setPositiveText(positiveText);
return this;
}
public RateDialog setTextNeutral(int resourceId) {
options.setTextNeutralResId(resourceId);
return this;
}
public RateDialog setTextNeutral(String neutralText) {
options.setNeutralText(neutralText);
return this;
}
public RateDialog setTextNegative(int resourceId) {
options.setTextNegativeResId(resourceId);
return this;
}
public RateDialog setTextNegative(String negativeText) {
options.setNegativeText(negativeText);
return this;
}
public RateDialog setCancelable(boolean cancelable) {
options.setCancelable(cancelable);
return this;
}
public RateDialog setPackageType(String packageType) {
options.setPackageType(packageType);
return this;
}
public RateDialog setPackageId(String packageId) {
options.setPackageId(packageId);
return this;
}
public RateDialog setDialogStyle(int style) {
options.setDialogStyleResId(style);
return this;
}
public RateDialog setIsDebug(boolean isDebug) {
this.isDebug = isDebug;
return this;
}
public void showRateDialog(Activity activity) {
if (!activity.isFinishing()) {
RateDialogManager.with(activity).create(options).show();
}
}
}
package ly.warp.sdk.views.dialogs;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import static ly.warp.sdk.utils.constants.WarpConstants.PACKAGE_TITLE_GOOGLE;
final class RateDialogManager {
private static RateDialogManager singleton;
private static Context context;
static Dialog dialog = null;
private RateDialogManager() {
}
private RateDialogManager(Context context) {
this.context = context;
}
public static RateDialogManager with(Context context) {
if (singleton == null) {
synchronized (RateDialogManager.class) {
if (singleton == null) {
singleton = new RateDialogManager(context);
}
}
}
return singleton;
}
public RateDialogManager create(final RateDialogOptions options) {
if (dialog != null)
return this;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
dialog = createDialog(context, options);
} else {
dialog = createMaterialDialog(context, options);
}
return this;
}
public void show() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
showDialog();
} else {
showMaterialDialog();
}
}
static private void showDialog() {
AlertDialog alertDialog = (AlertDialog) dialog;
alertDialog.show();
try {
final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
LinearLayout linearLayout = (LinearLayout) button.getParent();
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
} catch (Exception ex) {
}
}
static private void showMaterialDialog() {
androidx.appcompat.app.AlertDialog alertDialog = (androidx.appcompat.app.AlertDialog) dialog;
alertDialog.show();
try {
final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
LinearLayout linearLayout = (LinearLayout) button.getParent();
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
} catch (Exception ex) {
}
}
static private AlertDialog.Builder getDialogBuilder(final Context context) {
return new AlertDialog.Builder(context);
}
static private androidx.appcompat.app.AlertDialog.Builder getMaterialDialogBuilder(final Context context, final RateDialogOptions options) {
return new androidx.appcompat.app.AlertDialog.Builder(context, options.getDialogStyleResId());
}
static private Dialog createDialog(final Context context, final RateDialogOptions options) {
AlertDialog.Builder builder = getDialogBuilder(context);
builder.setMessage(options.getMessageText(context));
if (options.shouldShowTitle()) builder.setTitle(options.getTitleText(context));
builder.setCancelable(options.getCancelable());
View view = options.getView();
if (view != null) builder.setView(view);
final OnClickButtonListener listener = options.getListener();
builder.setPositiveButton(options.getPositiveText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intentToAppstore = null;
if (options.getPackageType() == PACKAGE_TITLE_GOOGLE)
intentToAppstore = IntentHelper.createIntentForGooglePlay(context);
context.startActivity(intentToAppstore);
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
if (options.shouldShowNeutralButton()) {
builder.setNeutralButton(options.getNeutralText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setRemindIntervalDate(context);
if (listener != null) listener.onClickButton(which);
}
});
}
builder.setNegativeButton(options.getNegativeText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
return builder.create();
}
static private Dialog createMaterialDialog(final Context context, final RateDialogOptions options) {
androidx.appcompat.app.AlertDialog.Builder builder = getMaterialDialogBuilder(context, options);
builder.setMessage(options.getMessageText(context));
if (options.shouldShowTitle()) builder.setTitle(options.getTitleText(context));
builder.setCancelable(options.getCancelable());
View view = options.getView();
if (view != null) builder.setView(view);
final OnClickButtonListener listener = options.getListener();
builder.setPositiveButton(options.getPositiveText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intentToAppstore = null;
if (options.getPackageType() == PACKAGE_TITLE_GOOGLE)
intentToAppstore = IntentHelper.createIntentForGooglePlay(context);
context.startActivity(intentToAppstore);
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
if (options.shouldShowNeutralButton()) {
builder.setNeutralButton(options.getNeutralText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setRemindIntervalDate(context);
if (listener != null) listener.onClickButton(which);
}
});
}
builder.setNegativeButton(options.getNegativeText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
return builder.create();
}
}
\ No newline at end of file
package ly.warp.sdk.views.dialogs;
import android.content.Context;
import android.view.View;
import ly.warp.sdk.R;
import static ly.warp.sdk.utils.constants.WarpConstants.PACKAGE_TITLE_GOOGLE;
final class RateDialogOptions {
private boolean showNeutralButton = true;
private boolean showTitle = true;
private boolean cancelable = false;
private String packageType = PACKAGE_TITLE_GOOGLE;
private String packageId = "";
private int titleResId = R.string.rate_dialog_title;
private int messageResId = R.string.rate_dialog_message;
private int textPositiveResId = R.string.rate_dialog_positive;
private int textNeutralResId = R.string.rate_diloag_neutral;
private int textNegativeResId = R.string.rate_dialog_negative;
private int dialogStyleResId = R.style.AppCompatAlertDialogStyle;
private String titleText = null;
private String messageText = null;
private String positiveText = null;
private String neutralText = null;
private String negativeText = null;
private View view;
private OnClickButtonListener listener;
public boolean shouldShowNeutralButton() {
return showNeutralButton;
}
public void setShowNeutralButton(boolean showNeutralButton) {
this.showNeutralButton = showNeutralButton;
}
public boolean shouldShowTitle() {
return showTitle;
}
public void setShowTitle(boolean showTitle) {
this.showTitle = showTitle;
}
public boolean getCancelable() {
return cancelable;
}
public void setCancelable(boolean cancelable) {
this.cancelable = cancelable;
}
public String getPackageType() {
return packageType;
}
public void setPackageType(String packageType) {
this.packageType = packageType;
}
public String getPackageId() {
return packageId;
}
public void setPackageId(String packageId) {
this.packageId = packageId;
}
public int getTitleResId() {
return titleResId;
}
public void setTitleResId(int titleResId) {
this.titleResId = titleResId;
}
public int getMessageResId() {
return messageResId;
}
public void setMessageResId(int messageResId) {
this.messageResId = messageResId;
}
public int getTextPositiveResId() {
return textPositiveResId;
}
public void setTextPositiveResId(int textPositiveResId) {
this.textPositiveResId = textPositiveResId;
}
public int getTextNeutralResId() {
return textNeutralResId;
}
public void setTextNeutralResId(int textNeutralResId) {
this.textNeutralResId = textNeutralResId;
}
public int getTextNegativeResId() {
return textNegativeResId;
}
public void setTextNegativeResId(int textNegativeResId) {
this.textNegativeResId = textNegativeResId;
}
public int getDialogStyleResId() {
return dialogStyleResId;
}
public void setDialogStyleResId(int dialogStyleResId) {
this.dialogStyleResId = dialogStyleResId;
}
public View getView() {
return view;
}
public void setView(View view) {
this.view = view;
}
public OnClickButtonListener getListener() {
return listener;
}
public void setListener(OnClickButtonListener listener) {
this.listener = listener;
}
public String getTitleText(Context context) {
if (titleText == null) {
return context.getString(titleResId);
}
return titleText;
}
public void setTitleText(String titleText) {
this.titleText = titleText;
}
public String getMessageText(Context context) {
if (messageText == null) {
return context.getString(messageResId);
}
return messageText;
}
public void setMessageText(String messageText) {
this.messageText = messageText;
}
public String getPositiveText(Context context) {
if (positiveText == null) {
return context.getString(textPositiveResId);
}
return positiveText;
}
public void setPositiveText(String positiveText) {
this.positiveText = positiveText;
}
public String getNeutralText(Context context) {
if (neutralText == null) {
return context.getString(textNeutralResId);
}
return neutralText;
}
public void setNeutralText(String neutralText) {
this.neutralText = neutralText;
}
public String getNegativeText(Context context) {
if (negativeText == null) {
return context.getString(textNegativeResId);
}
return negativeText;
}
public void setNegativeText(String negativeText) {
this.negativeText = negativeText;
}
}
\ No newline at end of file
package ly.warp.sdk.views.dialogs;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Date;
final class RatePreferenceHelper {
private static final String PREF_FILE_NAME = "ratedialog_rate_pref_file";
private static final String PREF_KEY_INSTALL_DATE = "ratedialog_rate_install_date";
private static final String PREF_KEY_LAUNCH_TIMES = "ratedialog_rate_launch_times";
private static final String PREF_KEY_IS_AGREE_SHOW_DIALOG = "ratedialog_rate_is_agree_show_dialog";
private static final String PREF_KEY_REMIND_INTERVAL = "ratedialog_rate_remind_interval";
private static final String PREF_KEY_EVENT_TIMES = "ratedialog_rate_event_times";
private RatePreferenceHelper() {
}
static SharedPreferences getPreferences(Context context) {
return context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
}
static SharedPreferences.Editor getPreferencesEditor(Context context) {
return getPreferences(context).edit();
}
/**
* Clear data in shared preferences
*
* @param context context
*/
static void clearSharedPreferences(Context context) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.remove(PREF_KEY_INSTALL_DATE);
editor.remove(PREF_KEY_LAUNCH_TIMES);
editor.remove(PREF_KEY_REMIND_INTERVAL);
editor.remove(PREF_KEY_EVENT_TIMES);
editor.apply();
}
/**
* Set agree flag about show dialog.
* If it is false, rate dialog will never shown unless data is cleared.
*
* @param context context
* @param isAgree agree with showing rate dialog
*/
static void setAgreeShowDialog(Context context, boolean isAgree) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putBoolean(PREF_KEY_IS_AGREE_SHOW_DIALOG, isAgree);
editor.apply();
}
/**
* get agree flag about show dialog.
* If it is false, rate dialog will never shown unless data is cleared.
*
* @param context context
*/
static boolean getIsAgreeShowDialog(Context context) {
return getPreferences(context).getBoolean(PREF_KEY_IS_AGREE_SHOW_DIALOG, true);
}
/**
* set remind interval date.
* If remind interval date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static void setRemindIntervalDate(Context context) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.remove(PREF_KEY_REMIND_INTERVAL);
editor.putLong(PREF_KEY_REMIND_INTERVAL, new Date().getTime());
editor.apply();
}
/**
* get remind interval date.
* If remind interval date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static long getRemindIntervalDate(Context context) {
return getPreferences(context).getLong(PREF_KEY_REMIND_INTERVAL, 0);
}
/**
* set install date.
* If install date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static void setInstallDate(Context context) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putLong(PREF_KEY_INSTALL_DATE, new Date().getTime());
editor.apply();
}
/**
* get install date.
* If install date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static long getInstallDate(Context context) {
return getPreferences(context).getLong(PREF_KEY_INSTALL_DATE, 0);
}
/**
* set luanch times date.
* If launch time is over than setting times, rate dialog will appear.
*
* @param context context
* @param launchTimes launchTimes
*/
static void setLaunchTimes(Context context, int launchTimes) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putInt(PREF_KEY_LAUNCH_TIMES, launchTimes);
editor.apply();
}
/**
* get luanch times date.
* If launch time is over than setting times, rate dialog will appear.
*
* @param context context
*/
static int getLaunchTimes(Context context) {
return getPreferences(context).getInt(PREF_KEY_LAUNCH_TIMES, 0);
}
/**
* check if first launch or not.
* If launching first time, andialog will set luanch date.
*
* @param context context
*/
static boolean isFirstLaunch(Context context) {
return getPreferences(context).getLong(PREF_KEY_INSTALL_DATE, 0) == 0L;
}
/**
* set event times date.
* If event time is over than setting times, rate dialog will appear.
*
* @param context context
*/
static int getEventTimes(Context context) {
return getPreferences(context).getInt(PREF_KEY_EVENT_TIMES, 0);
}
/**
* set event times date.
* If event time is over than setting times, rate dialog will appear.
*
* @param context context
*/
static void setEventTimes(Context context, int eventTimes) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putInt(PREF_KEY_EVENT_TIMES, eventTimes);
editor.apply();
}
}
\ No newline at end of file
apply plugin: 'maven-publish'
apply plugin: 'signing'
task androidSourcesJar(type: Jar) {
archiveClassifier.set('sources')
if (project.plugins.findPlugin("com.android.library")) {
// For Android libraries
from android.sourceSets.main.java.srcDirs
from android.sourceSets.main.kotlin.srcDirs
} else {
// For pure Kotlin libraries, in case you have them
from sourceSets.main.java.srcDirs
from sourceSets.main.kotlin.srcDirs
}
}
artifacts {
archives androidSourcesJar
}
group = PUBLISH_GROUP_ID
version = PUBLISH_VERSION
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
// The coordinates of the library, being set from variables that
// we'll set up later
groupId PUBLISH_GROUP_ID
artifactId PUBLISH_ARTIFACT_ID
version PUBLISH_VERSION
// Two artifacts, the `aar` (or `jar`) and the sources
if (project.plugins.findPlugin("com.android.library")) {
from components.release
} else {
from components.java
}
artifact androidSourcesJar
// artifact javadocJar
// Mostly self-explanatory metadata
pom {
name = PUBLISH_ARTIFACT_ID
description = 'Warply Android SDK Maven Plugin'
url = 'https://git.warp.ly/open-source/warply_android_sdk_maven_plugin'
licenses {
license {
name = 'Warply Ltd. All rights reserved'
url = 'https://git.warp.ly/open-source/warply_android_sdk_maven_plugin'
}
}
developers {
developer {
id = 'panostr'
name = 'Panagiotis Triantafyllou'
email = 'panost@warp.ly'
}
// Add all other devs here...
}
// Version control info - if you're using GitHub, follow the
// format as seen here
scm {
connection = 'scm:git:git.warp.ly/open-source/warply_android_sdk_maven_plugin.git'
developerConnection = 'scm:git:ssh://git.warp.ly/open-source/warply_android_sdk_maven_plugin.git'
url = 'https://git.warp.ly/open-source/warply_android_sdk_maven_plugin/tree/master'
}
}
}
}
}
}
signing {
useInMemoryPgpKeys(
rootProject.ext["signing.keyId"],
rootProject.ext["signing.key"],
rootProject.ext["signing.password"],
)
sign publishing.publications
}
\ No newline at end of file
// Create variables with empty default values
// keyId is the last 8 characters of the GPG key
ext["signing.keyId"] = ''
// password is the passphrase of the GPG key
ext["signing.password"] = ''
// key is the base64 private GPG key
ext["signing.key"] = ''
// osshrUsername and ossrhPassword are the account details for MavenCentral
// which we’ve chosen at the Jira registration step (Sonatype site))
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
ext["sonatypeStagingProfileId"] = ''
File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
// Read local.properties file first if it exists
Properties p = new Properties()
new FileInputStream(secretPropsFile).withCloseable { is -> p.load(is) }
p.each { name, value -> ext[name] = value }
} else {
// Use system environment variables
ext["ossrhUsername"] = System.getenv('OSSRH_USERNAME')
ext["ossrhPassword"] = System.getenv('OSSRH_PASSWORD')
ext["sonatypeStagingProfileId"] = System.getenv('SONATYPE_STAGING_PROFILE_ID')
ext["signing.keyId"] = System.getenv('SIGNING_KEY_ID')
ext["signing.password"] = System.getenv('SIGNING_PASSWORD')
ext["signing.key"] = System.getenv('SIGNING_KEY')
}
// Set up Sonatype repository
nexusPublishing {
repositories {
sonatype {
stagingProfileId = sonatypeStagingProfileId
username = ossrhUsername
password = ossrhPassword
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
}
}
}
\ No newline at end of file
include ':app'
include 'libraries:warply_android_sdk'
include ':warply_android_sdk'
......
apply plugin: 'com.android.library'
ext {
PUBLISH_GROUP_ID = 'ly.warp'
PUBLISH_VERSION = '4.5.0'
PUBLISH_ARTIFACT_ID = 'warply-android-sdk'
}
apply from: "${rootProject.projectDir}/scripts/publish-module.gradle"
android {
compileSdkVersion 31
......
/**
* Automatically generated file. DO NOT MODIFY
*/
package ly.warp.sdk;
public final class BuildConfig {
public static final boolean DEBUG = false;
public static final String LIBRARY_PACKAGE_NAME = "ly.warp.sdk";
public static final String BUILD_TYPE = "release";
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ly.warp.sdk" >
<uses-sdk
android:minSdkVersion="23"
android:targetSdkVersion="31" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.SEND" />
<application>
<!-- For Huawei Push -->
<meta-data
android:name="push_kit_auto_init_enabled"
android:value="true" />
<meta-data
android:name="com.huawei.hms.client.channel.androidMarket"
android:value="false" />
<activity
android:name="ly.warp.sdk.activities.WarpViewActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="ly.warp.sdk.dexter.PermissionsActivity"
android:exported="false"
android:launchMode="singleInstance"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar" />
<!-- Service used for updating user's location. -->
<service
android:name="ly.warp.sdk.services.UpdateUserLocationService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name="ly.warp.sdk.services.WarplyBeaconsRangingService"
android:exported="false" />
<!-- Service used for in app notification. -->
<service
android:name="ly.warp.sdk.services.WarpInAppNotificationService"
android:exported="false" />
<!-- FCM Service for push notifications -->
<service
android:name="ly.warp.sdk.services.FCMBaseMessagingService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<!-- Service used for handling Huawei Push Notifications, comment if we are in Google build -->
<service
android:name="ly.warp.sdk.services.HMSBaseMessagingService"
android:exported="false" >
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
</intent-filter>
</service>
<receiver
android:name="ly.warp.sdk.receivers.LocationChangedReceiver"
android:exported="false" />
<receiver
android:name="ly.warp.sdk.receivers.ConnectivityChangedReceiver"
android:exported="false" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="dollar_openBracket_applicationId_closeBracket" />
</intent-filter>
</receiver>
<receiver
android:name="ly.warp.sdk.receivers.BluetoothStateChangeReceiver"
android:exported="false" >
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
</intent-filter>
</receiver>
<receiver
android:name="ly.warp.sdk.receivers.WarplyInAppNotificationReceiver"
android:exported="false" />
</application>
</manifest>
\ No newline at end of file
{
"version": 3,
"artifactType": {
"type": "AAPT_FRIENDLY_MERGED_MANIFESTS",
"kind": "Directory"
},
"applicationId": "ly.warp.sdk",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"outputFile": "AndroidManifest.xml"
}
],
"elementType": "File"
}
\ No newline at end of file
aarFormatVersion=1.0
aarMetadataVersion=1.0
minCompileSdk=1
{"compiler-4.12.0.jar (com.github.bumptech.glide:compiler:4.12.0)":true}
\ No newline at end of file
This diff could not be displayed because it is too large.
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\jniLibs"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\release\jniLibs"/></dataSet></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\shaders"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\release\shaders"/></dataSet></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\assets"/><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\build\intermediates\shader_assets\release\out"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\release\assets"/></dataSet></merger>
\ No newline at end of file
#Fri Jan 28 15:22:24 EET 2022
C\:\\Users\\Warply\\Documents\\Warply\\Android\\warply_android_sdk_maven_plugin\\warply_android_sdk\\src\\main\\res\\drawable-xhdpi\\ic_default_campaign.png=C\:\\Users\\Warply\\Documents\\Warply\\Android\\warply_android_sdk_maven_plugin\\warply_android_sdk\\build\\intermediates\\packaged_res\\release\\drawable-xhdpi-v4\\ic_default_campaign.png
C\:\\Users\\Warply\\Documents\\Warply\\Android\\warply_android_sdk_maven_plugin\\warply_android_sdk\\src\\main\\res\\layout\\layout_inapp_alert_dialog_default.xml=C\:\\Users\\Warply\\Documents\\Warply\\Android\\warply_android_sdk_maven_plugin\\warply_android_sdk\\build\\intermediates\\packaged_res\\release\\layout\\layout_inapp_alert_dialog_default.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorAccent">#044C86</color>
<color name="colorPrimary">#0a1a50</color>
<color name="colorPrimaryDark">#0a1a50</color>
<string name="rate_dialog_message">If you enjoy using this app, would you mind taking a moment to rate it? It won\'t take more than a minute. Thanks for your support!</string>
<string name="rate_dialog_negative">No, Thanks</string>
<string name="rate_dialog_positive">Rate Now</string>
<string name="rate_dialog_title">Rate App</string>
<string name="rate_diloag_neutral">Remind Me Later</string>
<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:layout_gravity">right</item>
<!--<item name="colorAccent">#23a890</item>-->
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@android:color/black</item>
<item name="android:background">@android:color/white</item>
</style>
<style name="InAppButtonsStyle" parent="@android:style/Widget.TextView">
<item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\res"/><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\build\generated\res\rs\release"/><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\build\generated\res\resValues\release"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\res"><file name="ic_default_campaign" path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\res\drawable-xhdpi\ic_default_campaign.png" qualifiers="xhdpi-v4" type="drawable"/><file name="layout_inapp_alert_dialog_default" path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\res\layout\layout_inapp_alert_dialog_default.xml" qualifiers="" type="layout"/><file path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\res\values\colors.xml" qualifiers=""><color name="colorPrimary">#0a1a50</color><color name="colorAccent">#044C86</color><color name="colorPrimaryDark">#0a1a50</color></file><file path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\res\values\strings.xml" qualifiers=""><string name="rate_dialog_title">Rate App</string><string name="rate_dialog_message">If you enjoy using this app, would you mind taking a moment to rate it? It won\'t take more than a minute. Thanks for your support!</string><string name="rate_dialog_positive">Rate Now</string><string name="rate_diloag_neutral">Remind Me Later</string><string name="rate_dialog_negative">No, Thanks</string></file><file path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\res\values\styles.xml" qualifiers=""><style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:layout_gravity">right</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@android:color/black</item>
<item name="android:background">@android:color/white</item>
</style><style name="InAppButtonsStyle" parent="@android:style/Widget.TextView">
<item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item>
</style></file></source><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\build\generated\res\rs\release"/><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\build\generated\res\resValues\release"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="release$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\release\res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="release" generated-set="release$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\release\res"/></dataSet><mergedItems/></merger>
\ No newline at end of file
R_DEF: Internal format may change without notice
local
color colorAccent
color colorPrimary
color colorPrimaryDark
drawable ic_default_campaign
id iv_inapp_image
id ll_custom_buttons_view
id tv_inapp_subtitle
id tv_inapp_title
layout layout_inapp_alert_dialog_default
string rate_dialog_message
string rate_dialog_negative
string rate_dialog_positive
string rate_dialog_title
string rate_diloag_neutral
style AppCompatAlertDialogStyle
style InAppButtonsStyle
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="ly.warp.sdk" >
4
5 <uses-sdk
6 android:minSdkVersion="23"
6-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
7 android:targetSdkVersion="31" />
7-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
8
9 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
9-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:4:5-79
9-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:4:22-76
10 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
10-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:5:5-81
10-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:5:22-78
11 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
11-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:6:5-75
11-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:6:22-72
12 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
12-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:7:5-79
12-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:7:22-76
13 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
13-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:8:5-82
13-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:8:22-79
14 <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
14-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:9:5-77
14-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:9:22-74
15 <uses-permission android:name="android.permission.BLUETOOTH" />
15-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:10:5-68
15-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:10:22-65
16 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
16-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:11:5-76
16-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:11:22-73
17 <uses-permission android:name="com.google.android.c2dm.permission.SEND" />
17-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:12:5-79
17-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:12:22-76
18
19 <application>
19-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:14:5-93:19
20
21 <!-- For Huawei Push -->
22 <meta-data
22-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:16:9-18:36
23 android:name="push_kit_auto_init_enabled"
23-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:17:13-54
24 android:value="true" />
24-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:18:13-33
25 <meta-data
25-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:20:9-22:37
26 android:name="com.huawei.hms.client.channel.androidMarket"
26-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:21:13-71
27 android:value="false" />
27-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:22:13-34
28
29 <activity
29-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:24:9-27:52
30 android:name="ly.warp.sdk.activities.WarpViewActivity"
30-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:25:13-67
31 android:exported="false"
31-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:26:13-37
32 android:screenOrientation="portrait" />
32-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:27:13-49
33 <activity
33-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:29:9-34:69
34 android:name="ly.warp.sdk.dexter.PermissionsActivity"
34-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:30:13-66
35 android:exported="false"
35-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:31:13-37
36 android:launchMode="singleInstance"
36-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:32:13-48
37 android:screenOrientation="portrait"
37-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:33:13-49
38 android:theme="@android:style/Theme.Light.NoTitleBar" />
38-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:34:13-66
39
40 <!-- Service used for updating user's location. -->
41 <service
41-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:37:9-40:72
42 android:name="ly.warp.sdk.services.UpdateUserLocationService"
42-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:38:13-74
43 android:exported="false"
43-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:39:13-37
44 android:permission="android.permission.BIND_JOB_SERVICE" />
44-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:40:13-69
45 <service
45-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:42:9-44:40
46 android:name="ly.warp.sdk.services.WarplyBeaconsRangingService"
46-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:43:13-76
47 android:exported="false" />
47-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:44:13-37
48
49 <!-- Service used for in app notification. -->
50 <service
50-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:47:9-49:40
51 android:name="ly.warp.sdk.services.WarpInAppNotificationService"
51-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:48:13-77
52 android:exported="false" />
52-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:49:13-37
53
54 <!-- FCM Service for push notifications -->
55 <service
55-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:52:9-58:19
56 android:name="ly.warp.sdk.services.FCMBaseMessagingService"
56-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:53:13-72
57 android:exported="false" >
57-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:54:13-37
58 <intent-filter>
58-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:55:13-57:29
59 <action android:name="com.google.firebase.MESSAGING_EVENT" />
59-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:56:17-78
59-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:56:25-75
60 </intent-filter>
61 </service>
62
63 <!-- Service used for handling Huawei Push Notifications, comment if we are in Google build -->
64 <service
64-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:61:9-67:19
65 android:name="ly.warp.sdk.services.HMSBaseMessagingService"
65-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:62:13-72
66 android:exported="false" >
66-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:63:13-37
67 <intent-filter>
67-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:64:13-66:29
68 <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
68-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:65:17-81
68-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:65:25-78
69 </intent-filter>
70 </service>
71
72 <receiver
72-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:69:9-71:40
73 android:name="ly.warp.sdk.receivers.LocationChangedReceiver"
73-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:70:13-73
74 android:exported="false" />
74-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:71:13-37
75 <receiver
75-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:73:9-80:20
76 android:name="ly.warp.sdk.receivers.ConnectivityChangedReceiver"
76-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:74:13-77
77 android:exported="false" >
77-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:75:13-37
78 <intent-filter>
78-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:76:13-79:29
79 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
79-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:77:17-79
79-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:77:25-76
80
81 <category android:name="${applicationId}" />
81-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:78:17-61
81-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:78:27-58
82 </intent-filter>
83 </receiver>
84 <receiver
84-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:82:9-88:20
85 android:name="ly.warp.sdk.receivers.BluetoothStateChangeReceiver"
85-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:83:13-78
86 android:exported="false" >
86-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:84:13-37
87 <intent-filter>
87-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:85:13-87:29
88 <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
88-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:86:17-89
88-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:86:25-86
89 </intent-filter>
90 </receiver>
91 <receiver
91-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:90:9-92:40
92 android:name="ly.warp.sdk.receivers.WarplyInAppNotificationReceiver"
92-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:91:13-81
93 android:exported="false" />
93-->C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:92:13-37
94 </application>
95
96</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ly.warp.sdk" >
<uses-sdk
android:minSdkVersion="23"
android:targetSdkVersion="31" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.SEND" />
<application>
<!-- For Huawei Push -->
<meta-data
android:name="push_kit_auto_init_enabled"
android:value="true" />
<meta-data
android:name="com.huawei.hms.client.channel.androidMarket"
android:value="false" />
<activity
android:name="ly.warp.sdk.activities.WarpViewActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="ly.warp.sdk.dexter.PermissionsActivity"
android:exported="false"
android:launchMode="singleInstance"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar" />
<!-- Service used for updating user's location. -->
<service
android:name="ly.warp.sdk.services.UpdateUserLocationService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name="ly.warp.sdk.services.WarplyBeaconsRangingService"
android:exported="false" />
<!-- Service used for in app notification. -->
<service
android:name="ly.warp.sdk.services.WarpInAppNotificationService"
android:exported="false" />
<!-- FCM Service for push notifications -->
<service
android:name="ly.warp.sdk.services.FCMBaseMessagingService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<!-- Service used for handling Huawei Push Notifications, comment if we are in Google build -->
<service
android:name="ly.warp.sdk.services.HMSBaseMessagingService"
android:exported="false" >
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
</intent-filter>
</service>
<receiver
android:name="ly.warp.sdk.receivers.LocationChangedReceiver"
android:exported="false" />
<receiver
android:name="ly.warp.sdk.receivers.ConnectivityChangedReceiver"
android:exported="false" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
<receiver
android:name="ly.warp.sdk.receivers.BluetoothStateChangeReceiver"
android:exported="false" >
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
</intent-filter>
</receiver>
<receiver
android:name="ly.warp.sdk.receivers.WarplyInAppNotificationReceiver"
android:exported="false" />
</application>
</manifest>
\ No newline at end of file
{
"version": 3,
"artifactType": {
"type": "PACKAGED_MANIFESTS",
"kind": "Directory"
},
"applicationId": "ly.warp.sdk",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"outputFile": "../../merged_manifest/release/AndroidManifest.xml"
}
],
"elementType": "File"
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorAccent">#044C86</color>
<color name="colorPrimary">#0a1a50</color>
<color name="colorPrimaryDark">#0a1a50</color>
<string name="rate_dialog_message">If you enjoy using this app, would you mind taking a moment to rate it? It won\'t take more than a minute. Thanks for your support!</string>
<string name="rate_dialog_negative">No, Thanks</string>
<string name="rate_dialog_positive">Rate Now</string>
<string name="rate_dialog_title">Rate App</string>
<string name="rate_diloag_neutral">Remind Me Later</string>
<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:layout_gravity">right</item>
<!--<item name="colorAccent">#23a890</item>-->
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@android:color/black</item>
<item name="android:background">@android:color/white</item>
</style>
<style name="InAppButtonsStyle" parent="@android:style/Widget.TextView">
<item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
\ No newline at end of file
-----BEGIN PGP SIGNATURE-----
Version: BCPG v1.68
iQEcBAABCgAGBQJh8+4XAAoJEAIqwpYLX1k+JJ4H/0lmeHYp41hXQ7Bo4/bllcBQ
Zyiua6G83BxklEAb3TgOL/DTd05qTkFpqwh5Xsi9/wc4jrQQmJTjxIIHdSDTBecC
jRx5Nc9hLclgq2cclrL4UxrxZ3lV8tyJ22bq19J5cmjoUI2GL1rg9rGBuhd5bbXC
w6OOCjsEGkPGTOLUov7f1s5bL72fF23OMdz8kWCRtsgDBMMce9Zpc+FfXFvnliLY
ueAOLt5nyvXO95IAcV72xge9wTaH8/D5sHYV9VNPHuKVOVDUQMLuzgfObp6PVezv
LCkHwuL3hFRngYq2zTp+k3ZhtsOKgIejknJ1Z18G7bz/HLK6awtCLq6nPP6PSRM=
=OR0U
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNATURE-----
Version: BCPG v1.68
iQEcBAABCgAGBQJh8+4XAAoJEAIqwpYLX1k+b4wH/34GB7D22wEbe8l2ZvIzh272
upgQaV8uxfEJ1K4dW9WpaUfkHyZS5JPrknTclvZS4pq7I6mJxMdRj0wGCGwHUh8j
9qNrFuUL3pOzCdPku9XIBmyY91Z3Qm0g7bC6dc5BjgKBLK1+45Cvw+hPlDTdEjgB
3mIL9px37pkIW3oBWvh4vPeqFfNTOJxSeDpYQ+Jf16iyntqzO0poN4pr1p6r/Vh9
suCrTh2aEcAWy9qLvYWYhtY17x4oTR01NBXntLMRsfe/V9BPa/2qVxH0eFJ2DlcD
M6kA9j9+iR63tR5rPYtNSi2Cn8TBLA/KojcsK+q8HK+o1ZHjXkz0MLdED5tALXg=
=PFu7
-----END PGP SIGNATURE-----
-- Merging decision tree log ---
manifest
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:1:1-94:12
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:1:1-94:12
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:1:1-94:12
package
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:2:5-26
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
xmlns:android
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:1:11-69
uses-permission#android.permission.ACCESS_FINE_LOCATION
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:4:5-79
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:4:22-76
uses-permission#android.permission.ACCESS_COARSE_LOCATION
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:5:5-81
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:5:22-78
uses-permission#android.permission.READ_PHONE_STATE
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:6:5-75
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:6:22-72
uses-permission#android.permission.ACCESS_NETWORK_STATE
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:7:5-79
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:7:22-76
uses-permission#com.google.android.c2dm.permission.RECEIVE
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:8:5-82
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:8:22-79
uses-permission#android.permission.FOREGROUND_SERVICE
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:9:5-77
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:9:22-74
uses-permission#android.permission.BLUETOOTH
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:10:5-68
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:10:22-65
uses-permission#android.permission.ACCESS_WIFI_STATE
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:11:5-76
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:11:22-73
uses-permission#com.google.android.c2dm.permission.SEND
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:12:5-79
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:12:22-76
application
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:14:5-93:19
meta-data#push_kit_auto_init_enabled
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:16:9-18:36
android:value
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:18:13-33
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:17:13-54
meta-data#com.huawei.hms.client.channel.androidMarket
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:20:9-22:37
android:value
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:22:13-34
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:21:13-71
activity#ly.warp.sdk.activities.WarpViewActivity
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:24:9-27:52
android:screenOrientation
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:27:13-49
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:26:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:25:13-67
activity#ly.warp.sdk.dexter.PermissionsActivity
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:29:9-34:69
android:screenOrientation
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:33:13-49
android:launchMode
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:32:13-48
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:31:13-37
android:theme
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:34:13-66
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:30:13-66
service#ly.warp.sdk.services.UpdateUserLocationService
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:37:9-40:72
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:39:13-37
android:permission
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:40:13-69
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:38:13-74
service#ly.warp.sdk.services.WarplyBeaconsRangingService
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:42:9-44:40
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:44:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:43:13-76
service#ly.warp.sdk.services.WarpInAppNotificationService
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:47:9-49:40
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:49:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:48:13-77
service#ly.warp.sdk.services.FCMBaseMessagingService
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:52:9-58:19
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:54:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:53:13-72
intent-filter#action:name:com.google.firebase.MESSAGING_EVENT
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:55:13-57:29
action#com.google.firebase.MESSAGING_EVENT
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:56:17-78
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:56:25-75
service#ly.warp.sdk.services.HMSBaseMessagingService
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:61:9-67:19
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:63:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:62:13-72
intent-filter#action:name:com.huawei.push.action.MESSAGING_EVENT
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:64:13-66:29
action#com.huawei.push.action.MESSAGING_EVENT
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:65:17-81
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:65:25-78
receiver#ly.warp.sdk.receivers.LocationChangedReceiver
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:69:9-71:40
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:71:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:70:13-73
receiver#ly.warp.sdk.receivers.ConnectivityChangedReceiver
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:73:9-80:20
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:75:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:74:13-77
intent-filter#action:name:android.net.conn.CONNECTIVITY_CHANGE+category:name:${applicationId}
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:76:13-79:29
action#android.net.conn.CONNECTIVITY_CHANGE
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:77:17-79
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:77:25-76
category#${applicationId}
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:78:17-61
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:78:27-58
receiver#ly.warp.sdk.receivers.BluetoothStateChangeReceiver
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:82:9-88:20
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:84:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:83:13-78
intent-filter#action:name:android.bluetooth.adapter.action.STATE_CHANGED
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:85:13-87:29
action#android.bluetooth.adapter.action.STATE_CHANGED
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:86:17-89
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:86:25-86
receiver#ly.warp.sdk.receivers.WarplyInAppNotificationReceiver
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:90:9-92:40
android:exported
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:92:13-37
android:name
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml:91:13-81
uses-sdk
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml reason: use-sdk injection requested
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
android:targetSdkVersion
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
android:minSdkVersion
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
ADDED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
INJECTED from C:\Users\Warply\Documents\Warply\Android\warply_android_sdk_maven_plugin\warply_android_sdk\src\main\AndroidManifest.xml
{
"formatVersion": "1.1",
"component": {
"group": "ly.warp",
"module": "warply-android-sdk",
"version": "4.5.0",
"attributes": {
"org.gradle.status": "release"
}
},
"createdBy": {
"gradle": {
"version": "7.0.2"
}
},
"variants": [
{
"name": "releaseApiPublication",
"attributes": {
"org.gradle.category": "library",
"org.gradle.dependency.bundling": "external",
"org.gradle.libraryelements": "aar",
"org.gradle.usage": "java-api"
},
"dependencies": [
{
"group": "androidx.appcompat",
"module": "appcompat",
"version": {
"requires": "1.4.1"
}
},
{
"group": "androidx.recyclerview",
"module": "recyclerview",
"version": {
"requires": "1.2.1"
}
},
{
"group": "androidx.cardview",
"module": "cardview",
"version": {
"requires": "1.0.0"
}
},
{
"group": "org.altbeacon",
"module": "android-beacon-library",
"version": {
"requires": "2.19.3"
}
},
{
"group": "org.jbundle.util.osgi.wrapped",
"module": "org.jbundle.util.osgi.wrapped.org.apache.http.client",
"version": {
"requires": "4.1.2"
}
},
{
"group": "commons-logging",
"module": "commons-logging",
"version": {
"requires": "1.2"
}
},
{
"group": "com.google.firebase",
"module": "firebase-bom",
"version": {
"requires": "29.0.3"
},
"attributes": {
"org.gradle.category": "platform"
},
"endorseStrictVersions": true
},
{
"group": "com.google.firebase",
"module": "firebase-messaging"
},
{
"group": "com.google.android.gms",
"module": "play-services-base",
"version": {
"requires": "18.0.1"
}
},
{
"group": "androidx.work",
"module": "work-runtime",
"version": {
"requires": "2.7.1"
}
},
{
"group": "com.github.bumptech.glide",
"module": "glide",
"version": {
"requires": "4.12.0"
}
},
{
"group": "com.huawei.agconnect",
"module": "agconnect-core",
"version": {
"requires": "1.6.2.300"
}
},
{
"group": "com.huawei.hms",
"module": "base",
"version": {
"requires": "6.2.0.300"
}
},
{
"group": "com.huawei.hms",
"module": "push",
"version": {
"requires": "6.1.0.300"
}
},
{
"group": "com.huawei.hms",
"module": "ads-identifier",
"version": {
"requires": "3.4.39.302"
}
},
{
"group": "net.zetetic",
"module": "android-database-sqlcipher",
"version": {
"requires": "4.5.0"
}
},
{
"group": "androidx.sqlite",
"module": "sqlite",
"version": {
"requires": "2.2.0"
}
}
],
"files": [
{
"name": "warply-android-sdk-4.5.0.aar",
"url": "warply-android-sdk-4.5.0.aar",
"size": 631194,
"sha512": "57808d55ce48ed58ac4df8930f71a3b7da8251fe58f1a69802adfcbf715a267ac3c19c7b34e3a7f0b9b93adfd9d252fc0f6c397e22f643600ccb9c9800c8bf77",
"sha256": "93ba11de85c9a25160836abac2fea3e9dc8e3c13e38c5542d317a5ba456177a4",
"sha1": "258eb682840b39c43c7e896b1d812c538b54b164",
"md5": "cb0e4feb5cef4f26f6f743eaf1419298"
}
]
},
{
"name": "releaseRuntimePublication",
"attributes": {
"org.gradle.category": "library",
"org.gradle.dependency.bundling": "external",
"org.gradle.libraryelements": "aar",
"org.gradle.usage": "java-runtime"
},
"dependencies": [
{
"group": "androidx.appcompat",
"module": "appcompat",
"version": {
"requires": "1.4.1"
}
},
{
"group": "androidx.recyclerview",
"module": "recyclerview",
"version": {
"requires": "1.2.1"
}
},
{
"group": "androidx.cardview",
"module": "cardview",
"version": {
"requires": "1.0.0"
}
},
{
"group": "org.altbeacon",
"module": "android-beacon-library",
"version": {
"requires": "2.19.3"
}
},
{
"group": "org.jbundle.util.osgi.wrapped",
"module": "org.jbundle.util.osgi.wrapped.org.apache.http.client",
"version": {
"requires": "4.1.2"
}
},
{
"group": "commons-logging",
"module": "commons-logging",
"version": {
"requires": "1.2"
}
},
{
"group": "com.google.firebase",
"module": "firebase-bom",
"version": {
"requires": "29.0.3"
},
"attributes": {
"org.gradle.category": "platform"
},
"endorseStrictVersions": true
},
{
"group": "com.google.firebase",
"module": "firebase-messaging"
},
{
"group": "com.google.android.gms",
"module": "play-services-base",
"version": {
"requires": "18.0.1"
}
},
{
"group": "androidx.work",
"module": "work-runtime",
"version": {
"requires": "2.7.1"
}
},
{
"group": "com.github.bumptech.glide",
"module": "glide",
"version": {
"requires": "4.12.0"
}
},
{
"group": "com.huawei.agconnect",
"module": "agconnect-core",
"version": {
"requires": "1.6.2.300"
}
},
{
"group": "com.huawei.hms",
"module": "base",
"version": {
"requires": "6.2.0.300"
}
},
{
"group": "com.huawei.hms",
"module": "push",
"version": {
"requires": "6.1.0.300"
}
},
{
"group": "com.huawei.hms",
"module": "ads-identifier",
"version": {
"requires": "3.4.39.302"
}
},
{
"group": "net.zetetic",
"module": "android-database-sqlcipher",
"version": {
"requires": "4.5.0"
}
},
{
"group": "androidx.sqlite",
"module": "sqlite",
"version": {
"requires": "2.2.0"
}
}
],
"files": [
{
"name": "warply-android-sdk-4.5.0.aar",
"url": "warply-android-sdk-4.5.0.aar",
"size": 631194,
"sha512": "57808d55ce48ed58ac4df8930f71a3b7da8251fe58f1a69802adfcbf715a267ac3c19c7b34e3a7f0b9b93adfd9d252fc0f6c397e22f643600ccb9c9800c8bf77",
"sha256": "93ba11de85c9a25160836abac2fea3e9dc8e3c13e38c5542d317a5ba456177a4",
"sha1": "258eb682840b39c43c7e896b1d812c538b54b164",
"md5": "cb0e4feb5cef4f26f6f743eaf1419298"
}
]
}
]
}
-----BEGIN PGP SIGNATURE-----
Version: BCPG v1.68
iQEcBAABCgAGBQJh8+4XAAoJEAIqwpYLX1k+RKoH/iQT1NL56t0Of+hNX1QWOTBk
Mr87eoMptvgBO7/Vr8/JZ3wNzEHZ9vZU0+sw4ObamfylO76RhPlsPyZZTbgRcgZT
KOX5XKhVrtr3WEub05gvbidZtWj8fBVg8cVoTQExWi5qI/AAbZsjPkAdFVf3ss6B
+Nmh+FmvCsT1pFnNg4+Tnt7I+Bb2kQh117t1bB+ZQecK2ym9XJxK4TNAotzk1uNi
M8BiiS9S9lpdQmwj8vtrsW12SARzh3YLZ+kq1bJGEEQtfE5L4Z6CgzkiDMbzSRgb
AAUEApH97czirqb6uWE/Igdnly9XMaY/j6M9G6rQeQHRCz9PZhUuDqcGfSlu3hc=
=GCQQ
-----END PGP SIGNATURE-----
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- This module was also published with a richer model, Gradle metadata, -->
<!-- which should be used instead. Do not delete the following line which -->
<!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
<!-- that they should prefer consuming it instead. -->
<!-- do_not_remove: published-with-gradle-metadata -->
<modelVersion>4.0.0</modelVersion>
<groupId>ly.warp</groupId>
<artifactId>warply-android-sdk</artifactId>
<version>4.5.0</version>
<packaging>aar</packaging>
<name>warply-android-sdk</name>
<description>Warply Android SDK Maven Plugin</description>
<url>https://git.warp.ly/open-source/warply_android_sdk_maven_plugin</url>
<licenses>
<license>
<name>Warply Ltd. All rights reserved</name>
<url>https://git.warp.ly/open-source/warply_android_sdk_maven_plugin</url>
</license>
</licenses>
<developers>
<developer>
<id>panostr</id>
<name>Panagiotis Triantafyllou</name>
<email>panost@warp.ly</email>
</developer>
</developers>
<scm>
<connection>scm:git:git.warp.ly/open-source/warply_android_sdk_maven_plugin.git</connection>
<developerConnection>scm:git:ssh://git.warp.ly/open-source/warply_android_sdk_maven_plugin.git</developerConnection>
<url>https://git.warp.ly/open-source/warply_android_sdk_maven_plugin/tree/master</url>
</scm>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-bom</artifactId>
<version>29.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>androidx.appcompat</groupId>
<artifactId>appcompat</artifactId>
<version>1.4.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>androidx.recyclerview</groupId>
<artifactId>recyclerview</artifactId>
<version>1.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>androidx.cardview</groupId>
<artifactId>cardview</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.altbeacon</groupId>
<artifactId>android-beacon-library</artifactId>
<version>2.19.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jbundle.util.osgi.wrapped</groupId>
<artifactId>org.jbundle.util.osgi.wrapped.org.apache.http.client</artifactId>
<version>4.1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-messaging</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.android.gms</groupId>
<artifactId>play-services-base</artifactId>
<version>18.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>androidx.work</groupId>
<artifactId>work-runtime</artifactId>
<version>2.7.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>4.12.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.huawei.agconnect</groupId>
<artifactId>agconnect-core</artifactId>
<version>1.6.2.300</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.huawei.hms</groupId>
<artifactId>base</artifactId>
<version>6.2.0.300</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.huawei.hms</groupId>
<artifactId>push</artifactId>
<version>6.1.0.300</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.huawei.hms</groupId>
<artifactId>ads-identifier</artifactId>
<version>3.4.39.302</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.zetetic</groupId>
<artifactId>android-database-sqlcipher</artifactId>
<version>4.5.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>androidx.sqlite</groupId>
<artifactId>sqlite</artifactId>
<version>2.2.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
-----BEGIN PGP SIGNATURE-----
Version: BCPG v1.68
iQEcBAABCgAGBQJh8+4XAAoJEAIqwpYLX1k+fk8H/3aGTYl9BxfuLRNli7aTZCbO
2WMTi4E4fOlYe8EZkVoHj2B4NJ+XQ/0hMf23fPjpujx1zirNytEGZtTI7XdieSRN
p6FKA9U1ysvF6ryolnRqpsxeZ0wyNp4stlW6Rk5R1Oumh+oruD9c/G/aroRLmXln
cufy07/2y1OLV1Ievk8+dmnXHR83bpVKKO4BF7YBgB/vyeV5X8bCfNJx5goDAP5B
q6nGS8SkWWQWU000uU0klUnmaDL1RlESU+pX1yMatc3R/u6NUnW/C48gSA1iraMO
ROUshoRM3HXeGOCjV7pzSAh2HI/D9DFuvJZh6bVv3EKViFi0XkJAKaYI+IlSOFc=
=KCd+
-----END PGP SIGNATURE-----
ly/warp/sdk/io/models/Card.java
ly.warp.sdk.io.models.Card
ly.warp.sdk.io.models.Card$1
ly/warp/sdk/io/models/Content.java
ly.warp.sdk.io.models.Content
ly.warp.sdk.io.models.Content$1
ly/warp/sdk/io/volley/toolbox/ClearCacheRequest.java
ly.warp.sdk.io.volley.toolbox.ClearCacheRequest
ly/warp/sdk/io/volley/toolbox/HttpStack.java
ly.warp.sdk.io.volley.toolbox.HttpStack
ly/warp/sdk/activities/WarplyListActivity.java
ly.warp.sdk.activities.WarplyListActivity
ly.warp.sdk.activities.WarplyListActivity$1
ly.warp.sdk.activities.WarplyListActivity$2
ly/warp/sdk/dexter/listener/EmptyPermissionRequestErrorListener.java
ly.warp.sdk.dexter.listener.EmptyPermissionRequestErrorListener
ly/warp/sdk/dexter/listener/PermissionRequest.java
ly.warp.sdk.dexter.listener.PermissionRequest
ly/warp/sdk/activities/WarpBaseActivity.java
ly.warp.sdk.activities.WarpBaseActivity
ly/warp/sdk/io/volley/toolbox/RequestFuture.java
ly.warp.sdk.io.volley.toolbox.RequestFuture
ly/warp/sdk/io/request/WarplyTagsCategoriesRequest.java
ly.warp.sdk.io.request.WarplyTagsCategoriesRequest
ly/warp/sdk/io/request/WarplyAuthorizeRequest.java
ly.warp.sdk.io.request.WarplyAuthorizeRequest
ly/warp/sdk/services/PushEventsWorkerService.java
ly.warp.sdk.services.PushEventsWorkerService
ly/warp/sdk/io/volley/toolbox/DiskBasedCache.java
ly.warp.sdk.io.volley.toolbox.DiskBasedCache
ly.warp.sdk.io.volley.toolbox.DiskBasedCache$1
ly.warp.sdk.io.volley.toolbox.DiskBasedCache$CacheHeader
ly.warp.sdk.io.volley.toolbox.DiskBasedCache$CountingInputStream
ly/warp/sdk/services/WarpInAppNotificationService.java
ly.warp.sdk.services.WarpInAppNotificationService
ly/warp/sdk/io/callbacks/ContactHook.java
ly.warp.sdk.io.callbacks.ContactHook
ly/warp/sdk/dexter/listener/multi/BaseMultiplePermissionsListener.java
ly.warp.sdk.dexter.listener.multi.BaseMultiplePermissionsListener
ly/warp/sdk/receivers/WarplyBeaconsApplication.java
ly.warp.sdk.receivers.WarplyBeaconsApplication
ly.warp.sdk.receivers.WarplyBeaconsApplication$1
ly/warp/sdk/io/volley/toolbox/NoCache.java
ly.warp.sdk.io.volley.toolbox.NoCache
ly/warp/sdk/io/request/WarplyResetPasswordRequest.java
ly.warp.sdk.io.request.WarplyResetPasswordRequest
ly/warp/sdk/io/volley/ServerError.java
ly.warp.sdk.io.volley.ServerError
ly/warp/sdk/utils/WarplyInitializer.java
ly.warp.sdk.utils.WarplyInitializer
ly.warp.sdk.utils.WarplyInitializer$1
ly.warp.sdk.utils.WarplyInitializer$2
ly.warp.sdk.utils.WarplyInitializer$WarplyInitCallback
ly/warp/sdk/io/request/WarplyVerifyTicketRequest.java
ly.warp.sdk.io.request.WarplyVerifyTicketRequest
ly/warp/sdk/io/callbacks/VolleyTransformer.java
ly.warp.sdk.io.callbacks.VolleyTransformer
ly/warp/sdk/dexter/listener/PermissionRequestErrorListener.java
ly.warp.sdk.dexter.listener.PermissionRequestErrorListener
ly/warp/sdk/io/volley/AuthFailureError.java
ly.warp.sdk.io.volley.AuthFailureError
ly/warp/sdk/utils/managers/WarplyUserManager.java
ly.warp.sdk.utils.managers.WarplyUserManager
ly.warp.sdk.utils.managers.WarplyUserManager$1
ly.warp.sdk.utils.managers.WarplyUserManager$2
ly.warp.sdk.utils.managers.WarplyUserManager$3
ly.warp.sdk.utils.managers.WarplyUserManager$4
ly.warp.sdk.utils.managers.WarplyUserManager$5
ly.warp.sdk.utils.managers.WarplyUserManager$6
ly.warp.sdk.utils.managers.WarplyUserManager$7
ly.warp.sdk.utils.managers.WarplyUserManager$8
ly.warp.sdk.utils.managers.WarplyUserManager$9
ly/warp/sdk/io/request/WarplyMerchantCategoriesRequest.java
ly.warp.sdk.io.request.WarplyMerchantCategoriesRequest
ly/warp/sdk/io/callbacks/MerchantCategoriesHook.java
ly.warp.sdk.io.callbacks.MerchantCategoriesHook
ly/warp/sdk/views/dialogs/RateDialog.java
ly.warp.sdk.views.dialogs.RateDialog
ly/warp/sdk/io/models/Consumer.java
ly.warp.sdk.io.models.Consumer
ly.warp.sdk.io.models.Consumer$1
ly/warp/sdk/io/callbacks/TransactionsHook.java
ly.warp.sdk.io.callbacks.TransactionsHook
ly/warp/sdk/utils/managers/WarplySessionManager.java
ly.warp.sdk.utils.managers.WarplySessionManager
ly.warp.sdk.utils.managers.WarplySessionManager$1
ly.warp.sdk.utils.managers.WarplySessionManager$ConnectivityReceiver
ly/warp/sdk/io/callbacks/PostHook.java
ly.warp.sdk.io.callbacks.PostHook
ly/warp/sdk/io/request/WarplyRegisterRequest.java
ly.warp.sdk.io.request.WarplyRegisterRequest
ly/warp/sdk/receivers/WarplyInAppNotificationReceiver.java
ly.warp.sdk.receivers.WarplyInAppNotificationReceiver
ly/warp/sdk/receivers/WarplyReferrerReceiver.java
ly.warp.sdk.receivers.WarplyReferrerReceiver
ly/warp/sdk/activities/ApplicationSessionActivity.java
ly.warp.sdk.activities.ApplicationSessionActivity
ly.warp.sdk.activities.ApplicationSessionActivity$SessionStartedListener
ly.warp.sdk.activities.ApplicationSessionActivity$SessionStoppedListener
ly/warp/sdk/utils/WarplyPreferences.java
ly.warp.sdk.utils.WarplyPreferences
ly/warp/sdk/io/request/WarplyMerchantsRequest.java
ly.warp.sdk.io.request.WarplyMerchantsRequest
ly/warp/sdk/activities/ApplicationSessionListActivity.java
ly.warp.sdk.activities.ApplicationSessionListActivity
ly.warp.sdk.activities.ApplicationSessionListActivity$SessionStartedListener
ly.warp.sdk.activities.ApplicationSessionListActivity$SessionStoppedListener
ly/warp/sdk/dexter/listener/PermissionGrantedResponse.java
ly.warp.sdk.dexter.listener.PermissionGrantedResponse
ly/warp/sdk/io/request/WarplyGetAddressRequest.java
ly.warp.sdk.io.request.WarplyGetAddressRequest
ly/warp/sdk/io/models/CardList.java
ly.warp.sdk.io.models.CardList
ly/warp/sdk/dexter/listener/single/DialogOnDeniedPermissionListener.java
ly.warp.sdk.dexter.listener.single.DialogOnDeniedPermissionListener
ly.warp.sdk.dexter.listener.single.DialogOnDeniedPermissionListener$1
ly.warp.sdk.dexter.listener.single.DialogOnDeniedPermissionListener$Builder
ly/warp/sdk/services/WarpIntentService.java
ly.warp.sdk.services.WarpIntentService
ly/warp/sdk/io/models/PushCampaign.java
ly.warp.sdk.io.models.PushCampaign
ly/warp/sdk/utils/managers/WarplyAnalyticsManager.java
ly.warp.sdk.utils.managers.WarplyAnalyticsManager
ly.warp.sdk.utils.managers.WarplyAnalyticsManager$1
ly/warp/sdk/io/models/MerchantCategory.java
ly.warp.sdk.io.models.MerchantCategory
ly.warp.sdk.io.models.MerchantCategory$1
ly/warp/sdk/views/CampaignViewLoader.java
ly.warp.sdk.views.CampaignViewLoader
ly.warp.sdk.views.CampaignViewLoader$DisplayBuilder
ly/warp/sdk/services/UpdateUserLocationService.java
ly.warp.sdk.services.UpdateUserLocationService
ly.warp.sdk.services.UpdateUserLocationService$1
ly.warp.sdk.services.UpdateUserLocationService$2
ly.warp.sdk.services.UpdateUserLocationService$3
ly.warp.sdk.services.UpdateUserLocationService$4
ly.warp.sdk.services.UpdateUserLocationService$firstTask
ly/warp/sdk/io/callbacks/MerchantsHook.java
ly.warp.sdk.io.callbacks.MerchantsHook
ly/warp/sdk/io/volley/toolbox/ByteArrayPool.java
ly.warp.sdk.io.volley.toolbox.ByteArrayPool
ly.warp.sdk.io.volley.toolbox.ByteArrayPool$1
ly/warp/sdk/io/volley/toolbox/HttpClientStack.java
ly.warp.sdk.io.volley.toolbox.HttpClientStack
ly.warp.sdk.io.volley.toolbox.HttpClientStack$1
ly.warp.sdk.io.volley.toolbox.HttpClientStack$TLSSocketFactory
ly.warp.sdk.io.volley.toolbox.HttpClientStack$TLSSocketFactory$1
ly/warp/sdk/dexter/Dexter.java
ly.warp.sdk.dexter.Dexter
ly/warp/sdk/io/request/WarplyRedeemCouponRequest.java
ly.warp.sdk.io.request.WarplyRedeemCouponRequest
ly/warp/sdk/io/models/TagsCategoriesList.java
ly.warp.sdk.io.models.TagsCategoriesList
ly/warp/sdk/io/models/MerchantList.java
ly.warp.sdk.io.models.MerchantList
ly/warp/sdk/dexter/listener/single/CompositePermissionListener.java
ly.warp.sdk.dexter.listener.single.CompositePermissionListener
ly/warp/sdk/io/request/WarplyProductsRequest.java
ly.warp.sdk.io.request.WarplyProductsRequest
ly/warp/sdk/io/callbacks/CouponsHook.java
ly.warp.sdk.io.callbacks.CouponsHook
ly/warp/sdk/utils/constants/WarpConstants.java
ly.warp.sdk.utils.constants.WarpConstants
ly.warp.sdk.utils.constants.WarpConstants$LocationModes
ly.warp.sdk.utils.constants.WarpConstants$LocationSetting
ly.warp.sdk.utils.constants.WarpConstants$MicroApp
ly.warp.sdk.utils.constants.WarpConstants$ServiceRegistrationCallback
ly/warp/sdk/fragments/WarpViewFragment.java
ly.warp.sdk.fragments.WarpViewFragment
ly.warp.sdk.fragments.WarpViewFragment$1
ly.warp.sdk.fragments.WarpViewFragment$2
ly.warp.sdk.fragments.WarpViewFragment$3
ly/warp/sdk/dexter/IntentProvider.java
ly.warp.sdk.dexter.IntentProvider
ly/warp/sdk/views/CampaignItemViewHolder.java
ly.warp.sdk.views.CampaignItemViewHolder
ly/warp/sdk/io/request/WarplyEditAddressRequest.java
ly.warp.sdk.io.request.WarplyEditAddressRequest
ly/warp/sdk/io/models/ContentList.java
ly.warp.sdk.io.models.ContentList
ly/warp/sdk/io/request/WarplyTransactionHistoryRequest.java
ly.warp.sdk.io.request.WarplyTransactionHistoryRequest
ly/warp/sdk/io/callbacks/CallbackReceiver.java
ly.warp.sdk.io.callbacks.CallbackReceiver
ly/warp/sdk/io/volley/toolbox/AndroidAuthenticator.java
ly.warp.sdk.io.volley.toolbox.AndroidAuthenticator
ly/warp/sdk/io/volley/VolleyError.java
ly.warp.sdk.io.volley.VolleyError
ly/warp/sdk/io/models/Tags.java
ly.warp.sdk.io.models.Tags
ly.warp.sdk.io.models.Tags$1
ly/warp/sdk/views/dialogs/RatePreferenceHelper.java
ly.warp.sdk.views.dialogs.RatePreferenceHelper
ly/warp/sdk/views/adapters/mix/CampaignsMixListAdapter.java
ly.warp.sdk.views.adapters.mix.CampaignsMixListAdapter
ly.warp.sdk.views.adapters.mix.CampaignsMixListAdapter$1
ly.warp.sdk.views.adapters.mix.CampaignsMixListAdapter$2
ly.warp.sdk.views.adapters.mix.CampaignsMixListAdapter$Builder
ly/warp/sdk/services/GCMBaseIntentService.java
ly.warp.sdk.services.GCMBaseIntentService
ly/warp/sdk/dexter/AndroidPermissionService.java
ly.warp.sdk.dexter.AndroidPermissionService
ly/warp/sdk/io/callbacks/TagsCategoriesHook.java
ly.warp.sdk.io.callbacks.TagsCategoriesHook
ly/warp/sdk/utils/WarpJSONParser.java
ly.warp.sdk.utils.WarpJSONParser
ly/warp/sdk/services/FCMBaseMessagingService.java
ly.warp.sdk.services.FCMBaseMessagingService
ly/warp/sdk/dexter/listener/PermissionDeniedResponse.java
ly.warp.sdk.dexter.listener.PermissionDeniedResponse
ly/warp/sdk/dexter/DexterInstance.java
ly.warp.sdk.dexter.DexterInstance
ly.warp.sdk.dexter.DexterInstance$1
ly.warp.sdk.dexter.DexterInstance$PermissionStates
ly/warp/sdk/io/request/WarplyPointHistoryRequest.java
ly.warp.sdk.io.request.WarplyPointHistoryRequest
ly/warp/sdk/io/request/WarplyChangePasswordRequest.java
ly.warp.sdk.io.request.WarplyChangePasswordRequest
ly/warp/sdk/io/models/Product.java
ly.warp.sdk.io.models.Product
ly.warp.sdk.io.models.Product$1
ly/warp/sdk/io/callbacks/ContentHook.java
ly.warp.sdk.io.callbacks.ContentHook
ly/warp/sdk/io/callbacks/AddressHook.java
ly.warp.sdk.io.callbacks.AddressHook
ly/warp/sdk/io/callbacks/SimpleCallbackReceiver.java
ly.warp.sdk.io.callbacks.SimpleCallbackReceiver
ly/warp/sdk/io/request/WarplyLoginRequest.java
ly.warp.sdk.io.request.WarplyLoginRequest
ly/warp/sdk/io/models/Campaign.java
ly.warp.sdk.io.models.Campaign
ly.warp.sdk.io.models.Campaign$1
ly/warp/sdk/dexter/ThreadFactory.java
ly.warp.sdk.dexter.ThreadFactory
ly/warp/sdk/io/volley/RetryPolicy.java
ly.warp.sdk.io.volley.RetryPolicy
ly/warp/sdk/io/volley/toolbox/JsonRequest.java
ly.warp.sdk.io.volley.toolbox.JsonRequest
ly/warp/sdk/io/volley/NoConnectionError.java
ly.warp.sdk.io.volley.NoConnectionError
ly/warp/sdk/io/models/PointTransaction.java
ly.warp.sdk.io.models.PointTransaction
ly.warp.sdk.io.models.PointTransaction$1
ly/warp/sdk/dexter/DexterBuilder.java
ly.warp.sdk.dexter.DexterBuilder
ly.warp.sdk.dexter.DexterBuilder$MultiPermissionListener
ly.warp.sdk.dexter.DexterBuilder$Permission
ly.warp.sdk.dexter.DexterBuilder$SinglePermissionListener
ly/warp/sdk/io/volley/ExecutorDelivery.java
ly.warp.sdk.io.volley.ExecutorDelivery
ly.warp.sdk.io.volley.ExecutorDelivery$1
ly.warp.sdk.io.volley.ExecutorDelivery$ResponseDeliveryRunnable
ly/warp/sdk/views/dialogs/IntentHelper.java
ly.warp.sdk.views.dialogs.IntentHelper
ly/warp/sdk/utils/managers/WarplyPushManager.java
ly.warp.sdk.utils.managers.WarplyPushManager
ly/warp/sdk/io/models/TransactionsList.java
ly.warp.sdk.io.models.TransactionsList
ly/warp/sdk/activities/WarplyActivity.java
ly.warp.sdk.activities.WarplyActivity
ly.warp.sdk.activities.WarplyActivity$1
ly.warp.sdk.activities.WarplyActivity$2
ly/warp/sdk/services/WarpBaseIntentService.java
ly.warp.sdk.services.WarpBaseIntentService
ly/warp/sdk/io/request/WarplyUserCouponsRequest.java
ly.warp.sdk.io.request.WarplyUserCouponsRequest
ly/warp/sdk/io/callbacks/PointsHook.java
ly.warp.sdk.io.callbacks.PointsHook
ly/warp/sdk/utils/ObjectSerializer.java
ly.warp.sdk.utils.ObjectSerializer
ly/warp/sdk/io/request/WarplyRefreshTokenRequest.java
ly.warp.sdk.io.request.WarplyRefreshTokenRequest
ly/warp/sdk/dexter/MainThread.java
ly.warp.sdk.dexter.MainThread
ly/warp/sdk/dexter/listener/multi/MultiplePermissionsListener.java
ly.warp.sdk.dexter.listener.multi.MultiplePermissionsListener
ly/warp/sdk/services/WarplyBeaconsRangingService.java
ly.warp.sdk.services.WarplyBeaconsRangingService
ly.warp.sdk.services.WarplyBeaconsRangingService$1
ly.warp.sdk.services.WarplyBeaconsRangingService$2
ly.warp.sdk.services.WarplyBeaconsRangingService$BeaconsRangingServiceBinder
ly.warp.sdk.services.WarplyBeaconsRangingService$SendMessageRunnable
ly.warp.sdk.services.WarplyBeaconsRangingService$SendMessageRunnable$1
ly/warp/sdk/views/adapters/mix/CampaignsMixController.java
ly.warp.sdk.views.adapters.mix.CampaignsMixController
ly.warp.sdk.views.adapters.mix.CampaignsMixController$1
ly.warp.sdk.views.adapters.mix.CampaignsMixController$CampaignTrackClickListener
ly.warp.sdk.views.adapters.mix.CampaignsMixController$MixControllerListener
ly/warp/sdk/receivers/LocationChangedReceiver.java
ly.warp.sdk.receivers.LocationChangedReceiver
ly/warp/sdk/utils/GCMRegistrar.java
ly.warp.sdk.utils.GCMRegistrar
ly/warp/sdk/dexter/listener/multi/CompositeMultiplePermissionsListener.java
ly.warp.sdk.dexter.listener.multi.CompositeMultiplePermissionsListener
ly/warp/sdk/dexter/listener/multi/DialogOnAnyDeniedMultiplePermissionsListener.java
ly.warp.sdk.dexter.listener.multi.DialogOnAnyDeniedMultiplePermissionsListener
ly.warp.sdk.dexter.listener.multi.DialogOnAnyDeniedMultiplePermissionsListener$1
ly.warp.sdk.dexter.listener.multi.DialogOnAnyDeniedMultiplePermissionsListener$Builder
ly/warp/sdk/views/adapters/mix/CampaignsMixRecyclerAdapter.java
ly.warp.sdk.views.adapters.mix.CampaignsMixRecyclerAdapter
ly.warp.sdk.views.adapters.mix.CampaignsMixRecyclerAdapter$1
ly.warp.sdk.views.adapters.mix.CampaignsMixRecyclerAdapter$2
ly.warp.sdk.views.adapters.mix.CampaignsMixRecyclerAdapter$Builder
ly/warp/sdk/io/request/WarplyGetCardsRequest.java
ly.warp.sdk.io.request.WarplyGetCardsRequest
ly/warp/sdk/dexter/PermissionsActivity.java
ly.warp.sdk.dexter.PermissionsActivity
ly/warp/sdk/io/volley/toolbox/NetworkImageView.java
ly.warp.sdk.io.volley.toolbox.NetworkImageView
ly.warp.sdk.io.volley.toolbox.NetworkImageView$1
ly.warp.sdk.io.volley.toolbox.NetworkImageView$1$1
ly/warp/sdk/io/request/WarplyRequestOTPRequest.java
ly.warp.sdk.io.request.WarplyRequestOTPRequest
ly/warp/sdk/io/callbacks/CampaignsHook.java
ly.warp.sdk.io.callbacks.CampaignsHook
ly/warp/sdk/io/request/WarplyTagsRequest.java
ly.warp.sdk.io.request.WarplyTagsRequest
ly/warp/sdk/io/volley/Request.java
ly.warp.sdk.io.volley.Request
ly.warp.sdk.io.volley.Request$1
ly.warp.sdk.io.volley.Request$Method
ly.warp.sdk.io.volley.Request$Priority
ly/warp/sdk/views/CampaignItemWebHolder.java
ly.warp.sdk.views.CampaignItemWebHolder
ly.warp.sdk.views.CampaignItemWebHolder$1
ly.warp.sdk.views.CampaignItemWebHolder$2
ly.warp.sdk.views.CampaignItemWebHolder$3
ly/warp/sdk/dexter/MultiplePermissionListenerThreadDecorator.java
ly.warp.sdk.dexter.MultiplePermissionListenerThreadDecorator
ly.warp.sdk.dexter.MultiplePermissionListenerThreadDecorator$1
ly.warp.sdk.dexter.MultiplePermissionListenerThreadDecorator$2
ly/warp/sdk/utils/WarplyDeviceInfoCollector.java
ly.warp.sdk.utils.WarplyDeviceInfoCollector
ly/warp/sdk/io/volley/TimeoutError.java
ly.warp.sdk.io.volley.TimeoutError
ly/warp/sdk/io/callbacks/CardsHook.java
ly.warp.sdk.io.callbacks.CardsHook
ly/warp/sdk/io/callbacks/TagsHook.java
ly.warp.sdk.io.callbacks.TagsHook
ly/warp/sdk/io/request/WarplyInboxRequest.java
ly.warp.sdk.io.request.WarplyInboxRequest
ly.warp.sdk.io.request.WarplyInboxRequest$DisplayType
ly/warp/sdk/io/callbacks/BaseCallbackReceiver.java
ly.warp.sdk.io.callbacks.BaseCallbackReceiver
ly/warp/sdk/io/models/WarpGeoFence.java
ly.warp.sdk.io.models.WarpGeoFence
ly/warp/sdk/receivers/GCMBroadcastReceiver.java
ly.warp.sdk.receivers.GCMBroadcastReceiver
ly/warp/sdk/utils/managers/WarplyManager.java
ly.warp.sdk.utils.managers.WarplyManager
ly.warp.sdk.utils.managers.WarplyManager$1
ly.warp.sdk.utils.managers.WarplyManager$10
ly.warp.sdk.utils.managers.WarplyManager$10$1
ly.warp.sdk.utils.managers.WarplyManager$11
ly.warp.sdk.utils.managers.WarplyManager$11$1
ly.warp.sdk.utils.managers.WarplyManager$12
ly.warp.sdk.utils.managers.WarplyManager$12$1
ly.warp.sdk.utils.managers.WarplyManager$13
ly.warp.sdk.utils.managers.WarplyManager$14
ly.warp.sdk.utils.managers.WarplyManager$14$1
ly.warp.sdk.utils.managers.WarplyManager$15
ly.warp.sdk.utils.managers.WarplyManager$15$1
ly.warp.sdk.utils.managers.WarplyManager$16
ly.warp.sdk.utils.managers.WarplyManager$16$1
ly.warp.sdk.utils.managers.WarplyManager$17
ly.warp.sdk.utils.managers.WarplyManager$17$1
ly.warp.sdk.utils.managers.WarplyManager$18
ly.warp.sdk.utils.managers.WarplyManager$18$1
ly.warp.sdk.utils.managers.WarplyManager$19
ly.warp.sdk.utils.managers.WarplyManager$19$1
ly.warp.sdk.utils.managers.WarplyManager$2
ly.warp.sdk.utils.managers.WarplyManager$20
ly.warp.sdk.utils.managers.WarplyManager$20$1
ly.warp.sdk.utils.managers.WarplyManager$21
ly.warp.sdk.utils.managers.WarplyManager$21$1
ly.warp.sdk.utils.managers.WarplyManager$22
ly.warp.sdk.utils.managers.WarplyManager$23
ly.warp.sdk.utils.managers.WarplyManager$24
ly.warp.sdk.utils.managers.WarplyManager$25
ly.warp.sdk.utils.managers.WarplyManager$3
ly.warp.sdk.utils.managers.WarplyManager$4
ly.warp.sdk.utils.managers.WarplyManager$5
ly.warp.sdk.utils.managers.WarplyManager$6
ly.warp.sdk.utils.managers.WarplyManager$6$1
ly.warp.sdk.utils.managers.WarplyManager$7
ly.warp.sdk.utils.managers.WarplyManager$7$1
ly.warp.sdk.utils.managers.WarplyManager$8
ly.warp.sdk.utils.managers.WarplyManager$8$1
ly.warp.sdk.utils.managers.WarplyManager$9
ly.warp.sdk.utils.managers.WarplyManager$9$1
ly/warp/sdk/io/models/Merchant.java
ly.warp.sdk.io.models.Merchant
ly.warp.sdk.io.models.Merchant$1
ly/warp/sdk/dexter/listener/single/PermissionListener.java
ly.warp.sdk.dexter.listener.single.PermissionListener
ly/warp/sdk/Warply.java
ly.warp.sdk.Warply
ly.warp.sdk.Warply$1
ly.warp.sdk.Warply$10
ly.warp.sdk.Warply$11
ly.warp.sdk.Warply$2
ly.warp.sdk.Warply$3
ly.warp.sdk.Warply$4
ly.warp.sdk.Warply$5
ly.warp.sdk.Warply$6
ly.warp.sdk.Warply$7
ly.warp.sdk.Warply$8
ly.warp.sdk.Warply$9
ly/warp/sdk/receivers/WarplyCustomPushActionsReceiver.java
ly.warp.sdk.receivers.WarplyCustomPushActionsReceiver
ly/warp/sdk/io/models/TagCategory.java
ly.warp.sdk.io.models.TagCategory
ly.warp.sdk.io.models.TagCategory$1
ly/warp/sdk/io/volley/RequestQueue.java
ly.warp.sdk.io.volley.RequestQueue
ly.warp.sdk.io.volley.RequestQueue$1
ly.warp.sdk.io.volley.RequestQueue$RequestFilter
ly/warp/sdk/io/volley/toolbox/Authenticator.java
ly.warp.sdk.io.volley.toolbox.Authenticator
ly/warp/sdk/io/volley/toolbox/HurlStack.java
ly.warp.sdk.io.volley.toolbox.HurlStack
ly.warp.sdk.io.volley.toolbox.HurlStack$UrlRewriter
ly/warp/sdk/io/request/WarplyAddAddressRequest.java
ly.warp.sdk.io.request.WarplyAddAddressRequest
ly/warp/sdk/io/models/Address.java
ly.warp.sdk.io.models.Address
ly.warp.sdk.io.models.Address$1
ly/warp/sdk/io/volley/toolbox/ImageLoader.java
ly.warp.sdk.io.volley.toolbox.ImageLoader
ly.warp.sdk.io.volley.toolbox.ImageLoader$1
ly.warp.sdk.io.volley.toolbox.ImageLoader$2
ly.warp.sdk.io.volley.toolbox.ImageLoader$3
ly.warp.sdk.io.volley.toolbox.ImageLoader$4
ly.warp.sdk.io.volley.toolbox.ImageLoader$BatchedImageRequest
ly.warp.sdk.io.volley.toolbox.ImageLoader$ImageCache
ly.warp.sdk.io.volley.toolbox.ImageLoader$ImageContainer
ly.warp.sdk.io.volley.toolbox.ImageLoader$ImageListener
ly/warp/sdk/dexter/MultiplePermissionsListenerToPermissionListenerAdapter.java
ly.warp.sdk.dexter.MultiplePermissionsListenerToPermissionListenerAdapter
ly/warp/sdk/dexter/Thread.java
ly.warp.sdk.dexter.Thread
ly/warp/sdk/db/WarplyDBHelper.java
ly.warp.sdk.db.WarplyDBHelper
ly.warp.sdk.db.WarplyDBHelper$State
ly/warp/sdk/io/volley/toolbox/JsonArrayRequest.java
ly.warp.sdk.io.volley.toolbox.JsonArrayRequest
ly/warp/sdk/services/HMSBaseMessagingService.java
ly.warp.sdk.services.HMSBaseMessagingService
ly.warp.sdk.services.HMSBaseMessagingService$URLThread
ly/warp/sdk/io/volley/CacheDispatcher.java
ly.warp.sdk.io.volley.CacheDispatcher
ly.warp.sdk.io.volley.CacheDispatcher$1
ly/warp/sdk/io/volley/toolbox/BasicNetwork.java
ly.warp.sdk.io.volley.toolbox.BasicNetwork
ly/warp/sdk/io/callbacks/WarplyReadyCallback.java
ly.warp.sdk.io.callbacks.WarplyReadyCallback
ly/warp/sdk/io/models/CampaignAction.java
ly.warp.sdk.io.models.CampaignAction
ly.warp.sdk.io.models.CampaignAction$1
ly/warp/sdk/activities/WarpViewActivity.java
ly.warp.sdk.activities.WarpViewActivity
ly.warp.sdk.activities.WarpViewActivity$1
ly/warp/sdk/utils/managers/WarplyServerPreferencesManager.java
ly.warp.sdk.utils.managers.WarplyServerPreferencesManager
ly.warp.sdk.utils.managers.WarplyServerPreferencesManager$1
ly.warp.sdk.utils.managers.WarplyServerPreferencesManager$ServerPreferencesReceivedListener
ly/warp/sdk/views/dialogs/RateDialogManager.java
ly.warp.sdk.views.dialogs.RateDialogManager
ly.warp.sdk.views.dialogs.RateDialogManager$1
ly.warp.sdk.views.dialogs.RateDialogManager$2
ly.warp.sdk.views.dialogs.RateDialogManager$3
ly.warp.sdk.views.dialogs.RateDialogManager$4
ly.warp.sdk.views.dialogs.RateDialogManager$5
ly.warp.sdk.views.dialogs.RateDialogManager$6
ly/warp/sdk/io/callbacks/InboxStatsHook.java
ly.warp.sdk.io.callbacks.InboxStatsHook
ly/warp/sdk/io/models/CampaignList.java
ly.warp.sdk.io.models.CampaignList
ly/warp/sdk/io/request/WarplyContentRequest.java
ly.warp.sdk.io.request.WarplyContentRequest
ly/warp/sdk/dexter/MultiplePermissionsReport.java
ly.warp.sdk.dexter.MultiplePermissionsReport
ly/warp/sdk/views/adapters/mix/CampaignsMixTracker.java
ly.warp.sdk.views.adapters.mix.CampaignsMixTracker
ly.warp.sdk.views.adapters.mix.CampaignsMixTracker$1
ly.warp.sdk.views.adapters.mix.CampaignsMixTracker$TrackCampaignsTask
ly.warp.sdk.views.adapters.mix.CampaignsMixTracker$TrackEvent
ly/warp/sdk/dexter/WorkerThread.java
ly.warp.sdk.dexter.WorkerThread
ly/warp/sdk/io/volley/toolbox/ImageRequest.java
ly.warp.sdk.io.volley.toolbox.ImageRequest
ly/warp/sdk/views/WarpView.java
ly.warp.sdk.views.WarpView
ly.warp.sdk.views.WarpView$1
ly.warp.sdk.views.WarpView$ProgressChangeListener
ly.warp.sdk.views.WarpView$WarplyWebChromeClient
ly.warp.sdk.views.WarpView$WarplyWebViewClient
ly.warp.sdk.views.WarpView$WarplyWebViewClient$1
ly.warp.sdk.views.WarpView$WarplyWebViewClient$2
ly/warp/sdk/io/volley/toolbox/Volley.java
ly.warp.sdk.io.volley.toolbox.Volley
ly/warp/sdk/views/dialogs/RateDialogOptions.java
ly.warp.sdk.views.dialogs.RateDialogOptions
ly/warp/sdk/io/models/Coupon.java
ly.warp.sdk.io.models.Coupon
ly.warp.sdk.io.models.Coupon$1
ly/warp/sdk/utils/WarpUtils.java
ly.warp.sdk.utils.WarpUtils
ly.warp.sdk.utils.WarpUtils$1
ly.warp.sdk.utils.WarpUtils$2
ly/warp/sdk/io/volley/Cache.java
ly.warp.sdk.io.volley.Cache
ly.warp.sdk.io.volley.Cache$Entry
ly/warp/sdk/io/volley/NetworkDispatcher.java
ly.warp.sdk.io.volley.NetworkDispatcher
ly/warp/sdk/io/volley/Response.java
ly.warp.sdk.io.volley.Response
ly.warp.sdk.io.volley.Response$ErrorListener
ly.warp.sdk.io.volley.Response$Listener
ly/warp/sdk/io/request/WarplyContactRequest.java
ly.warp.sdk.io.request.WarplyContactRequest
ly/warp/sdk/io/models/MerchantCategoriesList.java
ly.warp.sdk.io.models.MerchantCategoriesList
ly/warp/sdk/io/request/WarplyAddCardRequest.java
ly.warp.sdk.io.request.WarplyAddCardRequest
ly/warp/sdk/io/models/AddressList.java
ly.warp.sdk.io.models.AddressList
ly/warp/sdk/io/models/PointsList.java
ly.warp.sdk.io.models.PointsList
ly/warp/sdk/utils/WarplyProperty.java
ly.warp.sdk.utils.WarplyProperty
ly/warp/sdk/services/PushEventsClickedWorkerService.java
ly.warp.sdk.services.PushEventsClickedWorkerService
ly/warp/sdk/io/models/InboxStats.java
ly.warp.sdk.io.models.InboxStats
ly/warp/sdk/io/volley/Network.java
ly.warp.sdk.io.volley.Network
ly/warp/sdk/io/volley/NetworkError.java
ly.warp.sdk.io.volley.NetworkError
ly/warp/sdk/io/volley/toolbox/HttpHeaderParser.java
ly.warp.sdk.io.volley.toolbox.HttpHeaderParser
ly/warp/sdk/services/PushAnalyticsService.java
ly.warp.sdk.services.PushAnalyticsService
ly/warp/sdk/io/volley/toolbox/StringRequest.java
ly.warp.sdk.io.volley.toolbox.StringRequest
ly/warp/sdk/io/request/WarplyJsonArrayRequest.java
ly.warp.sdk.io.request.WarplyJsonArrayRequest
ly/warp/sdk/io/volley/VolleyLog.java
ly.warp.sdk.io.volley.VolleyLog
ly.warp.sdk.io.volley.VolleyLog$MarkerLog
ly.warp.sdk.io.volley.VolleyLog$MarkerLog$Marker
ly/warp/sdk/io/volley/toolbox/PoolingByteArrayOutputStream.java
ly.warp.sdk.io.volley.toolbox.PoolingByteArrayOutputStream
ly/warp/sdk/io/volley/NetworkResponse.java
ly.warp.sdk.io.volley.NetworkResponse
ly/warp/sdk/io/models/BeaconMessage.java
ly.warp.sdk.io.models.BeaconMessage
ly/warp/sdk/utils/GoogleAdInfoClient.java
ly.warp.sdk.utils.GoogleAdInfoClient
ly.warp.sdk.utils.GoogleAdInfoClient$1
ly.warp.sdk.utils.GoogleAdInfoClient$AdServiceConnection
ly.warp.sdk.utils.GoogleAdInfoClient$GoogleAdInfo
ly.warp.sdk.utils.GoogleAdInfoClient$GoogleAdInfoFetcher
ly/warp/sdk/io/volley/toolbox/JsonObjectRequest.java
ly.warp.sdk.io.volley.toolbox.JsonObjectRequest
ly/warp/sdk/utils/constants/GCMConstants.java
ly.warp.sdk.utils.constants.GCMConstants
ly/warp/sdk/io/request/WarplyEditConsumerRequest.java
ly.warp.sdk.io.request.WarplyEditConsumerRequest
ly/warp/sdk/io/volley/ResponseDelivery.java
ly.warp.sdk.io.volley.ResponseDelivery
ly/warp/sdk/utils/WarplyUrlHandler.java
ly.warp.sdk.utils.WarplyUrlHandler
ly/warp/sdk/views/dialogs/InAppDialog.java
ly.warp.sdk.views.dialogs.InAppDialog
ly.warp.sdk.views.dialogs.InAppDialog$1
ly/warp/sdk/utils/managers/WarplyLocationManager.java
ly.warp.sdk.utils.managers.WarplyLocationManager
ly.warp.sdk.utils.managers.WarplyLocationManager$1
ly.warp.sdk.utils.managers.WarplyLocationManager$2
ly/warp/sdk/BuildConfig.java
ly.warp.sdk.BuildConfig
ly/warp/sdk/io/volley/ParseError.java
ly.warp.sdk.io.volley.ParseError
ly/warp/sdk/io/request/WarplyConsumerRequest.java
ly.warp.sdk.io.request.WarplyConsumerRequest
ly/warp/sdk/dexter/PermissionToken.java
ly.warp.sdk.dexter.PermissionToken
ly/warp/sdk/utils/PermissionsUtil.java
ly.warp.sdk.utils.PermissionsUtil
ly.warp.sdk.utils.PermissionsUtil$1
ly.warp.sdk.utils.PermissionsUtil$2
ly.warp.sdk.utils.PermissionsUtil$3
ly.warp.sdk.utils.PermissionsUtil$PermissionCallback
ly/warp/sdk/dexter/listener/single/BasePermissionListener.java
ly.warp.sdk.dexter.listener.single.BasePermissionListener
ly/warp/sdk/dexter/PermissionRationaleToken.java
ly.warp.sdk.dexter.PermissionRationaleToken
ly/warp/sdk/io/models/TagsList.java
ly.warp.sdk.io.models.TagsList
ly/warp/sdk/io/models/ProductList.java
ly.warp.sdk.io.models.ProductList
ly/warp/sdk/io/models/Transaction.java
ly.warp.sdk.io.models.Transaction
ly.warp.sdk.io.models.Transaction$1
ly/warp/sdk/io/request/WarplyVerifyOTPRequest.java
ly.warp.sdk.io.request.WarplyVerifyOTPRequest
ly/warp/sdk/receivers/ConnectivityChangedReceiver.java
ly.warp.sdk.receivers.ConnectivityChangedReceiver
ly/warp/sdk/io/request/WarplyTokenAuthorizeRequest.java
ly.warp.sdk.io.request.WarplyTokenAuthorizeRequest
ly/warp/sdk/io/models/CouponList.java
ly.warp.sdk.io.models.CouponList
ly/warp/sdk/views/dialogs/OnClickButtonListener.java
ly.warp.sdk.views.dialogs.OnClickButtonListener
ly/warp/sdk/dexter/listener/DexterError.java
ly.warp.sdk.dexter.listener.DexterError
ly/warp/sdk/dexter/DexterException.java
ly.warp.sdk.dexter.DexterException
ly/warp/sdk/io/request/WarplyDeleteCardRequest.java
ly.warp.sdk.io.request.WarplyDeleteCardRequest
ly/warp/sdk/io/callbacks/ProductsHook.java
ly.warp.sdk.io.callbacks.ProductsHook
ly/warp/sdk/io/request/WarplyForgotPasswordRequest.java
ly.warp.sdk.io.request.WarplyForgotPasswordRequest
ly/warp/sdk/io/volley/DefaultRetryPolicy.java
ly.warp.sdk.io.volley.DefaultRetryPolicy
ly/warp/sdk/views/adapters/CampaignsArrayAdapter.java
ly.warp.sdk.views.adapters.CampaignsArrayAdapter
ly.warp.sdk.views.adapters.CampaignsArrayAdapter$1
ly/warp/sdk/io/request/WarplyJsonObjectRequest.java
ly.warp.sdk.io.request.WarplyJsonObjectRequest
ly/warp/sdk/io/request/WarplyDeleteAddressRequest.java
ly.warp.sdk.io.request.WarplyDeleteAddressRequest
ly/warp/sdk/receivers/BluetoothStateChangeReceiver.java
ly.warp.sdk.receivers.BluetoothStateChangeReceiver
ly/warp/sdk/io/request/WarplyUploadConsumerPhotoRequest.java
ly.warp.sdk.io.request.WarplyUploadConsumerPhotoRequest
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>ly.warp</groupId>
<artifactId>warply-android-sdk</artifactId>
<versioning>
<latest>4.5.0</latest>
<release>4.5.0</release>
<versions>
<version>4.5.0</version>
</versions>
<lastUpdated>20220128132240</lastUpdated>
</versioning>
</metadata>
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:\Users\philimon\AppData\Local\Android\sdk1/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
#-keep,includedescriptorclasses class com.google.android.gms.** { *; }
#-keep,includedescriptorclasses class com.google.android.gms.internal.** { *; }
#-keep class com.google.android.gms.internal.** {com.google.android.gms.internal.** initialize(android.content.Context);}
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.huawei.hianalytics.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
-keep,includedescriptorclasses class net.sqlcipher.** { *; }
-keep,includedescriptorclasses interface net.sqlcipher.** { *; }
\ No newline at end of file
package ly.warp.sdk.views;
import android.content.Context;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.text.TextUtils;
import ly.warp.sdk.BuildConfig;
import ly.warp.sdk.Warply;
import ly.warp.sdk.fragments.WarpViewFragment;
import ly.warp.sdk.io.callbacks.CallbackReceiver;
import ly.warp.sdk.io.callbacks.SimpleCallbackReceiver;
import ly.warp.sdk.io.models.CampaignList;
import ly.warp.sdk.io.request.WarplyInboxRequest;
public class CampaignViewLoader implements CallbackReceiver<CampaignList> {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private DisplayBuilder mLastDisplayBuilder;
private SimpleCallbackReceiver<CampaignList> mExternalListener;
// ===========================================================
// Constructors
// ===========================================================
public CampaignViewLoader(Context context) {
Warply.getInitializer(context).init();
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onSuccess(CampaignList result) {
if (result != null && result.size() > 0) {
showWarplyFragment(mLastDisplayBuilder, result.get(0).getSessionUUID());
}
notifySuccessExternalListener(result);
}
@Override
public void onFailure(int errorCode) {
notifyFailureExternalListener(errorCode);
}
// ===========================================================
// Methods
// ===========================================================
private void requestCampaignsIfNeed(DisplayBuilder builder, WarplyInboxRequest request, String sessionUuid) {
if (request != null && TextUtils.isEmpty(sessionUuid)) {
mLastDisplayBuilder = builder;
Warply.getInbox(request, this);
} else if (!TextUtils.isEmpty(sessionUuid)) {
showWarplyFragment(builder, sessionUuid);
notifySuccessExternalListener(null);
}
}
private void showWarplyFragment(DisplayBuilder builder, String sessionUuid) {
if (builder != null && builder.fragmentManager != null) {
WarpViewFragment warpFragment = WarpViewFragment.newInstance(sessionUuid, builder.isUseProgress, builder.isShowCloseBtn);
FragmentTransaction transaction = builder.fragmentManager.beginTransaction()
.replace(builder.containerId, warpFragment,
WarpViewFragment.class.getSimpleName())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (builder.isAddToBackStack) {
transaction.addToBackStack(null);
}
try {
transaction.commit();
} catch (IllegalStateException e) {
if (BuildConfig.DEBUG) {
e.printStackTrace();
}
}
}
}
private void notifySuccessExternalListener(CampaignList campaigns) {
if (mExternalListener != null) {
mExternalListener.onSuccess(campaigns);
}
}
private void notifyFailureExternalListener(int errorCode) {
if (mExternalListener != null) {
mExternalListener.onFailure(errorCode);
}
}
// ===========================================================
// Getter & Setter
// ===========================================================
public void setCampaignsListener(SimpleCallbackReceiver<CampaignList> listener) {
this.mExternalListener = listener;
}
public DisplayBuilder DisplayBuilder() {
return new DisplayBuilder();
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
public class DisplayBuilder {
private boolean isUseProgress = false;
private boolean isShowCloseBtn = true;
private boolean isAddToBackStack = true;
private FragmentManager fragmentManager;
private int containerId;
public void display(FragmentActivity activity, WarplyInboxRequest request) {
if (activity != null && !activity.isFinishing()) {
display(activity, android.R.id.content, request);
}
}
public void display(FragmentActivity activity, int containerId, WarplyInboxRequest request) {
if (activity != null && !activity.isFinishing()) {
this.fragmentManager = activity.getSupportFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, request, null);
}
}
public void display(Fragment parentFragment, int containerId, WarplyInboxRequest request) {
if (parentFragment != null && parentFragment.getActivity() != null && !parentFragment.getActivity().isFinishing()) {
this.fragmentManager = parentFragment.getChildFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, request, null);
}
}
public void display(FragmentActivity activity, String sessionUuid) {
if (activity != null && !activity.isFinishing()) {
display(activity, android.R.id.content, sessionUuid);
}
}
public void display(FragmentActivity activity, int containerId, String sessionUuid) {
if (activity != null && !activity.isFinishing()) {
this.fragmentManager = activity.getSupportFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, null, sessionUuid);
}
}
public void display(Fragment parentFragment, int containerId, String sessionUuid) {
if (parentFragment != null && parentFragment.getActivity() != null && !parentFragment.getActivity().isFinishing()) {
this.fragmentManager = parentFragment.getChildFragmentManager();
this.containerId = containerId;
requestCampaignsIfNeed(this, null, sessionUuid);
}
}
public DisplayBuilder setUseProgress(boolean use) {
this.isUseProgress = use;
return this;
}
public DisplayBuilder setShowCloseBtn(boolean show) {
this.isShowCloseBtn = show;
return this;
}
public DisplayBuilder setAddToBackStack(boolean add) {
this.isAddToBackStack = add;
return this;
}
}
}
package ly.warp.sdk.views.adapters.mix;
import android.os.AsyncTask;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import ly.warp.sdk.io.models.Campaign;
import ly.warp.sdk.utils.WarpUtils;
import ly.warp.sdk.utils.managers.WarplyAnalyticsManager;
/**
* Helper class that used within the {@Link CampaignsMixController}
* and allow to track native campaigns events.
* Mix adapters monitor 2 types of events: view campaign in list and click on campaign item.
*/
public class CampaignsMixTracker {
// ===========================================================
// Constants
// ===========================================================
private enum TrackEvent {
CAMPAIGN_VIEW("native_campaign_view"), CAMPAIGN_CLICK("native_campaign_click");
private String type;
TrackEvent(String type) {
this.type = type;
}
public String getTrackMessage(@NonNull Campaign campaign) {
return type + ":" + campaign.getSessionUUID();
}
}
// ===========================================================
// Fields
// ===========================================================
private CampaignsMixController mMixController;
private int mOldFirstVisibleItem = -1;
private HashSet<Integer> mVisibleCampaignIndexes;
private Set<Integer> mNewCampaignIndexes;
private Set<Integer> mUpdatedCampaignIndexes;
// ===========================================================
// Constructors
// ===========================================================
public CampaignsMixTracker(@NonNull CampaignsMixController mixController) {
mMixController = mixController;
mVisibleCampaignIndexes = new HashSet<>();
mNewCampaignIndexes = new HashSet<>();
mUpdatedCampaignIndexes = new HashSet<>();
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
/**
* call in onScroll for correct results
*
* @param firstVisiblePosition - first visible position in global adapter
* @param lastVisibleItemPosition - last visible position in global adapter
*/
public void trackCampaignsView(int firstVisiblePosition, int lastVisibleItemPosition) {
if (lastVisibleItemPosition >= firstVisiblePosition && mOldFirstVisibleItem != firstVisiblePosition) {
mOldFirstVisibleItem = firstVisiblePosition;
/*Log.i("list_view_scroll", "first: " + firstVisibleItem + " visibleCount: " + visibleItemCount +
" last: " +lastVisibleItem);*/
mNewCampaignIndexes.clear();
mUpdatedCampaignIndexes.clear();
for (int i = firstVisiblePosition; i < lastVisibleItemPosition + 1; i++) {
if (mMixController.getItemViewType(i) == mMixController.getCampaignItemViewType()) {
// if new campaign index
if (mVisibleCampaignIndexes.add(i)) {
mNewCampaignIndexes.add(i);
} else {
mUpdatedCampaignIndexes.add(i);
}
}
}
// retain only visible indexes
mVisibleCampaignIndexes.clear();
mVisibleCampaignIndexes.addAll(mUpdatedCampaignIndexes);
mVisibleCampaignIndexes.addAll(mNewCampaignIndexes);
// update new campaigns
if (mNewCampaignIndexes.size() > 0) {
new TrackCampaignsTask(mNewCampaignIndexes, TrackEvent.CAMPAIGN_VIEW).execute();
}
}
}
public void trackCampaignClick(Campaign campaign) {
if (campaign != null) {
new TrackCampaignsTask(campaign, TrackEvent.CAMPAIGN_CLICK).execute();
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
private class TrackCampaignsTask extends AsyncTask<Void, Void, Void> {
private List<Campaign> mmTrackCampaigns;
private TrackEvent mmTrackEvent;
private TrackCampaignsTask(Set<Integer> indexes, TrackEvent event) {
mmTrackEvent = event;
if (indexes != null && indexes.size() > 0) {
mmTrackCampaigns = new ArrayList<>(indexes.size());
for (int index : indexes) {
Campaign camp = mMixController.getCampaignItem(index);
if (camp != null) {
mmTrackCampaigns.add(camp);
}
}
}
}
private TrackCampaignsTask(Campaign campaign, TrackEvent event) {
mmTrackEvent = event;
if (campaign != null) {
mmTrackCampaigns = new ArrayList<>(1);
mmTrackCampaigns.add(campaign);
}
}
@Override
protected Void doInBackground(Void... params) {
if (mmTrackCampaigns != null) {
for (Campaign campaign : mmTrackCampaigns) {
WarplyAnalyticsManager.logEvent(null, mmTrackEvent.getTrackMessage(campaign), null);
WarpUtils.log("track_campaigns - " + mmTrackEvent.getTrackMessage(campaign) + " - " + campaign.getTitle());
}
}
return null;
}
}
}
package ly.warp.sdk.views.dialogs;
import android.content.Context;
import androidx.appcompat.app.AlertDialog;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import ly.warp.sdk.R;
import ly.warp.sdk.activities.WarpViewActivity;
import ly.warp.sdk.io.models.Campaign;
/**
* Created by Panagiotis Triantafyllou on 28-Mar-19.
*/
public class InAppDialog {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private static Context mContext;
private static AlertDialog mInAppDialog;
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public static void showDefaultInAppDialog(Context context, Campaign campaignToShow, boolean showViewBtn, int v) {
mContext = context;
showDefaultInAppDialog(context, campaignToShow, showViewBtn);
}
private static void showDefaultInAppDialog(final Context context, final Campaign campaignToShow, boolean showViewBtn) {
if (mInAppDialog != null && mInAppDialog.isShowing()) {
mInAppDialog.dismiss();
}
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customView = inflater.inflate(R.layout.layout_inapp_alert_dialog_default, null);
LinearLayout customButtonsView = customView.findViewById(R.id.ll_custom_buttons_view);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.RIGHT | Gravity.END;
ImageView campaignImage = customView.findViewById(R.id.iv_inapp_image);
TextView campaignTitle = customView.findViewById(R.id.tv_inapp_title);
TextView campaignSubtitle = customView.findViewById(R.id.tv_inapp_subtitle);
Glide
.with(context)
.load(campaignToShow.getLogoUrl())
.placeholder(R.drawable.ic_default_campaign)
.into(campaignImage);
campaignTitle.setText(campaignToShow.getTitle());
campaignSubtitle.setText(campaignToShow.getSubtitle());
if (showViewBtn) {
String[] items = {"View", "Close"};
TextView viewBtn = new TextView(context);
viewBtn.setId(0);
viewBtn.setTag(items[0]);
viewBtn.setText(items[0]);
viewBtn.setTextAppearance(context, R.style.InAppButtonsStyle);
viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(WarpViewActivity.createIntentFromSessionUUID(mContext,
campaignToShow.getSessionUUID()));
mInAppDialog.dismiss();
}
});
customButtonsView.addView(viewBtn, params);
// dialog.setItems(items, new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int which) {
// switch (which) {
// case 0:
// context.startActivity(WarpViewActivity.createIntentFromSessionUUID(context,
// campaignToShow.getSessionUUID()));
// break;
//
// case 1:
// break;
// }
// }
// });
mInAppDialog = new AlertDialog.Builder(context)
.setView(customView)
.create();
mInAppDialog.show();
} else {
// AlertDialog.Builder dialog = new AlertDialog.Builder(context);
// mInAppDialog.setView(customView);
// mInAppDialog.setNegativeButton("Close", new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int id) {
// }
// });
// mInAppDialog = new AlertDialog.Builder(context)
// .create();
// mInAppDialog.show();
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
package ly.warp.sdk.views.dialogs;
public interface OnClickButtonListener {
void onClickButton(int which);
}
\ No newline at end of file
package ly.warp.sdk.views.dialogs;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import java.util.Date;
public class RateDialog {
private static RateDialog singleton;
private Context context;
private final RateDialogOptions options = new RateDialogOptions();
private int installDate = -1;
private int launchTimes = -1;
private int remindInterval = 1;
private int eventsTimes = -1;
private boolean isDebug = false;
public RateDialog(Context context) {
this.context = context;
}
public static RateDialog with(Context context) {
if (singleton == null) {
synchronized (RateDialog.class) {
if (singleton == null) {
singleton = new RateDialog(context);
}
}
}
return singleton;
}
public void launch() {
if(RatePreferenceHelper.isFirstLaunch(context)) {
RatePreferenceHelper.setInstallDate(context);
}
RatePreferenceHelper.setLaunchTimes(context, RatePreferenceHelper.getLaunchTimes(context) + 1);
}
public static boolean showRateDialogIfMeetsConditions(Activity activity) {
boolean isMeetsConditions = singleton.isDebug || singleton.shouldShowRateDialog();
if (isMeetsConditions) {
singleton.showRateDialog(activity);
}
return isMeetsConditions;
}
public static boolean passSignificantEventAndConditions(Activity activity) {
return passSignificantEvent(activity, singleton.shouldShowRateDialog());
}
private static boolean passSignificantEvent(Activity activity, boolean shouldShow) {
int eventTimes = RatePreferenceHelper.getEventTimes(activity);
RatePreferenceHelper.setEventTimes(activity, ++eventTimes);
boolean isMeetsConditions = singleton.isDebug || (singleton.isOverEventTimes() && shouldShow);
if (isMeetsConditions) {
singleton.showRateDialog(activity);
}
return isMeetsConditions;
}
public RateDialog clearPreferenceSettings() {
RatePreferenceHelper.setAgreeShowDialog(context, true);
RatePreferenceHelper.clearSharedPreferences(context);
return this;
}
private static boolean isOverDate(long targetDate, int threshold) {
return new Date().getTime() - targetDate >= threshold * 24 * 60 * 60 * 1000;
}
public boolean shouldShowRateDialog() {
return RatePreferenceHelper.getIsAgreeShowDialog(context) &&
isOverLaunchTimes() &&
isOverInstallDate() &&
isOverIntervalDate();
}
public boolean isOverInstallDate() {
if(installDate == -1)
return true;
return isOverDate(RatePreferenceHelper.getInstallDate(context), installDate);
}
public boolean isOverIntervalDate() {
return isOverDate(RatePreferenceHelper.getRemindIntervalDate(context), remindInterval);
}
public boolean isOverLaunchTimes() {
if(launchTimes == -1)
return true;
return RatePreferenceHelper.getLaunchTimes(context) >= launchTimes;
}
public boolean isOverEventTimes() {
if(eventsTimes == -1)
return true;
return RatePreferenceHelper.getEventTimes(context) >= launchTimes;
}
public RateDialog setInstallDate(int installDate) {
this.installDate = installDate;
return this;
}
public RateDialog setLaunchTimes(int launchTimes) {
this.launchTimes = launchTimes;
return this;
}
public RateDialog setRemindInterval(int remindInterval) {
this.remindInterval = remindInterval;
return this;
}
public RateDialog setEventsTimes(int eventsTimes) {
this.eventsTimes = eventsTimes;
return this;
}
public RateDialog setShowNeutralButton(boolean isShowNeutralButton) {
options.setShowNeutralButton(isShowNeutralButton);
return this;
}
public RateDialog setShowTitle(boolean isShowTitle) {
options.setShowTitle(isShowTitle);
return this;
}
public RateDialog setView(View view) {
options.setView(view);
return this;
}
public RateDialog setOnClickButtonListener(OnClickButtonListener listener) {
options.setListener(listener);
return this;
}
public RateDialog setTitle(int resourceId) {
options.setTitleResId(resourceId);
return this;
}
public RateDialog setTitle(String title) {
options.setTitleText(title);
return this;
}
public RateDialog setMessage(int resourceId) {
options.setMessageResId(resourceId);
return this;
}
public RateDialog setMessage(String message) {
options.setMessageText(message);
return this;
}
public RateDialog setTextPositive(int resourceId) {
options.setTextPositiveResId(resourceId);
return this;
}
public RateDialog setTextPositive(String positiveText) {
options.setPositiveText(positiveText);
return this;
}
public RateDialog setTextNeutral(int resourceId) {
options.setTextNeutralResId(resourceId);
return this;
}
public RateDialog setTextNeutral(String neutralText) {
options.setNeutralText(neutralText);
return this;
}
public RateDialog setTextNegative(int resourceId) {
options.setTextNegativeResId(resourceId);
return this;
}
public RateDialog setTextNegative(String negativeText) {
options.setNegativeText(negativeText);
return this;
}
public RateDialog setCancelable(boolean cancelable) {
options.setCancelable(cancelable);
return this;
}
public RateDialog setPackageType(String packageType) {
options.setPackageType(packageType);
return this;
}
public RateDialog setPackageId(String packageId) {
options.setPackageId(packageId);
return this;
}
public RateDialog setDialogStyle(int style) {
options.setDialogStyleResId(style);
return this;
}
public RateDialog setIsDebug(boolean isDebug) {
this.isDebug = isDebug;
return this;
}
public void showRateDialog(Activity activity) {
if (!activity.isFinishing()) {
RateDialogManager.with(activity).create(options).show();
}
}
}
package ly.warp.sdk.views.dialogs;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import static ly.warp.sdk.utils.constants.WarpConstants.PACKAGE_TITLE_GOOGLE;
final class RateDialogManager {
private static RateDialogManager singleton;
private static Context context;
static Dialog dialog = null;
private RateDialogManager() {
}
private RateDialogManager(Context context) {
this.context = context;
}
public static RateDialogManager with(Context context) {
if (singleton == null) {
synchronized (RateDialogManager.class) {
if (singleton == null) {
singleton = new RateDialogManager(context);
}
}
}
return singleton;
}
public RateDialogManager create(final RateDialogOptions options) {
if (dialog != null)
return this;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
dialog = createDialog(context, options);
} else {
dialog = createMaterialDialog(context, options);
}
return this;
}
public void show() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
showDialog();
} else {
showMaterialDialog();
}
}
static private void showDialog() {
AlertDialog alertDialog = (AlertDialog) dialog;
alertDialog.show();
try {
final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
LinearLayout linearLayout = (LinearLayout) button.getParent();
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
} catch (Exception ex) {
}
}
static private void showMaterialDialog() {
androidx.appcompat.app.AlertDialog alertDialog = (androidx.appcompat.app.AlertDialog) dialog;
alertDialog.show();
try {
final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
LinearLayout linearLayout = (LinearLayout) button.getParent();
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
} catch (Exception ex) {
}
}
static private AlertDialog.Builder getDialogBuilder(final Context context) {
return new AlertDialog.Builder(context);
}
static private androidx.appcompat.app.AlertDialog.Builder getMaterialDialogBuilder(final Context context, final RateDialogOptions options) {
return new androidx.appcompat.app.AlertDialog.Builder(context, options.getDialogStyleResId());
}
static private Dialog createDialog(final Context context, final RateDialogOptions options) {
AlertDialog.Builder builder = getDialogBuilder(context);
builder.setMessage(options.getMessageText(context));
if (options.shouldShowTitle()) builder.setTitle(options.getTitleText(context));
builder.setCancelable(options.getCancelable());
View view = options.getView();
if (view != null) builder.setView(view);
final OnClickButtonListener listener = options.getListener();
builder.setPositiveButton(options.getPositiveText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intentToAppstore = null;
if (options.getPackageType() == PACKAGE_TITLE_GOOGLE)
intentToAppstore = IntentHelper.createIntentForGooglePlay(context);
context.startActivity(intentToAppstore);
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
if (options.shouldShowNeutralButton()) {
builder.setNeutralButton(options.getNeutralText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setRemindIntervalDate(context);
if (listener != null) listener.onClickButton(which);
}
});
}
builder.setNegativeButton(options.getNegativeText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
return builder.create();
}
static private Dialog createMaterialDialog(final Context context, final RateDialogOptions options) {
androidx.appcompat.app.AlertDialog.Builder builder = getMaterialDialogBuilder(context, options);
builder.setMessage(options.getMessageText(context));
if (options.shouldShowTitle()) builder.setTitle(options.getTitleText(context));
builder.setCancelable(options.getCancelable());
View view = options.getView();
if (view != null) builder.setView(view);
final OnClickButtonListener listener = options.getListener();
builder.setPositiveButton(options.getPositiveText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intentToAppstore = null;
if (options.getPackageType() == PACKAGE_TITLE_GOOGLE)
intentToAppstore = IntentHelper.createIntentForGooglePlay(context);
context.startActivity(intentToAppstore);
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
if (options.shouldShowNeutralButton()) {
builder.setNeutralButton(options.getNeutralText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setRemindIntervalDate(context);
if (listener != null) listener.onClickButton(which);
}
});
}
builder.setNegativeButton(options.getNegativeText(context), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RatePreferenceHelper.setAgreeShowDialog(context, false);
if (listener != null) listener.onClickButton(which);
}
});
return builder.create();
}
}
\ No newline at end of file
package ly.warp.sdk.views.dialogs;
import android.content.Context;
import android.view.View;
import ly.warp.sdk.R;
import static ly.warp.sdk.utils.constants.WarpConstants.PACKAGE_TITLE_GOOGLE;
final class RateDialogOptions {
private boolean showNeutralButton = true;
private boolean showTitle = true;
private boolean cancelable = false;
private String packageType = PACKAGE_TITLE_GOOGLE;
private String packageId = "";
private int titleResId = R.string.rate_dialog_title;
private int messageResId = R.string.rate_dialog_message;
private int textPositiveResId = R.string.rate_dialog_positive;
private int textNeutralResId = R.string.rate_diloag_neutral;
private int textNegativeResId = R.string.rate_dialog_negative;
private int dialogStyleResId = R.style.AppCompatAlertDialogStyle;
private String titleText = null;
private String messageText = null;
private String positiveText = null;
private String neutralText = null;
private String negativeText = null;
private View view;
private OnClickButtonListener listener;
public boolean shouldShowNeutralButton() {
return showNeutralButton;
}
public void setShowNeutralButton(boolean showNeutralButton) {
this.showNeutralButton = showNeutralButton;
}
public boolean shouldShowTitle() {
return showTitle;
}
public void setShowTitle(boolean showTitle) {
this.showTitle = showTitle;
}
public boolean getCancelable() {
return cancelable;
}
public void setCancelable(boolean cancelable) {
this.cancelable = cancelable;
}
public String getPackageType() {
return packageType;
}
public void setPackageType(String packageType) {
this.packageType = packageType;
}
public String getPackageId() {
return packageId;
}
public void setPackageId(String packageId) {
this.packageId = packageId;
}
public int getTitleResId() {
return titleResId;
}
public void setTitleResId(int titleResId) {
this.titleResId = titleResId;
}
public int getMessageResId() {
return messageResId;
}
public void setMessageResId(int messageResId) {
this.messageResId = messageResId;
}
public int getTextPositiveResId() {
return textPositiveResId;
}
public void setTextPositiveResId(int textPositiveResId) {
this.textPositiveResId = textPositiveResId;
}
public int getTextNeutralResId() {
return textNeutralResId;
}
public void setTextNeutralResId(int textNeutralResId) {
this.textNeutralResId = textNeutralResId;
}
public int getTextNegativeResId() {
return textNegativeResId;
}
public void setTextNegativeResId(int textNegativeResId) {
this.textNegativeResId = textNegativeResId;
}
public int getDialogStyleResId() {
return dialogStyleResId;
}
public void setDialogStyleResId(int dialogStyleResId) {
this.dialogStyleResId = dialogStyleResId;
}
public View getView() {
return view;
}
public void setView(View view) {
this.view = view;
}
public OnClickButtonListener getListener() {
return listener;
}
public void setListener(OnClickButtonListener listener) {
this.listener = listener;
}
public String getTitleText(Context context) {
if (titleText == null) {
return context.getString(titleResId);
}
return titleText;
}
public void setTitleText(String titleText) {
this.titleText = titleText;
}
public String getMessageText(Context context) {
if (messageText == null) {
return context.getString(messageResId);
}
return messageText;
}
public void setMessageText(String messageText) {
this.messageText = messageText;
}
public String getPositiveText(Context context) {
if (positiveText == null) {
return context.getString(textPositiveResId);
}
return positiveText;
}
public void setPositiveText(String positiveText) {
this.positiveText = positiveText;
}
public String getNeutralText(Context context) {
if (neutralText == null) {
return context.getString(textNeutralResId);
}
return neutralText;
}
public void setNeutralText(String neutralText) {
this.neutralText = neutralText;
}
public String getNegativeText(Context context) {
if (negativeText == null) {
return context.getString(textNegativeResId);
}
return negativeText;
}
public void setNegativeText(String negativeText) {
this.negativeText = negativeText;
}
}
\ No newline at end of file
package ly.warp.sdk.views.dialogs;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Date;
final class RatePreferenceHelper {
private static final String PREF_FILE_NAME = "ratedialog_rate_pref_file";
private static final String PREF_KEY_INSTALL_DATE = "ratedialog_rate_install_date";
private static final String PREF_KEY_LAUNCH_TIMES = "ratedialog_rate_launch_times";
private static final String PREF_KEY_IS_AGREE_SHOW_DIALOG = "ratedialog_rate_is_agree_show_dialog";
private static final String PREF_KEY_REMIND_INTERVAL = "ratedialog_rate_remind_interval";
private static final String PREF_KEY_EVENT_TIMES = "ratedialog_rate_event_times";
private RatePreferenceHelper() {
}
static SharedPreferences getPreferences(Context context) {
return context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
}
static SharedPreferences.Editor getPreferencesEditor(Context context) {
return getPreferences(context).edit();
}
/**
* Clear data in shared preferences
*
* @param context context
*/
static void clearSharedPreferences(Context context) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.remove(PREF_KEY_INSTALL_DATE);
editor.remove(PREF_KEY_LAUNCH_TIMES);
editor.remove(PREF_KEY_REMIND_INTERVAL);
editor.remove(PREF_KEY_EVENT_TIMES);
editor.apply();
}
/**
* Set agree flag about show dialog.
* If it is false, rate dialog will never shown unless data is cleared.
*
* @param context context
* @param isAgree agree with showing rate dialog
*/
static void setAgreeShowDialog(Context context, boolean isAgree) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putBoolean(PREF_KEY_IS_AGREE_SHOW_DIALOG, isAgree);
editor.apply();
}
/**
* get agree flag about show dialog.
* If it is false, rate dialog will never shown unless data is cleared.
*
* @param context context
*/
static boolean getIsAgreeShowDialog(Context context) {
return getPreferences(context).getBoolean(PREF_KEY_IS_AGREE_SHOW_DIALOG, true);
}
/**
* set remind interval date.
* If remind interval date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static void setRemindIntervalDate(Context context) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.remove(PREF_KEY_REMIND_INTERVAL);
editor.putLong(PREF_KEY_REMIND_INTERVAL, new Date().getTime());
editor.apply();
}
/**
* get remind interval date.
* If remind interval date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static long getRemindIntervalDate(Context context) {
return getPreferences(context).getLong(PREF_KEY_REMIND_INTERVAL, 0);
}
/**
* set install date.
* If install date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static void setInstallDate(Context context) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putLong(PREF_KEY_INSTALL_DATE, new Date().getTime());
editor.apply();
}
/**
* get install date.
* If install date is over than setting days, rate dialog will appear.
*
* @param context context
*/
static long getInstallDate(Context context) {
return getPreferences(context).getLong(PREF_KEY_INSTALL_DATE, 0);
}
/**
* set luanch times date.
* If launch time is over than setting times, rate dialog will appear.
*
* @param context context
* @param launchTimes launchTimes
*/
static void setLaunchTimes(Context context, int launchTimes) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putInt(PREF_KEY_LAUNCH_TIMES, launchTimes);
editor.apply();
}
/**
* get luanch times date.
* If launch time is over than setting times, rate dialog will appear.
*
* @param context context
*/
static int getLaunchTimes(Context context) {
return getPreferences(context).getInt(PREF_KEY_LAUNCH_TIMES, 0);
}
/**
* check if first launch or not.
* If launching first time, andialog will set luanch date.
*
* @param context context
*/
static boolean isFirstLaunch(Context context) {
return getPreferences(context).getLong(PREF_KEY_INSTALL_DATE, 0) == 0L;
}
/**
* set event times date.
* If event time is over than setting times, rate dialog will appear.
*
* @param context context
*/
static int getEventTimes(Context context) {
return getPreferences(context).getInt(PREF_KEY_EVENT_TIMES, 0);
}
/**
* set event times date.
* If event time is over than setting times, rate dialog will appear.
*
* @param context context
*/
static void setEventTimes(Context context, int eventTimes) {
SharedPreferences.Editor editor = getPreferencesEditor(context);
editor.putInt(PREF_KEY_EVENT_TIMES, eventTimes);
editor.apply();
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_inapp_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:layout_margin="8dp" />
<TextView
android:id="@+id/tv_inapp_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="8dp"
android:textAlignment="center"
tools:text="Title" />
<TextView
android:id="@+id/tv_inapp_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="8dp"
android:textAlignment="center"
tools:text="Subtitle" />
<LinearLayout
android:id="@+id/ll_custom_buttons_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|end"
android:gravity="right|end"
android:layout_margin="8dp"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
\ No newline at end of file