Panagiotis Triantafyllou

remove register device request, campaigns implementation

......@@ -6,7 +6,7 @@
# dev cosmote f83dfde1145e4c2da69793abb2f579af
# prod cosmote 0086a2088301440792091b9f814c2267
Uuid=d5f9038f46374666a1f4e1039d89f608
Uuid=f83dfde1145e4c2da69793abb2f579af
# If we need to see logs in Logcat
Debug=true
......@@ -16,7 +16,7 @@ Debug=true
# Development: https://engage-stage.warp.ly
# DEH Production: https://engage-prod.dei.gr
# DEH Development: https://engage-uat.dei.gr
BaseURL=https://engage-prod.dei.gr
BaseURL=https://engage-stage.warp.ly
# For Verify Ticket request
VerifyURL=/partners/cosmote/verify
......
......@@ -503,12 +503,26 @@ public enum Warply {
INSTANCE.registerWarplyInternal();
}
public static void registerWarply(Context context) {
INSTANCE.isInitializedOrThrow();
INSTANCE.registerWarplyInternal(context);
}
private void registerWarplyInternal() {
isInitializedOrThrow();
if (!WarpUtils.isRegisteredWarply(mContext))
wakeRegistrationTask();
}
private void registerWarplyInternal(Context context) {
isInitializedOrThrow();
if (!WarpUtils.isRegisteredWarply(mContext)) {
if (!acquireRegisterLock())
return;
registerToServerInternal(context);
}
}
/**
* Method used to unregister from the Warply service. You also need to
* unregister from the GCM service, in order to stop receiving push
......@@ -730,7 +744,7 @@ public enum Warply {
return;
}
if (!WarpUtils.isRegisteredWarply(context)) {
registerWarply();
registerWarply(context);
return;
}
if (WarpUtils.getIsDEVICEINFOENABLED(context))
......@@ -1290,6 +1304,20 @@ public enum Warply {
});
}
private void registerToServerInternal(Context context) {
WarpUtils.setLastDeviceInfo(mContext, "");
WarpUtils.setLastApplicationData(mContext, "");
WarpUtils.setLastApplicationUUID(mContext, WarplyProperty.getAppUuid(mContext));
WarplyDBHelper.getInstance(mContext).deleteAllRequests();
WarplyDBHelper.getInstance(mContext).deleteAllPushRequests();
WarplyDBHelper.getInstance(mContext).deleteAllPushAckRequests();
WarpUtils.setWebId(mContext, "deprecated");
WarpUtils.setApiKey(mContext, "");
if (mRegistrationListener != null)
mRegistrationListener.onSuccess(ServiceRegistrationCallback.REGISTERED_WARPLY);
releaseRegisterLock();
}
private String buildWarplyRequestUrl(String warplyPath) {
StringBuilder sb = new StringBuilder(WarplyProperty.getBaseUrl(mContext) + WarpConstants.BASE_URL_MOBILE);
sb.append(WarplyProperty.getAppUuid(mContext)).append("/")
......
......@@ -7,25 +7,30 @@ import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import ly.warp.sdk.R;
import ly.warp.sdk.io.adapters.BannerAdapter;
import ly.warp.sdk.io.adapters.OfferAdapter;
import ly.warp.sdk.io.callbacks.CallbackReceiver;
import ly.warp.sdk.io.models.Campaign;
import ly.warp.sdk.io.models.DummyDataProvider;
import ly.warp.sdk.io.models.OfferCategory;
import ly.warp.sdk.io.models.OfferItem;
import ly.warp.sdk.utils.WarpUtils;
import ly.warp.sdk.utils.WarplyManagerHelper;
import ly.warp.sdk.utils.managers.WarplyManager;
import ly.warp.sdk.views.HorizontalSpaceItemDecoration;
public class HomeActivity extends Activity implements View.OnClickListener, OfferAdapter.OnOfferClickListener {
......@@ -36,6 +41,9 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
// ===========================================================
// Fields
// ===========================================================
private RelativeLayout mPbLoading;
private ViewPager2 mBannerViewPager;
private BannerAdapter mBannerAdapter;
private LinearLayout mDotsContainer;
......@@ -88,16 +96,18 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
setContentView(R.layout.activity_home);
initViews();
mPbLoading.setVisibility(View.VISIBLE);
WarplyManager.getCampaigns(mCampaignsCallback);
// Setup all category sections
setupTopOffersSection();
setupFavoritesSection();
setupViabilitySection();
setupFamilySection();
setupFoodCoffeeSection();
setupTravellingSection();
setupKidsSection();
setupPurchasesSection();
// setupTopOffersSection();
// setupFavoritesSection();
// setupViabilitySection();
// setupFamilySection();
// setupFoodCoffeeSection();
// setupTravellingSection();
// setupKidsSection();
// setupPurchasesSection();
}
@Override
......@@ -130,8 +140,8 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
// ===========================================================
private void initViews() {
// Initialize banner carousel
setupBannerCarousel();
mPbLoading = findViewById(R.id.pb_loading);
mPbLoading.setOnTouchListener((v, event) -> true);
mIvProfile = findViewById(R.id.profile_icon);
mIvProfile.setOnClickListener(this);
......@@ -411,18 +421,18 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
mBannerViewPager = findViewById(R.id.banner_viewpager);
mDotsContainer = findViewById(R.id.dots_container);
// Setup adapter with 5 banner images
List<Integer> bannerImages = getBannerImages();
List<String> bannerUrls = getBannerUrls();
mBannerAdapter = new BannerAdapter(this, bannerImages);
mBannerAdapter.setOnBannerClickListener(position -> {
startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(bannerUrls.get(position))));
mBannerAdapter = new BannerAdapter(this, WarplyManagerHelper.getCampaignList());
mBannerAdapter.setOnBannerClickListener(campaign -> {
startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(campaign)));
});
// Set the number of pages to preload for adjacent items
mBannerViewPager.setOffscreenPageLimit(5);
mBannerViewPager.setAdapter(mBannerAdapter);
// Setup pagination dots
setupPaginationDots(bannerImages.size());
setupPaginationDots(WarplyManagerHelper.getCampaignList().size());
// Handle page changes
mBannerViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
......@@ -434,27 +444,6 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
}
/**
* Returns a list of banner image resource IDs
*/
private List<Integer> getBannerImages() {
return Arrays.asList(
R.drawable.demo_home_banner2,
R.drawable.demo_home_banner4,
R.drawable.demo_home_banner3,
R.drawable.demo_home_banner1
);
}
private List<String> getBannerUrls() {
return Arrays.asList(
"https://warply.s3.amazonaws.com/dei/campaigns/match_dev/index.html",
"https://warply.s3.amazonaws.com/dei/campaigns/questionnaire_dev/index.html",
"https://warply.s3.amazonaws.com/dei/campaigns/tesla_dev/index.html",
"https://warply.s3.amazonaws.com/dei/campaigns/EnergySaverContest_dev/index.html"
);
}
/**
* Sets up the pagination dots
*
* @param count Number of dots to display
......@@ -496,4 +485,27 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe
mDots.get(i).setImageResource(i == position ? R.drawable.dot_active : R.drawable.dot_inactive);
}
}
private CallbackReceiver<ArrayList<Campaign>> mCampaignsCallback = new CallbackReceiver<ArrayList<Campaign>>() {
@Override
public void onSuccess(ArrayList<Campaign> result) {
mPbLoading.setVisibility(View.GONE);
if (result != null && !result.isEmpty()) {
// Preloads the campaigns' images
result.forEach(campaign -> {
Glide.with(getApplicationContext())
.load(campaign.getLogoUrl())
.diskCacheStrategy(DiskCacheStrategy.DATA)
.preload();
});
setupBannerCarousel();
}
}
@Override
public void onFailure(int errorCode) {
mPbLoading.setVisibility(View.GONE);
}
};
}
......
......@@ -38,8 +38,8 @@ public class HomeFragment extends Fragment implements View.OnClickListener {
// 6012049321, 6012049322, 6012049323, 7000000831 history, 7000000826
// prod 6006552990, prod 6005892749, live 3000184910,prod 7000070282, live 3000136179
mPbLoading.setVisibility(View.VISIBLE);
WarplyManager.getDehUser("aggeliki@warp.ly", mLoginReceiver);
// mPbLoading.setVisibility(View.VISIBLE);
// WarplyManager.getDehUser("aggeliki@warp.ly", mLoginReceiver);
}
@Override
......@@ -49,16 +49,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener {
@Override
public void onClick(View view) {
// if (view.getId() == R.id.ll_auth_login) {
// //6012049321, 6012049322, 6012049323, 7000000831 history, 7000000826, 7000000831 shared coupons
// //prod 6006552990, prod 6005892749, live 3000184910,prod 7000070282, live 3000136179
//// mPbLoading.setVisibility(View.VISIBLE);
//// WarplyManager.getDehUser(mEtGuid.getText().toString(), mLoginReceiver);
//
// Intent myIntent = new Intent(getContext(), HomeActivity.class);
// startActivity(myIntent);
// return;
// }
// if (view.getId() == R.id.ll_auth_logout) {
// mPbLoading.setVisibility(View.VISIBLE);
// WarplyManager.logout(mLogoutReceiver);
......
......@@ -9,23 +9,27 @@ import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.util.ArrayList;
import ly.warp.sdk.R;
import ly.warp.sdk.io.models.Campaign;
public class BannerAdapter extends RecyclerView.Adapter<BannerAdapter.BannerViewHolder> {
private final Context mContext;
private final List<Integer> mBannerImages;
private final ArrayList<Campaign> mCampaigns;
private OnBannerClickListener mListener;
public interface OnBannerClickListener {
void onBannerClick(int position);
void onBannerClick(Campaign campaign);
}
public BannerAdapter(Context context, List<Integer> bannerImages) {
public BannerAdapter(Context context, ArrayList<Campaign> campaigns) {
this.mContext = context;
this.mBannerImages = bannerImages;
this.mCampaigns = campaigns;
}
public void setOnBannerClickListener(OnBannerClickListener listener) {
......@@ -41,18 +45,27 @@ public class BannerAdapter extends RecyclerView.Adapter<BannerAdapter.BannerView
@Override
public void onBindViewHolder(@NonNull BannerViewHolder holder, int position) {
holder.imageView.setImageResource(mBannerImages.get(position));
Campaign campaignItem = mCampaigns.get(position);
Glide.with(mContext)
// .setDefaultRequestOptions(
// RequestOptions
// .placeholderOf(R.drawable.demo_logo)
// .error(R.drawable.demo_logo))
.load(campaignItem.getLogoUrl())
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(holder.imageView);
holder.itemView.setOnClickListener(v -> {
if (mListener != null) {
mListener.onBannerClick(position);
mListener.onBannerClick(campaignItem);
}
});
}
@Override
public int getItemCount() {
return mBannerImages.size();
return mCampaigns.size();
}
static class BannerViewHolder extends RecyclerView.ViewHolder {
......
......@@ -66,6 +66,10 @@ public class WarplyManagerHelper {
mCampaignListAll.addAll(campaignList);
}
public static ArrayList<Campaign> getCampaignList() {
return mCampaignListAll;
}
public static void setCouponRedeemedList(CouponList couponRedeemedList) {
mCouponRedeemedList.clear();
mCouponRedeemedList.addAll(couponRedeemedList);
......
......@@ -353,49 +353,20 @@ public class WarplyManager {
});
}
private static ArrayList<Campaign> mergeCampaignResults(ArrayList<Campaign> resultCampaigns, ArrayList<Campaign> resultPersonalizedCampaigns, JSONObject resultCampaignsAvailability) {
private static ArrayList<Campaign> mergeCampaignResults(ArrayList<Campaign> resultCampaigns, ArrayList<Campaign> resultPersonalizedCampaigns) {
ArrayList<Campaign> newCampaignList = new ArrayList<Campaign>();
ArrayList<Campaign> campaignLoyaltyList = new ArrayList<>();
newCampaignList.clear();
if (resultCampaigns != null && resultCampaigns.size() > 0)
if (resultCampaigns != null && !resultCampaigns.isEmpty())
newCampaignList.addAll(resultCampaigns);
if (resultPersonalizedCampaigns != null && resultPersonalizedCampaigns.size() > 0)
if (resultPersonalizedCampaigns != null && !resultPersonalizedCampaigns.isEmpty())
newCampaignList.addAll(resultPersonalizedCampaigns);
if (newCampaignList != null && newCampaignList.size() > 0) {
Collections.sort(newCampaignList, (obj1, obj2) -> Integer.compare(obj1.getSorting(), obj2.getSorting()));
campaignLoyaltyList.clear();
for (Campaign camp : newCampaignList) {
if (resultCampaignsAvailability != null && resultCampaignsAvailability.length() > 0) {
JSONObject campaignSettings = WarpJSONParser.getJSONFromString(camp.getCampaignTypeSettings());
if (campaignSettings != null) {
if (campaignSettings.has("couponset")) {
String cpnUuid = campaignSettings.optString("couponset");
if (resultCampaignsAvailability.has(cpnUuid)) {
camp.setCouponAvailability(resultCampaignsAvailability.optInt(cpnUuid));
}
}
}
}
if (newCampaignList != null && !newCampaignList.isEmpty()) {
newCampaignList.sort((obj1, obj2) -> Integer.compare(obj1.getSorting(), obj2.getSorting()));
try {
JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields());
if (extraFields != null) {
if (extraFields.length() == 0 || !(extraFields.has("ccms_offer") || extraFields.has("type"))) {
if (camp.getCouponAvailability() == null || camp.getCouponAvailability() != 0)
campaignLoyaltyList.add(camp);
}
}
} catch (Exception exception) {
if (camp.getCouponAvailability() == null || camp.getCouponAvailability() != 0)
campaignLoyaltyList.add(camp);
}
}
WarplyManagerHelper.setCampaignList(newCampaignList);
Set<Campaign> set = new LinkedHashSet<>(campaignLoyaltyList);
campaignLoyaltyList.clear();
Set<Campaign> set = new LinkedHashSet<>(newCampaignList);
campaignLoyaltyList.addAll(set);
WarplyManagerHelper.setCampaignList(campaignLoyaltyList);
}
return campaignLoyaltyList;
......@@ -444,14 +415,12 @@ public class WarplyManager {
ListenableFuture<ArrayList<Campaign>> futureCampaigns = getCampaignsRetro(service);
SettableFuture<ArrayList<Campaign>> futurePersonalized = SettableFuture.create();
ListenableFuture<ArrayList<Campaign>> futurePersonalizedCampaigns = getCampaignsPersonalizedRetro(service, 0, futurePersonalized);
ListenableFuture<JSONObject> futureCampaignAvailability = getCampaignAvailability(service);
ListenableFuture<List<Object>> allResultsFuture = Futures.allAsList(futureCampaigns, futurePersonalizedCampaigns, futureCampaignAvailability);
ListenableFuture<List<Object>> allResultsFuture = Futures.allAsList(futureCampaigns, futurePersonalizedCampaigns);
ListenableFuture<ArrayList<Campaign>> mergedResultFuture = Futures.transformAsync(allResultsFuture, results -> {
ArrayList<Campaign> resultCampaigns = (ArrayList<Campaign>) results.get(0);
ArrayList<Campaign> resultPersonalizedCampaigns = (ArrayList<Campaign>) results.get(1);
JSONObject resultCampaignsAvailability = (JSONObject) results.get(2);
return executorService.submit(() -> mergeCampaignResults(resultCampaigns, resultPersonalizedCampaigns, resultCampaignsAvailability));
return executorService.submit(() -> mergeCampaignResults(resultCampaigns, resultPersonalizedCampaigns));
}, executorService);
Futures.addCallback(mergedResultFuture, new FutureCallback<ArrayList<Campaign>>() {
......@@ -734,6 +703,10 @@ public class WarplyManager {
}
}
});
} else if (response.code() == 502) {
// receiver.onFailure(response.code());
// future.set(new ArrayList<Campaign>());
future.set(new ArrayList<Campaign>());
} else {
// receiver.onFailure(response.code());
// future.set(new ArrayList<Campaign>());
......
......@@ -78,6 +78,28 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<RelativeLayout
android:id="@+id/pb_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
app:layout_constraintStart_toStartOf="@+id/banner_viewpager"
app:layout_constraintEnd_toEndOf="@+id/banner_viewpager"
app:layout_constraintTop_toTopOf="@+id/banner_viewpager"
app:layout_constraintBottom_toBottomOf="@+id/banner_viewpager"
android:translationZ="100dp"
android:visibility="gone"
tools:visibility="visible">
<ProgressBar
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerInParent="true"
android:indeterminate="true"
android:indeterminateTint="@color/custom_light_blue"
android:indeterminateTintMode="src_atop" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Top Offers Section -->
......
......@@ -22,7 +22,7 @@
android:id="@+id/user_img"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/demo_logo_small"
android:src="@drawable/demo_profile"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......
......@@ -8,7 +8,7 @@
android:id="@+id/iv_banner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
......