diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index d295c7c..df0e4da 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; +import android.os.Environment; import android.text.TextPaint; import com.casic.dcms.base.BaseApplication; @@ -16,6 +17,10 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import rx.Emitter; import rx.Observable; @@ -77,9 +82,22 @@ bitmapHeight - paddingBottom, textPaint); //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); + File waterImageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "WaterImage"); + if (!waterImageDir.exists()) { + waterImageDir.mkdir(); + } + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); + //index用来区分for循环太快会导致多想图片覆盖压缩问题 + File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + ".png"); + if (!imageFile.exists()) { + try { + imageFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } try { - FileOutputStream fos = new FileOutputStream(file); + FileOutputStream fos = new FileOutputStream(imageFile); //以jpeg的编码方式,75%的像素质量保存为png图片 copyBitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos); fos.flush(); @@ -90,7 +108,7 @@ } catch (Exception e) { e.printStackTrace(); } - emitter.onNext(file); + emitter.onNext(imageFile); }, Emitter.BackpressureMode.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index d295c7c..df0e4da 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; +import android.os.Environment; import android.text.TextPaint; import com.casic.dcms.base.BaseApplication; @@ -16,6 +17,10 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import rx.Emitter; import rx.Observable; @@ -77,9 +82,22 @@ bitmapHeight - paddingBottom, textPaint); //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); + File waterImageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "WaterImage"); + if (!waterImageDir.exists()) { + waterImageDir.mkdir(); + } + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); + //index用来区分for循环太快会导致多想图片覆盖压缩问题 + File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + ".png"); + if (!imageFile.exists()) { + try { + imageFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } try { - FileOutputStream fos = new FileOutputStream(file); + FileOutputStream fos = new FileOutputStream(imageFile); //以jpeg的编码方式,75%的像素质量保存为png图片 copyBitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos); fos.flush(); @@ -90,7 +108,7 @@ } catch (Exception e) { e.printStackTrace(); } - emitter.onNext(file); + emitter.onNext(imageFile); }, Emitter.BackpressureMode.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 43412f8..18d7ed4 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -45,7 +45,7 @@ public static final String LAST_LOGIN = "lastLoginTime"; public static final String IP_KEY = "ip"; public static final String TOILET_LAYER_ID = "toiletLayerId"; - + public static final String APP_AUTHORITY = "com.casic.dcms.fileprovider"; public static final String BRIDGE_LIST = "projectBridges"; public static final long HALF_YEAR = 180 * 60 * 60 * 24 * 1000L; diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index d295c7c..df0e4da 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; +import android.os.Environment; import android.text.TextPaint; import com.casic.dcms.base.BaseApplication; @@ -16,6 +17,10 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import rx.Emitter; import rx.Observable; @@ -77,9 +82,22 @@ bitmapHeight - paddingBottom, textPaint); //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); + File waterImageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "WaterImage"); + if (!waterImageDir.exists()) { + waterImageDir.mkdir(); + } + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); + //index用来区分for循环太快会导致多想图片覆盖压缩问题 + File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + ".png"); + if (!imageFile.exists()) { + try { + imageFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } try { - FileOutputStream fos = new FileOutputStream(file); + FileOutputStream fos = new FileOutputStream(imageFile); //以jpeg的编码方式,75%的像素质量保存为png图片 copyBitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos); fos.flush(); @@ -90,7 +108,7 @@ } catch (Exception e) { e.printStackTrace(); } - emitter.onNext(file); + emitter.onNext(imageFile); }, Emitter.BackpressureMode.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 43412f8..18d7ed4 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -45,7 +45,7 @@ public static final String LAST_LOGIN = "lastLoginTime"; public static final String IP_KEY = "ip"; public static final String TOILET_LAYER_ID = "toiletLayerId"; - + public static final String APP_AUTHORITY = "com.casic.dcms.fileprovider"; public static final String BRIDGE_LIST = "projectBridges"; public static final long HALF_YEAR = 180 * 60 * 60 * 24 * 1000L; diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java deleted file mode 100644 index a0329b5..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class CompressVideoFileProvider extends FileProvider { -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index d295c7c..df0e4da 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; +import android.os.Environment; import android.text.TextPaint; import com.casic.dcms.base.BaseApplication; @@ -16,6 +17,10 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import rx.Emitter; import rx.Observable; @@ -77,9 +82,22 @@ bitmapHeight - paddingBottom, textPaint); //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); + File waterImageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "WaterImage"); + if (!waterImageDir.exists()) { + waterImageDir.mkdir(); + } + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); + //index用来区分for循环太快会导致多想图片覆盖压缩问题 + File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + ".png"); + if (!imageFile.exists()) { + try { + imageFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } try { - FileOutputStream fos = new FileOutputStream(file); + FileOutputStream fos = new FileOutputStream(imageFile); //以jpeg的编码方式,75%的像素质量保存为png图片 copyBitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos); fos.flush(); @@ -90,7 +108,7 @@ } catch (Exception e) { e.printStackTrace(); } - emitter.onNext(file); + emitter.onNext(imageFile); }, Emitter.BackpressureMode.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 43412f8..18d7ed4 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -45,7 +45,7 @@ public static final String LAST_LOGIN = "lastLoginTime"; public static final String IP_KEY = "ip"; public static final String TOILET_LAYER_ID = "toiletLayerId"; - + public static final String APP_AUTHORITY = "com.casic.dcms.fileprovider"; public static final String BRIDGE_LIST = "projectBridges"; public static final long HALF_YEAR = 180 * 60 * 60 * 24 * 1000L; diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java deleted file mode 100644 index a0329b5..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class CompressVideoFileProvider extends FileProvider { -} diff --git a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java deleted file mode 100644 index 7f2aa50..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class VersionUpgradeFileProvider extends FileProvider { -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index d295c7c..df0e4da 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; +import android.os.Environment; import android.text.TextPaint; import com.casic.dcms.base.BaseApplication; @@ -16,6 +17,10 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import rx.Emitter; import rx.Observable; @@ -77,9 +82,22 @@ bitmapHeight - paddingBottom, textPaint); //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); + File waterImageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "WaterImage"); + if (!waterImageDir.exists()) { + waterImageDir.mkdir(); + } + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); + //index用来区分for循环太快会导致多想图片覆盖压缩问题 + File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + ".png"); + if (!imageFile.exists()) { + try { + imageFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } try { - FileOutputStream fos = new FileOutputStream(file); + FileOutputStream fos = new FileOutputStream(imageFile); //以jpeg的编码方式,75%的像素质量保存为png图片 copyBitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos); fos.flush(); @@ -90,7 +108,7 @@ } catch (Exception e) { e.printStackTrace(); } - emitter.onNext(file); + emitter.onNext(imageFile); }, Emitter.BackpressureMode.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 43412f8..18d7ed4 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -45,7 +45,7 @@ public static final String LAST_LOGIN = "lastLoginTime"; public static final String IP_KEY = "ip"; public static final String TOILET_LAYER_ID = "toiletLayerId"; - + public static final String APP_AUTHORITY = "com.casic.dcms.fileprovider"; public static final String BRIDGE_LIST = "projectBridges"; public static final long HALF_YEAR = 180 * 60 * 60 * 24 * 1000L; diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java deleted file mode 100644 index a0329b5..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class CompressVideoFileProvider extends FileProvider { -} diff --git a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java deleted file mode 100644 index 7f2aa50..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class VersionUpgradeFileProvider extends FileProvider { -} diff --git a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java deleted file mode 100644 index afa4fe2..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class WaterImageFileProvider extends FileProvider { -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index d295c7c..df0e4da 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; +import android.os.Environment; import android.text.TextPaint; import com.casic.dcms.base.BaseApplication; @@ -16,6 +17,10 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import rx.Emitter; import rx.Observable; @@ -77,9 +82,22 @@ bitmapHeight - paddingBottom, textPaint); //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); + File waterImageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "WaterImage"); + if (!waterImageDir.exists()) { + waterImageDir.mkdir(); + } + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); + //index用来区分for循环太快会导致多想图片覆盖压缩问题 + File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + ".png"); + if (!imageFile.exists()) { + try { + imageFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } try { - FileOutputStream fos = new FileOutputStream(file); + FileOutputStream fos = new FileOutputStream(imageFile); //以jpeg的编码方式,75%的像素质量保存为png图片 copyBitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos); fos.flush(); @@ -90,7 +108,7 @@ } catch (Exception e) { e.printStackTrace(); } - emitter.onNext(file); + emitter.onNext(imageFile); }, Emitter.BackpressureMode.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 43412f8..18d7ed4 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -45,7 +45,7 @@ public static final String LAST_LOGIN = "lastLoginTime"; public static final String IP_KEY = "ip"; public static final String TOILET_LAYER_ID = "toiletLayerId"; - + public static final String APP_AUTHORITY = "com.casic.dcms.fileprovider"; public static final String BRIDGE_LIST = "projectBridges"; public static final long HALF_YEAR = 180 * 60 * 60 * 24 * 1000L; diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java deleted file mode 100644 index a0329b5..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class CompressVideoFileProvider extends FileProvider { -} diff --git a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java deleted file mode 100644 index 7f2aa50..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class VersionUpgradeFileProvider extends FileProvider { -} diff --git a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java deleted file mode 100644 index afa4fe2..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class WaterImageFileProvider extends FileProvider { -} diff --git a/app/src/main/res/layout/fragment_notice.xml b/app/src/main/res/layout/fragment_notice.xml index 6fa051e..f6fb875 100644 --- a/app/src/main/res/layout/fragment_notice.xml +++ b/app/src/main/res/layout/fragment_notice.xml @@ -11,31 +11,10 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - - - - - - - - - - - + android:layout_height="wrap_content" + android:scrollbars="vertical" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 830d79a..ebd14f7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -309,6 +309,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c78d07c..ef2ece3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,9 +44,8 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - android:usesCleartextTraffic="true" - tools:targetApi="m"> + android:theme="@style/Theme.CityAdministration" + android:usesCleartextTraffic="true"> @@ -90,7 +89,6 @@ - @@ -114,43 +112,9 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - - - - - - - - - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 1f7c1a3..d0ca1cf 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -27,7 +27,7 @@ instance = this; QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); - FileUtils.initFileConfig(this); + FileUtils.init(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java index 637d8bb..d7314d0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/MinePageFragment.java @@ -22,6 +22,7 @@ import com.casic.dcms.model.UserBean; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.ChangePasswordActivity; import com.casic.dcms.view.HelpfulActivity; @@ -63,9 +64,11 @@ //下载进度条 progressDialog = new ProgressDialog(requireContext()); + progressDialog.setMessage("下载新版本中..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.bg_progress, null)); progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); } @Override @@ -126,12 +129,7 @@ @Override public void onConfirmClick() { //下载新版本 - progressDialog.setMessage("下载新版本中..."); progressDialog.show(); - if (progressDialog.getProgress() != 0) { - progressDialog.setProgress(0);//防止下载到中途却卡住无法再进行下载 - return; - } downloadApk(downloadUrl); } @@ -237,7 +235,7 @@ Uri data; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 // 通过FileProvider创建一个content类型的Uri - data = FileProvider.getUriForFile(requireContext(), "com.casic.dcms.install.fileProvider", apk); + data = FileProvider.getUriForFile(requireContext(), LocaleConstant.APP_AUTHORITY, apk); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权 } else { data = Uri.fromFile(apk); diff --git a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java index 0dfdc60..35cff13 100644 --- a/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/NoticePageFragment.java @@ -1,40 +1,24 @@ package com.casic.dcms.fragment; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Message; import android.view.View; -import androidx.annotation.NonNull; - import com.casic.dcms.R; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.databinding.FragmentNoticeBinding; import com.casic.dcms.utils.DataBaseManager; -import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.CaseDetailActivity; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.scwang.smartrefresh.layout.api.RefreshLayout; -import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; -import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.util.ArrayList; import java.util.List; public class NoticePageFragment extends AndroidxBaseFragment { private static final String TAG = "NoticePageFragment"; - public static WeakReferenceHandler weakReferenceHandler; private NormalRecyclerAdapter adapter; - private List dataBeans = new ArrayList<>(); - private int pageIndex = 0; // 本地数据库分页从0开始 - private boolean isRefresh = false; - private boolean isLoadMore = false; @Override protected void setupTopBarLayout() { @@ -43,7 +27,47 @@ @Override protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); + List dataBeans = DataBaseManager.getInstance().queryNoticeByUser(StringHelper.getUserBean().getId()); + if (dataBeans.size() == 0) { + viewBinding.emptyView.show(false, "没有任何通知", null, null, null); + } else { + viewBinding.emptyView.hide(); + adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { + @Override + public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { + viewHolder.setText(R.id.dateView, item.getPushDate()) + .setText(R.id.titleView, item.getTitle()) + .setText(R.id.contentView, item.getContent()); + if (item.getIsRead().equals("0")) { + viewHolder.setVisibility(R.id.readStateView, View.GONE); + } else { + viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); + } + + viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { + @Override + public void onClick(View v) { + DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); + dataBeans.remove(position); + adapter.notifyItemRemoved(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }) + .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { + @Override + public void onClick(View v) { + String caseId = item.getCasePrimaryKey(); + ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); + //更改数据库里通知状态 + DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); + adapter.notifyItemChanged(position); + adapter.notifyItemRangeChanged(position, dataBeans.size() - position); + } + }); + } + }; + viewBinding.noticeRecyclerView.setAdapter(adapter); + } } @Override @@ -52,111 +76,7 @@ } @Override - public void onResume() { - super.onResume(); - dataBeans = DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex); - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - - private final Handler.Callback callback = new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if (msg.what == LocaleConstant.UPDATE_NOTICE_FRAGMENT) { - if (dataBeans.size() == 0) { - viewBinding.emptyView.show(false, "没有任何通知", null, null, null); - } else { - viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_notice_rv_l, dataBeans) { - @Override - public void convertView(ViewHolder viewHolder, int position, NoticeLocaleBean item) { - viewHolder.setText(R.id.dateView, item.getPushDate()) - .setText(R.id.titleView, item.getTitle()) - .setText(R.id.contentView, item.getContent()); - if (item.getIsRead().equals("0")) { - viewHolder.setVisibility(R.id.readStateView, View.GONE); - } else { - viewHolder.setVisibility(R.id.readStateView, View.VISIBLE); - } - - viewHolder.setOnClickListener(R.id.deleteView, new View.OnClickListener() { - @Override - public void onClick(View v) { - DataBaseManager.getInstance().deleteNoticeByMessageId(item.getMessageId()); - dataBeans.remove(position); - adapter.notifyItemRemoved(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }) - .setOnClickListener(R.id.showDetailLayout, new View.OnClickListener() { - @Override - public void onClick(View v) { - String caseId = item.getCasePrimaryKey(); - ContextHub.navigatePageTo(requireContext(), CaseDetailActivity.class, caseId); - //更改数据库里通知状态 - DataBaseManager.getInstance().updateNoticeByMessageId(item.getMessageId()); - adapter.notifyItemChanged(position); - adapter.notifyItemRangeChanged(position, dataBeans.size() - position); - } - }); - } - }; - viewBinding.noticeRecyclerView.setAdapter(adapter); - } - } - return true; - } - }; - - @Override protected void initEvent() { - viewBinding.noticeLayout.setOnRefreshListener(new OnRefreshListener() { - @Override - public void onRefresh(@NonNull RefreshLayout refreshLayout) { - isRefresh = true; - new CountDownTimer(1000, 500) { - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex = 0; - - adapter.setRefreshData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishRefresh(); - isRefresh = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); - - viewBinding.noticeLayout.setOnLoadMoreListener(new OnLoadMoreListener() { - @Override - public void onLoadMore(@NonNull RefreshLayout refreshLayout) { - isLoadMore = true; - new CountDownTimer(1000, 500) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - pageIndex++; - - adapter.setLoadMoreData(DataBaseManager.getInstance().queryNoticeByPage(StringHelper.getUserBean().getId(), pageIndex)); - refreshLayout.finishLoadMore(); - isLoadMore = false; - - weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); - } - }.start(); - } - }); } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java index 57f0df8..33244a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java +++ b/app/src/main/java/com/casic/dcms/utils/DataBaseManager.java @@ -4,7 +4,6 @@ import com.casic.dcms.bean.MapConfigBean; import com.casic.dcms.bean.NoticeLocaleBean; import com.casic.dcms.bean.ToiletListBean; -import com.casic.dcms.fragment.NoticePageFragment; import com.casic.dcms.greendao.MapConfigBeanDao; import com.casic.dcms.greendao.NoticeLocaleBeanDao; import com.casic.dcms.greendao.ToiletListBeanDao; @@ -46,8 +45,6 @@ noticeBeanDao.save(noticeBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -58,13 +55,10 @@ ).list().size(); } - public List queryNoticeByPage(String userId, int offset) { - return BaseApplication.getDaoSession() - .queryBuilder(NoticeLocaleBean.class) + public List queryNoticeByUser(String userId) { + return noticeBeanDao.queryBuilder() .where(NoticeLocaleBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) .orderDesc(NoticeLocaleBeanDao.Properties.PushDate) - .limit(LocaleConstant.PAGE_LIMIT) .list(); } @@ -75,8 +69,6 @@ noticeBeanDao.deleteInTx(result); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } @@ -89,8 +81,6 @@ noticeBeanDao.update(noticeLocaleBean); //角标设置 BadeHelper.setBadgeNum(BaseApplication.getInstance(), queryUnReadNotice()); - //更新消息界面 - NoticePageFragment.weakReferenceHandler.sendEmptyMessage(LocaleConstant.UPDATE_NOTICE_FRAGMENT); //更新底部导航消息数量 MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.MESSAGE_NUMBER); } diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 32a5ad3..356f182 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,8 +1,7 @@ package com.casic.dcms.utils; -import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; +import android.os.Environment; import java.io.File; import java.io.IOException; @@ -12,112 +11,12 @@ public class FileUtils { private static final String TAG = "FileUtils"; - @SuppressLint("StaticFieldLeak") - private static Context context; - private static File imageDir; - private static File waterImageDir; - private static File videoDir; - private static int index = 1; + private static String videoFilePath; - public static void initFileConfig(Context context) { - FileUtils.context = context; - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "initFileConfig: 创建WaterImageFile文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); + public static void init(Context context) { + File videoDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES), ""); if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹"); - } - } - } - - public static String getImageCompressPath() { - if (imageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getImageCompressPath: 创建Casic文件夹"); - } - } - imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkImageDir = imageDir.mkdir(); - if (mkImageDir) { - Log.d(TAG, "getImageCompressPath: 创建CompressImageFile文件夹"); - } - } - } - return imageDir.toString(); - } - - static File getWaterImageFile() { - //如果第一次初始化文件夹未创建成功,那就调用的时候再单独创建一次文件夹 - if (waterImageDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getWaterImageFile: 创建Casic文件夹"); - } - } - waterImageDir = new File(parentDir, "WaterImageFile"); - if (!waterImageDir.exists()) { - boolean mkAudioDir = waterImageDir.mkdir(); - if (mkAudioDir) { - Log.d(TAG, "getWaterImageFile: 创建WaterImageFile文件夹"); - } - } - } - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); - //index用来区分for循环太快会导致多想图片覆盖压缩问题 - File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + "_" + (index++) + ".png"); - if (!imageFile.exists()) { - try { - imageFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return imageFile; - } - - public static String getOutputVideoFile() { - if (videoDir == null) { - File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); - if (!parentDir.exists()) { - boolean mkdir = parentDir.mkdir(); - if (mkdir) { - Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹"); - } - } - videoDir = new File(parentDir, "CompressVideoFile"); - if (!videoDir.exists()) { - boolean mkVideoDir = videoDir.mkdir(); - if (mkVideoDir) { - Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹"); - } - } + videoDir.mkdir(); } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4"); @@ -128,6 +27,10 @@ e.printStackTrace(); } } - return videoFile.getPath(); + videoFilePath = videoFile.getPath(); + } + + public static String getOutputVideoFile() { + return videoFilePath; } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index d295c7c..df0e4da 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; +import android.os.Environment; import android.text.TextPaint; import com.casic.dcms.base.BaseApplication; @@ -16,6 +17,10 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import rx.Emitter; import rx.Observable; @@ -77,9 +82,22 @@ bitmapHeight - paddingBottom, textPaint); //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); + File waterImageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "WaterImage"); + if (!waterImageDir.exists()) { + waterImageDir.mkdir(); + } + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); + //index用来区分for循环太快会导致多想图片覆盖压缩问题 + File imageFile = new File(waterImageDir + File.separator + "IMG_" + timeStamp + ".png"); + if (!imageFile.exists()) { + try { + imageFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } try { - FileOutputStream fos = new FileOutputStream(file); + FileOutputStream fos = new FileOutputStream(imageFile); //以jpeg的编码方式,75%的像素质量保存为png图片 copyBitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos); fos.flush(); @@ -90,7 +108,7 @@ } catch (Exception e) { e.printStackTrace(); } - emitter.onNext(file); + emitter.onNext(imageFile); }, Emitter.BackpressureMode.BUFFER).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 43412f8..18d7ed4 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -45,7 +45,7 @@ public static final String LAST_LOGIN = "lastLoginTime"; public static final String IP_KEY = "ip"; public static final String TOILET_LAYER_ID = "toiletLayerId"; - + public static final String APP_AUTHORITY = "com.casic.dcms.fileprovider"; public static final String BRIDGE_LIST = "projectBridges"; public static final long HALF_YEAR = 180 * 60 * 60 * 24 * 1000L; diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java deleted file mode 100644 index a0329b5..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class CompressVideoFileProvider extends FileProvider { -} diff --git a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java deleted file mode 100644 index 7f2aa50..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class VersionUpgradeFileProvider extends FileProvider { -} diff --git a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java deleted file mode 100644 index afa4fe2..0000000 --- a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.dcms.utils.provider; - -import androidx.core.content.FileProvider; - -public class WaterImageFileProvider extends FileProvider { -} diff --git a/app/src/main/res/layout/fragment_notice.xml b/app/src/main/res/layout/fragment_notice.xml index 6fa051e..f6fb875 100644 --- a/app/src/main/res/layout/fragment_notice.xml +++ b/app/src/main/res/layout/fragment_notice.xml @@ -11,31 +11,10 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - - - - - - - - - - - + android:layout_height="wrap_content" + android:scrollbars="vertical" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 064f301..5443e7a 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,5 +1,21 @@ + +