Browse Source

调整会员页内容

zk 1 year ago
parent
commit
bcc5dac890
28 changed files with 402 additions and 130 deletions
  1. 4 1
      app/src/main/AndroidManifest.xml
  2. 1 1
      app/src/main/java/com/datarecovery/master/data/api/AtmobApi.java
  3. 42 0
      app/src/main/java/com/datarecovery/master/data/api/bean/MemberGoodsBean.java
  4. 13 9
      app/src/main/java/com/datarecovery/master/module/member/MemberActivity.java
  5. 3 3
      app/src/main/java/com/datarecovery/master/module/member/MemberViewModel.java
  6. 59 0
      app/src/main/java/com/datarecovery/master/module/member/ServiceDescriptionActivity.java
  7. BIN
      app/src/main/res/drawable-xxhdpi/bg_member_clear_unlimited.webp
  8. BIN
      app/src/main/res/drawable-xxhdpi/bg_member_goods_type_normal.webp
  9. BIN
      app/src/main/res/drawable-xxhdpi/bg_member_goods_type_selected.webp
  10. BIN
      app/src/main/res/drawable-xxhdpi/bg_member_one_aging.webp
  11. BIN
      app/src/main/res/drawable-xxhdpi/bg_member_permanent.webp
  12. BIN
      app/src/main/res/drawable-xxhdpi/bg_member_recover_unlimited.webp
  13. BIN
      app/src/main/res/drawable-xxhdpi/icon_hot.webp
  14. BIN
      app/src/main/res/drawable-xxhdpi/icon_member_goods_checked.webp
  15. BIN
      app/src/main/res/drawable-xxhdpi/icon_star.webp
  16. 10 0
      app/src/main/res/drawable/bg_member_aging.xml
  17. 6 0
      app/src/main/res/drawable/bg_member_evaluate.xml
  18. 9 0
      app/src/main/res/drawable/bg_member_goods_type_normal.xml
  19. 11 0
      app/src/main/res/drawable/bg_member_goods_type_selected.xml
  20. 15 0
      app/src/main/res/drawable/bg_member_retention_buy_btn.xml
  21. 4 5
      app/src/main/res/drawable/bg_member_tag.xml
  22. 1 1
      app/src/main/res/drawable/bg_scenes_circle.xml
  23. 12 11
      app/src/main/res/layout/activity_member.xml
  24. 46 0
      app/src/main/res/layout/activity_service_description.xml
  25. 9 9
      app/src/main/res/layout/dialog_member_retention.xml
  26. 32 16
      app/src/main/res/layout/item_member_evaluate.xml
  27. 120 71
      app/src/main/res/layout/item_member_goods.xml
  28. 5 3
      app/src/main/res/values/strings.xml

+ 4 - 1
app/src/main/AndroidManifest.xml

@@ -54,8 +54,8 @@
             </intent-filter>
         </activity>
         <activity
-            android:launchMode="singleTask"
             android:name=".module.main.MainActivity"
+            android:launchMode="singleTask"
             android:screenOrientation="portrait" />
         <activity
             android:name=".module.about.AboutActivity"
@@ -91,6 +91,9 @@
         <activity
             android:name=".module.wxrecover.WeChatRecoverActivity"
             android:screenOrientation="portrait" />
+        <activity
+            android:name=".module.member.ServiceDescriptionActivity"
+            android:screenOrientation="portrait" />
 
 
     </application>

+ 1 - 1
app/src/main/java/com/datarecovery/master/data/api/AtmobApi.java

@@ -36,7 +36,7 @@ public interface AtmobApi {
     @POST("/project/recover/v1/user/logout")
     Single<BaseResponse<Object>> userLogout(@Body BaseRequest request);
 
-    @POST("/project/recover/v1/order/page")
+    @POST("/project/recover/v2/order/page")
     Single<BaseResponse<OrderPageResponse>> orderPage(@Body OrderPageRequest request);
 
     @POST("/project/recover/v1/func/auths")

+ 42 - 0
app/src/main/java/com/datarecovery/master/data/api/bean/MemberGoodsBean.java

@@ -1,9 +1,12 @@
 package com.datarecovery.master.data.api.bean;
 
+import android.graphics.drawable.Drawable;
+
 import androidx.databinding.BaseObservable;
 import androidx.databinding.Bindable;
 
 import com.datarecovery.master.BR;
+import com.datarecovery.master.R;
 import com.datarecovery.master.module.member.MemberType;
 import com.google.gson.annotations.SerializedName;
 
@@ -89,4 +92,43 @@ public class MemberGoodsBean extends BaseObservable {
     }
 
 
+    public int getUnlimitedImg() {
+        if (Objects.equals(auths, MemberType.APP_IMAGE_CLEAN)) {
+            return R.drawable.bg_member_clear_unlimited;
+        } else {
+            return R.drawable.bg_member_recover_unlimited;
+        }
+    }
+
+    public int getValidityPeriod() {
+        if (!Objects.equals(auths, MemberType.APP_IMAGE_CLEAN) || popular) {
+            return R.drawable.bg_member_permanent;
+        } else {
+            return R.drawable.bg_member_one_aging;
+        }
+    }
+
+
+    public String getCopywriting() {
+        if (Objects.equals(auths, MemberType.APP_SUPER_RECOVER)) {
+            return "解锁全部恢复功能 (微信消息、微信好友、图片、视频、文件、音频)";
+        } else if (Objects.equals(auths, MemberType.APP_IMAGE_CLEAN)) {
+            if (popular) {
+                return "该服务在一年内可以无上限清除相册、微信、QQ图片清除";
+            } else {
+                return "清除相册丨微信丨QQ图片数据";
+            }
+        } else if (Objects.equals(auths, MemberType.APP_WX_MESSAGE_RECOVER) || Objects.equals(auths, MemberType.APP_WX_FRIEND_RECOVER)) {
+            return "恢复,查阅,导出微信好友";
+        } else if (Objects.equals(auths, MemberType.APP_IMAGE_RECOVER)) {
+            return "全力恢复图片数据";
+        } else if (Objects.equals(auths, MemberType.APP_FILE_RECOVER)) {
+            return "全力恢复文件数据";
+        } else if (Objects.equals(auths, MemberType.APP_VIDEO_RECOVER)) {
+            return "全力恢复视频数据";
+        } else if (Objects.equals(auths, MemberType.APP_AUDIO_RECOVER)) {
+            return "全力恢复音频数据";
+        }
+        return "";
+    }
 }

+ 13 - 9
app/src/main/java/com/datarecovery/master/module/member/MemberActivity.java

@@ -4,17 +4,16 @@ import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Color;
 import android.os.Bundle;
 import android.util.Pair;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.widget.NestedScrollView;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
 
 import com.atmob.app.lib.base.BaseActivity;
-import com.atmob.common.ui.SizeUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.databinding.ActivityMemberBinding;
@@ -24,22 +23,20 @@ import com.datarecovery.master.dialog.CommonLoadingDialog;
 import com.datarecovery.master.dialog.MemberRetentionDialog;
 import com.datarecovery.master.dialog.WechatPayQrCodeDialog;
 import com.datarecovery.master.handler.EventHelper;
-import com.datarecovery.master.module.audiorecover.AudioRecoverActivity;
-import com.datarecovery.master.module.filerecover.FileRecoverActivity;
 import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
 import com.datarecovery.master.module.main.MainActivity;
-import com.datarecovery.master.module.videorecover.VideoRecoverActivity;
 import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.GridLayoutItemDecoration;
+import com.datarecovery.master.utils.GridRecoverItemDecoration;
 import com.datarecovery.master.utils.Maps;
 import com.datarecovery.master.utils.ReportUtil;
+import com.datarecovery.master.utils.SpannableUtil;
 import com.datarecovery.master.widget.InformationSwitchBanner;
 import com.gyf.immersionbar.ImmersionBar;
 
 import java.util.Objects;
 
-import atmob.reactivex.rxjava3.disposables.Disposable;
 import dagger.hilt.android.AndroidEntryPoint;
 
 @AndroidEntryPoint
@@ -53,7 +50,7 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
 
     private NormalScenesAdapter normalScenesAdapter;
     private GridLayoutManager gridLayoutManager;
-    private GridLayoutItemDecoration gridLayoutItemDecoration;
+    private GridRecoverItemDecoration gridLayoutItemDecoration;
     private MemberEvaluateAdapter memberEvaluateAdapter;
     private MemberRetentionDialog memberRetentionDialog;
     private ChoosePaymentWayDialog choosePaymentWayDialog;
@@ -104,8 +101,7 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
 
         normalScenesAdapter = new NormalScenesAdapter();
         gridLayoutManager = new GridLayoutManager(this, 2);
-        gridLayoutItemDecoration = new GridLayoutItemDecoration();
-        gridLayoutItemDecoration.setParam(2, 0, 0.0166666666666667f);
+        gridLayoutItemDecoration = new GridRecoverItemDecoration(2, 0, 0.232926829268293f, false);
         binding.scenesRyView.addItemDecoration(gridLayoutItemDecoration);
         binding.scenesRyView.setLayoutManager(gridLayoutManager);
         binding.scenesRyView.setAdapter(normalScenesAdapter);
@@ -115,6 +111,14 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
         binding.userEvaluateRyView.setAdapter(memberEvaluateAdapter);
 
         binding.toolBar.setNavigationOnClickListener(v -> onBackPressed());
+
+        SpannableUtil.getAgreementSpannableStringBuilder(binding.tvBuyMemberDesc,
+                getResources().getString(R.string.member_service_description_all),
+                new String[]{getResources().getString(R.string.member_service_description)},
+                Color.parseColor("#FCEAC7"),
+                false,
+                v -> ServiceDescriptionActivity.start(this, memberViewModel.getServiceContentTxt())
+        );
     }
 
     private void initObserver() {

+ 3 - 3
app/src/main/java/com/datarecovery/master/module/member/MemberViewModel.java

@@ -74,7 +74,7 @@ public class MemberViewModel extends BaseViewModel {
     private final MutableLiveData<List<MemberGoodsBean>> memberGoodsList = new MutableLiveData<>();
     private final MutableLiveData<List<PayOptionsBean>> payWayList = new MutableLiveData<>();
     private final MutableLiveData<MemberGoodsBean> selectBean = new MutableLiveData<>();
-    private final MutableLiveData<String> serviceContentTxt = new MutableLiveData<>();
+    private String serviceContentTxt;
     private final MutableLiveData<List<EvaluateBean>> evaluateList = new MutableLiveData<>();
 
     private final SingleLiveEvent<String> onSubscribeSuccessEvent = new SingleLiveEvent<>();
@@ -134,7 +134,7 @@ public class MemberViewModel extends BaseViewModel {
         return showChoicePayWayDialog;
     }
 
-    public LiveData<String> getServiceContentTxt() {
+    public String getServiceContentTxt() {
         return serviceContentTxt;
     }
 
@@ -238,7 +238,7 @@ public class MemberViewModel extends BaseViewModel {
                     public void onSuccess(@NonNull MemberDetailResponse memberDetailResponse) {
                         memberGoodsList.setValue(memberDetailResponse.getList());
                         payWayList.setValue(memberDetailResponse.getPayOptions());
-                        serviceContentTxt.setValue(memberDetailResponse.getDescription());
+                        serviceContentTxt = memberDetailResponse.getDescription();
                         List<MemberGoodsBean> list = memberDetailResponse.getList();
                         if (list != null && !list.isEmpty()) {
                             for (MemberGoodsBean bean : list) {

+ 59 - 0
app/src/main/java/com/datarecovery/master/module/member/ServiceDescriptionActivity.java

@@ -0,0 +1,59 @@
+package com.datarecovery.master.module.member;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.atmob.app.lib.base.BaseActivity;
+import com.datarecovery.master.databinding.ActivityServiceDescriptionBinding;
+import com.gyf.immersionbar.ImmersionBar;
+
+import dagger.hilt.android.AndroidEntryPoint;
+
+@AndroidEntryPoint
+public class ServiceDescriptionActivity extends BaseActivity<ActivityServiceDescriptionBinding> {
+
+    private static final String DESCRIPTION = "description";
+
+    public static void start(Context context, String description) {
+        Intent intent = new Intent(context, ServiceDescriptionActivity.class);
+        if (!(context instanceof Activity)) {
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        }
+        intent.putExtra(DESCRIPTION, description);
+        context.startActivity(intent);
+    }
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        initView();
+        initData();
+    }
+
+    @Override
+    protected void configImmersion(@NonNull ImmersionBar immersionBar) {
+        super.configImmersion(immersionBar);
+        immersionBar.statusBarDarkFont(true);
+    }
+
+    private void initView() {
+        addTopStatusBarHeight(binding.toolBar);
+    }
+
+    private void initData() {
+        Intent intent = getIntent();
+        if (intent != null) {
+            binding.setDescription(intent.getStringExtra(DESCRIPTION));
+        }
+    }
+
+    @Override
+    protected boolean shouldImmersion() {
+        return true;
+    }
+}

BIN
app/src/main/res/drawable-xxhdpi/bg_member_clear_unlimited.webp


BIN
app/src/main/res/drawable-xxhdpi/bg_member_goods_type_normal.webp


BIN
app/src/main/res/drawable-xxhdpi/bg_member_goods_type_selected.webp


BIN
app/src/main/res/drawable-xxhdpi/bg_member_one_aging.webp


BIN
app/src/main/res/drawable-xxhdpi/bg_member_permanent.webp


BIN
app/src/main/res/drawable-xxhdpi/bg_member_recover_unlimited.webp


BIN
app/src/main/res/drawable-xxhdpi/icon_hot.webp


BIN
app/src/main/res/drawable-xxhdpi/icon_member_goods_checked.webp


BIN
app/src/main/res/drawable-xxhdpi/icon_star.webp


+ 10 - 0
app/src/main/res/drawable/bg_member_aging.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners
+        android:bottomLeftRadius="12dp"
+        android:bottomRightRadius="12dp" />
+
+    <gradient
+        android:endColor="#00DBE0FF"
+        android:startColor="#DBE0FF" />
+</shape>

+ 6 - 0
app/src/main/res/drawable/bg_member_evaluate.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="10dp" />
+
+    <solid android:color="@color/white" />
+</shape>

+ 9 - 0
app/src/main/res/drawable/bg_member_goods_type_normal.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="12dp" />
+    <stroke
+        android:width="2dp"
+        android:color="#F1F3FF" />
+
+    <solid android:color="@color/white" />
+</shape>

+ 11 - 0
app/src/main/res/drawable/bg_member_goods_type_selected.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="12dp" />
+    <stroke
+        android:width="2dp"
+        android:color="#BFC6EF" />
+
+    <gradient
+        android:endColor="#EAEBFF"
+        android:startColor="#F9F9FF" />
+</shape>

+ 15 - 0
app/src/main/res/drawable/bg_member_retention_buy_btn.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="8dp" />
+    <stroke
+        android:width="1dp"
+        android:color="#FFD99D" />
+    <gradient
+        android:centerX="0.375"
+        android:centerColor="#FFEEC3"
+        android:endColor="#FFC977"
+        android:startColor="#FFE0A4" />
+    android:angle="-90"
+    android:endColor="#FFC285"
+    android:startColor="#FCEBC8" />
+</shape>

+ 4 - 5
app/src/main/res/drawable/bg_member_tag.xml

@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <corners
-        android:bottomRightRadius="6dp"
-        android:topLeftRadius="6dp"
-        android:topRightRadius="6dp" />
+        android:bottomRightRadius="10dp"
+        android:topLeftRadius="10dp" />
 
     <gradient
-        android:endColor="#FF8C19"
-        android:startColor="#FF4006" />
+        android:endColor="#D44C8F"
+        android:startColor="#5F30F1" />
 </shape>

+ 1 - 1
app/src/main/res/drawable/bg_scenes_circle.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
-    <solid android:color="#D9D9D9" />
+    <solid android:color="#B4C8DF" />
 </shape>

+ 12 - 11
app/src/main/res/layout/activity_member.xml

@@ -14,8 +14,8 @@
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
-        android:background="#4C61E5"
-        android:layout_height="match_parent">
+        android:layout_height="match_parent"
+        android:background="#4C61E5">
 
         <androidx.appcompat.widget.Toolbar
             android:id="@+id/tool_bar"
@@ -138,10 +138,10 @@
 
                 <androidx.recyclerview.widget.RecyclerView
                     android:id="@+id/member_detail_list"
-                    android:overScrollMode="never"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginHorizontal="@dimen/app_common_page_horizontal_padding"
+                    android:overScrollMode="never"
                     app:layout_constraintEnd_toEndOf="@id/v_buy_list_bg"
                     app:layout_constraintStart_toStartOf="@id/v_buy_list_bg"
                     app:layout_constraintTop_toBottomOf="@+id/space4"
@@ -152,7 +152,7 @@
                     android:id="@+id/space5"
                     android:layout_width="match_parent"
                     android:layout_height="0dp"
-                    app:layout_constraintDimensionRatio="360:26"
+                    app:layout_constraintDimensionRatio="360:19"
                     app:layout_constraintTop_toBottomOf="@+id/member_detail_list" />
 
                 <View
@@ -187,7 +187,8 @@
                     android:layout_marginTop="10dp"
                     android:background="@drawable/bg_scenes_container"
                     android:overScrollMode="never"
-                    android:padding="8dp"
+                    android:paddingHorizontal="12dp"
+                    android:paddingVertical="8dp"
                     app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
                     app:layout_constraintEnd_toEndOf="@id/v_buy_list_bg"
                     app:layout_constraintStart_toStartOf="@id/v_buy_list_bg"
@@ -221,8 +222,8 @@
                     android:id="@+id/v_user_evaluate_bg"
                     android:layout_width="match_parent"
                     android:layout_height="0dp"
-                    app:layout_constraintBottom_toBottomOf="@+id/space10"
                     android:background="@drawable/bg_member_evaluate_container"
+                    app:layout_constraintBottom_toBottomOf="@+id/space10"
                     app:layout_constraintTop_toTopOf="@id/space8" />
 
                 <ImageView
@@ -312,10 +313,10 @@
                     app:layout_constraintWidth_percent="0.7444444444444444" />
 
                 <Space
-                    app:layout_constraintDimensionRatio="360:90"
-                    app:layout_constraintTop_toBottomOf="@+id/v_bottom_bg"
                     android:layout_width="match_parent"
-                    android:layout_height="0dp" />
+                    android:layout_height="0dp"
+                    app:layout_constraintDimensionRatio="360:90"
+                    app:layout_constraintTop_toBottomOf="@+id/v_bottom_bg" />
 
             </androidx.constraintlayout.widget.ConstraintLayout>
 
@@ -350,11 +351,11 @@
             tools:text="立即开通" />
 
         <TextView
-            android:textColor="@color/white60"
             android:id="@+id/tv_buy_member_desc"
-            android:layout_marginTop="8dp"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_marginTop="8dp"
+            android:textColor="@color/white60"
             app:layout_constraintEnd_toEndOf="@+id/tv_buy_member"
             app:layout_constraintStart_toStartOf="@+id/tv_buy_member"
             app:layout_constraintTop_toBottomOf="@+id/tv_buy_member"

+ 46 - 0
app/src/main/res/layout/activity_service_description.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <variable
+            name="description"
+            type="String" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/tool_bar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:layout_constraintTop_toTopOf="parent"
+            app:navigationIcon="@drawable/icon_back">
+
+            <TextView
+                style="@style/Tool_Bar_Title_Txt"
+                android:text="@string/member_service_description_title" />
+        </androidx.appcompat.widget.Toolbar>
+
+        <ScrollView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:scrollbars="none"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tool_bar">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:padding="@dimen/app_common_page_horizontal_padding"
+                android:text="@{description}"
+                android:textColor="#A7A7A7"
+                android:textSize="12sp" />
+        </ScrollView>
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 9 - 9
app/src/main/res/layout/dialog_member_retention.xml

@@ -51,14 +51,13 @@
             app:layout_constraintWidth_percent="0.3416666666666667" />
 
         <TextView
-            android:id="@+id/retention_give_up_text"
+            android:id="@+id/tv_retention_give_up_text"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginTop="12dp"
-            android:text="@string/retention_give_up_title"
+            android:layout_marginTop="14dp"
+            android:text="@string/dialog_kind_tips"
             android:textColor="#6A3420"
-            android:textSize="20sp"
-            android:textStyle="bold"
+            android:textSize="14sp"
             app:layout_constraintBottom_toBottomOf="@+id/bg_dialog_member_retention"
             app:layout_constraintLeft_toLeftOf="@+id/bg_dialog_member_retention"
             app:layout_constraintRight_toRightOf="@+id/bg_dialog_member_retention"
@@ -70,17 +69,18 @@
             android:layout_height="wrap_content"
             android:layout_marginTop="4dp"
             android:text="@string/retention_give_up_text"
-            android:textColor="#949494"
-            android:textSize="14sp"
+            android:textColor="#6A3420"
+            android:textSize="20sp"
+            android:textStyle="bold"
             app:layout_constraintEnd_toEndOf="@id/bg_dialog_member_retention"
             app:layout_constraintStart_toStartOf="@id/bg_dialog_member_retention"
-            app:layout_constraintTop_toBottomOf="@+id/retention_give_up_text" />
+            app:layout_constraintTop_toBottomOf="@+id/tv_retention_give_up_text" />
 
         <TextView
             android:layout_width="0dp"
             android:layout_height="0dp"
             android:layout_marginTop="24dp"
-            android:background="@drawable/bg_member_buy_btn"
+            android:background="@drawable/bg_member_retention_buy_btn"
             android:gravity="center"
             android:onClickListener="@{onContinueClickListener}"
             android:text="@string/retention_continue_text"

+ 32 - 16
app/src/main/res/layout/item_member_evaluate.xml

@@ -17,20 +17,29 @@
             android:id="@+id/space_top"
             android:layout_width="match_parent"
             android:layout_height="0dp"
-            app:layout_constraintDimensionRatio="360:12"
+            app:layout_constraintDimensionRatio="360:14"
             app:layout_constraintTop_toTopOf="parent" />
 
+        <View
+            android:id="@+id/v_bg"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_marginHorizontal="12dp"
+            android:background="@drawable/bg_member_evaluate"
+            app:layout_constraintBottom_toBottomOf="@+id/space_bottom"
+            app:layout_constraintTop_toTopOf="@id/space_top" />
+
         <ImageView
             android:id="@+id/icon_member_evaluate_header"
             imageRes="@{evaluateBean.icon}"
             radius="@{100}"
             android:layout_width="0dp"
             android:layout_height="0dp"
-            android:layout_marginStart="@dimen/app_common_page_horizontal_padding"
+            android:layout_marginStart="12dp"
             app:layout_constraintDimensionRatio="1:1"
-            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintLeft_toLeftOf="@+id/v_bg"
             app:layout_constraintTop_toBottomOf="@+id/space_top"
-            app:layout_constraintWidth_percent="0.0888888888888889"
+            app:layout_constraintWidth_percent="0.0833333333333333"
             tools:src="@drawable/icon_evaluate_1" />
 
         <TextView
@@ -38,11 +47,11 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="8dp"
-            android:layout_marginTop="4dp"
             android:text="@{evaluateBean.name}"
             android:textColor="#202020"
             android:textSize="15sp"
             android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="@+id/icon_member_evaluate_header"
             app:layout_constraintLeft_toRightOf="@+id/icon_member_evaluate_header"
             app:layout_constraintTop_toTopOf="@+id/icon_member_evaluate_header"
             tools:text="冬季温暖优雅" />
@@ -51,25 +60,26 @@
             android:id="@+id/iv_star"
             android:layout_width="0dp"
             android:layout_height="0dp"
-            android:layout_marginTop="4dp"
+            android:layout_marginStart="8dp"
             android:src="@drawable/icon_star"
-            app:layout_constraintDimensionRatio="249:42"
-            app:layout_constraintStart_toStartOf="@+id/member_name"
-            app:layout_constraintTop_toBottomOf="@+id/member_name"
-            app:layout_constraintWidth_percent="0.2305555555555556" />
+            app:layout_constraintBottom_toBottomOf="@+id/member_name"
+            app:layout_constraintDimensionRatio="15:6"
+            app:layout_constraintStart_toEndOf="@+id/member_name"
+            app:layout_constraintTop_toTopOf="@+id/member_name"
+            app:layout_constraintWidth_percent="0.1388888888888889" />
 
         <TextView
             android:id="@+id/member_evaluate_content"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_marginTop="8dp"
-            android:layout_marginEnd="@dimen/app_common_page_horizontal_padding"
+            android:layout_marginTop="6dp"
+            android:layout_marginEnd="12dp"
             android:text="@{evaluateBean.content}"
             android:textColor="#404040"
-            android:textSize="15sp"
+            android:textSize="13sp"
             app:layout_constraintLeft_toLeftOf="@+id/member_name"
-            app:layout_constraintRight_toRightOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/iv_star"
+            app:layout_constraintRight_toRightOf="@+id/v_bg"
+            app:layout_constraintTop_toBottomOf="@+id/icon_member_evaluate_header"
             tools:text="我非常满意数据恢复服务的效果。他们专业的团队帮助我成功恢复了丢失的文件,让我感到非常安心和放心。他们高效的工作速度和专业的技术水平让我对他们的服务印象深刻。强烈推荐!" />
 
         <Space
@@ -77,9 +87,15 @@
             android:layout_width="match_parent"
             android:layout_height="0dp"
             app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintDimensionRatio="360:21"
+            app:layout_constraintDimensionRatio="360:14"
             app:layout_constraintTop_toBottomOf="@+id/member_evaluate_content" />
 
+        <Space
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="360:12"
+            app:layout_constraintTop_toBottomOf="@id/v_bg" />
+
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </layout>

+ 120 - 71
app/src/main/res/layout/item_member_goods.xml

@@ -15,28 +15,65 @@
     </data>
 
     <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="wrap_content"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginEnd="12dp">
+        android:layout_marginBottom="5dp">
+
+        <Space
+            android:id="@+id/space1"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="328:11"
+            app:layout_constraintTop_toTopOf="parent" />
 
 
         <ImageView
             android:id="@+id/iv_bg"
             imageDraw="@{goodsBean.select ? @drawable/bg_member_goods_type_selected : @drawable/bg_member_goods_type_normal}"
-            android:layout_width="@{(float)SizeUtil.getScreenWidth() * 0.4388888888888889f, default=wrap_content}"
+            android:layout_width="match_parent"
             android:layout_height="0dp"
-            app:layout_constraintDimensionRatio="474:426"
-            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintBottom_toBottomOf="@+id/space_bottom"
             app:layout_constraintTop_toBottomOf="@+id/space1"
-            tools:src="@drawable/bg_member_goods_type_normal" />
+            tools:src="@drawable/bg_member_goods_type_selected" />
 
-        <Space
-            android:id="@+id/space1"
-            android:layout_width="0dp"
+        <TextView
+            android:id="@+id/tv_member_buy_price"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="15dp"
+            android:text="@{TextUtil.formatFloatWithout0End(goodsBean.RMBAmount, 2)}"
+            android:textColor="#2C3986"
+            android:textSize="28sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toTopOf="@+id/iv_aging"
+            app:layout_constraintRight_toRightOf="@+id/iv_bg"
+            app:layout_constraintTop_toTopOf="@id/iv_bg"
+            app:layout_constraintVertical_bias="0.4186046511627907"
+            tools:text="66"
+            tools:textColor="#404040" />
+
+        <TextView
+            deleteLine="@{Boolean.TRUE}"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="-3dp"
+            android:text="@{@string/member_price(TextUtil.formatFloatWithout0End(goodsBean.originalAmount, 1))}"
+            android:textColor="#66233D6F"
+            android:textSize="11sp"
+            app:layout_constraintEnd_toEndOf="@+id/tv_member_buy_price"
+            app:layout_constraintTop_toBottomOf="@+id/tv_member_buy_price"
+            tools:text="¥299" />
+
+        <TextView
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            app:layout_constraintBottom_toBottomOf="@+id/tv_member_buy_tag"
-            app:layout_constraintStart_toStartOf="@+id/tv_member_buy_tag"
-            app:layout_constraintTop_toTopOf="@+id/tv_member_buy_tag" />
+            android:layout_marginEnd="2dp"
+            android:text="@string/rmb"
+            android:textColor="#2C3986"
+            android:textSize="15sp"
+            android:textStyle="bold"
+            app:layout_constraintBaseline_toBaselineOf="@+id/tv_member_buy_price"
+            app:layout_constraintEnd_toStartOf="@+id/tv_member_buy_price" />
 
         <TextView
             android:id="@+id/tv_member_buy_tag"
@@ -44,89 +81,101 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:background="@drawable/bg_member_tag"
-            android:drawablePadding="2dp"
-            android:paddingHorizontal="10dp"
-            android:paddingVertical="4dp"
+            android:gravity="center"
+            android:paddingHorizontal="12dp"
+            android:paddingVertical="2dp"
             android:text="@string/member_buy_tag_txt"
             android:textColor="@color/white"
-            android:textSize="12sp"
-            android:textStyle="bold"
-            app:drawableStartCompat="@drawable/icon_hot"
+            android:textSize="12dp"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
+        <Space
+            android:id="@+id/space2"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="328:14"
+            app:layout_constraintTop_toTopOf="@+id/iv_bg" />
+
         <TextView
+            android:id="@+id/tv_goods_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_marginStart="12dp"
             android:text="@{goodsBean.name}"
-            android:textColor="#404040"
-            android:textSize="15sp"
+            android:textColor="#2C3986"
+            android:textSize="16sp"
             android:textStyle="bold"
-            app:layout_constraintBottom_toBottomOf="@id/iv_bg"
-            app:layout_constraintEnd_toEndOf="@+id/iv_bg"
             app:layout_constraintStart_toStartOf="@id/iv_bg"
-            app:layout_constraintTop_toTopOf="@id/iv_bg"
-            app:layout_constraintVertical_bias="0.1416666666666667"
-            tools:text="微信信息恢复" />
+            app:layout_constraintTop_toBottomOf="@+id/space2"
+            tools:text="超级恢复" />
 
         <TextView
-            android:id="@+id/tv_member_buy_price_unit"
-            android:layout_width="wrap_content"
+            android:id="@+id/tv_goods_desc"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:text="@string/rmb"
-            android:textColor="@{goodsBean.select ? @color/member_buy_price_text_selected : @color/member_buy_price_text_normal}"
-            android:textSize="20sp"
-            android:textStyle="bold"
-            app:layout_constraintBaseline_toBaselineOf="@id/tv_member_buy_price"
-            app:layout_constraintHorizontal_chainStyle="packed"
-            app:layout_constraintLeft_toLeftOf="@+id/iv_bg"
-            app:layout_constraintRight_toLeftOf="@+id/tv_member_buy_price"
-            tools:textColor="#404040" />
+            android:layout_marginTop="3dp"
+            android:text="@{goodsBean.copywriting}"
+            android:textColor="#2C3986"
+            android:textSize="11sp"
+            app:layout_constraintStart_toStartOf="@+id/tv_goods_name"
+            app:layout_constraintTop_toBottomOf="@+id/tv_goods_name"
+            app:layout_constraintWidth_percent="0.6067073170731707"
+            tools:text="解锁全部恢复功能 (微信消息、微信好友、图片、视频、文件、音频)" />
 
-        <TextView
-            android:id="@+id/tv_member_buy_price"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@{TextUtil.formatFloatWithout0End(goodsBean.RMBAmount, 2)}"
-            android:textColor="@{goodsBean.select ? @color/member_buy_price_text_selected : @color/member_buy_price_text_normal}"
-            android:textSize="40sp"
-            android:textStyle="bold"
-            app:layout_constraintBottom_toBottomOf="@id/iv_bg"
-            app:layout_constraintLeft_toRightOf="@+id/tv_member_buy_price_unit"
-            app:layout_constraintRight_toRightOf="@+id/iv_bg"
-            app:layout_constraintTop_toTopOf="@id/iv_bg"
-            app:layout_constraintVertical_bias="0.4526315789473684"
-            tools:text="66"
-            tools:textColor="#404040" />
+        <Space
+            android:id="@+id/space3"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="328:12"
+            app:layout_constraintTop_toBottomOf="@+id/tv_goods_desc" />
 
-        <TextView
-            deleteLine="@{Boolean.TRUE}"
+
+        <View
+            android:id="@+id/iv_aging"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_marginHorizontal="2dp"
+            android:background="@drawable/bg_member_aging"
+            app:layout_constraintDimensionRatio="924:87"
+            app:layout_constraintTop_toBottomOf="@+id/space3" />
+
+        <ImageView
+            android:id="@+id/iv_member_unlimited"
+            imageRes="@{goodsBean.unlimitedImg}"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="@{@string/member_price(TextUtil.formatFloatWithout0End(goodsBean.originalAmount, 1))}"
-            android:textColor="@{goodsBean.select ? @color/member_original_price_text_selected : @color/member_original_price_text_normal}"
-            android:textSize="12sp"
-            app:layout_constraintBottom_toBottomOf="@id/iv_bg"
-            app:layout_constraintEnd_toEndOf="@id/iv_bg"
-            app:layout_constraintStart_toStartOf="@id/iv_bg"
-            app:layout_constraintTop_toTopOf="@id/iv_bg"
-            app:layout_constraintVertical_bias="0.752"
-            tools:text="¥299" />
+            android:layout_marginStart="10dp"
+            app:layout_constraintBottom_toBottomOf="@+id/iv_aging"
+            app:layout_constraintStart_toStartOf="@+id/iv_aging"
+            app:layout_constraintTop_toTopOf="@+id/iv_aging"
+            tools:src="@drawable/bg_member_recover_unlimited" />
 
-        <TextView
+        <ImageView
+            imageRes="@{goodsBean.validityPeriod}"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="@{goodsBean.description}"
-            android:textColor="#7C4B00"
-            android:textSize="12sp"
-            android:textStyle="bold"
+            android:layout_marginStart="12dp"
+            app:layout_constraintBottom_toBottomOf="@+id/iv_aging"
+            app:layout_constraintStart_toEndOf="@+id/iv_member_unlimited"
+            app:layout_constraintTop_toTopOf="@+id/iv_aging"
+            tools:src="@drawable/bg_member_permanent" />
+
+        <ImageView
+            isGone="@{!goodsBean.select}"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:src="@drawable/icon_member_goods_checked"
             app:layout_constraintBottom_toBottomOf="@id/iv_bg"
+            app:layout_constraintDimensionRatio="102:66"
             app:layout_constraintEnd_toEndOf="@id/iv_bg"
-            app:layout_constraintStart_toStartOf="@id/iv_bg"
-            app:layout_constraintTop_toTopOf="@id/iv_bg"
-            app:layout_constraintVertical_bias="0.936"
-            tools:text="单个功能恢复" />
+            app:layout_constraintWidth_percent="0.1036585365853659" />
 
+        <Space
+            android:id="@+id/space_bottom"
+            android:layout_width="match_parent"
+            android:layout_height="2dp"
+            app:layout_constraintTop_toBottomOf="@+id/iv_aging" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 </layout>

+ 5 - 3
app/src/main/res/values/strings.xml

@@ -140,7 +140,7 @@
     <string name="member_action_title">服务详情</string>
     <string name="member_recover_buy">立即恢复</string>
     <string name="member_func_title">选择服务</string>
-    <string name="member_buy_tag_txt">最多人买</string>
+    <string name="member_buy_tag_txt">超值爆款</string>
     <string name="rmb">¥</string>
     <string name="member_price">¥%s</string>
     <string name="member_scenes_title">使用场景</string>
@@ -154,9 +154,11 @@
     <string name="scenes_audio_recover">音频恢复</string>
     <string name="scenes_more">更多权益</string>
     <string name="member_user_evaluate">优质用户评价</string>
-    <string name="member_service_description">服务说明</string>
+    <string name="member_service_description_all">支付即代表您已阅读并同意《服务说明》</string>
+    <string name="member_service_description">《服务说明》</string>
+    <string name="member_service_description_title">服务说明</string>
     <string name="retention_give_up_title">确定放弃恢复数据吗?</string>
-    <string name="retention_give_up_text">如果旧数据被覆盖,数据将永久丢失</string>
+    <string name="retention_give_up_text">越早恢复,几率越高!!</string>
     <string name="retention_continue_text">立即恢复</string>
     <string name="no_pay_way">暂无支付方式</string>
     <string name="pay_way">支付方式</string>