From 1c4001b90622ff8ac4a2d5130891fbe8a015fd2e Mon Sep 17 00:00:00 2001 From: tongchao Date: Tue, 1 Jul 2025 17:31:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=87=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FileDialog/.gitignore | 1 + FileDialog/build.gradle | 33 ++ FileDialog/consumer-rules.pro | 0 FileDialog/proguard-rules.pro | 21 + FileDialog/src/main/AndroidManifest.xml | 9 + .../com/kongzue/filedialog/FileDialog.java | 481 ++++++++++++++++++ .../filedialog/adapter/FileAdapter.java | 217 ++++++++ .../interfaces/FileSelectCallBack.java | 18 + .../kongzue/filedialog/util/FileListView.java | 69 +++ .../ic_dialogx_filedialog_back.xml | 11 + .../ic_dialogx_filedialog_file.xml | 11 + .../ic_dialogx_filedialog_folder.xml | 11 + .../ic_dialogx_filedialog_right.xml | 11 + .../ic_dialogx_filedialog_select.xml | 16 + .../ic_dialogx_filedialog_back.png | Bin 0 -> 186 bytes .../ic_dialogx_filedialog_file.png | Bin 0 -> 282 bytes .../ic_dialogx_filedialog_folder.png | Bin 0 -> 259 bytes .../ic_dialogx_filedialog_right.png | Bin 0 -> 150 bytes .../ic_dialogx_filedialog_select.png | Bin 0 -> 537 bytes .../ic_dialogx_filedialog_back.png | Bin 0 -> 152 bytes .../ic_dialogx_filedialog_file.png | Bin 0 -> 208 bytes .../ic_dialogx_filedialog_folder.png | Bin 0 -> 203 bytes .../ic_dialogx_filedialog_right.png | Bin 0 -> 138 bytes .../ic_dialogx_filedialog_select.png | Bin 0 -> 399 bytes .../ic_dialogx_filedialog_back.png | Bin 0 -> 211 bytes .../ic_dialogx_filedialog_file.png | Bin 0 -> 388 bytes .../ic_dialogx_filedialog_folder.png | Bin 0 -> 337 bytes .../ic_dialogx_filedialog_right.png | Bin 0 -> 185 bytes .../ic_dialogx_filedialog_select.png | Bin 0 -> 702 bytes .../ic_dialogx_filedialog_back.png | Bin 0 -> 320 bytes .../ic_dialogx_filedialog_file.png | Bin 0 -> 636 bytes .../ic_dialogx_filedialog_folder.png | Bin 0 -> 512 bytes .../ic_dialogx_filedialog_right.png | Bin 0 -> 247 bytes .../ic_dialogx_filedialog_select.png | Bin 0 -> 1604 bytes .../split_dialogx_filedialog_listitem.xml | 7 + .../res/layout/item_dialogx_file_list.xml | 50 ++ .../res/layout/layout_dialogx_file_select.xml | 101 ++++ FileDialog/src/main/res/values/strings.xml | 13 + app/build.gradle | 1 + .../gov_affairs_cloud/GacApplication.java | 6 +- .../tairui/gov_affairs_cloud/entity/Api.java | 3 +- .../gov_affairs_cloud/entity/Constant.java | 2 + .../entity/UpdateEntity.java | 107 ++++ .../gov_affairs_cloud/ui/MainActivity.java | 18 +- .../ui/input/UtilizationControlActivity.java | 4 +- .../ui/land/LandActivity.java | 137 ++++- .../ui/land/LandResouceInfoActivity.java | 23 +- .../ui/land/PlantPlanActivity.java | 4 +- .../ui/land/PlantPlanListActivity.java | 4 +- .../ui/land/entity/ItemLandEntity.java | 72 +++ .../gov_affairs_cloud/util/AppUtil.java | 24 + .../layout/activity_edit_land_base_info.xml | 3 +- app/src/main/res/layout/activity_upload.xml | 77 +++ settings.gradle | 1 + 54 files changed, 1542 insertions(+), 24 deletions(-) create mode 100644 FileDialog/.gitignore create mode 100644 FileDialog/build.gradle create mode 100644 FileDialog/consumer-rules.pro create mode 100644 FileDialog/proguard-rules.pro create mode 100644 FileDialog/src/main/AndroidManifest.xml create mode 100644 FileDialog/src/main/java/com/kongzue/filedialog/FileDialog.java create mode 100644 FileDialog/src/main/java/com/kongzue/filedialog/adapter/FileAdapter.java create mode 100644 FileDialog/src/main/java/com/kongzue/filedialog/interfaces/FileSelectCallBack.java create mode 100644 FileDialog/src/main/java/com/kongzue/filedialog/util/FileListView.java create mode 100644 FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_back.xml create mode 100644 FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_file.xml create mode 100644 FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_folder.xml create mode 100644 FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_right.xml create mode 100644 FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_select.xml create mode 100644 FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_back.png create mode 100644 FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_file.png create mode 100644 FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_folder.png create mode 100644 FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_right.png create mode 100644 FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_select.png create mode 100644 FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_back.png create mode 100644 FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_file.png create mode 100644 FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_folder.png create mode 100644 FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_right.png create mode 100644 FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_select.png create mode 100644 FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_back.png create mode 100644 FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_file.png create mode 100644 FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_folder.png create mode 100644 FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_right.png create mode 100644 FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_select.png create mode 100644 FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_back.png create mode 100644 FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_file.png create mode 100644 FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_folder.png create mode 100644 FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_right.png create mode 100644 FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_select.png create mode 100644 FileDialog/src/main/res/drawable-xxhdpi/split_dialogx_filedialog_listitem.xml create mode 100644 FileDialog/src/main/res/layout/item_dialogx_file_list.xml create mode 100644 FileDialog/src/main/res/layout/layout_dialogx_file_select.xml create mode 100644 FileDialog/src/main/res/values/strings.xml create mode 100644 app/src/main/java/com/tairui/gov_affairs_cloud/entity/UpdateEntity.java create mode 100644 app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/entity/ItemLandEntity.java create mode 100644 app/src/main/res/layout/activity_upload.xml diff --git a/FileDialog/.gitignore b/FileDialog/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/FileDialog/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/FileDialog/build.gradle b/FileDialog/build.gradle new file mode 100644 index 0000000..8d03bf9 --- /dev/null +++ b/FileDialog/build.gradle @@ -0,0 +1,33 @@ +plugins { + id 'com.android.library' +} + +android { + compileSdkVersion 33 + + defaultConfig { + minSdkVersion 21 + targetSdkVersion 33 + versionCode 1 + versionName "1.0" + + consumerProguardFiles "consumer-rules.pro" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + api project(path: ':DialogX') + + implementation 'androidx.appcompat:appcompat:1.4.1' +} \ No newline at end of file diff --git a/FileDialog/consumer-rules.pro b/FileDialog/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/FileDialog/proguard-rules.pro b/FileDialog/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/FileDialog/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/FileDialog/src/main/AndroidManifest.xml b/FileDialog/src/main/AndroidManifest.xml new file mode 100644 index 0000000..d4929b4 --- /dev/null +++ b/FileDialog/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/FileDialog/src/main/java/com/kongzue/filedialog/FileDialog.java b/FileDialog/src/main/java/com/kongzue/filedialog/FileDialog.java new file mode 100644 index 0000000..1edc5b6 --- /dev/null +++ b/FileDialog/src/main/java/com/kongzue/filedialog/FileDialog.java @@ -0,0 +1,481 @@ +package com.kongzue.filedialog; + +import static com.kongzue.dialogx.interfaces.BaseDialog.isNull; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.Settings; +import android.util.Log; +import android.view.View; +import android.view.animation.DecelerateInterpolator; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import com.kongzue.dialogx.dialogs.FullScreenDialog; +import com.kongzue.dialogx.dialogs.PopTip; +import com.kongzue.dialogx.interfaces.BaseDialog; +import com.kongzue.dialogx.interfaces.OnBackPressedListener; +import com.kongzue.dialogx.interfaces.OnBindView; +import com.kongzue.filedialog.adapter.FileAdapter; +import com.kongzue.filedialog.interfaces.FileSelectCallBack; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * @author: Kongzue + * @github: https://github.com/kongzue/ + * @homepage: http://kongzue.com/ + * @mail: myzcxhh@live.cn + * @createTime: 2022/3/3 13:02 + */ +public class FileDialog { + + public static FileDialog build() { + return new FileDialog(); + } + + public static int REQUEST_PERMISSION_CODE = 9103; + + String[] mimeTypes; + String[] suffixArray; + FileSelectCallBack fileSelectCallBack; + int maxSelectionNumber = 1; + boolean showFileDate = true; + + enum SelectType { + FILE, + FOLDER + } + + SelectType selectType = SelectType.FILE; + FullScreenDialog dialog; + + public void selectFileByMime(String mimeType, FileSelectCallBack fileSelectCallBack) { + selectFileByMime(new String[]{mimeType}, fileSelectCallBack); + } + + public void selectFileBySuffix(String suffix, FileSelectCallBack fileSelectCallBack) { + selectFileBySuffix(new String[]{suffix}, fileSelectCallBack); + } + + public void selectFile(FileSelectCallBack fileSelectCallBack) { + selectType = SelectType.FILE; + this.fileSelectCallBack = fileSelectCallBack; + readyShowDialog(); + } + + public void selectFileByMime(String[] mimeTypes, FileSelectCallBack fileSelectCallBack) { + selectType = SelectType.FILE; + this.mimeTypes = mimeTypes; + this.fileSelectCallBack = fileSelectCallBack; + readyShowDialog(); + } + + public void selectFileBySuffix(String[] suffixArray, FileSelectCallBack fileSelectCallBack) { + selectType = SelectType.FILE; + this.suffixArray = suffixArray; + this.fileSelectCallBack = fileSelectCallBack; + readyShowDialog(); + } + + public void selectFolder(FileSelectCallBack fileSelectCallBack) { + selectType = SelectType.FOLDER; + this.fileSelectCallBack = fileSelectCallBack; + readyShowDialog(); + } + + private void readyShowDialog() { + Context context = BaseDialog.getTopActivity(); + if (!(context instanceof Activity)) { + errorLog("请先完成 DialogX 组件的初始化,详情:https://github.com/kongzue/DialogX"); + return; + } + requestPermissions(context); + } + + /** + * 建议自行处理好权限问题,不要依赖 FileDialog 申请,原因是无法监听 onRequestPermissionsResult 的回调. + * 若实在懒得自己处理,请重写 activity 的 onRequestPermissionsResult(...) 方法, + * 并调用 FileDialog 实例的 onRequestPermissionsResult(...) 方法。 + * + * @param context activity 上下文 + */ + private void requestPermissions(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + // 先判断有没有权限 + if (Environment.isExternalStorageManager()) { + createDialog(); + } else { + Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); + intent.setData(Uri.parse("package:" + context.getPackageName())); + ((Activity) context).startActivityForResult(intent, REQUEST_PERMISSION_CODE); + } + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { + createDialog(); + } else { + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE); + } + } else { + createDialog(); + } + } + + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + if (requestCode == REQUEST_PERMISSION_CODE) { + readyShowDialog(); + } + } + + String path; + FileAdapter fileAdapter; + List selectPathList; + String title; + String baseTitle; + + private void createDialog() { + dialog = FullScreenDialog.build(); + dialog.setCustomView(new OnBindView(R.layout.layout_dialogx_file_select) { + + private TextView btnCancel; + private TextView txtDialogTitle; + private TextView btnSelect; + private TextView txtPath; + private ListView listFile; + private ImageView imgFileListScreenshot; + + @Override + public void onBind(FullScreenDialog dialog, View v) { + FileDialog.this.dialog = dialog; + + btnCancel = v.findViewById(R.id.btn_cancel); + txtDialogTitle = v.findViewById(R.id.txt_dialog_title); + btnSelect = v.findViewById(R.id.btn_select); + txtPath = v.findViewById(R.id.txt_path); + listFile = v.findViewById(R.id.list_file); + imgFileListScreenshot = v.findViewById(R.id.img_file_list_screenshot); + + if (title == null || title.length() == 0) { + if (selectType == SelectType.FILE) { + if (getMaxSelectionNumber() == 1) { + txtDialogTitle.setText(BaseDialog.getTopActivity().getResources().getText(R.string.dialogx_filedialog_title_file)); + } else { + baseTitle = BaseDialog.getTopActivity().getResources().getString(R.string.dialogx_filedialog_title_file); + txtDialogTitle.setText(baseTitle + "(0/" + getMaxSelectionNumber() + ")"); + } + } else { + txtDialogTitle.setText(BaseDialog.getTopActivity().getResources().getText(R.string.dialogx_filedialog_title_folder)); + } + } else { + txtDialogTitle.setText(title); + } + + btnCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + btnSelect.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getMaxSelectionNumber() == 1) { + fileSelectCallBack.onSelect(new File(path), path); + dialog.dismiss(); + } else { + if (selectPathList != null && selectPathList.size() != 0) { + File[] fileArray = new File[selectPathList.size()]; + String[] filePathArray = new String[selectPathList.size()]; + for (int i = 0; i < selectPathList.size(); i++) { + filePathArray[i] = selectPathList.get(i); + fileArray[i] = new File(selectPathList.get(i)); + } + fileSelectCallBack.onMultiSelect(fileArray, filePathArray); + dialog.dismiss(); + } else { + PopTip.show(R.string.error_dialogx_filedialog_no_file_selected_tip); + return; + } + } + } + }); + + if (selectType == SelectType.FILE && getMaxSelectionNumber() == 1) { + btnSelect.setFocusable(false); + btnSelect.setClickable(false); + btnSelect.setVisibility(View.INVISIBLE); + } + + dialog.setOnBackPressedListener(new OnBackPressedListener() { + @Override + public boolean onBackPressed(FullScreenDialog dialog) { + if (!Environment.getExternalStorageDirectory().getPath().equals(path)) { + if (path.contains("/")) { + String[] folders = path.split("/"); + if (folders.length > 2) { + path = ""; + for (int i = 0; i < folders.length - 1; i++) { + path = path + (i == 0 ? "" : "/") + folders[i]; + } + + Bitmap screenshot = screenshotView(listFile); + imgFileListScreenshot.setImageBitmap(screenshot); + + imgFileListScreenshot.setVisibility(View.VISIBLE); + imgFileListScreenshot.setX(0); + + refreshFileList(); + + listFile.setX(-listFile.getWidth()); + imgFileListScreenshot.animate().setInterpolator(new DecelerateInterpolator(2f)).x(listFile.getWidth()); + listFile.animate().setInterpolator(new DecelerateInterpolator(2f)).x(0); + } + } + return false; + } + return true; + } + }); + + loadFileList(); + } + + private void loadFileList() { + if (isNull(path)) { + path = Environment.getExternalStorageDirectory().getPath(); + } + fileAdapter = new FileAdapter(FileDialog.this, (Activity) BaseDialog.getTopActivity(), new ArrayList()); + listFile.setAdapter(fileAdapter); + listFile.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + view.setPressed(false); + String fileName = (String) fileAdapter.getItem(position); + if ("...".equals(fileName)) { + //返回上级 + if (path.contains("/")) { + String[] folders = path.split("/"); + if (folders.length > 2) { + path = ""; + for (int i = 0; i < folders.length - 1; i++) { + path = path + (i == 0 ? "" : "/") + folders[i]; + } + + Bitmap screenshot = screenshotView(listFile); + imgFileListScreenshot.setImageBitmap(screenshot); + + imgFileListScreenshot.setVisibility(View.VISIBLE); + imgFileListScreenshot.setX(0); + + refreshFileList(); + + listFile.setX(-listFile.getWidth()); + imgFileListScreenshot.animate().setInterpolator(new DecelerateInterpolator(2f)).x(listFile.getWidth()); + listFile.animate().setInterpolator(new DecelerateInterpolator(2f)).x(0); + } + } + } else { + boolean isFolder = fileName.startsWith("/"); + String itemPath = path + (isFolder ? "" : "/") + fileName; + if (isFolder) { + //点击文件夹 + Bitmap screenshot = screenshotView(listFile); + imgFileListScreenshot.setImageBitmap(screenshot); + + imgFileListScreenshot.setVisibility(View.VISIBLE); + imgFileListScreenshot.setX(0); + + path = itemPath; + refreshFileList(); + + listFile.setX(listFile.getWidth()); + imgFileListScreenshot.animate().setInterpolator(new DecelerateInterpolator(2f)).x(-listFile.getWidth()); + listFile.animate().setInterpolator(new DecelerateInterpolator(2f)).x(0); + } else { + //点击文件 + if (getMaxSelectionNumber() != 1) { + //多选 + if (selectPathList == null) { + selectPathList = new ArrayList(); + } + if (selectPathList.contains(itemPath)) { + selectPathList.remove(itemPath); + } else { + if (selectPathList.size() >= getMaxSelectionNumber()) { + PopTip.show(String.format( + BaseDialog.getTopActivity().getResources().getString(R.string.error_dialogx_filedialog_max_selection_tip), + String.valueOf(getMaxSelectionNumber()) + )); + return; + } + selectPathList.add(itemPath); + } + fileAdapter.notifyDataSetChanged(); + baseTitle = BaseDialog.getTopActivity().getResources().getString(R.string.dialogx_filedialog_title_file); + txtDialogTitle.setText(baseTitle + "(" + selectPathList.size() + "/" + getMaxSelectionNumber() + ")"); + } else { + //选择文件 + if (view.getAlpha() == 1f) { + dialog.dismiss(); + fileSelectCallBack.onSelect(new File(itemPath), itemPath); + } else { + PopTip.show(R.string.error_dialogx_filedialog_no_support_file_type_tip); + } + } + } + } + } + }); + refreshFileList(); + } + + private void refreshFileList() { + fileAdapter.setFileList(new ArrayList<>()); + fileAdapter.notifyDataSetChanged(); + new Thread() { + @Override + public void run() { + try { + ArrayList allFileArray = new ArrayList(); + ArrayList folderArray = new ArrayList(); + ArrayList fileArray = new ArrayList(); + + File file = new File(path); + File[] listFiles = file.listFiles(); + if (listFiles != null && listFiles.length != 0) { + for (File f : listFiles) { + if (f.isDirectory()) { + folderArray.add("/" + f.getName()); + } else { + fileArray.add(f.getName()); + } + } + } + if (!Environment.getExternalStorageDirectory().getPath().equals(path)) { + allFileArray.add("..."); + } + allFileArray.addAll(folderArray); + if (selectType == SelectType.FILE) { + allFileArray.addAll(fileArray); + } + ((Activity) BaseDialog.getTopActivity()).runOnUiThread(new Runnable() { + @Override + public void run() { + txtPath.setText(path); + fileAdapter.setFileList(allFileArray); + fileAdapter.notifyDataSetChanged(); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.start(); + } + }); + dialog.show(); + } + + public FullScreenDialog getDialog() { + return dialog; + } + + public FileDialog setDialog(FullScreenDialog dialog) { + this.dialog = dialog; + return this; + } + + private void errorLog(String msg) { + Log.e(">>>", "FileDialog: " + msg); + } + + public int getMaxSelectionNumber() { + return maxSelectionNumber; + } + + public FileDialog setMaxSelectionNumber(int maxSelectionNumber) { + this.maxSelectionNumber = maxSelectionNumber; + return this; + } + + public String getTitle() { + return title; + } + + public FileDialog setTitle(String title) { + this.title = title; + return this; + } + + private Bitmap screenshotView(View view) { + view.setDrawingCacheEnabled(true); + view.buildDrawingCache(true); + Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); + view.setDrawingCacheEnabled(false); + return bitmap; + } + + public FileDialog setMimeTypes(String[] mimeTypes) { + this.mimeTypes = mimeTypes; + return this; + } + + public FileDialog setSuffixArray(String[] suffixArray) { + this.suffixArray = suffixArray; + return this; + } + + public String[] getMimeTypes() { + return mimeTypes; + } + + public String[] getSuffixArray() { + return suffixArray; + } + + public String getPath() { + return path; + } + + public FileDialog setPath(String path) { + this.path = path; + return this; + } + + public FileDialog setPath(File folder) { + if (folder.isDirectory()) { + this.path = folder.getAbsolutePath(); + }else{ + this.path = folder.getParent(); + } + return this; + } + + public List getSelectPathList() { + return selectPathList; + } + + public boolean isShowFileDate() { + return showFileDate; + } + + public FileDialog setShowFileDate(boolean showFileDate) { + this.showFileDate = showFileDate; + return this; + } +} diff --git a/FileDialog/src/main/java/com/kongzue/filedialog/adapter/FileAdapter.java b/FileDialog/src/main/java/com/kongzue/filedialog/adapter/FileAdapter.java new file mode 100644 index 0000000..d7690c2 --- /dev/null +++ b/FileDialog/src/main/java/com/kongzue/filedialog/adapter/FileAdapter.java @@ -0,0 +1,217 @@ +package com.kongzue.filedialog.adapter; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.MimeTypeMap; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.kongzue.filedialog.FileDialog; +import com.kongzue.filedialog.R; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +/** + * @author: Kongzue + * @github: https://github.com/kongzue/ + * @homepage: http://kongzue.com/ + * @mail: myzcxhh@live.cn + * @createTime: 2022/3/3 14:48 + */ +public class FileAdapter extends BaseAdapter { + + private ArrayList fileList; + private LayoutInflater layoutInflater; + private Activity activity; + private FileDialog dialog; + + public FileAdapter(FileDialog dialog, Activity activity, ArrayList fileList) { + super(); + layoutInflater = activity.getLayoutInflater(); + this.dialog = dialog; + this.activity = activity; + this.fileList = fileList; + } + + @Override + public int getCount() { + return fileList.size(); + } + + public void setFileList(ArrayList fileList) { + this.fileList = fileList; + } + + public ArrayList getFileList() { + return this.fileList; + } + + @Override + public Object getItem(int position) { + return fileList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.item_dialogx_file_list, null); + } + if (convertView.getTag() instanceof ViewHolder) { + viewHolder = (ViewHolder) convertView.getTag(); + } else { + viewHolder = new ViewHolder(convertView); + convertView.setTag(viewHolder); + } + String fileName = fileList.get(position); + boolean isFolder = fileName.startsWith("/"); + String itemPath = dialog.getPath() + (isFolder ? "" : "/") + fileName; + + viewHolder.txtFileName.getPaint().setFakeBoldText(false); + if ("...".equals(fileName)) { + viewHolder.txtFileName.setText("..."); + viewHolder.imgIcon.setImageResource(R.drawable.ic_dialogx_filedialog_back); + viewHolder.btnHaveChild.setVisibility(View.GONE); + } else { + if (fileName.startsWith("/")) { + viewHolder.txtFileName.setText(fileName.substring(1)); + viewHolder.imgIcon.setImageResource(R.drawable.ic_dialogx_filedialog_folder); + viewHolder.btnHaveChild.setVisibility(View.VISIBLE); + } else { + viewHolder.txtFileName.setText(fileName); + if (dialog.getSelectPathList() != null && dialog.getSelectPathList().contains(itemPath)) { + viewHolder.imgIcon.setImageResource(R.drawable.ic_dialogx_filedialog_select); + viewHolder.txtFileName.getPaint().setFakeBoldText(true); + } else { + viewHolder.imgIcon.setImageResource(R.drawable.ic_dialogx_filedialog_file); + } + viewHolder.btnHaveChild.setVisibility(View.GONE); + } + } + + if ((dialog.getMimeTypes() != null && dialog.getMimeTypes().length != 0) || + dialog.getSuffixArray() != null && dialog.getSuffixArray().length != 0) { + if ("...".equals(fileName) || isFolder) { + convertView.setAlpha(1f); + } else { + if (isSelectMimeType(itemPath) || isSelectSuffix(itemPath)) { + convertView.setAlpha(1f); + } else { + convertView.setAlpha(0.3f); + } + } + } + + if (dialog.isShowFileDate() && !"...".equals(fileName)){ + viewHolder.txtDate.setText(getFileDate(activity,new File(itemPath))); + viewHolder.txtDate.setVisibility(View.VISIBLE); + }else{ + viewHolder.txtDate.setVisibility(View.GONE); + } + + return convertView; + } + + private boolean isSelectSuffix(String itemPath) { + if (dialog.getSuffixArray() != null && dialog.getSuffixArray().length != 0) { + for (String suffix : dialog.getSuffixArray()) { + if (itemPath.toLowerCase().endsWith(suffix.toLowerCase())) { + return true; + } + } + } + return false; + } + + private boolean isSelectMimeType(String itemPath) { + if (dialog.getMimeTypes() != null && dialog.getMimeTypes().length != 0) { + for (String mime : dialog.getMimeTypes()) { + if (mime.toUpperCase().equals(getMimeType(new File(itemPath)).toUpperCase())) { + return true; + } + } + } + return false; + } + + private String getFileDate(Context context,File file) { + Date lastModified = new Date(file.lastModified()); + Calendar fileCal = Calendar.getInstance(); + fileCal.setTime(lastModified); + + Calendar today = Calendar.getInstance(); + Calendar yesterday = Calendar.getInstance(); + yesterday.add(Calendar.DATE, -1); + + SimpleDateFormat dateFormat = new SimpleDateFormat(context.getString(R.string.dialogx_filedialog_default_date_format)); + + if (fileCal.get(Calendar.YEAR) == today.get(Calendar.YEAR) + && fileCal.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR)) { + SimpleDateFormat timeFormat = new SimpleDateFormat(context.getString(R.string.dialogx_filedialog_default_date_format_today)); + return timeFormat.format(lastModified); + } else if (fileCal.get(Calendar.YEAR) == yesterday.get(Calendar.YEAR) + && fileCal.get(Calendar.DAY_OF_YEAR) == yesterday.get(Calendar.DAY_OF_YEAR)) { + SimpleDateFormat timeFormat = new SimpleDateFormat(context.getString(R.string.dialogx_filedialog_default_date_format_yesterday)); + return timeFormat.format(lastModified); + } else { + return dateFormat.format(lastModified); + } + } + + private String getMimeType(File file) { + String suffix = getSuffix(file); + if (suffix == null) { + return "file/*"; + } + String type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(suffix); + if (type != null && !type.isEmpty()) { + return type; + } + return "file/*"; + } + + private String getSuffix(File file) { + if (file == null || !file.exists() || file.isDirectory()) { + return null; + } + String fileName = file.getName(); + if (fileName.equals("") || fileName.endsWith(".")) { + return null; + } + int index = fileName.lastIndexOf("."); + if (index != -1) { + return fileName.substring(index + 1).toLowerCase(Locale.US); + } else { + return null; + } + } + + class ViewHolder { + + ImageView imgIcon; + TextView txtFileName; + TextView txtDate; + ImageView btnHaveChild; + + public ViewHolder(View convertView) { + imgIcon = convertView.findViewById(R.id.img_icon); + txtFileName = convertView.findViewById(R.id.txt_fileName); + txtDate = convertView.findViewById(R.id.txt_date); + btnHaveChild = convertView.findViewById(R.id.btn_have_child); + } + } +} diff --git a/FileDialog/src/main/java/com/kongzue/filedialog/interfaces/FileSelectCallBack.java b/FileDialog/src/main/java/com/kongzue/filedialog/interfaces/FileSelectCallBack.java new file mode 100644 index 0000000..9a2bfa0 --- /dev/null +++ b/FileDialog/src/main/java/com/kongzue/filedialog/interfaces/FileSelectCallBack.java @@ -0,0 +1,18 @@ +package com.kongzue.filedialog.interfaces; + +import java.io.File; + +/** + * @author: Kongzue + * @github: https://github.com/kongzue/ + * @homepage: http://kongzue.com/ + * @mail: myzcxhh@live.cn + * @createTime: 2022/3/3 13:04 + */ +public abstract class FileSelectCallBack { + + public void onSelect(File file,String filePath){}; + + public void onMultiSelect(File[] file,String[] filePath){}; + +} diff --git a/FileDialog/src/main/java/com/kongzue/filedialog/util/FileListView.java b/FileDialog/src/main/java/com/kongzue/filedialog/util/FileListView.java new file mode 100644 index 0000000..d682faa --- /dev/null +++ b/FileDialog/src/main/java/com/kongzue/filedialog/util/FileListView.java @@ -0,0 +1,69 @@ +package com.kongzue.filedialog.util; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.ListView; + +import com.kongzue.dialogx.interfaces.ScrollController; + +/** + * @author: Kongzue + * @github: https://github.com/kongzue/ + * @homepage: http://kongzue.com/ + * @mail: myzcxhh@live.cn + * @createTime: 2022/3/3 23:45 + */ +public class FileListView extends ListView implements ScrollController { + public FileListView(Context context) { + super(context); + } + + public FileListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public FileListView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + boolean lockScroll; + + @Override + public boolean isLockScroll() { + return lockScroll; + } + + public void lockScroll(boolean lockScroll) { + this.lockScroll = lockScroll; + } + + @Override + public int getScrollDistance() { + View c = getChildAt(0); + if (c == null) { + return 0; + } + int firstVisiblePosition = getFirstVisiblePosition(); + int top = c.getTop(); + int scrollY = -top + firstVisiblePosition * c.getHeight(); + return scrollY; + } + + @Override + public boolean isCanScroll() { + return true; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (lockScroll) { + return false; + } + return super.onTouchEvent(ev); + } +} diff --git a/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_back.xml b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_back.xml new file mode 100644 index 0000000..ec3b692 --- /dev/null +++ b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_back.xml @@ -0,0 +1,11 @@ + + + diff --git a/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_file.xml b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_file.xml new file mode 100644 index 0000000..76d5966 --- /dev/null +++ b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_file.xml @@ -0,0 +1,11 @@ + + + diff --git a/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_folder.xml b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_folder.xml new file mode 100644 index 0000000..bc28b9f --- /dev/null +++ b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_folder.xml @@ -0,0 +1,11 @@ + + + diff --git a/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_right.xml b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_right.xml new file mode 100644 index 0000000..2a78783 --- /dev/null +++ b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_right.xml @@ -0,0 +1,11 @@ + + + diff --git a/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_select.xml b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_select.xml new file mode 100644 index 0000000..b7a8ef2 --- /dev/null +++ b/FileDialog/src/main/res/drawable-anydpi/ic_dialogx_filedialog_select.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_back.png b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_back.png new file mode 100644 index 0000000000000000000000000000000000000000..adf3832ba2e5c1f00b1afe268dcdb20b73fcba4a GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB8a-VcLn`9lUOmX!V8GM*Q16Cm zjPv)5TcI%r7UnoOE?R0SGWpQ&2eBb9_-!Sa7yKytDk?Zl<(McFR(1UY;xc;`+znLU6)Knuk5xJ k8uw@KSX6U_!QnXPY0DEO`D%ZT10BQQ>FVdQ&MBb@077C(uK)l5 literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_file.png b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_file.png new file mode 100644 index 0000000000000000000000000000000000000000..371e4b1be6b7709dd96364aff5adf29ab385d93b GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$Nb9JY5_^D&pQwJIH&;K!D|PmnY{J z7iJL$aXRlx^~f-rZtOvnspYPY0e0ltRQq%XNB3S%z(z? zg=u$wf46j9xw=qq!A1tlixCZTGISjLOvDt_rMM>u_p+YoJjV3IC7H2k5q@bad%J5) zkGX$V%NHJgy-V3>=a=_}_3yQVrhJ^vb=8o4|0$N6_1~V$hshQIJgTe~DWM4f DcJXo! literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_folder.png b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..43940bd69b5bae97741ecebf87e40f527642c755 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBPIP1 zw-#_;X3uM2T5&9s!Otns!uzAZwYs|=zfVPN_WJa}gw@etMzPj(%c;LLr=}ZkfBNdY z_eR61Tc*xie6J~n)3d5~m5Xfh{?=N-{SUe8GhE8te}3w?G5eEs*f!VyKDCviM+ zQWZSW>ZLS+d#a0qxK^iwUWia*%nB8zodKRKxD^yf$=!amAZ35@(+jHq&%e1R(R+SH l^7Oy=C(TZ7Qh0HI``*!yzOSy8tO5Fp!PC{xWt~$(698`~YQO*h literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_right.png b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_right.png new file mode 100644 index 0000000000000000000000000000000000000000..ae21eec9c975e3e63cea13c90d3d5ac0cadb8e25 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBVm)0PLn`9lo;%2Sz<|TyqRxz& zw`{NUT7|q)3}|VQ@zQ!~|6xJJkEIL@_Y{?u&y@Z6kF!7U>S=Y?E5;owBo~DVZqW+pK_I4|{h$LUYa2WR&IEn@I=^>bP0l+XkKX{|VL literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_select.png b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_select.png new file mode 100644 index 0000000000000000000000000000000000000000..f0f80d99abdef13f36b0551df330d62645246d73 GIT binary patch literal 537 zcmV+!0_OdRP)d>A6t)O(qj$TMN(+o@RW5Z)v{O z+N<_v4G6WFxh@yYzeqwg2by@hn*$wZR#^xn08^@S*^T)@Vx{dg+dPnn!|5=_CboEO?`a2%7s9|`@z#>XD`1@Ebp3RRyZ%qF zeah=$>~4!*6E3k!mIk!}##+}{GQWc)PJ-GDV;u$xTzr#IOfWF+uOn@=PK08FL9Xed zo`d3qQJ12g+xAf??~%0y##tsFj6M_<1B^WwF%aztI}XJG17Gq_*U`{E6c>!>FIQ;U z^Wzta5oY}SfYN6P*0uY+#sXt@7uBCUVIvMcVIe%YX>e{wANjqOE!{Q;mx{_91JUb* z(ScJwDg@@7sn98(q#QLhTQhU|SAWM0%}7000000NkvXXu0mjfEbZ^y literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_back.png b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_back.png new file mode 100644 index 0000000000000000000000000000000000000000..f14ec745937e4fbe174ef9c1924d113ac7b729bc GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj@t!V@Ar*1S2@D`OMMtlmzo3MvjP`=%4^@&&J{vHc)n#Bb@m?YA zVqlQP>DlmZ8iRL;W=Z8Lh83z?J|5IqAj!bsEPHm^?%jRYfL1Yhy85}Sb4q9e0FbXT Ac>n+a literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_file.png b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_file.png new file mode 100644 index 0000000000000000000000000000000000000000..51b60b8ef21137d413cc44c3448a13a60a4b8962 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj(>+}rLn`9#PQA$MU?9P^wn>mD zqx+V#xIsgv$-R|JI%{0le?6l5zx&SD>X6X=i%qk`XQ$?zF|xn+pek3eI%o0mck5DA zj{N$2X7$83jdvz4YMe9i5u??oEQO1*34sS>#aQno;-_MB?}$8U+Waf7<$r3`Mg0)2Op^mVLI2Cpf+}^Nip0sQ>*(q&kuk+!4=!Rw|7HbU`+*GQ^VLka7FMi)H&Q&Uom^-8P dO*ARL l35K5yX>I*Yfer!;467$*z6|Y7X#*P0;OXk;vd$@?2>^>MFc$y- literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_select.png b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_select.png new file mode 100644 index 0000000000000000000000000000000000000000..a002cc3b01dd1329ec02f833fcb139f555baf7af GIT binary patch literal 399 zcmV;A0dW3_P)H=Kd+vgoh_imDge(|7=maUA*KEg7 zLJph|YW?nNHGH`}{0gDQ6CML2S7vs)fV2AMG_bQa t3eRB9vYe-cZDE`f8BDx=marES{sX*!H(z7U1{nYV002ovPDHLkV1n~9qc#8l literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_back.png b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_back.png new file mode 100644 index 0000000000000000000000000000000000000000..c9144820a1552d0ec22a444110e01b36d79ce187 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtS)MMAAr*0NFCXM=FyL`}nD^Mk z?=b`4r4ljO0}Hn-P*^CZl_69i|3t}l&;JB328J3Jmt#Sv*6eQ&c-(*cRjYJi|NhQ-xLd_R4t5TEzL4-Tt04HB}1x^HfIASdKy95MM&)pB+0J{&oXh$>8bg K=d#Wzp$P!cHdEpN literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_file.png b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_file.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dcc540caa1e53d9dbbb37aab1d6e2ed08165bb GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FnW8sIEGZjy`8y{_mG1COJ)Px z2_D8&Cq|1SE+&oK4NNPJi5cE_DRslRN1pSqhxlBR&+3y6XQvuTp8i!4y@v1Xx)rl7 zZ^~L1e|F*B74<>aj{n}X;@0N}iuZj^DNp-dW?jKxxU$co&TPHfQ9-GzwIW|tteu*7 z^)H&2;-2C2J@AV0jFo*CCcIm`;`vLT!WOp@c~@Kgb~`6#kdp1ratn*@x(D{lzTyyl zZP!)hZE6YsI`5E7DDNTxj@Su#oZnLnr2Yhg;e9v~%-T@QX`*kkd1H zU>lQhpqgw2ae-UKr>f0~x^FzoFUU@C`K%xy>!19o_?p&zH@APamA}|+l{xdpgk7_R fs%z9fKeu6UwbB=wnCrR~7`hCeu6{1-oD!Mm>vI}b@%J< zRd4-EZ{NRAa`@VMbM4uWlOwktR^?QlTrB)G@rJ77exG%|f4QB@4_;< zw=uu21^!`L+B5gG=j;zjiI;!eYY|*IW8?Xg-_>ft*gqLE8v{ z=IRX!Y~K?cdEOmtlDN~%YDl7jQ0thzAs6P<<{x^!FwI3Lbzl7I8&3l}^AFBai_MYz smhiVuIDLOW+s3xEq8gyjK7`vaa_w`N*wC6P01PSyPgg&ebxsLQ05y7xvH$=8 literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_right.png b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_right.png new file mode 100644 index 0000000000000000000000000000000000000000..5da1b43965c0731bc2c0635600c1fccdce165109 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt22U5qkczms*A8+v7znsrEJ-#E zOJ=;~J}GJoLwC`40S-&<-OT?T^(GybFWM*q)bMA~wW_c8&VSv_(x1O}Z`~8Oh!2L3 zRNW)qr0IV!P?A#Kl;9%PbHb^vg@40?YS{<-F9T=5qY#&K>lP>`OP1Ra*E>i gKR9ky08Mk0H%KVHJn?n(dmx9w)78&qol`;+0Ijh_ng9R* literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_select.png b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_select.png new file mode 100644 index 0000000000000000000000000000000000000000..9051c1781eeeba3bb2993818972eaf5ba94503a1 GIT binary patch literal 702 zcmV;v0zv(WP)lz+Y0N48Q^m00Y1P3;+Yb5;*0fpJf0#01Uu1O(O9JIVVQxv*Xx~{ZdXk zRjM8P&VGKj)2>z#P;7tB^0K*Ji^F{;s@F^$-g9yI8WP{340TW!&(L;QAw_TM+gwyT zD%PFtv)pEiZF8QB`k@`o4_#0g(H3R~ZPWguq7RX1!YP#z+V5->;=7m^D!#0C(Pkst zG&dOnPh!ObxWK?=(OV1u>yOK$;4t5vD`em-@g3#!u9c%Q zf_PBw&g|JIl6X*NBivJI!3g(;@BA21JP7S8(*<1POZALS@Trx#GO~CO+E?^TjlFn< zAQK71E7}bZ@d{oh5{d`y2FmJ*cB0z_B1*d6e^ga0(`Z#VcUymRJ+$(>rX&Ab;HE z%ue!H?zmum(Ere#Y&N>KC-VGUU}Rz&L0c?;H5fu30I|sDgjV}3+RzSW+<*WqIQ4g% k-29?ok22Ij-B_Z30fXHwIbF1+0RR9107*qoM6N<$f?ASCng9R* literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_back.png b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_back.png new file mode 100644 index 0000000000000000000000000000000000000000..1260fb71cb50c260f4f943b5f6f7d4e5f7046878 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U}X1naSW-5dwao=t0_RBz3}>0 zJ*$`tN-Mm7irnM%TH#%?qUMQHo78{q)|7qnJRMfuKUaawV-SeCY%<;Go9!z9IlI=y zr~Z1r_^;e83%-dx`Gp-OA0F|1K4Y2xHjcw-j{EIx?7PL83T2KI`W*GtEIsnmP}T4M z`E&1D9c0)+q5{Vq(HK5Qe_r2Mu9LL3@YIdywC&FcH$e|?#OJF>f?)A zJigEQeD7VWlM3TR78fA_PX}BKj){4(*K^;*X$VjB`}TiAor}`B8J#Y3@_!jzpK|Hu eK6a32j(lQ^c|Y5H&s?{2Ag-sYpUXO@geCwgK7T&| literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_file.png b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_file.png new file mode 100644 index 0000000000000000000000000000000000000000..198a3743ecce439c3020cb24e3b4c6304d2dd3da GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U~=|!aSW-5dppO`Pufw0b*BU0 z!JHz=9S(Yvqi>vSQnmE;6K*d}TI}X@)#Jkhf8YKWlkTlss#Sl}d&jO>K5COsJ_+6= zBcC_z@XI>OKR@^W>RbN)3;*fsyX)h(9JaY1*SFG&CTx8*N0y= zbKgr^EVq*TZjrLw%I=)UySZLe6fTxs$$jUS1CZ*Le&{g0w`hspn%?(X3m#wXEm)$r z3e5Dq{mUaZK>B{D!|~bMpHAF0!))K`hQ5qwpw>)~DIMF7PTbW27A!w&7bJe+Sh?th zkMCx>zj~5e6V50rKdW?!-yN{vLrM2nOTdDnixl7?eIr=Ro*E|8cF~E0aF!&r>mdKI;Vst095lG AhX4Qo literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_folder.png b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..abdae7ad5e7ec2237f53cf47d36140edd3f23cac GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U_9>W;uum9_jb0UACsd9>&}Mu z1hY7|^G|dg#PvR!%sa-JE$iXo@s(+f!H;Esr~b)x{QKp??8L2FU5hjzNJ(hU$Z*Ew8R%rT`dp-HSC+2M4 zqH4Yj!Txe&z|)*{NkyqxrN8St`&9Dm2oJ-csEU$GyUzI2<;$f&Jq!%?xe{%^cYQmzXiCxR-~aad zEjeb^=h3^@LaFv@)OqiYbZNIGy_vJtd3S^ZS-ca4T)YG{9hb0RFqj`(#Cd6M?Ntg; z_w$(3V8K|(^oZpMXNRzWx`LkrMBuZ{{3DhRDiss;Ct38Gc37}av*0fTIilhJXGW+0 V%BR;g>#hg!Jzf1=);T3K0RTSWSnmJ; literal 0 HcmV?d00001 diff --git a/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_select.png b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_select.png new file mode 100644 index 0000000000000000000000000000000000000000..456d5d240a77e9024aa5aa6fd49e1bc5a75b310b GIT binary patch literal 1604 zcmV-K2D|x*P)5Cji7{*6XyiY{L1MFjWoMHCc_Czox5ZvftYGt(nFVmbdTX^I%iqJV zbHnCVFNmIT7=PCZ_%yHpEV@B-0>QsKzfEHtjOzu>d&j2vwKPBLg@$;Hzu?xzEL48E zYr+65cTC;s&8+zJdREA7#1}eDJPvpNyOatR3*+-(*7l8G$LG>=7^m?@bg9e4%WlAr zDitXiFzI(U*Fq2)3{@-a#&cm=>C7(GqPSDCQmgckEdN1g@3+jF20D?qZExbTDQm!Q7MGkK$(Amm&gWMpF)L$ zHRu5Up%=FYehhCgtydv(1M#GKK|Aq6aSyHEK!VPA8@-6l;8OtHM(deNJ`;Dl_2@r( z5!(TS{vHp-jkLa*gmWFc`<(tj$9)6_xR=p-YiV;MKEu!fV4*+*_-g7%d^)ZFx`Iym z6`I-TB3`2P@2jyrVw0MQec&SmPrkRlHXYICKuxK;O~8E zcoKZn;y6By`k~06S@{6)rQXG~wn@=mHC_@wj2`OsLJ`ha@byO%+C{tN(7M4(=NxP$ zYWxI;`gYiEC|*oSWD)7+bcH5$mVQ&xb_knWX*#Ki+4%e_RsxGccF5t%7_Ao-J|#3Q z$!CG4k%CvGfo^lv#`P0ht;K|N>G^hsb+zL}=Q`PMfyq8$`#PAAW|5{V~*l?gSH z4U}Py%=b?m?yP3uF#fz6$!z32N@HIP&4IWLntnaJ2ESu96OGrOSulRMoR)J6kBQf1 zCR-Nbv#nar0CRM9D+VzK!A(z@k;huM(m-?JzfMe_bch#YE7Bo${O)|=y z_TCx3=9g%|T4XUP>*5=}EKD*-0ynJYvgl_epbur3gy#6ut*dBys-c<_$a4LJ9c!+G zmOA|rN}d}`N#6y{@#?LsX}UB)+|OwGQek{P_eHa`Bs}L#)3@``YdN^fo41^U0Cn6A zEl9jd19Zt^5*`aqrZw9f3AFwi&Nq~R4CFD%3Uh+aY@w)aX5Bu?tMf;-`22Jy; z1je_m779B|CBgvYX-USkoHqa75X2WJ3J5=bkrFXCSxhp_9OOe<#!^nQ>X?Kt3B$}e z;WIu(%UQ$kt+Fnj>Cn$4`37atM>I{v99;7V4BW|`DG3H9%_Kw3!PfIgZ#fg1oQW^N zH4vJp2zpI2)f`;j!2Xc>l2G|a@Wh=Si#||)uO4`Uwo^Y8wKw~t12pldf(K18Ke837aVVlgzH<`n65R^%P3{ zsJAOz408)uq8&CcN?yd{&a^(ING`D1bnu+ + + + \ No newline at end of file diff --git a/FileDialog/src/main/res/layout/item_dialogx_file_list.xml b/FileDialog/src/main/res/layout/item_dialogx_file_list.xml new file mode 100644 index 0000000..b6f7523 --- /dev/null +++ b/FileDialog/src/main/res/layout/item_dialogx_file_list.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FileDialog/src/main/res/layout/layout_dialogx_file_select.xml b/FileDialog/src/main/res/layout/layout_dialogx_file_select.xml new file mode 100644 index 0000000..5105dc0 --- /dev/null +++ b/FileDialog/src/main/res/layout/layout_dialogx_file_select.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FileDialog/src/main/res/values/strings.xml b/FileDialog/src/main/res/values/strings.xml new file mode 100644 index 0000000..959f4ac --- /dev/null +++ b/FileDialog/src/main/res/values/strings.xml @@ -0,0 +1,13 @@ + + + 选择文件 + 选择文件夹 + 选择 + 取消 + 最多可选择 %s 个文件 + 不支持此文件类型 + 请选择文件 + yyyy年M月d日 HH:mm + 今天 HH:mm + 昨天 HH:mm + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0173504..1695115 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -130,5 +130,6 @@ dependencies { implementation 'com.github.li-xiaojun:XPopup:v2.2.23' implementation project(path: ':AlbumDialog') + implementation project(path: ':FileDialog') implementation project(path: ':TimePickerDialog') } diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/GacApplication.java b/app/src/main/java/com/tairui/gov_affairs_cloud/GacApplication.java index 3dadc0d..298d16e 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/GacApplication.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/GacApplication.java @@ -47,9 +47,9 @@ public class GacApplication extends Application { private void initHttp() { HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(); OkHttpClient okHttpClient = new OkHttpClient.Builder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(10, TimeUnit.SECONDS) - .writeTimeout(10, TimeUnit.SECONDS) + .connectTimeout(60, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) + .writeTimeout(60, TimeUnit.SECONDS) .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager) .hostnameVerifier((hostname, session) -> true) .dns(new ApiDns()) diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Api.java b/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Api.java index 43f07b8..037e0a9 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Api.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Api.java @@ -28,7 +28,8 @@ public class Api { */ public static final String STR_AUTHORIZATION = "Authorization"; - public static final String UPDATE_APP = BASE_HOST + "/checkUpdate"; + public static final String UPDATE_APP = BASE_HOST + "/user-center/appVersionManager/getLastestVesion"; + public static final String ADD_APP = BASE_HOST + "/user-center/appVersionManager/addVersionInfo"; public static final String LOGIN = BASE_HOST + "/auth/app/login"; public static final String LOGOUT = BASE_HOST + "/auth/logout"; diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Constant.java b/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Constant.java index 2e99526..a73043d 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Constant.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/entity/Constant.java @@ -8,6 +8,8 @@ public class Constant { public static String LOGIN_USER_NAME = "login_user_name"; + public static String SELECT_AREA = "select_area"; + public static String SELECT_REGION = "select_region"; public static String SELECT_GRID = "select_grid"; diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/entity/UpdateEntity.java b/app/src/main/java/com/tairui/gov_affairs_cloud/entity/UpdateEntity.java new file mode 100644 index 0000000..dfb044f --- /dev/null +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/entity/UpdateEntity.java @@ -0,0 +1,107 @@ +package com.tairui.gov_affairs_cloud.entity; + +import com.google.gson.annotations.SerializedName; + +public class UpdateEntity { + + @SerializedName("id") + private Integer id; + @SerializedName("versionCode") + private String versionCode; + @SerializedName("versionName") + private String versionName; + @SerializedName("versionDesc") + private String versionDesc; + @SerializedName("downloadUrl") + private String downloadUrl; + @SerializedName("forceUpdate") + private String forceUpdate; + @SerializedName("phoneType") + private String phoneType; + @SerializedName("upTime") + private String upTime; + @SerializedName("createTime") + private String createTime; + @SerializedName("createUser") + private Integer createUser; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getVersionCode() { + return versionCode; + } + + public void setVersionCode(String versionCode) { + this.versionCode = versionCode; + } + + public String getVersionName() { + return versionName; + } + + public void setVersionName(String versionName) { + this.versionName = versionName; + } + + public String getVersionDesc() { + return versionDesc; + } + + public void setVersionDesc(String versionDesc) { + this.versionDesc = versionDesc; + } + + public String getDownloadUrl() { + return downloadUrl; + } + + public void setDownloadUrl(String downloadUrl) { + this.downloadUrl = downloadUrl; + } + + public String getForceUpdate() { + return forceUpdate; + } + + public void setForceUpdate(String forceUpdate) { + this.forceUpdate = forceUpdate; + } + + public String getPhoneType() { + return phoneType; + } + + public void setPhoneType(String phoneType) { + this.phoneType = phoneType; + } + + public String getUpTime() { + return upTime; + } + + public void setUpTime(String upTime) { + this.upTime = upTime; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public Integer getCreateUser() { + return createUser; + } + + public void setCreateUser(Integer createUser) { + this.createUser = createUser; + } +} diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/MainActivity.java b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/MainActivity.java index 9190a28..61823b0 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/MainActivity.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/MainActivity.java @@ -15,12 +15,14 @@ import com.tairui.gov_affairs_cloud.base.adapter.TabFragmentPagerAdapter; import com.tairui.gov_affairs_cloud.databinding.ActivityMainBinding; import com.tairui.gov_affairs_cloud.entity.Api; import com.tairui.gov_affairs_cloud.entity.TabEntity; +import com.tairui.gov_affairs_cloud.entity.UpdateEntity; import com.tairui.gov_affairs_cloud.http.OnError; import com.tairui.gov_affairs_cloud.ui.ai.AiFragment; import com.tairui.gov_affairs_cloud.ui.home.HomeFragment; import com.tairui.gov_affairs_cloud.ui.my.MyFragment; import com.tairui.gov_affairs_cloud.ui.todo.TodoFragment; import com.tairui.gov_affairs_cloud.ui.workspace.WorkSpaceFragment; +import com.tairui.gov_affairs_cloud.util.AppUtil; import com.tairui.gov_affairs_cloud.util.DownloadUtil; import com.tairui.gov_affairs_cloud.util.LogUtil; import com.tairui.gov_affairs_cloud.util.NetUtil; @@ -137,19 +139,25 @@ public class MainActivity extends BaseActivity { @Override protected void onApplyData() { - super.onApplyData(); + // getAppVersionInfo(); } /** * 获取线上APP的版本信息 */ private void getAppVersionInfo() { - RxHttp.get(Api.UPDATE_APP) - .asResponse(Object.class) + RxHttp.postJson(Api.UPDATE_APP) + .add("phoneType", "1") + .add("platform", "1") + .asResponse(UpdateEntity.class) .as(RxLife.asOnMain(this)) .subscribe(data -> { - //TODO - + int currentVersionCode = AppUtil.getVersionCode(mContext); + int onlineVersionCode = Integer.parseInt(data.getVersionCode()); + if (onlineVersionCode > currentVersionCode) { + int grade = Integer.parseInt(data.getForceUpdate()); + showUpdateDialog(grade, AppUtil.getImageUrl(data.getDownloadUrl()), data.getVersionDesc()); + } }, (OnError) error -> { LogUtil.e("getAppVersionInfo", error.getErrorMsg()); }); diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/input/UtilizationControlActivity.java b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/input/UtilizationControlActivity.java index 52a4192..18f0e1b 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/input/UtilizationControlActivity.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/input/UtilizationControlActivity.java @@ -77,7 +77,9 @@ public class UtilizationControlActivity extends BaseActivity { setGone(binding.landTotalChart, false); binding.landItemChart.setLoading(true); setGone(binding.landItemChart, true); - LandOverviewEntity.ListEntity item = landOverviewAdapter.getData().get(i); - getItemLandData(item.getLandTypeId()); + // LandOverviewEntity.ListEntity item = landOverviewAdapter.getData().get(i); + // getItemLandData(item.getLandTypeId()); + generateSubAreaData(i); } + }); } + private void generateSubAreaData(int index) { + List strXList = new ArrayList<>(); + List> dataList = new ArrayList<>(); + if (index == 1) { + List list = new ArrayList<>(); + list.add(new BarBean(13.98f, "水田")); + dataList.add(list); + strXList.add("水田"); + + list = new ArrayList<>(); + list.add(new BarBean(52.05f, "旱地")); + dataList.add(list); + strXList.add("旱地"); + + list = new ArrayList<>(); + list.add(new BarBean(33.01f, "水耕地")); + dataList.add(list); + strXList.add("水耕地"); + } else if (index == 2) { + List list = new ArrayList<>(); + list.add(new BarBean(13.98f, "果园")); + dataList.add(list); + strXList.add("果园"); + + list = new ArrayList<>(); + list.add(new BarBean(52.05f, "茶园")); + dataList.add(list); + strXList.add("茶园"); + + list = new ArrayList<>(); + list.add(new BarBean(33.01f, "橡胶园")); + dataList.add(list); + strXList.add("橡胶园"); + + list = new ArrayList<>(); + list.add(new BarBean(33.01f, "其他园地")); + dataList.add(list); + strXList.add("其他园地"); + }else if (index == 3) { + List list = new ArrayList<>(); + list.add(new BarBean(58.32f, "灌木林地")); + dataList.add(list); + strXList.add("灌木林地"); + + list = new ArrayList<>(); + list.add(new BarBean(61.75f, "竹林地")); + dataList.add(list); + strXList.add("竹林地"); + + list = new ArrayList<>(); + list.add(new BarBean(59.28f, "乔木林地")); + dataList.add(list); + strXList.add("乔木林地"); + + list = new ArrayList<>(); + list.add(new BarBean(57.64f, "红树林地")); + dataList.add(list); + strXList.add("红树林地"); + + list = new ArrayList<>(); + list.add(new BarBean(62.19f, "森林沼泽")); + dataList.add(list); + strXList.add("森林沼泽"); + + list = new ArrayList<>(); + list.add(new BarBean(56.47f, "灌木沼泽")); + dataList.add(list); + strXList.add("灌木沼泽"); + + list = new ArrayList<>(); + list.add(new BarBean(48.35f, "其他林地")); + dataList.add(list); + strXList.add("其他林地"); + } + binding.landItemChart.setLoading(false); + binding.landItemChart.setData(dataList, strXList); + } + private void getItemLandData(String pid) { RxHttp.get(Api.LAND_SUB_AREA) .add("pid", pid) - .asResponseList(LandOverviewEntity.ListEntity.class) + .asResponse(ItemLandEntity.class) .as(RxLife.asOnMain(this)) .subscribe(data -> { - initSubAreaChart(data); + initSubAreaChart(data.getData()); }, (OnError) error -> showToast(error.getErrorMsg())); } @Override protected void onApplyData() { - getLandOverViewData(); + // getLandOverViewData(); + generateData(); } private void getLandOverViewData() { @@ -100,6 +182,45 @@ public class LandActivity extends BaseActivity { }, (OnError) error -> showToast(error.getErrorMsg())); } + private void generateData() { + List list = new ArrayList<>(); + List chartDataList = new ArrayList<>(); + LandOverviewEntity.ListEntity totalItem = new LandOverviewEntity.ListEntity(); + totalItem.setLandTypeName("土地总"); + totalItem.setArea(575.55F); + totalItem.setLandTypeId("-1"); + list.add(totalItem); + + LandOverviewEntity.ListEntity item1 = new LandOverviewEntity.ListEntity(); + item1.setLandTypeName("耕地"); + item1.setArea(142.19f); + item1.setLandTypeId("1"); + list.add(item1); + chartDataList.add(new RoseBean(142.19f, "耕地")); + + LandOverviewEntity.ListEntity item2 = new LandOverviewEntity.ListEntity(); + item2.setLandTypeName("园地"); + item2.setArea(44.69f); + item2.setLandTypeId("2"); + list.add(item2); + chartDataList.add(new RoseBean(44.69f, "园地")); + + LandOverviewEntity.ListEntity item3 = new LandOverviewEntity.ListEntity(); + item3.setLandTypeName("林地"); + item3.setArea(404f); + item3.setLandTypeId("3"); + list.add(item3); + chartDataList.add(new RoseBean(404f, "林地")); + + binding.recycleView.setLayoutManager(new GridLayoutManager(mContext, 2)); + binding.recycleView.addItemDecoration(new GridSpacingItemDecoration(2, DensityUtils.dp2px(mContext, 10), true)); + landOverviewAdapter.setNewData(list); + binding.recycleView.setAdapter(landOverviewAdapter); + + binding.landTotalChart.setData(RoseBean.class, "count", "ClassName", chartDataList); + binding.landTotalChart.setLoading(false);//是否正在加载,数据加载完毕后置为false + } + private void initView(LandOverviewEntity overviewEntity) { List chartDataList = new ArrayList<>(); for (LandOverviewEntity.ListEntity listEntity : overviewEntity.getList()) { @@ -121,10 +242,10 @@ public class LandActivity extends BaseActivity { binding.recycleView.setAdapter(landOverviewAdapter); } - private void initSubAreaChart(List data) { + private void initSubAreaChart(List data) { List strXList = new ArrayList<>(); - List> dataList = new ArrayList<>( ); - for (LandOverviewEntity.ListEntity entity : data) { + List> dataList = new ArrayList<>(); + for (ItemLandEntity.DataEntity entity : data) { List list = new ArrayList<>(); list.add(new BarBean(entity.getArea(), entity.getLandTypeName())); dataList.add(list); diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/LandResouceInfoActivity.java b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/LandResouceInfoActivity.java index 9835552..9654552 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/LandResouceInfoActivity.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/LandResouceInfoActivity.java @@ -7,12 +7,14 @@ import org.greenrobot.eventbus.EventBus; import com.bigkoo.pickerview.builder.OptionsPickerBuilder; import com.bigkoo.pickerview.view.OptionsPickerView; +import com.orhanobut.hawk.Hawk; import com.rxjava.rxlife.RxLife; import com.tairui.gov_affairs_cloud.base.BaseActivity; import com.tairui.gov_affairs_cloud.base.BaseFragment; import com.tairui.gov_affairs_cloud.base.adapter.TabFragmentPagerAdapter; import com.tairui.gov_affairs_cloud.databinding.ActivityLandResourceInfoBinding; import com.tairui.gov_affairs_cloud.entity.Api; +import com.tairui.gov_affairs_cloud.entity.Constant; import com.tairui.gov_affairs_cloud.entity.EventConstant; import com.tairui.gov_affairs_cloud.entity.EventMessage; import com.tairui.gov_affairs_cloud.http.OnError; @@ -37,6 +39,7 @@ public class LandResouceInfoActivity extends BaseActivity landAreaRegionData = new ArrayList<>(); private List landResourceTypeData = new ArrayList<>(); private LandAreaRegionEntity selectRegion; + private LandAreaRegionEntity selectArea; private OptionsPickerView landRegionPickerView; @Override @@ -57,9 +60,22 @@ public class LandResouceInfoActivity extends BaseActivity { + selectArea = landAreaRegionData.get(0).getAreaChildVOS().get(options1); selectRegion = landAreaRegionData.get(0).getAreaChildVOS().get(options1).getAreaChildVOS().get(options2); - setText(binding.tvLocation, - landAreaRegionData.get(0).getAreaChildVOS().get(options1).getAreaName() + selectRegion.getAreaName()); + Hawk.put(Constant.SELECT_AREA, selectArea); + Hawk.put(Constant.SELECT_REGION, selectRegion); + Hawk.delete(Constant.SELECT_GRID); + setText(binding.tvLocation, selectArea.getAreaName() + selectRegion.getAreaName()); EventBus.getDefault().post(new EventMessage(EventConstant.REFRESH_LIST, selectRegion.getAreaCode())); }).setTitleText("土地区域选择").setContentTextSize(20)//设置滚轮文字大小 .setSelectOptions(0, 0)//默认选中项 diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanActivity.java b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanActivity.java index 3b93d9d..6699f44 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanActivity.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanActivity.java @@ -241,7 +241,9 @@ public class PlantPlanActivity extends BaseActivity { } private void initView() { - setText(binding.tvRegion, selectRegion.getAreaName() + "-" + selectGrid.getGridName()); + if (selectRegion != null && selectGrid != null) { + setText(binding.tvRegion, selectRegion.getAreaName() + "-" + selectGrid.getGridName()); + } setText(binding.tvYear, DateUtils.getCurrentYear() + "年种植计划"); setText(binding.tvPlanArea, String.valueOf(mData.getTotal().getTotalPlanArea())); setText(binding.tvRealArea, String.valueOf(mData.getTotal().getTotalActualArea())); diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanListActivity.java b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanListActivity.java index ed8a31d..b11d6f1 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanListActivity.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/ui/land/PlantPlanListActivity.java @@ -82,7 +82,9 @@ public class PlantPlanListActivity extends BaseActivity data; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataEntity { + @SerializedName("landTypeId") + private String landTypeId; + @SerializedName("landTypeName") + private String landTypeName; + @SerializedName("area") + private float area; + @SerializedName("pid") + private String pid; + + public String getLandTypeId() { + return landTypeId; + } + + public void setLandTypeId(String landTypeId) { + this.landTypeId = landTypeId; + } + + public String getLandTypeName() { + return landTypeName; + } + + public void setLandTypeName(String landTypeName) { + this.landTypeName = landTypeName; + } + + public float getArea() { + return area; + } + + public void setArea(float area) { + this.area = area; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + } +} diff --git a/app/src/main/java/com/tairui/gov_affairs_cloud/util/AppUtil.java b/app/src/main/java/com/tairui/gov_affairs_cloud/util/AppUtil.java index 192e33f..6721c77 100644 --- a/app/src/main/java/com/tairui/gov_affairs_cloud/util/AppUtil.java +++ b/app/src/main/java/com/tairui/gov_affairs_cloud/util/AppUtil.java @@ -2,11 +2,14 @@ package com.tairui.gov_affairs_cloud.util; import java.util.ArrayList; +import com.tairui.gov_affairs_cloud.BuildConfig; import com.tairui.gov_affairs_cloud.entity.Api; import com.tairui.gov_affairs_cloud.ui.photoview.PhotoViewActivty; import com.tairui.gov_affairs_cloud.widget.loading.LoadingDialog; import android.content.Context; +import android.content.pm.PackageInfo; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -50,4 +53,25 @@ public class AppUtil { bundle.putString("id", id); return bundle; } + + /** + * 获取应用的 Version Code + */ + public static int getVersionCode(Context context) { + try { + PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + return getVersionCodeFromPackageInfo(pInfo); + } catch (Exception e) { + return BuildConfig.VERSION_CODE; // 降级方案 + } + } + + @SuppressWarnings("deprecation") + private static int getVersionCodeFromPackageInfo(PackageInfo pInfo) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + return (int) pInfo.getLongVersionCode(); // API 28+ 使用 long + } else { + return pInfo.versionCode; // 传统方式 + } + } } diff --git a/app/src/main/res/layout/activity_edit_land_base_info.xml b/app/src/main/res/layout/activity_edit_land_base_info.xml index bad03be..0baf960 100644 --- a/app/src/main/res/layout/activity_edit_land_base_info.xml +++ b/app/src/main/res/layout/activity_edit_land_base_info.xml @@ -360,8 +360,7 @@ android:paddingLeft="12dp" android:text="重新选择" android:textColor="@color/color_blue" - android:textSize="13sp" - android:visibility="gone" /> + android:textSize="13sp"/> diff --git a/app/src/main/res/layout/activity_upload.xml b/app/src/main/res/layout/activity_upload.xml new file mode 100644 index 0000000..c23716b --- /dev/null +++ b/app/src/main/res/layout/activity_upload.xml @@ -0,0 +1,77 @@ + + + +