Skip to content

Commit 33730a8

Browse files
committed
Backup point -- A total mess to be recovered from
1 parent 88242ab commit 33730a8

9 files changed

Lines changed: 376 additions & 233 deletions

File tree

AndroidFilePickerLightLibrary/src/main/java/com/maxieds/androidfilepickerlightlibrary/BasicFileProvider.java

Lines changed: 57 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,17 @@ This program (the AndroidFilePickerLight library) is free software written by
3333

3434
import androidx.core.content.FileProvider;
3535

36+
import org.apache.commons.lang3.ArrayUtils;
37+
3638
import java.io.File;
3739
import java.io.FileNotFoundException;
3840
import java.io.IOException;
41+
import java.util.ArrayList;
3942
import java.util.Collections;
4043
import java.util.Comparator;
4144
import java.util.HashSet;
4245
import java.util.LinkedList;
46+
import java.util.List;
4347
import java.util.Locale;
4448
import java.util.PriorityQueue;
4549
import java.util.Set;
@@ -188,6 +192,13 @@ public boolean onCreate() {
188192
return true;
189193
}
190194

195+
public static final String ROOT_COLUMN_NAME_ABSPATH = "Root.CustomColumn.AbsolutePath";
196+
public static final String DOCUMENT_COLUMN_NAME_ABSPATH = "Document.CustomColumn.AbsolutePath";
197+
public static final String DOCUMENT_COLUMN_NAME_FILE_SIZE_LABEL = "Document.CustomColumn.FileSizeLabel";
198+
public static final String DOCUMENT_COLUMN_NAME_POSIX_PERMS = "Document.CustomColumn.PosixPerms";
199+
public static final String DOCUMENT_COLUMN_NAME_ISDIR = "Document.CustomColumn.IsDir";
200+
public static final String DOCUMENT_COLUMN_NAME_ISHIDDEN = "Document.CustomColumn.IsHidden";
201+
191202
public static final String[] DEFAULT_ROOT_PROJECTION = new String[] {
192203
DocumentsContract.Root.COLUMN_ROOT_ID,
193204
DocumentsContract.Root.COLUMN_MIME_TYPES,
@@ -196,7 +207,8 @@ public boolean onCreate() {
196207
DocumentsContract.Root.COLUMN_TITLE,
197208
DocumentsContract.Root.COLUMN_SUMMARY,
198209
DocumentsContract.Root.COLUMN_DOCUMENT_ID,
199-
DocumentsContract.Root.COLUMN_AVAILABLE_BYTES
210+
DocumentsContract.Root.COLUMN_AVAILABLE_BYTES,
211+
ROOT_COLUMN_NAME_ABSPATH
200212
};
201213

202214
public static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[] {
@@ -205,12 +217,16 @@ public boolean onCreate() {
205217
DocumentsContract.Document.COLUMN_DISPLAY_NAME,
206218
DocumentsContract.Document.COLUMN_LAST_MODIFIED,
207219
DocumentsContract.Document.COLUMN_FLAGS,
208-
DocumentsContract.Document.COLUMN_SIZE
220+
DocumentsContract.Document.COLUMN_SIZE,
221+
DOCUMENT_COLUMN_NAME_ABSPATH,
222+
DOCUMENT_COLUMN_NAME_FILE_SIZE_LABEL,
223+
DOCUMENT_COLUMN_NAME_POSIX_PERMS,
224+
DOCUMENT_COLUMN_NAME_ISDIR,
225+
DOCUMENT_COLUMN_NAME_ISHIDDEN
209226
};
210227

211228
public static final int ROOT_PROJ_ROOTID_COLUMN_INDEX = 6;
212-
public static final int ROOT_PROJ_DOCID_COLUMN_INDEX = 6;
213-
public static final int DOCS_PROJ_PARENTID_COLUMN_INDEX = 0;
229+
public static final int DOCS_PROJ_DOCID_COLUMN_INDEX = 0;
214230

215231
@Override
216232
public Cursor queryRoots(String[] projection) throws FileNotFoundException {
@@ -231,7 +247,8 @@ public Cursor queryRoots(String[] projection) throws FileNotFoundException {
231247
row.add(DocumentsContract.Root.COLUMN_MIME_TYPES, getChildMimeTypes(baseDirPath));
232248
row.add(DocumentsContract.Root.COLUMN_AVAILABLE_BYTES, baseDirPath != null ? baseDirPath.getFreeSpace() : 0);
233249
row.add(DocumentsContract.Root.COLUMN_ICON, R.drawable.library_profile_icon_round_background);
234-
250+
// Custom columns:
251+
row.add(ROOT_COLUMN_NAME_ABSPATH, baseDirPath.getAbsolutePath());
235252
return mcResult;
236253

237254
}
@@ -527,6 +544,17 @@ private void includeFile(MatrixCursor result, String docId, File file) throws Fi
527544
row.add(DocumentsContract.Document.COLUMN_LAST_MODIFIED, file.lastModified());
528545
row.add(DocumentsContract.Document.COLUMN_FLAGS, flags);
529546
row.add(DocumentsContract.Document.COLUMN_ICON, R.drawable.library_profile_icon_round_background);
547+
// Custom columns:
548+
row.add(DOCUMENT_COLUMN_NAME_ABSPATH, file.getAbsolutePath());
549+
row.add(DOCUMENT_COLUMN_NAME_FILE_SIZE_LABEL, FileUtils.getFileSizeString(file));
550+
try {
551+
row.add(DOCUMENT_COLUMN_NAME_POSIX_PERMS, FileUtils.getFilePosixPermissionsString(file.toPath()));
552+
} catch(Exception ex) {
553+
row.add(DOCUMENT_COLUMN_NAME_POSIX_PERMS, "---------");
554+
}
555+
row.add(DOCUMENT_COLUMN_NAME_ISDIR, file.isDirectory() ? "true" : "false");
556+
row.add(DOCUMENT_COLUMN_NAME_ISHIDDEN, file.isHidden() ? "true" : "false");
557+
530558
}
531559

532560
private File getFileForDocId(String docId) throws FileNotFoundException {
@@ -554,27 +582,18 @@ public static String getDocumentIdForCursorType(MatrixCursor mcResult, boolean c
554582
if(mcResult.getCount() == 0) {
555583
return null;
556584
}
557-
String docId = "";
585+
String columnName = "";
558586
if(cursorType == CURSOR_TYPE_IS_ROOT) {
559-
docId = mcResult.getString(ROOT_PROJ_ROOTID_COLUMN_INDEX);
587+
columnName = DocumentsContract.Root.COLUMN_DOCUMENT_ID;
560588
}
561589
else {
562-
docId = mcResult.getString(DOCS_PROJ_PARENTID_COLUMN_INDEX);
563-
}
564-
return docId;
565-
}
566-
567-
public File getFileAtCurrentRow(MatrixCursor mcResult, boolean cursorType) {
568-
if(mcResult.getCount() == 0) {
569-
return null;
590+
columnName = DocumentsContract.Document.COLUMN_DOCUMENT_ID;
570591
}
571-
String docId = getDocumentIdForCursorType(mcResult, cursorType);
572-
try {
573-
return getFileForDocId(docId);
574-
} catch(IOException ioe) {
575-
ioe.printStackTrace();
576-
return null;
592+
int docIdColumnIndex = ArrayUtils.indexOf(mcResult.getColumnNames(), columnName);
593+
if(docIdColumnIndex >= 0) {
594+
return mcResult.getString(docIdColumnIndex);
577595
}
596+
return null;
578597
}
579598

580599
public String getAbsPathAtCurrentRow(MatrixCursor mcResult, boolean cursorType) {
@@ -621,15 +640,28 @@ public String[] getPropertiesOfCurrentRow(MatrixCursor mcResult, boolean cursorT
621640
File curWorkingFile = getFileForDocId(docId);
622641
return new String[] {
623642
curWorkingFile.getAbsolutePath(),
624-
mcResult.getString(DOCS_PROJ_PARENTID_COLUMN_INDEX),
643+
mcResult.getString(DOCS_PROJ_DOCID_COLUMN_INDEX),
625644
FileUtils.getFileSizeString(curWorkingFile),
626-
FileUtils.getFilePosixPermissionsString(curWorkingFile),
645+
FileUtils.getFilePosixPermissionsString(curWorkingFile.toPath()),
627646
String.format(Locale.getDefault(), "%s", curWorkingFile.isDirectory() ? "true" : "false"),
628647
String.format(Locale.getDefault(), "%s", curWorkingFile.isHidden() ? "true" : "false")
629648
};
630649
} catch(IOException ioe) {
631-
ioe.printStackTrace();
632-
return null;
650+
//ioe.printStackTrace();
651+
try {
652+
String[] mcColumnNames = mcResult.getColumnNames();
653+
return new String[] {
654+
mcResult.getString(ArrayUtils.indexOf(mcColumnNames, DOCUMENT_COLUMN_NAME_ABSPATH)),
655+
getDocumentIdForCursorType(mcResult, !CURSOR_TYPE_IS_ROOT),
656+
mcResult.getString(ArrayUtils.indexOf(mcColumnNames, DOCUMENT_COLUMN_NAME_FILE_SIZE_LABEL)),
657+
mcResult.getString(ArrayUtils.indexOf(mcColumnNames, DOCUMENT_COLUMN_NAME_POSIX_PERMS)),
658+
mcResult.getString(ArrayUtils.indexOf(mcColumnNames, DOCUMENT_COLUMN_NAME_ISDIR)),
659+
mcResult.getString(ArrayUtils.indexOf(mcColumnNames, DOCUMENT_COLUMN_NAME_ISHIDDEN))
660+
};
661+
} catch(Exception ex) {
662+
ex.printStackTrace();
663+
return null;
664+
}
633665
}
634666
}
635667

AndroidFilePickerLightLibrary/src/main/java/com/maxieds/androidfilepickerlightlibrary/DisplayAdapters.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,28 @@ public static class FileListAdapter extends RecyclerView.Adapter<BaseViewHolder>
4444

4545
public FileListAdapter(List<String> nextFileListData, List<DisplayTypes.FileType> nextFileItemsData) {
4646
this.fileListData = new ArrayList<String>();
47-
this.fileListData.addAll(nextFileListData);
4847
this.fileItemsData = new ArrayList<DisplayTypes.FileType>();
49-
this.fileItemsData.addAll(nextFileItemsData);
50-
this.setHasStableIds(true); // ???
48+
this.setHasStableIds(false); // ???
49+
reloadDataSets(nextFileListData, nextFileItemsData, false);
5150
}
5251

5352
public void reloadDataSets(List<String> nextDataSet, List<DisplayTypes.FileType> nextFileItemsData, boolean notifyAdapter) {
54-
fileListData.clear();
55-
fileListData.addAll(nextDataSet);
56-
fileItemsData.clear();
57-
fileItemsData.addAll(nextFileItemsData);
53+
Log.i(LOGTAG, "PREV SIZE = " + fileListData.size() + ", " + nextDataSet.size());
54+
if(fileListData != nextDataSet) {
55+
fileListData.clear();
56+
fileListData.addAll(nextDataSet);
57+
//fileListData = nextDataSet;
58+
}
59+
if(fileItemsData != nextFileItemsData) {
60+
fileItemsData.clear();
61+
fileItemsData.addAll(nextFileItemsData);
62+
//fileItemsData = nextFileItemsData;
63+
}
5864
if(notifyAdapter) {
5965
notifyDataSetChanged();
66+
//notifyItemRangeInserted(0, nextDataSet.size());
6067
}
68+
Log.i(LOGTAG, "POST SIZE = " + fileListData.size());
6169
}
6270

6371
public void reloadDataSets(List<String> nextDataSet, List<DisplayTypes.FileType> nextFileItemsData) {
@@ -107,10 +115,10 @@ public int getItemCount() {
107115

108116
@Override
109117
public long getItemId(int posIndex) {
110-
if(fileItemsData.get(posIndex).getLayoutContainer() != null){
118+
if(fileItemsData.size() > posIndex && fileItemsData.get(posIndex).getLayoutContainer() != null){
111119
return fileItemsData.get(posIndex).getLayoutContainer().hashCode();
112120
}
113-
else if(fileItemsData.get(posIndex) != null) {
121+
else if(fileItemsData.size() > posIndex) {
114122
return fileItemsData.get(posIndex).hashCode();
115123
}
116124
return posIndex;
@@ -156,7 +164,7 @@ public BaseViewHolder(View v) {
156164
v.setOnLongClickListener(this);
157165
displayText = (TextView) v.findViewById(R.id.fileEntryBaseName);
158166
initIndexPos = -1;
159-
setIsRecyclable(false); // ???
167+
//setIsRecyclable(false); // ???
160168
}
161169

162170
public TextView getDisplayText() { return displayText; }
@@ -173,7 +181,7 @@ public void onClick(View v) {
173181
@Override
174182
public boolean onLongClick(View v) {
175183
Log.i(LOGTAG, "BaseViewHolder::onLongClick");
176-
int fileItemPosIndex = DisplayFragments.RecyclerViewUtils.findFileItemIndexByLayout(v);
184+
int fileItemPosIndex = DisplayFragments.getInstance().findFileItemIndexByLayout(v);
177185
if(fileItemPosIndex < 0) {
178186
return false;
179187
}
@@ -274,7 +282,7 @@ else if(DisplayFragments.getInstance().curSelectionCount >= DisplayFragments.get
274282
@Override
275283
public void onCheckedChanged(CompoundButton btnView, boolean isChecked) {
276284
CheckBox cbView = (CheckBox) btnView;
277-
int fileItemPosIndex = DisplayFragments.RecyclerViewUtils.findFileItemIndexByLayout((View) btnView.getParent());
285+
int fileItemPosIndex = DisplayFragments.getInstance().findFileItemIndexByLayout((View) btnView.getParent());
278286
if(fileItemPosIndex < 0) {
279287
Log.i(LOGTAG, "onCheckedChanged: Unable to find parent view index ...");
280288
return;

0 commit comments

Comments
 (0)