浏览代码

增加内购页界面以及统一消费积分逻辑

zk 1 年之前
父节点
当前提交
7854487985

+ 1 - 1
app/src/main/java/com/atmob/voiceai/data/repositories/ConfigRepository.java

@@ -36,7 +36,7 @@ public class ConfigRepository {
 
     private boolean requesting;
 
-    private final MutableLiveData<Integer> voiceTextLimit = new MutableLiveData<>();
+    private final MutableLiveData<Integer> voiceTextLimit = new MutableLiveData<>(-1);
 
     @Inject
     public ConfigRepository(AtmobApi atmobApi) {

+ 25 - 0
app/src/main/java/com/atmob/voiceai/data/repositories/MemberRepository.java

@@ -10,6 +10,7 @@ import com.android.billingclient.api.BillingClient;
 import com.android.billingclient.api.Purchase;
 import com.atmob.app.lib.handler.RxHttpHandler;
 import com.atmob.common.logging.AtmobLog;
+import com.atmob.common.runtime.ContextUtil;
 import com.atmob.voiceai.data.api.AtmobApi;
 import com.atmob.voiceai.data.api.bean.MemberInfoBean;
 import com.atmob.voiceai.data.api.request.BaseRequest;
@@ -24,6 +25,8 @@ import com.atmob.voiceai.data.api.response.UserInfoResponse;
 import com.atmob.voiceai.data.consts.ErrorCode;
 import com.atmob.voiceai.data.consts.EventId;
 import com.atmob.voiceai.handlers.EventHandler;
+import com.atmob.voiceai.module.integral.InternalPurchaseActivity;
+import com.atmob.voiceai.module.subscription.SubscriptionPageActivity;
 import com.atmob.voiceai.sdk.billing.GPBillingClient;
 import com.atmob.voiceai.utils.BoxingUtil;
 
@@ -49,6 +52,8 @@ public class MemberRepository {
     private boolean requestUserInfoDisabled;
     private final Handler refreshMemberHandler = new Handler();
 
+    private long nowConsumptionTime;
+
     @Inject
     public MemberRepository(AtmobApi atmobApi, GPBillingClient gpBillingClient) {
         this.atmobApi = atmobApi;
@@ -149,6 +154,26 @@ public class MemberRepository {
     }
 
 
+    public void consumptionIntegral(int integral, @NonNull Runnable runnable) {
+        //积分是否足够
+        int creditValue = BoxingUtil.boxing(credit.getValue());
+        if (integral <= creditValue) {
+            runnable.run();
+            return;
+        }
+        long consumptionRefresh = 60 * 1000;
+        if (nowConsumptionTime == 0 || System.currentTimeMillis() - nowConsumptionTime > consumptionRefresh) {
+            nowConsumptionTime = System.currentTimeMillis();
+            refreshUserData();
+        }
+        if (BoxingUtil.boxing(isMember.getValue())) {
+            InternalPurchaseActivity.start(ContextUtil.getContext());
+        } else {
+            SubscriptionPageActivity.start(ContextUtil.getContext());
+        }
+    }
+
+
     public void refreshUserData() {
         if (requestUserInfoDisabled) {
             return;

+ 55 - 0
app/src/main/java/com/atmob/voiceai/module/integral/InternalPurchaseActivity.java

@@ -0,0 +1,55 @@
+package com.atmob.voiceai.module.integral;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+
+import com.atmob.app.lib.base.BaseActivity;
+import com.atmob.voiceai.databinding.ActivityInternalPurchaseBinding;
+import com.atmob.voiceai.module.main.MainActivity;
+
+public class InternalPurchaseActivity extends BaseActivity<ActivityInternalPurchaseBinding> {
+
+
+    private InternalPurchaseViewModel internalPurchaseViewModel;
+
+
+    public static void start(Context context) {
+        Intent intent = new Intent(context, InternalPurchaseActivity.class);
+        if (!(context instanceof Activity)) {
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        }
+        context.startActivity(intent);
+    }
+
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        initView();
+        initObserver();
+    }
+
+    private void initView() {
+
+    }
+
+    private void initObserver() {
+
+    }
+
+    @Override
+    protected void initViewModel() {
+        super.initViewModel();
+        internalPurchaseViewModel = getViewModelProvider().get(InternalPurchaseViewModel.class);
+        binding.setInternalPurchaseViewModel(internalPurchaseViewModel);
+    }
+
+    @Override
+    protected boolean shouldImmersion() {
+        return true;
+    }
+}

+ 6 - 0
app/src/main/java/com/atmob/voiceai/module/integral/InternalPurchaseViewModel.java

@@ -0,0 +1,6 @@
+package com.atmob.voiceai.module.integral;
+
+import com.atmob.app.lib.base.BaseViewModel;
+
+public class InternalPurchaseViewModel extends BaseViewModel {
+}

+ 1 - 1
app/src/main/java/com/atmob/voiceai/module/voiceai/VoiceAIViewModel.java

@@ -148,7 +148,7 @@ public class VoiceAIViewModel extends BaseViewModel {
             ToastUtil.show(R.string.voice_ai_no_choice, ToastUtil.LENGTH_SHORT);
             return;
         }
-        requestGenerateVoice();
+        memberRepository.consumptionIntegral(content.length(), this::requestGenerateVoice);
     }
 
     private void requestGenerateVoice() {

+ 0 - 1
app/src/main/java/com/atmob/voiceai/utils/CommonUtils.java

@@ -1,6 +1,5 @@
 package com.atmob.voiceai.utils;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;

+ 8 - 0
app/src/main/java/com/atmob/voiceai/widget/IgnoreNoEnterActionEditText.java

@@ -31,7 +31,15 @@ public class IgnoreNoEnterActionEditText extends AppCompatEditText {
         return conn;
     }
 
+    @Override
+    public void setText(CharSequence text, BufferType type) {
+        super.setText(text, type);
+    }
+
     public void setMaxLength(int maxLength) {
+        if (maxLength == -1) {
+            return;
+        }
         InputFilter[] filters = new InputFilter[1];
         filters[0] = new InputFilter.LengthFilter(maxLength);
         setFilters(filters);

+ 16 - 0
app/src/main/res/layout/activity_internal_purchase.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="internalPurchaseViewModel"
+            type="com.atmob.voiceai.module.integral.InternalPurchaseViewModel" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>