fedilab-Android-App/app/src/main/java/app/fedilab/android/filelister/FileListerDialog.java

186 lines
5.6 KiB
Java

package app.fedilab.android.filelister;
import android.content.Context;
import android.content.DialogInterface;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import java.io.File;
import app.fedilab.android.R;
import static android.content.DialogInterface.BUTTON_NEGATIVE;
import static android.content.DialogInterface.BUTTON_NEUTRAL;
import static android.content.DialogInterface.BUTTON_POSITIVE;
/**
* A File Lister Dialog
*/
public class FileListerDialog {
/**
* File Filter for the FileListerDialog
*/
public enum FILE_FILTER {
/**
* List All Files
*/
ALL_FILES,
/**
* List only directories
*/
DIRECTORY_ONLY,
/**
* List Directory and Image files
*/
IMAGE_ONLY,
/**
* List Directory and Video files
*/
VIDEO_ONLY,
/**
* List Directory and Audio files
*/
AUDIO_ONLY
}
private AlertDialog alertDialog;
private FilesListerView filesListerView;
private OnFileSelectedListener onFileSelectedListener;
private FileListerDialog(@NonNull Context context) {
//super(context);
alertDialog = new AlertDialog.Builder(context).create();
init(context);
}
private FileListerDialog(@NonNull Context context, int themeResId) {
//super(context, themeResId);
alertDialog = new AlertDialog.Builder(context, themeResId).create();
init(context);
}
/**
* Creates a default instance of FileListerDialog
*
* @param context Context of the App
* @return Instance of FileListerDialog
*/
public static FileListerDialog createFileListerDialog(@NonNull Context context) {
return new FileListerDialog(context);
}
/**
* Creates an instance of FileListerDialog with the specified Theme
*
* @param context Context of the App
* @param themeId Theme Id for the dialog
* @return Instance of FileListerDialog
*/
public static FileListerDialog createFileListerDialog(@NonNull Context context, int themeId) {
return new FileListerDialog(context, themeId);
}
private void init(Context context) {
filesListerView = new FilesListerView(context);
alertDialog.setView(filesListerView);
alertDialog.setButton(BUTTON_POSITIVE, context.getString(R.string.select), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
if (onFileSelectedListener != null)
onFileSelectedListener.onFileSelected(filesListerView.getSelected(), filesListerView.getSelected().getAbsolutePath());
}
});
alertDialog.setButton(BUTTON_NEUTRAL, context.getString(R.string.default_directory), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//filesListerView.goToDefaultDir();
}
});
alertDialog.setButton(BUTTON_NEGATIVE, context.getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
}
/**
* Display the FileListerDialog
*/
public void show() {
//getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
switch (filesListerView.getFileFilter()) {
case DIRECTORY_ONLY:
alertDialog.setTitle("Select a directory");
break;
case VIDEO_ONLY:
alertDialog.setTitle("Select a Video file");
break;
case IMAGE_ONLY:
alertDialog.setTitle("Select an Image file");
break;
case AUDIO_ONLY:
alertDialog.setTitle("Select an Audio file");
break;
case ALL_FILES:
alertDialog.setTitle("Select a file");
break;
default:
alertDialog.setTitle("Select a file");
}
filesListerView.start();
alertDialog.show();
alertDialog.getButton(BUTTON_NEUTRAL).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
filesListerView.goToDefaultDir();
}
});
}
/**
* Listener to know which file/directory is selected
*
* @param onFileSelectedListener Instance of the Listener
*/
public void setOnFileSelectedListener(OnFileSelectedListener onFileSelectedListener) {
this.onFileSelectedListener = onFileSelectedListener;
}
/**
* Set the initial directory to show the list of files in that directory
*
* @param file File pointing to the directory
*/
public void setDefaultDir(@NonNull File file) {
filesListerView.setDefaultDir(file);
}
/**
* Set the initial directory to show the list of files in that directory
*
* @param file String denoting to the directory
*/
public void setDefaultDir(@NonNull String file) {
filesListerView.setDefaultDir(file);
}
/**
* Set the file filter for listing the files
*
* @param fileFilter One of the FILE_FILTER values
*/
public void setFileFilter(FILE_FILTER fileFilter) {
filesListerView.setFileFilter(fileFilter);
}
}