Skip to content

Commit 2977beb

Browse files
Merge pull request #7 from mrgames13/master
Add option to hide hidden files
2 parents 6154fb1 + 6c80215 commit 2977beb

File tree

13 files changed

+45
-14
lines changed

13 files changed

+45
-14
lines changed

Readme.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ Step 2. Add the dependency
6868
properties.error_dir = new File(DialogConfigs.DEFAULT_DIR);
6969
properties.offset = new File(DialogConfigs.DEFAULT_DIR);
7070
properties.extensions = null;
71+
properties.show_hidden_files = false;
7172
```
7273

7374
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
132133
app:root_dir="/sdcard"
133134
app:selection_mode="multi_mode"
134135
app:selection_type="dir_select"
135-
app:extensions="txt:pdf:"/>
136+
app:extensions="txt:pdf:"
137+
app:show_hidden_files="false"/>
136138
```
137139

138140
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.

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ buildscript {
66
jcenter()
77
}
88
dependencies {
9-
classpath 'com.android.tools.build:gradle:3.5.0'
9+
classpath 'com.android.tools.build:gradle:3.5.2'
1010
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
1111

1212
// NOTE: Do not place your application dependencies here; they belong

library/src/main/java/com/developer/filepicker/model/DialogProperties.java

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class DialogProperties {
1212
public File error_dir;
1313
public File offset;
1414
public String[] extensions;
15+
public boolean show_hidden_files;
1516

1617
public DialogProperties() {
1718
selection_mode = DialogConfigs.SINGLE_MODE;
@@ -20,5 +21,6 @@ public DialogProperties() {
2021
error_dir = new File(DialogConfigs.DEFAULT_DIR);
2122
offset = new File(DialogConfigs.DEFAULT_DIR);
2223
extensions = null;
24+
show_hidden_files = false;
2325
}
2426
}

library/src/main/java/com/developer/filepicker/utils/Utility.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import android.content.Context;
44
import android.content.pm.PackageManager;
5+
56
import com.developer.filepicker.model.FileListItem;
7+
68
import java.io.File;
79
import java.util.ArrayList;
810
import java.util.Collections;
@@ -23,11 +25,11 @@ public static boolean checkStorageAccessPermissions(Context context) {
2325
}
2426
}
2527

26-
public static ArrayList<FileListItem> prepareFileListEntries(ArrayList<FileListItem> internalList, File inter, ExtensionFilter filter) {
28+
public static ArrayList<FileListItem> prepareFileListEntries(ArrayList<FileListItem> internalList, File inter, ExtensionFilter filter, boolean show_hidden_files) {
2729
try {
28-
2930
for (File name : inter.listFiles(filter)) {
3031
if (name.canRead()) {
32+
if(name.getName().startsWith(".") && !show_hidden_files) continue;
3133
FileListItem item = new FileListItem();
3234
item.setFilename(name.getName());
3335
item.setDirectory(name.isDirectory());

library/src/main/java/com/developer/filepicker/view/FilePickerDialog.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import android.widget.ListView;
1515
import android.widget.TextView;
1616
import android.widget.Toast;
17+
1718
import com.developer.filepicker.R;
1819
import com.developer.filepicker.controller.DialogSelectionListener;
1920
import com.developer.filepicker.controller.NotifyItemChecked;
@@ -25,6 +26,7 @@
2526
import com.developer.filepicker.utils.ExtensionFilter;
2627
import com.developer.filepicker.utils.Utility;
2728
import com.developer.filepicker.widget.MaterialCheckbox;
29+
2830
import java.io.File;
2931
import java.util.ArrayList;
3032
import java.util.List;
@@ -209,7 +211,7 @@ protected void onStart() {
209211
dname.setText(currLoc.getName());
210212
dir_path.setText(currLoc.getAbsolutePath());
211213
setTitle();
212-
internalList = Utility.prepareFileListEntries(internalList, currLoc, filter);
214+
internalList = Utility.prepareFileListEntries(internalList, currLoc, filter, properties.show_hidden_files);
213215
mFileListAdapter.notifyDataSetChanged();
214216
listView.setOnItemClickListener(this);
215217
}
@@ -240,7 +242,7 @@ public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
240242
parent.setTime(currLoc.lastModified());
241243
internalList.add(parent);
242244
}
243-
internalList = Utility.prepareFileListEntries(internalList, currLoc, filter);
245+
internalList = Utility.prepareFileListEntries(internalList, currLoc, filter, properties.show_hidden_files);
244246
mFileListAdapter.notifyDataSetChanged();
245247
} else {
246248
Toast.makeText(context, R.string.error_dir_access, Toast.LENGTH_SHORT).show();
@@ -422,7 +424,7 @@ public void onBackPressed() {
422424
parent.setTime(currLoc.lastModified());
423425
internalList.add(parent);
424426
}
425-
internalList = Utility.prepareFileListEntries(internalList, currLoc, filter);
427+
internalList = Utility.prepareFileListEntries(internalList, currLoc, filter, properties.show_hidden_files);
426428
mFileListAdapter.notifyDataSetChanged();
427429
}
428430
setTitle();

library/src/main/java/com/developer/filepicker/view/FilePickerPreference.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
import android.preference.Preference;
99
import android.util.AttributeSet;
1010
import android.view.View;
11+
1112
import com.developer.filepicker.R;
1213
import com.developer.filepicker.controller.DialogSelectionListener;
1314
import com.developer.filepicker.model.DialogConfigs;
1415
import com.developer.filepicker.model.DialogProperties;
16+
1517
import java.io.File;
1618

1719
/**
@@ -72,7 +74,7 @@ protected Parcelable onSaveInstanceState() {
7274

7375
@Override
7476
protected void onRestoreInstanceState(Parcelable state) {
75-
if (state == null || !(state instanceof SavedState)) {
77+
if (!(state instanceof SavedState)) {
7678
super.onRestoreInstanceState(state);
7779
return;
7880
}
@@ -188,6 +190,9 @@ else if (attr == R.styleable.FilePickerPreference_extensions) {
188190
else if (attr == R.styleable.FilePickerPreference_title_text) {
189191
titleText=tarr.getString(R.styleable.FilePickerPreference_title_text);
190192
}
193+
else if (attr == R.styleable.FilePickerPreference_show_hidden_files) {
194+
properties.show_hidden_files = tarr.getBoolean(R.styleable.FilePickerPreference_show_hidden_files, false);
195+
}
191196
}
192197
tarr.recycle();
193198
}

library/src/main/res/values/attrs.xml

+4
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,9 @@
3131
name="title_text"
3232
format="string"/>
3333

34+
<attr
35+
name="show_hidden_files"
36+
format="boolean"/>
37+
3438
</declare-styleable>
3539
</resources>

library/src/main/res/values/strings.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
<string name="label_parent_directory">Parent Directory</string>
77
<string name="last_edit">Last edited: </string>
88
<string name="error_dir_access">Directory cannot be accessed</string>
9-
<string name="label_parent_dir" translatable="false">...</string>
9+
<string name="label_parent_dir" translatable="false">..</string>
1010
</resources>

sample/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ dependencies {
2222
implementation fileTree(include: ['*.jar'], dir: 'libs')
2323
implementation project(':library')
2424
implementation 'androidx.appcompat:appcompat:1.1.0'
25-
implementation 'androidx.recyclerview:recyclerview:1.0.0'
25+
implementation 'androidx.recyclerview:recyclerview:1.1.0'
2626
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
2727
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
2828
}

sample/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
android:icon="@mipmap/ic_launcher"
1313
android:label="@string/app_name"
1414
android:theme="@style/AppTheme"
15+
android:requestLegacyExternalStorage="true"
1516
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
1617

1718
<activity android:name="com.developer.filepicker.file.MainActivity">

sample/src/main/java/com/developer/filepicker/file/MainActivity.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,21 @@
33
import android.content.Intent;
44
import android.content.pm.PackageManager;
55
import android.os.Bundle;
6-
import androidx.annotation.NonNull;
7-
import androidx.appcompat.app.AppCompatActivity;
8-
import androidx.recyclerview.widget.LinearLayoutManager;
9-
import androidx.recyclerview.widget.RecyclerView;
106
import android.view.Menu;
117
import android.view.MenuInflater;
128
import android.view.MenuItem;
139
import android.view.View;
1410
import android.widget.Button;
11+
import android.widget.CheckBox;
1512
import android.widget.EditText;
1613
import android.widget.RadioGroup;
1714
import android.widget.Toast;
1815

16+
import androidx.annotation.NonNull;
17+
import androidx.appcompat.app.AppCompatActivity;
18+
import androidx.recyclerview.widget.LinearLayoutManager;
19+
import androidx.recyclerview.widget.RecyclerView;
20+
1921
import com.developer.filepicker.controller.DialogSelectionListener;
2022
import com.developer.filepicker.model.DialogConfigs;
2123
import com.developer.filepicker.model.DialogProperties;
@@ -89,6 +91,7 @@ public void onCheckedChanged(RadioGroup group, int checkedId) {
8991
final EditText extension = findViewById(R.id.extensions);
9092
final EditText root = findViewById(R.id.root);
9193
final EditText offset = findViewById(R.id.offset);
94+
final CheckBox show_hidden_files = findViewById(R.id.show_hidden_files);
9295
Button apply = findViewById(R.id.apply);
9396
Button showDialog = findViewById(R.id.show_dialog);
9497
apply.setOnClickListener(new View.OnClickListener() {
@@ -141,6 +144,8 @@ public void onClick(View view) {
141144
properties.offset=new File(DialogConfigs.DEFAULT_DIR);
142145
}
143146

147+
properties.show_hidden_files = show_hidden_files.isChecked();
148+
144149
//Setting Alternative Directory, in case root is not accessible.This will be
145150
//used.
146151

sample/src/main/res/layout/activity_main.xml

+7
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,13 @@
134134
android:layout_marginTop="@dimen/activity_vertical_margin"
135135
android:hint="@string/hint_offset"
136136
android:id="@+id/offset" />
137+
138+
<androidx.appcompat.widget.AppCompatCheckBox
139+
android:layout_width="match_parent"
140+
android:layout_height="wrap_content"
141+
android:layout_marginTop="@dimen/activity_vertical_margin"
142+
android:id="@+id/show_hidden_files"
143+
android:text="@string/show_hidden_files"/>
137144
</androidx.appcompat.widget.LinearLayoutCompat>
138145
</androidx.core.widget.NestedScrollView>
139146

sample/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@
1818
<string name="label_directory">Directory</string>
1919
<string name="label_files_and_directories">Files and Directories</string>
2020
<string name="label_extensions">Filter Extensions(Seperate with Commas, Don\'t use dots)</string>
21+
<string name="show_hidden_files">Show hidden files</string>
2122
</resources>

0 commit comments

Comments
 (0)