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 0000000..adf3832
Binary files /dev/null and b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_back.png differ
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 0000000..371e4b1
Binary files /dev/null and b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_file.png differ
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 0000000..43940bd
Binary files /dev/null and b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_folder.png differ
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 0000000..ae21eec
Binary files /dev/null and b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_right.png differ
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 0000000..f0f80d9
Binary files /dev/null and b/FileDialog/src/main/res/drawable-hdpi/ic_dialogx_filedialog_select.png differ
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 0000000..f14ec74
Binary files /dev/null and b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_back.png differ
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 0000000..51b60b8
Binary files /dev/null and b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_file.png differ
diff --git a/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_folder.png b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_folder.png
new file mode 100644
index 0000000..b0f68ea
Binary files /dev/null and b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_folder.png differ
diff --git a/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_right.png b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_right.png
new file mode 100644
index 0000000..1f1b6ee
Binary files /dev/null and b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_right.png differ
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 0000000..a002cc3
Binary files /dev/null and b/FileDialog/src/main/res/drawable-mdpi/ic_dialogx_filedialog_select.png differ
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 0000000..c914482
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_back.png differ
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 0000000..e4dcc54
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_file.png differ
diff --git a/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_folder.png b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_folder.png
new file mode 100644
index 0000000..7cdb8bc
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_folder.png differ
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 0000000..5da1b43
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_right.png differ
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 0000000..9051c17
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xhdpi/ic_dialogx_filedialog_select.png differ
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 0000000..1260fb7
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_back.png differ
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 0000000..198a374
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_file.png differ
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 0000000..abdae7a
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_folder.png differ
diff --git a/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_right.png b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_right.png
new file mode 100644
index 0000000..83ba909
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_right.png differ
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 0000000..456d5d2
Binary files /dev/null and b/FileDialog/src/main/res/drawable-xxhdpi/ic_dialogx_filedialog_select.png differ
diff --git a/FileDialog/src/main/res/drawable-xxhdpi/split_dialogx_filedialog_listitem.xml b/FileDialog/src/main/res/drawable-xxhdpi/split_dialogx_filedialog_listitem.xml
new file mode 100644
index 0000000..2b0fe5c
--- /dev/null
+++ b/FileDialog/src/main/res/drawable-xxhdpi/split_dialogx_filedialog_listitem.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ 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