From b67589ca543825b4c50d290cf3a8877c853795b9 Mon Sep 17 00:00:00 2001 From: itgaojian Date: Fri, 16 Jun 2023 14:10:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E5=81=87=E7=B1=BB=E5=9E=8B=20?= =?UTF-8?q?=E5=81=87=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 3 +- README.md | 10 +- app/release/output-metadata.json | 4 +- .../normal/CensusRegisterListActivity.java | 5 - .../activitys/mine/LeaveActivity.java | 341 ++++++++++++++++-- .../activitys/mine/LeaveDetailActivity.java | 51 ++- .../adapters/LeaveHistoryAdapter.java | 9 +- .../beans/LeaveDetailBean.java | 18 + .../realtimelocation/beans/LeaveListBean.java | 10 + .../realtimelocation/beans/LeavePostBean.java | 18 + app/src/main/res/layout/activity_leave.xml | 28 +- .../main/res/layout/activity_leave_detail.xml | 41 ++- app/src/main/res/values/strings.xml | 1 + build.gradle | 4 +- .../cm_utils/constant/PathConfig.java | 1 + .../core/retrofit_net/BaseUrlApi.java | 4 +- 16 files changed, 489 insertions(+), 59 deletions(-) mode change 100755 => 100644 .idea/misc.xml diff --git a/.idea/misc.xml b/.idea/misc.xml old mode 100755 new mode 100644 index 91cd7a4..4b5aa9b --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - @@ -15,7 +14,7 @@ - + diff --git a/README.md b/README.md index 6ba4baa..40a3b08 100755 --- a/README.md +++ b/README.md @@ -40,4 +40,12 @@ 1.境外人员 字段变更 2.去除案件检查时相片必填选项 -``` \ No newline at end of file +``` + +## 2023-6-16 +``` +> 1.4.6 + +1.请假 类型跟换数据字典 添加上传假条 + +``` diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 6f2aebb..f9daae5 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -10,8 +10,8 @@ { "type": "SINGLE", "filters": [], - "versionCode": 45, - "versionName": "1.4.5", + "versionCode": 46, + "versionName": "1.4.6", "outputFile": "app-release.apk" } ] diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/census/normal/CensusRegisterListActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/census/normal/CensusRegisterListActivity.java index 35fa955..7c9bef3 100644 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/census/normal/CensusRegisterListActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/census/normal/CensusRegisterListActivity.java @@ -2,14 +2,12 @@ package com.sucstepsoft.realtimelocation.activitys.census.normal; import android.app.AlertDialog; import android.app.ProgressDialog; -import android.content.DialogInterface; import android.content.Intent; import android.support.v7.widget.LinearLayoutManager; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; -import android.widget.ExpandableListView; import android.widget.ImageView; import com.jcodecraeer.xrecyclerview.ProgressStyle; @@ -21,9 +19,6 @@ import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.cm_utils.utils.UserLgUtils; import com.sucstepsoft.realtimelocation.R; import com.sucstepsoft.realtimelocation.adapters.CensusPersonAdapter; -import com.sucstepsoft.realtimelocation.adapters.LeaveHistoryAdapter; -import com.sucstepsoft.realtimelocation.adapters.PersonAdapter; -import com.sucstepsoft.realtimelocation.beans.LeaveListBean; import com.sucstepsoft.realtimelocation.beans.SuccessBean; import com.sucstepsoft.realtimelocation.beans.person.CensusPersonBean; import com.sucstepsoft.realtimelocation.net.LocationApiService; diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java index b5143cb..83480b9 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java @@ -2,9 +2,18 @@ package com.sucstepsoft.realtimelocation.activitys.mine; import android.app.ProgressDialog; import android.content.Intent; +import android.database.Cursor; import android.graphics.Color; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.support.v4.content.FileProvider; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.TextUtils; +import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -14,19 +23,29 @@ import android.widget.TextView; import com.bigkoo.pickerview.builder.OptionsPickerBuilder; import com.bigkoo.pickerview.view.OptionsPickerView; import com.google.gson.Gson; +import com.sucstepsoft.cm_utils.constant.PathConfig; import com.sucstepsoft.cm_utils.constant.TimeConstants; +import com.sucstepsoft.cm_utils.core.beans.AddPhotoBean; +import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; +import com.sucstepsoft.cm_utils.core.widget.base.AddPhotoAdapter; import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.cm_utils.core.widget.views.ButtomDialogView; +import com.sucstepsoft.cm_utils.utils.ProiderUtil; import com.sucstepsoft.cm_utils.utils.TimeUtils; import com.sucstepsoft.cm_utils.utils.ToastUtils; import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.cm_utils.utils.UserLgUtils; import com.sucstepsoft.realtimelocation.R; +import com.sucstepsoft.realtimelocation.activitys.common.PhotoActivity; +import com.sucstepsoft.realtimelocation.beans.BaseUserBean; import com.sucstepsoft.realtimelocation.beans.LeavePostBean; import com.sucstepsoft.realtimelocation.beans.SuccessBean; +import com.sucstepsoft.realtimelocation.beans.TypeListBean; import com.sucstepsoft.realtimelocation.net.LocationApiService; import com.sucstepsoft.realtimelocation.utils.ExceptionHandler; +import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @@ -36,10 +55,14 @@ import butterknife.ButterKnife; import butterknife.Unbinder; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.MediaType; +import okhttp3.MultipartBody; import okhttp3.RequestBody; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; public class LeaveActivity extends BaseActivity { @@ -74,8 +97,11 @@ public class LeaveActivity extends BaseActivity { EditText mEtLeCause; @BindView(R.id.btn_submit) Button mBtnSubmit; + @BindView(R.id.tv_proof) + TextView mTvProof; + @BindView(R.id.rlv_photo) + RecyclerView mRlvPhoto; private Unbinder mBind; - private String mType = ""; private String mStartTime = ""; private float mStart = 0; private String amOrPm = "am"; @@ -83,6 +109,14 @@ public class LeaveActivity extends BaseActivity { private String mEndTime = ""; private float mCount = 0.0f; private int startTimeAmOrPm = 0; + private List mPhotos = new ArrayList<>(); + private AddPhotoBean mCurrentBean; + private String mPicPath; + private AddPhotoAdapter mPhotoAdapter; + private String mPhotoIds = "";//相片Id + private List mTypeList; + private OptionsPickerView mTypePicker; + private TypeListBean mSelType; @Override protected int setLayoutId() { @@ -102,10 +136,35 @@ public class LeaveActivity extends BaseActivity { mTvLeEndTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_end))); mTvLeCountTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_count))); mTvLeCause.setText(Html.fromHtml(getResources().getString(R.string.leave_cause))); + mTvProof.setText(Html.fromHtml(getResources().getString(R.string.leave_proof))); mRlLeType.setOnClickListener(v -> choosePage(1)); mRlLeStart.setOnClickListener(v -> choosePage(2)); mRlLeEnd.setOnClickListener(v -> choosePage(3)); mBtnSubmit.setOnClickListener(v -> doSubmit()); + + mPhotos.add(new AddPhotoBean()); + mPhotoAdapter = new AddPhotoAdapter(LeaveActivity.this, mPhotos); + mRlvPhoto.setLayoutManager(new GridLayoutManager(mActivity, 4)); + mRlvPhoto.setAdapter(mPhotoAdapter); + //删除上传的相片 + mPhotoAdapter.addOnDeleteListener(((bean, i) -> { + mPhotoAdapter.removeItem(bean); + mPhotoIds = mPhotoIds.replace(bean.getId() + ",", ""); + })); + mPhotoAdapter.addOnItemClickListener(bean -> { + if (TextUtils.isEmpty(bean.getPath())) { + //空数据 + showSelectPhoto(bean); + } else { + //预览 + ArrayList list = new ArrayList<>(); + list.add(bean.getPath()); + Intent intent = new Intent(); + intent.putExtra(PhotoActivity.TAG_IMGURL, list); + intent.setClass(LeaveActivity.this, PhotoActivity.class); + startActivity(intent); + } + }); setEditTextInhibitInputSpeChat(mEtLeCause); } @@ -116,10 +175,24 @@ public class LeaveActivity extends BaseActivity { String cause = mEtLeCause.getText().toString().trim(); LeavePostBean body = new LeavePostBean(); body.setLeaveSummary(cause); - body.setLeaveType(mType); + body.setLeaveType(mSelType.getDictId()); + body.setLeaveTypeName(mSelType.getDictName()); body.setLeaveTimeLong(mCount + ""); body.setLeaveTime(mStartTime); body.setLeaveTimeApm(amOrPm); + if (mPhotoAdapter.getData().size() >= 2) { + String ids = ""; + for (int i = 0; i < mPhotoAdapter.getData().size(); i++) { + if (!TextUtils.isEmpty(mPhotoAdapter.getData().get(i).getId())) { + ids += mPhotoAdapter.getData().get(i).getId() + ","; + } + } + if (ids.endsWith(",")) { + ids = ids.substring(0, ids.length() - 1); + } + body.setLeaveImg(ids); + } + Gson gson = new Gson(); String obj = gson.toJson(body); RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), obj); @@ -158,8 +231,179 @@ public class LeaveActivity extends BaseActivity { } } + + /** + * 显示选择图片 + * + * @param bean + */ + private void showSelectPhoto(AddPhotoBean bean) { + hideSoftKeyboard(); + ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity) + .setIsBackCancelable(true) + .setIscancelable(true) + .setShowLocation(Gravity.BOTTOM) + .setIsShowFile(false) + .build(); + buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() { + @Override + public void choseFile() { + } + + @Override + public void choseAlbum() { + mCurrentBean = bean; + Intent intent = new Intent(Intent.ACTION_PICK, null); + intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + "image/*"); + startActivityForResult(intent, BaseUrlApi.PHOTO_REQUEST); + buttomDialogView.dismiss(); + } + + @Override + public void choseShoot() { + mCurrentBean = bean; + String pathStr = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + PathConfig.CATCH_PATH; + mPicPath = pathStr + System.currentTimeMillis() + ".jpg"; + File file = new File(mPicPath); + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + // 下面这句指定调用相机拍照后的照片存储的路径 + Uri uri; + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + uri = Uri.fromFile(file); + } else { + uri = FileProvider.getUriForFile(mActivity, ProiderUtil.getFileProviderName(mActivity), file); + } + intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + startActivityForResult(intent, BaseUrlApi.CAMERA_REQUEST); + } + + @Override + public void loginOut() { + + } + + @Override + public void changePwd() { + + } + }); + buttomDialogView.show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == RESULT_OK) { + switch (requestCode) { + case BaseUrlApi.CAMERA_REQUEST://相机 + uploadImg(mPicPath, 1); + break; + case BaseUrlApi.PHOTO_REQUEST://相册 + try { + if (data == null) return; + Uri uri = data.getData(); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String srcPath = cursor.getString(column_index); + uploadImg(srcPath, 2); + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + /** + * 上传文件 + * + * @param picPath + */ + private void uploadImg(String picPath, int src) { + File file = new File(picPath); + if (!file.exists()) { + showToast("图片路径错误."); + return; + } + ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "正在上传..."); + progressDialog.show(); + String pathStr = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + PathConfig.CATCH_PATH; + Luban.with(mActivity) + .load(picPath) + .ignoreBy(100) + .setTargetDir(pathStr) + .filter(path -> !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"))) + .setCompressListener(new OnCompressListener() { + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); + MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile); + RetrofitManager.getInstance() + .create(LocationApiService.class) + .uploadImage(body, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseUserBean baseUserBean) { + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ToastUtils.showShort("上传成功"); + mPhotoIds += (baseUserBean.getData() + ","); + mCurrentBean.setId(baseUserBean.getData()); + mCurrentBean.setPath(picPath); + if (mPhotos.size() < 4) { + mPhotos.add(new AddPhotoBean()); + } + mPhotoAdapter.notifyDataSetChanged(); + mCurrentBean = null; + } + + @Override + public void onError(Throwable e) { + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ToastUtils.showShort("上传失败,请稍后重试."); + if (file.exists()) { + file.delete(); + } + } + + @Override + public void onComplete() { + + } + }); + } + + @Override + public void onError(Throwable e) { + if (progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ToastUtils.showShort("图片上传失败,请稍后重试"); + } + }) + .launch(); + } + private boolean checkParams() { - if (TextUtils.isEmpty(mType)) { + if (mSelType == null) { ToastUtils.showShort("请选择请假类型"); return false; } @@ -176,6 +420,10 @@ public class LeaveActivity extends BaseActivity { ToastUtils.showShort("请输入请假事由"); return false; } + if (mPhotos.size() <= 1) { + ToastUtils.showShort("请上传假条"); + return false; + } return true; } @@ -193,6 +441,52 @@ public class LeaveActivity extends BaseActivity { } } + + /** + * 字典 + */ + private void getDicListByType(String pId, int i) { + ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中..."); + dialog.show(); + RetrofitManager.getInstance() + .create(LocationApiService.class) + .getDictListAll(pId, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(@NonNull List typeListBeans) { + dialog.dismiss(); + if (typeListBeans.size() > 0) { + switch (i) { + case 3://请假类型 + mTypeList = typeListBeans; + showTypePicker(); + break; + } + } else { + ToastUtils.showShort("暂无数据"); + } + } + + @Override + public void onError(@NonNull Throwable e) { + dialog.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + private void showEndPicker() { if (TextUtils.isEmpty(mStartTime)) { ToastUtils.showShort("请选择开始时间"); @@ -348,29 +642,28 @@ public class LeaveActivity extends BaseActivity { } + /** + * 请假类型 + */ private void showTypePicker() { - List types = new ArrayList<>(); - types.add("有病"); - types.add("有事"); - OptionsPickerView mTypePicker = new OptionsPickerBuilder(LeaveActivity.this, (options1, options2, options3, v) -> { - mType = types.get(options1); - String s = types.get(options1); - switch (s) { - case "有病": - mType = "ill"; - break; - case "有事": - mType = "busy"; - break; + hideSoftKeyboard(); + if (mTypeList != null && mTypeList.size() > 0) { + if (mTypePicker == null) { + mTypePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> { + mSelType = mTypeList.get(o1); + mTvLeTypeContent.setText(mSelType.getDictName()); + }) + .setTitleText("请选择请假类型") + .setCancelColor(Color.parseColor("#1189FF")) + .setSubmitColor(Color.parseColor("#1189FF")) + .setTitleColor(Color.parseColor("#1189FF")) + .build(); + mTypePicker.setPicker(mTypeList); } - mTvLeTypeContent.setText(s); - }).setTitleText("请选择请假类型") - .setCancelColor(Color.parseColor("#1189FF")) - .setSubmitColor(Color.parseColor("#1189FF")) - .setTitleColor(Color.parseColor("#1189FF")) - .build(); - mTypePicker.setPicker(types); - mTypePicker.show(); + mTypePicker.show(); + } else { + getDicListByType(PathConfig.DIC_LEAVE, 3); + } } @Override diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java index 7b16120..e773025 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java @@ -1,7 +1,9 @@ package com.sucstepsoft.realtimelocation.activitys.mine; import android.app.ProgressDialog; -import android.os.Bundle; +import android.content.Intent; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.Button; @@ -10,23 +12,26 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import com.alibaba.android.arouter.exception.HandlerException; import com.google.gson.Gson; -import com.sucstepsoft.cm_utils.core.network.response.GsonResponseHandler; +import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.cm_utils.core.widget.base.BaseShowPhotoAdapter; import com.sucstepsoft.cm_utils.utils.ToastUtils; import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.cm_utils.utils.UserLgUtils; import com.sucstepsoft.realtimelocation.R; +import com.sucstepsoft.realtimelocation.activitys.common.PhotoActivity; import com.sucstepsoft.realtimelocation.beans.LeaveCheckBean; import com.sucstepsoft.realtimelocation.beans.LeaveDetailBean; import com.sucstepsoft.realtimelocation.beans.LeaveListBean; -import com.sucstepsoft.realtimelocation.beans.LeavePostBean; import com.sucstepsoft.realtimelocation.beans.SuccessBean; import com.sucstepsoft.realtimelocation.net.LocationApiService; import com.sucstepsoft.realtimelocation.utils.ExceptionHandler; +import java.util.ArrayList; +import java.util.List; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; @@ -82,6 +87,10 @@ public class LeaveDetailActivity extends BaseActivity { TextView mTvNeiron; @BindView(R.id.tv_le_qingren) TextView mTvQingRen; + @BindView(R.id.rlv_photo) + RecyclerView mRlvPhoto; + @BindView(R.id.tv_hint) + TextView mTvHint; private Unbinder mBind; private String mType; private LeaveDetailBean mDetailBean; @@ -219,14 +228,34 @@ public class LeaveDetailActivity extends BaseActivity { break; } if (!TextUtils.isEmpty(leaveDetailBean.getLeaveType())) { - switch (leaveDetailBean.getLeaveType()) { - case "ill": - mTvLeTypeContent.setText("有病"); - break; - case "busy": - mTvLeTypeContent.setText("有事"); - break; + mTvLeTypeContent.setText(leaveDetailBean.getLeaveTypeName()); + } + if (TextUtils.isEmpty(mDetailBean.getLeaveImg())) { + mRlvPhoto.setVisibility(View.GONE); + mTvHint.setVisibility(View.VISIBLE); + } else { + mTvHint.setVisibility(View.GONE); + mRlvPhoto.setVisibility(View.VISIBLE); + List photos = new ArrayList<>(); + String[] split = mDetailBean.getLeaveImg().split(","); + for (int i = 0; i < split.length; i++) { + if (!TextUtils.isEmpty(split[i])) { + photos.add(BaseUrlApi.BASE_IMG_URL + split[i]); + } } + BaseShowPhotoAdapter adapter = new BaseShowPhotoAdapter(mActivity, photos); + mRlvPhoto.setLayoutManager(new GridLayoutManager(mActivity, 4) { + @Override + public boolean canScrollVertically() { + return false; + } + });//禁止滑动 + mRlvPhoto.setAdapter(adapter); + adapter.addOnItemClickListener(url -> { + Intent intent = new Intent(LeaveDetailActivity.this, PhotoActivity.class); + intent.putExtra("imgUrls", new ArrayList<>(adapter.getData())); + startActivity(intent); + }); } } else { refreshView(STATE_LOAD_EMPTY); diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java b/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java index 06fa09e..3e64875 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java @@ -48,14 +48,7 @@ public class LeaveHistoryAdapter extends BaseRecyclerAdapter + + + + + + + + +