Commit e5d53d80 authored by 杨秀秀's avatar 杨秀秀

基础搭建

1:添加图片放大方法
功能开发
1:bug 修复
parent e9923f1c
...@@ -24,6 +24,7 @@ open class BaseRespons: BaseModel() { ...@@ -24,6 +24,7 @@ open class BaseRespons: BaseModel() {
apiService= RetrofitClient.getInstance().create(ApiService::class.java) apiService= RetrofitClient.getInstance().create(ApiService::class.java)
} }
//文件上传
fun upLoadFile(file:File):Observable<BaseResponse<List<Filebean>>> fun upLoadFile(file:File):Observable<BaseResponse<List<Filebean>>>
{ {
val files: MutableList<File> = ArrayList() val files: MutableList<File> = ArrayList()
...@@ -53,7 +54,6 @@ open class BaseRespons: BaseModel() { ...@@ -53,7 +54,6 @@ open class BaseRespons: BaseModel() {
fun downFile(url:String,name:String):Observable<ResponseBody> fun downFile(url:String,name:String):Observable<ResponseBody>
{ {
Log.e("路径",name);
return apiService.download(url).subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()).doOnNext { body -> saveFile(body, return apiService.download(url).subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()).doOnNext { body -> saveFile(body,
name) }.observeOn(AndroidSchedulers.mainThread()) name) }.observeOn(AndroidSchedulers.mainThread())
} }
......
...@@ -33,4 +33,15 @@ class LoginRequest: BaseRespons() { ...@@ -33,4 +33,15 @@ class LoginRequest: BaseRespons() {
class LoginRequestBody(var phone: String, var password: String,var userType:String ) class LoginRequestBody(var phone: String, var password: String,var userType:String )
/**
* 获取协议内容
*/
fun getProtocols(): Observable<BaseResponse<List<String>>>
{
return apiService.getProtocols(ApiParams<Array<String>>().setParams(arrayOf("1","2","3","4","5")))
}
} }
\ No newline at end of file
...@@ -30,8 +30,12 @@ open class MerchantBean ( ...@@ -30,8 +30,12 @@ open class MerchantBean (
var logoFile:Filebean?,//logo文件 var logoFile:Filebean?,//logo文件
var businessLicenseFile:Filebean?,//营业执照文件 var businessLicenseFile:Filebean?,//营业执照文件
var userId:Int?, var userId:Int?,
var merchantOperationLogList:List<LogBean>?=ArrayList() //日志 var merchantOperationLogList:List<LogBean>?=ArrayList(), //日志
var supervisorsUserInfoList:List<supervisorsUserInfo>?=ArrayList()//展位对应督导人员信息
) { ) {
data class supervisorsUserInfo(var nickName:String)
} }
\ No newline at end of file
...@@ -42,4 +42,14 @@ object StaticData { ...@@ -42,4 +42,14 @@ object StaticData {
*/ */
@JvmField @JvmField
var personType: Int = 1 var personType: Int = 1
/**
5 用户协议
4 积分说明
3 隐私条款
2 服务条款
1 会员体系
*/
@JvmField
var Protocols:List<String> =ArrayList();
} }
\ No newline at end of file
...@@ -16,6 +16,8 @@ import com.xx.merchanthbh.data.http.respons.AssistantInformationBean; ...@@ -16,6 +16,8 @@ import com.xx.merchanthbh.data.http.respons.AssistantInformationBean;
import com.xx.merchanthbh.data.http.respons.Filebean; import com.xx.merchanthbh.data.http.respons.Filebean;
import com.xx.merchanthbh.data.staticdata.StaticData; import com.xx.merchanthbh.data.staticdata.StaticData;
import com.xx.merchanthbh.ui.merchantenter.MerchantEnterViewModel; import com.xx.merchanthbh.ui.merchantenter.MerchantEnterViewModel;
import com.xx.xxviewlibrary.comm.CommTextDialog;
import com.xx.xxviewlibrary.comm.RefuseDialogBean;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -104,6 +106,9 @@ public class AssistantManagementViewModel extends BaseViewModel<AssistantManagem ...@@ -104,6 +106,9 @@ public class AssistantManagementViewModel extends BaseViewModel<AssistantManagem
} }
public void deleteAssistant(AssistantInformationBean bean) { public void deleteAssistant(AssistantInformationBean bean) {
showCommTextDialog(new RefuseDialogBean("是否确认删除店员" + bean.getShopAssistantName(), "确定", "取消", "删除店员"), new CommTextDialog.onAcceptCallBack() {
@Override
public void acceptBack() {
model.deleteAssistant(bean.getBusinessId()).compose(RxUtils.schedulersTransformer()) //线程调度 model.deleteAssistant(bean.getBusinessId()).compose(RxUtils.schedulersTransformer()) //线程调度
.doOnSubscribe(AssistantManagementViewModel.this) .doOnSubscribe(AssistantManagementViewModel.this)
.doOnSubscribe (new Consumer<Disposable>() { .doOnSubscribe (new Consumer<Disposable>() {
...@@ -129,4 +134,12 @@ public class AssistantManagementViewModel extends BaseViewModel<AssistantManagem ...@@ -129,4 +134,12 @@ public class AssistantManagementViewModel extends BaseViewModel<AssistantManagem
}); });
} }
@Override
public void refuseBack() {
}
});
}
} }
...@@ -9,12 +9,17 @@ import android.provider.Settings ...@@ -9,12 +9,17 @@ import android.provider.Settings
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.text.Spanned import android.text.Spanned
import android.text.TextPaint import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan import android.text.style.ClickableSpan
import android.util.Log
import android.view.View import android.view.View
import com.xx.merchanthbh.BR import com.xx.merchanthbh.BR
import com.xx.merchanthbh.R import com.xx.merchanthbh.R
import com.xx.merchanthbh.data.http.requst.LoginRequest import com.xx.merchanthbh.data.http.requst.LoginRequest
import com.xx.merchanthbh.data.staticdata.StaticData
import com.xx.merchanthbh.databinding.ActivityLoginBinding import com.xx.merchanthbh.databinding.ActivityLoginBinding
import com.xx.merchanthbh.ui.web.CommWabActivity
import com.xx.merchanthbh.utils.RetrofitClient
import me.goldze.mvvmhabit.base.BaseActivity import me.goldze.mvvmhabit.base.BaseActivity
import me.goldze.mvvmhabit.utils.SPUtils import me.goldze.mvvmhabit.utils.SPUtils
...@@ -35,6 +40,12 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() { ...@@ -35,6 +40,12 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() {
SPUtils.getInstance().clear() SPUtils.getInstance().clear()
super.initData() super.initData()
//获得协议内容
viewModel.getProtocols();
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.R) if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.R)
{ {
...@@ -68,10 +79,21 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() { ...@@ -68,10 +79,21 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() {
var sp:SpannableStringBuilder= SpannableStringBuilder("我已阅读并同意《用户协议》、《隐私条款》") var sp:SpannableStringBuilder= SpannableStringBuilder("我已阅读并同意《用户协议》、《隐私条款》")
// sp.setSpan(ForegroundColorSpan(getColor(R.color.text_grey_blue)),7,20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) // sp.setSpan(ForegroundColorSpan(getColor(R.color.text_grey_blue)),7,20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
binding.tvLoginAgree.setMovementMethod(LinkMovementMethod.getInstance());
binding.tvLoginAgree.setHighlightColor(0)
sp.setSpan(object : ClickableSpan() { sp.setSpan(object : ClickableSpan() {
override fun onClick(view: View) { override fun onClick(view: View) {
if (StaticData.Protocols.size>=5)
{
var bundle:Bundle= Bundle();
bundle.putString("title", "用户协议")
bundle.putString("URL", RetrofitClient.baseH5Url + StaticData.Protocols.get(4))
startActivity(CommWabActivity::class.java, bundle)
}
} }
override fun updateDrawState(ds: TextPaint) { override fun updateDrawState(ds: TextPaint) {
...@@ -84,6 +106,13 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() { ...@@ -84,6 +106,13 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() {
sp.setSpan(object : ClickableSpan() { sp.setSpan(object : ClickableSpan() {
override fun onClick(view: View) { override fun onClick(view: View) {
if (StaticData.Protocols.size>=3)
{
var bundle:Bundle= Bundle();
bundle.putString("title", "隐私条款")
bundle.putString("URL", RetrofitClient.baseH5Url + StaticData.Protocols.get(2))
startActivity(CommWabActivity::class.java, bundle)
}
} }
override fun updateDrawState(ds: TextPaint) { override fun updateDrawState(ds: TextPaint) {
......
...@@ -45,6 +45,7 @@ import me.goldze.mvvmhabit.binding.command.BindingCommand; ...@@ -45,6 +45,7 @@ import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.http.ApiDisposableObserver; import me.goldze.mvvmhabit.http.ApiDisposableObserver;
import me.goldze.mvvmhabit.http.BaseResponse; import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.utils.RxUtils; import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.StringUtils;
import me.goldze.mvvmhabit.utils.ToastUtils; import me.goldze.mvvmhabit.utils.ToastUtils;
public class MerchantEnterViewModel extends BaseViewModel<MerchantEnterRequst> { public class MerchantEnterViewModel extends BaseViewModel<MerchantEnterRequst> {
...@@ -487,6 +488,24 @@ public class MerchantEnterViewModel extends BaseViewModel<MerchantEnterRequst> { ...@@ -487,6 +488,24 @@ public class MerchantEnterViewModel extends BaseViewModel<MerchantEnterRequst> {
return; return;
} }
if (merchantInfo.getBusinessLicense().get()==null)
{
ToastUtils.showShort("请上传营业执照");
return;
}else if (StringUtils.isEmpty(merchantInfo.getBusinessLicense().get().getPath())){
ToastUtils.showShort("请上传营业执照");
return;
}
if (merchantInfo.getOperatingPermit().get()==null)
{
ToastUtils.showShort("请上传经营许可证");
return;
}else if (StringUtils.isEmpty(merchantInfo.getOperatingPermit().get().getPath())){
ToastUtils.showShort("请上传经营许可证");
return;
}
if (TextUtils.isEmpty(userStatic)) if (TextUtils.isEmpty(userStatic))
{ {
observable= model.postMerchantMsg(new MerchantMsgbody(merchantInfo)); observable= model.postMerchantMsg(new MerchantMsgbody(merchantInfo));
......
package com.xx.merchanthbh.ui.merchantinfo package com.xx.merchanthbh.ui.merchantinfo
import android.os.Bundle import android.os.Bundle
import android.view.View
import com.xx.merchanthbh.BR import com.xx.merchanthbh.BR
import com.xx.merchanthbh.R import com.xx.merchanthbh.R
import com.xx.merchanthbh.data.staticdata.StaticData
import com.xx.merchanthbh.databinding.ActivityMaterialInfoBinding import com.xx.merchanthbh.databinding.ActivityMaterialInfoBinding
import com.xx.merchanthbh.ui.merchantenter.AddBrankAdapter import com.xx.merchanthbh.ui.merchantenter.AddBrankAdapter
import me.goldze.mvvmhabit.base.BaseActivity import me.goldze.mvvmhabit.base.BaseActivity
...@@ -26,6 +28,14 @@ class MaterialInfoActivity : BaseActivity<ActivityMaterialInfoBinding, MerchantI ...@@ -26,6 +28,14 @@ class MaterialInfoActivity : BaseActivity<ActivityMaterialInfoBinding, MerchantI
if (StaticData.personType==0)
{ //店长
binding.llAmeBottom.visibility= View.VISIBLE
}else{
//店员
binding.llAmeBottom.visibility= View.GONE
}
} }
......
...@@ -4,6 +4,7 @@ package com.xx.merchanthbh.ui.merchantinfo; ...@@ -4,6 +4,7 @@ package com.xx.merchanthbh.ui.merchantinfo;
import android.app.Application; import android.app.Application;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
...@@ -11,9 +12,12 @@ import androidx.lifecycle.MutableLiveData; ...@@ -11,9 +12,12 @@ import androidx.lifecycle.MutableLiveData;
import androidx.navigation.NavController; import androidx.navigation.NavController;
import androidx.navigation.Navigation; import androidx.navigation.Navigation;
import com.bumptech.glide.Glide;
import com.huantansheng.easyphotos.callback.SelectCallback; import com.huantansheng.easyphotos.callback.SelectCallback;
import com.huantansheng.easyphotos.models.album.entity.Photo; import com.huantansheng.easyphotos.models.album.entity.Photo;
import com.huantansheng.easyphotos.utils.permission.PermissionUtil; import com.huantansheng.easyphotos.utils.permission.PermissionUtil;
import com.stfalcon.imageviewer.StfalconImageViewer;
import com.stfalcon.imageviewer.loader.ImageLoader;
import com.xx.merchanthbh.R; import com.xx.merchanthbh.R;
import com.xx.merchanthbh.data.http.requst.MerchantEnterRequst; import com.xx.merchanthbh.data.http.requst.MerchantEnterRequst;
import com.xx.merchanthbh.data.http.requst.body.BrankBean; import com.xx.merchanthbh.data.http.requst.body.BrankBean;
...@@ -28,6 +32,7 @@ import com.xx.merchanthbh.data.local.LocalData; ...@@ -28,6 +32,7 @@ import com.xx.merchanthbh.data.local.LocalData;
import com.xx.merchanthbh.dialog.BoothListDialog; import com.xx.merchanthbh.dialog.BoothListDialog;
import com.xx.merchanthbh.ui.merchantenter.AddBrankAdapter; import com.xx.merchanthbh.ui.merchantenter.AddBrankAdapter;
import com.xx.xxviewlibrary.base.xxBaseDialog; import com.xx.xxviewlibrary.base.xxBaseDialog;
import com.xx.xxviewlibrary.witget.XxUploudPic;
import com.xx.xxviewlibrary.witget.model.FileBean; import com.xx.xxviewlibrary.witget.model.FileBean;
import java.io.File; import java.io.File;
...@@ -41,6 +46,7 @@ import me.goldze.mvvmhabit.binding.command.BindingAction; ...@@ -41,6 +46,7 @@ import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand; import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.http.ApiDisposableObserver; import me.goldze.mvvmhabit.http.ApiDisposableObserver;
import me.goldze.mvvmhabit.utils.RxUtils; import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.StringUtils;
import me.goldze.mvvmhabit.utils.ToastUtils; import me.goldze.mvvmhabit.utils.ToastUtils;
public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> { public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> {
...@@ -51,6 +57,8 @@ public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> { ...@@ -51,6 +57,8 @@ public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> {
public UserBean user; public UserBean user;
public MerchantEnterRequst.MerchantInfo merchantInfo; public MerchantEnterRequst.MerchantInfo merchantInfo;
public ObservableField<String> supervisors=new ObservableField<>("");
public MutableLiveData<MerchantBean> merchantInfos=new MutableLiveData<>(); public MutableLiveData<MerchantBean> merchantInfos=new MutableLiveData<>();
...@@ -231,6 +239,9 @@ public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> { ...@@ -231,6 +239,9 @@ public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> {
merchantInfo.setMerchantInfo(resultBean); merchantInfo.setMerchantInfo(resultBean);
merchantInfos.postValue(resultBean); merchantInfos.postValue(resultBean);
adapter.mList=merchantInfo.reBrankbody(resultBean.getBrandAuthorizationList()); adapter.mList=merchantInfo.reBrankbody(resultBean.getBrandAuthorizationList());
supervisors.set( StringUtils.join(resultBean.getSupervisorsUserInfoList(),",",supervisorsUserInfo -> supervisorsUserInfo.getNickName()));
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }
...@@ -243,4 +254,19 @@ public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> { ...@@ -243,4 +254,19 @@ public class MerchantInfoViewModel extends BaseViewModel<MerchantEnterRequst> {
} }
public void bigPic(View view)
{
XxUploudPic uploudPic= (XxUploudPic) view;
List<FileBean> mlist=new ArrayList();
mlist.add(uploudPic.getUrl());
StfalconImageViewer sv= new StfalconImageViewer.Builder<FileBean>(view.getContext(), mlist, new ImageLoader<FileBean>() {
@Override
public void loadImage(ImageView imageView, FileBean image) {
Glide.with(view.getContext()).load(image.getPath()).into(imageView);
}
}).allowSwipeToDismiss(true).withStartPosition(0).show();
}
} }
...@@ -2,13 +2,19 @@ package com.xx.merchanthbh.ui.mine; ...@@ -2,13 +2,19 @@ package com.xx.merchanthbh.ui.mine;
import static com.xx.merchanthbh.utils.RetrofitClient.baseImgUrl; import static com.xx.merchanthbh.utils.RetrofitClient.baseImgUrl;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
...@@ -54,8 +60,6 @@ public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewMode ...@@ -54,8 +60,6 @@ public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewMode
((MineViewModel) viewModel).refreshNickName(); ((MineViewModel) viewModel).refreshNickName();
/*控制台拿到了图片路径了*/ /*控制台拿到了图片路径了*/
/*如果图片有刷新就会进行更新*/ /*如果图片有刷新就会进行更新*/
viewModel.getAvatarImageUrl().observe(this, new Observer<String>() { viewModel.getAvatarImageUrl().observe(this, new Observer<String>() {
@Override @Override
public void onChanged(String imageUrl) { public void onChanged(String imageUrl) {
...@@ -89,5 +93,18 @@ public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewMode ...@@ -89,5 +93,18 @@ public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewMode
} }
}); });
viewModel.openInstall.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
if ("1".equals(s))
{
var packageURI = Uri.parse("package:"+getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
startActivityForResult(intent, 1002);
}
}
});
} }
} }
\ No newline at end of file
...@@ -6,6 +6,7 @@ import android.content.Context; ...@@ -6,6 +6,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
...@@ -27,6 +28,8 @@ import com.xx.merchanthbh.ui.order.OrderDetailViewModel; ...@@ -27,6 +28,8 @@ import com.xx.merchanthbh.ui.order.OrderDetailViewModel;
import com.xx.merchanthbh.ui.phone.PhoneActivity; import com.xx.merchanthbh.ui.phone.PhoneActivity;
import com.xx.merchanthbh.ui.pwd.PwdActivity; import com.xx.merchanthbh.ui.pwd.PwdActivity;
import com.xx.merchanthbh.ui.userinfo.UserInfoActivity; import com.xx.merchanthbh.ui.userinfo.UserInfoActivity;
import com.xx.merchanthbh.ui.web.CommWabActivity;
import com.xx.merchanthbh.utils.RetrofitClient;
import com.xx.xxviewlibrary.base.AppManager; import com.xx.xxviewlibrary.base.AppManager;
import com.xx.xxviewlibrary.comm.CommTextDialog; import com.xx.xxviewlibrary.comm.CommTextDialog;
import com.xx.xxviewlibrary.comm.RefuseDialogBean; import com.xx.xxviewlibrary.comm.RefuseDialogBean;
...@@ -63,6 +66,9 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -63,6 +66,9 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
//版本号 //版本号
public ObservableField<String> versionName = new ObservableField<>(""); public ObservableField<String> versionName = new ObservableField<>("");
public MutableLiveData<String> openInstall=new MutableLiveData<>("");
public MineViewModel(@NonNull Application application) { public MineViewModel(@NonNull Application application) {
super(application); super(application);
model=new MineRequest(); model=new MineRequest();
...@@ -123,8 +129,14 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -123,8 +129,14 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
} }
/**
* 获取最新APK版本号
* @param view
*/
public void checkVersion(View view) public void checkVersion(View view)
{ {
model.checkVersion().compose(RxUtils.schedulersTransformer()) //线程调度 model.checkVersion().compose(RxUtils.schedulersTransformer()) //线程调度
.doOnSubscribe(MineViewModel.this) .doOnSubscribe(MineViewModel.this)
.doOnSubscribe(new Consumer<Disposable>() { .doOnSubscribe(new Consumer<Disposable>() {
...@@ -135,7 +147,7 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -135,7 +147,7 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
@Override @Override
public void onSuccess(VersionBean resultBean) { public void onSuccess(VersionBean resultBean) {
/*if (CommUtilsKt.checkVersionUpdata(CommUtilsKt.getVersion(view.getContext()),resultBean.getAppVersion())) if (CommUtilsKt.checkVersionUpdata(CommUtilsKt.getVersion(view.getContext()),resultBean.getAppVersion()))
{ {
...@@ -144,22 +156,43 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -144,22 +156,43 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
{ {
showCommTextDialog(new RefuseDialogBean("是否前往更新", "确定", "取消"), new CommTextDialog.onAcceptCallBack() { showCommTextDialog(new RefuseDialogBean("是否前往更新", "确定", "取消"), new CommTextDialog.onAcceptCallBack() {
@Override @Override
public void acceptBack() { public void refuseBack() {
updataApk(resultBean.getVersionFile());
} }
@Override @Override
public void refuseBack() { public void acceptBack() {
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) { // Always true pre-M
rxPermissions
.request(Manifest.permission.REQUEST_INSTALL_PACKAGES)
.subscribe(granteds -> {
if (granteds) { // Always true pre-M
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/")));
} else {
ToastUtils.showShort("请允许安装外部来源应用");
openInstall.postValue("1");
} }
}); });
} else {
ToastUtils.showShort("请开启文件相关权限");
} }
});
}else { }
ToastUtils.showShort("版本已是最新!"); });
}*/ }else{
showCommTextDialog(new RefuseDialogBean("请前往更新", "确定",""), new CommTextDialog.onAcceptCallBack() {
@Override
public void refuseBack() {
}
showCommTextDialog(new RefuseDialogBean("是否前往更新", "确定", "取消"), new CommTextDialog.onAcceptCallBack() {
@Override @Override
public void acceptBack() { public void acceptBack() {
...@@ -167,27 +200,33 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -167,27 +200,33 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE) .request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> { .subscribe(granted -> {
if (granted) { // Always true pre-M if (granted) { // Always true pre-M
updataApk(view.getContext(),resultBean.getVersionFile(),view.getContext().getFilesDir().getPath()+ resultBean.getVersionFile().substring( rxPermissions
.request(Manifest.permission.REQUEST_INSTALL_PACKAGES)
.subscribe(granteds -> {
if (granteds) { // Always true pre-M
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/"))); resultBean.getVersionFile().lastIndexOf("/")));
} else { } else {
//跳转到开启apk安装权限开启的界面,让用户手动打开 ToastUtils.showShort("请允许安装外部来源应用");
/* Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,Uri.parse("package:" +view.getContext().getPackageName())); openInstall.postValue("1");
view.getContext().intent*/
/*Uri packageURI = Uri.parse("package:"+view.getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
view.getContext().startActivityForResult(intent, INSTALL_PERMISS_CODE);*/
} }
}); });
} else {
ToastUtils.showShort("请开启文件相关权限");
} }
});
@Override
public void refuseBack() {
} }
}); });
} }
}else {
ToastUtils.showShort("版本已是最新!");
}
}
@Override @Override
public void onError(String Error) { public void onError(String Error) {
...@@ -196,6 +235,12 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -196,6 +235,12 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
} }
/**
* 下载APK
* @param context
* @param url 下载地址
* @param name 文件名字
*/
public void updataApk(Context context,String url,String name) public void updataApk(Context context,String url,String name)
{ {
showDialog(); showDialog();
...@@ -226,6 +271,7 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -226,6 +271,7 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
}); });
} }
//跳转安装APP
private void installApk(Context context, String path) { private void installApk(Context context, String path) {
Intent intent = new Intent(Intent.ACTION_VIEW); Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
...@@ -240,4 +286,16 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -240,4 +286,16 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
context.startActivity(intent); context.startActivity(intent);
} }
public void goProtocol(View view)
{
if (StaticData.Protocols.size()>=3)
{
Bundle bundle= new Bundle();
bundle.putString("title", "隐私条款");
bundle.putString("URL", RetrofitClient.baseH5Url + StaticData.Protocols.get(2));
startActivity(CommWabActivity.class, bundle);
}
}
} }
\ No newline at end of file
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
ed_title='@{@string/quality_person}' ed_title='@{@string/quality_person}'
app:content_type="1" app:content_type="1"
app:necessary="false" app:necessary="false"
ed_content="@={viewModel.merchantInfo.responsiblePerson}" ed_content="@={viewModel.supervisors}"
/> />
<com.xx.xxviewlibrary.witget.XxFormEdit <com.xx.xxviewlibrary.witget.XxFormEdit
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -241,6 +241,7 @@ ...@@ -241,6 +241,7 @@
android:layout_width="106dp" android:layout_width="106dp"
android:layout_height="80dp" android:layout_height="80dp"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
android:onClick="@{viewModel.bigPic}"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
pic_url="@{viewModel.merchantInfo.businessLicense}" pic_url="@{viewModel.merchantInfo.businessLicense}"
...@@ -283,6 +284,7 @@ ...@@ -283,6 +284,7 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
android:onClick="@{viewModel.bigPic}"
pic_url="@{viewModel.merchantInfo.operatingPermit}" pic_url="@{viewModel.merchantInfo.operatingPermit}"
android:id="@+id/xup_frm_licence" android:id="@+id/xup_frm_licence"
android:layout_marginLeft="129dp" android:layout_marginLeft="129dp"
......
...@@ -249,7 +249,7 @@ ...@@ -249,7 +249,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="64dp" android:layout_height="64dp"
android:onClick="@{mineViewModel.goProtocol}"
android:paddingLeft="13dp" android:paddingLeft="13dp"
android:paddingRight="13dp"> android:paddingRight="13dp">
......
...@@ -173,14 +173,7 @@ ...@@ -173,14 +173,7 @@
android:text="店铺logo" android:text="店铺logo"
android:id="@+id/tv_frm_title_logo" android:id="@+id/tv_frm_title_logo"
android:textSize="16sp"/> android:textSize="16sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/xx_text_red"
app:layout_constraintTop_toTopOf="@+id/tv_frm_title_logo"
app:layout_constraintLeft_toRightOf="@+id/tv_frm_title_logo"
android:textSize="16sp"
android:text="*"/>
<com.xx.xxviewlibrary.witget.XxUploudPic <com.xx.xxviewlibrary.witget.XxUploudPic
android:layout_width="106dp" android:layout_width="106dp"
......
...@@ -177,6 +177,16 @@ ...@@ -177,6 +177,16 @@
<activity android:name=".ui.prize.PrizeActivity" <activity android:name=".ui.prize.PrizeActivity"
android:exported="true"> android:exported="true">
</activity> </activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.xx.hbhbcompany.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application> </application>
</manifest> </manifest>
\ No newline at end of file
package com.xx.hbhbcompany.data.http package com.xx.hbhbcompany.data.http
import android.util.Log
import com.xx.xxviewlibrary.model.DictBean import com.xx.xxviewlibrary.model.DictBean
import com.xx.hbhbcompany.data.http.respons.Filebean import com.xx.hbhbcompany.data.http.respons.Filebean
import com.xx.hbhbcompany.utils.RetrofitClient import com.xx.hbhbcompany.utils.RetrofitClient
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.schedulers.Schedulers
import me.goldze.mvvmhabit.base.BaseModel import me.goldze.mvvmhabit.base.BaseModel
import me.goldze.mvvmhabit.http.BaseResponse import me.goldze.mvvmhabit.http.BaseResponse
import okhttp3.MediaType import okhttp3.MediaType
import okhttp3.MultipartBody import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import okhttp3.ResponseBody
import java.io.File import java.io.File
import java.io.FileOutputStream
import java.io.IOException
open class BaseRespons: BaseModel() { open class BaseRespons: BaseModel() {
...@@ -55,6 +61,45 @@ open class BaseRespons: BaseModel() { ...@@ -55,6 +61,45 @@ open class BaseRespons: BaseModel() {
) )
} }
//下载文件
fun downFile(url:String,name:String):Observable<ResponseBody>
{
Log.e("路径",name);
return apiService.download(url).subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()).doOnNext { body -> saveFile(body,
name) }.observeOn(AndroidSchedulers.mainThread())
}
//保存文件
open fun saveFile(body: ResponseBody, writeUrl: String) {
val buf = ByteArray(2048)
var len: Int
try {
val file = File(writeUrl)
val fileBasePath = writeUrl.substring(0, writeUrl.lastIndexOf("/"))
val filePath = File(fileBasePath)
//创建目录
if (!filePath.exists()) {
filePath.mkdirs()
}
if (!file.exists()) {
file.createNewFile()
}
val fos = FileOutputStream(file)
val secInputstream = body.byteStream()
while (secInputstream.read(buf).also { len = it } != -1) {
fos.write(buf, 0, len)
}
secInputstream.close()
fos.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
} }
\ No newline at end of file
...@@ -46,5 +46,12 @@ class LoginRequest: BaseRespons() { ...@@ -46,5 +46,12 @@ class LoginRequest: BaseRespons() {
*/ */
class LoginRequestBody(var phone: String, var password: String,var userType:String ) class LoginRequestBody(var phone: String, var password: String,var userType:String )
/**
* 获取协议内容
*/
fun getProtocols(): Observable<BaseResponse<List<String>>>
{
return apiService.getProtocols(ApiParams<Array<String>>().setParams(arrayOf("1","2","3","4","5")))
}
} }
\ No newline at end of file
package com.xx.hbhbcompany.data.http.requst; package com.xx.hbhbcompany.data.http.requst;
import com.xx.hbhbcompany.data.http.BaseRespons; import com.xx.hbhbcompany.data.http.BaseRespons;
import com.xx.xxviewlibrary.model.VersionBean;
import com.xx.xxviewlibrary.model.VersionBody;
import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Observable;
import me.goldze.mvvmhabit.http.ApiParams;
import me.goldze.mvvmhabit.http.BaseResponse; import me.goldze.mvvmhabit.http.BaseResponse;
public class MineRequest extends BaseRespons { public class MineRequest extends BaseRespons {
public Observable<BaseResponse<VersionBean>> checkVersion()
{
return getApiService().getLineVersion(new ApiParams<VersionBody>().setParams(
new VersionBody("1","2")
));
}
} }
...@@ -7,4 +7,11 @@ class AppealListBean(var appealNumber:String, var feedbackPerson:String , ...@@ -7,4 +7,11 @@ class AppealListBean(var appealNumber:String, var feedbackPerson:String ,
var appealStatus:String,//诉求状态 var appealStatus:String,//诉求状态
var businessId:String, var businessId:String,
var merchantName:String, var merchantName:String,
var allocations:List<ocations>
) )
{
data class ocations(var dept:UserBean.DeptBean)
{}
}
...@@ -21,6 +21,6 @@ data class UserBean(var userId:Int, ...@@ -21,6 +21,6 @@ data class UserBean(var userId:Int,
var roleName:String var roleName:String
) )
data class DeptBean( data class DeptBean(
var deptName:String var deptName:String,var deptId:String
) )
} }
\ No newline at end of file
...@@ -76,4 +76,15 @@ object StaticData { ...@@ -76,4 +76,15 @@ object StaticData {
* 订单详情-状态位 订单状态 1-待付款 2-已完成 3-已关闭 * 订单详情-状态位 订单状态 1-待付款 2-已完成 3-已关闭
*/ */
lateinit var filePath: String lateinit var filePath: String
/**
5 用户协议
4 积分说明
3 隐私条款
2 服务条款
1 会员体系
*/
@JvmField
var Protocols:List<String> =ArrayList();
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.xx.hbhbcompany.ui.appeallist ...@@ -2,6 +2,7 @@ package com.xx.hbhbcompany.ui.appeallist
import android.app.ActionBar.LayoutParams import android.app.ActionBar.LayoutParams
import android.content.Context import android.content.Context
import android.content.Intent
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
...@@ -11,13 +12,17 @@ import com.stfalcon.imageviewer.StfalconImageViewer ...@@ -11,13 +12,17 @@ import com.stfalcon.imageviewer.StfalconImageViewer
import com.stfalcon.imageviewer.loader.ImageLoader import com.stfalcon.imageviewer.loader.ImageLoader
import com.xx.hbhbcompany.R import com.xx.hbhbcompany.R
import com.xx.hbhbcompany.data.http.respons.AppealListBean import com.xx.hbhbcompany.data.http.respons.AppealListBean
import com.xx.hbhbcompany.data.local.LocalData
import com.xx.hbhbcompany.databinding.ItemAppealListBinding import com.xx.hbhbcompany.databinding.ItemAppealListBinding
import com.xx.hbhbcompany.ui.appeal.AppealAllocationActivity
import com.xx.xxviewlibrary.base.xxBaseRecyclerViewAdapter import com.xx.xxviewlibrary.base.xxBaseRecyclerViewAdapter
import com.xx.xxviewlibrary.comm.CommTextDialog import com.xx.xxviewlibrary.comm.CommTextDialog
import com.xx.xxviewlibrary.comm.RefuseDialogBean import com.xx.xxviewlibrary.comm.RefuseDialogBean
import me.jessyan.autosize.utils.AutoSizeUtils import me.jessyan.autosize.utils.AutoSizeUtils
class AppealListAdapter(context:Context,val viewModel: AppealListViewModel): xxBaseRecyclerViewAdapter<ItemAppealListBinding, AppealListBean>(context) { class AppealListAdapter(context:Context,val viewModel: AppealListViewModel): xxBaseRecyclerViewAdapter<ItemAppealListBinding, AppealListBean>(context) {
var deptId=LocalData.getUser().deptId;
override fun initLayout(): Int { override fun initLayout(): Int {
return R.layout.item_appeal_list return R.layout.item_appeal_list
} }
...@@ -27,25 +32,53 @@ class AppealListAdapter(context:Context,val viewModel: AppealListViewModel): xxB ...@@ -27,25 +32,53 @@ class AppealListAdapter(context:Context,val viewModel: AppealListViewModel): xxB
dataBind?.numTitle="诉求单号:" dataBind?.numTitle="诉求单号:"
dataBind?.btnIalBack?.visibility= View.GONE dataBind?.btnIalBack?.visibility= View.GONE
when (data?.appealStatus) { when (data?.appealStatus) {
//已完成
"COMPLETED" -> { "COMPLETED" -> {
dataBind?.btnIalAllocation?.visibility = View.GONE dataBind?.btnIalAllocation?.visibility = View.GONE
dataBind?.btnIalAllocationAgain?.visibility = View.GONE dataBind?.btnIalAllocationAgain?.visibility = View.GONE
dataBind?.btnIalFinish?.visibility = View.GONE dataBind?.btnIalFinish?.visibility = View.GONE
dataBind?.btnIalDelete?.visibility=View.GONE
dataBind?.btnIalEdit?.visibility=View.GONE
dataBind?.btnIalBack?.visibility=View.GONE
} }
//处理中
"PROCESSING" -> { "PROCESSING" -> {
dataBind?.btnIalAllocation?.visibility = View.GONE dataBind?.btnIalAllocation?.visibility = View.GONE
dataBind?.btnIalAllocationAgain?.visibility = View.VISIBLE dataBind?.btnIalAllocationAgain?.visibility = View.VISIBLE
dataBind?.btnIalFinish?.visibility = View.VISIBLE dataBind?.btnIalFinish?.visibility = View.VISIBLE
dataBind?.btnIalDelete?.visibility=View.GONE
dataBind?.btnIalEdit?.visibility=View.GONE
dataBind?.btnIalBack?.visibility=View.GONE
for (deptBean in data.allocations)
{
if (deptId.equals(deptBean.dept.deptId))
{
dataBind?.btnIalBack?.visibility=View.VISIBLE
}
} }
}
//待分配
"TO_BE_ALLOT" -> { "TO_BE_ALLOT" -> {
dataBind?.btnIalAllocation?.visibility = View.VISIBLE dataBind?.btnIalAllocation?.visibility = View.VISIBLE
dataBind?.btnIalAllocationAgain?.visibility = View.GONE dataBind?.btnIalAllocationAgain?.visibility = View.GONE
dataBind?.btnIalFinish?.visibility = View.GONE dataBind?.btnIalFinish?.visibility = View.GONE
dataBind?.btnIalDelete?.visibility=View.GONE
dataBind?.btnIalEdit?.visibility=View.GONE
dataBind?.btnIalBack?.visibility=View.GONE
}
//待提交
"TO_BE_SUBMITTED" ->{
dataBind?.btnIalAllocation?.visibility = View.GONE
dataBind?.btnIalDelete?.visibility=View.VISIBLE
dataBind?.btnIalEdit?.visibility=View.VISIBLE
dataBind?.btnIalAllocationAgain?.visibility = View.GONE
dataBind?.btnIalFinish?.visibility = View.GONE
dataBind?.btnIalBack?.visibility=View.GONE
} }
} }
...@@ -106,5 +139,27 @@ class AppealListAdapter(context:Context,val viewModel: AppealListViewModel): xxB ...@@ -106,5 +139,27 @@ class AppealListAdapter(context:Context,val viewModel: AppealListViewModel): xxB
textDialog.show() textDialog.show()
} }
//反馈
dataBind?.btnIalBack?.setOnClickListener()
{
val intent = Intent(mContext, AppealAllocationActivity::class.java)
mContext.startActivity(intent)
}
//编辑
dataBind?.btnIalEdit?.setOnClickListener()
{
val intent = Intent(mContext, AppealAllocationActivity::class.java)
mContext.startActivity(intent)
}
//删除
dataBind?.btnIalDelete?.setOnClickListener()
{
val intent = Intent(mContext, AppealAllocationActivity::class.java)
mContext.startActivity(intent)
}
} }
} }
\ No newline at end of file
...@@ -4,12 +4,16 @@ import android.os.Bundle ...@@ -4,12 +4,16 @@ import android.os.Bundle
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.text.Spanned import android.text.Spanned
import android.text.TextPaint import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan import android.text.style.ClickableSpan
import android.view.View import android.view.View
import com.xx.hbhbcompany.R import com.xx.hbhbcompany.R
import com.xx.hbhbcompany.BR import com.xx.hbhbcompany.BR
import com.xx.hbhbcompany.data.http.requst.LoginRequest import com.xx.hbhbcompany.data.http.requst.LoginRequest
import com.xx.hbhbcompany.data.staticdata.StaticData
import com.xx.hbhbcompany.databinding.ActivityLoginBinding import com.xx.hbhbcompany.databinding.ActivityLoginBinding
import com.xx.hbhbcompany.ui.web.CommWabActivity
import com.xx.hbhbcompany.utils.RetrofitClient
import me.goldze.mvvmhabit.base.BaseActivity import me.goldze.mvvmhabit.base.BaseActivity
class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() { class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() {
...@@ -28,6 +32,8 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() { ...@@ -28,6 +32,8 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() {
override fun initData() { override fun initData() {
super.initData() super.initData()
viewModel.getProtocols();
if (viewModel.isAgree) if (viewModel.isAgree)
{ {
binding.ivLoginAgreement.setImageDrawable(getDrawable(R.mipmap.login_icon_xuanze2)) binding.ivLoginAgreement.setImageDrawable(getDrawable(R.mipmap.login_icon_xuanze2))
...@@ -51,10 +57,17 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() { ...@@ -51,10 +57,17 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() {
var sp: SpannableStringBuilder = SpannableStringBuilder("我已阅读并同意《用户协议》、《隐私条款》") var sp: SpannableStringBuilder = SpannableStringBuilder("我已阅读并同意《用户协议》、《隐私条款》")
// sp.setSpan(ForegroundColorSpan(getColor(R.color.text_grey_blue)),7,20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) // sp.setSpan(ForegroundColorSpan(getColor(R.color.text_grey_blue)),7,20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
binding.tvLoginAgree.setMovementMethod(LinkMovementMethod.getInstance());
binding.tvLoginAgree.setHighlightColor(0)
sp.setSpan(object : ClickableSpan() { sp.setSpan(object : ClickableSpan() {
override fun onClick(view: View) { override fun onClick(view: View) {
if (StaticData.Protocols.size>=5)
{
var bundle:Bundle= Bundle();
bundle.putString("title", "用户协议")
bundle.putString("URL", RetrofitClient.baseH5Url + StaticData.Protocols.get(4))
startActivity(CommWabActivity::class.java, bundle)
}
} }
override fun updateDrawState(ds: TextPaint) { override fun updateDrawState(ds: TextPaint) {
...@@ -66,7 +79,13 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() { ...@@ -66,7 +79,13 @@ class LoginActivity() : BaseActivity<ActivityLoginBinding, LoginViewModel>() {
sp.setSpan(object : ClickableSpan() { sp.setSpan(object : ClickableSpan() {
override fun onClick(view: View) { override fun onClick(view: View) {
if (StaticData.Protocols.size>=3)
{
var bundle:Bundle= Bundle();
bundle.putString("title", "隐私条款")
bundle.putString("URL", RetrofitClient.baseH5Url + StaticData.Protocols.get(2))
startActivity(CommWabActivity::class.java, bundle)
}
} }
override fun updateDrawState(ds: TextPaint) { override fun updateDrawState(ds: TextPaint) {
......
...@@ -216,6 +216,33 @@ public class LoginViewModel extends BaseViewModel<LoginRequest> { ...@@ -216,6 +216,33 @@ public class LoginViewModel extends BaseViewModel<LoginRequest> {
}); });
/**
* 获取协议内容
*
*/
public void getProtocols()
{
model.getProtocols().compose(RxUtils.schedulersTransformer()) //线程调度
// .compose(RxUtils.exceptionTransformer()) // 网络错误的异常转换, 这里可以换成自己的ExceptionHandle
.doOnSubscribe(LoginViewModel.this)
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
}).subscribe(new ApiDisposableObserver<List<String>>() {
@Override
public void onSuccess(List<String> resultBean) {
StaticData.Protocols=resultBean;
}
@Override
public void onError(String Error) {
}
});
}
} }
...@@ -2,7 +2,10 @@ package com.xx.hbhbcompany.ui.mine; ...@@ -2,7 +2,10 @@ package com.xx.hbhbcompany.ui.mine;
import static com.xx.hbhbcompany.utils.RetrofitClient.baseImgUrl; import static com.xx.hbhbcompany.utils.RetrofitClient.baseImgUrl;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -27,7 +30,7 @@ import me.goldze.mvvmhabit.utils.StringUtils; ...@@ -27,7 +30,7 @@ import me.goldze.mvvmhabit.utils.StringUtils;
public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewModel> { public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewModel> {
@Override @Override
public int viewModelType() { public int viewModelType() {
return 1; return 0;
} }
@Override @Override
...@@ -68,6 +71,19 @@ public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewMode ...@@ -68,6 +71,19 @@ public class MineFragment extends BaseFragment<FragmentMineBinding, MineViewMode
} }
}); });
viewModel.openInstall.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
if ("1".equals(s))
{
var packageURI = Uri.parse("package:"+getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
startActivityForResult(intent, 1002);
}
}
});
} }
@Override @Override
......
package com.xx.hbhbcompany.ui.mine; package com.xx.hbhbcompany.ui.mine;
import android.Manifest;
import android.app.Application; import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.tbruyelle.rxpermissions3.RxPermissions;
import com.xx.hbhbcompany.data.http.requst.MineRequest; import com.xx.hbhbcompany.data.http.requst.MineRequest;
import com.xx.hbhbcompany.data.local.LocalData; import com.xx.hbhbcompany.data.local.LocalData;
import com.xx.hbhbcompany.data.staticdata.StaticData;
import com.xx.hbhbcompany.ui.bluetoooth.BluetoothActivity; import com.xx.hbhbcompany.ui.bluetoooth.BluetoothActivity;
import com.xx.hbhbcompany.ui.comment.MyCommentActivity; import com.xx.hbhbcompany.ui.comment.MyCommentActivity;
import com.xx.hbhbcompany.ui.login.LoginActivity; import com.xx.hbhbcompany.ui.login.LoginActivity;
import com.xx.hbhbcompany.ui.mylike.MylikeActivity; import com.xx.hbhbcompany.ui.mylike.MylikeActivity;
import com.xx.hbhbcompany.ui.order.OrderActivity; import com.xx.hbhbcompany.ui.order.OrderActivity;
import com.xx.hbhbcompany.ui.pwd.PwdActivity; import com.xx.hbhbcompany.ui.pwd.PwdActivity;
import com.xx.hbhbcompany.ui.web.CommWabActivity;
import com.xx.hbhbcompany.utils.RetrofitClient;
import com.xx.xxviewlibrary.base.AppManager; import com.xx.xxviewlibrary.base.AppManager;
import com.xx.xxviewlibrary.comm.CommTextDialog;
import com.xx.xxviewlibrary.comm.RefuseDialogBean;
import com.xx.xxviewlibrary.model.VersionBean;
import com.xx.xxviewlibrary.utils.CommUtilsKt;
import java.io.File;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseViewModel; import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction; import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand; import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.http.ApiDisposableObserver;
import me.goldze.mvvmhabit.http.cookie.store.PersistentCookieStore; import me.goldze.mvvmhabit.http.cookie.store.PersistentCookieStore;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.ToastUtils; import me.goldze.mvvmhabit.utils.ToastUtils;
import okhttp3.ResponseBody;
public class MineViewModel extends BaseViewModel<MineRequest> { public class MineViewModel extends BaseViewModel<MineRequest> {
RxPermissions rxPermissions;
//头像的绑定 //头像的绑定
private MutableLiveData<String> avatarImageUrl = new MutableLiveData<>(); private MutableLiveData<String> avatarImageUrl = new MutableLiveData<>();
//昵称的绑定 //昵称的绑定
...@@ -35,11 +61,12 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -35,11 +61,12 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
//职位的绑定 //职位的绑定
public ObservableField<String> roleName = new ObservableField<>(""); public ObservableField<String> roleName = new ObservableField<>("");
public MutableLiveData<String> openInstall=new MutableLiveData<>("");
public MineViewModel(@NonNull Application application) { public MineViewModel(@NonNull Application application) {
super(application); super(application);
}
}
public MineViewModel(@NonNull Application application, MineRequest model) { public MineViewModel(@NonNull Application application, MineRequest model) {
super(application, model); super(application, model);
} }
...@@ -107,4 +134,175 @@ public class MineViewModel extends BaseViewModel<MineRequest> { ...@@ -107,4 +134,175 @@ public class MineViewModel extends BaseViewModel<MineRequest> {
p.removeAllCookie(); p.removeAllCookie();
ToastUtils.showShort("清除缓存成功"); ToastUtils.showShort("清除缓存成功");
} }
/**
* 获取最新APK版本号
* @param view
*/
public void checkVersion(View view)
{
model.checkVersion().compose(RxUtils.schedulersTransformer()) //线程调度
.doOnSubscribe(MineViewModel.this)
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
}).subscribe(new ApiDisposableObserver<VersionBean>() {
@Override
public void onSuccess(VersionBean resultBean) {
if (CommUtilsKt.checkVersionUpdata(CommUtilsKt.getVersion(view.getContext()),resultBean.getAppVersion()))
{
//不强制
if (resultBean.getPushFlag().equals("0"))
{
showCommTextDialog(new RefuseDialogBean("是否前往更新", "确定", "取消"), new CommTextDialog.onAcceptCallBack() {
@Override
public void refuseBack() {
}
@Override
public void acceptBack() {
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) { // Always true pre-M
rxPermissions
.request(Manifest.permission.REQUEST_INSTALL_PACKAGES)
.subscribe(granteds -> {
if (granteds) { // Always true pre-M
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/")));
} else {
ToastUtils.showShort("请允许安装外部来源应用");
openInstall.postValue("1");
}
});
} else {
ToastUtils.showShort("请开启文件相关权限");
}
});
}
});
}else{
showCommTextDialog(new RefuseDialogBean("请前往更新", "确定",""), new CommTextDialog.onAcceptCallBack() {
@Override
public void refuseBack() {
}
@Override
public void acceptBack() {
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) { // Always true pre-M
rxPermissions
.request(Manifest.permission.REQUEST_INSTALL_PACKAGES)
.subscribe(granteds -> {
if (granteds) { // Always true pre-M
updataApk(view.getContext(), resultBean.getVersionFile(), view.getContext().getFilesDir().getPath() + resultBean.getVersionFile().substring(
resultBean.getVersionFile().lastIndexOf("/")));
} else {
ToastUtils.showShort("请允许安装外部来源应用");
openInstall.postValue("1");
}
});
} else {
ToastUtils.showShort("请开启文件相关权限");
}
});
}
});
}
}else {
ToastUtils.showShort("版本已是最新!");
}
}
@Override
public void onError(String Error) {
}
});
}
/**
* 下载APK
* @param context
* @param url 下载地址
* @param name 文件名字
*/
public void updataApk(Context context, String url, String name)
{
showDialog();
model.downFile(url,name).subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
Log.e("下载","onSubscribe");
}
@Override
public void onNext(@io.reactivex.rxjava3.annotations.NonNull ResponseBody responseBody) {
}
@Override
public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
ToastUtils.showShort("下载失败");
dismissDialog();
}
@Override
public void onComplete() {
Log.e("下载","onComplete");
dismissDialog();
ToastUtils.showShort("下载成功");
installApk(context,name);
}
});
}
//跳转安装APP
private void installApk(Context context, String path) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File file = new File(Uri.parse(path).getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri uri = FileProvider.getUriForFile(context, "com.xx.hbhbcompany.fileProvider", file);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
context.startActivity(intent);
}
public void goProtocol(View view)
{
if (StaticData.Protocols.size()>=3)
{
Bundle bundle= new Bundle();
bundle.putString("title", "隐私条款");
bundle.putString("URL", RetrofitClient.baseH5Url + StaticData.Protocols.get(2));
startActivity(CommWabActivity.class, bundle);
}
}
} }
...@@ -305,6 +305,7 @@ ...@@ -305,6 +305,7 @@
android:layout_height="64dp" android:layout_height="64dp"
android:background="@drawable/bg_top_radius_12" android:background="@drawable/bg_top_radius_12"
android:paddingLeft="13dp" android:paddingLeft="13dp"
android:onClick="@{mineViewModel.goProtocol}"
android:paddingTop="13dp" android:paddingTop="13dp"
android:paddingRight="13dp"> android:paddingRight="13dp">
...@@ -426,6 +427,7 @@ ...@@ -426,6 +427,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="64dp" android:layout_height="64dp"
android:onClick="@{mineViewModel.checkVersion}"
android:background="@drawable/bg_bottom_radius_12" android:background="@drawable/bg_bottom_radius_12"
android:padding="13dp"> android:padding="13dp">
......
...@@ -149,6 +149,30 @@ ...@@ -149,6 +149,30 @@
android:layout_marginLeft="13dp" android:layout_marginLeft="13dp"
style="@style/xxBtnStyle" style="@style/xxBtnStyle"
android:text="再分配"/> android:text="再分配"/>
<Button
android:layout_width="62dp"
android:layout_height="28dp"
android:layout_marginTop="21.5dp"
android:id="@+id/btn_ial_delete"
android:visibility="gone"
android:paddingLeft="13dp"
android:paddingRight="13dp"
android:layout_marginLeft="13dp"
style="@style/xxBtnStyle"
android:text="删除"/>
<Button
android:layout_width="62dp"
android:layout_height="28dp"
android:layout_marginTop="21.5dp"
android:id="@+id/btn_ial_edit"
android:visibility="gone"
android:paddingLeft="13dp"
android:paddingRight="13dp"
android:layout_marginLeft="13dp"
style="@style/xxBtnStyle"
android:text="编辑"/>
<Button <Button
android:layout_width="62dp" android:layout_width="62dp"
android:layout_height="28dp" android:layout_height="28dp"
...@@ -160,6 +184,8 @@ ...@@ -160,6 +184,8 @@
android:layout_marginLeft="13dp" android:layout_marginLeft="13dp"
style="@style/xxBtnStyle" style="@style/xxBtnStyle"
android:text="完成"/> android:text="完成"/>
</LinearLayout> </LinearLayout>
......
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="files_root"
path="Android/data/com.xxp.Lawsuit/" />
<external-path
name="external_storage_root"
path="." />
<external-path
name="camera_photos"
path="." />
<path>
<root-path name="files_apk"
path="/"/>
</path>
</paths>
\ No newline at end of file
...@@ -73,7 +73,7 @@ fun checkVersionUpdata(self:String , line:String):Boolean ...@@ -73,7 +73,7 @@ fun checkVersionUpdata(self:String , line:String):Boolean
for (i in 0 until 2) for (i in 0 until 2)
{ {
if (line.get(i) as Int > self.get(i) as Int) if (lines.get(i).toInt() > selfs.get(i).toInt())
{ {
return true return true
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment