package com.basic.security.widget;
|
|
import android.app.Dialog;
|
import android.content.Context;
|
import android.graphics.Color;
|
import android.os.Bundle;
|
import android.util.DisplayMetrics;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.view.Window;
|
import android.view.WindowManager;
|
import android.widget.BaseAdapter;
|
import android.widget.Button;
|
import android.widget.GridView;
|
import android.widget.ImageView;
|
import android.widget.TextView;
|
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.SystemUI;
|
|
import java.io.File;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
public class FileChooserDialog extends Dialog {
|
public GridView fileList;
|
public TextView currentPath;
|
public TextView currentFileName;
|
public List<File> files = new ArrayList<>();
|
public FileAdapter fileAdapter = new FileAdapter();
|
public SimpleDateFormat _formatter = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
|
public TextView internalStorage, externalStorage, parent;
|
public String selectedDir = "";
|
private Context context;
|
private String title;
|
private String leftBtnText;
|
private String rightBtnText;
|
private ClickListenerInterface clickListenerInterface;
|
|
public FileChooserDialog(Context context, String title, String leftBtnText, String rightBtnText) {
|
super(context, com.basic.security.utils.RUtils.R_style_ConfirmDialogStyle);
|
this.context = context;
|
this.title = title;
|
this.leftBtnText = leftBtnText;
|
this.rightBtnText = rightBtnText;
|
}
|
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
init();
|
}
|
|
public void init() {
|
LayoutInflater inflater = LayoutInflater.from(context);
|
View view = inflater.inflate(com.basic.security.utils.ResolutionAdaptation.file_chooser_dialog(), null);
|
setContentView(view);
|
TextView tvTitle = view.findViewById(com.basic.security.utils.RUtils.R_id_title);
|
Button tvConfirm = view.findViewById(com.basic.security.utils.RUtils.R_id_leftBtn);
|
TextView tvCancel = view.findViewById(com.basic.security.utils.RUtils.R_id_rightBit);
|
fileList = view.findViewById(com.basic.security.utils.RUtils.R_id_fileList);
|
currentPath = view.findViewById(com.basic.security.utils.RUtils.R_id_currentPath);
|
currentFileName = view.findViewById(com.basic.security.utils.RUtils.R_id_currentFileName);
|
internalStorage = view.findViewById(com.basic.security.utils.RUtils.R_id_internalStorage);
|
externalStorage = view.findViewById(com.basic.security.utils.RUtils.R_id_externalStorage);
|
parent = view.findViewById(com.basic.security.utils.RUtils.R_id_parent);
|
internalStorage.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
externalStorage.setTextColor(Color.WHITE);
|
internalStorage.setTextColor(Color.parseColor("#4BA6AD"));
|
listDir("/sdcard/");
|
}
|
});
|
externalStorage.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
internalStorage.setTextColor(Color.WHITE);
|
externalStorage.setTextColor(Color.parseColor("#4BA6AD"));
|
listUsb();
|
}
|
});
|
parent.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
try {
|
File parentFile = new File(selectedDir).getParentFile();
|
if (parentFile != null && parentFile.canRead()) {
|
listDir(parentFile.getAbsolutePath());
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
fileList.setAdapter(fileAdapter);
|
tvTitle.setText(title);
|
tvConfirm.setText(leftBtnText);
|
tvCancel.setText(rightBtnText);
|
tvConfirm.setOnClickListener(new clickListener());
|
tvCancel.setOnClickListener(new clickListener());
|
Window dialogWindow = getWindow();
|
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用
|
if (Constants.landscape) {
|
lp.width = (int) (d.widthPixels * 0.8); // 高度设置为屏幕的0.6
|
} else {
|
lp.width = (int) (d.widthPixels * 0.8); // 高度设置为屏幕的0.6
|
}
|
lp.height = (int) (d.heightPixels * 0.8);
|
dialogWindow.setAttributes(lp);
|
SystemUI.hideSystemUI(this);
|
SystemUI.initSystemUIListener(this);
|
}
|
|
private void listUsb() {
|
try {
|
File file = new File("/storage/");
|
if (file.isDirectory()) {
|
files.clear();
|
File[] fileArray = file.listFiles();
|
if (fileArray != null) {
|
for (File file1 : fileArray) {
|
if (file1.canRead()) {
|
if (externalStorage != null) {
|
externalStorage.setVisibility(View.VISIBLE);
|
internalStorage.setTextColor(Color.WHITE);
|
externalStorage.setTextColor(Color.parseColor("#4BA6AD"));
|
}
|
listDir(file1.getAbsolutePath());
|
return;
|
}
|
}
|
}
|
}
|
externalStorage.setVisibility(View.GONE);
|
externalStorage.setTextColor(Color.WHITE);
|
internalStorage.setTextColor(Color.parseColor("#4BA6AD"));
|
listDir("/sdcard/");
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
private void listDir(String path) {
|
// System1.out.println("FileChooserDialog.listDir");
|
try {
|
File file = new File(path);
|
if (file.isDirectory()) {
|
selectedDir = path;
|
if (!path.endsWith("/")) {
|
path += "/";
|
}
|
currentPath.setText(path);
|
files.clear();
|
File[] fileArray = file.listFiles();
|
// System1.out.println("FileChooserDialog.listDir " + path + " " + fileArray);
|
if (fileArray != null) {
|
for (File file1 : fileArray) {
|
if (file1.canRead()
|
// && file1.isDirectory()
|
) {
|
files.add(file1);
|
}
|
}
|
}
|
// if ("/storage/".equals(path)) {
|
// File file1 = new File("/sdcard/");
|
// if (file1.canRead()) {
|
// files.add(file1);
|
// }
|
// }
|
// if (file.getParentFile().exists()) {
|
// files.add(0, file.getParentFile());
|
// }
|
fileAdapter.notifyDataSetChanged();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public void show() {
|
try {
|
selectedDir = "";
|
listUsb();
|
this.getWindow().getDecorView().setVisibility(View.INVISIBLE);
|
SystemUI.hideSystemUI(this);
|
SystemUI.initSystemUIListener(this);
|
super.show();
|
this.getWindow().getDecorView().setVisibility(View.VISIBLE);
|
listUsb();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public void setClickListener(ClickListenerInterface clickListenerInterface) {
|
this.clickListenerInterface = clickListenerInterface;
|
}
|
|
public interface ClickListenerInterface {
|
void doConfirm();
|
|
void doCancel();
|
}
|
|
public class FileAdapter extends BaseAdapter {
|
@Override
|
public int getCount() {
|
return files.size();
|
}
|
|
@Override
|
public Object getItem(int i) {
|
return files.get(i);
|
}
|
|
@Override
|
public long getItemId(int i) {
|
return i;
|
}
|
|
@Override
|
public View getView(int position, View convertView, ViewGroup viewGroup) {
|
ViewHolder viewHolder;
|
if (convertView == null) {
|
viewHolder = new ViewHolder();
|
convertView = LayoutInflater.from(getContext()).inflate(com.basic.security.utils.ResolutionAdaptation.file_chooser_dialog_item(), null);
|
viewHolder.file_icon = convertView.findViewById(com.basic.security.utils.RUtils.R_id_file_icon);
|
viewHolder.file_name = convertView.findViewById(com.basic.security.utils.RUtils.R_id_file_name);
|
viewHolder.file_size = convertView.findViewById(com.basic.security.utils.RUtils.R_id_file_size);
|
viewHolder.file_date = convertView.findViewById(com.basic.security.utils.RUtils.R_id_file_date);
|
convertView.setTag(viewHolder);
|
} else {
|
viewHolder = (ViewHolder) convertView.getTag();
|
}
|
File file = files.get(position);
|
if (file.isDirectory()) {
|
viewHolder.file_icon.setImageResource(com.basic.security.utils.RUtils.R_drawable_folder);
|
} else {
|
viewHolder.file_icon.setImageResource(com.basic.security.utils.RUtils.R_drawable_file);
|
}
|
viewHolder.file_name.setText(file.getName());
|
viewHolder.file_size.setText(file.length() + "");
|
viewHolder.file_date.setText(_formatter.format(new Date(file.lastModified())));
|
convertView.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
listDir(file.getAbsolutePath());
|
}
|
});
|
return convertView;
|
}
|
|
public class ViewHolder {
|
ImageView file_icon;
|
TextView file_name, file_size, file_date;
|
}
|
}
|
|
private class clickListener implements View.OnClickListener {
|
public void onClick(View v) {
|
int id = v.getId();
|
switch (id) {
|
case com.basic.security.utils.RUtils.R_id_leftBtn:
|
if (clickListenerInterface != null) {
|
clickListenerInterface.doConfirm();
|
}
|
break;
|
case com.basic.security.utils.RUtils.R_id_rightBit:
|
if (clickListenerInterface != null) {
|
clickListenerInterface.doCancel();
|
}
|
break;
|
}
|
}
|
}
|
}
|