Skip to content

Commit c3362f3

Browse files
committed
before changing multi select behavior
1 parent d8be54b commit c3362f3

24 files changed

+491
-204
lines changed

SmartFileBrowser/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ dependencies {
4040
implementation 'com.squareup.picasso:picasso:2.71828'
4141
implementation 'com.github.bumptech.glide:glide:4.11.0'
4242
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
43-
implementation 'it.sephiroth.android.library.bottomnavigation:bottom-navigation:3.0.0'
43+
// implementation 'it.sephiroth.android.library.bottomnavigation:bottom-navigation:3.0.0'
4444
implementation 'com.aurelhubert:ahbottomnavigation:2.3.4'
4545
// implementation 'com.ashokvarma.android:bottom-navigation-bar:2.2.0'
4646
def lifecycle_version = "2.2.0"

SmartFileBrowser/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
android:requestLegacyExternalStorage="true">
1212
<activity android:name=".acitivties.FileBrowserMainActivity"
1313
android:theme="@style/sfb_AppTheme"
14-
14+
android:configChanges="keyboard|orientation"
1515
/>
1616
<provider
1717
android:authorities="${applicationId}.provider"

SmartFileBrowser/src/main/java/ir/smartdevelopers/smartfilebrowser/acitivties/FileBrowserMainActivity.java

Lines changed: 141 additions & 124 deletions
Large diffs are not rendered by default.

SmartFileBrowser/src/main/java/ir/smartdevelopers/smartfilebrowser/adapters/FileBrowserAdapter.java

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import ir.smartdevelopers.smartfilebrowser.R;
2323
import ir.smartdevelopers.smartfilebrowser.customClasses.FileUtil;
24+
import ir.smartdevelopers.smartfilebrowser.customClasses.OnItemChooseListener;
2425
import ir.smartdevelopers.smartfilebrowser.customClasses.OnItemClickListener;
2526
import ir.smartdevelopers.smartfilebrowser.customClasses.OnItemLongClickListener;
2627
import ir.smartdevelopers.smartfilebrowser.customClasses.OnItemSelectListener;
@@ -37,7 +38,7 @@ public class FileBrowserAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
3738
private List<FileBrowserModel> mFileBrowserModels = new ArrayList<>();
3839
private List<FileBrowserModel> mFileBrowserModelsCopy = new ArrayList<>();
3940
private OnItemClickListener<FileBrowserModel> mOnItemClickListener;
40-
private OnItemLongClickListener<FileBrowserModel> mOnItemLongClickListener;
41+
private OnItemChooseListener mOnItemChooseListener;
4142
private OnSearchListener mOnSearchListener;
4243
private OnItemSelectListener<FileBrowserModel> mOnItemSelectListener;
4344
private boolean isMultiSelect=false;
@@ -110,10 +111,6 @@ public void setOnItemClickListener(OnItemClickListener<FileBrowserModel> onItemC
110111

111112

112113

113-
public void setOnItemLongClickListener(OnItemLongClickListener<FileBrowserModel> onItemLongClickListener) {
114-
mOnItemLongClickListener = onItemLongClickListener;
115-
}
116-
117114
public void setOnItemSelectListener(OnItemSelectListener<FileBrowserModel> onItemSelectListener) {
118115
mOnItemSelectListener = onItemSelectListener;
119116
}
@@ -184,6 +181,26 @@ public void setOnSearchListener(OnSearchListener onSearchListener) {
184181
mOnSearchListener = onSearchListener;
185182
}
186183

184+
public boolean isInSubDirectory() {
185+
return mFileBrowserModelsCopy.get(0).getModelType() == FileBrowserModel.MODEL_TYPE_GO_BACK;
186+
}
187+
188+
public void goBackToParentDirectory() {
189+
FileBrowserModel model=mFileBrowserModelsCopy.get(0);
190+
if (model!=null){
191+
if (model.getModelType()==FileBrowserModel.MODEL_TYPE_GO_BACK){
192+
if (mOnItemClickListener != null) {
193+
mOnItemClickListener.onItemClicked(model,0);
194+
}
195+
}
196+
}
197+
}
198+
199+
public FileBrowserAdapter setOnItemChooseListener(OnItemChooseListener onItemChooseListener) {
200+
mOnItemChooseListener = onItemChooseListener;
201+
return this;
202+
}
203+
187204
public class FileBrowserViewHolder extends RecyclerView.ViewHolder {
188205
ImageView imgIcon;
189206
TextView txtTitle, txtSubTitle;
@@ -201,15 +218,19 @@ public FileBrowserViewHolder(@NonNull View itemView) {
201218
chbSelected = itemView.findViewById(R.id.item_file_browser_chbSelected);
202219
root.setOnClickListener(v -> {
203220
FileBrowserModel model=mFileBrowserModels.get(getAdapterPosition());
221+
if (!mCanSelectMultiple && model.getCurrentFile()!=null && model.getCurrentFile().isFile()){
222+
if (mOnItemChooseListener != null) {
223+
mOnItemChooseListener.onChoose(model);
224+
return;
225+
}
226+
}
204227
if (mOnItemClickListener != null) {
205228
mOnItemClickListener.onItemClicked(model, getAdapterPosition());
206229
}
207230
if (isMultiSelect){
208231
if (!FileUtil.isDirectory(model.getCurrentFile())) {
209232
addSelection(model, !model.isSelected());
210233
}
211-
}else {
212-
//TODO : select just this one
213234
}
214235
});
215236
root.setOnLongClickListener(new View.OnLongClickListener() {
@@ -325,6 +346,12 @@ public RecentViewHolder(@NonNull View itemView) {
325346
}
326347

327348
void bindView(FileBrowserModel model) {
349+
if (getAdapterPosition()==mFileBrowserModelsCopy.size()-1){
350+
itemView.setVisibility(View.GONE);
351+
return;
352+
}else {
353+
itemView.setVisibility(View.VISIBLE);
354+
}
328355
txtTitle.setText(model.getTitle());
329356
}
330357
}

SmartFileBrowser/src/main/java/ir/smartdevelopers/smartfilebrowser/adapters/GalleryAdapter.java

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import android.view.LayoutInflater;
44
import android.view.View;
55
import android.view.ViewGroup;
6-
import android.widget.CheckBox;
76
import android.widget.ImageView;
87

98
import androidx.annotation.NonNull;
@@ -18,6 +17,7 @@
1817

1918
import ir.smartdevelopers.smartfilebrowser.R;
2019
import ir.smartdevelopers.smartfilebrowser.customClasses.FileUtil;
20+
import ir.smartdevelopers.smartfilebrowser.customClasses.OnItemChooseListener;
2121
import ir.smartdevelopers.smartfilebrowser.customClasses.OnItemClickListener;
2222
import ir.smartdevelopers.smartfilebrowser.customClasses.OnItemSelectListener;
2323
import ir.smartdevelopers.smartfilebrowser.customClasses.SFBCountingCheckBox;
@@ -30,6 +30,7 @@ public class GalleryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
3030
private boolean mCanSelectMultiple=true;
3131
private OnItemSelectListener<GalleryModel> mOnItemSelectListener;
3232
private OnItemClickListener<GalleryModel> mOnItemClickListener;
33+
private OnItemChooseListener mOnItemChooseListener;
3334

3435
public GalleryAdapter() {
3536
mGalleryModels=new ArrayList<>();
@@ -111,7 +112,13 @@ public void setOnItemClickListener(OnItemClickListener<GalleryModel> onItemClick
111112
}
112113

113114
public void addNewPic(GalleryModel newPicModel) {
114-
mSelectedFiles.add(newPicModel.getFile());
115+
if (!mCanSelectMultiple){
116+
if (mOnItemClickListener!=null){
117+
mOnItemClickListener.onItemClicked(newPicModel,0);
118+
return;
119+
}
120+
}
121+
mSelectedFiles.add(newPicModel.getCurrentFile());
115122
newPicModel.setNumber(mSelectedFiles.size());
116123
newPicModel.setId(System.currentTimeMillis());
117124
mGalleryModels.add(1,newPicModel);
@@ -136,6 +143,11 @@ public int getSelectionCount() {
136143
return mSelectedFiles.size();
137144
}
138145

146+
public GalleryAdapter setOnItemChooseListener(OnItemChooseListener onItemChooseListener) {
147+
mOnItemChooseListener = onItemChooseListener;
148+
return this;
149+
}
150+
139151
class CameraViewHolder extends RecyclerView.ViewHolder {
140152
AppCompatImageView mImageView;
141153
public CameraViewHolder(@NonNull View itemView) {
@@ -169,9 +181,14 @@ public GalleryViewHolder(@NonNull View itemView) {
169181
chbSelection.setVisibility(View.GONE);
170182
}
171183
mImageView.setOnClickListener(v->{
172-
if (mOnItemClickListener != null) {
173-
mOnItemClickListener.onItemClicked(mGalleryModels.get(getAdapterPosition()),getAdapterPosition());
174-
184+
if (mCanSelectMultiple){
185+
if (mOnItemClickListener != null) {
186+
mOnItemClickListener.onItemClicked(mGalleryModels.get(getAdapterPosition()),getAdapterPosition());
187+
}
188+
}else {
189+
if (mOnItemChooseListener != null) {
190+
mOnItemChooseListener.onChoose(mGalleryModels.get(getAdapterPosition()));
191+
}
175192
}
176193
});
177194

@@ -185,8 +202,9 @@ void bindView(GalleryModel model){
185202
imgPlay.setVisibility(View.GONE);
186203
}
187204

188-
189-
checkSelection(model,false);
205+
if (mCanSelectMultiple) {
206+
checkSelection(model, false);
207+
}
190208
}
191209

192210
public void checkSelection(GalleryModel model, boolean animate) {
@@ -204,9 +222,9 @@ private void setImageSelected(GalleryModel model, boolean selected) {
204222
int pos=mGalleryModels.indexOf(model);
205223
int previousSize=mSelectedFiles.size();
206224
if (selected){
207-
mSelectedFiles.add(model.getFile());
225+
mSelectedFiles.add(model.getCurrentFile());
208226
}else {
209-
mSelectedFiles.remove(model.getFile());
227+
mSelectedFiles.remove(model.getCurrentFile());
210228
}
211229
if (selected) {
212230
model.setNumber(mSelectedFiles.size());
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ir.smartdevelopers.smartfilebrowser.customClasses;
2+
3+
import java.io.File;
4+
5+
public interface FileModel {
6+
File getCurrentFile();
7+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package ir.smartdevelopers.smartfilebrowser.customClasses;
2+
3+
public interface OnItemChooseListener {
4+
void onChoose(FileModel fileModel);
5+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ir.smartdevelopers.smartfilebrowser.customClasses;
2+
3+
import java.io.File;
4+
import java.io.Serializable;
5+
6+
public abstract class OnResultListener implements Serializable {
7+
private static final long serialVersionUID=4525632455245521L;
8+
private int value;
9+
10+
public abstract void onResult(File[] selectedFiles);
11+
12+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package ir.smartdevelopers.smartfilebrowser.customClasses;
2+
3+
import android.content.Context;
4+
import android.content.Intent;
5+
6+
import androidx.annotation.Nullable;
7+
8+
import java.io.File;
9+
import java.util.Collections;
10+
import java.util.List;
11+
12+
import ir.smartdevelopers.smartfilebrowser.acitivties.FileBrowserMainActivity;
13+
14+
public class SmartFileBrowser {
15+
public static class IntentBuilder{
16+
private boolean showVideosInGallery=true;
17+
private boolean showCamera=true;
18+
private boolean canSelectMultipleInGallery=true;
19+
private boolean canSelectMultipleInFiles=true;
20+
private boolean showPDFTab=true;
21+
private boolean showFilesTab=true;
22+
private boolean showAudioTab=true;
23+
private boolean showGalleryTab=true;
24+
25+
public IntentBuilder setShowVideosInGallery(boolean showVideosInGallery) {
26+
this.showVideosInGallery = showVideosInGallery;
27+
return this;
28+
}
29+
30+
public IntentBuilder setShowCamera(boolean showCamera) {
31+
this.showCamera = showCamera;
32+
return this;
33+
}
34+
35+
public IntentBuilder setCanSelectMultipleInGallery(boolean canSelectMultipleInGallery) {
36+
this.canSelectMultipleInGallery = canSelectMultipleInGallery;
37+
return this;
38+
}
39+
40+
public IntentBuilder setCanSelectMultipleInFiles(boolean canSelectMultipleInFiles) {
41+
this.canSelectMultipleInFiles = canSelectMultipleInFiles;
42+
return this;
43+
}
44+
45+
public IntentBuilder setShowPDFTab(boolean showPDFTab) {
46+
this.showPDFTab = showPDFTab;
47+
return this;
48+
}
49+
50+
public IntentBuilder setShowFilesTab(boolean showFilesTab) {
51+
this.showFilesTab = showFilesTab;
52+
return this;
53+
}
54+
55+
public IntentBuilder setShowAudioTab(boolean showAudioTab) {
56+
this.showAudioTab = showAudioTab;
57+
return this;
58+
}
59+
60+
public IntentBuilder setShowGalleryTab(boolean showGalleryTab) {
61+
this.showGalleryTab = showGalleryTab;
62+
return this;
63+
}
64+
public Intent build(Context context){
65+
Intent filePickerIntent=new Intent(context, FileBrowserMainActivity.class);
66+
filePickerIntent.putExtra("mShowVideosInGallery",showVideosInGallery);
67+
filePickerIntent.putExtra("mShowCamera",showCamera);
68+
filePickerIntent.putExtra("mCanSelectMultipleInGallery",canSelectMultipleInGallery);
69+
filePickerIntent.putExtra("mCanSelectMultipleInFiles",canSelectMultipleInFiles);
70+
filePickerIntent.putExtra("mShowPDFTab",showPDFTab);
71+
filePickerIntent.putExtra("mShowFilesTab",showFilesTab);
72+
filePickerIntent.putExtra("mShowAudioTab",showAudioTab);
73+
filePickerIntent.putExtra("mShowGalleryTab",showGalleryTab);
74+
return filePickerIntent;
75+
}
76+
}
77+
78+
@Nullable
79+
public static File[] getResult(Intent data){
80+
if (data==null){
81+
return null;
82+
}
83+
return (File[]) data.getSerializableExtra(FileBrowserMainActivity.EXTRA_RESULT);
84+
}
85+
}

0 commit comments

Comments
 (0)