diff --git a/Readme.md b/Readme.md index 74e241f..7a7e12f 100644 --- a/Readme.md +++ b/Readme.md @@ -68,6 +68,7 @@ Step 2. Add the dependency properties.error_dir = new File(DialogConfigs.DEFAULT_DIR); properties.offset = new File(DialogConfigs.DEFAULT_DIR); properties.extensions = null; + properties.show_hidden_files = false; ``` 3. Next create an instance of `FilePickerDialog`, and pass `Context` and `DialogProperties` references as parameters. Optional: You can change the title of dialog. Default is current directory name. Set the positive button string. Default is Select. Set the negative button string. Defalut is Cancel. @@ -132,7 +133,8 @@ Marshmallow and above requests for the permission on runtime. You should overrid app:root_dir="/sdcard" app:selection_mode="multi_mode" app:selection_type="dir_select" - app:extensions="txt:pdf:"/> + app:extensions="txt:pdf:" + app:show_hidden_files="false"/> ``` 2. Implement [Preference.OnPreferenceChangeListener](https://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html) to class requiring selected values and `Override` `onPreferenceChange(Preference, Object)` method. Check for preference key using [Preference](https://developer.android.com/reference/android/preference/Preference.html) reference. diff --git a/build.gradle b/build.gradle index 6b1a129..507ab77 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.5.2' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' // NOTE: Do not place your application dependencies here; they belong diff --git a/library/src/main/java/com/developer/filepicker/model/DialogProperties.java b/library/src/main/java/com/developer/filepicker/model/DialogProperties.java index 403f0f4..ec45cb3 100644 --- a/library/src/main/java/com/developer/filepicker/model/DialogProperties.java +++ b/library/src/main/java/com/developer/filepicker/model/DialogProperties.java @@ -12,6 +12,7 @@ public class DialogProperties { public File error_dir; public File offset; public String[] extensions; + public boolean show_hidden_files; public DialogProperties() { selection_mode = DialogConfigs.SINGLE_MODE; @@ -20,5 +21,6 @@ public DialogProperties() { error_dir = new File(DialogConfigs.DEFAULT_DIR); offset = new File(DialogConfigs.DEFAULT_DIR); extensions = null; + show_hidden_files = false; } } \ No newline at end of file diff --git a/library/src/main/java/com/developer/filepicker/utils/Utility.java b/library/src/main/java/com/developer/filepicker/utils/Utility.java index 300740e..5d73fe0 100644 --- a/library/src/main/java/com/developer/filepicker/utils/Utility.java +++ b/library/src/main/java/com/developer/filepicker/utils/Utility.java @@ -2,7 +2,9 @@ import android.content.Context; import android.content.pm.PackageManager; + import com.developer.filepicker.model.FileListItem; + import java.io.File; import java.util.ArrayList; import java.util.Collections; @@ -23,11 +25,11 @@ public static boolean checkStorageAccessPermissions(Context context) { } } - public static ArrayList prepareFileListEntries(ArrayList internalList, File inter, ExtensionFilter filter) { + public static ArrayList prepareFileListEntries(ArrayList internalList, File inter, ExtensionFilter filter, boolean show_hidden_files) { try { - for (File name : inter.listFiles(filter)) { if (name.canRead()) { + if(name.getName().startsWith(".") && !show_hidden_files) continue; FileListItem item = new FileListItem(); item.setFilename(name.getName()); item.setDirectory(name.isDirectory()); diff --git a/library/src/main/java/com/developer/filepicker/view/FilePickerDialog.java b/library/src/main/java/com/developer/filepicker/view/FilePickerDialog.java index 40a6f38..e999405 100644 --- a/library/src/main/java/com/developer/filepicker/view/FilePickerDialog.java +++ b/library/src/main/java/com/developer/filepicker/view/FilePickerDialog.java @@ -14,6 +14,7 @@ import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; + import com.developer.filepicker.R; import com.developer.filepicker.controller.DialogSelectionListener; import com.developer.filepicker.controller.NotifyItemChecked; @@ -25,6 +26,7 @@ import com.developer.filepicker.utils.ExtensionFilter; import com.developer.filepicker.utils.Utility; import com.developer.filepicker.widget.MaterialCheckbox; + import java.io.File; import java.util.ArrayList; import java.util.List; @@ -209,7 +211,7 @@ protected void onStart() { dname.setText(currLoc.getName()); dir_path.setText(currLoc.getAbsolutePath()); setTitle(); - internalList = Utility.prepareFileListEntries(internalList, currLoc, filter); + internalList = Utility.prepareFileListEntries(internalList, currLoc, filter, properties.show_hidden_files); mFileListAdapter.notifyDataSetChanged(); listView.setOnItemClickListener(this); } @@ -240,7 +242,7 @@ public void onItemClick(AdapterView adapterView, View view, int i, long l) { parent.setTime(currLoc.lastModified()); internalList.add(parent); } - internalList = Utility.prepareFileListEntries(internalList, currLoc, filter); + internalList = Utility.prepareFileListEntries(internalList, currLoc, filter, properties.show_hidden_files); mFileListAdapter.notifyDataSetChanged(); } else { Toast.makeText(context, R.string.error_dir_access, Toast.LENGTH_SHORT).show(); @@ -422,7 +424,7 @@ public void onBackPressed() { parent.setTime(currLoc.lastModified()); internalList.add(parent); } - internalList = Utility.prepareFileListEntries(internalList, currLoc, filter); + internalList = Utility.prepareFileListEntries(internalList, currLoc, filter, properties.show_hidden_files); mFileListAdapter.notifyDataSetChanged(); } setTitle(); diff --git a/library/src/main/java/com/developer/filepicker/view/FilePickerPreference.java b/library/src/main/java/com/developer/filepicker/view/FilePickerPreference.java index 7fa1e37..5a8a367 100644 --- a/library/src/main/java/com/developer/filepicker/view/FilePickerPreference.java +++ b/library/src/main/java/com/developer/filepicker/view/FilePickerPreference.java @@ -8,10 +8,12 @@ import android.preference.Preference; import android.util.AttributeSet; import android.view.View; + import com.developer.filepicker.R; import com.developer.filepicker.controller.DialogSelectionListener; import com.developer.filepicker.model.DialogConfigs; import com.developer.filepicker.model.DialogProperties; + import java.io.File; /** @@ -72,7 +74,7 @@ protected Parcelable onSaveInstanceState() { @Override protected void onRestoreInstanceState(Parcelable state) { - if (state == null || !(state instanceof SavedState)) { + if (!(state instanceof SavedState)) { super.onRestoreInstanceState(state); return; } @@ -188,6 +190,9 @@ else if (attr == R.styleable.FilePickerPreference_extensions) { else if (attr == R.styleable.FilePickerPreference_title_text) { titleText=tarr.getString(R.styleable.FilePickerPreference_title_text); } + else if (attr == R.styleable.FilePickerPreference_show_hidden_files) { + properties.show_hidden_files = tarr.getBoolean(R.styleable.FilePickerPreference_show_hidden_files, false); + } } tarr.recycle(); } diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml index b562d77..09575f8 100644 --- a/library/src/main/res/values/attrs.xml +++ b/library/src/main/res/values/attrs.xml @@ -31,5 +31,9 @@ name="title_text" format="string"/> + + \ No newline at end of file diff --git a/library/src/main/res/values/strings.xml b/library/src/main/res/values/strings.xml index e27debc..76370aa 100644 --- a/library/src/main/res/values/strings.xml +++ b/library/src/main/res/values/strings.xml @@ -6,5 +6,5 @@ Parent Directory Last edited: Directory cannot be accessed - ... + .. \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 147755e..642daab 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation project(':library') implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.1.0' debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' } diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 87bc22a..c76e28c 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" + android:requestLegacyExternalStorage="true" tools:ignore="AllowBackup,GoogleAppIndexingWarning"> diff --git a/sample/src/main/java/com/developer/filepicker/file/MainActivity.java b/sample/src/main/java/com/developer/filepicker/file/MainActivity.java index 40a522d..8d81690 100644 --- a/sample/src/main/java/com/developer/filepicker/file/MainActivity.java +++ b/sample/src/main/java/com/developer/filepicker/file/MainActivity.java @@ -3,19 +3,21 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Button; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.developer.filepicker.controller.DialogSelectionListener; import com.developer.filepicker.model.DialogConfigs; import com.developer.filepicker.model.DialogProperties; @@ -89,6 +91,7 @@ public void onCheckedChanged(RadioGroup group, int checkedId) { final EditText extension = findViewById(R.id.extensions); final EditText root = findViewById(R.id.root); final EditText offset = findViewById(R.id.offset); + final CheckBox show_hidden_files = findViewById(R.id.show_hidden_files); Button apply = findViewById(R.id.apply); Button showDialog = findViewById(R.id.show_dialog); apply.setOnClickListener(new View.OnClickListener() { @@ -141,6 +144,8 @@ public void onClick(View view) { properties.offset=new File(DialogConfigs.DEFAULT_DIR); } + properties.show_hidden_files = show_hidden_files.isChecked(); + //Setting Alternative Directory, in case root is not accessible.This will be //used. diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index e885094..44d73ef 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -134,6 +134,13 @@ android:layout_marginTop="@dimen/activity_vertical_margin" android:hint="@string/hint_offset" android:id="@+id/offset" /> + + diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index 996dd63..ee57562 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -18,4 +18,5 @@ Directory Files and Directories Filter Extensions(Seperate with Commas, Don\'t use dots) + Show hidden files \ No newline at end of file