From 6c29fda2b7408c13a486554c5be9d3c6b8296b95 Mon Sep 17 00:00:00 2001
From: nilupeng <qingingrunt2010@qq.com>
Date: Thu, 11 Aug 2022 09:01:04 +0000
Subject: [PATCH] 设置界面

---
 app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java    |    2 
 app/src/main/res/values/styles.xml                                        |   95 +++++----
 app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java           |    2 
 app/src/main/java/com/runt/open/mvvm/widgets/TitleBarView.java            |   53 +++--
 app/src/main/java/com/runt/open/mvvm/util/HandleDate.java                 |    2 
 app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java        |  152 +++++++++++++++
 app/src/main/java/com/runt/open/mvvm/base/model/ImpViewModel.java         |    2 
 app/src/main/res/layout/activity_setting.xml                              |   24 --
 app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java      |    4 
 app/src/main/res/layout/activity_main.xml                                 |    2 
 app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageActivitys.java       |    2 
 app/src/main/java/com/runt/open/mvvm/ui/SettingActivity.java              |   46 ++++
 app/src/main/res/values/strings.xml                                       |    4 
 app/src/main/AndroidManifest.xml                                          |    3 
 app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java            |   19 +
 app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java      |    2 
 app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java       |   15 -
 /dev/null                                                                 |   29 --
 app/src/main/res/layout/activity_about.xml                                |   66 ++++++
 app/src/main/java/com/runt/open/mvvm/config/Configuration.java            |    2 
 app/src/main/res/layout/activity_login.xml                                |    3 
 app/src/main/java/com/runt/open/mvvm/data/Results.java                    |    8 
 app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java    |    7 
 app/src/main/java/com/runt/open/mvvm/ui/AboutActivity.java                |   21 ++
 app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageFragments.java       |    2 
 app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java  |    2 
 app/src/main/java/com/runt/open/mvvm/ui/main/service/ServiceFragment.java |    2 
 27 files changed, 424 insertions(+), 147 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0056ae6..58fd4f1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -45,6 +45,9 @@
         <activity android:name=".ui.main.MainActivity" />
         <activity android:name=".ui.login.RegisterLoginActivity" />
         <activity android:name=".ui.web.WebViewActivity" />
+        <activity android:name=".ui.SettingActivity" />
+        <activity android:name=".ui.AboutActivity" />
+
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java b/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
index 0b2b797..b60cc95 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
@@ -82,7 +82,7 @@
             RESULT_CODE_SUCESS = 4046/*成功*/,
             RESULT_CODE_CANCEL = 4043/*取消*/;
     protected Context mContext;
-    TitleBarView titleBarView;
+    protected TitleBarView titleBarView;
 
 
     @Override
diff --git a/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java b/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java
index de2ed52..7b5e156 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/model/BaseViewModel.java
@@ -1,16 +1,31 @@
 package com.runt.open.mvvm.base.model;
 
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.Settings;
+import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
 import androidx.lifecycle.ViewModel;
-
+import com.runt.open.mvvm.BuildConfig;
 import com.runt.open.mvvm.base.activities.BaseActivity;
+import com.runt.open.mvvm.data.HttpApiResult;
+import com.runt.open.mvvm.data.Results;
+import com.runt.open.mvvm.listener.ResPonse;
 import com.runt.open.mvvm.retrofit.AndroidScheduler;
 import com.runt.open.mvvm.retrofit.api.CommonApiCenter;
 import com.runt.open.mvvm.retrofit.observable.HttpObserver;
 import com.runt.open.mvvm.retrofit.utils.RetrofitUtils;
-
 import io.reactivex.Observable;
 import io.reactivex.functions.Consumer;
 import io.reactivex.schedulers.Schedulers;
+import okhttp3.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * Created by Administrator on 2021/11/11 0011.
@@ -24,6 +39,139 @@
         this.mActivity = activity;
     }
 
+    public void checkUpdate(boolean showTip){
+        Observable<HttpApiResult<Results.ApkVersion>> appUpdate = commonApi.getAppUpdate();
+        HttpObserver<Results.ApkVersion> observer = new HttpObserver<Results.ApkVersion>(mActivity) {
+            @Override
+            protected void onSuccess(Results.ApkVersion version) {
+                if (version.code > BuildConfig.VERSION_CODE) {
+                    mActivity.showDialog("有新版本", version.detail, "升级", "取消", new ResPonse() {
+                        @Override
+                        public void doSuccess(Object obj) {
+                            String downloadUrl = version.access.indexOf("http")> -1? version.access:BuildConfig.HOST_IP_ADDR + version.access;
+
+                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                                boolean hasInstallPermission = mActivity.getPackageManager().canRequestPackageInstalls();
+                                if (!hasInstallPermission) {
+                                    mActivity.showDialog("当前没有安装权限", "当前没有安装权限", "去设置", "稍后安装", new ResPonse() {
+                                        @Override
+                                        public void doSuccess(Object obj) {
+                                            //跳转至“安装未知应用”权限界面,引导用户开启权限
+                                            Uri selfPackageUri = Uri.parse("package:" + mActivity.getPackageName());
+                                            Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, selfPackageUri);
+                                            mActivity.startActivity(intent);
+                                        }
+                                    });
+                                    return;
+                                }
+                            }
+                            downloadApk(downloadUrl);
+                        }
+
+                    });
+                }else if(showTip){
+                    mActivity.showToast("当前是最新版本");
+                }
+            }
+
+        };
+        if(showTip){
+            httpObserverOnLoading(appUpdate, observer);
+        }else{
+            httpObserverOn(appUpdate,observer);
+        }
+    }
+
+
+    private void downloadApk(String url){
+        Request request = new Request.Builder().url(url).build();
+        OkHttpClient client = new OkHttpClient();
+        client.newCall(request).enqueue(new Callback() {
+            @Override
+            public void onFailure(@NonNull Call call, @NonNull IOException e) {
+                mActivity.showToast("下载失败"+e);
+            }
+
+            @Override
+            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
+                int code = response.code();
+                Log.d("downloadFile", "code:"+code);
+                if(code != 200){
+                    mActivity.showToast("下载失败"+code);
+                    return;
+                }
+                FileOutputStream fos = null;
+                InputStream input = null;
+                File file = null;
+                byte[] buf = new byte[2048];
+                int len = 0;
+                try {
+                    Log.d("downloadFile", "下载文件:"+url);
+                    input = response.body().byteStream();
+                    long total = response.body().contentLength();
+                    Log.d("downloadFile", "total:"+total);
+                    file = new File(mActivity.getExternalFilesDir(null).getAbsolutePath() + "/");
+                    if (!file.exists()) {
+                        file.mkdirs();
+                    }
+                    file = new File(file.getPath() + "/" + url.substring(url.lastIndexOf("/")));
+                    file.createNewFile();
+                    fos = new FileOutputStream(file);
+                    long sum = 0;
+                    while ((len = input.read(buf)) != -1) {
+                        fos.write(buf, 0, len);
+                        sum += len;
+                        float progress = (sum * 1.0f / total * 100);
+                        // 下载中
+                        Log.d("downloadFile", "下载进度:" + progress);
+                    }
+                    Log.d("downloadFile", file.getPath());
+                    // 下载完成
+                    File finalFile = file;
+                    mActivity.runOnUiThread(() -> {
+                        mActivity.showDialog("安装", "新版安装包下载完成", "安装", "取消", new ResPonse() {
+                            @Override
+                            public void doSuccess(Object obj) {
+                                openAPK(finalFile);
+                            }
+                        });
+                    });
+                } catch (Exception e) {
+                    Log.d("downloadFileException", e.toString());
+                    Log.d("downloadFileException", "Url:${call.request().url}");
+                    mActivity.showToast("下载失败"+e);
+                    file.delete();
+                    call.cancel();
+                } finally {
+                    fos.flush();
+                    input.close();
+                    fos.close();
+                }
+
+            }
+
+        });
+    }
+    /**
+     * 打开apk文件
+     *
+     * @param file
+     */
+    private void openAPK(File file) {
+        Intent intent = new Intent();
+        intent.setAction(Intent.ACTION_VIEW);
+        Uri photoURI = null;
+        if (Build.VERSION.SDK_INT >= 24) { //判读版本是否在7.0以上
+            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+            photoURI = FileProvider.getUriForFile(mActivity, mActivity.getApplicationContext().getPackageName() + ".fileprovider", file);//添加这一句表示对目标应用临时授权该Uri所代表的文件
+        } else {
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            photoURI = Uri.fromFile(file);
+        }
+        intent.setDataAndType(photoURI, "application/vnd.android.package-archive");
+        mActivity.startActivity(intent);
+    }
+
     /**
      * 网络请求观察
      * @param observable
diff --git a/app/src/main/java/com/runt/open/mvvm/base/model/ImpViewModel.java b/app/src/main/java/com/runt/open/mvvm/base/model/ImpViewModel.java
index 985f772..15366b2 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/model/ImpViewModel.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/model/ImpViewModel.java
@@ -1,7 +1,7 @@
 package com.runt.open.mvvm.base.model;
 
 /**
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/7/27.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class ImpViewModel extends BaseViewModel{
 }
diff --git a/app/src/main/java/com/runt/open/mvvm/config/Configuration.java b/app/src/main/java/com/runt/open/mvvm/config/Configuration.java
index 4cd44e4..ae6fa94 100644
--- a/app/src/main/java/com/runt/open/mvvm/config/Configuration.java
+++ b/app/src/main/java/com/runt/open/mvvm/config/Configuration.java
@@ -3,7 +3,7 @@
 /**
  * My father is Object, ites purpose of
  *
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/1/29.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class Configuration {
 
diff --git a/app/src/main/java/com/runt/open/mvvm/data/ApkUpGradeResult.java b/app/src/main/java/com/runt/open/mvvm/data/ApkUpGradeResult.java
deleted file mode 100644
index f23882e..0000000
--- a/app/src/main/java/com/runt/open/mvvm/data/ApkUpGradeResult.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.runt.open.mvvm.data;
-
-/**
- * Created by Administrator on 2021/11/15 0015.
- */
-public class ApkUpGradeResult extends HttpApiResult<ApkUpGradeResult.AppInfo> {
-
-    public class AppInfo {
-        //以下为声明的参数
-        public int type, isEnable, isImportant, id, code;
-        public String url,version, content, udate, remark;
-
-
-        @Override
-        public String toString() {
-            return "ApkUpGrade{" +
-                    "type=" + type + "," +
-                    "isEnable=" + isEnable + "," +
-                    "isImportant=" + isImportant + "," +
-                    "id=" + id + "," +
-                    "url=" + url + "," +
-                    "version=" + version + "," +
-                    "content=" + content + "," +
-                    "udate=" + udate + "," +
-                    '}';
-        }
-
-    }
-}
diff --git a/app/src/main/java/com/runt/open/mvvm/data/Results.java b/app/src/main/java/com/runt/open/mvvm/data/Results.java
index 572d453..3d7b385 100644
--- a/app/src/main/java/com/runt/open/mvvm/data/Results.java
+++ b/app/src/main/java/com/runt/open/mvvm/data/Results.java
@@ -3,7 +3,7 @@
 /**
  * My father is Object, ites purpose of
  *
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/1/29.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class Results {
 
@@ -17,4 +17,10 @@
         public String id,title,content,cTime;
     }
 
+    //版本更新
+    public class ApkVersion{
+        public long id,code;
+        public String version,detail,access;
+    }
+
 }
diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java
index 9c7e832..4934aee 100644
--- a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java
+++ b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java
@@ -1,7 +1,6 @@
 package com.runt.open.mvvm.retrofit.api;
 
 
-import com.runt.open.mvvm.data.ApkUpGradeResult;
 import com.runt.open.mvvm.data.HttpApiResult;
 import com.runt.open.mvvm.data.PageResult;
 import com.runt.open.mvvm.data.Results;
@@ -54,11 +53,11 @@
      * app更新
      * @return
      */
-    @GET("system/appupgrade/tourist/get/2")
-    Observable<ApkUpGradeResult> getAppUpdate();
+    @GET("getControlVersion")
+    Observable<HttpApiResult<Results.ApkVersion>> getAppUpdate();
 
     @POST("updateName")
-    Observable<ApkUpGradeResult> updateName(@Field("username") String name);
+    Observable<Results.StringApiResult> updateName(@Field("username") String name);
 
     @Multipart
     @POST("updatehead")
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/AboutActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/AboutActivity.java
new file mode 100644
index 0000000..d3f7465
--- /dev/null
+++ b/app/src/main/java/com/runt/open/mvvm/ui/AboutActivity.java
@@ -0,0 +1,21 @@
+package com.runt.open.mvvm.ui;
+
+import com.runt.open.mvvm.base.activities.BaseActivity;
+import com.runt.open.mvvm.base.model.ImpViewModel;
+import com.runt.open.mvvm.databinding.ActivityAboutBinding;
+import com.runt.open.mvvm.util.DeviceUtil;
+
+/**
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
+ */
+public class AboutActivity extends BaseActivity<ActivityAboutBinding, ImpViewModel> {
+    @Override
+    public void initViews() {
+        mBinding.txtVer.setText("版本号 "+ DeviceUtil.getAppVersionName(mContext));
+    }
+
+    @Override
+    public void loadData() {
+
+    }
+}
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/SettingActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/SettingActivity.java
new file mode 100644
index 0000000..5d64e69
--- /dev/null
+++ b/app/src/main/java/com/runt/open/mvvm/ui/SettingActivity.java
@@ -0,0 +1,46 @@
+package com.runt.open.mvvm.ui;
+
+import android.content.Intent;
+import android.view.View;
+import com.runt.open.mvvm.BuildConfig;
+import com.runt.open.mvvm.base.activities.BaseActivity;
+import com.runt.open.mvvm.base.model.ImpViewModel;
+import com.runt.open.mvvm.config.Configuration;
+import com.runt.open.mvvm.databinding.ActivitySettingBinding;
+import com.runt.open.mvvm.listener.ResPonse;
+import com.runt.open.mvvm.ui.login.UserBean;
+
+/**
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
+ */
+public class SettingActivity extends BaseActivity<ActivitySettingBinding, ImpViewModel> {
+    @Override
+    public void initViews() {
+        setTitle("设置");
+        if(UserBean.getUser() == null){
+            mBinding.logout.setVisibility(View.GONE);
+        }
+        mBinding.version.setText(BuildConfig.VERSION_NAME);
+        mBinding.version.setOnClickListener(v->{
+            mViewModel.checkUpdate(true);
+        });
+        mBinding.about.setOnClickListener(v->{startActivity(new Intent(mContext,AboutActivity.class));});
+        mBinding.logout.setOnClickListener(v->{
+            showDialog("是否退出", "退出后将清除本设备的登录信息", new ResPonse() {
+                @Override
+                public void doSuccess(Object obj) {
+                    clearUserData();
+                    putStringProjectPrefrence(Configuration.KEY_USERINFO,null);
+                    UserBean.setUser(null);
+                    setResult(RESULT_CODE_SUCESS);
+                    finish();
+                }
+            });
+        });
+    }
+
+    @Override
+    public void loadData() {
+
+    }
+}
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageActivitys.java b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageActivitys.java
index f295b7c..8d057a0 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageActivitys.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageActivitys.java
@@ -1,7 +1,7 @@
 package com.runt.open.mvvm.ui.loadpage;
 
 /**
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/8/9.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class PageActivitys {
 }
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageFragments.java b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageFragments.java
index 28da265..dd5d361 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageFragments.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageFragments.java
@@ -6,7 +6,7 @@
 import com.runt.open.mvvm.ui.main.home.MsgAdapter;
 
 /**
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/8/9.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class PageFragments {
 
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java
index 8d76586..b054b54 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java
@@ -8,7 +8,7 @@
 import io.reactivex.Observable;
 
 /**
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/8/9.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class PageViewModels {
     public static class HomeViewModel extends LoadPageViewModel<Results.Message> {
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java
index 7c100fe..4d11f31 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java
@@ -20,7 +20,7 @@
 /**
  * My father is Object, ites purpose of
  *
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/1/29.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class RegisterLoginActivity extends BaseActivity<ActivityLoginBinding,LoginViewModel> {
     final String VERIFY_CODE = "verify_code";
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java
index 3b08428..2c6cc65 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/MainActivity.java
@@ -5,11 +5,9 @@
 import android.content.res.ColorStateList;
 import android.view.KeyEvent;
 import android.view.View;
-
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.viewpager2.widget.ViewPager2;
-
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.permissionx.guolindev.PermissionX;
 import com.runt.open.mvvm.R;
@@ -20,6 +18,7 @@
 import com.runt.open.mvvm.databinding.ActivityMainBinding;
 import com.runt.open.mvvm.listener.CustomClickListener;
 import com.runt.open.mvvm.listener.ResPonse;
+import com.runt.open.mvvm.ui.SettingActivity;
 import com.runt.open.mvvm.ui.loadpage.PageFragments;
 import com.runt.open.mvvm.ui.login.RegisterLoginActivity;
 import com.runt.open.mvvm.ui.login.UserBean;
@@ -41,12 +40,18 @@
 
     @Override
     public void initViews() {
-
-        mBinding.titleBar.setRightDra(getResources().getDrawable(R.mipmap.icon_white_setting));
-        mBinding.titleBar.setRightClick(new CustomClickListener() {
+        ActivityResultLauncher<Intent>  settingLaunch = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+            if(result.getResultCode() == RESULT_CODE_SUCESS){//已退出
+                if(mBinding.viewPager2.getCurrentItem() == 2) {
+                    mBinding.viewPager2.setCurrentItem(0);//设置默认第二页
+                }
+                fragments[2].loadData();//登录后重新刷新
+            }
+        });
+        titleBarView.setRightClick(new CustomClickListener() {
             @Override
             protected void onSingleClick(View view) {
-                //startActivityForResult(new Intent(mContext,SettingActivity.class),REQUEST_CODE_LOGOUT);//打开设置
+                settingLaunch.launch(new Intent(mContext, SettingActivity.class));//打开设置
             }
         });
         final FragmentAdapter fragmentAdapter = new FragmentAdapter(this);
@@ -109,7 +114,7 @@
     private void setTitleStr(int position){
         switch (position){
             case 0:
-                setTitle("资讯");
+                setTitle("资讯Aljkpqla");
                 break;
             case 1:
                 setTitle("服务");
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java b/app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java
index 72f198b..d313fdd 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/MainViewModel.java
@@ -5,7 +5,7 @@
 /**
  * My father is Object, ites purpose of
  *
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/1/28.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class MainViewModel extends BaseViewModel {
 }
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java
index 3be5ae5..fb6b3ce 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java
@@ -3,7 +3,6 @@
 import android.app.Activity;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
-import android.util.Log;
 import android.view.View;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.RequestOptions;
@@ -14,17 +13,11 @@
 import com.runt.open.mvvm.BuildConfig;
 import com.runt.open.mvvm.R;
 import com.runt.open.mvvm.base.fragments.BaseFragment;
-import com.runt.open.mvvm.data.HttpApiResult;
-import com.runt.open.mvvm.data.Results;
 import com.runt.open.mvvm.databinding.FragmentMineBinding;
 import com.runt.open.mvvm.retrofit.observable.HttpObserver;
 import com.runt.open.mvvm.ui.login.UserBean;
 import com.runt.open.mvvm.util.GlideEngine;
 import com.runt.open.mvvm.util.MyLog;
-import okhttp3.ResponseBody;
-import retrofit2.Call;
-import retrofit2.Callback;
-import retrofit2.Response;
 
 import java.io.File;
 import java.util.List;
@@ -71,11 +64,11 @@
                 openAlthum();
                 break;
             case R.id.txt_name://名称
-                mViewModel.updateName(new HttpObserver() {
+                mViewModel.updateName(new HttpObserver<String>() {
                     @Override
-                    protected void onSuccess(Object data) {
-                        UserBean.getUser().setUsername(data.toString());
-                        mBinding.txtName.setText(data.toString());
+                    protected void onSuccess(String data) {
+                        UserBean.getUser().setUsername(data);
+                        mBinding.txtName.setText(data);
 
                     }
                 });
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java
index 8f12bbe..24eba44 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java
@@ -13,11 +13,11 @@
 import java.io.File;
 
 /**
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/7/27.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class MineViewModel extends BaseViewModel {
 
-    public void updateName(HttpObserver observer){
+    public void updateName(HttpObserver<String> observer){
         if(UserBean.getUser().getPhone().equals(UserBean.getUser().getUsername())) {
             mActivity.showInputDialog("输入名称", UserBean.getUser().getUsername(), "名称只能修改一次", new ResPonse() {
                 @Override
diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/service/ServiceFragment.java b/app/src/main/java/com/runt/open/mvvm/ui/main/service/ServiceFragment.java
index 13e0191..c0229d7 100644
--- a/app/src/main/java/com/runt/open/mvvm/ui/main/service/ServiceFragment.java
+++ b/app/src/main/java/com/runt/open/mvvm/ui/main/service/ServiceFragment.java
@@ -10,7 +10,7 @@
 import com.runt.open.mvvm.listener.ResPonse;
 
 /**
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/7/27.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class ServiceFragment extends BaseFragment<FragmentServiceBinding, ImpViewModel> implements View.OnClickListener {
 
diff --git a/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java b/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java
index 4ba6de4..88cbfe9 100644
--- a/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java
+++ b/app/src/main/java/com/runt/open/mvvm/util/HandleDate.java
@@ -6,7 +6,7 @@
 import java.util.Date;
 
 /**
- * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/7/27.
+ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-9-17.
  */
 public class HandleDate {
 
diff --git a/app/src/main/java/com/runt/open/mvvm/widgets/TitleBarView.java b/app/src/main/java/com/runt/open/mvvm/widgets/TitleBarView.java
index 8a811de..c96146d 100644
--- a/app/src/main/java/com/runt/open/mvvm/widgets/TitleBarView.java
+++ b/app/src/main/java/com/runt/open/mvvm/widgets/TitleBarView.java
@@ -102,36 +102,49 @@
         super.onDraw(canvas);
         Log.e("TitleBarView","onDraw mRect:"+mRect);
         if(leftDra != null){
-            final Bitmap bitmap = drawableToBitmap(leftDra);
-            float top = mRect.top+(viewHeight-bitmap.getHeight()*2f)/2;
-            float left = mRect.left-bitmap.getWidth()*0.5f;
-            leftClickRect = new RectF(left,top,left + (bitmap.getWidth()*2f),top + bitmap.getHeight()*2f);
-            canvas.drawBitmap(bitmap,mRect.left,mRect.top+(viewHeight-bitmap.getHeight())/2,null);
+            //点击的区域
+            leftClickRect = drawBitmap(leftDra,canvas,getPaddingLeft());
 
         }
         if(rightDra != null){
-            final Bitmap bitmap = drawableToBitmap(rightDra);
-            float chaTop = (viewHeight-bitmap.getHeight())/2;
-            float top = mRect.top+chaTop;
-            float left = mRect.right-bitmap.getWidth();
-            rightClickRect = new RectF(left-bitmap.getWidth()/2,top-bitmap.getHeight()/2,left+bitmap.getWidth()*2f,top+bitmap.getHeight()*1.5f);
-            canvas.drawBitmap(bitmap,left,top,null);
+            //点击的区域
+            rightClickRect = drawBitmap(rightDra,canvas,getPaddingRight()+viewWidth);
         }
         if(titleText != null){
             final int textWidth = getTextWidth(textPaint, titleText);
-            final int textHeight = getTextHeight(textPaint);
-            final Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
-            canvas.drawText(titleText,mRect.left+((viewWidth-textWidth)/2),mRect.top+((viewHeight-textHeight)/2)+(0-fontMetrics.ascent),textPaint);
+            final float[] textHeight = getTextHeight(textPaint);
+            float top = (getHeight()-textHeight[0])/2-textPaint.getFontMetrics().ascent;
+            canvas.drawText(titleText,mRect.left+((viewWidth-textWidth)/2),top,textPaint);
         }
         if(rightText != null){
             final int textWidth = getTextWidth(rightTextPaint, rightText);
-            final int textHeight = getTextHeight(rightTextPaint);
-            final Paint.FontMetrics fontMetrics = rightTextPaint.getFontMetrics();
+            final float[] textHeight = getTextHeight(rightTextPaint);
+            float chaleft = textWidth*0.5f;
+            float chaTop = textHeight[0]*0.5f;
             float left = mRect.right-textWidth;
-            float top = mRect.top+((viewHeight-textHeight)/2)+(0-fontMetrics.ascent);
-            rightClickRect = new RectF(left-textWidth/2,top-textHeight,left+textWidth*2f,top+textHeight/2);
+            float top = (getHeight()-textHeight[0])/2-textPaint.getFontMetrics().ascent;
+            rightClickRect = new RectF(left-chaleft,top-chaTop,left +chaleft*3,top + chaTop*3);
             canvas.drawText(rightText,left,top,rightTextPaint);
         }
+    }
+
+    /**
+     * 绘制图片
+     * @param drawable
+     * @param canvas
+     * @return  点击的区域
+     */
+    private RectF drawBitmap(Drawable drawable,Canvas canvas,float left){
+        final Bitmap bitmap = drawableToBitmap(drawable);
+        if(left>viewWidth){//右侧
+            left -= bitmap.getWidth();
+        }
+        float chaTop = bitmap.getHeight()*0.5f;
+        float chaleft = bitmap.getWidth()*0.5f;
+        //绘制的位置
+        float top = (getHeight()-bitmap.getHeight())/2;
+        canvas.drawBitmap(bitmap,left,top,null);
+        return new RectF(left-chaleft,top-chaTop,left +chaleft*3,top + chaTop*3);
     }
     @Override
     public boolean onTouchEvent(MotionEvent event) {
@@ -244,11 +257,11 @@
     }
 
     //第二个参数是一个数组.传进去个长度跟字符串长度相同的float数组,方法调用后,里边塞的是每个字符的长度.
-    public  int  getTextHeight(Paint paint) {
+    public float[] getTextHeight(Paint paint) {
         Paint.FontMetrics fm = paint.getFontMetrics();
         float height1 = fm.descent - fm.ascent;//文字的高度
         float height2 = fm.bottom - fm.top + fm.leading;//行高
-        return (int) height2;
+        return new float[]{height1,height2};
     }
 
     private void setTint(Drawable drawable, @ColorInt int color){
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
new file mode 100644
index 0000000..a521504
--- /dev/null
+++ b/app/src/main/res/layout/activity_about.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical" >
+
+    <com.runt.open.mvvm.widgets.TitleBarView
+        android:id="@+id/title_bar"
+        style="@style/titlebar"
+        app:leftDrawable="@mipmap/icon_white_back"
+        app:leftTint="@color/txt_normal"
+        app:titleText="关于我们"
+        app:titleTextColor="@color/txt_normal"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center_horizontal"
+        android:orientation="vertical"
+        android:layout_weight="1">
+
+        <com.runt.open.mvvm.widgets.CornerImageView
+            android:layout_width="70dp"
+            android:layout_height="70dp"
+            android:layout_marginTop="40dp"
+            android:src="@mipmap/ic_launcher" />
+
+
+        <TextView
+            android:id="@+id/txt_app"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/default_margin_td"
+            android:text="@string/app_name"/>
+
+        <TextView
+            android:id="@+id/txt_ver"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/default_margin_td"
+            android:text="@string/app_name"/>
+
+    </LinearLayout>
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="5dp"
+        android:text="@string/title_guanui_text_1"/>
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="5dp"
+        android:text="@string/title_guanui_text_2"/>
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="5dp"
+        android:text="@string/title_guanui_text_3"
+        android:layout_marginBottom="@dimen/default_margin_lr"/>
+
+</LinearLayout>
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 28c5d9f..faa303a 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -9,7 +9,8 @@
     <com.runt.open.mvvm.widgets.TitleBarView
         android:id="@+id/title_bar"
         style="@style/titlebar"
-        app:leftDrawable="@mipmap/ic_arrow_back_black_24dp"
+        app:leftDrawable="@mipmap/icon_white_back"
+        app:leftTint="@color/txt_normal"
         app:titleText="登录"
         tools:ignore="MissingConstraints" />
 
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index deb81e7..856f24c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -10,6 +10,8 @@
     <com.runt.open.mvvm.widgets.TitleBarView
         android:id="@+id/title_bar"
         style="@style/titlebar"
+        app:rightDrawable="@mipmap/icon_white_setting"
+        app:rightTint="@color/black"
         tools:ignore="MissingConstraints"
         app:titleText="标题" />
 
diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml
index 6159993..8bad1f8 100644
--- a/app/src/main/res/layout/activity_setting.xml
+++ b/app/src/main/res/layout/activity_setting.xml
@@ -2,6 +2,7 @@
 <androidx.constraintlayout.widget.ConstraintLayout 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"
+    tools:ignore="MissingConstraints"
     android:background="@color/white"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -10,7 +11,6 @@
     <com.runt.open.mvvm.widgets.TitleBarView
         android:id="@+id/title_bar"
         style="@style/titlebar"
-        tools:ignore="MissingConstraints"
         app:titleText="设置"
         app:leftDrawable="@mipmap/icon_white_back"
         app:leftTint="@color/black"/>
@@ -18,30 +18,14 @@
     <TextView
         android:id="@+id/version"
         app:layout_constraintTop_toBottomOf="@id/title_bar"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
-        android:background="@drawable/bg_white"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="left"
         android:text="@string/str_version"
-        android:textColor="@color/txt_color"
-        android:textSize="@dimen/title_size"
-        android:padding="15dp" />
+        style="@style/lin_txt" />
     <TextView
         android:id="@+id/about"
         app:layout_constraintTop_toBottomOf="@id/version"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
-        android:background="@drawable/bg_white"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        style="@style/lin_txt"
         android:drawableRight="@mipmap/arrow_right"
-        android:gravity="left"
-        android:text="关于我们"
-        android:textColor="@color/txt_color"
-        android:textSize="@dimen/title_size"
-        android:padding="15dp" />
+        android:text="关于我们" />
     <View
         app:layout_constraintTop_toBottomOf="@id/title_bar"
         android:layout_width="match_parent"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 15ac25b..3506f36 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -69,4 +69,8 @@
     <string name="str_restart">重启APP</string>
     <string name="str_success">成功</string>
     <string name="str_no_up">暂无更新</string>
+
+    <string name="title_guanui_text_1">版权所有©</string>
+    <string name="title_guanui_text_2">xxx科技有限责任公司 </string>
+    <string name="title_guanui_text_3">ICP备案:冀ICP备20008xxx号-1</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 6bab23f..eadbfc9 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -2,57 +2,57 @@
 <resources>
 
     <declare-styleable name="TitleBarView">
-        <attr name="leftDrawable" format="reference" />
-        <attr name="rightDrawable" format="reference" />
-        <attr name="rightDrawablePadding" format="dimension" />
-        <attr name="titleText" format="string" />
-        <attr name="titleTextSize" format="dimension" />
-        <attr name="titleTextColor" format="color" />
-        <attr name="rightText" format="string" />
-        <attr name="rightTextSize" format="dimension" />
-        <attr name="rightTextColor" format="color" />
-        <attr name="leftTint" format="color" />
-        <attr name="rightTint" format="color" />
+        <attr name="leftDrawable" format="reference"/>
+        <attr name="rightDrawable" format="reference"/>
+        <attr name="rightDrawablePadding" format="dimension"/>
+        <attr name="titleText" format="string"/>
+        <attr name="titleTextSize" format="dimension"/>
+        <attr name="titleTextColor" format="color"/>
+        <attr name="rightText" format="string"/>
+        <attr name="rightTextSize" format="dimension"/>
+        <attr name="rightTextColor" format="color"/>
+        <attr name="leftTint" format="color"/>
+        <attr name="rightTint" format="color"/>
     </declare-styleable>
 
 
     <declare-styleable name="LinearLayoutWithText">
-        <attr name="linbackgroundColor" format="color" />
-        <attr name="text_title" format="string" />
-        <attr name="text_titleColor"  format="color"/>
-        <attr name="text_right"  format="string"/>
-        <attr name="hint_right" format="string" />
-        <attr name="hint_title" format="string" />
-        <attr name="text_rightColor"  format="color"/>
+        <attr name="linbackgroundColor" format="color"/>
+        <attr name="text_title" format="string"/>
+        <attr name="text_titleColor" format="color"/>
+        <attr name="text_right" format="string"/>
+        <attr name="hint_right" format="string"/>
+        <attr name="hint_title" format="string"/>
+        <attr name="text_rightColor" format="color"/>
         <attr name="divider_visible">
-            <enum name="visible" value="0" />
-            <enum name="invisible" value="4" />
-            <enum name="gone" value="8" />
+            <enum name="visible" value="0"/>
+            <enum name="invisible" value="4"/>
+            <enum name="gone" value="8"/>
         </attr>
         <attr name="img_visible">
-            <enum name="visible" value="0" />
-            <enum name="invisible" value="4" />
-            <enum name="gone" value="8" />
+            <enum name="visible" value="0"/>
+            <enum name="invisible" value="4"/>
+            <enum name="gone" value="8"/>
         </attr>
-        <attr name="text_rightSize"  format="integer"/>
-        <attr name="text_titleSize"  format="integer"/>
-        <attr name="red_poit_count"  format="integer"/>
-        <attr name="paddingLeft" format="dimension" />
-        <attr name="paddingRight" format="dimension" />
-        <attr name="paddingTop" format="dimension" />
-        <attr name="paddingBottom" format="dimension" />
-        <attr name="padding" format="dimension" />
-        <attr name="hint_titleColor"  format="color"/>
-        <attr name="hint_rightColor"  format="color"/>
-        <attr name="leftCompoundDrawable" format="reference" />
-        <attr name="leftCompoundDrawableSize"  format="integer"/>
-        <attr name="rightCompoundDrawable" format="reference" />
-        <attr name="enable" format="boolean" />
+        <attr name="text_rightSize" format="integer"/>
+        <attr name="text_titleSize" format="integer"/>
+        <attr name="red_poit_count" format="integer"/>
+        <attr name="paddingLeft" format="dimension"/>
+        <attr name="paddingRight" format="dimension"/>
+        <attr name="paddingTop" format="dimension"/>
+        <attr name="paddingBottom" format="dimension"/>
+        <attr name="padding" format="dimension"/>
+        <attr name="hint_titleColor" format="color"/>
+        <attr name="hint_rightColor" format="color"/>
+        <attr name="leftCompoundDrawable" format="reference"/>
+        <attr name="leftCompoundDrawableSize" format="integer"/>
+        <attr name="rightCompoundDrawable" format="reference"/>
+        <attr name="enable" format="boolean"/>
     </declare-styleable>
 
     <declare-styleable name="CircleImageView">
-        <attr name="border_width" format="dimension" />
-        <attr name="border_color" format="color" />
+        <attr name="border_width" format="dimension"/>
+        <attr name="border_color" format="color"/>
     </declare-styleable>
 
     <style name="txt_normal">
@@ -134,4 +134,19 @@
         <item name="android:paddingLeft">30dp</item>
         <item name="android:textColor">@color/link</item>
     </style>
+
+    <style name="lin_txt">
+        <item name="layout_constraintRight_toRightOf">parent</item>
+        <item name="layout_constraintLeft_toLeftOf">parent</item>
+        <item name="android:background">@drawable/bg_white</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">left</item>
+        <item name="android:textColor">@color/txt_color</item>
+        <item name="android:textSize">@dimen/title_size</item>
+        <item name="android:paddingTop">@dimen/default_margin_td</item>
+        <item name="android:paddingBottom">@dimen/default_margin_td</item>
+        <item name="android:paddingLeft">@dimen/default_margin_lr</item>
+        <item name="android:paddingRight">@dimen/default_margin_lr</item>
+    </style>
 </resources>
\ No newline at end of file

--
Gitblit v1.9.1