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 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; } } } }