Skip to content

Commit 2de26c9

Browse files
committed
The checkbox selection method works for files
1 parent 64765d6 commit 2de26c9

8 files changed

Lines changed: 38 additions & 20 deletions

File tree

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,21 +253,25 @@ public static boolean performNewFileItemClick(CheckBox cbView, DisplayTypes.File
253253
if(!isDir && !DisplayFragments.getInstance().allowSelectFiles) {
254254
Log.i(LOGTAG, "Blocking FILE item selection I");
255255
cbView.setChecked(false);
256+
cbView.jumpDrawablesToCurrentState(); // No animations
256257
return false;
257258
}
258259
else if(isDir && !DisplayFragments.getInstance().allowSelectFolders) {
259260
Log.i(LOGTAG, "Blocking DIR item selection II");
260261
cbView.setChecked(false);
262+
cbView.jumpDrawablesToCurrentState();
261263
return false;
262264
}
263265
if(!cbView.isEnabled()) {
264266
cbView.setChecked(false);
267+
cbView.jumpDrawablesToCurrentState();
265268
return false;
266269
}
267270
if(fileItem.isChecked()) {
268271
// Deselect: uncheck GUI widget item and remove the fileItem from the active selections list:
269-
fileItem.setChecked(false);
270272
cbView.setChecked(false);
273+
cbView.jumpDrawablesToCurrentState();
274+
fileItem.setChecked(false);
271275
cbView.setEnabled(true);
272276
DisplayFragments.getInstance().activeSelectionsList.remove(fileItem);
273277
DisplayFragments.getInstance().curSelectionCount--;
@@ -280,8 +284,9 @@ else if(DisplayFragments.getInstance().curSelectionCount >= DisplayFragments.get
280284
cbView.setChecked(false);
281285
return false;
282286
}
283-
fileItem.setChecked(true);
284287
cbView.setChecked(true);
288+
cbView.jumpDrawablesToCurrentState();
289+
fileItem.setChecked(true);
285290
cbView.setEnabled(true);
286291
DisplayFragments.getInstance().activeSelectionsList.add(fileItem);
287292
DisplayFragments.getInstance().curSelectionCount++;
@@ -293,8 +298,9 @@ else if(DisplayFragments.getInstance().curSelectionCount >= DisplayFragments.get
293298

294299
@Override
295300
public void onCheckedChanged(CompoundButton btnView, boolean isChecked) {
301+
btnView.jumpDrawablesToCurrentState();
296302
CheckBox cbView = (CheckBox) btnView;
297-
DisplayTypes.FileType fileItem = BaseViewHolder.getFileItemForView((View) btnView.getParent());
303+
DisplayTypes.FileType fileItem = BaseViewHolder.getFileItemForView((View) btnView.getParent().getParent());
298304
if(fileItem != null) {
299305
performNewFileItemClick(cbView, fileItem);
300306
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ public static void resetLayout(View layoutContainer, DisplayTypes.FileType fileI
266266
selectionBox.setTag(displayPosition);
267267
selectionBox.setOnCheckedChangeListener(new DisplayAdapters.OnSelectListener());
268268

269+
269270
}
270271

271272
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ public Intent getSelectedFilesActivityResultIntent() {
278278
String[] filePathsList = new String[selectedFilesCount];
279279
for(int fileIndex = 0; fileIndex < selectedFilesCount; fileIndex++) {
280280
filePathsList[fileIndex] = getDisplayFragmentsInstance().activeSelectionsList.get(fileIndex).getAbsolutePath();
281+
Log.i(LOGTAG, "RETURNING SELECTION : " + filePathsList[fileIndex]);
281282
}
282283
resultIntent.putStringArrayListExtra(FileChooserBuilder.FILE_PICKER_INTENT_DATA_PAYLOAD_KEY, new ArrayList<String>(Arrays.asList(filePathsList)));
283284
return resultIntent;
@@ -287,7 +288,6 @@ public void postSelectedFilesActivityResult() {
287288
Intent filesResultIntent = getSelectedFilesActivityResultIntent();
288289
setResult(Activity.RESULT_OK, filesResultIntent);
289290
finish();
290-
getDisplayFragmentsInstance().resetRecyclerViewLayoutContext();
291291
//System.exit(0); // ??? TODO ???
292292
}
293293

@@ -301,7 +301,6 @@ public void postSelectedFilesActivityResult(Exception runtimeExcpt) {
301301
}
302302
setResult(Activity.RESULT_CANCELED, filesResultIntent);
303303
finish();
304-
getDisplayFragmentsInstance().resetRecyclerViewLayoutContext();
305304
//ActivityCompat.finishAffinity(this);
306305
//System.exit(0); // ??? TODO ???
307306
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ This program (the AndroidFilePickerLight library) is free software written by
2626
import java.io.Serializable;
2727
import java.lang.ref.WeakReference;
2828
import java.util.ArrayList;
29+
import java.util.Arrays;
2930
import java.util.HashMap;
3031
import java.util.List;
3132
import java.util.Map;
@@ -406,6 +407,7 @@ public void launchFilePicker() throws FileChooserException.AndroidFilePickerLigh
406407
public static final int ACTIVITY_CODE_SELECT_FILE = 1;
407408
public static final int ACTIVITY_CODE_SELECT_DIRECTORY_ONLY = 2;
408409
public static final int ACTIVITY_CODE_SELECT_MULTIPLE_FILES = 3;
410+
public static final int ACTIVITY_CODE_BRING_TO_FRONT = 4;
409411

410412
/* Client code should call this method in their main Activity's onActivityResult function
411413
* to handle the logic there when the activity was created as a file picker instance:
@@ -420,14 +422,13 @@ public static List<String> handleActivityResult(Activity activityInst, int reque
420422
case ACTIVITY_CODE_SELECT_DIRECTORY_ONLY:
421423
case ACTIVITY_CODE_SELECT_MULTIPLE_FILES:
422424
if(resultCode == RESULT_OK) {
423-
FileChooserException.AndroidFilePickerLightException resultOKException = new FileChooserException.CommunicateSelectionDataException();
424-
List<String> selectedDataItems = resultOKException.packageDataItemsFromIntent(data);
425+
List<String> selectedDataItems = Arrays.asList(data.getStringArrayExtra(FileChooserBuilder.FILE_PICKER_INTENT_DATA_PAYLOAD_KEY));
425426
finishActivityResultHandler(activityInst);
426427
return selectedDataItems;
427428
}
428429
try {
429430
String getExitErrorMsg = data.getStringExtra(FILE_PICKER_EXCEPTION_MESSAGE_KEY);
430-
finishActivityResultHandler(activityInst); // ???
431+
finishActivityResultHandler(activityInst);
431432
throw FileChooserException.getExceptionForExitCause(data.getStringExtra(FILE_PICKER_EXCEPTION_CAUSE_KEY), getExitErrorMsg);
432433
} catch(NullPointerException npe) {}
433434
break;
@@ -437,7 +438,7 @@ public static List<String> handleActivityResult(Activity activityInst, int reque
437438
}
438439
FileChooserException.AndroidFilePickerLightException resultNotOKException = new FileChooserException.GenericRuntimeErrorException();
439440
resultNotOKException.packageDataItemsFromIntent(data);
440-
finishActivityResultHandler(activityInst); // ???
441+
finishActivityResultHandler(activityInst);
441442
throw resultNotOKException;
442443
}
443444

@@ -448,7 +449,7 @@ public static void finishActivityResultHandler(Activity activityInst) {
448449
activityInst.moveTaskToBack(false);
449450
Intent bringToFrontIntent = new Intent(activityInst, activityInst.getClass());
450451
bringToFrontIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
451-
FileChooserActivity.getInstance().startActivity(bringToFrontIntent);
452+
activityInst.startActivity(bringToFrontIntent);
452453
}
453454

454455
public StringBuilder readFileContentsAsString() {
750 Bytes
Loading

AndroidFilePickerLightLibrary/src/main/res/layout/single_file_entry_item.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
>
4343

4444
<CheckBox
45+
style="@style/FileItemSelectionBoxTheme"
4546
android:theme="@style/SelectionCheckBoxStyle"
4647
android:id="@+id/fileSelectCheckBox"
4748
android:layout_width="wrap_content"

AndroidFilePickerLightLibrary/src/main/res/values/styles.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,10 @@
7575
<item name="android:paddingLeft">10sp</item>
7676
</style>
7777

78+
<style name="FileItemSelectionBoxTheme" parent="LibraryDefaultTheme">
79+
<item name="colorControlNormal">?__colorPrimaryDark</item>
80+
<item name="colorControlActivated">?__colorPrimaryDark</item>
81+
<item name="buttonTint">?__colorPrimaryDark</item>
82+
</style>
83+
7884
</resources>

app/src/main/java/com/maxieds/androidfilepickerlight/AndroidFilePickerLightExampleActivity.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ This program (the AndroidFilePickerLight library) is free software written by
2929
import androidx.appcompat.widget.Toolbar;
3030

3131
import android.os.Handler;
32+
import android.util.Log;
3233
import android.view.View;
3334
import android.widget.TextView;
3435

@@ -60,7 +61,7 @@ protected void onCreate(Bundle savedInstanceState) {
6061

6162
public void showFileChooserResultsDialog(List<String> fileItemsList, String onErrorMsg) {
6263
AlertDialog.Builder adBuilder = new AlertDialog.Builder(this);
63-
boolean resultIsError = onErrorMsg == null;
64+
boolean resultIsError = onErrorMsg != null;
6465
if(resultIsError) {
6566
adBuilder.setIcon(R.drawable.file_picker_error);
6667
adBuilder.setTitle("Unfortunately the file picker has failed :(");
@@ -90,22 +91,25 @@ public void showFileChooserResultsDialog(List<String> fileItemsList, String onEr
9091
adBuilder.create().show();
9192
}
9293

94+
private static String rteErrorMsg = null;
95+
private static List<String> selectedFilePaths = new ArrayList<String>();
96+
9397
@Override
9498
public void onActivityResult(int requestCode, int resultCode, Intent data) {
9599
super.onActivityResult(requestCode, resultCode, data);
96100
try {
97-
List<String> selectedFilePaths = FileChooserBuilder.handleActivityResult(this, requestCode, resultCode, data);
98-
showFileChooserResultsDialog(selectedFilePaths, null);
99-
} catch(RuntimeException rte) {
100-
String errorExitMsg = null;
101-
if(data != null) {
102-
errorExitMsg = data.getStringExtra(FileChooserBuilder.FILE_PICKER_EXCEPTION_MESSAGE_KEY);
101+
selectedFilePaths = FileChooserBuilder.handleActivityResult(this, requestCode, resultCode, data);
102+
} catch (RuntimeException rte) {
103+
if (data != null) {
104+
rteErrorMsg = rte.getMessage();
103105
}
104-
if(errorExitMsg == null) {
105-
errorExitMsg = "Unknown reason for exception.";
106+
if (rteErrorMsg == null) {
107+
rteErrorMsg = "Unknown reason for exception.";
106108
}
107-
showFileChooserResultsDialog(new ArrayList<String>(), errorExitMsg);
108109
}
110+
showFileChooserResultsDialog(selectedFilePaths, rteErrorMsg);
111+
selectedFilePaths = new ArrayList<String>();
112+
rteErrorMsg = null;
109113
}
110114

111115
public void actionButtonLaunchSingleFilePickerActivity(View btnView) {

0 commit comments

Comments
 (0)