Browse Source

[1001766]增加我的界面内容

zk 1 year ago
parent
commit
d2f4107cd2
29 changed files with 685 additions and 7 deletions
  1. 6 0
      app/src/main/AndroidManifest.xml
  2. 66 0
      app/src/main/java/com/datarecovery/master/data/repositories/AccountRepository.java
  3. 49 0
      app/src/main/java/com/datarecovery/master/dialog/CommonSureDialog.java
  4. 1 0
      app/src/main/java/com/datarecovery/master/module/homepage/HomePageFragment.java
  5. 44 0
      app/src/main/java/com/datarecovery/master/module/mine/MineFragment.java
  6. 71 0
      app/src/main/java/com/datarecovery/master/module/mine/MineViewModel.java
  7. BIN
      app/src/main/res/drawable-xxhdpi/bg_mine_background.webp
  8. BIN
      app/src/main/res/drawable-xxhdpi/bg_mine_member.webp
  9. BIN
      app/src/main/res/drawable-xxhdpi/icon_logged_avatar.webp
  10. BIN
      app/src/main/res/drawable-xxhdpi/icon_login_arrow.webp
  11. BIN
      app/src/main/res/drawable-xxhdpi/icon_mine_member_title.webp
  12. BIN
      app/src/main/res/drawable-xxhdpi/icon_not_login_avatar.webp
  13. BIN
      app/src/main/res/drawable-xxhdpi/icon_setting_arrow.webp
  14. BIN
      app/src/main/res/drawable-xxhdpi/icon_small_about.webp
  15. BIN
      app/src/main/res/drawable-xxhdpi/icon_small_account_logout.webp
  16. BIN
      app/src/main/res/drawable-xxhdpi/icon_small_customer_service.webp
  17. BIN
      app/src/main/res/drawable-xxhdpi/icon_small_exit.webp
  18. BIN
      app/src/main/res/drawable-xxhdpi/icon_small_suggestion.webp
  19. 0 0
      app/src/main/res/drawable/bg_dialog_bg.xml
  20. 5 0
      app/src/main/res/drawable/bg_dialog_cancel.xml
  21. 5 0
      app/src/main/res/drawable/bg_mine_container.xml
  22. 5 0
      app/src/main/res/drawable/bg_mine_restore_now.xml
  23. 9 0
      app/src/main/res/drawable/bg_ripple_common_mask.xml
  24. 2 2
      app/src/main/res/layout/dialog_agreement.xml
  25. 124 0
      app/src/main/res/layout/dialog_common_sure.xml
  26. 218 4
      app/src/main/res/layout/fragment_mine.xml
  27. 61 0
      app/src/main/res/layout/layout_item_settings.xml
  28. 17 1
      app/src/main/res/values/strings.xml
  29. 2 0
      app/src/main/res/values/style.xml

+ 6 - 0
app/src/main/AndroidManifest.xml

@@ -38,6 +38,12 @@
         <activity
         <activity
             android:name=".module.main.MainActivity"
             android:name=".module.main.MainActivity"
             android:screenOrientation="portrait" />
             android:screenOrientation="portrait" />
+        <activity
+            android:name=".module.about.AboutActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".module.browser.BrowserActivity"
+            android:screenOrientation="portrait" />
 
 
     </application>
     </application>
 
 

+ 66 - 0
app/src/main/java/com/datarecovery/master/data/repositories/AccountRepository.java

@@ -0,0 +1,66 @@
+package com.datarecovery.master.data.repositories;
+
+import android.text.TextUtils;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.Transformations;
+
+import com.atmob.common.data.KVUtils;
+import com.atmob.common.logging.AtmobLog;
+import com.datarecovery.master.utils.BoxingUtil;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+@Singleton
+public class AccountRepository {
+
+
+    private static final String TAG = "AccountRepository";
+    private static final String KEY_LOGIN_PHONE_NUM = "key_account_repo_login_phone_num";
+    private static final String KEY_LOGIN_TOKEN = "key_account_repo_login_token";
+    private final MutableLiveData<String> loginPhoneNum = new MutableLiveData<>();
+    private final LiveData<Boolean> isLogin = Transformations.map(loginPhoneNum, phoneNum -> !TextUtils.isEmpty(phoneNum));
+    private final MutableLiveData<?> memberStatusInfo = new MutableLiveData<>();
+    public static String token;
+
+    static {
+        token = KVUtils.getDefault().getString(KEY_LOGIN_TOKEN, null);
+    }
+
+    @Inject
+    public AccountRepository() {
+        loginPhoneNum.setValue(KVUtils.getDefault().getString(KEY_LOGIN_PHONE_NUM, null));
+        isLogin.observeForever(isLogin -> AtmobLog.d(TAG, "isLogin: " + isLogin));
+    }
+
+    public LiveData<String> getLoginPhoneNum() {
+        return loginPhoneNum;
+    }
+
+    public LiveData<Boolean> getIsLogin() {
+        return isLogin;
+    }
+
+    private void onLoginSuccess(String phoneNum, String token) {
+        AccountRepository.token = token;
+        this.loginPhoneNum.setValue(phoneNum);
+        KVUtils.getDefault().putString(KEY_LOGIN_PHONE_NUM, phoneNum);
+        KVUtils.getDefault().putString(KEY_LOGIN_TOKEN, token);
+
+    }
+
+    public void logout() {
+        if (!BoxingUtil.boxing(isLogin.getValue())) {
+            return;
+        }
+        token = null;
+        KVUtils.getDefault().putString(KEY_LOGIN_PHONE_NUM, "");
+        KVUtils.getDefault().putString(KEY_LOGIN_TOKEN, "");
+        if (BoxingUtil.boxing(isLogin.getValue())) {
+            loginPhoneNum.postValue(null);
+            memberStatusInfo.postValue(null);
+        }
+    }
+}

+ 49 - 0
app/src/main/java/com/datarecovery/master/dialog/CommonSureDialog.java

@@ -0,0 +1,49 @@
+package com.datarecovery.master.dialog;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+
+import com.atmob.app.lib.base.BaseDialog;
+import com.datarecovery.master.R;
+import com.datarecovery.master.databinding.DialogCommonSureBinding;
+
+@BaseDialog.FullScreen(height = false)
+public class CommonSureDialog extends BaseDialog<DialogCommonSureBinding> {
+
+
+    private OnDialogClickListener onDialogClickListener;
+
+    public CommonSureDialog(@NonNull Context context) {
+        super(context, R.style.Theme_Common_Dialog);
+        setCancelable(false);
+        binding.setOnClickSure(v -> {
+            if (onDialogClickListener != null) {
+                onDialogClickListener.onClickSure();
+            }
+            dismiss();
+        });
+        binding.setOnClickCancel(v -> {
+            dismiss();
+        });
+    }
+
+    public void setOnDialogClickListener(OnDialogClickListener onDialogClickListener) {
+        this.onDialogClickListener = onDialogClickListener;
+    }
+
+    public CommonSureDialog setDialogTitle(@StringRes int tips) {
+        binding.tvDialogTitle.setText(tips);
+        return this;
+    }
+
+    public CommonSureDialog setDialogContent(@StringRes int content) {
+        binding.tvContent.setText(content);
+        return this;
+    }
+
+    public interface OnDialogClickListener {
+        void onClickSure();
+    }
+}

+ 1 - 0
app/src/main/java/com/datarecovery/master/module/homepage/HomePageFragment.java

@@ -69,6 +69,7 @@ public class HomePageFragment extends BaseFragment<FragmentHomePageBinding> {
     protected void initViewModel() {
     protected void initViewModel() {
         super.initViewModel();
         super.initViewModel();
         homePageViewModel = getViewModelProvider().get(HomePageViewModel.class);
         homePageViewModel = getViewModelProvider().get(HomePageViewModel.class);
+        binding.setHomePageViewModel(homePageViewModel);
     }
     }
 
 
     @Override
     @Override

+ 44 - 0
app/src/main/java/com/datarecovery/master/module/mine/MineFragment.java

@@ -1,9 +1,16 @@
 package com.datarecovery.master.module.mine;
 package com.datarecovery.master.module.mine;
 
 
+import android.os.Bundle;
+import android.view.View;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.lifecycle.Observer;
 
 
 import com.atmob.app.lib.base.BaseFragment;
 import com.atmob.app.lib.base.BaseFragment;
+import com.datarecovery.master.R;
 import com.datarecovery.master.databinding.FragmentMineBinding;
 import com.datarecovery.master.databinding.FragmentMineBinding;
+import com.datarecovery.master.dialog.CommonSureDialog;
 import com.gyf.immersionbar.ImmersionBar;
 import com.gyf.immersionbar.ImmersionBar;
 
 
 import dagger.hilt.android.AndroidEntryPoint;
 import dagger.hilt.android.AndroidEntryPoint;
@@ -13,6 +20,43 @@ import dagger.hilt.android.AndroidEntryPoint;
 public class MineFragment extends BaseFragment<FragmentMineBinding> {
 public class MineFragment extends BaseFragment<FragmentMineBinding> {
 
 
 
 
+    private MineViewModel mineViewModel;
+
+    private CommonSureDialog commonSureDialog;
+
+    @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        initView();
+        initObserver();
+    }
+
+    private void initObserver() {
+        mineViewModel.getShowLoginDialog().observe(getViewLifecycleOwner(), o -> showCommonSureDialog());
+    }
+
+    private void initView() {
+
+    }
+
+    public void showCommonSureDialog() {
+        if (commonSureDialog == null) {
+            commonSureDialog = new CommonSureDialog(requireContext());
+            commonSureDialog.setDialogTitle(R.string.dialog_kind_tips).setDialogContent(R.string.dialog_exit_content);
+            commonSureDialog.setOnDialogClickListener(() -> {
+                mineViewModel.onAccountExit();
+            });
+        }
+        commonSureDialog.show();
+    }
+
+    @Override
+    protected void initViewModel() {
+        super.initViewModel();
+        mineViewModel = getViewModelProvider().get(MineViewModel.class);
+        binding.setMineViewModel(mineViewModel);
+    }
+
     @Override
     @Override
     protected void configImmersion(@NonNull ImmersionBar immersionBar) {
     protected void configImmersion(@NonNull ImmersionBar immersionBar) {
         immersionBar.statusBarDarkFont(true);
         immersionBar.statusBarDarkFont(true);

+ 71 - 0
app/src/main/java/com/datarecovery/master/module/mine/MineViewModel.java

@@ -0,0 +1,71 @@
+package com.datarecovery.master.module.mine;
+
+import android.text.TextUtils;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.Transformations;
+
+import com.atmob.app.lib.base.BaseViewModel;
+import com.atmob.app.lib.livedata.SingleLiveEvent;
+import com.atmob.common.runtime.ActivityUtil;
+import com.atmob.common.runtime.ContextUtil;
+import com.datarecovery.master.R;
+import com.datarecovery.master.data.repositories.AccountRepository;
+import com.datarecovery.master.module.about.AboutActivity;
+import com.datarecovery.master.utils.ToastUtil;
+
+import javax.inject.Inject;
+
+import dagger.hilt.android.lifecycle.HiltViewModel;
+
+
+@HiltViewModel
+public class MineViewModel extends BaseViewModel {
+
+    private final SingleLiveEvent<?> showLoginDialog = new SingleLiveEvent<>();
+    private final LiveData<String> loginTips;
+    private final AccountRepository accountRepository;
+
+    @Inject
+    public MineViewModel(AccountRepository accountRepository) {
+        this.accountRepository = accountRepository;
+        loginTips = Transformations.map(accountRepository.getLoginPhoneNum(), phone -> {
+            if (TextUtils.isEmpty(phone)) {
+                return ContextUtil.getContext().getString(R.string.mine_no_login);
+            } else {
+                if (phone.length() > 4) {
+                    phone = phone.substring(phone.length() - 4);
+                }
+                return ContextUtil.getContext().getString(R.string.mine_logged, phone);
+            }
+        });
+    }
+
+    public LiveData<?> getShowLoginDialog() {
+        return showLoginDialog;
+    }
+
+    public LiveData<String> getLoginTips() {
+        return loginTips;
+    }
+
+    public LiveData<Boolean> getIsLogin() {
+        return accountRepository.getIsLogin();
+    }
+
+    public void onLoginClick() {
+
+    }
+
+    public void onAboutClick() {
+        AboutActivity.start(ActivityUtil.getTopActivity());
+    }
+
+    public void onExitClick() {
+        showLoginDialog.call();
+    }
+
+    public void onAccountExit() {
+        accountRepository.logout();
+    }
+}

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


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


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


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


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


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


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


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


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


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


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


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


app/src/main/res/drawable/bg_dialog_agreement.xml → app/src/main/res/drawable/bg_dialog_bg.xml


+ 5 - 0
app/src/main/res/drawable/bg_dialog_cancel.xml

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

+ 5 - 0
app/src/main/res/drawable/bg_mine_container.xml

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

+ 5 - 0
app/src/main/res/drawable/bg_mine_restore_now.xml

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

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

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="#1a000000">
+    <item android:id="@android:id/mask">
+        <shape android:shape="rectangle">
+            <solid android:color="#ff000000" />
+        </shape>
+    </item>
+</ripple>

+ 2 - 2
app/src/main/res/layout/dialog_agreement.xml

@@ -51,7 +51,7 @@
                 android:id="@+id/v_one_step_bg"
                 android:id="@+id/v_one_step_bg"
                 android:layout_width="0dp"
                 android:layout_width="0dp"
                 android:layout_height="0dp"
                 android:layout_height="0dp"
-                android:background="@drawable/bg_dialog_agreement"
+                android:background="@drawable/bg_dialog_bg"
                 app:layout_constraintBottom_toBottomOf="@+id/space_one_5"
                 app:layout_constraintBottom_toBottomOf="@+id/space_one_5"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
@@ -166,7 +166,7 @@
                 android:id="@+id/v_two_step_bg"
                 android:id="@+id/v_two_step_bg"
                 android:layout_width="0dp"
                 android:layout_width="0dp"
                 android:layout_height="0dp"
                 android:layout_height="0dp"
-                android:background="@drawable/bg_dialog_agreement"
+                android:background="@drawable/bg_dialog_bg"
                 app:layout_constraintBottom_toBottomOf="@+id/space_two_4"
                 app:layout_constraintBottom_toBottomOf="@+id/space_two_4"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintStart_toStartOf="parent"

+ 124 - 0
app/src/main/res/layout/dialog_common_sure.xml

@@ -0,0 +1,124 @@
+<?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"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+        <variable
+            name="onClickCancel"
+            type="android.view.View.OnClickListener" />
+
+        <variable
+            name="onClickSure"
+            type="android.view.View.OnClickListener" />
+
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        tools:background="@color/black70">
+
+        <View
+            android:id="@+id/v_bg"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:background="@drawable/bg_dialog_bg"
+            app:layout_constraintBottom_toBottomOf="@+id/space4"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/space1"
+            app:layout_constraintWidth_percent="0.7777777777777778" />
+
+        <Space
+            android:id="@+id/space1"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="360:24"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_dialog_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="@color/common_txt_color"
+            android:textSize="15sp"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/space1"
+            tools:text="@string/dialog_kind_tips" />
+
+        <Space
+            android:id="@+id/space2"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="360:16"
+            app:layout_constraintTop_toBottomOf="@+id/tv_dialog_title" />
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:textColor="#404040"
+            android:textSize="14sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/space2"
+            app:layout_constraintWidth_percent="0.6444444444444444"
+            tools:text="您确定退出登录吗?" />
+
+        <Space
+            android:id="@+id/space3"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="360:36"
+            app:layout_constraintTop_toBottomOf="@+id/tv_content" />
+
+        <TextView
+            android:id="@+id/tv_cancel"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:background="@drawable/bg_dialog_cancel"
+            android:gravity="center"
+            android:onClick="@{onClickCancel}"
+            android:text="@string/dialog_cancel"
+            android:textColor="@color/white"
+            android:textSize="14sp"
+            android:textStyle="bold"
+            app:layout_constraintDimensionRatio="110:36"
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintLeft_toLeftOf="@+id/v_bg"
+            app:layout_constraintRight_toLeftOf="@+id/tv_sure"
+            app:layout_constraintTop_toBottomOf="@+id/space3"
+            app:layout_constraintWidth_percent="0.3055555555555556" />
+
+        <TextView
+            android:id="@+id/tv_sure"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginStart="12dp"
+            android:background="@drawable/bg_common_btn"
+            android:gravity="center"
+            android:onClick="@{onClickSure}"
+            android:text="@string/dialog_sure"
+            android:textColor="@color/white"
+            android:textSize="14sp"
+            android:textStyle="bold"
+            app:layout_constraintDimensionRatio="110:36"
+            app:layout_constraintLeft_toRightOf="@+id/tv_cancel"
+            app:layout_constraintRight_toRightOf="@+id/v_bg"
+            app:layout_constraintTop_toBottomOf="@+id/space3"
+            app:layout_constraintWidth_percent="0.3055555555555556" />
+
+        <Space
+            android:id="@+id/space4"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="360:24"
+            app:layout_constraintTop_toBottomOf="@+id/tv_cancel" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 218 - 4
app/src/main/res/layout/fragment_mine.xml

@@ -1,6 +1,220 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
+<layout 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">
 
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+    <data>
+
+        <variable
+            name="mineViewModel"
+            type="com.datarecovery.master.module.mine.MineViewModel" />
+
+        <import type="com.atmob.common.ui.SizeUtil" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#F8F8F8">
+
+        <ImageView
+            android:id="@+id/iv_mine_background"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:src="@drawable/bg_mine_background"
+            app:layout_constraintDimensionRatio="1080:648"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <Space
+            android:id="@+id/space_status_bar"
+            android:layout_width="match_parent"
+            android:layout_height="@{SizeUtil.getStatusBarHeight(), default=@dimen/app_status_bar_height}"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.core.widget.NestedScrollView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:scrollbars="none"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/space_status_bar">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <Space
+                    android:id="@+id/space1"
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    app:layout_constraintDimensionRatio="360:50"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    android:onClick="@{()->mineViewModel.onLoginClick()}"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_account_avatar"
+                    app:layout_constraintTop_toTopOf="@+id/iv_account_avatar" />
+
+                <ImageView
+                    android:id="@+id/iv_account_avatar"
+                    imageDraw="@{mineViewModel.isLogin ? @drawable/icon_logged_avatar:@drawable/icon_not_login_avatar}"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:layout_marginStart="12dp"
+                    app:layout_constraintDimensionRatio="1:1"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/space1"
+                    app:layout_constraintWidth_percent="0.1333333333333333"
+                    tools:src="@drawable/icon_not_login_avatar" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="12dp"
+                    android:text="@{mineViewModel.loginTips}"
+                    android:textColor="@color/common_txt_color"
+                    android:textSize="18sp"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_account_avatar"
+                    app:layout_constraintStart_toEndOf="@+id/iv_account_avatar"
+                    app:layout_constraintTop_toTopOf="@+id/iv_account_avatar"
+                    tools:text="去登录" />
+
+                <ImageView
+                    isGone="@{mineViewModel.isLogin}"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:layout_marginEnd="@dimen/app_common_page_horizontal_padding"
+                    android:src="@drawable/icon_login_arrow"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_account_avatar"
+                    app:layout_constraintDimensionRatio="1:1"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/iv_account_avatar"
+                    app:layout_constraintWidth_percent="0.0666666666666667" />
+
+                <Space
+                    android:id="@+id/space2"
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    app:layout_constraintDimensionRatio="360:27"
+                    app:layout_constraintTop_toBottomOf="@+id/iv_account_avatar" />
+
+                <ImageView
+                    android:id="@+id/iv_mine_member"
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    android:layout_marginHorizontal="@dimen/app_common_page_horizontal_padding"
+                    android:src="@drawable/bg_mine_member"
+                    app:layout_constraintDimensionRatio="984:234"
+                    app:layout_constraintTop_toBottomOf="@+id/space2" />
+
+                <ImageView
+                    android:id="@+id/iv_mine_member_title"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:src="@drawable/icon_mine_member_title"
+                    app:layout_constraintBottom_toTopOf="@+id/tv_mine_member_tips"
+                    app:layout_constraintDimensionRatio="480:67"
+                    app:layout_constraintEnd_toEndOf="@+id/iv_mine_member"
+                    app:layout_constraintHorizontal_bias="0.0843373493975904"
+                    app:layout_constraintStart_toStartOf="@+id/iv_mine_member"
+                    app:layout_constraintTop_toTopOf="@+id/iv_mine_member"
+                    app:layout_constraintVertical_chainStyle="packed"
+                    app:layout_constraintWidth_percent="0.4416666666666667" />
+
+                <TextView
+                    android:id="@+id/tv_mine_member_tips"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="3dp"
+                    android:letterSpacing="0.09"
+                    android:lineSpacingMultiplier="2"
+                    android:text="@string/mine_member_tips"
+                    android:textColor="#B46B36"
+                    android:textSize="11dp"
+                    app:layout_constraintBottom_toBottomOf="@id/iv_mine_member"
+                    app:layout_constraintStart_toStartOf="@+id/iv_mine_member_title"
+                    app:layout_constraintTop_toBottomOf="@+id/iv_mine_member_title" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:background="@drawable/bg_mine_restore_now"
+                    android:gravity="center"
+                    android:text="@string/mine_restore_now"
+                    android:textColor="#FFF9EC"
+                    android:textSize="12sp"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@id/iv_mine_member"
+                    app:layout_constraintDimensionRatio="82:28"
+                    app:layout_constraintEnd_toEndOf="@+id/iv_mine_member"
+                    app:layout_constraintHorizontal_bias="0.9549180327868852"
+                    app:layout_constraintStart_toStartOf="@id/iv_mine_member"
+                    app:layout_constraintTop_toTopOf="@+id/iv_mine_member"
+                    app:layout_constraintWidth_percent="0.2277777777777778" />
+
+                <Space
+                    android:id="@+id/space3"
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    app:layout_constraintDimensionRatio="360:14"
+                    app:layout_constraintTop_toBottomOf="@+id/iv_mine_member" />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginHorizontal="@dimen/app_common_page_horizontal_padding"
+                    android:background="@drawable/bg_mine_container"
+                    android:orientation="vertical"
+                    android:paddingVertical="6dp"
+                    app:layout_constraintTop_toBottomOf="@+id/space3">
+
+                    <include
+                        android:onClick="@{()->mineViewModel.onAboutClick()}"
+                        layout="@layout/layout_item_settings"
+                        settingsIcon="@{@drawable/icon_small_about}"
+                        settingsName="@{@string/mine_about}"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content" />
+
+                    <include
+                        isGone="@{!mineViewModel.isLogin}"
+                        layout="@layout/layout_item_settings"
+                        settingsIcon="@{@drawable/icon_small_suggestion}"
+                        settingsName="@{@string/mine_suggestion}"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content" />
+
+                    <include
+                        layout="@layout/layout_item_settings"
+                        settingsIcon="@{@drawable/icon_small_customer_service}"
+                        settingsName="@{@string/mine_customer_service}"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content" />
+
+                    <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" />
+
+                    <include
+                        android:onClick="@{()->mineViewModel.onExitClick()}"
+                        isGone="@{!mineViewModel.isLogin}"
+                        layout="@layout/layout_item_settings"
+                        settingsIcon="@{@drawable/icon_small_exit}"
+                        settingsName="@{@string/mine_exit}"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content" />
+
+                </LinearLayout>
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+        </androidx.core.widget.NestedScrollView>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 61 - 0
app/src/main/res/layout/layout_item_settings.xml

@@ -0,0 +1,61 @@
+<?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"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+        <variable
+            name="settingsName"
+            type="String" />
+
+        <variable
+            name="settingsIcon"
+            type="android.graphics.drawable.Drawable" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_ripple_common_mask"
+        android:paddingVertical="12dp">
+
+        <ImageView
+            android:id="@+id/item_setting_icon"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginStart="12dp"
+            android:src="@{settingsIcon}"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="1:1"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintWidth_percent="0.0731707317073171"
+            tools:src="@drawable/icon_small_about" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="8dp"
+            android:text="@{settingsName}"
+            android:textColor="@color/common_txt_color"
+            android:textSize="15sp"
+            app:layout_constraintBottom_toBottomOf="@id/item_setting_icon"
+            app:layout_constraintLeft_toRightOf="@id/item_setting_icon"
+            app:layout_constraintTop_toTopOf="@id/item_setting_icon"
+            tools:text="@string/mine_about" />
+
+        <ImageView
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginEnd="12dp"
+            android:src="@drawable/icon_setting_arrow"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="1:1"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintWidth_percent="0.0731707317073171" />
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 17 - 1
app/src/main/res/values/strings.xml

@@ -1,5 +1,5 @@
 <resources>
 <resources>
-    <string name="app_name">DataRecover</string>
+    <string name="app_name">文件数据恢复大师</string>
 
 
     <string name="main_pager_front_page">首页</string>
     <string name="main_pager_front_page">首页</string>
     <string name="main_pager_example">案例</string>
     <string name="main_pager_example">案例</string>
@@ -31,4 +31,20 @@
     <string name="home_page_video_recovery">视频恢复</string>
     <string name="home_page_video_recovery">视频恢复</string>
     <string name="home_page_audio_recovery">音频恢复</string>
     <string name="home_page_audio_recovery">音频恢复</string>
     <string name="home_page_img_clearing">图片清除</string>
     <string name="home_page_img_clearing">图片清除</string>
+    <string name="mine_no_login">去登录</string>
+    <string name="mine_logged">用户%s</string>
+    <string name="mine_member_tips">严格遵守法律法规,保护您的数据隐私</string>
+    <string name="mine_restore_now">立即恢复</string>
+    <string name="mine_about">关于我们</string>
+    <string name="mine_suggestion">意见反馈</string>
+    <string name="mine_customer_service">联系客服</string>
+    <string name="mine_account_logout">注销账号</string>
+    <string name="mine_exit">退出账号</string>
+    <string name="version_title">版本信息</string>
+    <string name="about_user_agreement">用户协议</string>
+    <string name="about_privacy_agreement">隐私协议</string>
+    <string name="dialog_kind_tips">温馨提示</string>
+    <string name="dialog_cancel">取消</string>
+    <string name="dialog_sure">确认</string>
+    <string name="dialog_exit_content">您确定退出登录吗?</string>
 </resources>
 </resources>

+ 2 - 0
app/src/main/res/values/style.xml

@@ -12,6 +12,8 @@
     <style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
     <style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
         <item name="android:textSize">18sp</item>
         <item name="android:textSize">18sp</item>
         <item name="android:textStyle">bold</item>
         <item name="android:textStyle">bold</item>
+        <item name="android:layout_gravity">center</item>
+        <item name="android:gravity">center</item>
     </style>
     </style>
 
 
     <style name="myToolbarNavigationButtonStyle" parent="@style/Widget.AppCompat.Toolbar.Button.Navigation">
     <style name="myToolbarNavigationButtonStyle" parent="@style/Widget.AppCompat.Toolbar.Button.Navigation">