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