Skip to content

Commit 973094e

Browse files
committed
Fixed Crash When Ext is Selected
Added Filter in Current Directory
1 parent d776feb commit 973094e

File tree

12 files changed

+203
-18
lines changed

12 files changed

+203
-18
lines changed

filebrowser/src/main/AndroidManifest.xml

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,26 @@
99
android:label="@string/app_name"
1010
android:supportsRtl="true">
1111
<activity android:name=".FileBrowser"
12-
android:theme="@style/FileBrowserTheme"/>
12+
android:theme="@style/FileBrowserTheme">
13+
<meta-data
14+
android:name="android.app.searchable"
15+
android:resource="@xml/searchable">
16+
</meta-data>
17+
</activity>
1318
<activity android:name=".FileChooser"
14-
android:theme="@style/FileBrowserTheme"/>
19+
android:theme="@style/FileBrowserTheme">
20+
<meta-data
21+
android:name="android.app.searchable"
22+
android:resource="@xml/searchable">
23+
</meta-data>
24+
</activity>
1525
<activity android:name=".FileBrowserWithCustomHandler"
16-
android:theme="@style/FileBrowserTheme"/>
26+
android:theme="@style/FileBrowserTheme">
27+
<meta-data
28+
android:name="android.app.searchable"
29+
android:resource="@xml/searchable">
30+
</meta-data>
31+
</activity>
1732
<activity android:name=".utils.Permissions" android:theme="@style/Theme.AppCompat.Translucent" />
1833
</application>
1934

filebrowser/src/main/java/com/aditya/filebrowser/Constants.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,20 @@ public enum SELECTION_MODES {
5555

5656
try {
5757
List<GetRemovableDevice.StorageInfo> infos = GetRemovableDevice.getStorageList();
58+
boolean isExternalDirectoryInitialized = false;
5859
for(int i=0;i<infos.size();i++) {
5960
if(infos.get(i).getDisplayName().contains(Constants.EXTERNALSTORAGE)) {
6061
File detectedDirectory = new File(infos.get(i).path).getCanonicalFile();
61-
if(detectedDirectory.getTotalSpace()>0)
62+
if(detectedDirectory!=null && detectedDirectory.exists() && detectedDirectory.isDirectory() && detectedDirectory.getTotalSpace()>0)
6263
externalStorageRoot = detectedDirectory;
6364
else
6465
externalStorageRoot = new File("/");
66+
isExternalDirectoryInitialized = true;
6567
break;
6668
}
6769
}
70+
if(!isExternalDirectoryInitialized)
71+
externalStorageRoot = new File("/");
6872
} catch (Exception e) {
6973
e.printStackTrace();
7074
externalStorageRoot = new File("/");

filebrowser/src/main/java/com/aditya/filebrowser/FileBrowser.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
import android.app.Activity;
8+
import android.app.SearchManager;
89
import android.content.ActivityNotFoundException;
910
import android.content.Context;
1011
import android.content.Intent;
@@ -14,6 +15,7 @@
1415
import android.support.v7.view.ActionMode;
1516
import android.support.v7.widget.LinearLayoutManager;
1617
import android.support.v7.widget.RecyclerView;
18+
import android.support.v7.widget.SearchView;
1719
import android.support.v7.widget.Toolbar;
1820
import android.view.Menu;
1921
import android.view.MenuItem;
@@ -40,7 +42,7 @@
4042
import java.io.File;
4143

4244

43-
public class FileBrowser extends AppCompatActivity implements OnChangeDirectoryListener,ContextSwitcher {
45+
public class FileBrowser extends AppCompatActivity implements OnChangeDirectoryListener,ContextSwitcher,SearchView.OnQueryTextListener {
4446

4547
private Context mContext;
4648
private Toolbar toolbar;
@@ -62,6 +64,9 @@ public class FileBrowser extends AppCompatActivity implements OnChangeDirectoryL
6264
private static ActionMode mActionMode;
6365
private static final int APP_PERMISSION_REQUEST = 0;
6466

67+
private SearchView searchView;
68+
private MenuItem searchMenuItem;
69+
6570
@Override
6671
protected void onCreate(Bundle savedInstanceState) {
6772
super.onCreate(savedInstanceState);
@@ -117,6 +122,14 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
117122
public boolean onCreateOptionsMenu(Menu menu) {
118123
// Inflate the menu; this adds items to the action bar if it is present.
119124
getMenuInflater().inflate(R.menu.toolbar_default_menu, menu);
125+
// Get the SearchView and set the searchable configuration
126+
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
127+
searchMenuItem = menu.findItem(R.id.action_search);
128+
searchView = (SearchView)searchMenuItem.getActionView();
129+
// Assumes current activity is the searchable activity
130+
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
131+
//searchView.setSubmitButtonEnabled(true);
132+
searchView.setOnQueryTextListener(this);
120133
return true;
121134
}
122135

@@ -195,6 +208,7 @@ public void onItemClick(View view, int position) {
195208
if (mAdapter.getChoiceMode()== Constants.CHOICE_MODE.SINGLE_CHOICE) {
196209
File f = mAdapter.getItemAt(position).getFile();
197210
if (f.isDirectory()) {
211+
closeSearchView();
198212
mNavigationHelper.changeDirectory(f);
199213
} else {
200214
MimeTypeMap mimeMap = MimeTypeMap.getSingleton();
@@ -241,6 +255,7 @@ public void switchMode(Constants.CHOICE_MODE mode) {
241255
mActionMode.finish();
242256
} else {
243257
if(mActionMode==null) {
258+
closeSearchView();
244259
mActionMode = startSupportActionMode(new ToolbarActionMode(mContext,this,mAdapter,Constants.APP_MODE.FILE_BROWSER,io));
245260
mActionMode.setTitle("Select Multiple Files");
246261
}
@@ -281,4 +296,23 @@ public FileIO getIo() {
281296
public void setIo(FileIO io) {
282297
this.io = io;
283298
}
299+
300+
private void closeSearchView() {
301+
if (searchView.isShown()) {
302+
searchView.setQuery("", false);
303+
searchMenuItem.collapseActionView();
304+
searchView.setIconified(true);
305+
}
306+
}
307+
308+
@Override
309+
public boolean onQueryTextSubmit(String query) {
310+
return false;
311+
}
312+
313+
@Override
314+
public boolean onQueryTextChange(String newText) {
315+
mAdapter.getFilter().filter(newText);
316+
return false;
317+
}
284318
}

filebrowser/src/main/java/com/aditya/filebrowser/FileBrowserWithCustomHandler.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
import android.app.Activity;
8+
import android.app.SearchManager;
89
import android.content.Context;
910
import android.content.Intent;
1011
import android.net.Uri;
@@ -13,6 +14,7 @@
1314
import android.support.v7.view.ActionMode;
1415
import android.support.v7.widget.LinearLayoutManager;
1516
import android.support.v7.widget.RecyclerView;
17+
import android.support.v7.widget.SearchView;
1618
import android.support.v7.widget.Toolbar;
1719
import android.view.Menu;
1820
import android.view.MenuItem;
@@ -37,7 +39,7 @@
3739
import java.io.File;
3840

3941

40-
public class FileBrowserWithCustomHandler extends AppCompatActivity implements OnChangeDirectoryListener,ContextSwitcher {
42+
public class FileBrowserWithCustomHandler extends AppCompatActivity implements OnChangeDirectoryListener,ContextSwitcher,SearchView.OnQueryTextListener {
4143

4244
private Context mContext;
4345
private Toolbar toolbar;
@@ -59,6 +61,8 @@ public class FileBrowserWithCustomHandler extends AppCompatActivity implements O
5961
private static final int APP_PERMISSION_REQUEST = 0;
6062

6163
private Bundle extras;
64+
private SearchView searchView;
65+
private MenuItem searchMenuItem;
6266
@Override
6367
protected void onCreate(Bundle savedInstanceState) {
6468
super.onCreate(savedInstanceState);
@@ -115,6 +119,14 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
115119
public boolean onCreateOptionsMenu(Menu menu) {
116120
// Inflate the menu; this adds items to the action bar if it is present.
117121
getMenuInflater().inflate(R.menu.toolbar_default_menu, menu);
122+
// Get the SearchView and set the searchable configuration
123+
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
124+
searchMenuItem = menu.findItem(R.id.action_search);
125+
searchView = (SearchView)searchMenuItem.getActionView();
126+
// Assumes current activity is the searchable activity
127+
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
128+
//searchView.setSubmitButtonEnabled(true);
129+
searchView.setOnQueryTextListener(this);
118130
return true;
119131
}
120132

@@ -192,6 +204,7 @@ public void onItemClick(View view, int position) {
192204
if (mAdapter.getChoiceMode()== Constants.CHOICE_MODE.SINGLE_CHOICE) {
193205
File f = mAdapter.getItemAt(position).getFile();
194206
if (f.isDirectory()) {
207+
closeSearchView();
195208
mNavigationHelper.changeDirectory(f);
196209
} else {
197210
Uri selectedFileUri = Uri.fromFile(f);
@@ -233,6 +246,7 @@ public void switchMode(Constants.CHOICE_MODE mode) {
233246
mActionMode.finish();
234247
} else {
235248
if(mActionMode==null) {
249+
closeSearchView();
236250
mActionMode = startSupportActionMode(new ToolbarActionMode(mContext,this,mAdapter,Constants.APP_MODE.FILE_BROWSER,io));
237251
mActionMode.setTitle("Select Multiple Files");
238252
}
@@ -273,4 +287,23 @@ public FileIO getIo() {
273287
public void setIo(FileIO io) {
274288
this.io = io;
275289
}
290+
291+
@Override
292+
public boolean onQueryTextSubmit(String query) {
293+
return false;
294+
}
295+
296+
@Override
297+
public boolean onQueryTextChange(String newText) {
298+
mAdapter.getFilter().filter(newText);
299+
return false;
300+
}
301+
302+
private void closeSearchView() {
303+
if (searchView.isShown()) {
304+
searchView.setQuery("", false);
305+
searchMenuItem.collapseActionView();
306+
searchView.setIconified(true);
307+
}
308+
}
276309
}

filebrowser/src/main/java/com/aditya/filebrowser/FileChooser.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.aditya.filebrowser;
22

33
import android.app.Activity;
4+
import android.app.SearchManager;
45
import android.content.Context;
56
import android.content.Intent;
67
import android.net.Uri;
@@ -9,6 +10,7 @@
910
import android.support.v7.view.ActionMode;
1011
import android.support.v7.widget.LinearLayoutManager;
1112
import android.support.v7.widget.RecyclerView;
13+
import android.support.v7.widget.SearchView;
1214
import android.support.v7.widget.Toolbar;
1315
import android.view.Menu;
1416
import android.view.MenuItem;
@@ -34,7 +36,7 @@
3436
/**
3537
* Created by Aditya on 4/17/2017.
3638
*/
37-
public class FileChooser extends AppCompatActivity implements OnChangeDirectoryListener,ContextSwitcher {
39+
public class FileChooser extends AppCompatActivity implements OnChangeDirectoryListener,ContextSwitcher,SearchView.OnQueryTextListener {
3840

3941
private Context mContext;
4042
private Toolbar toolbar;
@@ -57,6 +59,8 @@ public class FileChooser extends AppCompatActivity implements OnChangeDirectoryL
5759
private static ActionMode mActionMode;
5860
private static final int APP_PERMISSION_REQUEST = 0;
5961

62+
private SearchView searchView;
63+
private MenuItem searchMenuItem;
6064
@Override
6165
protected void onCreate(Bundle savedInstanceState) {
6266
super.onCreate(savedInstanceState);
@@ -113,6 +117,15 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
113117
public boolean onCreateOptionsMenu(Menu menu) {
114118
// Inflate the menu; this adds items to the action bar if it is present.
115119
getMenuInflater().inflate(R.menu.toolbar_default_menu_filechooser, menu);
120+
121+
// Get the SearchView and set the searchable configuration
122+
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
123+
searchMenuItem = menu.findItem(R.id.action_search);
124+
searchView = (SearchView)searchMenuItem.getActionView();
125+
// Assumes current activity is the searchable activity
126+
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
127+
//searchView.setSubmitButtonEnabled(true);
128+
searchView.setOnQueryTextListener(this);
116129
return true;
117130
}
118131

@@ -148,6 +161,7 @@ public void onItemClick(View view, int position) {
148161
if (mAdapter.getChoiceMode()== Constants.CHOICE_MODE.SINGLE_CHOICE) {
149162
File f = mAdapter.getItemAt(position).getFile();
150163
if (f.isDirectory()) {
164+
closeSearchView();
151165
mNavigationHelper.changeDirectory(f);
152166
} else {
153167
if(mSelectionMode==Constants.SELECTION_MODES.SINGLE_SELECTION.ordinal()) {
@@ -199,6 +213,7 @@ public void switchMode(Constants.CHOICE_MODE mode) {
199213
mActionMode.finish();
200214
} else {
201215
if(mActionMode==null) {
216+
closeSearchView();
202217
mActionMode = startSupportActionMode(new ToolbarActionMode(mContext,this,mAdapter,Constants.APP_MODE.FILE_CHOOSER,io));
203218
mActionMode.setTitle("Select Multiple Files");
204219
}
@@ -249,4 +264,23 @@ public void updateUI(File updatedDirectory,boolean shouldRePopulateDirectory) {
249264
mPathChange.getTabWithId(R.id.menu_external_storage).setTitle(FileUtils.byteCountToDisplaySize(Constants.externalStorageRoot.getUsableSpace()) + "/" + FileUtils.byteCountToDisplaySize(Constants.externalStorageRoot.getTotalSpace()));
250265

251266
}
267+
268+
@Override
269+
public boolean onQueryTextSubmit(String query) {
270+
return false;
271+
}
272+
273+
@Override
274+
public boolean onQueryTextChange(String newText) {
275+
mAdapter.getFilter().filter(newText);
276+
return false;
277+
}
278+
279+
private void closeSearchView() {
280+
if (searchView.isShown()) {
281+
searchView.setQuery("", false);
282+
searchMenuItem.collapseActionView();
283+
searchView.setIconified(true);
284+
}
285+
}
252286
}

filebrowser/src/main/java/com/aditya/filebrowser/NavigationHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void navigateToExternalStorage() {
5959
}
6060

6161
public void changeDirectory(File newDirectory) {
62-
if(newDirectory!=null && newDirectory.exists()) {
62+
if(newDirectory!=null && newDirectory.exists() && newDirectory.isDirectory()) {
6363
mFileNavigator.setmCurrentNode(newDirectory);
6464
}
6565
updateObservers(true);

0 commit comments

Comments
 (0)