Commit 09b7a290 authored by hywang's avatar hywang

1.增加登陆后提醒和意见反馈功能

2.修复一些修改没有deptid的bug
parent 1a3df678
......@@ -9,8 +9,8 @@ android {
applicationId "com.phlx.anchorcollect_p"
minSdkVersion 21
targetSdkVersion 29
versionCode 17
versionName "2.1.1"
versionCode 19
versionName "2.1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
......@@ -44,9 +44,9 @@ android {
// but continue the build even when errors are found:
abortOnError false
}
ndkVersion '22.1.7171670'
}
greendao {
......@@ -59,13 +59,13 @@ dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation files('libs\\uhf.jar')
implementation files('libs/uhf.jar')
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//EventBus's
implementation 'org.greenrobot:eventbus:3.2.0'
implementation 'org.greenrobot:greendao:3.2.2'
implementation 'org.greenrobot:greendao:3.3.0'
implementation 'io.github.yuweiguocn:GreenDaoUpgradeHelper:v2.2.1'
// TinyPinyin核心包,约80KB
implementation 'com.github.promeg:tinypinyin:2.0.3'
......
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -97,6 +97,11 @@
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.feedback.FeedbackActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" />
<service
......
......@@ -59,6 +59,12 @@ public class Configs {
public static final String SP_USER_PASSWORD = "sp_user_password";
public static final String SP_USER_EMAIL = "sp_user_email";
public static final String SP_FREQUENCY_CONFIG = "sp_frequency_config";
//版本号
public static final String SP_VERSION_NAME = "sp_version_name";
//意见反馈首页提示数量
public static final String SP_FEEDBACK_COUNT = "sp_feedback_count";
public static final String SP_USER_PHONE = "sp_user_phone";
public static final String SP_USER_UNIT = "sp_user_unit";
//选择养殖场
......
......@@ -10,6 +10,7 @@ import com.phlx.anchorcollect_p.entity.BreedingRecordDetailEntity;
import com.phlx.anchorcollect_p.entity.BreedingRecordEntity;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.DictEntity;
import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
......@@ -208,6 +209,11 @@ public class Repository extends BaseModel implements HttpDataSource, LocalDataSo
return mHttpDataSource.uploadErrorData(body);
}
@Override
public Observable<CollectResponse> uploadFeedback(RequestBody body) {
return mHttpDataSource.uploadFeedback(body);
}
/****************************************************************************/
@Override
......
......@@ -9,6 +9,7 @@ import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import com.phlx.anchorcollect_p.ui.bind.BindVM;
import com.phlx.anchorcollect_p.ui.feedback.FeedbackVM;
import com.phlx.anchorcollect_p.ui.fragment.vm.BasicsCollectVM;
import com.phlx.anchorcollect_p.ui.fragment.vm.BreedingRecordVM;
import com.phlx.anchorcollect_p.ui.fragment.vm.ImmunRecordVM;
......@@ -107,6 +108,8 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory {
return (T) new SettingVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(LabelChangeVM.class)) {
return (T) new LabelChangeVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(FeedbackVM.class)) {
return (T) new FeedbackVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(SyncVM.class)) {
return (T) new SyncVM(mApplication, repository);
......
......@@ -6,6 +6,7 @@ import com.phlx.anchorcollect_p.entity.BreedingRecordDetailEntity;
import com.phlx.anchorcollect_p.entity.BreedingRecordEntity;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.DictEntity;
import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
......@@ -251,6 +252,13 @@ public interface ApiService {
@POST("/api/error/add")
Observable<CollectResponse> uploadErrorData(@Body RequestBody body);
/**
* 上传-意见反馈
*/
@Headers({"Content-Type: application/json", "Accept: application/json"})
@POST("/api/feedback/add")
Observable<CollectResponse> uploadFeedback(@Body RequestBody body);
......
......@@ -6,6 +6,7 @@ import com.phlx.anchorcollect_p.entity.BreedingRecordDetailEntity;
import com.phlx.anchorcollect_p.entity.BreedingRecordEntity;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.DictEntity;
import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
......@@ -189,4 +190,9 @@ public interface HttpDataSource {
* 上传-错误记录
*/
Observable<CollectResponse> uploadErrorData(@Body RequestBody body);
/**
* 上传-意见反馈
*/
Observable<CollectResponse> uploadFeedback(@Body RequestBody body);
}
......@@ -6,6 +6,7 @@ import com.phlx.anchorcollect_p.entity.BreedingRecordDetailEntity;
import com.phlx.anchorcollect_p.entity.BreedingRecordEntity;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.DictEntity;
import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
......@@ -199,4 +200,9 @@ public class HttpDataSourceImpl implements HttpDataSource {
public Observable<CollectResponse> uploadErrorData(RequestBody body) {
return apiService.uploadErrorData(body);
}
@Override
public Observable<CollectResponse> uploadFeedback(RequestBody body) {
return apiService.uploadFeedback(body);
}
}
package com.phlx.anchorcollect_p.entity;
/**
* 意见反馈entity
*/
public class FeedbackEntity{
/** 主键 */
private Long id;
/** 内容 */
private String content;
/** 部门id */
private Long deptId;
private String deptName;
public FeedbackEntity() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
@Override
public String toString() {
return "FeedbackEntity{" +
"id=" + id +
", content='" + content + '\'' +
", deptId=" + deptId +
", deptName='" + deptName + '\'' +
'}';
}
}
......@@ -53,7 +53,7 @@ public class RetrofitClient {
"serve.xlglzy.org.cn"//正式
// "39.101.170.186"//阿里云测试
// "192.168.8.135"//董
// "192.168.43.154"//张敏
// "192.168.5.99"//张敏
;
public static String port =
""//正式
......
package com.phlx.anchorcollect_p.ui.feedback;
import android.os.Bundle;
import androidx.lifecycle.ViewModelProviders;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.VMFactory;
import com.phlx.anchorcollect_p.databinding.ActivityFeedbackBinding;
import com.phlx.anchorcollect_p.ui.base.BaseActivity;
import com.phlx.anchorcollect_p.ui.info.CattleVM;
import me.tatarka.bindingcollectionadapter2.BR;
/**
* 意见反馈
*/
public class FeedbackActivity extends BaseActivity<ActivityFeedbackBinding, FeedbackVM> {
@Override
public int initContentView(Bundle savedInstanceState) {
return R.layout.activity_feedback;
}
@Override
public int initVariableId() {
return BR.viewModel;
}
@Override
public void initParam() {
super.initParam();
}
@Override
public FeedbackVM initViewModel() {
VMFactory factory = VMFactory.getInstance(getApplication());
return ViewModelProviders.of(this, factory).get(FeedbackVM.class);
}
@Override
public void initData() {
super.initData();
//初始化标题
viewModel.initToolbar();
}
@Override
public void initViewObservable() {
super.initViewObservable();
}
}
package com.phlx.anchorcollect_p.ui.feedback;
import android.app.Application;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableField;
import com.google.gson.Gson;
import com.phlx.anchorcollect_p.Configs;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.Repository;
import com.phlx.anchorcollect_p.data.VMFactory;
import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.LoginData;
import com.phlx.anchorcollect_p.entity.UserRoleEntity;
import com.phlx.anchorcollect_p.params.CollectResponse;
import com.phlx.anchorcollect_p.ui.base.BackBarVM;
import com.phlx.anchorcollect_p.ui.splash.SplashActivity;
import java.util.List;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.StringUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
import okhttp3.MediaType;
import okhttp3.RequestBody;
/**
* 意见反馈vm
*/
public class FeedbackVM extends BackBarVM<Repository> {
public ObservableField<String> feedContent = new ObservableField<>("");
public FeedbackVM(@NonNull Application application, Repository model) {
super(application, model);
}
public void initToolbar() {
setBackTitleText("意见反馈");
setBackRightTextVisible(View.VISIBLE);
setBackRightText(getApplication().getResources().getString(R.string.submit));
}
@Override
protected void backRightTextOnClick() {
super.backRightTextOnClick();
if(StringUtils.isEmpty(feedContent.get())){
ToastUtils.showShort("请输入反馈内容");
return;
} if(feedContent.get().length()>500){
ToastUtils.showShort("反馈内容过长,最多500字");
return;
}
uplaodFeedback();
}
private void uplaodFeedback(){
FeedbackEntity entity = new FeedbackEntity();
entity.setContent(feedContent.get());
RequestBody body = RequestBody.create(MediaType.parse("application/json"), new Gson().toJson(entity));
addSubscribe(model.uploadFeedback(body)
.compose(RxUtils.bindToLifecycle(getLifecycleProvider()))
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
.doOnSubscribe(disposable -> showDialog("正在上传意见反馈..."))
.subscribe((Consumer<CollectResponse>) response -> {
dismissDialog();
KLog.e("uplaodFeedback", response.toString());
if (response.getCode() == 0) {
ToastUtils.showShort("上传意见反馈成功");
finish();
} else {
ToastUtils.showShort("服务器:" + response.getMsg());
}
}, (Consumer<ResponseThrowable>) throwable -> {
dismissDialog();
ToastUtils.showShort(throwable.message);
})
);
}
}
......@@ -501,7 +501,6 @@ public class BreedingRecordVM extends BaseViewModel<Repository> {
BreedingRecordEntity breedingRecordEntity = gson.fromJson(jsonObject, BreedingRecordEntity.class);
if (tempEntity.getUnid() == null) {//新增
breedingRecordEntity.setUnid(IdUtil.createSnowflake(3, 1).nextId());
breedingRecordEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
breedingRecordEntity.setCattleresumeId(Configs.tempUnid);
dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
breedingRecordEntity.setCreateTime(dateFormat.format(new Date()));
......@@ -517,6 +516,7 @@ public class BreedingRecordVM extends BaseViewModel<Repository> {
breedingRecordEntity.setUpdateTime(dateFormat.format(new Date()));
breedingRecordEntity.setUpdateBy(SPUtils.getInstance().getString(Configs.SP_LOGIN_NAME));
}
breedingRecordEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
breedingRecordEntity.setUploadStatus("0");
tempDetailEntity.setfUnid(breedingRecordEntity.getUnid());//子表 外键
......
......@@ -259,11 +259,11 @@ public class ImmunRecordVM extends BaseViewModel<Repository> {
} else {//新增
uuid = IdUtil.createSnowflake(3, 1).nextId();
immuneBatchEntity.setUnid(uuid);
immuneBatchEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
immuneBatchEntity.setCreateBy(SPUtils.getInstance().getString(Configs.SP_LOGIN_NAME));
immuneBatchEntity.setCreateTime(dateFormat.format(new Date()));
}
immuneBatchEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
immuneBatchEntity.setUploadStatus("0");
immuneBatchEntity.setRemark(remarkParamEntity.getContent());
......
......@@ -254,7 +254,6 @@ public class MedicalRecordVM extends BaseViewModel<Repository> {
uuid = IdUtil.createSnowflake(3, 1).nextId();
medicalRecordEntity.setUnid(uuid);
medicalRecordEntity.setCattleresumeId(Configs.tempUnid);
medicalRecordEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
medicalRecordEntity.setCreateBy(SPUtils.getInstance().getString(Configs.SP_LOGIN_NAME));
medicalRecordEntity.setCreateTime(dateFormat.format(new Date()));
......@@ -266,6 +265,7 @@ public class MedicalRecordVM extends BaseViewModel<Repository> {
//清除选中unid
Configs.resumeId = null;
}
medicalRecordEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
medicalRecordEntity.setRemark(remarkParamEntity.getContent());
medicalRecordEntity.setUploadStatus("0");
......
......@@ -264,6 +264,9 @@ public class PerformanceVM extends BaseViewModel<Repository> {
isModify = true;
Configs.resumeId = result.get(0).getUnid();
performanceEntity.setUnid(result.get(0).getUnid());
performanceEntity.setDeptId(result.get(0).getDeptId());
performanceEntity.setCreateBy(result.get(0).getCreateBy());
performanceEntity.setCreateTime(result.get(0).getCreateTime());
}
savePerformance(performanceEntity);
ToastUtils.showShort("查询-性能测定月龄数据-成功!");
......@@ -284,9 +287,7 @@ public class PerformanceVM extends BaseViewModel<Repository> {
uuid = IdUtil.createSnowflake(3, 1).nextId();
performanceEntity.setUnid(uuid);
performanceEntity.setCattleresumeId(Configs.tempUnid);
performanceEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
performanceEntity.setCreateBy(SPUtils.getInstance().getString(Configs.SP_LOGIN_NAME));
performanceEntity.setCreateTime(dateFormat.format(new Date()));
} else {
performanceEntity.setUnid(Configs.resumeId);
......@@ -297,6 +298,7 @@ public class PerformanceVM extends BaseViewModel<Repository> {
//清除选中unid
Configs.resumeId = null;
}
performanceEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
performanceEntity.setRemark(remarkParamEntity.getContent());
performanceEntity.setUploadStatus("0");
......
......@@ -47,6 +47,7 @@ import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.StringUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class LoginVM extends BaseViewModel<Repository> {
......@@ -80,6 +81,7 @@ public class LoginVM extends BaseViewModel<Repository> {
userName.set(model.getUserName());
password.set(model.getPassword());
// userName.set("13614799150");
// userName.set("15047917803");
// password.set("Tpsq7803*");
......@@ -172,6 +174,13 @@ public class LoginVM extends BaseViewModel<Repository> {
SPUtils.getInstance().put(Configs.SP_DEPT_ID, response.getData().getUser().getDeptId());
SPUtils.getInstance().put(Configs.SP_DEPT_NAME, response.getData().getUser().getDept().getDeptName());
//意见反馈存版本号,如果没有保存或者有变化 提醒数量清零
if(StringUtils.isEmpty(SPUtils.getInstance().getString(Configs.SP_VERSION_NAME))
|| !ApkUtil.getVersionName(getApplication()).equals(SPUtils.getInstance().getString(Configs.SP_VERSION_NAME))){
SPUtils.getInstance().put(Configs.SP_FEEDBACK_COUNT, 0);
}
SPUtils.getInstance().put(Configs.SP_VERSION_NAME, ApkUtil.getVersionName(getApplication()));
String roleIds = "";
List<UserRoleEntity> roles = response.getData().getUser().getRoles();
for (UserRoleEntity userRoleEntity : roles) {
......
......@@ -21,6 +21,7 @@ import com.phlx.anchorcollect_p.databinding.ActivityMainBinding;
import com.phlx.anchorcollect_p.rfid.ConnectManger;
import com.phlx.anchorcollect_p.rfid.ModuleManager;
import com.phlx.anchorcollect_p.ui.base.BaseActivity;
import com.phlx.anchorcollect_p.ui.feedback.FeedbackActivity;
import com.phlx.anchorcollect_p.ui.fragment.BasicsCollectFragment;
import com.phlx.anchorcollect_p.ui.fragment.BreedingRecordFragment;
import com.phlx.anchorcollect_p.ui.fragment.ImmunRecordFragment;
......@@ -30,6 +31,7 @@ import com.phlx.anchorcollect_p.ui.fragment.WeightManFragment;
import com.uhf.structures.DynamicQParams;
import com.uhf.structures.InventoryParams;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
......@@ -134,7 +136,7 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
initRFID();
}
private void initRFID(){
private void initRFID() {
connectManger = ConnectManger.from();
//默认设置R2000连接
......@@ -146,7 +148,7 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
ModuleManager.powerOff();
App.getInstance().getLinkage().setRFConnectMode(0);
App.getInstance().getLinkage().setRFModuleType(3);//R2000 0,R2000plus 3
App.getInstance().getLinkage().setRFModuleType(0);//R2000 0,R2000plus 3
if (ModuleManager.openCom() != 0 || ModuleManager.powerOn() != 0) {
new MaterialDialog.Builder(this).title("系统提示").content("串口打开失败,无法工作,请检查设备").cancelable(false).canceledOnTouchOutside(false).positiveText("退出").onAny(new MaterialDialog.SingleButtonCallback() {
@Override
......@@ -171,6 +173,8 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
App.getInstance().getLinkage().Radio_SetInventoryParams(inventoryParams);
setAlgorithm();
if (Configs.isOnLine)
showTips();
}
/**
......@@ -198,11 +202,36 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
ToastUtils.showShort("设置动态算法失败");
}
// ToastUtils.showShort("获取动态算法成功");
}else {
} else {
ToastUtils.showShort("获取动态算法失败");
}
}
private void showTips() {
int showTipsCount = SPUtils.getInstance().getInt(Configs.SP_FEEDBACK_COUNT);
if (showTipsCount < 3) {
new MaterialDialog.Builder(this).title("各位平台用户")
.content(" 本平台使用各用户提供的种畜场地址、联系人和联系电话等信息建立账号。本平台将竭力保障各用户信息安全,但由于以上信息的使用必然在个人信息泄露风险。现将该风险进行告知,如有异议请通过反馈进行告知修改,如同意继续使用此信息请点击确认。")
.cancelable(false)
.canceledOnTouchOutside(false)
.positiveText("确定")
.negativeText("反馈")
.onAny(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (which == DialogAction.POSITIVE) {
dialog.dismiss();
} else if (which == DialogAction.NEGATIVE) {
startActivity(FeedbackActivity.class);
}
}
})
.show();
showTipsCount++;
SPUtils.getInstance().put(Configs.SP_FEEDBACK_COUNT, showTipsCount);
}
}
@Override
public void initViewObservable() {
super.initViewObservable();
......@@ -277,7 +306,7 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
case 2:
transaction.show(_weightManFragment);
binding.tvTab2.setTextColor(getResources().getColor(R.color.white));
binding.tvTab2.setCompoundDrawables(null, drwWeightManOn,null, null);
binding.tvTab2.setCompoundDrawables(null, drwWeightManOn, null, null);
break;
case 3:
transaction.show(_medicalRecordFragment);
......
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#CCCCCC" /> <!-- 设置外框的颜色和宽度 -->
<solid android:color="#FFFFFF" /> <!-- 设置填充颜色 -->
<padding
android:left="5dp"
android:right="5dp"
android:top="5dp"
android:bottom="5dp" /> <!-- 设置内边距 -->
</shape>
\ No newline at end of file
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools"
xmlns:binding="http://schemas.android.com/apk/res-auto"
app:ignore="NamespaceTypo">
<data>
<import type="me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter" />
<import type="me.goldze.mvvmhabit.binding.viewadapter.recyclerview.LayoutManagers" />
<variable
name="viewModel"
type="com.phlx.anchorcollect_p.ui.feedback.FeedbackVM" />
<variable
name="adapter"
type="BindingRecyclerViewAdapter" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:orientation="vertical">
<include
android:id="@+id/include"
layout="@layout/layout_back_bar"
binding:backBarVM="@{viewModel.backBarVM}" />
<androidx.core.widget.NestedScrollView
android:id="@+id/nsv_right_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
binding:layout_constraintBottom_toTopOf="@+id/ll_save"
binding:layout_constraintLeft_toLeftOf="@+id/guideline_vertical"
binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/iv_setting">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:orientation="vertical"
android:padding="10dp">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@mipmap/cattle_color"
android:drawablePadding="5dp"
android:padding="@dimen/dp_10"
android:text="反馈内容"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/sp_16" />
<androidx.appcompat.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="@dimen/dp_300"
android:inputType="textMultiLine"
android:maxLength="500"
android:gravity="top"
android:background="@drawable/edit_text_border"
android:text="@={viewModel.feedContent}" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.core.widget.NestedScrollView>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>
......@@ -14,6 +14,7 @@
<string name="remark">备注</string>
<string name="save">保存</string>
<string name="submit">提交</string>
<string name="back">返回</string>
<string name="yes"></string>
......
......@@ -19,7 +19,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
......
......@@ -21,12 +21,12 @@ android {
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:design:25.+'
compile 'com.android.support:appcompat-v7:25.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
implementation 'com.android.support:design:25.+'
implementation 'com.android.support:appcompat-v7:25.+'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
}
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