GithubHelp home page GithubHelp logo

codekidx / storage-chooser Goto Github PK

View Code? Open in Web Editor NEW
719.0 31.0 153.0 695 KB

Lets user choose files in internal or external storage with just few lines of code.

License: Mozilla Public License 2.0

Java 100.00%
storage-chooser picker file-picker android-filepicker

storage-chooser's Introduction

code-kid-X (xtreme?)

Nothing special about me you want to know about, just that I write serious code for fun ..

Did you have a 🍿 ?

storage-chooser's People

Contributors

beatbrot avatar codekidx avatar fennifith avatar johrpan avatar mfonville avatar mwarning avatar theandroidmaster avatar tolriq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

storage-chooser's Issues

Is it possible to make .withFragmentManager() accept the supportFragmentManager?

I'm trying to call StorageChooser from a fragment.
If the fragment Class extends android.support.v4.app.Fragment, getFragmentManager() will of course return android.support.v4.app.FragmentManager and therefore .withFragmentManager(getFragmentManager()) will not let me do that as it currently only accepts android.app.FragmentManager as parameter.

Is there another way to do it?

PS. I made the fragment extend android.app.Fragment, it works but whenever I switch to this fragment, the other ones (that use support fragment) are not getting shut down, the same happens in the reverse way. Also, they keep visible, like this

Theming the dialog?

For some reason the dialog is not following my apps theme. Is there a special way to theme the dialog?

KitKat crash

KitKat devices (4.4.2 & 4.4.4) are crashing.
Version used: 2.0.2

Fatal Exception: android.view.InflateException: Binary XML file line #150: Error inflating class at.markushi.ui.CircleButton
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:709)
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:698)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5377)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:709)
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:698)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5377)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by android.content.res.Resources$NotFoundException: File res/drawable/check.xml from drawable resource ID #0x7f02005c
at android.content.res.Resources.loadDrawable(Resources.java:2222)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.(ImageView.java:129)
at android.widget.ImageView.(ImageView.java:119)
at at.markushi.ui.CircleButton.(CircleButton.java:43)
at java.lang.reflect.Constructor.constructNative(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:709)
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:698)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5377)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag vector
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:933)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
at android.content.res.Resources.loadDrawable(Resources.java:2218)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.(ImageView.java:129)
at android.widget.ImageView.(ImageView.java:119)
at at.markushi.ui.CircleButton.(CircleButton.java:43)
at java.lang.reflect.Constructor.constructNative(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:709)
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:698)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5377)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
at dalvik.system.NativeStart.main(NativeStart.java)

Usage in a fragment?

Is there a way to get this to work in a fragment? I'm experiencing crashes because of this error:

'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()'

any help would be great.

App crash when opening on emulator API 19

android.view.InflateException: Binary XML file line #0: Error inflating class android.widget.ListView
   at android.view.LayoutInflater.createView(LayoutInflater.java:621)
   at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
   at android.view.LayoutInflater.onCreateView(LayoutInflater.java:670)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
   at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:329)
   at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:693)
   at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
   at android.app.BackStackRecord.run(BackStackRecord.java:684)
   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
   at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
   at android.os.Handler.handleCallback(Handler.java:733)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:136)
   at android.app.ActivityThread.main(ActivityThread.java:5017)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
   at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
   at java.lang.reflect.Constructor.constructNative(Native Method)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
   at android.view.LayoutInflater.createView(LayoutInflater.java:595)
   at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
   at android.view.LayoutInflater.onCreateView(LayoutInflater.java:670) 
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:759) 
   at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
   at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
   at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:329) 
   at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:693) 
   at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) 
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
   at android.app.BackStackRecord.run(BackStackRecord.java:684) 
   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
   at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
   at android.os.Handler.handleCallback(Handler.java:733) 
   at android.os.Handler.dispatchMessage(Handler.java:95) 
   at android.os.Looper.loop(Looper.java:136) 
   at android.app.ActivityThread.main(ActivityThread.java:5017) 
   at java.lang.reflect.Method.invokeNative(Native Method) 
   at java.lang.reflect.Method.invoke(Method.java:515) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
   at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f0800c3 a=-1 r=0x7f0800c3}
   at android.content.res.Resources.loadDrawable(Resources.java:2073)
   at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
   at android.widget.AbsListView.<init>(AbsListView.java:785)
   at android.widget.ListView.<init>(ListView.java:146)
   at android.widget.ListView.<init>(ListView.java:142)
   at java.lang.reflect.Constructor.constructNative(Native Method) 
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
   at android.view.LayoutInflater.createView(LayoutInflater.java:595) 
   at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
   at android.view.LayoutInflater.onCreateView(LayoutInflater.java:670) 
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:759) 
   at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
   at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
   at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:329) 
   at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:693) 
   at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) 
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
   at android.app.BackStackRecord.run(BackStackRecord.java:684) 
   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
   at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
   at android.os.Handler.handleCallback(Handler.java:733) 
   at android.os.Handler.dispatchMessage(Handler.java:95) 
   at android.os.Looper.loop(Looper.java:136) 
   at android.app.ActivityThread.main(ActivityThread.java:5017) 
   at java.lang.reflect.Method.invokeNative(Native Method) 
   at java.lang.reflect.Method.invoke(Method.java:515) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
   at dalvik.system.NativeStart.main(Native Method) 

That happens when I open chooser like this:

StorageChooser testChooser = new StorageChooser.Builder()
                .withActivity(getActivity())
                .withFragmentManager(getActivity().getFragmentManager())
                .skipOverview(true, getContext().getSharedPreferences("default", Context.MODE_PRIVATE).getString(PREFERENCE_TESTS_FOLDER, null))
                .filter(StorageChooser.FileType.DOCS)
                .allowCustomPath(true)
                .setType(FILE_PICKER)
                .disableMultiSelect()
                .build();

My guess is it has something to do with custom_storage_list.xml, which contains this ListView

<ListView
            android:id="@+id/storage_list_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/select_button"
            android:layout_below="@id/custom_path_header"
            android:divider="@null"
            android:listSelector="@drawable/ripple"
            android:longClickable="true" />

ripple.xml is in drawable-v21 folder and contains <ripple> tag, which appeared in API 21. I'm going to try and fix it myself now

The Storage you have chosen is not accessible. Message shown...

1 One of My Mobile Phone of Internal Storage shown in the dialog when i click on that the Message shows The Storage you have chosen is not accessible.My phone configuration is

DEVICE
Device YUNICORN (YUNICORN) Manufacturer YU Device type Phone Device language English CPU make Mediatek CPU model MT6755M Native platform armeabi-v7a, armeabi, arm64-v8a RAM (MB) 4096 Screen size 1080 × 1920 Screen density (DPI) 480 OpenGL ES version 3.0 OS Android 6.0

2 i have also one question can we access usb drive from your storage chooser app i really need usb drive pl help me i am connecting usb drive using otg cable to the android device. as like path given by storage chooser app for storages can usb give that type of path or give me some link for reference.

selecting a file in /emulated/0/download folder

Same issue when just trying to select a file on Genymotion AND My LG V20 actual device after selecting a file in /emulated/0/download folder

java.lang.NullPointerException: Attempt to invoke interface method 'void com.codekidlabs.storagechooser.StorageChooser$OnSelectListener.onSelect(java.lang.String)' on a null object reference at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment$7$1.run(SecondaryChooserFragment.java:369) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Support for Instant Run

Great library, but would you consider adding support for Instant Run?

I'm unable to use your library when Instant Run is enabled and receive an error message like "Immutable jar com.codeKidx..... found" on attempted launch.

I can provide more detail if you need it. Thanks so much.

AndroidRuntime: FATAL EXCEPTION:

Its throws exception after i select internal / external storage in my Samsung SM-G360H
Android version 4.4.4 please fix this ASAP

FATAL EXCEPTION: main

                                                             android.view.InflateException: Binary XML file line #85: Error inflating class <unknown>
                                                                 at android.view.LayoutInflater.createView(LayoutInflater.java:627)
                                                                 at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
                                                                 at android.view.LayoutInflater.onCreateView(LayoutInflater.java:676)
                                                                 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:701)
                                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:762)
                                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:771)
                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:499)
                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
                                                                 at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:329)
                                                                 at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:693)
                                                                 at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
                                                                 at android.app.BackStackRecord.run(BackStackRecord.java:684)
                                                                 at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
                                                                 at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
                                                                 at android.os.Handler.handleCallback(Handler.java:733)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                 at android.os.Looper.loop(Looper.java:136)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5433)
                                                                 at java.lang.reflect.Method.invokeNative(Native Method)
                                                                 at java.lang.reflect.Method.invoke(Method.java:515)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
                                                                 at dalvik.system.NativeStart.main(Native Method)
                                                              Caused by: java.lang.reflect.InvocationTargetException
                                                                 at java.lang.reflect.Constructor.constructNative(Native Method)
                                                                 at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
                                                                 at android.view.LayoutInflater.createView(LayoutInflater.java:601)
                                                                 at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
                                                                 at android.view.LayoutInflater.onCreateView(LayoutInflater.java:676) 
                                                                 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:701) 
                                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:762) 
                                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:771) 
                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:499) 
                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
                                                                 at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:329) 
                                                                 at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:693) 
                                                                 at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) 
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
                                                                 at android.app.BackStackRecord.run(BackStackRecord.java:684) 
                                                                 at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
                                                                 at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
                                                                 at android.os.Handler.handleCallback(Handler.java:733) 
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                 at android.os.Looper.loop(Looper.java:136) 
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5433) 
                                                                 at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                 at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
                                                                 at dalvik.system.NativeStart.main(Native Method) 
                                                              Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f0200ee a=-1 r=0x7f0200ee}
                                                                 at android.content.res.Resources.loadDrawable(Resources.java:3423)
                                                                 at android.content.res.TypedArray.getDrawable(TypedArray.java:614)
                                                                 at android.widget.AbsListView.<init>(AbsListView.java:834)
                                                                 at android.widget.ListView.<init>(ListView.java:152)
                                                                 at android.widget.ListView.<init>(ListView.java:148)
                                                                 at java.lang.reflect.Constructor.constructNative(Native Method) 
                                                                 at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                                                                 at android.view.LayoutInflater.createView(LayoutInflater.java:601) 
                                                                 at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
                                                                 at android.view.LayoutInflater.onCreateView(LayoutInflater.java:676) 
                                                                 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:701) 
                                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:762) 
                                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:771) 
                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:499) 
                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
                                                                 at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:329) 
                                                                 at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:693) 
                                                                 at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) 
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
                                                                 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
                                                                 at android.app.BackStackRecord.run(BackStackRecord.java:684) 
                                                                 at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
                                                                 at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
                                                                 at android.os.Handler.handleCallback(Handler.java:733) 
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                 at android.os.Looper.loop(Looper.java:136) 
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5433) 
                                                                 at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                 at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
                                                                 at dalvik.system.NativeStart.main(Native Method) 

Use mime types for filters

It would be more flexible to have an API to allow input of a list of mime types for the filter instead of the predefined ones. For example, I just want to filter for '*.txt' files, but with the current implementation that is not possible.

Add possibility to change filePath text color

Hi,
I have yellow "colorPrimary" and the white text color on the filePath is hard to read. I would like to change it to black. Is this possible and if not, it would be a great enhancement.

List blinks after opening a storage

See the video
https://www.dropbox.com/s/4ts52h6maixfasg/mobizen_20170310_202223.mp4?dl=1

Code in Fragment:

public class MyFragment extends android.support.v4.app.Fragment{
...
StorageChooser chooser = new StorageChooser.Builder()
                .withActivity(getActivity())
                .withFragmentManager(getChildFragmentManager())
                .withPredefinedPath(Environment.getExternalStorageState())
                .setType(StorageChooser.DIRECTORY_CHOOSER)
                .applyMemoryThreshold(false)
                .allowCustomPath(true)
                .build();

        chooser.setOnSelectListener(new StorageChooser.OnSelectListener() {
            @Override
            public void onSelect(String path) {
                handleDirectoryChoice(path);
            }
        });
        chooser.show();
...

Gradle : Failed to resolve

I added below to app level gradle and it throws error after sync gradle.

compile 'com.github.codekidX:storage-chooser:1.0.33'

Error:(71, 13) Failed to resolve: com.github.codekidX:storage-chooser:1.0.33

White screen and stuck in ColorOS

In the OPPO phone ColorOS above can not click, the dialog box white screen, stuck, can only be forced to stop.
(This is my user feedback, I do not have ColorOS)
Screenshot
Hope you try to fix it, thanks

not all config optoins applied

file: ChooserDialogFragment.java need changes:

private View getLayout(LayoutInflater inflater, ViewGroup container) {
private View getLayout(LayoutInflater inflater, ViewGroup container) {
		mConfig = StorageChooser.getsConfig();
		mLayout = inflater.inflate(R.layout.storage_list, container, false);
		initListView(getContext(), mLayout, mConfig.isShowMemoryBar());

		if (mConfig.getDialogTitle() != null) {
			TextView dialogTitle = (TextView) mLayout.findViewById(R.id.dialog_title);
			dialogTitle.setText(mConfig.getDialogTitle());
		}

		return mLayout;
	}
...
// just add the internal storage and avoid adding emulated henceforth
if (mConfig.getInternalStorageText() != null) {
			storages.setStorageTitle(mConfig.getInternalStorageText());
		} else {
			storages.setStorageTitle(INTERNAL_STORAGE_TITLE);
		}

1.0.33 -> 1.0.34

please update dependency in readme to 1.0.34:

com.github.codekidX:storage-chooser:1.0.33

Files may appear when choosing folders

Under certain conditions, file names appears even though the type is set to StorageChooser.DIRECTORY_CHOOSER. Steps to repro:

  1. Open the Storage Chooser with the type set to DIRECTORY_CHOOSER
  2. Navigate to a folder where you know other files exist (you won't see them yet)
  3. Create a new folder, any name
  4. Once the folder is created, you see all the files in that folder.

See the linked video:
YouTube

root required?

How is this being done without ACTION_OPEN_DOCUMENT_TREE and UriPermission? Is root required?

Issue: android.view.InflateException: Error inflating class at.markushi.ui.CircleButton

[Running on API 19 MiUI v8]
It happens right after the user chooses a storage.

FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #150: Error inflating class at.markushi.ui.CircleButton
at android.view.LayoutInflater.createView(LayoutInflater.java:623)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:699)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
at android.view.LayoutInflater.inflate(LayoutInflater.java:400)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:698)
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:690)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1449)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5113)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:597)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:699) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:400) 
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358) 
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:698) 
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) 
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
at android.app.BackStackRecord.run(BackStackRecord.java:690) 
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1449) 
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5113) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
at dalvik.system.NativeStart.main(Native Method) 

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/check.xml from drawable resource ID #0x7f02005c
at android.content.res.Resources.loadDrawable(Resources.java:2139)
at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:393)
at android.content.res.Resources.loadDrawable(Resources.java:2062)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.ImageView.(ImageView.java:129)
at android.widget.ImageView.(ImageView.java:119)
at at.markushi.ui.CircleButton.(CircleButton.java:43)
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at android.view.LayoutInflater.createView(LayoutInflater.java:597) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:699) 
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358) 
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:698) 
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) 

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag vector
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:935)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:879)
at android.content.res.Resources.createFromXml(Resources.java:2515)
at android.content.res.Resources.loadDrawable(Resources.java:2135)
at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:393) 
at android.content.res.Resources.loadDrawable(Resources.java:2062) 
at android.content.res.TypedArray.getDrawable(TypedArray.java:602) 
at android.widget.ImageView.(ImageView.java:129) 
at android.widget.ImageView.(ImageView.java:119) 
at at.markushi.ui.CircleButton.(CircleButton.java:43) 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at android.view.LayoutInflater.createView(LayoutInflater.java:597) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:699) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:400) 
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.getLayout(SecondaryChooserFragment.java:358) 
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.onCreateDialog(SecondaryChooserFragment.java:698) 
at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) 
android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5113) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
at dalvik.system.NativeStart.main(Native Method) 

Fatal Exception: java.lang.IllegalArgumentException: Invalid path: /storage/container

One of my users causes this error when I use your library :

Link : http://crashes.to/s/50412a88afe

Fatal Exception: java.lang.IllegalArgumentException: Invalid path: /storage/container at android.os.StatFs.doStat(StatFs.java:46) at android.os.StatFs.(StatFs.java) at com.codekidlabs.storagechooser.utils.MemoryUtil.getTotalMemorySize(MemoryUtil.java:71) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.populateList(ChooserDialogFragment.java:237) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.initListView(ChooserDialogFragment.java:98) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.getLayout(ChooserDialogFragment.java:81) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.onCreateDialog(ChooserDialogFragment.java:250) at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) at android.app.BackStackRecord.run(BackStackRecord.java:684) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5679) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) at dalvik.system.NativeStart.main(NativeStart.java) Caused by libcore.io.ErrnoException: statvfs failed: EACCES (Permission denied) at libcore.io.Posix.statvfs(Posix.java) at libcore.io.ForwardingOs.statvfs(ForwardingOs.java:132) at android.os.StatFs.doStat(StatFs.java:44) at android.os.StatFs.(StatFs.java) at com.codekidlabs.storagechooser.utils.MemoryUtil.getTotalMemorySize(MemoryUtil.java:71) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.populateList(ChooserDialogFragment.java:237) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.initListView(ChooserDialogFragment.java:98) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.getLayout(ChooserDialogFragment.java:81) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.onCreateDialog(ChooserDialogFragment.java:250) at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) at android.app.BackStackRecord.run(BackStackRecord.java:684) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5679) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) at dalvik.system.NativeStart.main(NativeStart.java)

ErrnoException: statvfs failed: ENOENT (No such file or directory)

Used only to Select Storage

Logs from Crashlytics

statvfs failed: ENOENT (No such file or directory)

com.codekidlabs.storagechooser.utils.MemoryUtil.getTotalMemorySize (MemoryUtil.java:71)
com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.populateList (ChooserDialogFragment.java:255)
com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.initListView (ChooserDialogFragment.java:114)
com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.getLayout (ChooserDialogFragment.java:84)
com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.onCreateDialog (ChooserDialogFragment.java:298)

Issue: android.view.InflateException: Binary XML file line #17: Error inflating class TextView

When including the storage-chooser library in my app, Google Play gives the following error during its pre-launch test on various devices. The Samsung S6 on Android 5.1 produces the following stack trace:

FATAL EXCEPTION: main
Process: com.mobiltal.geoohLive, PID: 24193
android.view.InflateException: Binary XML file line #17: Error inflating class TextView
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:770)
at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.widget.Editor.showError(Editor.java:433)
at android.widget.Editor.setError(Editor.java:474)
at android.widget.TextView.setError(TextView.java:5542)
at android.widget.TextView.setError(TextView.java:5527)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.validateFolderName(SecondaryChooserFragment.java:525)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment.access$600(SecondaryChooserFragment.java:49)
at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment$5.onClick(SecondaryChooserFragment.java:130)
at android.view.View.performClick(View.java:5254)
at android.view.View$PerformClick.run(View.java:21173)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 24
at android.content.res.TypedArray.getColor(TypedArray.java:403)
at android.widget.TextView.(TextView.java:1105)
at android.widget.TextView.(TextView.java:1017)
at android.support.v7.widget.AppCompatTextView.(AppCompatTextView.java:62)
at android.support.v7.widget.AppCompatTextView.(AppCompatTextView.java:58)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:103)
at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1029)
at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1087)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:47)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:732)
... 20 more

Not able to select subfolders

I'm able to see single dialog where internal memory or external memory option showing. when i clicked on anyone, dialog dismiss.
i tried with chossertype filepicker as well as directory picker

OnCancelListener is never triggered when cancelling from overview

I enable the overview so that the user can select different storage areas. However, if they tap the back button to cancel the onCancel() callback is never triggered. It works fine once they select their storage area and see the list of folders and THEN hit the back button to cancel. I think the onCancel() should be triggered from the overview as well.

Also, as a bonus, I'd suggest adding the option to skip the overview if the device only has internal storage but to show it if there are other storage areas. Basically, only force the user to choose where there are options to choose from.

Backport New Folder Icon Animation to API 16 (and below...)

Vector Animations are only useful if you're actually changing the shape of the vector drawable's path (such as a morph animation or a visibility strike). Using a regular drawable animation could fix this, or we could be super lazy and rotate the ImageView 45 degrees programatically instead ;)

App crashes by no view found exception

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.atlasso/droidninja.filepicker.FilePickerActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f100125 (com.atlasso:id/container) for fragment MediaPickerFragment{37d7bfb #0 id=0x7f100125 MediaPickerFragment}
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2607)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2701)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5789)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:739)
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f100125 (com.atlasso:id/container) for fragment MediaPickerFragment{37d7bfb #0 id=0x7f100125 MediaPickerFragment}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1413)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3221)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3171)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:560)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1245)
at android.app.Activity.performStart(Activity.java:6286)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2555)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2701) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491) 
at android.os.Handler.dispatchMessage(Handler.java:111) 
at android.os.Looper.loop(Looper.java:207) 
at android.app.ActivityThread.main(ActivityThread.java:5789) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:739) 

MPL 2.0 notice

I want to use this library on my commercial android app.
Where to put noticement in my application for legal use?

IndexOutOfBoundsException exception thrown

While testing it out in my app, I navigated to an internal storage folder, created a new folder and then attempted to navigate to that folder. At that moment it throws IndexOutOfBoundsException.

06-14 22:39:08.242 3521-3521/com.blitterhead.ampwifi E/AndroidRuntime: FATAL EXCEPTION: main Process: com.blitterhead.ampwifi, PID: 3521 java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.get(ArrayList.java:411) at com.codekidlabs.storagechooser.fragments.SecondaryChooserFragment$7$1.run(SecondaryChooserFragment.java:365) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

I built the storage chooser as follows:
StorageChooser chooser = new StorageChooser.Builder() .withActivity(SettingsFragmentMisc.this.getActivity()) .withFragmentManager(getFragmentManager()) .withMemoryBar(true) .allowCustomPath(true) .allowAddFolder(true) .setType(StorageChooser.DIRECTORY_CHOOSER) .build();

I'm able to select folders fine as long as they are not created in that session. So when I re-ran the app and navigated back to where I created the new folder, I was able to select the new folder and everything worked fine. So, to be clear, the folder does get created fine, I just can't select it the first time through.

Here's how I added the dependency to storagechooser:
compile 'com.github.codekidX:storage-chooser:1.0.35'

Does this work on external SD card?

I'm currently using SAF using Intent OPEN_CONTENT to get writeable uri permissions on an external SD card before I can write files to it. Will this library help me avoid writing a lot of code to use writeable uri permissions? Would appreciate a quick reply.

Reduce minSdkVersion to API 9

This will probably require some slightly more significant changes to how the library works instead of just modifying the layout files. When tested on 10, I got a NullPonterException at ChooserDialogFragment.populateList(ChooserDialogFragment.java:261). This could be for a few different reasons, but I'll look at it more closely later this week.

How do I enable folder creation?

I'm following the readme to build a directory chooser, but I seem to be missing the "+" from the screenshots to create folders - how do I enable that ?

StorageChooser chooser = new StorageChooser.Builder()
.withActivity(this.getActivity())
.withFragmentManager(this.getFragmentManager())
.withMemoryBar(true)
.allowCustomPath(true)
.setType(StorageChooser.DIRECTORY_CHOOSER)
.build();

Image thumbnails

I think it would be a good improvement to add an option to show image files' thumbnails instead of type icon.

While creating a new folder, you can enter line feeds while entering a folder name

image

As the screenshot above demonstrates, while entering a folder name in the create box, you can enter multiple line feeds. Hitting the create button results in an error, which I guess is ok, but the user should not be allowed to enter a line feed.

This can be done easily on the soft keyboard by calling setImeOptions(EditorInfo.IME_ACTION_DONE). However, you'll also need to filter out line feeds (and any other funny characters that may not be appropriate for a folder name) using a filter as user may use a real keyboard. And also, maybe set the maxLines to 1 in case someone copies and pastes multiple lines.

Possibility to change textColor

Hi,
I am using Theme.AppCompat in my app and the StorageChooser Dialog has white text on white background. I did not find any way to change the text color. Is this possible and if not, it would be a great enhancement.

Padding chooser heading

When I translate the chooser heading with the static class, there is no padding. It's on this textView R.id. dialog_title in this layout R.layout.storage_list.

The translate sentence is "Choisissez l'emplacement de stockage" if you want to test

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

The error happened when I rotate device with open dialog "Choose storage" and pick any storage.
Chooser configuration
new StorageChooser.Builder() .withActivity(this) .withFragmentManager(getFragmentManager()) .withMemoryBar(true) .allowCustomPath(true) .setType(StorageChooser.FILE_PICKER) .shouldResumeSession(false) .build();
Also if choose storage and rotate device I see next
image

Full error:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1328) at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1346) at android.app.BackStackRecord.commitInternal(BackStackRecord.java:729) at android.app.BackStackRecord.commit(BackStackRecord.java:705) at android.app.DialogFragment.show(DialogFragment.java:230) at com.codekidlabs.storagechooser.utils.DiskUtil.showSecondaryChooser(DiskUtil.java:67) at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment$1$1.run(ChooserDialogFragment.java:130) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

java.lang.RuntimeException: Unable to start activity

crashes if open dialog and lost activity

FATAL EXCEPTION: main
java.lang.RuntimeException: 
Unable to start activity ComponentInfo{***}: 
java.lang.NullPointerException: 
Attempt to invoke virtual method 'void android.app.Dialog.setContentView(android.view.View)' on a null object reference
                                                   

and missed trigger to force close dialog...

java.lang.IllegalArgumentException Caused by: libcore.io.ErrnoException

`java.lang.IllegalArgumentException:
at android.os.StatFs.doStat (StatFs.java:46)
at android.os.StatFs. (StatFs.java:39)
at com.codekidlabs.storagechooser.utils.MemoryUtil.getTotalMemorySize (MemoryUtil.java:71)
at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.populateList (ChooserDialogFragment.java:252)
at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.initListView (ChooserDialogFragment.java:107)
at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.getLayout (ChooserDialogFragment.java:86)
at com.codekidlabs.storagechooser.fragments.ChooserDialogFragment.onCreateDialog (ChooserDialogFragment.java:265)
at android.app.DialogFragment.getLayoutInflater (DialogFragment.java:398)
at android.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:890)
at android.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.java:1062)
at android.app.BackStackRecord.run (BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions (FragmentManagerImpl.java:1453)
at android.app.FragmentManagerImpl$1.run (FragmentManagerImpl.java:443)
at android.os.Handler.handleCallback (Handler.java:733)
at android.os.Handler.dispatchMessage (Handler.java:95)
at android.os.Looper.loop (Looper.java:146)
at android.app.ActivityThread.main (ActivityThread.java:5487)
at java.lang.reflect.Method.invokeNative (Method.java)
at java.lang.reflect.Method.invoke (Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1099)
at dalvik.system.NativeStart.main (NativeStart.java)

Caused by: libcore.io.ErrnoException:
at libcore.io.Posix.statvfs (Posix.java)
at libcore.io.ForwardingOs.statvfs (ForwardingOs.java:132)
at android.os.StatFs.doStat (StatFs.java:44)`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.