检测版本更新App
This commit is contained in:
@@ -39,7 +39,7 @@ android {
|
|||||||
minSdkVersion 26
|
minSdkVersion 26
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName "1.0.1"//version 1.0.0-appstore version 1.0.0-xh
|
versionName "Version 1.0.1"//version 1.0.0-appstore version 1.0.0-xh
|
||||||
// 添加自定义字段
|
// 添加自定义字段
|
||||||
buildConfigField "String", "APP_VERSION_NAME", "\"${versionName}\""
|
buildConfigField "String", "APP_VERSION_NAME", "\"${versionName}\""
|
||||||
buildConfigField "int", "APP_VERSION_CODE", "${versionCode}"
|
buildConfigField "int", "APP_VERSION_CODE", "${versionCode}"
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import android.view.WindowManager;
|
|||||||
import android.view.animation.Animation;
|
import android.view.animation.Animation;
|
||||||
import android.view.animation.AnimationUtils;
|
import android.view.animation.AnimationUtils;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -48,8 +49,10 @@ public class DialogAppUpdate {
|
|||||||
public static View layoutView;
|
public static View layoutView;
|
||||||
private Dialog mDialog;
|
private Dialog mDialog;
|
||||||
private Activity mContext;
|
private Activity mContext;
|
||||||
private TextView tvTitle,tvContent,tvConfirm,tvCancel;
|
private TextView tvTitle,tvContent,tvConfirm,tvCancel,tvVersionName;
|
||||||
|
private TextView tvProgressPercent;
|
||||||
private RelativeLayout rlUpdateContent;
|
private RelativeLayout rlUpdateContent;
|
||||||
|
private LinearLayout llProgressContainer,llButton;
|
||||||
private ImageView imgClose,imgClear;
|
private ImageView imgClose,imgClear;
|
||||||
private String startTime = "";
|
private String startTime = "";
|
||||||
private String endTime = "";
|
private String endTime = "";
|
||||||
@@ -84,7 +87,7 @@ public class DialogAppUpdate {
|
|||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
this.mIsForceUpdate = isForceUpdate;
|
this.mIsForceUpdate = isForceUpdate;
|
||||||
this.mVersionBean = bean;
|
this.mVersionBean = bean;
|
||||||
mDwonLoadUrl = bean.getVersionUrl();
|
mDwonLoadUrl = bean.getDownloadUrl();
|
||||||
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
|
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
|
||||||
//填充对话框的布局
|
//填充对话框的布局
|
||||||
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
|
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
|
||||||
@@ -122,29 +125,28 @@ public class DialogAppUpdate {
|
|||||||
dialogWindow.setAttributes(lp);
|
dialogWindow.setAttributes(lp);
|
||||||
}
|
}
|
||||||
tvTitle = layoutView.findViewById(R.id.tv_title);
|
tvTitle = layoutView.findViewById(R.id.tv_title);
|
||||||
|
tvVersionName = layoutView.findViewById(R.id.tv_version);
|
||||||
tvContent = layoutView.findViewById(R.id.tv_update_content);
|
tvContent = layoutView.findViewById(R.id.tv_update_content);
|
||||||
tvConfirm = layoutView.findViewById(R.id.tv_update);
|
tvConfirm = layoutView.findViewById(R.id.tv_update);
|
||||||
tvCancel = layoutView.findViewById(R.id.tv_cencel);
|
tvCancel = layoutView.findViewById(R.id.tv_cancel);
|
||||||
progressBar = layoutView.findViewById(R.id.progress_bar);
|
progressBar = layoutView.findViewById(R.id.progress_bar);
|
||||||
rlUpdateContent = layoutView.findViewById(R.id.rel_file_content);
|
rlUpdateContent = layoutView.findViewById(R.id.rel_file_content);
|
||||||
|
llProgressContainer = layoutView.findViewById(R.id.ll_progress_container);
|
||||||
|
llButton = layoutView.findViewById(R.id.Linear_button);
|
||||||
tvConfirm.setOnClickListener(onclick);
|
tvConfirm.setOnClickListener(onclick);
|
||||||
tvCancel.setOnClickListener(onclick);
|
tvCancel.setOnClickListener(onclick);
|
||||||
if(isForceUpdate){
|
if(isForceUpdate){
|
||||||
tvCancel.setVisibility(View.GONE);
|
tvCancel.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
// 初始化 DownloadManager
|
tvVersionName.setText(bean.getLatestVersion());
|
||||||
downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
|
// 解析更新说明,支持纯文本和HTML格式
|
||||||
notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
String releaseNotes = bean.getReleaseNotes();
|
||||||
|
releaseNotes = releaseNotes.replace("\n", "<br>");
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
tvContent.setText(Html.fromHtml(bean.getVersionDescription(), Html.FROM_HTML_MODE_LEGACY));
|
tvContent.setText(Html.fromHtml(releaseNotes, Html.FROM_HTML_MODE_LEGACY));
|
||||||
} else {
|
} else {
|
||||||
|
tvContent.setText(Html.fromHtml(releaseNotes));
|
||||||
}
|
}
|
||||||
String [] desStr = bean.getVersionDescription().split("#");
|
|
||||||
String desLine = "";
|
|
||||||
for(String str : desStr){
|
|
||||||
desLine = desLine + str + "\n";
|
|
||||||
}
|
|
||||||
tvContent.setText(desLine);
|
|
||||||
tvContent.setLineSpacing(0, 1.2f);
|
tvContent.setLineSpacing(0, 1.2f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +167,7 @@ public class DialogAppUpdate {
|
|||||||
}
|
}
|
||||||
startUpdateApp();
|
startUpdateApp();
|
||||||
break;
|
break;
|
||||||
case R.id.tv_cencel:
|
case R.id.tv_cancel:
|
||||||
dismiss();
|
dismiss();
|
||||||
AppConfig.USER_CONFIRM_UPDATE_APP = true;
|
AppConfig.USER_CONFIRM_UPDATE_APP = true;
|
||||||
break;
|
break;
|
||||||
@@ -176,8 +178,8 @@ public class DialogAppUpdate {
|
|||||||
public void startUpdateApp() {
|
public void startUpdateApp() {
|
||||||
//强制更新,不需要隐藏dialog
|
//强制更新,不需要隐藏dialog
|
||||||
if(mIsForceUpdate){
|
if(mIsForceUpdate){
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
llProgressContainer.setVisibility(View.VISIBLE);
|
||||||
rlUpdateContent.setVisibility(View.GONE);
|
llButton.setVisibility(View.GONE);
|
||||||
progressBar.setMax(100);
|
progressBar.setMax(100);
|
||||||
}else{
|
}else{
|
||||||
ToastUtil.showShort(mContext,"可在任务栏查看下载进度");
|
ToastUtil.showShort(mContext,"可在任务栏查看下载进度");
|
||||||
|
|||||||
@@ -276,7 +276,8 @@ public class IndexFragment extends BaseFragment<IndexFragmentLayoutBinding, Inde
|
|||||||
case 302:
|
case 302:
|
||||||
// 这是一台没有在mqtt中注册的设备,需要通过蓝牙连接配网,(可理解为新设备,走蓝牙,配网)
|
// 这是一台没有在mqtt中注册的设备,需要通过蓝牙连接配网,(可理解为新设备,走蓝牙,配网)
|
||||||
// 先检查蓝牙权限和开启状态
|
// 先检查蓝牙权限和开启状态
|
||||||
pendingDeviceEntity = entity;
|
|
||||||
|
|
||||||
checkBluetoothAndProceed();
|
checkBluetoothAndProceed();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import java.util.Map;
|
|||||||
public interface MainContract {
|
public interface MainContract {
|
||||||
interface DataModel{
|
interface DataModel{
|
||||||
//新版本检测
|
//新版本检测
|
||||||
void checkAppVersionCode(JSONObject json, CallBack callBack);
|
void checkAppVersionCode(Map<String,String> map, CallBack callBack);
|
||||||
//运势
|
//运势
|
||||||
void getYunshiData(Map<String,Object> map, CallBack callBack);
|
void getYunshiData(Map<String,Object> map, CallBack callBack);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,13 +20,13 @@ public class MainImpl implements MainContract.DataModel{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 检测新版本
|
* 检测新版本
|
||||||
* @param jsonObject
|
* @param map
|
||||||
* @param callBack
|
* @param callBack
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void checkAppVersionCode(JSONObject jsonObject, MainContract.CallBack callBack) {
|
public void checkAppVersionCode(Map<String,String> map, MainContract.CallBack callBack) {
|
||||||
try {
|
try {
|
||||||
NetWorkManager.getRequest().checkVersionCode(NetWorkManager.getToken(),NetWorkManager.toRequestBody(jsonObject))
|
NetWorkManager.getRequest().checkVersionCode(NetWorkManager.getToken(),map)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.unsubscribeOn(Schedulers.io())
|
.unsubscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ckkj.water.main;
|
package com.ckkj.water.main;
|
||||||
|
|
||||||
|
import com.ckkj.water.BuildConfig;
|
||||||
import com.ckkj.water.base.BasePresenter;
|
import com.ckkj.water.base.BasePresenter;
|
||||||
import com.ckkj.water.main.entity.CheckVersionEntity;
|
import com.ckkj.water.main.entity.CheckVersionEntity;
|
||||||
|
|
||||||
@@ -20,8 +21,10 @@ public class MainPresenter extends BasePresenter<MainContract.MainView> {
|
|||||||
* 获取用户信息
|
* 获取用户信息
|
||||||
*/
|
*/
|
||||||
public void checkNewVersion() {
|
public void checkNewVersion() {
|
||||||
JSONObject json = new JSONObject();
|
Map<String,String> map = new HashMap<>();
|
||||||
mainImpl.checkAppVersionCode(json, new MainContract.CallBack<CheckVersionEntity>() {
|
map.put("platform","android");
|
||||||
|
map.put("currentVersion", BuildConfig.APP_VERSION_NAME);
|
||||||
|
mainImpl.checkAppVersionCode(map, new MainContract.CallBack<CheckVersionEntity>() {
|
||||||
@Override
|
@Override
|
||||||
public void success(CheckVersionEntity bean) {
|
public void success(CheckVersionEntity bean) {
|
||||||
if( MainPresenter.this.getView() != null){
|
if( MainPresenter.this.getView() != null){
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public class MainActivity extends BaseActivity<MainActivityLayoutBinding, MainPr
|
|||||||
@Override
|
@Override
|
||||||
public void initData(Bundle savedInstanceState) {
|
public void initData(Bundle savedInstanceState) {
|
||||||
super.initData(savedInstanceState);
|
super.initData(savedInstanceState);
|
||||||
// mPresenter.checkNewVersion();
|
mPresenter.checkNewVersion();
|
||||||
// 清空Fragment列表,避免状态恢复问题
|
// 清空Fragment列表,避免状态恢复问题
|
||||||
mFragmentList.clear();
|
mFragmentList.clear();
|
||||||
mFragmentList.add(new IndexFragment());
|
mFragmentList.add(new IndexFragment());
|
||||||
@@ -356,16 +356,16 @@ public class MainActivity extends BaseActivity<MainActivityLayoutBinding, MainPr
|
|||||||
if(bean == null){
|
if(bean == null){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(bean.getVersionCoercion().equals("0")){//不强制
|
if(!bean.isForceUpdate()){//不强制
|
||||||
isForceUpdate = false;
|
isForceUpdate = false;
|
||||||
}else{
|
}else{
|
||||||
isForceUpdate = true;
|
isForceUpdate = true;
|
||||||
}
|
}
|
||||||
//前期强制更新
|
//前期强制更新
|
||||||
// isForceUpdate = true;
|
// isForceUpdate = true;
|
||||||
if(bean.getVersionNumber() > versionCode){
|
if(bean.getVersionCode() > versionCode){
|
||||||
//App更新dialog
|
//App更新dialog
|
||||||
mUpdateDialog = new DialogAppUpdate(mContext,R.layout.dialog_app_update,isForceUpdate,bean);
|
mUpdateDialog = new DialogAppUpdate(mContext,R.layout.dialog_app_update_water,isForceUpdate,bean);
|
||||||
mUpdateDialog.show();
|
mUpdateDialog.show();
|
||||||
mUpdateDialog.setOnDialogListener(new DialogAppUpdate.DialogListener() {
|
mUpdateDialog.setOnDialogListener(new DialogAppUpdate.DialogListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,41 +1,32 @@
|
|||||||
package com.ckkj.water.main.entity;
|
package com.ckkj.water.main.entity;
|
||||||
|
|
||||||
import com.google.gson.annotations.SerializedName;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@Data
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
public class CheckVersionEntity implements Serializable {
|
public class CheckVersionEntity implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
@SerializedName("versionNumber")
|
/**
|
||||||
private int versionNumber;
|
* platform : android
|
||||||
@SerializedName("versionEnd")
|
* currentVersion : 1.0.1
|
||||||
private String versionEnd;
|
* latestVersion : 1.0.0
|
||||||
@SerializedName("versionCoercion")
|
* versionCode : 1
|
||||||
private String versionCoercion;
|
* updateAvailable : true
|
||||||
@SerializedName("versionDescription")
|
* forceUpdate : false
|
||||||
private String versionDescription;
|
* downloadUrl : null
|
||||||
@SerializedName("versionName")
|
* releaseNotes : null
|
||||||
private String versionName;
|
*/
|
||||||
@SerializedName("versionUrl")
|
|
||||||
private String versionUrl;
|
private String platform;
|
||||||
@SerializedName("versionHide1")
|
private String currentVersion;
|
||||||
private String versionHide1;
|
private String latestVersion;
|
||||||
@SerializedName("versionHide2")
|
private int versionCode;
|
||||||
private String versionHide2;
|
private boolean updateAvailable;
|
||||||
@SerializedName("versionHide3")
|
private boolean forceUpdate;
|
||||||
private String versionHide3;
|
private String downloadUrl;
|
||||||
@SerializedName("versionHide4")
|
private String releaseNotes;
|
||||||
private String versionHide4;
|
|
||||||
@SerializedName("versionHide5")
|
|
||||||
private Object versionHide5;
|
|
||||||
@SerializedName("versionHide6")
|
|
||||||
private Object versionHide6;
|
|
||||||
@SerializedName("paipanApiKey")
|
|
||||||
private String paipanApiKey;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.os.Bundle;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
import com.ckkj.water.AppConfig;
|
import com.ckkj.water.AppConfig;
|
||||||
import com.ckkj.water.ConstantUtil;
|
import com.ckkj.water.ConstantUtil;
|
||||||
import com.ckkj.water.R;
|
import com.ckkj.water.R;
|
||||||
@@ -143,6 +144,13 @@ public class MineCenterFragment extends BaseFragment<MineFragmentLayoutBinding,
|
|||||||
}else{
|
}else{
|
||||||
viewBinding.tvUserAccount.setText(bean.getUser().getPhonenumber());
|
viewBinding.tvUserAccount.setText(bean.getUser().getPhonenumber());
|
||||||
}
|
}
|
||||||
|
if(!TextUtils.isEmpty(bean.getUser().getAvatar())){
|
||||||
|
// 刷新头像显示
|
||||||
|
Glide.with(mContext)
|
||||||
|
.load(bean.getUser().getAvatar())
|
||||||
|
.error(mContext.getDrawable(R.mipmap.icon_mine_user_head_defaul))
|
||||||
|
.into(viewBinding.imgAvatar);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ public class MineInfomationActivity extends BaseActivity<MineInformationLayoutBi
|
|||||||
@Override
|
@Override
|
||||||
public void onConfirmClisk(String content) {
|
public void onConfirmClisk(String content) {
|
||||||
showLoadingDialog();
|
showLoadingDialog();
|
||||||
mPresenter.updateUserInfo(content);
|
mPresenter.updateUserInfo(content,null);
|
||||||
mUserBean.getUser().setNickName(content);
|
mUserBean.getUser().setNickName(content);
|
||||||
viewBinding.tvNicknameValue.setText(content);
|
viewBinding.tvNicknameValue.setText(content);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class MineUserInfoBean implements Serializable {
|
|||||||
private String email;
|
private String email;
|
||||||
private String phonenumber;
|
private String phonenumber;
|
||||||
private String sex;
|
private String sex;
|
||||||
private Object avatar;
|
private String avatar;
|
||||||
private String password;
|
private String password;
|
||||||
private String status;
|
private String status;
|
||||||
private String loginIp;
|
private String loginIp;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.ckkj.water.mine.mvp;
|
package com.ckkj.water.mine.mvp;
|
||||||
|
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.ckkj.water.base.BasePresenter;
|
import com.ckkj.water.base.BasePresenter;
|
||||||
import com.ckkj.water.mine.entity.MineUserInfoBean;
|
import com.ckkj.water.mine.entity.MineUserInfoBean;
|
||||||
import com.ckkj.water.login.mvp.LoginContract;
|
import com.ckkj.water.login.mvp.LoginContract;
|
||||||
@@ -51,12 +53,18 @@ public class MinePresenter extends BasePresenter<MineContract.MineView> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户信息
|
* 修改用户信息
|
||||||
* @param content
|
* @param nickName
|
||||||
|
* @param avatar
|
||||||
*/
|
*/
|
||||||
public void updateUserInfo(String content) {
|
public void updateUserInfo(String nickName,String avatar) {
|
||||||
try {
|
try {
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("nickName", content);
|
if(!TextUtils.isEmpty(avatar)){
|
||||||
|
json.put("nickName", nickName);
|
||||||
|
}
|
||||||
|
if(!TextUtils.isEmpty(avatar)){
|
||||||
|
json.put("avatar", avatar);
|
||||||
|
}
|
||||||
impl.updateUserInfo(json, new MineContract.CallBack<BaseBean>() {
|
impl.updateUserInfo(json, new MineContract.CallBack<BaseBean>() {
|
||||||
@Override
|
@Override
|
||||||
public void success(BaseBean bean) {
|
public void success(BaseBean bean) {
|
||||||
@@ -142,6 +150,7 @@ public class MinePresenter extends BasePresenter<MineContract.MineView> {
|
|||||||
public void success(MineUserInfoBean bean) {
|
public void success(MineUserInfoBean bean) {
|
||||||
if (MinePresenter.this.getView() != null) {
|
if (MinePresenter.this.getView() != null) {
|
||||||
MinePresenter.this.getView().uploadImageSuccess(bean);
|
MinePresenter.this.getView().uploadImageSuccess(bean);
|
||||||
|
updateUserInfo(null,bean.getUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -148,8 +148,8 @@ public interface Request {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@POST("mobile/version?end=android")
|
@GET("app/v1/checkVersion")
|
||||||
Observable<BaseBean<CheckVersionEntity>> checkVersionCode(@HeaderMap Map<String, String> headMap, @Body RequestBody requestBody);
|
Observable<BaseBean<CheckVersionEntity>> checkVersionCode(@HeaderMap Map<String, String> headMap, @QueryMap Map<String, String> map);
|
||||||
//版本检测更新
|
//版本检测更新
|
||||||
@POST("mine/api/versionNum")
|
@POST("mine/api/versionNum")
|
||||||
Observable<BaseBean<CheckVersionEntity>> getVersionCheck(@HeaderMap Map<String, String> headMap, @QueryMap Map<String, Object> map);
|
Observable<BaseBean<CheckVersionEntity>> getVersionCheck(@HeaderMap Map<String, String> headMap, @QueryMap Map<String, Object> map);
|
||||||
|
|||||||
170
app/src/main/res/layout/dialog_app_update_water.xml
Normal file
170
app/src/main/res/layout/dialog_app_update_water.xml
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:background="@android:color/transparent"
|
||||||
|
android:gravity="center_horizontal">
|
||||||
|
|
||||||
|
<!-- 白色内容卡片(底层) -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/linear_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="@dimen/dp_30"
|
||||||
|
android:layout_marginTop="@dimen/dp_75"
|
||||||
|
android:paddingTop="@dimen/dp_75"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:background="@drawable/shape_white_coeners_8">
|
||||||
|
|
||||||
|
<!-- 标题区域 -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="@dimen/sp_18"
|
||||||
|
android:textColor="@color/color_2E2E2E"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:text="发现新版本"/>
|
||||||
|
|
||||||
|
<!-- 版本号 -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_version"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/dp_4"
|
||||||
|
android:textSize="@dimen/sp_13"
|
||||||
|
android:textColor="@color/color_ff999999"
|
||||||
|
android:text="V2.0.0"/>
|
||||||
|
|
||||||
|
<!-- 更新内容区域 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/ll_update_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_marginTop="@dimen/dp_20"
|
||||||
|
android:layout_marginLeft="@dimen/dp_28"
|
||||||
|
android:layout_marginRight="@dimen/dp_28">
|
||||||
|
|
||||||
|
<!-- 更新内容行1 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="top">
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_update_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="@dimen/sp_14"
|
||||||
|
android:textColor="@color/color_2E2E2E"
|
||||||
|
android:lineSpacingExtra="@dimen/dp_4"
|
||||||
|
android:text="1.优化布局\n2.修复已知bug,优化用户体验\n3.测试内容测试内容测试内容测试内容测试内容"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- 进度条区域(下载时显示) -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/ll_progress_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_marginTop="@dimen/dp_20"
|
||||||
|
android:layout_marginBottom="@dimen/dp_30"
|
||||||
|
android:layout_marginLeft="@dimen/dp_28"
|
||||||
|
android:layout_marginRight="@dimen/dp_28">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:textSize="@dimen/sp_13"
|
||||||
|
android:textColor="@color/color_2E2E2E"
|
||||||
|
android:text="正在下载..."/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_progress_percent"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="@dimen/sp_13"
|
||||||
|
android:textColor="@color/color_ff999999"
|
||||||
|
android:text="0%"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar"
|
||||||
|
style="?android:attr/progressBarStyleHorizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dp_5"
|
||||||
|
android:layout_marginTop="@dimen/dp_8"
|
||||||
|
android:progressDrawable="@drawable/update_app_progress_bg"
|
||||||
|
android:max="100"
|
||||||
|
android:progress="0"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- 按钮区域 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/Linear_button"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_marginTop="@dimen/dp_24"
|
||||||
|
android:layout_marginLeft="@dimen/dp_28"
|
||||||
|
android:layout_marginRight="@dimen/dp_28"
|
||||||
|
android:layout_marginBottom="@dimen/dp_20"
|
||||||
|
android:visibility="visible">
|
||||||
|
|
||||||
|
<!-- 立即升级按钮 -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_update"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/shape_green_button_bg"
|
||||||
|
android:textSize="@dimen/sp_17"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:text="立即升级"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingTop="@dimen/dp_12"
|
||||||
|
android:paddingBottom="@dimen/dp_12"/>
|
||||||
|
|
||||||
|
<!-- 暂不升级按钮 -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_cancel"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="@dimen/sp_17"
|
||||||
|
android:textColor="@color/color_ff999999"
|
||||||
|
android:text="暂不升级"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingTop="@dimen/dp_12"
|
||||||
|
android:paddingBottom="@dimen/dp_12"
|
||||||
|
android:layout_marginTop="@dimen/dp_8"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- 顶部图片区域(上层,覆盖在白色卡片上方) -->
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/frame_layout"
|
||||||
|
android:layout_width="@dimen/dp_150"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal">
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/img_update_res"
|
||||||
|
android:layout_gravity="center_horizontal"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
@@ -24,7 +24,8 @@
|
|||||||
android:layout_width="@dimen/dp_60"
|
android:layout_width="@dimen/dp_60"
|
||||||
android:layout_height="@dimen/dp_60"
|
android:layout_height="@dimen/dp_60"
|
||||||
app:riv_corner_radius="@dimen/dp_30"
|
app:riv_corner_radius="@dimen/dp_30"
|
||||||
android:src="@mipmap/img_pay_weixin"
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@mipmap/icon_mine_user_head_defaul"
|
||||||
android:layout_marginLeft="20dp"/>
|
android:layout_marginLeft="20dp"/>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
android:layout_width="@dimen/dp_112"
|
android:layout_width="@dimen/dp_112"
|
||||||
android:layout_height="@dimen/dp_112"
|
android:layout_height="@dimen/dp_112"
|
||||||
app:riv_corner_radius="@dimen/dp_120"
|
app:riv_corner_radius="@dimen/dp_120"
|
||||||
android:src="@mipmap/img_pay_weixin"
|
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@mipmap/icon_mine_user_head_defaul"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_centerHorizontal="true"/>
|
android:layout_centerHorizontal="true"/>
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
|
|||||||
BIN
app/src/main/res/mipmap-xhdpi/img_update_res.png
Normal file
BIN
app/src/main/res/mipmap-xhdpi/img_update_res.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/img_update_res.png
Normal file
BIN
app/src/main/res/mipmap-xxhdpi/img_update_res.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 124 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/img_update_res.png
Normal file
BIN
app/src/main/res/mipmap-xxxhdpi/img_update_res.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 207 KiB |
Reference in New Issue
Block a user