Browse Source

调整首页会员相关逻辑

zk 2 years ago
parent
commit
491677bdb1

+ 11 - 10
app/src/main/java/com/datarecovery/master/data/repositories/DeviceFuncRepository.java

@@ -42,16 +42,17 @@ public class DeviceFuncRepository {
 
 
     public boolean isHaveAuth(@MemberType String auth) {
-        if (TextUtils.isEmpty(auth) || authsList.size() == 0) {
-            return false;
-        }
-        if (!Objects.equals(auth, MemberType.APP_IMAGE_CLEAN) && authsList.contains(MemberType.APP_SUPER_RECOVER)) {
-            return true;
-        }
-        if (Objects.equals(auth, MemberType.APP_WX_MESSAGE_RECOVER) || Objects.equals(auth, MemberType.APP_WX_FRIEND_RECOVER)) {
-            return authsList.contains(MemberType.APP_WX_MESSAGE_RECOVER) || authsList.contains(MemberType.APP_WX_FRIEND_RECOVER);
-        }
-        return authsList.contains(auth);
+        return true;
+//        if (TextUtils.isEmpty(auth) || authsList.size() == 0) {
+//            return false;
+//        }
+//        if (!Objects.equals(auth, MemberType.APP_IMAGE_CLEAN) && authsList.contains(MemberType.APP_SUPER_RECOVER)) {
+//            return true;
+//        }
+//        if (Objects.equals(auth, MemberType.APP_WX_MESSAGE_RECOVER) || Objects.equals(auth, MemberType.APP_WX_FRIEND_RECOVER)) {
+//            return authsList.contains(MemberType.APP_WX_MESSAGE_RECOVER) || authsList.contains(MemberType.APP_WX_FRIEND_RECOVER);
+//        }
+//        return authsList.contains(auth);
     }
 
     public void refreshFuncAuths() {

+ 9 - 2
app/src/main/java/com/datarecovery/master/module/audiorecover/AudioRecoverViewModel.java

@@ -8,6 +8,9 @@ import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
+import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.FileUtil;
 import com.datarecovery.master.utils.FilesSearch;
 import com.datarecovery.master.utils.MediaStoreHelper;
@@ -44,6 +47,7 @@ public class AudioRecoverViewModel extends BaseViewModel {
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> notifyAudioData = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
+    private final DeviceFuncRepository deviceFuncRepository;
     private int totalCount = 0;
     private final MutableLiveData<Integer> totalDetectedCount = new MutableLiveData<>();
     private final MutableLiveData<Boolean> isDateFilterArrowUp = new MutableLiveData<>(false);
@@ -65,7 +69,8 @@ public class AudioRecoverViewModel extends BaseViewModel {
     }
 
     @Inject
-    public AudioRecoverViewModel() {
+    public AudioRecoverViewModel(DeviceFuncRepository deviceFuncRepository) {
+        this.deviceFuncRepository = deviceFuncRepository;
         selectedCountTxt = Transformations.map(selectedList, list -> {
             if (list == null || list.isEmpty()) {
                 return ContextUtil.getContext().getString(R.string.export);
@@ -203,7 +208,9 @@ public class AudioRecoverViewModel extends BaseViewModel {
         if (list == null || list.size() == 0) {
             return;
         }
-        //TODO 判断是否有会员
+        if (!deviceFuncRepository.isHaveAuth(MemberType.APP_AUDIO_RECOVER)) {
+            return;
+        }
         showLoadingEvent.setValue(true);
         RxJavaUtil.doInBackground(() -> {
             for (FilesSearch.DocumentFile item : list) {

+ 8 - 2
app/src/main/java/com/datarecovery/master/module/filerecover/FileRecoverViewModel.java

@@ -8,6 +8,8 @@ import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.FileUtil;
 import com.datarecovery.master.utils.FilesSearch;
@@ -47,13 +49,15 @@ public class FileRecoverViewModel extends BaseViewModel {
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> detectedFinish = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
+    private final DeviceFuncRepository deviceFuncRepository;
     private int totalCount = 0;
     private final MutableLiveData<Integer> totalDetectedCount = new MutableLiveData<>();
     private final LiveData<String> selectedCountTxt;
     private Disposable scanDisposable;
 
     @Inject
-    public FileRecoverViewModel() {
+    public FileRecoverViewModel(DeviceFuncRepository deviceFuncRepository) {
+        this.deviceFuncRepository = deviceFuncRepository;
         selectedCountTxt = Transformations.map(selectedList, list -> {
             if (list == null || list.isEmpty()) {
                 return ContextUtil.getContext().getString(R.string.export);
@@ -230,7 +234,9 @@ public class FileRecoverViewModel extends BaseViewModel {
         if (list == null || list.size() == 0) {
             return;
         }
-        //TODO 判断是否有会员
+        if (!deviceFuncRepository.isHaveAuth(MemberType.APP_FILE_RECOVER)) {
+            return;
+        }
         showLoadingEvent.setValue(true);
         RxJavaUtil.doInBackground(() -> {
             for (FilesSearch.DocumentFile item : list) {

+ 16 - 18
app/src/main/java/com/datarecovery/master/module/homepage/HomePageViewModel.java

@@ -91,7 +91,7 @@ public class HomePageViewModel extends BaseViewModel {
     }
 
     public void onImgRecoveryClick() {
-        isCheckPermission(() -> isHaveAuths(MemberType.APP_IMAGE_RECOVER, () -> ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.RECOVER)));
+        isHaveAuths(MemberType.APP_IMAGE_RECOVER, () -> isCheckPermission(() -> ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.RECOVER)));
     }
 
     public void isHaveAuths(@MemberType String type, NextStepCallback stepCallback) {
@@ -152,23 +152,21 @@ public class HomePageViewModel extends BaseViewModel {
         if (bean == null) {
             return;
         }
-        isCheckPermission(() -> {
-            // TODO: 2024/1/9 需要判断是否会员
-            switch (bean.getFunctionId()) {
-                case FunctionBean.AUDIO_RECOVERY:
-                    isHaveAuths(MemberType.APP_AUDIO_RECOVER, () -> AudioRecoverActivity.start(ActivityUtil.getTopActivity()));
-                    break;
-                case FunctionBean.FILE_RECOVERY:
-                    isHaveAuths(MemberType.APP_FILE_RECOVER, () -> FileRecoverActivity.start(ActivityUtil.getTopActivity()));
-                    break;
-                case FunctionBean.IMG_CLEARING:
-                    isHaveAuths(MemberType.APP_IMAGE_CLEAN, () -> ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.DELETE));
-                    break;
-                case FunctionBean.VIDEO_RECOVERY:
-                    isHaveAuths(MemberType.APP_VIDEO_RECOVER, () -> VideoRecoverActivity.start(ActivityUtil.getTopActivity()));
-                    break;
-            }
-        });
+        switch (bean.getFunctionId()) {
+            case FunctionBean.AUDIO_RECOVERY:
+                isHaveAuths(MemberType.APP_AUDIO_RECOVER, () -> isCheckPermission(() -> AudioRecoverActivity.start(ActivityUtil.getTopActivity())));
+                break;
+            case FunctionBean.FILE_RECOVERY:
+                isHaveAuths(MemberType.APP_FILE_RECOVER, () -> isCheckPermission(() -> FileRecoverActivity.start(ActivityUtil.getTopActivity())));
+                break;
+            case FunctionBean.IMG_CLEARING:
+                isHaveAuths(MemberType.APP_IMAGE_CLEAN, () -> isCheckPermission(() -> ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.DELETE)));
+                break;
+            case FunctionBean.VIDEO_RECOVERY:
+                isHaveAuths(MemberType.APP_VIDEO_RECOVER, () -> isCheckPermission(() -> VideoRecoverActivity.start(ActivityUtil.getTopActivity())));
+                break;
+        }
+
     }
 
     public interface NextStepCallback {

+ 15 - 3
app/src/main/java/com/datarecovery/master/module/imgrecover/ImageRecoverViewModel.java

@@ -8,6 +8,8 @@ import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.FileUtil;
 import com.datarecovery.master.utils.ImageDeepDetector;
 import com.datarecovery.master.utils.MediaStoreHelper;
@@ -39,6 +41,7 @@ public class ImageRecoverViewModel extends BaseViewModel {
     private final MutableLiveData<List<ImageDeepDetector.ImageFile>> detectedWxImg = new MutableLiveData<>(new ArrayList<>());
     private final MutableLiveData<List<ImageDeepDetector.ImageFile>> detectedQQImg = new MutableLiveData<>(new ArrayList<>());
     private final MutableLiveData<List<ImageDeepDetector.ImageFile>> detectedOtherImg = new MutableLiveData<>(new ArrayList<>());
+    private final DeviceFuncRepository deviceFuncRepository;
     private LiveData<String> detectedPhotoTitle;
     private LiveData<String> detectedWxTitle;
     private LiveData<String> detectedQQTitle;
@@ -62,7 +65,8 @@ public class ImageRecoverViewModel extends BaseViewModel {
 
 
     @Inject
-    public ImageRecoverViewModel() {
+    public ImageRecoverViewModel(DeviceFuncRepository deviceFuncRepository) {
+        this.deviceFuncRepository = deviceFuncRepository;
         barTitle.setValue(ContextUtil.getContext().getString(R.string.iamge_recover_all));
         startImageScanning();
         initLiveData();
@@ -268,7 +272,11 @@ public class ImageRecoverViewModel extends BaseViewModel {
         if (type == ImageRecoverActivity.Type.DELETE) {
             return;
         }
-        //TODO 判断是否有会员
+        if (type == ImageRecoverActivity.Type.RECOVER && !deviceFuncRepository.isHaveAuth(MemberType.APP_IMAGE_RECOVER)) {
+            return;
+        } else if (type == ImageRecoverActivity.Type.DELETE && !deviceFuncRepository.isHaveAuth(MemberType.APP_IMAGE_CLEAN)) {
+            return;
+        }
         previewEvent.setValue(imageFile);
     }
 
@@ -321,7 +329,11 @@ public class ImageRecoverViewModel extends BaseViewModel {
         if (list.size() == 0) {
             return;
         }
-        //TODO 判断是否有会员
+        if (type == ImageRecoverActivity.Type.RECOVER && !deviceFuncRepository.isHaveAuth(MemberType.APP_IMAGE_RECOVER)) {
+            return;
+        } else if (type == ImageRecoverActivity.Type.DELETE && !deviceFuncRepository.isHaveAuth(MemberType.APP_IMAGE_CLEAN)) {
+            return;
+        }
         showLoadingEvent.setValue(true);
         RxJavaUtil.doInBackground(() -> {
             for (ImageDeepDetector.ImageFile item : list) {

+ 19 - 2
app/src/main/java/com/datarecovery/master/module/member/MemberActivity.java

@@ -8,10 +8,13 @@ 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.logging.AtmobLog;
+import com.atmob.common.ui.SizeUtil;
 import com.datarecovery.master.databinding.ActivityMemberBinding;
 import com.datarecovery.master.dialog.AlipayQrCodeDialog;
 import com.datarecovery.master.dialog.ChoosePaymentWayDialog;
@@ -35,7 +38,7 @@ import dagger.hilt.android.AndroidEntryPoint;
 public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
 
 
-    private static final String MEMBER_TYPE = "member_type";
+    public static final String MEMBER_TYPE = "member_type";
     private MemberViewModel memberViewModel;
 
     private GoodsItemAdapter goodsItemAdapter;
@@ -51,6 +54,8 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
     private AlipayQrCodeDialog alipayQrCodeDialog;
     private WechatPayQrCodeDialog wechatPayQrCodeDialog;
 
+    private int maxScrollY;
+
 
     public static void start(Context context, @MemberType String type) {
         Intent intent = new Intent(context, MemberActivity.class);
@@ -77,7 +82,6 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
     }
 
     private void initView() {
-        addTopStatusBarHeight(binding.toolbar);
         goodsItemAdapter = new GoodsItemAdapter(this);
         binding.memberDetailList.setAdapter(goodsItemAdapter);
         binding.memberDetailList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
@@ -94,6 +98,19 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
         binding.userEvaluateRyView.setAdapter(memberEvaluateAdapter);
 
         binding.iconBack.setOnClickListener(v -> onBackPressed());
+
+        maxScrollY = (int) (SizeUtil.getScreenHeight() * 0.2f);
+        binding.nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
+            if (scrollY > maxScrollY) {
+                binding.viewStatusBar.setAlpha(1f);
+                binding.viewToolBar.setAlpha(1f);
+                binding.tvTitle.setAlpha(1f);
+            } else {
+                binding.viewStatusBar.setAlpha(scrollY * 1f / maxScrollY);
+                binding.viewToolBar.setAlpha(scrollY * 1f / maxScrollY);
+                binding.tvTitle.setAlpha(scrollY * 1f / maxScrollY);
+            }
+        });
     }
 
     private void initObserver() {

+ 9 - 2
app/src/main/java/com/datarecovery/master/module/preview/PreviewViewModel.java

@@ -8,6 +8,9 @@ import androidx.lifecycle.MutableLiveData;
 import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
+import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.FileUtil;
 import com.datarecovery.master.utils.FilesSearch;
@@ -31,6 +34,7 @@ public class PreviewViewModel extends BaseViewModel {
     private final MutableLiveData<String> title = new MutableLiveData<>();
     private final MutableLiveData<Uri> previewUri = new MutableLiveData<>();
     private final MutableLiveData<Boolean> isPlaying = new MutableLiveData<>();
+    private final DeviceFuncRepository deviceFuncRepository;
     private List<ImageDeepDetector.ImageFile> imagePreviewList;
 
     private int type;
@@ -42,8 +46,8 @@ public class PreviewViewModel extends BaseViewModel {
 
 
     @Inject
-    public PreviewViewModel() {
-
+    public PreviewViewModel(DeviceFuncRepository deviceFuncRepository) {
+        this.deviceFuncRepository = deviceFuncRepository;
     }
 
     public MutableLiveData<Boolean> getIsPlayStart() {
@@ -163,6 +167,9 @@ public class PreviewViewModel extends BaseViewModel {
     }
 
     public void onExportClick() {
+        if (type == ImageRecoverActivity.Type.RECOVER && !deviceFuncRepository.isHaveAuth(MemberType.APP_IMAGE_RECOVER)) {
+            return;
+        }
         RxJavaUtil.doInBackground(() -> {
                     if (type == PreviewActivity.TYPE_IMG) {
                         ImageDeepDetector.ImageFile value = currentImageFile.getValue();

+ 8 - 2
app/src/main/java/com/datarecovery/master/module/videorecover/VideoRecoverViewModel.java

@@ -9,6 +9,8 @@ import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.data.KVUtils;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.FileUtil;
 import com.datarecovery.master.utils.FilesSearch;
 import com.datarecovery.master.utils.MediaStoreHelper;
@@ -43,6 +45,7 @@ public class VideoRecoverViewModel extends BaseViewModel {
     private final SingleLiveEvent<?> detectedFinish = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
+    private final DeviceFuncRepository deviceFuncRepository;
     private int totalCount = 0;
     private final MutableLiveData<Integer> totalDetectedCount = new MutableLiveData<>();
     private final MutableLiveData<Boolean> isShowHint = new MutableLiveData<>();
@@ -50,7 +53,8 @@ public class VideoRecoverViewModel extends BaseViewModel {
 
 
     @Inject
-    public VideoRecoverViewModel() {
+    public VideoRecoverViewModel(DeviceFuncRepository deviceFuncRepository) {
+        this.deviceFuncRepository = deviceFuncRepository;
         startVideoScanning();
         selectedCountTxt = Transformations.map(selectedList, list -> {
             if (list == null || list.isEmpty()) {
@@ -172,7 +176,9 @@ public class VideoRecoverViewModel extends BaseViewModel {
         if (list == null || list.size() == 0) {
             return;
         }
-        //TODO 判断是否有会员
+        if (!deviceFuncRepository.isHaveAuth(MemberType.APP_VIDEO_RECOVER)) {
+            return;
+        }
         showLoadingEvent.setValue(true);
         RxJavaUtil.doInBackground(() -> {
             for (FilesSearch.DocumentFile item : list) {

+ 4 - 0
app/src/main/res/drawable/bg_theme_splash.xml

@@ -12,6 +12,10 @@
         </shape>
     </item>
 
+    <item>
+        <bitmap android:src="@drawable/bg_splash" />
+    </item>
+
     <item android:top="510px">
         <bitmap
             android:gravity="center|top"

+ 24 - 3
app/src/main/res/layout/activity_member.xml

@@ -8,6 +8,8 @@
         <variable
             name="memberViewModel"
             type="com.datarecovery.master.module.member.MemberViewModel" />
+
+        <import type="com.atmob.common.ui.SizeUtil" />
     </data>
 
     <androidx.constraintlayout.widget.ConstraintLayout
@@ -16,6 +18,7 @@
 
 
         <androidx.core.widget.NestedScrollView
+            android:id="@+id/nested_scroll_view"
             android:layout_width="match_parent"
             android:layout_height="0dp"
             app:layout_constraintBottom_toTopOf="@+id/view_bottom"
@@ -225,11 +228,28 @@
 
         </androidx.core.widget.NestedScrollView>
 
+        <View
+            android:alpha="0"
+            android:background="@color/white"
+            android:id="@+id/view_status_bar"
+            android:layout_width="match_parent"
+            android:layout_height="@{SizeUtil.getStatusBarHeight(), default=@dimen/app_status_bar_height}"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <View
+            android:alpha="0"
+            android:background="@color/white"
+            android:id="@+id/view_tool_bar"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="@+id/toolbar"
+            app:layout_constraintTop_toTopOf="@+id/toolbar" />
+
         <androidx.appcompat.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            app:layout_constraintTop_toTopOf="parent">
+            app:layout_constraintTop_toBottomOf="@+id/view_status_bar">
 
 
             <ImageView
@@ -242,14 +262,15 @@
                 android:src="@drawable/icon_member_back" />
 
             <TextView
+                android:alpha="0"
+                android:id="@+id/tv_title"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
                 android:text="@string/member_action_title"
                 android:textColor="#202020"
                 android:textSize="17sp"
-                android:textStyle="bold"
-                android:visibility="gone" />
+                android:textStyle="bold" />
 
         </androidx.appcompat.widget.Toolbar>
 

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

@@ -196,15 +196,15 @@
                         android:layout_height="wrap_content"
                         android:visibility="gone" />
 
-                    <include
-                        isGone="@{!mineViewModel.isLogin}"
-                        layout="@layout/layout_item_settings"
-                        settingsIcon="@{@drawable/icon_small_account_logout}"
-                        settingsName="@{@string/mine_account_logout}"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:onClick="@{()-> mineViewModel.onLogoutClick()}"
-                        android:visibility="gone" />
+                    <!--                    <include-->
+                    <!--                        isGone="@{!mineViewModel.isLogin}"-->
+                    <!--                        layout="@layout/layout_item_settings"-->
+                    <!--                        settingsIcon="@{@drawable/icon_small_account_logout}"-->
+                    <!--                        settingsName="@{@string/mine_account_logout}"-->
+                    <!--                        android:layout_width="match_parent"-->
+                    <!--                        android:layout_height="wrap_content"-->
+                    <!--                        android:onClick="@{()-> mineViewModel.onLogoutClick()}"-->
+                    <!--                         />-->
 
                     <include
                         isGone="@{!mineViewModel.isLogin}"