1010import androidx .recyclerview .widget .RecyclerView ;
1111
1212import android .annotation .SuppressLint ;
13+ import android .content .Context ;
14+ import android .content .Intent ;
1315import android .content .res .TypedArray ;
1416import android .os .Bundle ;
1517import android .util .Log ;
1921import android .view .View ;
2022import android .view .ViewGroup ;
2123import android .view .ViewPropertyAnimator ;
24+ import android .view .ViewTreeObserver ;
25+ import android .view .WindowManager ;
2226import android .view .animation .AccelerateDecelerateInterpolator ;
2327import android .view .animation .AccelerateInterpolator ;
2428import android .view .animation .OvershootInterpolator ;
4145import ir .smartdevelopers .smartfilebrowser .customClasses .OnItemClickListener ;
4246import ir .smartdevelopers .smartfilebrowser .customClasses .OnItemSelectListener ;
4347import ir .smartdevelopers .smartfilebrowser .customClasses .RoundLinearLayout ;
48+ import ir .smartdevelopers .smartfilebrowser .customClasses .SFBFileFilter ;
4449import ir .smartdevelopers .smartfilebrowser .customClasses .SearchView ;
4550import ir .smartdevelopers .smartfilebrowser .fragments .FileBrowserFragment ;
4651import ir .smartdevelopers .smartfilebrowser .fragments .GalleryFragment ;
@@ -62,6 +67,7 @@ public class FileBrowserMainActivity extends AppCompatActivity {
6267 private BottomNavigation mBottomNavigationView ;
6368 // private BottomNavigationBar mBottomNavigationView;
6469// private BottomNavigationView mBottomNavigationView;
70+ private View mMainRootView ;
6571 private int mActionBarSize ;
6672 private float mRadius ;
6773 private View mDraggingLineView ;
@@ -89,6 +95,106 @@ public class FileBrowserMainActivity extends AppCompatActivity {
8995 private boolean mAlbumListIsShowing =false ;
9096 private ImageButton btnBack ;
9197
98+ /*Builder parameters*/
99+ private FileFilter mFileTabFileFilter ;
100+ private boolean mShowVideosInGallery =true ;
101+ private boolean mShowCamera =true ;
102+ private boolean mCanSelectMultipleInGallery =true ;
103+ private boolean mCanSelectMultipleInFiles =true ;
104+ private boolean mShowPDFTab =true ;
105+ private boolean mShowFilesTab =true ;
106+ private boolean mShowAudioTab =true ;
107+ private boolean mShowGalleryTab =true ;
108+
109+
110+ public static class Builder {
111+ private SFBFileFilter fileTabFileFilter ;
112+ private boolean showVideosInGallery =true ;
113+ private boolean showCamera =true ;
114+ private boolean canSelectMultipleInGallery =true ;
115+ private boolean canSelectMultipleInFiles =true ;
116+ private boolean showPDFTab =true ;
117+ private boolean showFilesTab =true ;
118+ private boolean showAudioTab =true ;
119+ private boolean showGalleryTab =true ;
120+
121+ public Builder setFileTabFileFilter (@ NonNull FileFilter fileTabFileFilter ) {
122+ this .fileTabFileFilter = new SFBFileFilter (){
123+ @ Override
124+ public boolean accept (File pathname ) {
125+ return fileTabFileFilter .accept (pathname );
126+ }
127+ };
128+ return this ;
129+ }
130+
131+ public Builder setShowVideosInGallery (boolean showVideosInGallery ) {
132+ this .showVideosInGallery = showVideosInGallery ;
133+ return this ;
134+ }
135+
136+ public Builder setShowCamera (boolean showCamera ) {
137+ this .showCamera = showCamera ;
138+ return this ;
139+ }
140+
141+ public Builder setCanSelectMultipleInGallery (boolean canSelectMultipleInGallery ) {
142+ this .canSelectMultipleInGallery = canSelectMultipleInGallery ;
143+ return this ;
144+ }
145+
146+ public Builder setCanSelectMultipleInFiles (boolean canSelectMultipleInFiles ) {
147+ this .canSelectMultipleInFiles = canSelectMultipleInFiles ;
148+ return this ;
149+ }
150+
151+ public Builder setShowPDFTab (boolean showPDFTab ) {
152+ this .showPDFTab = showPDFTab ;
153+ return this ;
154+ }
155+
156+ public Builder setShowFilesTab (boolean showFilesTab ) {
157+ this .showFilesTab = showFilesTab ;
158+ return this ;
159+ }
160+
161+ public Builder setShowAudioTab (boolean showAudioTab ) {
162+ this .showAudioTab = showAudioTab ;
163+ return this ;
164+ }
165+
166+ public Builder setShowGalleryTab (boolean showGalleryTab ) {
167+ this .showGalleryTab = showGalleryTab ;
168+ return this ;
169+ }
170+ public void show (Context context ){
171+
172+ Intent filePickerIntent =new Intent (context ,FileBrowserMainActivity .class );
173+ filePickerIntent .putExtra ("mFileTabFileFilter" ,fileTabFileFilter );
174+ filePickerIntent .putExtra ("mShowVideosInGallery" ,showVideosInGallery );
175+ filePickerIntent .putExtra ("mShowCamera" ,showCamera );
176+ filePickerIntent .putExtra ("mCanSelectMultipleInGallery" ,canSelectMultipleInGallery );
177+ filePickerIntent .putExtra ("mCanSelectMultipleInFiles" ,canSelectMultipleInFiles );
178+ filePickerIntent .putExtra ("mShowPDFTab" ,showPDFTab );
179+ filePickerIntent .putExtra ("mShowFilesTab" ,showFilesTab );
180+ filePickerIntent .putExtra ("mShowAudioTab" ,showAudioTab );
181+ filePickerIntent .putExtra ("mShowGalleryTab" ,showGalleryTab );
182+ context .startActivity (filePickerIntent );
183+
184+ }
185+ }
186+
187+ private void getDataFromIntent (){
188+ mFileTabFileFilter = (FileFilter ) getIntent ().getSerializableExtra ("mFileTabFileFilter" );
189+ mShowVideosInGallery =getIntent ().getBooleanExtra ("mShowVideosInGallery" ,true );
190+ mShowCamera =getIntent ().getBooleanExtra ("mShowCamera" ,true );
191+ mCanSelectMultipleInGallery =getIntent ().getBooleanExtra ("mCanSelectMultipleInGallery" ,true );
192+ mCanSelectMultipleInFiles =getIntent ().getBooleanExtra ("mCanSelectMultipleInFiles" ,true );
193+ mShowPDFTab =getIntent ().getBooleanExtra ("mShowPDFTab" ,true );
194+ mShowFilesTab =getIntent ().getBooleanExtra ("mShowFilesTab" ,true );
195+ mShowAudioTab =getIntent ().getBooleanExtra ("mShowAudioTab" ,true );
196+ mShowGalleryTab =getIntent ().getBooleanExtra ("mShowGalleryTab" ,true );
197+ }
92198 // private BottomNavigationBar.OnTabSelectedListener mOnTabSelectedListener;
93199 @ Override
94200 protected void onCreate (Bundle savedInstanceState ) {
@@ -98,6 +204,7 @@ protected void onCreate(Bundle savedInstanceState) {
98204 mGalleryViewModel =new ViewModelProvider (this ,new ViewModelProvider .AndroidViewModelFactory (getApplication ()))
99205 .get (GalleryViewModel .class );
100206 findViews ();
207+ getDataFromIntent ();
101208 initListeners ();
102209 initViews (savedInstanceState );
103210 if (savedInstanceState ==null ) {
@@ -149,6 +256,7 @@ private void findViews() {
149256 mToolbarPlaceHolder = findViewById (R .id .fileBrowser_activity_main_toolbarPlaceHolder );
150257 mAlbumPlaceHolder = findViewById (R .id .fileBrowser_activity_main_albumPlaceHolder );
151258 btnBack = findViewById (R .id .fileBrowser_activity_main_btnBack );
259+ mMainRootView = findViewById (R .id .fileBrowser_activity_main_windowRoot );
152260
153261 }
154262 private void initListeners () {
@@ -255,11 +363,14 @@ private void initViews(Bundle savedInstanceState) {
255363 ViewGroup .LayoutParams appBarParams = mAppBarLayout .getLayoutParams ();
256364 appBarParams .height = mActionBarSize ;
257365 mAppBarLayout .setLayoutParams (appBarParams );
258-
366+ int screenHeight = getResources (). getDisplayMetrics (). heightPixels ;
259367 mRadius = getResources ().getDimension (R .dimen .bottom_sheet_top_radius );
260368 mAppBarLayout .setTranslationY (-mActionBarSize );
261369 mBottomSheetBehavior = BottomSheetBehavior .from (mBottomSheetRoot );
262370 mBottomSheetBehavior .setHideable (true );
371+ // mBottomSheetBehavior.setFitToContents(false);
372+ // mBottomSheetBehavior.setHalfExpandedRatio(0.5f);
373+ mBottomSheetBehavior .setPeekHeight (screenHeight /2 ,true );
263374 mBottomSheetBehavior .addBottomSheetCallback (new BottomSheetBehavior .BottomSheetCallback () {
264375 @ Override
265376 public void onStateChanged (@ NonNull View bottomSheet , int newState ) {
@@ -300,6 +411,14 @@ public void onSlide(@NonNull View bottomSheet, float slideOffset) {
300411 }
301412 }
302413 });
414+ mMainRootView .setOnTouchListener (new View .OnTouchListener () {
415+ @ SuppressLint ("ClickableViewAccessibility" )
416+ @ Override
417+ public boolean onTouch (View v , MotionEvent event ) {
418+ finish ();
419+ return true ;
420+ }
421+ });
303422
304423// if (savedInstanceState==null){
305424// mBottomSheetRoot.post(()->{
@@ -309,15 +428,23 @@ public void onSlide(@NonNull View bottomSheet, float slideOffset) {
309428 btnBack .setOnClickListener (v ->{
310429 onBackPressed ();
311430 });
312- mBottomSheetRoot .setTranslationY (1000 );
313- mBottomNavigationView .setTranslationY (200 );
314-
431+ if (savedInstanceState ==null ){
432+ mBottomSheetRoot .setTranslationY (screenHeight *0.6f );
433+ mBottomNavigationView .setTranslationY (200 );
434+ getWindow ().getDecorView ().getViewTreeObserver ().addOnGlobalLayoutListener (new ViewTreeObserver .OnGlobalLayoutListener () {
435+ @ Override
436+ public void onGlobalLayout () {
437+ startFirstAnimation ();
438+ getWindow ().getDecorView ().getViewTreeObserver ().removeOnGlobalLayoutListener (this );
439+ }
440+ });
441+ }
315442 }
316443
317444 private void startFirstAnimation () {
318- long duration =800 ;
445+ long duration =300 ;
319446 mBottomSheetRoot .animate ().setDuration (duration ).translationY (0 )
320- .setInterpolator (new FastOutSlowInInterpolator ()).start ();
447+ .setInterpolator (new OvershootInterpolator ()).start ();
321448 mBottomNavigationView .animate ().setDuration (duration ).translationY (0 )
322449 .setInterpolator (new FastOutSlowInInterpolator ()).start ();
323450 }
@@ -326,7 +453,7 @@ private void startFirstAnimation() {
326453 protected void onStart () {
327454 super .onStart ();
328455
329- startFirstAnimation ();
456+
330457
331458 }
332459
0 commit comments