update to rev 465
@@ -1,6 +1,6 @@
 | 
			
		||||
# android-filechooser
 | 
			
		||||
 | 
			
		||||
* Version: 5.4
 | 
			
		||||
* Version: 5.4.4 beta
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Feel free to contact us at:
 | 
			
		||||
@@ -18,11 +18,31 @@ project. We hope this project will be always useful for everyone.
 | 
			
		||||
* C
 | 
			
		||||
* Simon McCorkindale
 | 
			
		||||
    + [Website](http://www.aroha.mobi/)
 | 
			
		||||
* Philipp Crocoll
 | 
			
		||||
    + Author of open source project [Keepass2Android](https://keepass2android.codeplex.com/)
 | 
			
		||||
* And others.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# HISTORY
 | 
			
		||||
 | 
			
		||||
* Version 5.4.4 beta:
 | 
			
		||||
    + *Initialize:* October 23, 2013
 | 
			
		||||
 | 
			
		||||
* Version 5.4.3:
 | 
			
		||||
    + *Release:* October 23, 2013
 | 
			
		||||
 | 
			
		||||
* Version 5.4.3 beta:
 | 
			
		||||
    + *Initialize:* September 30, 2013
 | 
			
		||||
 | 
			
		||||
* Version 5.4.2
 | 
			
		||||
    + *Release:* September 27, 2013
 | 
			
		||||
    + Fix light themes with dark action bar.
 | 
			
		||||
 | 
			
		||||
* Version 5.4.1
 | 
			
		||||
    + *Release:* September 26, 2013
 | 
			
		||||
    + Fix light themes: now they use light action bar.
 | 
			
		||||
    + Add light themes with dark action bar.
 | 
			
		||||
 | 
			
		||||
* Version 5.4
 | 
			
		||||
    + *Release:* August 02, 2013
 | 
			
		||||
    + Integrate library `android-support-v7-appcompat` for action bar in APIs
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<classpath>
 | 
			
		||||
	<classpathentry kind="src" path="src"/>
 | 
			
		||||
	<classpathentry kind="src" path="gen"/>
 | 
			
		||||
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
 | 
			
		||||
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
 | 
			
		||||
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
 | 
			
		||||
	<classpathentry kind="src" path="src"/>
 | 
			
		||||
	<classpathentry kind="src" path="gen"/>
 | 
			
		||||
	<classpathentry kind="output" path="bin/classes"/>
 | 
			
		||||
</classpath>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,12 +7,10 @@
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    package="group.pals.android.lib.ui.filechooser"
 | 
			
		||||
    android:versionCode="@integer/afc_lib_version_code"
 | 
			
		||||
    android:versionName="@string/afc_lib_version_name" >
 | 
			
		||||
    package="group.pals.android.lib.ui.filechooser" >
 | 
			
		||||
 | 
			
		||||
    <uses-sdk
 | 
			
		||||
        android:minSdkVersion="4"
 | 
			
		||||
        android:targetSdkVersion="17" />
 | 
			
		||||
        android:targetSdkVersion="18" />
 | 
			
		||||
 | 
			
		||||
</manifest>
 | 
			
		||||
@@ -8,6 +8,6 @@
 | 
			
		||||
# project structure.
 | 
			
		||||
 | 
			
		||||
# Project target.
 | 
			
		||||
target=android-17
 | 
			
		||||
target=android-18
 | 
			
		||||
android.library=true
 | 
			
		||||
android.library.reference.1=../../../../../AppData/Local/Android/android-sdk/extras/android/support/v7/appcompat
 | 
			
		||||
android.library.reference.1=../../android-support-v7-appcompat
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 975 B After Width: | Height: | Size: 920 B  | 
| 
		 Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 884 B After Width: | Height: | Size: 885 B  | 
| 
		 Before Width: | Height: | Size: 764 B After Width: | Height: | Size: 780 B  | 
| 
		 Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 741 B After Width: | Height: | Size: 755 B  | 
| 
		 Before Width: | Height: | Size: 607 B After Width: | Height: | Size: 638 B  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 569 B After Width: | Height: | Size: 643 B  | 
| 
		 Before Width: | Height: | Size: 474 B After Width: | Height: | Size: 522 B  | 
| 
		 Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.1 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.3 KiB  | 
| 
		 Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.0 KiB  | 
@@ -8,7 +8,7 @@
 | 
			
		||||
 | 
			
		||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Light" parent="@style/Afc.BaseTheme.Light">
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Light.DarkActionBar" parent="@style/Afc.BaseTheme.Light.DarkActionBar">
 | 
			
		||||
        <item name="afc_ic_menu_bookmarks">@drawable/afc_ic_menu_bookmarks_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_home">@drawable/afc_ic_menu_home_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_gridview">@drawable/afc_ic_menu_gridview_light</item>
 | 
			
		||||
@@ -29,19 +29,40 @@
 | 
			
		||||
        <item name="afc_button_bar_button_style">?android:attr/buttonBarButtonStyle</item>
 | 
			
		||||
    </style>
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Light" parent="@style/Afc.BaseTheme.Light">
 | 
			
		||||
        <item name="afc_ic_menu_bookmarks">@drawable/afc_ic_menu_bookmarks_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_home">@drawable/afc_ic_menu_home_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_gridview">@drawable/afc_ic_menu_gridview_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_listview">@drawable/afc_ic_menu_listview_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_asc">@drawable/afc_ic_menu_sort_by_date_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_desc">@drawable/afc_ic_menu_sort_by_date_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_asc">@drawable/afc_ic_menu_sort_by_name_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_desc">@drawable/afc_ic_menu_sort_by_name_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_asc">@drawable/afc_ic_menu_sort_by_size_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_desc">@drawable/afc_ic_menu_sort_by_size_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_date_asc">@drawable/afc_ic_menu_sort_by_date_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_date_desc">@drawable/afc_ic_menu_sort_by_date_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_name_asc">@drawable/afc_ic_menu_sort_by_name_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_name_desc">@drawable/afc_ic_menu_sort_by_name_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_size_asc">@drawable/afc_ic_menu_sort_by_size_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_size_desc">@drawable/afc_ic_menu_sort_by_size_desc_dark</item>
 | 
			
		||||
        <item name="afc_button_bar_style">?android:attr/buttonBarStyle</item>
 | 
			
		||||
        <item name="afc_button_bar_button_style">?android:attr/buttonBarButtonStyle</item>
 | 
			
		||||
    </style>
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseTheme.Dialog.Light" parent="@android:style/Theme.Holo.Light.Dialog"></style>
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Dialog.Light" parent="@style/Afc.BaseTheme.Dialog.Light">
 | 
			
		||||
        <item name="afc_ic_menu_bookmarks">@drawable/afc_ic_menu_bookmarks_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_home">@drawable/afc_ic_menu_home_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_gridview">@drawable/afc_ic_menu_gridview_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_listview">@drawable/afc_ic_menu_listview_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_asc">@drawable/afc_ic_menu_sort_by_date_asc_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_desc">@drawable/afc_ic_menu_sort_by_date_desc_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_asc">@drawable/afc_ic_menu_sort_by_name_asc_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_desc">@drawable/afc_ic_menu_sort_by_name_desc_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_asc">@drawable/afc_ic_menu_sort_by_size_asc_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_desc">@drawable/afc_ic_menu_sort_by_size_desc_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_bookmarks">@drawable/afc_ic_menu_bookmarks_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_home">@drawable/afc_ic_menu_home_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_gridview">@drawable/afc_ic_menu_gridview_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_listview">@drawable/afc_ic_menu_listview_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_asc">@drawable/afc_ic_menu_sort_by_date_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_desc">@drawable/afc_ic_menu_sort_by_date_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_asc">@drawable/afc_ic_menu_sort_by_name_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_desc">@drawable/afc_ic_menu_sort_by_name_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_asc">@drawable/afc_ic_menu_sort_by_size_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_desc">@drawable/afc_ic_menu_sort_by_size_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_date_asc">@drawable/afc_ic_menu_sort_by_date_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_date_desc">@drawable/afc_ic_menu_sort_by_date_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_name_asc">@drawable/afc_ic_menu_sort_by_name_asc_dark</item>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,9 @@
 | 
			
		||||
 | 
			
		||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseTheme.Light" parent="@style/Theme.AppCompat.Light.DarkActionBar"></style>
 | 
			
		||||
    <style name="Afc.BaseTheme.Light.DarkActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar"></style>
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Light" parent="@style/Afc.BaseTheme.Light">
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Light.DarkActionBar" parent="@style/Afc.BaseTheme.Light.DarkActionBar">
 | 
			
		||||
        <item name="afc_ic_menu_bookmarks">@drawable/afc_ic_menu_bookmarks_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_home">@drawable/afc_ic_menu_home_light</item>
 | 
			
		||||
        <item name="afc_ic_menu_gridview">@drawable/afc_ic_menu_gridview_light</item>
 | 
			
		||||
@@ -31,4 +31,51 @@
 | 
			
		||||
        <item name="afc_button_bar_button_style">?android:attr/buttonBarButtonStyle</item>
 | 
			
		||||
    </style>
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.Theme.Light.DarkActionBar" parent="@style/Afc.BaseThemeHelper.Light.DarkActionBar">
 | 
			
		||||
 | 
			
		||||
        <!-- AOSP -->
 | 
			
		||||
 | 
			
		||||
        <item name="android:windowBackground">@drawable/aosp_background_holo_light</item>
 | 
			
		||||
 | 
			
		||||
        <!-- android-filechooser -->
 | 
			
		||||
 | 
			
		||||
        <item name="afc_theme_dialog">@style/Afc.Theme.Dialog.Light</item>
 | 
			
		||||
        <item name="afc_button_home">@drawable/afc_button_home_dark</item>
 | 
			
		||||
        <item name="afc_ic_widget_search_view_action_search">@drawable/afc_ic_action_search_dark</item>
 | 
			
		||||
        <item name="afc_ic_widget_search_view_action_clear">@drawable/afc_ic_action_clear_dark</item>
 | 
			
		||||
        <item name="afc_badge_file_provider_localfile">@drawable/afc_badge_file_provider_localfile_dark</item>
 | 
			
		||||
        <item name="afc_selector_image_button">@drawable/afc_selector_image_button_light</item>
 | 
			
		||||
        <item name="afc_selector_button_location">@drawable/afc_selector_button_location_light</item>
 | 
			
		||||
        <item name="afc_selector_main_button_navi_left">@drawable/afc_selector_main_button_navi_left_light</item>
 | 
			
		||||
        <item name="afc_selector_main_button_navi_right">@drawable/afc_selector_main_button_navi_right_light</item>
 | 
			
		||||
        <item name="afc_selector_button_ok_saveas">@drawable/afc_selector_button_ok_saveas_light</item>
 | 
			
		||||
        <item name="afc_selector_action_navi_left_foreground">@drawable/afc_selector_action_navi_left_light_foreground</item>
 | 
			
		||||
        <item name="afc_selector_action_navi_right_foreground">@drawable/afc_selector_action_navi_right_light_foreground</item>
 | 
			
		||||
        <item name="afc_color_listview_cache_hint">@color/afc_listview_cache_hint_light</item>
 | 
			
		||||
        <item name="afc_color_list_group_view_background">@color/afc_list_group_view_background_light</item>
 | 
			
		||||
    </style>
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseTheme.Light" parent="@style/Theme.AppCompat.Light"></style>
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Light" parent="@style/Afc.BaseTheme.Light">
 | 
			
		||||
        <item name="afc_ic_menu_bookmarks">@drawable/afc_ic_menu_bookmarks_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_home">@drawable/afc_ic_menu_home_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_gridview">@drawable/afc_ic_menu_gridview_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_listview">@drawable/afc_ic_menu_listview_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_asc">@drawable/afc_ic_menu_sort_by_date_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_date_desc">@drawable/afc_ic_menu_sort_by_date_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_asc">@drawable/afc_ic_menu_sort_by_name_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_name_desc">@drawable/afc_ic_menu_sort_by_name_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_asc">@drawable/afc_ic_menu_sort_by_size_asc_dark</item>
 | 
			
		||||
        <item name="afc_ic_menu_sort_by_size_desc">@drawable/afc_ic_menu_sort_by_size_desc_dark</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_date_asc">@drawable/afc_ic_menu_sort_by_date_asc</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_date_desc">@drawable/afc_ic_menu_sort_by_date_desc</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_name_asc">@drawable/afc_ic_menu_sort_by_name_asc</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_name_desc">@drawable/afc_ic_menu_sort_by_name_desc</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_size_asc">@drawable/afc_ic_menu_sort_by_size_asc</item>
 | 
			
		||||
        <item name="afc_ic_button_sort_by_size_desc">@drawable/afc_ic_menu_sort_by_size_desc</item>
 | 
			
		||||
        <item name="afc_button_bar_style">?android:attr/buttonBarStyle</item>
 | 
			
		||||
        <item name="afc_button_bar_button_style">?android:attr/buttonBarButtonStyle</item>
 | 
			
		||||
    </style>
 | 
			
		||||
 | 
			
		||||
</resources>
 | 
			
		||||
@@ -8,12 +8,6 @@
 | 
			
		||||
 | 
			
		||||
<resources>
 | 
			
		||||
 | 
			
		||||
    <string name="afc_lib_name">android-filechooser</string>
 | 
			
		||||
 | 
			
		||||
    <integer name="afc_lib_version_code">51</integer>
 | 
			
		||||
 | 
			
		||||
    <string name="afc_lib_version_name">5.4</string>
 | 
			
		||||
 | 
			
		||||
    <bool name="afc_is_large_screen">false</bool>
 | 
			
		||||
 | 
			
		||||
</resources>
 | 
			
		||||
</resources>
 | 
			
		||||
@@ -103,6 +103,17 @@
 | 
			
		||||
        <item name="afc_color_list_group_view_background">@color/afc_list_group_view_background_light</item>
 | 
			
		||||
    </style>
 | 
			
		||||
 | 
			
		||||
    <!--
 | 
			
		||||
    These themes only display the action bar in API 7+.
 | 
			
		||||
    We declare theme here as placeholders.
 | 
			
		||||
    -->
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseTheme.Light.DarkActionBar" parent="@style/Afc.BaseTheme.Light" />
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.BaseThemeHelper.Light.DarkActionBar" parent="@style/Afc.BaseThemeHelper.Light" />
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.Theme.Light.DarkActionBar" parent="@style/Afc.Theme.Light" />
 | 
			
		||||
 | 
			
		||||
    <style name="Afc.Theme.Dialog.Light" parent="@style/Afc.BaseThemeHelper.Dialog.Light">
 | 
			
		||||
        <item name="afc_theme_dialog">@style/Afc.Theme.Dialog.Light</item>
 | 
			
		||||
        <item name="afc_button_home">@drawable/afc_button_home_dark</item>
 | 
			
		||||
 
 | 
			
		||||
@@ -509,11 +509,11 @@ public class BaseFileAdapter extends ResourceCursorAdapter {
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onClick(final int resId) {
 | 
			
		||||
                            new LoadingDialog(v.getContext(),
 | 
			
		||||
                            new LoadingDialog<Void, Void, Void>(v.getContext(),
 | 
			
		||||
                                    R.string.afc_msg_loading, false) {
 | 
			
		||||
 | 
			
		||||
                                @Override
 | 
			
		||||
                                protected Object doInBackground(Void... params) {
 | 
			
		||||
                                protected Void doInBackground(Void... params) {
 | 
			
		||||
                                    if (resId == R.string.afc_cmd_advanced_selection_all)
 | 
			
		||||
                                        asyncSelectAll(-1, true);
 | 
			
		||||
                                    else if (resId == R.string.afc_cmd_advanced_selection_none)
 | 
			
		||||
@@ -532,7 +532,7 @@ public class BaseFileAdapter extends ResourceCursorAdapter {
 | 
			
		||||
                                }// doInBackground()
 | 
			
		||||
 | 
			
		||||
                                @Override
 | 
			
		||||
                                protected void onPostExecute(Object result) {
 | 
			
		||||
                                protected void onPostExecute(Void result) {
 | 
			
		||||
                                    super.onPostExecute(result);
 | 
			
		||||
                                    notifyDataSetChanged();
 | 
			
		||||
                                }// onPostExecute()
 | 
			
		||||
@@ -543,4 +543,5 @@ public class BaseFileAdapter extends ResourceCursorAdapter {
 | 
			
		||||
            return true;
 | 
			
		||||
        }// onLongClick()
 | 
			
		||||
    };// mCheckboxSelectionOnLongClickListener
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -264,4 +264,5 @@ public class FileChooserActivity extends FragmentActivity {
 | 
			
		||||
 | 
			
		||||
        return super.onKeyDown(keyCode, event);
 | 
			
		||||
    }// onKeyDown()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,14 +7,14 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.prefs;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.FileChooserActivity.ViewType;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.basefile.BaseFileContract.BaseFile;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Display preferences.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v4.3 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -43,8 +43,9 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets view type.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @return {@link ViewType}
 | 
			
		||||
     */
 | 
			
		||||
    public static ViewType getViewType(Context c) {
 | 
			
		||||
@@ -57,9 +58,11 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets view type.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}
 | 
			
		||||
     * @param v {@link ViewType}, if {@code null}, default value will be used.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param v
 | 
			
		||||
     *            {@link ViewType}, if {@code null}, default value will be used.
 | 
			
		||||
     */
 | 
			
		||||
    public static void setViewType(Context c, ViewType v) {
 | 
			
		||||
        String key = c.getString(R.string.afc_pkey_display_view_type);
 | 
			
		||||
@@ -75,8 +78,9 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets sort type.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @return one of {@link BaseFile#SORT_BY_MODIFICATION_TIME},
 | 
			
		||||
     *         {@link BaseFile#SORT_BY_NAME}, {@link BaseFile#SORT_BY_SIZE}.
 | 
			
		||||
     */
 | 
			
		||||
@@ -89,11 +93,13 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets {@link SortType}
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}
 | 
			
		||||
     * @param v one of {@link BaseFile#SORT_BY_MODIFICATION_TIME},
 | 
			
		||||
     *          {@link BaseFile#SORT_BY_NAME}, {@link BaseFile#SORT_BY_SIZE}.,
 | 
			
		||||
     *          if {@code null}, default value will be used.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param v
 | 
			
		||||
     *            one of {@link BaseFile#SORT_BY_MODIFICATION_TIME},
 | 
			
		||||
     *            {@link BaseFile#SORT_BY_NAME}, {@link BaseFile#SORT_BY_SIZE}.,
 | 
			
		||||
     *            if {@code null}, default value will be used.
 | 
			
		||||
     */
 | 
			
		||||
    public static void setSortType(Context c, Integer v) {
 | 
			
		||||
        String key = c.getString(R.string.afc_pkey_display_sort_type);
 | 
			
		||||
@@ -109,8 +115,9 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets sort ascending.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @return {@code true} if sort is ascending, {@code false} otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean isSortAscending(Context c) {
 | 
			
		||||
@@ -122,9 +129,11 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets sort ascending.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}
 | 
			
		||||
     * @param v {@link Boolean}, if {@code null}, default value will be used.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param v
 | 
			
		||||
     *            {@link Boolean}, if {@code null}, default value will be used.
 | 
			
		||||
     */
 | 
			
		||||
    public static void setSortAscending(Context c, Boolean v) {
 | 
			
		||||
        if (v == null)
 | 
			
		||||
@@ -139,8 +148,9 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks setting of showing time for old days in this year. Default is
 | 
			
		||||
     * {@code false}.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @return {@code true} or {@code false}.
 | 
			
		||||
     * @since v4.7 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -155,10 +165,12 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enables or disables showing time of old days in this year.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * @param v your preferred flag. If {@code null}, default will be used (
 | 
			
		||||
     *          {@code false}).
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @param v
 | 
			
		||||
     *            your preferred flag. If {@code null}, default will be used (
 | 
			
		||||
     *            {@code false}).
 | 
			
		||||
     * @since v4.7 beta
 | 
			
		||||
     */
 | 
			
		||||
    public static void setShowTimeForOldDaysThisYear(Context c, Boolean v) {
 | 
			
		||||
@@ -175,8 +187,9 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks setting of showing time for old days in last year and older.
 | 
			
		||||
     * Default is {@code false}.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @return {@code true} or {@code false}.
 | 
			
		||||
     * @since v4.7 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -189,10 +202,12 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enables or disables showing time of old days in last year and older.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * @param v your preferred flag. If {@code null}, default will be used (
 | 
			
		||||
     *          {@code false}).
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @param v
 | 
			
		||||
     *            your preferred flag. If {@code null}, default will be used (
 | 
			
		||||
     *            {@code false}).
 | 
			
		||||
     * @since v4.7 beta
 | 
			
		||||
     */
 | 
			
		||||
    public static void setShowTimeForOldDays(Context c, Boolean v) {
 | 
			
		||||
@@ -207,8 +222,9 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if remembering last location is enabled or not.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @return {@code true} if remembering last location is enabled.
 | 
			
		||||
     * @since v4.7 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -221,10 +237,12 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enables or disables remembering last location.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * @param v your preferred flag. If {@code null}, default will be used (
 | 
			
		||||
     *          {@code true}).
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @param v
 | 
			
		||||
     *            your preferred flag. If {@code null}, default will be used (
 | 
			
		||||
     *            {@code true}).
 | 
			
		||||
     * @since v4.7 beta
 | 
			
		||||
     */
 | 
			
		||||
    public static void setRememberLastLocation(Context c, Boolean v) {
 | 
			
		||||
@@ -239,8 +257,9 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets last location.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @return the last location, or {@code null} if not available.
 | 
			
		||||
     * @since v4.7 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -251,9 +270,11 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets last location.
 | 
			
		||||
     *
 | 
			
		||||
     * @param c {@link Context}.
 | 
			
		||||
     * @param v the last location.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param c
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @param v
 | 
			
		||||
     *            the last location.
 | 
			
		||||
     */
 | 
			
		||||
    public static void setLastLocation(Context c, String v) {
 | 
			
		||||
        p(c).edit()
 | 
			
		||||
@@ -268,7 +289,7 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * File time display options.
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @author Hai Bison
 | 
			
		||||
     * @see DisplayPrefs#isShowTimeForOldDaysThisYear(Context)
 | 
			
		||||
     * @see DisplayPrefs#isShowTimeForOldDays(Context)
 | 
			
		||||
@@ -276,37 +297,20 @@ public class DisplayPrefs extends Prefs {
 | 
			
		||||
     */
 | 
			
		||||
    public static class FileTimeDisplay {
 | 
			
		||||
 | 
			
		||||
        private boolean mShowTimeForOldDaysThisYear;
 | 
			
		||||
        private boolean mShowTimeForOldDays;
 | 
			
		||||
        public boolean showTimeForOldDaysThisYear;
 | 
			
		||||
        public boolean showTimeForOldDays;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Creates new instance.
 | 
			
		||||
         *
 | 
			
		||||
         * 
 | 
			
		||||
         * @param showTimeForOldDaysThisYear
 | 
			
		||||
         * @param showTimeForOldDays
 | 
			
		||||
         */
 | 
			
		||||
        public FileTimeDisplay(boolean showTimeForOldDaysThisYear,
 | 
			
		||||
                               boolean showTimeForOldDays) {
 | 
			
		||||
            mShowTimeForOldDaysThisYear = showTimeForOldDaysThisYear;
 | 
			
		||||
            mShowTimeForOldDays = showTimeForOldDays;
 | 
			
		||||
                boolean showTimeForOldDays) {
 | 
			
		||||
            this.showTimeForOldDaysThisYear = showTimeForOldDaysThisYear;
 | 
			
		||||
            this.showTimeForOldDays = showTimeForOldDays;
 | 
			
		||||
        }// FileTimeDisplay()
 | 
			
		||||
 | 
			
		||||
        public boolean isShowTimeForOldDaysThisYear() {
 | 
			
		||||
            return mShowTimeForOldDaysThisYear;
 | 
			
		||||
        }// isShowTimeForOldDaysThisYear()
 | 
			
		||||
 | 
			
		||||
        public FileTimeDisplay setShowTimeForOldDaysThisYear(boolean v) {
 | 
			
		||||
            mShowTimeForOldDaysThisYear = v;
 | 
			
		||||
            return this;
 | 
			
		||||
        }// setShowTimeForOldDaysThisYear()
 | 
			
		||||
 | 
			
		||||
        public boolean isShowTimeForOldDays() {
 | 
			
		||||
            return mShowTimeForOldDays;
 | 
			
		||||
        }// isShowTimeForOldDays()
 | 
			
		||||
 | 
			
		||||
        public FileTimeDisplay setShowTimeForOldDays(boolean v) {
 | 
			
		||||
            mShowTimeForOldDays = v;
 | 
			
		||||
            return this;
 | 
			
		||||
        }// setShowTimeForOldDays()
 | 
			
		||||
    }// FileTimeDisplay
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.prefs;
 | 
			
		||||
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.utils.Sys;
 | 
			
		||||
import android.annotation.TargetApi;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.SharedPreferences;
 | 
			
		||||
@@ -14,11 +15,10 @@ import android.os.Build;
 | 
			
		||||
import android.preference.PreferenceActivity;
 | 
			
		||||
import android.preference.PreferenceFragment;
 | 
			
		||||
import android.preference.PreferenceManager;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convenient class for working with preferences.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v4.3 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -26,60 +26,58 @@ public class Prefs {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This unique ID is used for storing preferences.
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @since v4.9 beta
 | 
			
		||||
     */
 | 
			
		||||
    public static final String UID = "9795e88b-2ab4-4b81-a548-409091a1e0c6";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generates global preference filename of this library.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context.
 | 
			
		||||
     * 
 | 
			
		||||
     * @return the global preference filename.
 | 
			
		||||
     */
 | 
			
		||||
    public static final String genPreferenceFilename(Context context) {
 | 
			
		||||
        return String.format("%s_%s", context.getString(R.string.afc_lib_name),
 | 
			
		||||
                UID);
 | 
			
		||||
    public static final String genPreferenceFilename() {
 | 
			
		||||
        return String.format("%s_%s", Sys.LIB_NAME, UID);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generates global database filename.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context.
 | 
			
		||||
     * @param name    the database filename.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param name
 | 
			
		||||
     *            the database filename.
 | 
			
		||||
     * @return the global database filename.
 | 
			
		||||
     */
 | 
			
		||||
    public static final String genDatabaseFilename(Context context, String name) {
 | 
			
		||||
        return String.format("%s_%s_%s",
 | 
			
		||||
                context.getString(R.string.afc_lib_name), UID, name);
 | 
			
		||||
    public static final String genDatabaseFilename(String name) {
 | 
			
		||||
        return String.format("%s_%s_%s", Sys.LIB_NAME, UID, name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets new {@link SharedPreferences}
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            the context.
 | 
			
		||||
     * @return {@link SharedPreferences}
 | 
			
		||||
     */
 | 
			
		||||
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
 | 
			
		||||
    public static SharedPreferences p(Context context) {
 | 
			
		||||
        // always use application context
 | 
			
		||||
        return context.getApplicationContext().getSharedPreferences(
 | 
			
		||||
                genPreferenceFilename(context), Context.MODE_MULTI_PROCESS);
 | 
			
		||||
                genPreferenceFilename(), Context.MODE_MULTI_PROCESS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Setup {@code pm} to use global unique filename and global access mode.
 | 
			
		||||
     * You must use this method if you let the user change preferences via UI
 | 
			
		||||
     * (such as {@link PreferenceActivity}, {@link PreferenceFragment}...).
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context.
 | 
			
		||||
     * @param pm      {@link PreferenceManager}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param pm
 | 
			
		||||
     *            {@link PreferenceManager}.
 | 
			
		||||
     * @since v4.9 beta
 | 
			
		||||
     */
 | 
			
		||||
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
 | 
			
		||||
    public static void setupPreferenceManager(Context context,
 | 
			
		||||
                                              PreferenceManager pm) {
 | 
			
		||||
    public static void setupPreferenceManager(PreferenceManager pm) {
 | 
			
		||||
        pm.setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
 | 
			
		||||
        pm.setSharedPreferencesName(genPreferenceFilename(context));
 | 
			
		||||
        pm.setSharedPreferencesName(genPreferenceFilename());
 | 
			
		||||
    }// setupPreferenceManager()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ package group.pals.android.lib.ui.filechooser.providers;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The base columns.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v5.1 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -32,4 +32,5 @@ public interface BaseColumns extends android.provider.BaseColumns {
 | 
			
		||||
     * </P>
 | 
			
		||||
     */
 | 
			
		||||
    public static final String COLUMN_MODIFICATION_TIME = "modification_time";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -637,4 +637,5 @@ public class BaseFileProviderUtils {
 | 
			
		||||
                                Integer.toString(taskId)).build(), null, null,
 | 
			
		||||
                null, null);
 | 
			
		||||
    }// cancelTask()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import android.database.DatabaseUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Database utilities.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v5.1 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -20,13 +20,13 @@ public class DbUtils {
 | 
			
		||||
    public static final String DATE_FORMAT = "yyyy:MM:dd'T'kk:mm:ss";
 | 
			
		||||
    /**
 | 
			
		||||
     * SQLite component FTS3.
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @since v4.6 beta
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SQLITE_FTS3 = "FTS3";
 | 
			
		||||
    /**
 | 
			
		||||
     * SQLite component FTS4.
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @since v4.6 beta
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SQLITE_FTS4 = "FTS4";
 | 
			
		||||
@@ -38,8 +38,9 @@ public class DbUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Joins all columns into one statement.
 | 
			
		||||
     *
 | 
			
		||||
     * @param cols array of columns.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param cols
 | 
			
		||||
     *            array of columns.
 | 
			
		||||
     * @return E.g: "col1,col2,col3"
 | 
			
		||||
     */
 | 
			
		||||
    public static String joinColumns(String[] cols) {
 | 
			
		||||
@@ -59,8 +60,9 @@ public class DbUtils {
 | 
			
		||||
     * output string with {@code "0"} to make sure the results will always have
 | 
			
		||||
     * same length (for a {@link Long}). So it will work when comparing
 | 
			
		||||
     * different values as text.
 | 
			
		||||
     *
 | 
			
		||||
     * @param n a long value.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param n
 | 
			
		||||
     *            a long value.
 | 
			
		||||
     * @return the formatted string.
 | 
			
		||||
     */
 | 
			
		||||
    public static String formatNumber(long n) {
 | 
			
		||||
@@ -70,13 +72,15 @@ public class DbUtils {
 | 
			
		||||
    /**
 | 
			
		||||
     * Calls {@link DatabaseUtils#sqlEscapeString(String)}, then removes single
 | 
			
		||||
     * quotes at the begin and the end of the returned string.
 | 
			
		||||
     *
 | 
			
		||||
     * @param value the string to escape. If {@code null}, empty string will
 | 
			
		||||
     *              return;
 | 
			
		||||
     * 
 | 
			
		||||
     * @param value
 | 
			
		||||
     *            the string to escape. If {@code null}, empty string will
 | 
			
		||||
     *            return;
 | 
			
		||||
     * @return the "raw" escaped-string.
 | 
			
		||||
     */
 | 
			
		||||
    public static String rawSqlEscapeString(String value) {
 | 
			
		||||
        return value == null ? "" : DatabaseUtils.sqlEscapeString(value)
 | 
			
		||||
                .replaceFirst("(?msi)^'", "").replaceFirst("(?msi)'$", "");
 | 
			
		||||
    }// rawSqlEscapeString()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import android.net.Uri;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Utilities for providers.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v5.1 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -25,10 +25,13 @@ public class ProviderUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets integer parameter.
 | 
			
		||||
     *
 | 
			
		||||
     * @param uri          the original URI.
 | 
			
		||||
     * @param key          the key of query parameter.
 | 
			
		||||
     * @param defaultValue will be returned if nothing found or parsing value failed.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param uri
 | 
			
		||||
     *            the original URI.
 | 
			
		||||
     * @param key
 | 
			
		||||
     *            the key of query parameter.
 | 
			
		||||
     * @param defaultValue
 | 
			
		||||
     *            will be returned if nothing found or parsing value failed.
 | 
			
		||||
     * @return the integer value.
 | 
			
		||||
     */
 | 
			
		||||
    public static int getIntQueryParam(Uri uri, String key, int defaultValue) {
 | 
			
		||||
@@ -41,10 +44,13 @@ public class ProviderUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets long parameter.
 | 
			
		||||
     *
 | 
			
		||||
     * @param uri          the original URI.
 | 
			
		||||
     * @param key          the key of query parameter.
 | 
			
		||||
     * @param defaultValue will be returned if nothing found or parsing value failed.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param uri
 | 
			
		||||
     *            the original URI.
 | 
			
		||||
     * @param key
 | 
			
		||||
     *            the key of query parameter.
 | 
			
		||||
     * @param defaultValue
 | 
			
		||||
     *            will be returned if nothing found or parsing value failed.
 | 
			
		||||
     * @return the long value.
 | 
			
		||||
     */
 | 
			
		||||
    public static long getLongQueryParam(Uri uri, String key, long defaultValue) {
 | 
			
		||||
@@ -57,9 +63,11 @@ public class ProviderUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets boolean parameter.
 | 
			
		||||
     *
 | 
			
		||||
     * @param uri the original URI.
 | 
			
		||||
     * @param key the key of query parameter.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param uri
 | 
			
		||||
     *            the original URI.
 | 
			
		||||
     * @param key
 | 
			
		||||
     *            the key of query parameter.
 | 
			
		||||
     * @return {@code false} if the parameter does not exist, or it is either
 | 
			
		||||
     *         {@code "false"} or {@code "0"}. {@code true} otherwise.
 | 
			
		||||
     */
 | 
			
		||||
@@ -73,15 +81,18 @@ public class ProviderUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets boolean parameter.
 | 
			
		||||
     *
 | 
			
		||||
     * @param uri          the original URI.
 | 
			
		||||
     * @param key          the key of query parameter.
 | 
			
		||||
     * @param defaultValue the default value if the parameter does not exist.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param uri
 | 
			
		||||
     *            the original URI.
 | 
			
		||||
     * @param key
 | 
			
		||||
     *            the key of query parameter.
 | 
			
		||||
     * @param defaultValue
 | 
			
		||||
     *            the default value if the parameter does not exist.
 | 
			
		||||
     * @return {@code defaultValue} if the parameter does not exist, or it is
 | 
			
		||||
     *         either {@code "false"} or {@code "0"}. {@code true} otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean getBooleanQueryParam(Uri uri, String key,
 | 
			
		||||
                                               boolean defaultValue) {
 | 
			
		||||
            boolean defaultValue) {
 | 
			
		||||
        String param = uri.getQueryParameter(key);
 | 
			
		||||
        if (param == null)
 | 
			
		||||
            return defaultValue;
 | 
			
		||||
@@ -89,4 +100,5 @@ public class ProviderUtils {
 | 
			
		||||
            return false;
 | 
			
		||||
        return true;
 | 
			
		||||
    }// getBooleanQueryParam()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -533,4 +533,5 @@ public class BaseFileContract {
 | 
			
		||||
         */
 | 
			
		||||
        public static final String COLUMN_PROVIDER_ICON_ATTR = "provider_icon_attr";
 | 
			
		||||
    }// BaseFile
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,10 +7,10 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.providers.bookmark;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.BaseColumns;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.ProviderUtils;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Bookmark contract.
 | 
			
		||||
@@ -121,4 +121,5 @@ public final class BookmarkContract implements BaseColumns {
 | 
			
		||||
     * Type: {@code String}
 | 
			
		||||
     */
 | 
			
		||||
    public static final String COLUMN_PROVIDER_ID = "provider_id";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -43,8 +43,8 @@ public class BookmarkHelper extends SQLiteOpenHelper {
 | 
			
		||||
 | 
			
		||||
    public BookmarkHelper(Context context) {
 | 
			
		||||
        // always use application context
 | 
			
		||||
        super(context.getApplicationContext(), Prefs.genDatabaseFilename(
 | 
			
		||||
                context, DB_FILENAME), null, DB_VERSION);
 | 
			
		||||
        super(context.getApplicationContext(), Prefs
 | 
			
		||||
                .genDatabaseFilename(DB_FILENAME), null, DB_VERSION);
 | 
			
		||||
    }// BookmarkHelper()
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -59,4 +59,5 @@ public class BookmarkHelper extends SQLiteOpenHelper {
 | 
			
		||||
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 | 
			
		||||
        // TODO
 | 
			
		||||
    }// onUpgrade()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -359,4 +359,5 @@ public class BookmarkProvider extends ContentProvider {
 | 
			
		||||
        // Returns the number of rows updated.
 | 
			
		||||
        return count;
 | 
			
		||||
    }// update()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,11 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.providers.history;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.BaseColumns;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.ProviderUtils;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.basefile.BaseFileContract.BaseFile;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * History contract.
 | 
			
		||||
@@ -123,4 +123,5 @@ public final class HistoryContract implements BaseColumns {
 | 
			
		||||
     * Type: {@code URI}
 | 
			
		||||
     */
 | 
			
		||||
    public static final String COLUMN_URI = "uri";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,16 +7,16 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.providers.history;
 | 
			
		||||
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.prefs.Prefs;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.DbUtils;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.database.sqlite.SQLiteDatabase;
 | 
			
		||||
import android.database.sqlite.SQLiteOpenHelper;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.prefs.Prefs;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.providers.DbUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * SQLite helper for history database.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v5.1 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -38,8 +38,8 @@ public class HistoryHelper extends SQLiteOpenHelper {
 | 
			
		||||
 | 
			
		||||
    public HistoryHelper(Context context) {
 | 
			
		||||
        // always use application context
 | 
			
		||||
        super(context.getApplicationContext(), Prefs.genDatabaseFilename(
 | 
			
		||||
                context, DB_FILENAME), null, DB_VERSION);
 | 
			
		||||
        super(context.getApplicationContext(), Prefs
 | 
			
		||||
                .genDatabaseFilename(DB_FILENAME), null, DB_VERSION);
 | 
			
		||||
    }// HistoryHelper()
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -54,4 +54,5 @@ public class HistoryHelper extends SQLiteOpenHelper {
 | 
			
		||||
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 | 
			
		||||
        // TODO
 | 
			
		||||
    }// onUpgrade()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -422,4 +422,5 @@ public class HistoryProvider extends ContentProvider {
 | 
			
		||||
 | 
			
		||||
        return result;
 | 
			
		||||
    }// appendNameAndRealUri()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -62,4 +62,5 @@ public class HistoryProviderUtils {
 | 
			
		||||
             */
 | 
			
		||||
        }
 | 
			
		||||
    }// doCleanupOutdatedHistoryItems()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -130,4 +130,5 @@ public class FileObserverEx extends FileObserver {
 | 
			
		||||
            HandlerThreadCompat_v5.quit(mHandlerThread);
 | 
			
		||||
        mHandlerThread.interrupt();
 | 
			
		||||
    }// stopWatching()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import android.os.HandlerThread;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper class for backward compatibility of {@link HandlerThread} from API 5+.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v5.1 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -19,10 +19,12 @@ public class HandlerThreadCompat_v5 {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Wrapper for {@link HandlerThread#quit()}.
 | 
			
		||||
     *
 | 
			
		||||
     * @param thread the handler thread.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param thread
 | 
			
		||||
     *            the handler thread.
 | 
			
		||||
     */
 | 
			
		||||
    public static void quit(HandlerThread thread) {
 | 
			
		||||
        thread.quit();
 | 
			
		||||
    }// quit()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import android.content.Context;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Contract for local file.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v5.1 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -24,8 +24,9 @@ public class LocalFileContract {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the authority of this provider.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            the context.
 | 
			
		||||
     * @return the authority.
 | 
			
		||||
     */
 | 
			
		||||
    public static final String getAuthority(Context context) {
 | 
			
		||||
@@ -36,4 +37,5 @@ public class LocalFileContract {
 | 
			
		||||
     * The unique ID of this provider.
 | 
			
		||||
     */
 | 
			
		||||
    public static final String _ID = "7dab9818-0a8b-47ef-88cc-10fe538bfaf7";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -268,15 +268,11 @@ public class LocalFileProvider extends BaseFileProvider {
 | 
			
		||||
        else if (BaseFile.CMD_IS_ANCESTOR_OF.equals(uri.getLastPathSegment())) {
 | 
			
		||||
            return doCheckAncestor(uri);
 | 
			
		||||
        } else if (BaseFile.CMD_GET_PARENT.equals(uri.getLastPathSegment())) {
 | 
			
		||||
        	String sourcePath = Uri.parse(
 | 
			
		||||
                    uri.getQueryParameter(BaseFile.PARAM_SOURCE)).getPath();
 | 
			
		||||
            File file = new File(sourcePath);
 | 
			
		||||
            File file = new File(Uri.parse(
 | 
			
		||||
                    uri.getQueryParameter(BaseFile.PARAM_SOURCE)).getPath());
 | 
			
		||||
            file = file.getParentFile();
 | 
			
		||||
            if (file == null)
 | 
			
		||||
            {
 | 
			
		||||
            	Log.d(CLASSNAME,"returning null as parent for "+sourcePath);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            matrixCursor = BaseFileProviderUtils.newBaseFileCursor();
 | 
			
		||||
 | 
			
		||||
@@ -285,8 +281,6 @@ public class LocalFileProvider extends BaseFileProvider {
 | 
			
		||||
                    .exists() ? BaseFile.FILE_TYPE_UNKNOWN
 | 
			
		||||
                    : BaseFile.FILE_TYPE_NOT_EXISTED));
 | 
			
		||||
 | 
			
		||||
            Log.d(CLASSNAME, "Returning " + Uri.fromFile(file).toString()+" as parent for "+sourcePath);
 | 
			
		||||
            
 | 
			
		||||
            RowBuilder newRow = matrixCursor.newRow();
 | 
			
		||||
            newRow.add(0);// _ID
 | 
			
		||||
            newRow.add(BaseFile
 | 
			
		||||
@@ -302,7 +296,6 @@ public class LocalFileProvider extends BaseFileProvider {
 | 
			
		||||
            newRow.add(type);
 | 
			
		||||
            newRow.add(file.lastModified());
 | 
			
		||||
            newRow.add(FileUtils.getResIcon(type, file.getName()));
 | 
			
		||||
 | 
			
		||||
        } else if (BaseFile.CMD_SHUTDOWN.equals(uri.getLastPathSegment())) {
 | 
			
		||||
            /*
 | 
			
		||||
             * TODO Stop all tasks. If the activity call this command in
 | 
			
		||||
@@ -747,4 +740,5 @@ public class LocalFileProvider extends BaseFileProvider {
 | 
			
		||||
 | 
			
		||||
        return new File(fileName);
 | 
			
		||||
    }// extractFile()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -470,4 +470,5 @@ public class AfcSearchView extends LinearLayout {
 | 
			
		||||
                mTextSearch.setText(null);
 | 
			
		||||
        }// onClick()
 | 
			
		||||
    };// mButtonClearOnClickListener
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -47,4 +47,5 @@ public class Converter {
 | 
			
		||||
                String.format("%s %%sB", digitGroups == 0 ? "%,.0f" : "%,.2f"),
 | 
			
		||||
                size, units[digitGroups]);
 | 
			
		||||
    }// sizeToStr()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,15 +7,16 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.utils;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.prefs.DisplayPrefs.FileTimeDisplay;
 | 
			
		||||
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Date utilities.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v4.7 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -45,14 +46,17 @@ public class DateUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Formats date.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context         {@link Context}.
 | 
			
		||||
     * @param millis          time in milliseconds.
 | 
			
		||||
     * @param fileTimeDisplay {@link FileTimeDisplay}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @param millis
 | 
			
		||||
     *            time in milliseconds.
 | 
			
		||||
     * @param fileTimeDisplay
 | 
			
		||||
     *            {@link FileTimeDisplay}.
 | 
			
		||||
     * @return the formatted string
 | 
			
		||||
     */
 | 
			
		||||
    public static String formatDate(Context context, long millis,
 | 
			
		||||
                                    FileTimeDisplay fileTimeDisplay) {
 | 
			
		||||
            FileTimeDisplay fileTimeDisplay) {
 | 
			
		||||
        Calendar cal = Calendar.getInstance();
 | 
			
		||||
        cal.setTimeInMillis(millis);
 | 
			
		||||
        return formatDate(context, cal, fileTimeDisplay);
 | 
			
		||||
@@ -60,14 +64,17 @@ public class DateUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Formats date.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context         {@link Context}.
 | 
			
		||||
     * @param date            {@link Calendar}.
 | 
			
		||||
     * @param fileTimeDisplay {@link FileTimeDisplay}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}.
 | 
			
		||||
     * @param date
 | 
			
		||||
     *            {@link Calendar}.
 | 
			
		||||
     * @param fileTimeDisplay
 | 
			
		||||
     *            {@link FileTimeDisplay}.
 | 
			
		||||
     * @return the formatted string, for local human reading.
 | 
			
		||||
     */
 | 
			
		||||
    public static String formatDate(Context context, Calendar date,
 | 
			
		||||
                                    FileTimeDisplay fileTimeDisplay) {
 | 
			
		||||
            FileTimeDisplay fileTimeDisplay) {
 | 
			
		||||
        final Calendar yesterday = Calendar.getInstance();
 | 
			
		||||
        yesterday.add(Calendar.DAY_OF_YEAR, -1);
 | 
			
		||||
 | 
			
		||||
@@ -79,7 +86,7 @@ public class DateUtils {
 | 
			
		||||
        }// today
 | 
			
		||||
        else if (date.get(Calendar.YEAR) == yesterday.get(Calendar.YEAR)
 | 
			
		||||
                && date.get(Calendar.DAY_OF_YEAR) == yesterday
 | 
			
		||||
                .get(Calendar.DAY_OF_YEAR)) {
 | 
			
		||||
                        .get(Calendar.DAY_OF_YEAR)) {
 | 
			
		||||
            res = String.format(
 | 
			
		||||
                    "%s, %s",
 | 
			
		||||
                    context.getString(R.string.afc_yesterday),
 | 
			
		||||
@@ -87,25 +94,26 @@ public class DateUtils {
 | 
			
		||||
                            date.getTimeInMillis(), FORMAT_SHORT_TIME));
 | 
			
		||||
        }// yesterday
 | 
			
		||||
        else if (date.get(Calendar.YEAR) == yesterday.get(Calendar.YEAR)) {
 | 
			
		||||
            if (fileTimeDisplay.isShowTimeForOldDaysThisYear())
 | 
			
		||||
            if (fileTimeDisplay.showTimeForOldDaysThisYear)
 | 
			
		||||
                res = android.text.format.DateUtils.formatDateTime(context,
 | 
			
		||||
                        date.getTimeInMillis(), FORMAT_SHORT_TIME
 | 
			
		||||
                        | FORMAT_MONTH_AND_DAY);
 | 
			
		||||
                                | FORMAT_MONTH_AND_DAY);
 | 
			
		||||
            else
 | 
			
		||||
                res = android.text.format.DateUtils.formatDateTime(context,
 | 
			
		||||
                        date.getTimeInMillis(), FORMAT_MONTH_AND_DAY);
 | 
			
		||||
        }// this year
 | 
			
		||||
        else {
 | 
			
		||||
            if (fileTimeDisplay.isShowTimeForOldDays())
 | 
			
		||||
            if (fileTimeDisplay.showTimeForOldDays)
 | 
			
		||||
                res = android.text.format.DateUtils.formatDateTime(context,
 | 
			
		||||
                        date.getTimeInMillis(), FORMAT_SHORT_TIME
 | 
			
		||||
                        | FORMAT_MONTH_AND_DAY | FORMAT_YEAR);
 | 
			
		||||
                                | FORMAT_MONTH_AND_DAY | FORMAT_YEAR);
 | 
			
		||||
            else
 | 
			
		||||
                res = android.text.format.DateUtils.formatDateTime(context,
 | 
			
		||||
                        date.getTimeInMillis(), FORMAT_MONTH_AND_DAY
 | 
			
		||||
                        | FORMAT_YEAR);
 | 
			
		||||
                                | FORMAT_YEAR);
 | 
			
		||||
        }// other years (maybe older or newer than this year)
 | 
			
		||||
 | 
			
		||||
        return res;
 | 
			
		||||
    }// formatDate()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.utils;
 | 
			
		||||
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
import android.app.Dialog;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
@@ -15,28 +16,27 @@ import android.view.ContextThemeWrapper;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.view.Window;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Something funny :-)
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 */
 | 
			
		||||
public class E {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows it!
 | 
			
		||||
     *
 | 
			
		||||
     * @param context {@link Context}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     */
 | 
			
		||||
    public static void show(Context context) {
 | 
			
		||||
        String msg = null;
 | 
			
		||||
        try {
 | 
			
		||||
            msg = String.format("Hi  :-)\n\n" + "%s %s\n"
 | 
			
		||||
            msg = String.format("Hi  :-)\n\n" + "%s v%s\n"
 | 
			
		||||
                    + "…by Hai Bison Apps\n\n" + "http://www.haibison.com\n\n"
 | 
			
		||||
                    + "Hope you enjoy this library.",
 | 
			
		||||
                    context.getString(R.string.afc_lib_name),
 | 
			
		||||
                    context.getString(R.string.afc_lib_version_name));
 | 
			
		||||
                    + "Hope you enjoy this library.", Sys.LIB_NAME,
 | 
			
		||||
                    Sys.LIB_VERSION_NAME);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            msg = "Oops… You've found a broken Easter egg, try again later  :-(";
 | 
			
		||||
        }
 | 
			
		||||
@@ -70,4 +70,5 @@ public class E {
 | 
			
		||||
        dialog.setContentView(textView);
 | 
			
		||||
        dialog.show();
 | 
			
		||||
    }// show()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,4 +28,5 @@ public class EnvUtils {
 | 
			
		||||
    public static final int genId() {
 | 
			
		||||
        return mId++;
 | 
			
		||||
    }// genId()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -92,4 +92,5 @@ public class FileUtils {
 | 
			
		||||
    public static boolean isFilenameValid(String name) {
 | 
			
		||||
        return name != null && name.trim().matches("[^\\\\/?%*:|\"<>]+");
 | 
			
		||||
    }// isFilenameValid()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -71,4 +71,5 @@ public class MimeTypes {
 | 
			
		||||
    public static final String REGEX_FILE_TYPE_COMPRESSED = "(?si)^.+\\.(zip|"
 | 
			
		||||
            + "7z|lz?|[jrt]ar|gz|gzip|bzip|xz|cab|sfx|z|iso|bz?|rz|s7z|apk|"
 | 
			
		||||
            + "dmg)$";
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,33 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    Copyright (c) 2012 Hai Bison
 | 
			
		||||
 *
 | 
			
		||||
 *    See the file LICENSE at the root directory of this project for copying
 | 
			
		||||
 *    permission.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.utils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * System variables.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
public class Sys {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The library name.
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LIB_NAME = "android-filechooser";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The library version name.
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LIB_VERSION_NAME = "5.4.4 beta";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The library version code.
 | 
			
		||||
     */
 | 
			
		||||
    public static final int LIB_VERSION_CODE = 56;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -11,7 +11,7 @@ import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Text utilities.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v4.3 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -19,8 +19,9 @@ public class TextUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Quotes a text in double quotation mark.
 | 
			
		||||
     *
 | 
			
		||||
     * @param s the text, if {@code null}, empty string will be used
 | 
			
		||||
     * 
 | 
			
		||||
     * @param s
 | 
			
		||||
     *            the text, if {@code null}, empty string will be used
 | 
			
		||||
     * @return the quoted text
 | 
			
		||||
     */
 | 
			
		||||
    public static String quote(String s) {
 | 
			
		||||
@@ -29,8 +30,9 @@ public class TextUtils {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Compiles {@code regex}.
 | 
			
		||||
     *
 | 
			
		||||
     * @param regex the regex.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param regex
 | 
			
		||||
     *            the regex.
 | 
			
		||||
     * @return a compiled {@link Pattern}, or {@code null} if there is an error
 | 
			
		||||
     *         while compiling.
 | 
			
		||||
     */
 | 
			
		||||
@@ -43,4 +45,5 @@ public class TextUtils {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }// compileRegex()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -30,4 +30,5 @@ public class Utils {
 | 
			
		||||
                return false;
 | 
			
		||||
        return true;
 | 
			
		||||
    }// hasPermissions()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,14 +7,15 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.utils.history;
 | 
			
		||||
 | 
			
		||||
import android.os.Parcelable;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import android.os.Parcelable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A history store of any object.
 | 
			
		||||
 *
 | 
			
		||||
 * @param <A> any type
 | 
			
		||||
 * 
 | 
			
		||||
 * @param <A>
 | 
			
		||||
 *            any type
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v2.0 alpha
 | 
			
		||||
 */
 | 
			
		||||
@@ -23,15 +24,17 @@ public interface History<A> extends Parcelable {
 | 
			
		||||
    /**
 | 
			
		||||
     * Pushes {@code newItem} to the history. If the top item is same as this
 | 
			
		||||
     * one, then does nothing.
 | 
			
		||||
     *
 | 
			
		||||
     * @param newItem the new item
 | 
			
		||||
     * 
 | 
			
		||||
     * @param newItem
 | 
			
		||||
     *            the new item
 | 
			
		||||
     */
 | 
			
		||||
    void push(A newItem);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finds {@code item} and if it exists, removes all items after it.
 | 
			
		||||
     *
 | 
			
		||||
     * @param item {@link A}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param item
 | 
			
		||||
     *            {@link A}
 | 
			
		||||
     * @return the total items truncated.
 | 
			
		||||
     * @since v4.3 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -39,54 +42,59 @@ public interface History<A> extends Parcelable {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Removes an item.
 | 
			
		||||
     *
 | 
			
		||||
     * @param item {@link A}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param item
 | 
			
		||||
     *            {@link A}
 | 
			
		||||
     * @since v4.0 beta
 | 
			
		||||
     */
 | 
			
		||||
    void remove(A item);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Removes all items by a filter.
 | 
			
		||||
     *
 | 
			
		||||
     * @param filter {@link HistoryFilter}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param filter
 | 
			
		||||
     *            {@link HistoryFilter}
 | 
			
		||||
     * @since v4.0 beta
 | 
			
		||||
     */
 | 
			
		||||
    void removeAll(HistoryFilter<A> filter);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets size of the history
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @return the size of the history
 | 
			
		||||
     */
 | 
			
		||||
    int size();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets index of item {@code a}
 | 
			
		||||
     *
 | 
			
		||||
     * @param a an item
 | 
			
		||||
     * 
 | 
			
		||||
     * @param a
 | 
			
		||||
     *            an item
 | 
			
		||||
     * @return index of the {@code a}, or -1 if there is no one
 | 
			
		||||
     */
 | 
			
		||||
    int indexOf(A a);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets previous item of {@code a}
 | 
			
		||||
     *
 | 
			
		||||
     * @param a current item
 | 
			
		||||
     * 
 | 
			
		||||
     * @param a
 | 
			
		||||
     *            current item
 | 
			
		||||
     * @return the previous item, can be {@code null}
 | 
			
		||||
     */
 | 
			
		||||
    A prevOf(A a);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets next item of {@code a}
 | 
			
		||||
     *
 | 
			
		||||
     * @param a current item
 | 
			
		||||
     * 
 | 
			
		||||
     * @param a
 | 
			
		||||
     *            current item
 | 
			
		||||
     * @return the next item, can be {@code null}
 | 
			
		||||
     */
 | 
			
		||||
    A nextOf(A a);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Retrieves all items in this history, in an <i>independent</i> list.
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @return list of {@link A}.
 | 
			
		||||
     * @since v4.3 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -94,7 +102,7 @@ public interface History<A> extends Parcelable {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if the history is empty or not.
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @return {@code true} if this history is empty, {@code false} otherwise.
 | 
			
		||||
     * @since v4.3 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -102,23 +110,25 @@ public interface History<A> extends Parcelable {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Clears this history.
 | 
			
		||||
     *
 | 
			
		||||
     * 
 | 
			
		||||
     * @since v4.3 beta.
 | 
			
		||||
     */
 | 
			
		||||
    void clear();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds a {@link HistoryListener}
 | 
			
		||||
     *
 | 
			
		||||
     * @param listener {@link HistoryListener}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param listener
 | 
			
		||||
     *            {@link HistoryListener}
 | 
			
		||||
     * @since v4.0 beta
 | 
			
		||||
     */
 | 
			
		||||
    void addListener(HistoryListener<A> listener);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Removes a {@link HistoryListener}
 | 
			
		||||
     *
 | 
			
		||||
     * @param listener {@link HistoryListener}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param listener
 | 
			
		||||
     *            {@link HistoryListener}
 | 
			
		||||
     * @return the removed listener
 | 
			
		||||
     * @since v4.0 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -131,13 +141,16 @@ public interface History<A> extends Parcelable {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finds items with a filter.
 | 
			
		||||
     *
 | 
			
		||||
     * @param filter    {@link HistoryFilter}
 | 
			
		||||
     * @param ascending {@code true} if you want to process the history list ascending
 | 
			
		||||
     *                  (oldest to newest), {@code false} for descending.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param filter
 | 
			
		||||
     *            {@link HistoryFilter}
 | 
			
		||||
     * @param ascending
 | 
			
		||||
     *            {@code true} if you want to process the history list ascending
 | 
			
		||||
     *            (oldest to newest), {@code false} for descending.
 | 
			
		||||
     * @return {@code true} if the desired items have been found, {@code false}
 | 
			
		||||
     *         otherwise.
 | 
			
		||||
     * @since v5.1 beta
 | 
			
		||||
     */
 | 
			
		||||
    boolean find(HistoryFilter<A> filter, boolean ascending);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ package group.pals.android.lib.ui.filechooser.utils.history;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Filter of {@link History}
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v4.0 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -17,9 +17,11 @@ public interface HistoryFilter<A> {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Filters item.
 | 
			
		||||
     *
 | 
			
		||||
     * @param item {@link A}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param item
 | 
			
		||||
     *            {@link A}
 | 
			
		||||
     * @return {@code true} if the {@code item} is accepted
 | 
			
		||||
     */
 | 
			
		||||
    boolean accept(A item);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ package group.pals.android.lib.ui.filechooser.utils.history;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Listener of {@link History}
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v4.0 beta
 | 
			
		||||
 */
 | 
			
		||||
@@ -17,8 +17,10 @@ public interface HistoryListener<A> {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Will be called after the history changed.
 | 
			
		||||
     *
 | 
			
		||||
     * @param history {@link History}
 | 
			
		||||
     * 
 | 
			
		||||
     * @param history
 | 
			
		||||
     *            {@link History}
 | 
			
		||||
     */
 | 
			
		||||
    void onChanged(History<A> history);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -259,4 +259,5 @@ public class HistoryStore<A extends Parcelable> implements History<A> {
 | 
			
		||||
    private HistoryStore(Parcel in) {
 | 
			
		||||
        readFromParcel(in);
 | 
			
		||||
    }// HistoryStore()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -129,4 +129,5 @@ public class ContextMenuUtils {
 | 
			
		||||
         */
 | 
			
		||||
        void onClick(int resId);
 | 
			
		||||
    }// OnMenuItemClickListener
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,17 +7,17 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.utils.ui;
 | 
			
		||||
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
import android.app.AlertDialog;
 | 
			
		||||
import android.app.Dialog;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.DialogInterface;
 | 
			
		||||
import android.view.ContextThemeWrapper;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Utilities for message boxes.
 | 
			
		||||
 *
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v2.1 alpha
 | 
			
		||||
 */
 | 
			
		||||
@@ -36,10 +36,13 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows a toast message.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context  {@link Context}
 | 
			
		||||
     * @param msg      the message.
 | 
			
		||||
     * @param duration can be {@link #LENGTH_LONG} or {@link #LENGTH_SHORT}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msg
 | 
			
		||||
     *            the message.
 | 
			
		||||
     * @param duration
 | 
			
		||||
     *            can be {@link #LENGTH_LONG} or {@link #LENGTH_SHORT}.
 | 
			
		||||
     */
 | 
			
		||||
    public static void toast(Context context, CharSequence msg, int duration) {
 | 
			
		||||
        if (mToast != null)
 | 
			
		||||
@@ -50,10 +53,13 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows a toast message.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context  {@link Context}
 | 
			
		||||
     * @param msgId    the resource ID of the message.
 | 
			
		||||
     * @param duration can be {@link #LENGTH_LONG} or {@link #LENGTH_SHORT}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msgId
 | 
			
		||||
     *            the resource ID of the message.
 | 
			
		||||
     * @param duration
 | 
			
		||||
     *            can be {@link #LENGTH_LONG} or {@link #LENGTH_SHORT}.
 | 
			
		||||
     */
 | 
			
		||||
    public static void toast(Context context, int msgId, int duration) {
 | 
			
		||||
        toast(context, context.getString(msgId), duration);
 | 
			
		||||
@@ -61,13 +67,16 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows an info dialog.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context  {@link Context}
 | 
			
		||||
     * @param msg      the message.
 | 
			
		||||
     * @param listener the {@link DialogInterface.OnDismissListener}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msg
 | 
			
		||||
     *            the message.
 | 
			
		||||
     * @param listener
 | 
			
		||||
     *            the {@link DialogInterface.OnDismissListener}.
 | 
			
		||||
     */
 | 
			
		||||
    public static void showInfo(Context context, CharSequence msg,
 | 
			
		||||
                                DialogInterface.OnDismissListener listener) {
 | 
			
		||||
            DialogInterface.OnDismissListener listener) {
 | 
			
		||||
        AlertDialog dlg = newAlertDlg(context);
 | 
			
		||||
        dlg.setIcon(android.R.drawable.ic_dialog_info);
 | 
			
		||||
        dlg.setTitle(R.string.afc_title_info);
 | 
			
		||||
@@ -78,21 +87,26 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows an info dialog.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context  the context.
 | 
			
		||||
     * @param msgId    the resource ID of the message.
 | 
			
		||||
     * @param listener the {@link DialogInterface.OnDismissListener}.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            the context.
 | 
			
		||||
     * @param msgId
 | 
			
		||||
     *            the resource ID of the message.
 | 
			
		||||
     * @param listener
 | 
			
		||||
     *            the {@link DialogInterface.OnDismissListener}.
 | 
			
		||||
     */
 | 
			
		||||
    public static void showInfo(Context context, int msgId,
 | 
			
		||||
                                DialogInterface.OnDismissListener listener) {
 | 
			
		||||
            DialogInterface.OnDismissListener listener) {
 | 
			
		||||
        showInfo(context, context.getString(msgId), listener);
 | 
			
		||||
    }// showInfo()
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows an info dialog.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context {@link Context}
 | 
			
		||||
     * @param msg     the message.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msg
 | 
			
		||||
     *            the message.
 | 
			
		||||
     */
 | 
			
		||||
    public static void showInfo(Context context, CharSequence msg) {
 | 
			
		||||
        showInfo(context, msg, null);
 | 
			
		||||
@@ -100,9 +114,11 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows an info dialog.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context {@link Context}
 | 
			
		||||
     * @param msgId   the resource ID of the message.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msgId
 | 
			
		||||
     *            the resource ID of the message.
 | 
			
		||||
     */
 | 
			
		||||
    public static void showInfo(Context context, int msgId) {
 | 
			
		||||
        showInfo(context, context.getString(msgId));
 | 
			
		||||
@@ -110,13 +126,16 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows an error message.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context  {@link Context}
 | 
			
		||||
     * @param msg      the message.
 | 
			
		||||
     * @param listener will be called after the user cancelled the dialog.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msg
 | 
			
		||||
     *            the message.
 | 
			
		||||
     * @param listener
 | 
			
		||||
     *            will be called after the user cancelled the dialog.
 | 
			
		||||
     */
 | 
			
		||||
    public static void showError(Context context, CharSequence msg,
 | 
			
		||||
                                 DialogInterface.OnCancelListener listener) {
 | 
			
		||||
            DialogInterface.OnCancelListener listener) {
 | 
			
		||||
        AlertDialog dlg = newAlertDlg(context);
 | 
			
		||||
        dlg.setIcon(android.R.drawable.ic_dialog_alert);
 | 
			
		||||
        dlg.setTitle(R.string.afc_title_error);
 | 
			
		||||
@@ -127,25 +146,31 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows an error message.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context  {@link Context}
 | 
			
		||||
     * @param msgId    the resource ID of the message.
 | 
			
		||||
     * @param listener will be called after the user cancelled the dialog.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msgId
 | 
			
		||||
     *            the resource ID of the message.
 | 
			
		||||
     * @param listener
 | 
			
		||||
     *            will be called after the user cancelled the dialog.
 | 
			
		||||
     */
 | 
			
		||||
    public static void showError(Context context, int msgId,
 | 
			
		||||
                                 DialogInterface.OnCancelListener listener) {
 | 
			
		||||
            DialogInterface.OnCancelListener listener) {
 | 
			
		||||
        showError(context, context.getString(msgId), listener);
 | 
			
		||||
    }// showError()
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows an unknown error.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context  {@link Context}
 | 
			
		||||
     * @param t        the {@link Throwable}
 | 
			
		||||
     * @param listener will be called after the user cancelled the dialog.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param t
 | 
			
		||||
     *            the {@link Throwable}
 | 
			
		||||
     * @param listener
 | 
			
		||||
     *            will be called after the user cancelled the dialog.
 | 
			
		||||
     */
 | 
			
		||||
    public static void showUnknownError(Context context, Throwable t,
 | 
			
		||||
                                        DialogInterface.OnCancelListener listener) {
 | 
			
		||||
            DialogInterface.OnCancelListener listener) {
 | 
			
		||||
        showError(
 | 
			
		||||
                context,
 | 
			
		||||
                String.format(
 | 
			
		||||
@@ -155,16 +180,20 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows a confirmation dialog.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context {@link Context}
 | 
			
		||||
     * @param msg     the message.
 | 
			
		||||
     * @param onYes   will be called if the user selects positive answer (a
 | 
			
		||||
     *                <i>Yes</i> or <i>OK</i>).
 | 
			
		||||
     * @param onNo    will be called after the user cancelled the dialog.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msg
 | 
			
		||||
     *            the message.
 | 
			
		||||
     * @param onYes
 | 
			
		||||
     *            will be called if the user selects positive answer (a
 | 
			
		||||
     *            <i>Yes</i> or <i>OK</i>).
 | 
			
		||||
     * @param onNo
 | 
			
		||||
     *            will be called after the user cancelled the dialog.
 | 
			
		||||
     */
 | 
			
		||||
    public static void confirmYesno(Context context, CharSequence msg,
 | 
			
		||||
                                    DialogInterface.OnClickListener onYes,
 | 
			
		||||
                                    DialogInterface.OnCancelListener onNo) {
 | 
			
		||||
            DialogInterface.OnClickListener onYes,
 | 
			
		||||
            DialogInterface.OnCancelListener onNo) {
 | 
			
		||||
        AlertDialog dlg = newAlertDlg(context);
 | 
			
		||||
        dlg.setIcon(android.R.drawable.ic_dialog_alert);
 | 
			
		||||
        dlg.setTitle(R.string.afc_title_confirmation);
 | 
			
		||||
@@ -177,22 +206,26 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Shows a confirmation dialog.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context {@link Context}
 | 
			
		||||
     * @param msg     the message.
 | 
			
		||||
     * @param onYes   will be called if the user selects positive answer (a
 | 
			
		||||
     *                <i>Yes</i> or <i>OK</i>).
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param msg
 | 
			
		||||
     *            the message.
 | 
			
		||||
     * @param onYes
 | 
			
		||||
     *            will be called if the user selects positive answer (a
 | 
			
		||||
     *            <i>Yes</i> or <i>OK</i>).
 | 
			
		||||
     */
 | 
			
		||||
    public static void confirmYesno(Context context, CharSequence msg,
 | 
			
		||||
                                    DialogInterface.OnClickListener onYes) {
 | 
			
		||||
            DialogInterface.OnClickListener onYes) {
 | 
			
		||||
        confirmYesno(context, msg, onYes, null);
 | 
			
		||||
    }// confirmYesno()
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates new {@link Dialog}. Set canceled on touch outside to {@code true}
 | 
			
		||||
     * .
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context which uses this library's theme.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            the context which uses this library's theme.
 | 
			
		||||
     * @return the {@link Dialog}.
 | 
			
		||||
     * @since v4.3 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -206,8 +239,9 @@ public class Dlg {
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates new {@link AlertDialog}. Set canceled on touch outside to
 | 
			
		||||
     * {@code true}.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context which uses this library's theme.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            the context which uses this library's theme.
 | 
			
		||||
     * @return {@link AlertDialog}
 | 
			
		||||
     * @since v4.3 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -219,8 +253,9 @@ public class Dlg {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates new {@link AlertDialog.Builder}.
 | 
			
		||||
     *
 | 
			
		||||
     * @param context the context which uses this library's theme.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            the context which uses this library's theme.
 | 
			
		||||
     * @return {@link AlertDialog}
 | 
			
		||||
     * @since v4.3 beta
 | 
			
		||||
     */
 | 
			
		||||
@@ -228,4 +263,5 @@ public class Dlg {
 | 
			
		||||
        return new AlertDialog.Builder(new ContextThemeWrapper(context,
 | 
			
		||||
                Ui.resolveAttribute(context, R.attr.afc_theme_dialog)));
 | 
			
		||||
    }// newAlertDlgBuilder()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ import android.widget.AbsListView;
 | 
			
		||||
 */
 | 
			
		||||
public class GestureUtils {
 | 
			
		||||
 | 
			
		||||
    public static final String CLASSNAME = GestureUtils.class.getName();
 | 
			
		||||
    private static final String CLASSNAME = GestureUtils.class.getName();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The fling direction.
 | 
			
		||||
@@ -218,4 +218,5 @@ public class GestureUtils {
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }// setupGestureDetector()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
 | 
			
		||||
package group.pals.android.lib.ui.filechooser.utils.ui;
 | 
			
		||||
 | 
			
		||||
import group.pals.android.lib.ui.filechooser.R;
 | 
			
		||||
import android.app.ProgressDialog;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.DialogInterface;
 | 
			
		||||
@@ -21,9 +22,10 @@ import android.util.Log;
 | 
			
		||||
 * @author Hai Bison
 | 
			
		||||
 * @since v2.1 alpha
 | 
			
		||||
 */
 | 
			
		||||
public abstract class LoadingDialog extends AsyncTask<Void, Void, Object> {
 | 
			
		||||
public abstract class LoadingDialog<Params, Progress, Result> extends
 | 
			
		||||
        AsyncTask<Params, Progress, Result> {
 | 
			
		||||
 | 
			
		||||
    public static final String CLASSNAME = LoadingDialog.class.getName();
 | 
			
		||||
    private static final String CLASSNAME = LoadingDialog.class.getName();
 | 
			
		||||
 | 
			
		||||
    private final ProgressDialog mDialog;
 | 
			
		||||
    /**
 | 
			
		||||
@@ -62,7 +64,7 @@ public abstract class LoadingDialog extends AsyncTask<Void, Void, Object> {
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }// LoadingDialog
 | 
			
		||||
    }// LoadingDialog()
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates new {@link LoadingDialog}
 | 
			
		||||
@@ -76,12 +78,26 @@ public abstract class LoadingDialog extends AsyncTask<Void, Void, Object> {
 | 
			
		||||
     */
 | 
			
		||||
    public LoadingDialog(Context context, int msgId, boolean cancelable) {
 | 
			
		||||
        this(context, context.getString(msgId), cancelable);
 | 
			
		||||
    }
 | 
			
		||||
    }// LoadingDialog()
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates new {@link LoadingDialog} showing "Loading..." (
 | 
			
		||||
     * {@link R.string#afc_msg_loading}).
 | 
			
		||||
     * 
 | 
			
		||||
     * @param context
 | 
			
		||||
     *            {@link Context}
 | 
			
		||||
     * @param cancelable
 | 
			
		||||
     *            as the name means.
 | 
			
		||||
     */
 | 
			
		||||
    public LoadingDialog(Context context, boolean cancelable) {
 | 
			
		||||
        this(context, context.getString(R.string.afc_msg_loading), cancelable);
 | 
			
		||||
    }// LoadingDialog()
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * If you override this method, you must call {@code super.onPreExecute()}
 | 
			
		||||
     * at very first of the method.
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void onPreExecute() {
 | 
			
		||||
        new Handler().postDelayed(new Runnable() {
 | 
			
		||||
 | 
			
		||||
@@ -107,7 +123,8 @@ public abstract class LoadingDialog extends AsyncTask<Void, Void, Object> {
 | 
			
		||||
     * If you override this method, you must call
 | 
			
		||||
     * {@code super.onPostExecute(result)} at the entry point of the method.
 | 
			
		||||
     */
 | 
			
		||||
    protected void onPostExecute(Object result) {
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void onPostExecute(Result result) {
 | 
			
		||||
        doFinish();
 | 
			
		||||
    }// onPostExecute()
 | 
			
		||||
 | 
			
		||||
@@ -115,6 +132,7 @@ public abstract class LoadingDialog extends AsyncTask<Void, Void, Object> {
 | 
			
		||||
     * If you override this method, you must call {@code super.onCancelled()} at
 | 
			
		||||
     * the entry point of the method.
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void onCancelled() {
 | 
			
		||||
        doFinish();
 | 
			
		||||
        super.onCancelled();
 | 
			
		||||
@@ -148,9 +166,10 @@ public abstract class LoadingDialog extends AsyncTask<Void, Void, Object> {
 | 
			
		||||
     * 
 | 
			
		||||
     * @param delayTime
 | 
			
		||||
     *            the delay time to set
 | 
			
		||||
     * @return {@link LoadingDialog}
 | 
			
		||||
     * @return the instance of this dialog, for chaining multiple calls into a
 | 
			
		||||
     *         single statement.
 | 
			
		||||
     */
 | 
			
		||||
    public LoadingDialog setDelayTime(int delayTime) {
 | 
			
		||||
    public LoadingDialog<Params, Progress, Result> setDelayTime(int delayTime) {
 | 
			
		||||
        mDelayTime = delayTime >= 0 ? delayTime : 0;
 | 
			
		||||
        return this;
 | 
			
		||||
    }// setDelayTime()
 | 
			
		||||
@@ -174,4 +193,5 @@ public abstract class LoadingDialog extends AsyncTask<Void, Void, Object> {
 | 
			
		||||
    protected Throwable getLastException() {
 | 
			
		||||
        return mLastException;
 | 
			
		||||
    }// getLastException()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -65,4 +65,5 @@ public class MenuItemAdapter extends BaseAdapter {
 | 
			
		||||
 | 
			
		||||
        return convertView;
 | 
			
		||||
    }// getView()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -24,4 +24,5 @@ public interface TaskListener {
 | 
			
		||||
     *            the user data, can be {@code null}.
 | 
			
		||||
     */
 | 
			
		||||
    public void onFinish(boolean ok, Object any);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -145,4 +145,5 @@ public class Ui {
 | 
			
		||||
            dialogWindow.setLayout(width, height);
 | 
			
		||||
        }
 | 
			
		||||
    }// adjustDialogSizeForLargeScreen()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -566,4 +566,5 @@ public class BookmarkCursorAdapter extends ResourceCursorTreeAdapter {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }// markItemAsDeleted()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ import java.util.List;
 | 
			
		||||
import android.app.AlertDialog;
 | 
			
		||||
import android.app.Dialog;
 | 
			
		||||
import android.content.ContentResolver;
 | 
			
		||||
import android.content.ContentUris;
 | 
			
		||||
import android.content.ContentValues;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.DialogInterface;
 | 
			
		||||
@@ -660,9 +661,8 @@ public class BookmarkFragment extends DialogFragment implements
 | 
			
		||||
                                    BookmarkContract.COLUMN_MODIFICATION_TIME,
 | 
			
		||||
                                    DbUtils.formatNumber(new Date().getTime()));
 | 
			
		||||
                            context.getContentResolver().update(
 | 
			
		||||
                                    Uri.withAppendedPath(BookmarkContract
 | 
			
		||||
                                            .genContentIdUriBase(context), Uri
 | 
			
		||||
                                            .encode(Integer.toString(id))),
 | 
			
		||||
                                    ContentUris.withAppendedId(BookmarkContract
 | 
			
		||||
                                            .genContentIdUriBase(context), id),
 | 
			
		||||
                                    values, null, null);
 | 
			
		||||
                        } else {
 | 
			
		||||
                            /*
 | 
			
		||||
@@ -801,4 +801,5 @@ public class BookmarkFragment extends DialogFragment implements
 | 
			
		||||
                setEditor(false);
 | 
			
		||||
        }// onClick()
 | 
			
		||||
    };// mBtnOkOnClickListener
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -610,4 +610,5 @@ public class HistoryCursorAdapter extends ResourceCursorTreeAdapter {
 | 
			
		||||
        return android.text.format.DateUtils.formatDateTime(c, millis,
 | 
			
		||||
                DateUtils.FORMAT_SHORT_TIME);
 | 
			
		||||
    }// formatTime()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -487,7 +487,7 @@ public class HistoryFragment extends DialogFragment implements
 | 
			
		||||
                new DialogInterface.OnClickListener() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onClick(DialogInterface arg0, int arg1) {
 | 
			
		||||
                    public void onClick(DialogInterface dialog, int which) {
 | 
			
		||||
                        getActivity().getContentResolver().delete(
 | 
			
		||||
                                HistoryContract.genContentUri(getActivity()),
 | 
			
		||||
                                null, null);
 | 
			
		||||
@@ -771,4 +771,5 @@ public class HistoryFragment extends DialogFragment implements
 | 
			
		||||
            return false;
 | 
			
		||||
        }// onItemLongClick()
 | 
			
		||||
    };// mListViewOnItemLongClickListener
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||