Panagiotis Triantafyllou

new version

......@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
ext {
PUBLISH_GROUP_ID = 'ly.warp'
PUBLISH_VERSION = '4.5.4-cosbeta21'
PUBLISH_VERSION = '4.5.4-cosbeta22'
PUBLISH_ARTIFACT_ID = 'warply-android-sdk'
}
......@@ -56,6 +56,8 @@ dependencies {
//------------------------------ GMS -----------------------------//
api 'com.google.android.gms:play-services-base:18.0.1'
api 'com.google.android.gms:play-services-location:19.0.1'
api 'com.google.android.gms:play-services-maps:18.0.2'
api 'com.google.maps.android:android-maps-utils:0.5'
//------------------------------ Work Manager -----------------------------//
api 'androidx.work:work-runtime:2.7.1'
......
......@@ -9,6 +9,10 @@
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<!-- For Huawei Push -->
<meta-data
android:name="push_kit_auto_init_enabled"
......@@ -89,6 +93,16 @@
android:screenOrientation="portrait" />
<activity
android:name="ly.warp.sdk.activities.ShopsActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="ly.warp.sdk.activities.CouponShareActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="ly.warp.sdk.dexter.PermissionsActivity"
android:exported="false"
android:launchMode="singleInstance"
......
......@@ -75,6 +75,7 @@ import ly.warp.sdk.utils.ObjectSerializer;
import ly.warp.sdk.utils.WarpUtils;
import ly.warp.sdk.utils.WarplyDeviceInfoCollector;
import ly.warp.sdk.utils.WarplyInitializer;
import ly.warp.sdk.utils.WarplyManagerHelper;
import ly.warp.sdk.utils.WarplyPreferences;
import ly.warp.sdk.utils.WarplyProperty;
import ly.warp.sdk.utils.constants.WarpConstants;
......@@ -476,6 +477,7 @@ public enum Warply {
INSTANCE.mLastReceivedCampaigns = result;
if (receiver != null) {
WarplyManagerHelper.setUniqueCampaignList(result);
receiver.onSuccess(result);
}
}
......
......@@ -194,8 +194,6 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation
}
}
WarplyManagerHelper.setUniqueCampaignList(result);
// Thread.currentThread().interrupt();
WarplyManager.getCouponsets(new WarplyGetCouponsetsRequest()
......
......@@ -24,6 +24,8 @@ import java.util.Date;
import ly.warp.sdk.R;
import ly.warp.sdk.io.models.Coupon;
import ly.warp.sdk.io.models.Couponset;
import ly.warp.sdk.utils.WarplyManagerHelper;
public class CouponInfoActivity extends Activity implements View.OnClickListener {
......@@ -37,9 +39,10 @@ public class CouponInfoActivity extends Activity implements View.OnClickListener
// ===========================================================
private ImageView mIvBack, mIvCouponPhoto, mIvBarcode;
private TextView mTvTerms, mTvCouponCode, mTvCouponTitle, mTvCouponSubtitle, mTvCouponDate, mTvBarcodeCode;
private TextView mTvTerms, mTvCouponCode, mTvCouponTitle, mTvCouponSubtitle, mTvCouponDate;
private LinearLayout mLlGiftIt, mLlShops;
private Coupon mCoupon;
private Couponset mCouponset;
// ===========================================================
// Methods for/from SuperClass/Interfaces
......@@ -78,16 +81,15 @@ public class CouponInfoActivity extends Activity implements View.OnClickListener
return;
}
if (view.getId() == R.id.ll_gift_it) {
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_TEXT, "Link: https://cosmote.page.link /referal\n\nΧρησιμοποίησε τον κωδικό " + mTvCouponCode.getText().toString() + " για εκπτωτικό κουπόνι 4€ στο BOX: XMAS4");
startActivity(Intent.createChooser(intent, "Άνοιγμα με"));
Intent intent = new Intent(CouponInfoActivity.this, CouponShareActivity.class);
intent.putExtra("coupon", (Serializable) mCoupon);
startActivity(intent);
return;
}
if (view.getId() == R.id.ll_shops) {
// Intent intent = new Intent(ActiveCouponsActivity.this, CouponInfoActivity.class);
// intent.putExtra("coupon", (Serializable) mCoupon);
// startActivity(intent);
Intent intent = new Intent(CouponInfoActivity.this, ShopsActivity.class);
intent.putExtra("couponset", (Serializable) mCouponset);
startActivity(intent);
}
}
......@@ -100,6 +102,15 @@ public class CouponInfoActivity extends Activity implements View.OnClickListener
mTvCouponTitle.setText(mCoupon.getName());
mTvCouponSubtitle.setText(mCoupon.getDescription());
if (WarplyManagerHelper.getCouponsets() != null && WarplyManagerHelper.getCouponsets().size() > 0) {
for (Couponset couponset : WarplyManagerHelper.getCouponsets()) {
if (couponset.getUuid().equals(mCoupon.getCouponsetUuid())) {
mCouponset = couponset;
break;
}
}
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
Date newDate = new Date();
try {
......
package ly.warp.sdk.activities;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import ly.warp.sdk.R;
import ly.warp.sdk.io.callbacks.CallbackReceiver;
import ly.warp.sdk.io.models.Consumer;
import ly.warp.sdk.io.models.Coupon;
import ly.warp.sdk.io.request.WarplyConsumerRequest;
import ly.warp.sdk.utils.managers.WarplyManager;
public class CouponShareActivity extends Activity implements View.OnClickListener {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private ImageView mIvBack, mIvCouponPhoto;
private TextView mTvCouponTitle;
private Coupon mCoupon;
private Consumer mConsumer;
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coupon_share);
mCoupon = (Coupon) getIntent().getSerializableExtra("coupon");
mIvBack = findViewById(R.id.iv_coupon_share_back);
mTvCouponTitle = findViewById(R.id.textView13);
mIvCouponPhoto = findViewById(R.id.imageView6);
initViews();
}
@Override
public void onResume() {
super.onResume();
new Thread(() -> {
if (!Thread.currentThread().isInterrupted()) {
WarplyManager.getConsumer(new WarplyConsumerRequest()
, mConsumerCallback);
}
Thread.currentThread().interrupt();
}).start();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.iv_coupon_share_back) {
onBackPressed();
return;
}
// if (view.getId() == R.id.ll_gift_it) {
// showSharingDialog();
// return;
// }
}
// ===========================================================
// Methods
// ===========================================================
private void initViews() {
mTvCouponTitle.setText(mCoupon.getName());
if (!TextUtils.isEmpty(mCoupon.getImage())) {
Glide.with(this)
// .setDefaultRequestOptions(
// RequestOptions
// .placeholderOf(R.drawable.ic_default_contact_photo)
// .error(R.drawable.ic_default_contact_photo))
.load(mCoupon.getImage())
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(mIvCouponPhoto);
} else {
Glide.with(this)
.load(R.drawable.ic_cosmote_logo_horizontal_grey)
.into(mIvCouponPhoto);
}
mIvBack.setOnClickListener(this);
}
private void showSharingDialog() {
Dialog dialog = new Dialog(this, R.style.PopUpDialog);
dialog.setContentView(R.layout.dl_dialog);
dialog.getWindow().setBackgroundDrawableResource(R.drawable.banner_border_white);
dialog.show();
// TextView mTvDlTitle = dialog.findViewById(R.id.tv_dl_subtitle);
// LinearLayout mLlRedeem = dialog.findViewById(R.id.ll_dl_redeem);
//
// mTvDlTitle.setText(String.format(getResources().getString(R.string.cos_dl_title), parameter));
// mLlRedeem.setOnClickListener(view -> {
// if (mUniqueCampaignList != null && !mUniqueCampaignList.isEmpty()) {
// if (mUniqueCampaignList.containsKey("lucky_draw") && mUniqueCampaignList.get("lucky_draw").size() > 0) {
// startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(mUniqueCampaignList.get("lucky_draw").get(0))));
// dialog.dismiss();
// }
// }
// });
}
private final CallbackReceiver<Consumer> mConsumerCallback = new CallbackReceiver<Consumer>() {
@Override
public void onSuccess(Consumer result) {
mConsumer = result;
}
@Override
public void onFailure(int errorCode) {
Log.v("COUPON_SHARE_ACTIVITY", String.valueOf(errorCode));
}
};
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
package ly.warp.sdk.activities;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.maps.android.clustering.Cluster;
import com.google.maps.android.clustering.ClusterManager;
import java.util.ArrayList;
import ly.warp.sdk.R;
import ly.warp.sdk.io.callbacks.CallbackReceiver;
import ly.warp.sdk.io.models.Couponset;
import ly.warp.sdk.io.models.Merchant;
import ly.warp.sdk.io.models.MerchantList;
import ly.warp.sdk.io.request.WarplyMerchantsRequest;
import ly.warp.sdk.utils.constants.WarpConstants;
import ly.warp.sdk.utils.managers.WarplyManager;
public class ShopsActivity extends FragmentActivity implements View.OnClickListener,
OnMapReadyCallback, GoogleMap.OnMapLoadedCallback, ClusterManager.OnClusterClickListener<Merchant> {
// ===========================================================
// Constants
// ===========================================================
public final static float DEFAULT_LOCATION_ZOOM = 6.2f;
// ===========================================================
// Fields
// ===========================================================
private ImageView mIvBack;
private Couponset mCouponset;
private GoogleMap mMap;
private ClusterManager<Merchant> mClusterManager;
SupportMapFragment mMapView;
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shops);
mCouponset = (Couponset) getIntent().getSerializableExtra("couponset");
mIvBack = findViewById(R.id.iv_shops_back);
mMapView = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mv_shops);
mMapView.getMapAsync(this);
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.iv_shops_back) {
onBackPressed();
}
}
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
mMap = googleMap;
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
}
} else {
mMap.setMyLocationEnabled(false);
}
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.setMinZoomPreference(DEFAULT_LOCATION_ZOOM);
mMap.setLatLngBoundsForCameraTarget(WarpConstants.GREECE_BOUNDS);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setZoomGesturesEnabled(true);
mMap.getUiSettings().setCompassEnabled(false);
mMap.getUiSettings().setMyLocationButtonEnabled(false);
mMap.getUiSettings().setMapToolbarEnabled(false);
mMap.getUiSettings().setTiltGesturesEnabled(false);
mMap.getUiSettings().setRotateGesturesEnabled(false);
mMap.setOnMapLoadedCallback(this);
}
@Override
public void onMapLoaded() {
if (mMap != null) {
CameraUpdate camUpdate;
camUpdate = CameraUpdateFactory.newLatLngBounds(WarpConstants.GREECE_BOUNDS, 48);
mMap.animateCamera(camUpdate);
}
if (mClusterManager == null) {
mClusterManager = new ClusterManager<>(this, mMap);
mClusterManager.setOnClusterClickListener(this);
mMap.setOnMarkerClickListener(mClusterManager);
}
if (mCouponset != null) {
ArrayList<String> uuids = new ArrayList<>();
uuids.add(mCouponset.getMerchantUuid());
new Thread(() -> {
if (!Thread.currentThread().isInterrupted()) {
WarplyManager.getMerchantsMultilingual(new WarplyMerchantsRequest()
.setIsMultilingual(true)
.setParentUuids(uuids)
, mMerchantsCallback);
}
Thread.currentThread().interrupt();
}).start();
}
}
@Override
public boolean onClusterClick(Cluster<Merchant> cluster) {
if (mMap != null) {
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(cluster.getPosition(),
(float) Math.floor(mMap.getCameraPosition().zoom + 1)), 300, null);
// mMap.clear();
// mClusterManager.clearItems();
// mClusterManager.addItems(cluster.getItems());
// mClusterManager.cluster();
}
return true;
}
// ===========================================================
// Methods
// ===========================================================
private final CallbackReceiver<MerchantList> mMerchantsCallback = new CallbackReceiver<MerchantList>() {
@Override
public void onSuccess(MerchantList result) {
new Handler(Looper.getMainLooper()).post(() -> {
if (mClusterManager != null) {
mMap.clear();
mClusterManager.clearItems();
if (result != null) {
mClusterManager.addItems(result);
}
mClusterManager.cluster();
}
});
}
@Override
public void onFailure(int errorCode) {
Log.v("SHOPS_ACTIVITY", String.valueOf(errorCode));
}
};
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
......@@ -72,6 +72,7 @@ public class Couponset implements Parcelable, Serializable {
private static final String CATEGORY = "category";
private static final String TERMS = "terms";
private static final String AVAILABILITY = "availability";
private static final String MERCHANT_UUID = "merchant_uuid";
/* Member variables of the Campaign object */
......@@ -100,6 +101,7 @@ public class Couponset implements Parcelable, Serializable {
private String category = "";
private String terms = "";
private int availability = 0;
private String merchantUuid = "";
/**
* Basic constructor used to create an object from a String, representing a
......@@ -150,6 +152,7 @@ public class Couponset implements Parcelable, Serializable {
this.category = json.optString(CATEGORY);
this.terms = json.optString(TERMS);
this.availability = json.optInt(AVAILABILITY);
this.merchantUuid = json.optString(MERCHANT_UUID);
}
}
......@@ -176,6 +179,7 @@ public class Couponset implements Parcelable, Serializable {
this.category = source.readString();
this.terms = source.readString();
this.availability = source.readInt();
this.merchantUuid = source.readString();
}
@Override
......@@ -202,6 +206,7 @@ public class Couponset implements Parcelable, Serializable {
dest.writeString(this.category);
dest.writeString(this.terms);
dest.writeInt(this.availability);
dest.writeString(this.merchantUuid);
}
/**
......@@ -236,6 +241,7 @@ public class Couponset implements Parcelable, Serializable {
jObj.putOpt(CATEGORY, this.category);
jObj.putOpt(TERMS, this.terms);
jObj.putOpt(AVAILABILITY, this.availability);
jObj.putOpt(MERCHANT_UUID, this.merchantUuid);
} catch (JSONException e) {
if (WarpConstants.DEBUG) {
e.printStackTrace();
......@@ -371,6 +377,10 @@ public class Couponset implements Parcelable, Serializable {
return availability;
}
public String getMerchantUuid() {
return merchantUuid;
}
@Override
public int describeContents() {
return 0;
......
......@@ -28,6 +28,9 @@ package ly.warp.sdk.io.models;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.android.gms.maps.model.LatLng;
import com.google.maps.android.clustering.ClusterItem;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
......@@ -42,7 +45,7 @@ import ly.warp.sdk.utils.constants.WarpConstants;
* Created by Panagiotis Triantafyllou on 07-Dec-21.
*/
public class Merchant implements Parcelable, Serializable {
public class Merchant implements Parcelable, Serializable, ClusterItem {
private static final long serialVersionUID = -4754964462459705285L;
......@@ -131,6 +134,7 @@ public class Merchant implements Parcelable, Serializable {
private JSONObject working_hours = new JSONObject();
private JSONArray tags = new JSONArray();
private JSONObject product = new JSONObject();
private LatLng coordinates;
/**
* Basic constructor used to create an object from a String, representing a
......@@ -190,6 +194,7 @@ public class Merchant implements Parcelable, Serializable {
this.working_hours = json.optJSONObject(WORKING_HOURS);
this.tags = json.optJSONArray(TAGS);
this.product = json.optJSONObject(PRODUCT);
coordinates = new LatLng(this.latitude, this.longitude);
}
}
......@@ -228,6 +233,7 @@ public class Merchant implements Parcelable, Serializable {
this.distance = source.readInt();
this.default_shown = source.readByte() != 0;
this.hidden = source.readByte() != 0;
this.coordinates = new LatLng(this.latitude, this.longitude);
}
@Override
......@@ -266,6 +272,7 @@ public class Merchant implements Parcelable, Serializable {
dest.writeInt(this.distance);
dest.writeByte((byte) (this.default_shown ? 1 : 0));
dest.writeByte((byte) (this.hidden ? 1 : 0));
dest.writeParcelable(coordinates, flags);
}
/**
......@@ -539,4 +546,19 @@ public class Merchant implements Parcelable, Serializable {
return listData;
}
@Override
public LatLng getPosition() {
return coordinates;
}
@Override
public String getTitle() {
return null;
}
@Override
public String getSnippet() {
return null;
}
}
......
......@@ -39,6 +39,7 @@ public class WarplyMerchantsRequest {
private final String KEY_UUID = "uuid";
private final String KEY_CENTER = "center";
private final String KEY_DISTANCE = "distance";
private final String KEY_PARENT_UUIDS = "parent_uuids";
// ===========================================================
// Fields
......@@ -54,6 +55,7 @@ public class WarplyMerchantsRequest {
private int mDistance = 0;
private ArrayList<Double> mCenter = new ArrayList<>();
private String mLanguage = WarplyProperty.getLanguage(Warply.getWarplyContext());
private ArrayList<String> mParentUuids = new ArrayList<>();
// ===========================================================
// Constructor
......@@ -99,6 +101,11 @@ public class WarplyMerchantsRequest {
// Getter & Setter
// ===========================================================
public WarplyMerchantsRequest setParentUuids(ArrayList<String> uuids) {
mParentUuids = uuids;
return this;
}
public WarplyMerchantsRequest setIsMultilingual(boolean multilingual) {
mIsMultilingual = multilingual;
return this;
......@@ -214,6 +221,11 @@ public class WarplyMerchantsRequest {
bodyJsonObject.putOpt(KEY_DISTANCE, mDistance);
} else
bodyJsonObject.putOpt(KEY_LOCATION, JSONObject.NULL);
if (mParentUuids == null || mParentUuids.size() == 0) {
bodyJsonObject.putOpt(KEY_PARENT_UUIDS, JSONObject.NULL);
} else {
bodyJsonObject.putOpt(KEY_PARENT_UUIDS, new JSONArray(mParentUuids));
}
bodyJsonObject.putOpt(KEY_TAGS, mTags != null && mTags.size() > 0 ? new JSONArray(mTags) : JSONObject.NULL);
if (!TextUtils.isEmpty(mUuid))
bodyJsonObject.putOpt(KEY_UUID, mUuid);
......
......@@ -27,6 +27,7 @@ public class WarplyUserCouponsRequest {
private final String KEY_ACTION_VALUE = "get_user_coupons";
private final String KEY_FETCH_DATA = "fetch_data";
private final String KEY_FETCH_VALUE = "transaction";
private final String KEY_FETCH_VALUE2 = "communication";
// ===========================================================
// Fields
......@@ -142,6 +143,7 @@ public class WarplyUserCouponsRequest {
bodyJsonObject.putOpt(KEY_ACTION, KEY_ACTION_VALUE);
JSONArray fetch = new JSONArray();
fetch.put(KEY_FETCH_VALUE);
fetch.put(KEY_FETCH_VALUE2);
bodyJsonObject.putOpt(KEY_FETCH_DATA, fetch);
} catch (JSONException e) {
if (WarpConstants.DEBUG)
......
......@@ -25,6 +25,9 @@
package ly.warp.sdk.utils.constants;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
public class WarpConstants {
/**
......@@ -75,6 +78,11 @@ public class WarpConstants {
public static final int RANDOM_MAX = 60;
public static final int JOB_SERVICE_ID = 10001;
public static final LatLngBounds GREECE_BOUNDS = new LatLngBounds(
new LatLng(34.75261, 19.33079),
new LatLng(41.97761, 28.62522)
);
/* Result codes */
public static final int RESULT_CODE_SUCCESS = 1;
......
......@@ -165,6 +165,7 @@
android:layout_marginTop="64dp"
android:background="@drawable/selector_button_green"
android:gravity="center"
android:visibility="gone"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
......@@ -189,7 +190,6 @@
android:background="@drawable/selector_button_grey"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_gift_it">
......
<RelativeLayout 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="match_parent"
android:background="@android:color/white">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_loyalty_wallet_header"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/white">
<ImageView
android:id="@+id/iv_coupon_share_back"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="16dp"
android:src="@drawable/ic_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cos_coupon_gift"
android:textColor="@color/grey"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/cl_loyalty_wallet_header">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_loyalty_info_view_inner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_cos_loyalty_white"
android:paddingBottom="48dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.github.siyamed.shapeimageview.mask.PorterShapeImageView
android:id="@+id/imageView6"
android:layout_width="match_parent"
android:layout_height="224dp"
android:layout_marginTop="4dp"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:siShape="@drawable/shape_top_left_rounded"
tools:src="@drawable/carousel_banner" />
<TextView
android:id="@+id/textView13"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:gravity="center"
android:paddingHorizontal="32dp"
android:textColor="#415564"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.509"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView6"
tools:text="Πάρε δωρεάν μηνιαία πακέτα με πάνες στα supermarket Σκλαβενίτης!" />
<TextView
android:id="@+id/textView14"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
android:paddingHorizontal="32dp"
android:text="@string/cos_coupon_share_gift_title"
android:textColor="#415564"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView13" />
<RelativeLayout
android:id="@+id/ll_share_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView14">
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:text="@string/cos_coupon_share_sender"
android:textColor="@color/grey"
android:textSize="16sp" />
<ImageView
android:id="@+id/iv_arrow_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:tint="@color/blue_dark"
android:rotation="90"
android:src="@drawable/ic_arrow_right_white"/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</RelativeLayout>
<RelativeLayout 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="match_parent"
android:background="@android:color/white">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_loyalty_wallet_header"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/white">
<ImageView
android:id="@+id/iv_shops_back"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="16dp"
android:src="@drawable/ic_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cos_coupon_shops_title"
android:textColor="@color/grey"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:id="@+id/cl_loyalty_info_view_inner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/cl_loyalty_wallet_header">
<fragment
android:id="@+id/mv_shops"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</RelativeLayout>
<resources>
<string name="google_maps_key">AIzaSyB-K6OiUDT_X0zp2jYjqHg54ThxEuZtr9I</string>
<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>
......@@ -87,6 +89,10 @@
<string name="cos_dlg_negative_button2">Άκυρο</string>
<string name="cos_profile_preferences">+Προτιμήσεις</string>
<string name="cos_shops">Δες τα καταστήματα</string>
<string name="cos_coupon_shops_title">Καταστήματα</string>
<string name="cos_coupon_gift">Κάντο δώρο!</string>
<string name="cos_coupon_share_gift_title">Επίλεξε τον αριθμό από τον οποίο θα στείλεις το δώρο και καταχώρησε το COSMOTE τηλέφωνο του φίλου σου.</string>
<string name="cos_coupon_share_sender">Αποστολέας</string>
<string-array name="coupons_array">
<item>Κουπόνια</item>
......