From b4ea0d2f5138301efce41037dec2fd72cb2547e4 Mon Sep 17 00:00:00 2001 From: k0shk0sh Date: Tue, 3 Oct 2017 11:29:57 +0200 Subject: [PATCH] made promo codes more easier to handle --- .../fastaccess/data/dao/ProUsersModel.java | 56 +++++++++++++++++++ .../main/premium/GmsTaskListeners.java | 48 ++++++++++++++++ .../modules/main/premium/PremiumPresenter.kt | 44 ++++++++++----- 3 files changed, 133 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/fastaccess/data/dao/ProUsersModel.java create mode 100644 app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java diff --git a/app/src/main/java/com/fastaccess/data/dao/ProUsersModel.java b/app/src/main/java/com/fastaccess/data/dao/ProUsersModel.java new file mode 100644 index 00000000..b6be3850 --- /dev/null +++ b/app/src/main/java/com/fastaccess/data/dao/ProUsersModel.java @@ -0,0 +1,56 @@ +package com.fastaccess.data.dao; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Created by Hashemsergani on 03.10.17. + */ + +public class ProUsersModel implements Parcelable { + private int count; + private boolean allowed; + private int type; + + public int getCount() { return count;} + + public void setCount(int count) { this.count = count;} + + public boolean isAllowed() { return allowed;} + + public void setAllowed(boolean allowed) { this.allowed = allowed;} + + public int getType() { return type;} + + public void setType(int type) { this.type = type;} + + @Override public String toString() { + return "ProUsersModel{" + + ", count=" + count + + ", allowed=" + allowed + + ", type=" + type + + '}'; + } + + public ProUsersModel() {} + + @Override public int describeContents() { return 0; } + + @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(this.count); + dest.writeByte(this.allowed ? (byte) 1 : (byte) 0); + dest.writeInt(this.type); + } + + protected ProUsersModel(Parcel in) { + this.count = in.readInt(); + this.allowed = in.readByte() != 0; + this.type = in.readInt(); + } + + public static final Creator CREATOR = new Creator() { + @Override public ProUsersModel createFromParcel(Parcel source) {return new ProUsersModel(source);} + + @Override public ProUsersModel[] newArray(int size) {return new ProUsersModel[size];} + }; +} diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java b/app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java new file mode 100644 index 00000000..e15fd70c --- /dev/null +++ b/app/src/main/java/com/fastaccess/ui/modules/main/premium/GmsTaskListeners.java @@ -0,0 +1,48 @@ +package com.github.b3er.rxfirebase.common; + +import android.support.annotation.NonNull; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import io.reactivex.CompletableEmitter; +import io.reactivex.SingleEmitter; + +public final class GmsTaskListeners { + + private GmsTaskListeners() { + throw new AssertionError("No instances"); + } + + public static OnCompleteListener listener(@NonNull final SingleEmitter emitter) { + return new OnCompleteListener() { + @Override public void onComplete(@NonNull Task task) { + if (!task.isSuccessful()) { + if (!emitter.isDisposed()) { + emitter.onError(task.getException()); + } + return; + } + + if (!emitter.isDisposed()) { + emitter.onSuccess(task.getResult()); + } + } + }; + } + + public static OnCompleteListener listener(@NonNull final CompletableEmitter emitter) { + return new OnCompleteListener() { + @Override public void onComplete(@NonNull Task task) { + if (!task.isSuccessful()) { + if (!emitter.isDisposed()) { + emitter.onError(task.getException()); + } + return; + } + + if (!emitter.isDisposed()) { + emitter.onComplete(); + } + } + }; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumPresenter.kt index ac73d355..034deaea 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumPresenter.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumPresenter.kt @@ -1,9 +1,12 @@ package com.fastaccess.ui.modules.main.premium +import com.fastaccess.data.dao.ProUsersModel +import com.fastaccess.helper.Logger import com.fastaccess.helper.PrefGetter import com.fastaccess.helper.RxHelper import com.fastaccess.ui.base.mvp.presenter.BasePresenter import com.github.b3er.rxfirebase.database.data +import com.github.b3er.rxfirebase.database.rxUpdateChildren import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.GenericTypeIndicator import io.reactivex.Observable @@ -15,32 +18,43 @@ import io.reactivex.Observable class PremiumPresenter : BasePresenter(), PremiumMvp.Presenter { override fun onCheckPromoCode(promo: String) { val ref = FirebaseDatabase.getInstance().reference - manageDisposable(RxHelper.getObservable(ref.child("promoCodes") + manageDisposable(RxHelper.getObservable(ref.child("fasthub_pro").child(promo) .data() .toObservable()) .doOnSubscribe { sendToView { it.showProgress(0) } } .flatMap { - var exists: Boolean? = false + var user = ProUsersModel() + Logger.e(it.exists(), it.hasChildren(), it.value) if (it.exists()) { - val gti = object : GenericTypeIndicator>() {} - val map = it.getValue(gti) - exists = map?.contains(promo) - } - return@flatMap Observable.just(exists) - } - .doOnComplete { sendToView { it.hideProgress() } } - .subscribe({ - when (it) { - true -> sendToView { - if (promo.contains("student")) { + val gti = object : GenericTypeIndicator() {} + user = it.getValue(gti) ?: ProUsersModel() + Logger.e(user) + if (user.isAllowed) { + if (user.type == 1) { PrefGetter.setProItems() + user.isAllowed = false + user.count = user.count + 1 + return@flatMap ref.child("fasthub_pro").rxUpdateChildren(hashMapOf(Pair(promo, user))) + .toObservable() + .map { true } } else { PrefGetter.setProItems() PrefGetter.setEnterpriseItem() + user.count = user.count + 1 + return@flatMap ref.child("fasthub_pro").rxUpdateChildren(hashMapOf(Pair(promo, user))) + .toObservable() + .map { true } } - it.onSuccessfullyActivated() } - else -> sendToView { it.onNoMatch() } + } + return@flatMap Observable.just(user.isAllowed) + } + .doOnComplete { sendToView { it.hideProgress() } } + .subscribe({ + if (it) { + sendToView { it.onSuccessfullyActivated() } + } else { + sendToView { it.onNoMatch() } } }, ::println)) }