Skip to content
This repository has been archived by the owner on Mar 8, 2024. It is now read-only.

Implementation

Angad Singh edited this page May 29, 2017 · 9 revisions

File Picker Dialog

  1. Start by creating an instance of DialogProperties.

        DialogProperties properties = new DialogProperties();
  2. Assign values to each Dialog Property using DialogConfigs class.

        properties.selection_mode = DialogConfigs.SINGLE_MODE;
        properties.selection_type = DialogConfigs.FILE_SELECT;
        properties.root = new File(DialogConfigs.DEFAULT_DIR);
        properties.error_dir = new File(DialogConfigs.DEFAULT_DIR);
        properties.offset = new File(DialogConfigs.DEFAULT_DIR);
        properties.extensions = null;
  3. Next create an instance of FilePickerDialog, and pass Context and DialogProperties references as parameters.

        FilePickerDialog dialog = new FilePickerDialog(MainActivity.this,properties);
        dialog.setTitle("Select a File");
  4. Next, Attach DialogSelectionListener to FilePickerDialog as below,

        dialog.setDialogSelectionListener(new DialogSelectionListener() {
            @Override
            public void onSelectedFilePaths(String[] files) {
                //files is an array of the paths of files selected by the Application User.
            }
        });

    An array of paths is returned whenever user press the select button.

  5. Use dialog.show() method to show dialog.

    That's It. You are good to move further.

Note:

  • In case no file/directory is selected onSelectedFilePaths method returns an empty array.

IMPORTANT:

Marshmallow and further requests for the permission on runtime. You should override onRequestPermissionsResult of Activity/AppCompatActivity class and show the dialog only if permissions have been granted.

        //Add this method to show Dialog, only when the required permissions have been granted to the app.
        @Override
        public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[],@NonNull int[] grantResults) {
            switch (requestCode) {
                case FilePickerDialog.EXTERNAL_READ_PERMISSION_GRANT: {
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        if(dialog != null) {   
                            //Show dialog if the read permission has been granted.
                            dialog.show();
                        }
                    }
                    else {
                        //Permission has not been granted. Notify the user.
                        Toast.makeText(MainActivity.this,"Permission is Required for getting list of files",Toast.LENGTH_SHORT).show();
                    }
                }
            }
        }

File Picker Preference

  1. Start by declaring FilePickerPreference in your settings xml file as:

       <com.github.angads25.filepicker.view.FilePickerPreference
           xmlns:app="http://schemas.android.com/apk/res-auto"
           android:key="your_preference_key"
           android:title="Pick a Directory"
           android:summary="Just a Summary"
           android:defaultValue="/sdcard:/mnt"
           app:offset_dir="/mnt/sdcard/android"
           app:error_dir="/mnt"
           app:root_dir="/sdcard"
           app:selection_mode="multi_mode"
           app:selection_type="dir_select"
           app:extensions="txt:pdf:"/>
  2. Implement Preference.OnPreferenceChangeListener to class requiring selected values and Override onPreferenceChange(Preference, Object) method. Check for preference key using Preference reference.

        @Override
        public boolean onPreferenceChange(Preference preference, Object o) {
            if(preference.getKey().equals("your_preference_key")) {   
                ...
            }
            return false;
        }
  3. Typecast Object o into String Object and use split(String) function in String class to get array of selected files.

        @Override
        public boolean onPreferenceChange(Preference preference, Object o) {   
            if(preference.getKey().equals("your_preference_key")) {   
                String value = (String)o;
                String arr[] = value.split(":");
                ...
                ...
            }
            return false;
        }

    That's It. You are good to move further.

Important:

  • defaultValue, error_dir, root_dir and offset_dir must have valid directory/file paths.
  • defaultValue paths should end with ':'.
  • defaultValue can have multiple paths, there should be a ':' between two paths.
  • extensions must not have '.'.
  • extensions should end with ':' , also have ':' between two extensions. eg. /sdcard:/mnt:

Note:

FilePickerPreference stores selected directories/files as a String. It delimits multiple files/directories using ':' char.

For eg.

If image1.png and image2.png are the two files selected by the user from '/sdcard', the FilePickerPreference will store it in a form of single String as '/sdcard/image1.png:/sdcard/image2.png:'.

Clone this wiki locally