include the filepicker project via gradle
|
@ -39,12 +39,10 @@ dependencies {
|
||||||
compile 'com.android.support:design:23.4.0'
|
compile 'com.android.support:design:23.4.0'
|
||||||
compile 'com.jakewharton:butterknife:8.0.1'
|
compile 'com.jakewharton:butterknife:8.0.1'
|
||||||
compile 'com.github.bumptech.glide:glide:3.7.0'
|
compile 'com.github.bumptech.glide:glide:3.7.0'
|
||||||
|
compile 'com.simplemobiletools:filepicker:1.0.0'
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
|
|
||||||
apt 'com.jakewharton:butterknife-compiler:8.0.1'
|
apt 'com.jakewharton:butterknife-compiler:8.0.1'
|
||||||
|
|
||||||
debugCompile project(path: ':library', configuration: 'debug')
|
|
||||||
releaseCompile project(path: ':library', configuration: 'release')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
|
|
@ -39,8 +39,6 @@ import com.simplemobiletools.filemanager.Utils;
|
||||||
import com.simplemobiletools.filemanager.adapters.ItemsAdapter;
|
import com.simplemobiletools.filemanager.adapters.ItemsAdapter;
|
||||||
import com.simplemobiletools.filemanager.asynctasks.CopyTask;
|
import com.simplemobiletools.filemanager.asynctasks.CopyTask;
|
||||||
import com.simplemobiletools.filemanager.dialogs.PropertiesDialog;
|
import com.simplemobiletools.filemanager.dialogs.PropertiesDialog;
|
||||||
import com.simplemobiletools.filepicker.dialogs.PickFolderDialog;
|
|
||||||
import com.simplemobiletools.filepicker.models.FileDirItem;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileFilter;
|
import java.io.FileFilter;
|
||||||
|
@ -581,9 +579,9 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||||
public void onClick(final View view) {
|
public void onClick(final View view) {
|
||||||
final boolean showHiddenItems = mConfig.getShowHidden();
|
final boolean showHiddenItems = mConfig.getShowHidden();
|
||||||
final boolean showFullPath = mConfig.getShowFullPath();
|
final boolean showFullPath = mConfig.getShowFullPath();
|
||||||
PickFolderDialog dialog = PickFolderDialog.Companion.newInstance(mCopyDestinationPath, showHiddenItems, showFullPath);
|
/*PickFolderDialog dialog = PickFolderDialog.Companion.newInstance(mCopyDestinationPath, showHiddenItems, showFullPath);
|
||||||
dialog.setTargetFragment(ItemsFragment.this, SELECT_FOLDER_REQUEST);
|
dialog.setTargetFragment(ItemsFragment.this, SELECT_FOLDER_REQUEST);
|
||||||
dialog.show(getFragmentManager(), "selectFolder");
|
dialog.show(getFragmentManager(), "selectFolder");*/
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
<item>
|
<item>
|
||||||
<selector>
|
<selector>
|
||||||
<item
|
<item
|
||||||
android:drawable="@color/smtfp_activated_item_foreground"
|
android:drawable="@color/activated_item_foreground"
|
||||||
android:state_activated="true"/>
|
android:state_activated="true"/>
|
||||||
</selector>
|
</selector>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<ripple android:color="@color/smtfp_pressed_item_foreground">
|
<ripple android:color="@color/pressed_item_foreground">
|
||||||
<item android:id="@android:id/mask">
|
<item android:id="@android:id/mask">
|
||||||
<color android:color="@android:color/white"/>
|
<color android:color="@android:color/white"/>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:drawable="@color/smtfp_pressed_item_foreground" android:state_pressed="true"/>
|
<item android:drawable="@color/pressed_item_foreground" android:state_pressed="true"/>
|
||||||
<item android:drawable="@color/smtfp_activated_item_foreground" android:state_activated="true"/>
|
<item android:drawable="@color/activated_item_foreground" android:state_activated="true"/>
|
||||||
</selector>
|
</selector>
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
android:id="@+id/about_holder"
|
android:id="@+id/about_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingBottom="@dimen/smtfp_activity_margin"
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
android:paddingLeft="@dimen/smtfp_activity_margin"
|
android:paddingLeft="@dimen/activity_margin"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin">
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/about_website"
|
android:id="@+id/about_website"
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/about_website"
|
android:layout_below="@+id/about_website"
|
||||||
android:layout_marginTop="@dimen/smtfp_activity_margin"
|
android:layout_marginTop="@dimen/activity_margin"
|
||||||
android:text="@string/email_label"/>
|
android:text="@string/email_label"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/about_email_label"
|
android:layout_below="@+id/about_email_label"
|
||||||
android:paddingBottom="@dimen/smtfp_activity_margin"
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
android:text="@string/email"/>
|
android:text="@string/email"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -42,8 +42,8 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/about_email"
|
android:layout_below="@+id/about_email"
|
||||||
android:paddingBottom="@dimen/smtfp_activity_margin"
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin"
|
android:paddingTop="@dimen/activity_margin"
|
||||||
android:text="@string/invite_friends_underlined"
|
android:text="@string/invite_friends_underlined"
|
||||||
android:textColor="@color/colorPrimary"/>
|
android:textColor="@color/colorPrimary"/>
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/about_invite"
|
android:layout_below="@+id/about_invite"
|
||||||
android:paddingBottom="@dimen/smtfp_activity_margin"
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin"
|
android:paddingTop="@dimen/activity_margin"
|
||||||
android:text="@string/rate_us_underlined"
|
android:text="@string/rate_us_underlined"
|
||||||
android:textColor="@color/colorPrimary"/>
|
android:textColor="@color/colorPrimary"/>
|
||||||
|
|
||||||
|
@ -62,8 +62,8 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/about_rate_us"
|
android:layout_below="@+id/about_rate_us"
|
||||||
android:paddingBottom="@dimen/smtfp_activity_margin"
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin"
|
android:paddingTop="@dimen/activity_margin"
|
||||||
android:text="@string/third_party_licences_underlined"
|
android:text="@string/third_party_licences_underlined"
|
||||||
android:textColor="@color/colorPrimary"/>
|
android:textColor="@color/colorPrimary"/>
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/about_license"
|
android:layout_below="@+id/about_license"
|
||||||
android:paddingBottom="@dimen/social_padding"
|
android:paddingBottom="@dimen/social_padding"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin"
|
android:paddingTop="@dimen/activity_margin"
|
||||||
android:text="@string/follow_us"/>
|
android:text="@string/follow_us"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_below="@+id/about_gplus"
|
android:layout_below="@+id/about_gplus"
|
||||||
android:gravity="center_horizontal|bottom"
|
android:gravity="center_horizontal|bottom"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin"
|
android:paddingTop="@dimen/activity_margin"
|
||||||
android:text="v1.0\nCopyright © Simple Mobile Tools 2016"/>
|
android:text="v1.0\nCopyright © Simple Mobile Tools 2016"/>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="@dimen/smtfp_activity_margin">
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
android:id="@+id/license_butterknife_title"
|
android:id="@+id/license_butterknife_title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin"
|
android:paddingTop="@dimen/activity_margin"
|
||||||
android:text="@string/butterknife_title"
|
android:text="@string/butterknife_title"
|
||||||
android:textColor="@color/colorPrimary"/>
|
android:textColor="@color/colorPrimary"/>
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
android:id="@+id/breadcrumbs"
|
android:id="@+id/breadcrumbs"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="@dimen/smtfp_activity_margin"/>
|
android:padding="@dimen/activity_margin"/>
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/fragment_holder"
|
android:id="@+id/fragment_holder"
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/settings_padding"
|
android:layout_marginTop="@dimen/settings_padding"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:padding="@dimen/smtfp_activity_margin">
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/settings_dark_theme_label"
|
android:id="@+id/settings_dark_theme_label"
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/settings_padding"
|
android:layout_marginTop="@dimen/settings_padding"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:padding="@dimen/smtfp_activity_margin">
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/settings_show_hidden_label"
|
android:id="@+id/settings_show_hidden_label"
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/settings_padding"
|
android:layout_marginTop="@dimen/settings_padding"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:padding="@dimen/smtfp_activity_margin">
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/settings_show_full_path_label"
|
android:id="@+id/settings_show_full_path_label"
|
||||||
|
|
|
@ -5,25 +5,25 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingLeft="@dimen/smtfp_activity_margin"
|
android:paddingLeft="@dimen/activity_margin"
|
||||||
android:paddingRight="@dimen/smtfp_activity_margin"
|
android:paddingRight="@dimen/activity_margin"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin">
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/source_label"
|
android:id="@+id/source_label"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/source"
|
android:text="@string/source"
|
||||||
android:textSize="@dimen/smtfp_details_text_size"/>
|
android:textSize="@dimen/details_text_size"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/source"
|
android:id="@+id/source"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/smtfp_activity_margin"
|
android:layout_marginBottom="@dimen/activity_margin"
|
||||||
android:layout_marginLeft="@dimen/smtfp_activity_margin"
|
android:layout_marginLeft="@dimen/activity_margin"
|
||||||
android:paddingRight="@dimen/smtfp_small_margin"
|
android:paddingRight="@dimen/small_margin"
|
||||||
android:paddingTop="@dimen/smtfp_small_margin"
|
android:paddingTop="@dimen/small_margin"
|
||||||
android:text="source"/>
|
android:text="source"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -31,17 +31,17 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/destination"
|
android:text="@string/destination"
|
||||||
android:textSize="@dimen/smtfp_details_text_size"/>
|
android:textSize="@dimen/details_text_size"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/destination"
|
android:id="@+id/destination"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/smtfp_activity_margin"
|
android:layout_marginBottom="@dimen/activity_margin"
|
||||||
android:layout_marginLeft="@dimen/smtfp_activity_margin"
|
android:layout_marginLeft="@dimen/activity_margin"
|
||||||
android:paddingBottom="@dimen/smtfp_small_margin"
|
android:paddingBottom="@dimen/small_margin"
|
||||||
android:paddingRight="@dimen/smtfp_small_margin"
|
android:paddingRight="@dimen/small_margin"
|
||||||
android:paddingTop="@dimen/smtfp_small_margin"
|
android:paddingTop="@dimen/small_margin"
|
||||||
android:text="@string/select_destination"/>
|
android:text="@string/select_destination"/>
|
||||||
|
|
||||||
<RadioGroup
|
<RadioGroup
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
android:id="@+id/dialog_radio_copy"
|
android:id="@+id/dialog_radio_copy"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/smtfp_medium_margin"
|
android:layout_marginBottom="@dimen/medium_margin"
|
||||||
android:text="@string/copy"/>
|
android:text="@string/copy"/>
|
||||||
|
|
||||||
<RadioButton
|
<RadioButton
|
||||||
|
|
|
@ -5,15 +5,15 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingLeft="@dimen/smtfp_activity_margin"
|
android:paddingLeft="@dimen/activity_margin"
|
||||||
android:paddingRight="@dimen/smtfp_activity_margin"
|
android:paddingRight="@dimen/activity_margin"
|
||||||
android:paddingTop="@dimen/smtfp_activity_margin">
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/item_name"
|
android:id="@+id/item_name"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/smtfp_activity_margin"
|
android:layout_marginBottom="@dimen/activity_margin"
|
||||||
android:inputType="textCapSentences"
|
android:inputType="textCapSentences"
|
||||||
android:singleLine="true"/>
|
android:singleLine="true"/>
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
android:id="@+id/dialog_radio_directory"
|
android:id="@+id/dialog_radio_directory"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/smtfp_medium_margin"
|
android:layout_marginBottom="@dimen/medium_margin"
|
||||||
android:text="@string/directory"/>
|
android:text="@string/directory"/>
|
||||||
|
|
||||||
<RadioButton
|
<RadioButton
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/directory_picker_holder"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/directory_picker_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
@ -10,11 +10,10 @@
|
||||||
android:id="@+id/directory_picker_breadcrumbs"
|
android:id="@+id/directory_picker_breadcrumbs"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="@dimen/smtfp_activity_margin"/>
|
android:padding="@dimen/activity_margin"/>
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/directory_picker_list"
|
android:id="@+id/directory_picker_list"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,5 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingLeft="@dimen/smtfp_activity_margin"
|
android:paddingLeft="@dimen/activity_margin"
|
||||||
android:paddingRight="@dimen/smtfp_activity_margin">
|
android:paddingRight="@dimen/activity_margin"/>
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:choiceMode="multipleChoiceModal"
|
android:choiceMode="multipleChoiceModal"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingLeft="@dimen/smtfp_activity_margin"/>
|
android:paddingLeft="@dimen/activity_margin"/>
|
||||||
|
|
||||||
</android.support.v4.widget.SwipeRefreshLayout>
|
</android.support.v4.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_margin="@dimen/smtfp_activity_margin"
|
android:layout_margin="@dimen/activity_margin"
|
||||||
android:src="@mipmap/plus"/>
|
android:src="@mipmap/plus"/>
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
|
@ -3,21 +3,21 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:foreground="@drawable/smtfp_selector">
|
android:foreground="@drawable/selector">
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/item_holder"
|
android:id="@+id/item_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingRight="@dimen/smtfp_activity_margin">
|
android:paddingRight="@dimen/activity_margin">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/item_icon"
|
android:id="@+id/item_icon"
|
||||||
android:layout_width="@dimen/smtfp_icon_size"
|
android:layout_width="@dimen/icon_size"
|
||||||
android:layout_height="@dimen/icon_size"
|
android:layout_height="@dimen/icon_size"
|
||||||
android:paddingBottom="@dimen/smtfp_medium_margin"
|
android:paddingBottom="@dimen/medium_margin"
|
||||||
android:paddingTop="@dimen/smtfp_medium_margin"
|
android:paddingTop="@dimen/medium_margin"
|
||||||
android:src="@mipmap/smtfp_directory"/>
|
android:src="@mipmap/directory"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/item_name"
|
android:id="@+id/item_name"
|
||||||
|
@ -27,8 +27,8 @@
|
||||||
android:layout_toRightOf="@+id/item_icon"
|
android:layout_toRightOf="@+id/item_icon"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="3"
|
android:maxLines="3"
|
||||||
android:paddingLeft="@dimen/smtfp_small_margin"
|
android:paddingLeft="@dimen/small_margin"
|
||||||
android:paddingTop="@dimen/smtfp_small_margin"
|
android:paddingTop="@dimen/small_margin"
|
||||||
android:text="Directory"/>
|
android:text="Directory"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -37,9 +37,9 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/item_name"
|
android:layout_below="@+id/item_name"
|
||||||
android:layout_toRightOf="@+id/item_icon"
|
android:layout_toRightOf="@+id/item_icon"
|
||||||
android:paddingLeft="@dimen/smtfp_small_margin"
|
android:paddingLeft="@dimen/small_margin"
|
||||||
android:text="1 KB"
|
android:text="1 KB"
|
||||||
android:textSize="@dimen/smtfp_details_text_size"/>
|
android:textSize="@dimen/details_text_size"/>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
@ -9,14 +9,14 @@
|
||||||
android:id="@+id/property_label"
|
android:id="@+id/property_label"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/smtfp_activity_margin"
|
android:layout_marginTop="@dimen/activity_margin"
|
||||||
android:textSize="@dimen/smtfp_details_text_size"/>
|
android:textSize="@dimen/details_text_size"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/property_value"
|
android:id="@+id/property_value"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingLeft="@dimen/smtfp_small_margin"
|
android:paddingLeft="@dimen/small_margin"
|
||||||
android:paddingRight="@dimen/smtfp_small_margin"/>
|
android:paddingRight="@dimen/small_margin"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -5,13 +5,13 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="@dimen/smtfp_activity_margin">
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/item_name"
|
android:id="@+id/item_name"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/smtfp_activity_margin"
|
android:layout_marginBottom="@dimen/activity_margin"
|
||||||
android:inputType="textCapSentences"
|
android:inputType="textCapSentences"
|
||||||
android:singleLine="true"/>
|
android:singleLine="true"/>
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
<item name="actionBarStyle">@style/AppTheme.ActionBarStyle</item>
|
<item name="actionBarStyle">@style/AppTheme.ActionBarStyle</item>
|
||||||
<item name="android:textSize">@dimen/smtfp_normal_text_size</item>
|
<item name="android:textSize">@dimen/normal_text_size</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme.Dark" parent="Theme.AppCompat">
|
<style name="AppTheme.Dark" parent="Theme.AppCompat">
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
<item name="actionBarStyle">@style/AppTheme.ActionBarStyle</item>
|
<item name="actionBarStyle">@style/AppTheme.ActionBarStyle</item>
|
||||||
<item name="android:textSize">@dimen/smtfp_normal_text_size</item>
|
<item name="android:textSize">@dimen/normal_text_size</item>
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
<item name="android:windowBackground">@android:color/black</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
apply plugin: 'com.android.library'
|
|
||||||
apply plugin: 'kotlin-android'
|
|
||||||
apply plugin: 'kotlin-android-extensions'
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdkVersion 23
|
|
||||||
buildToolsVersion "23.0.3"
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
minSdkVersion 16
|
|
||||||
targetSdkVersion 23
|
|
||||||
versionCode 1
|
|
||||||
versionName "1.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled false
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
|
||||||
}
|
|
||||||
|
|
||||||
publishNonDefault true
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compile 'com.android.support:appcompat-v7:23.4.0'
|
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
|
|
||||||
buildscript {
|
|
||||||
ext.kotlin_version = '1.0.3'
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
# Add project specific ProGuard rules here.
|
|
||||||
# By default, the flags in this file are appended to flags specified
|
|
||||||
# in $ANDROID_HOME/tools/proguard/proguard-android.txt
|
|
||||||
# You can edit the include path and order by changing the proguardFiles
|
|
||||||
# directive in build.gradle.
|
|
||||||
#
|
|
||||||
# For more details, see
|
|
||||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
||||||
|
|
||||||
# Add any project specific keep options here:
|
|
||||||
|
|
||||||
# If your project uses WebView with JS, uncomment the following
|
|
||||||
# and specify the fully qualified class name to the JavaScript interface
|
|
||||||
# class:
|
|
||||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
||||||
# public *;
|
|
||||||
#}
|
|
|
@ -1,2 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest package="com.simplemobiletools.filepicker"/>
|
|
|
@ -1,79 +0,0 @@
|
||||||
package com.simplemobiletools.filepicker.adapters
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.res.Resources
|
|
||||||
import android.graphics.Bitmap
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.BaseAdapter
|
|
||||||
import android.widget.ImageView
|
|
||||||
import android.widget.TextView
|
|
||||||
import com.simplemobiletools.filepicker.R
|
|
||||||
import com.simplemobiletools.filepicker.extensions.formatSize
|
|
||||||
import com.simplemobiletools.filepicker.extensions.getColoredIcon
|
|
||||||
import com.simplemobiletools.filepicker.models.FileDirItem
|
|
||||||
import kotlinx.android.synthetic.main.smtfp_list_item.view.*
|
|
||||||
|
|
||||||
class ItemsAdapter(context: Context, private val mItems: List<FileDirItem>) : BaseAdapter() {
|
|
||||||
private val mInflater: LayoutInflater
|
|
||||||
private val mFileBmp: Bitmap
|
|
||||||
private val mDirectoryBmp: Bitmap
|
|
||||||
private val mRes: Resources
|
|
||||||
|
|
||||||
init {
|
|
||||||
mInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
|
||||||
|
|
||||||
mRes = context.resources
|
|
||||||
mDirectoryBmp = mRes.getColoredIcon(R.color.smtfp_thumbnail_grey, R.mipmap.smtfp_directory)
|
|
||||||
mFileBmp = mRes.getColoredIcon(R.color.smtfp_thumbnail_grey, R.mipmap.smtfp_file)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
|
||||||
var view = convertView
|
|
||||||
val viewHolder: ViewHolder
|
|
||||||
if (view == null) {
|
|
||||||
view = mInflater.inflate(R.layout.smtfp_list_item, parent, false)
|
|
||||||
viewHolder = ViewHolder(view)
|
|
||||||
view!!.tag = viewHolder
|
|
||||||
} else {
|
|
||||||
viewHolder = view.tag as ViewHolder
|
|
||||||
}
|
|
||||||
|
|
||||||
val item = mItems[position]
|
|
||||||
viewHolder.name.text = item.name
|
|
||||||
|
|
||||||
if (item.isDirectory) {
|
|
||||||
viewHolder.icon.setImageBitmap(mDirectoryBmp)
|
|
||||||
viewHolder.details.text = getChildrenCnt(item)
|
|
||||||
} else {
|
|
||||||
viewHolder.icon.setImageBitmap(mFileBmp)
|
|
||||||
viewHolder.details.text = item.size.formatSize()
|
|
||||||
}
|
|
||||||
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getChildrenCnt(item: FileDirItem): String {
|
|
||||||
val children = item.children
|
|
||||||
return mRes.getQuantityString(R.plurals.smtfp_items, children, children)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getCount(): Int {
|
|
||||||
return mItems.size
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItem(position: Int): Any {
|
|
||||||
return mItems[position]
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItemId(position: Int): Long {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class ViewHolder(view: View) {
|
|
||||||
val name: TextView = view.item_name
|
|
||||||
val icon: ImageView = view.item_icon
|
|
||||||
val details: TextView = view.item_details
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,133 +0,0 @@
|
||||||
package com.simplemobiletools.filepicker.dialogs
|
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.app.Dialog
|
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.support.v4.app.DialogFragment
|
|
||||||
import android.support.v7.app.AlertDialog
|
|
||||||
import android.view.View
|
|
||||||
import com.simplemobiletools.filepicker.R
|
|
||||||
import com.simplemobiletools.filepicker.adapters.ItemsAdapter
|
|
||||||
import com.simplemobiletools.filepicker.extensions.getFilenameFromPath
|
|
||||||
import com.simplemobiletools.filepicker.models.FileDirItem
|
|
||||||
import com.simplemobiletools.filepicker.views.Breadcrumbs
|
|
||||||
import kotlinx.android.synthetic.main.smtfp_directory_picker.view.*
|
|
||||||
import java.io.File
|
|
||||||
import java.util.*
|
|
||||||
import kotlin.comparisons.compareBy
|
|
||||||
|
|
||||||
class PickFolderDialog : DialogFragment(), Breadcrumbs.BreadcrumbsListener {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
lateinit var mPath: String
|
|
||||||
var mFirstUpdate: Boolean = true
|
|
||||||
var mShowHidden: Boolean = false
|
|
||||||
var mShowFullPath: Boolean = false
|
|
||||||
|
|
||||||
fun newInstance(path: String, showHidden: Boolean, showFullPath: Boolean): PickFolderDialog {
|
|
||||||
mPath = path
|
|
||||||
mFirstUpdate = true
|
|
||||||
mShowHidden = showHidden
|
|
||||||
mShowFullPath = showFullPath
|
|
||||||
return PickFolderDialog()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lateinit var dialog: View
|
|
||||||
var requestCode = 0
|
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
|
||||||
dialog = activity.layoutInflater.inflate(R.layout.smtfp_directory_picker, null)
|
|
||||||
requestCode = targetRequestCode
|
|
||||||
|
|
||||||
updateItems()
|
|
||||||
setupBreadcrumbs()
|
|
||||||
|
|
||||||
return AlertDialog.Builder(activity)
|
|
||||||
.setTitle(resources.getString(R.string.smtfp_select_destination))
|
|
||||||
.setView(dialog)
|
|
||||||
.setPositiveButton(R.string.smtfp_ok) { dialog, which -> sendResult() }
|
|
||||||
.setNegativeButton(R.string.smtfp_cancel, null)
|
|
||||||
.create()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateItems() {
|
|
||||||
var items = getItems(mPath)
|
|
||||||
if (!containsDirectory(items) && !mFirstUpdate) {
|
|
||||||
sendResult()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
items = items.sortedWith(compareBy({ !it.isDirectory }, { it.name.toLowerCase() }))
|
|
||||||
|
|
||||||
val adapter = ItemsAdapter(context, items)
|
|
||||||
dialog.directory_picker_list.adapter = adapter
|
|
||||||
dialog.directory_picker_breadcrumbs.setBreadcrumb(mPath, mShowFullPath)
|
|
||||||
dialog.directory_picker_list.setOnItemClickListener { adapterView, view, position, id ->
|
|
||||||
val item = items[position]
|
|
||||||
if (item.isDirectory) {
|
|
||||||
mPath = item.path
|
|
||||||
updateItems()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mFirstUpdate = false
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun sendResult() {
|
|
||||||
val intent = Intent()
|
|
||||||
intent.data = Uri.parse(mPath)
|
|
||||||
targetFragment.onActivityResult(requestCode, Activity.RESULT_OK, intent)
|
|
||||||
dismiss()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupBreadcrumbs() {
|
|
||||||
dialog.directory_picker_breadcrumbs.setListener(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getItems(path: String): List<FileDirItem> {
|
|
||||||
val items = ArrayList<FileDirItem>()
|
|
||||||
val base = File(path)
|
|
||||||
val files = base.listFiles()
|
|
||||||
if (files != null) {
|
|
||||||
for (file in files) {
|
|
||||||
if (!file.isDirectory)
|
|
||||||
continue
|
|
||||||
|
|
||||||
if (!mShowHidden && file.isHidden)
|
|
||||||
continue
|
|
||||||
|
|
||||||
val curPath = file.absolutePath
|
|
||||||
val curName = curPath.getFilenameFromPath()
|
|
||||||
val size = file.length()
|
|
||||||
|
|
||||||
items.add(FileDirItem(curPath, curName, file.isDirectory, getChildren(file), size))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return items
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getChildren(file: File): Int {
|
|
||||||
if (file.listFiles() == null || !file.isDirectory)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
return file.listFiles().size
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun containsDirectory(items: List<FileDirItem>): Boolean {
|
|
||||||
for (item in items) {
|
|
||||||
if (item.isDirectory) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun breadcrumbClicked(id: Int) {
|
|
||||||
val item = dialog.directory_picker_breadcrumbs.getChildAt(id).tag as FileDirItem
|
|
||||||
mPath = item.path
|
|
||||||
updateItems()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
package com.simplemobiletools.filepicker.extensions
|
|
||||||
|
|
||||||
import java.text.DecimalFormat
|
|
||||||
|
|
||||||
fun Long.formatSize(): String {
|
|
||||||
if (this <= 0)
|
|
||||||
return "0 B"
|
|
||||||
|
|
||||||
val units = arrayOf("B", "kB", "MB", "GB", "TB")
|
|
||||||
val digitGroups = (Math.log10(toDouble()) / Math.log10(1024.0)).toInt()
|
|
||||||
return DecimalFormat("#,##0.#").format(this / Math.pow(1024.0, digitGroups.toDouble())) + " " + units[digitGroups]
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package com.simplemobiletools.filepicker.extensions
|
|
||||||
|
|
||||||
import android.content.res.Resources
|
|
||||||
import android.graphics.*
|
|
||||||
|
|
||||||
fun Resources.getColoredIcon(colorId: Int, resId: Int): Bitmap {
|
|
||||||
val options = BitmapFactory.Options()
|
|
||||||
options.inMutable = true
|
|
||||||
val bitmap = BitmapFactory.decodeResource(this, resId, options)
|
|
||||||
val paint = Paint()
|
|
||||||
val filter = PorterDuffColorFilter(this.getColor(colorId), PorterDuff.Mode.SRC_IN)
|
|
||||||
paint.colorFilter = filter
|
|
||||||
val canvas = Canvas(bitmap)
|
|
||||||
canvas.drawBitmap(bitmap, 0f, 0f, paint)
|
|
||||||
return bitmap
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
package com.simplemobiletools.filepicker.extensions
|
|
||||||
|
|
||||||
fun String.getFilenameFromPath(): String {
|
|
||||||
return substring(lastIndexOf("/") + 1)
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
package com.simplemobiletools.filepicker.models
|
|
||||||
|
|
||||||
import android.graphics.BitmapFactory
|
|
||||||
import android.media.MediaMetadataRetriever
|
|
||||||
|
|
||||||
class FileDirItem(val path: String, val name: String, val isDirectory: Boolean, val children: Int, val size: Long) :
|
|
||||||
Comparable<FileDirItem> {
|
|
||||||
|
|
||||||
override fun compareTo(other: FileDirItem): Int {
|
|
||||||
if (isDirectory && !other.isDirectory) {
|
|
||||||
return -1
|
|
||||||
} else if (!isDirectory && other.isDirectory) {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
return name.toLowerCase().compareTo(other.name.toLowerCase())
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun toString(): String {
|
|
||||||
return "FileDirItem{name=$name, isDirectory=$isDirectory, path=$path, children=$children, size=$size}"
|
|
||||||
}
|
|
||||||
|
|
||||||
fun isGif() = name.toLowerCase().endsWith(".gif")
|
|
||||||
fun isVideo() = getMimeType().startsWith("video")
|
|
||||||
|
|
||||||
fun isImage(): Boolean {
|
|
||||||
val options = BitmapFactory.Options()
|
|
||||||
options.inJustDecodeBounds = true
|
|
||||||
BitmapFactory.decodeFile(path, options)
|
|
||||||
return options.outWidth != -1 && options.outHeight != -1
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getMimeType(): String {
|
|
||||||
try {
|
|
||||||
val retriever = MediaMetadataRetriever()
|
|
||||||
retriever.setDataSource(path)
|
|
||||||
return retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)
|
|
||||||
} catch (ignored: Exception) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,162 +0,0 @@
|
||||||
package com.simplemobiletools.filepicker.views
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.graphics.Point
|
|
||||||
import android.os.Environment
|
|
||||||
import android.util.AttributeSet
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.WindowManager
|
|
||||||
import android.widget.LinearLayout
|
|
||||||
import com.simplemobiletools.filepicker.R
|
|
||||||
import com.simplemobiletools.filepicker.models.FileDirItem
|
|
||||||
import kotlinx.android.synthetic.main.smtfp_breadcrumb_item.view.*
|
|
||||||
|
|
||||||
class Breadcrumbs(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs), View.OnClickListener {
|
|
||||||
private var mDeviceWidth: Int = 0
|
|
||||||
|
|
||||||
private var mInflater: LayoutInflater? = null
|
|
||||||
private var mListener: BreadcrumbsListener? = null
|
|
||||||
|
|
||||||
init {
|
|
||||||
init(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun init(context: Context) {
|
|
||||||
mInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
|
||||||
val display = (context.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
|
|
||||||
val deviceDisplay = Point()
|
|
||||||
display.getSize(deviceDisplay)
|
|
||||||
mDeviceWidth = deviceDisplay.x
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setListener(listener: BreadcrumbsListener) {
|
|
||||||
mListener = listener
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
|
|
||||||
val childRight = measuredWidth - paddingRight
|
|
||||||
val childBottom = measuredHeight - paddingBottom
|
|
||||||
val childHeight = childBottom - paddingTop
|
|
||||||
|
|
||||||
val usableWidth = mDeviceWidth - paddingLeft - paddingRight
|
|
||||||
var maxHeight = 0
|
|
||||||
var curWidth: Int
|
|
||||||
var curHeight: Int
|
|
||||||
var curLeft = paddingLeft
|
|
||||||
var curTop = paddingTop
|
|
||||||
|
|
||||||
val cnt = childCount
|
|
||||||
for (i in 0..cnt - 1) {
|
|
||||||
val child = getChildAt(i)
|
|
||||||
|
|
||||||
child.measure(MeasureSpec.makeMeasureSpec(usableWidth, MeasureSpec.AT_MOST),
|
|
||||||
MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.AT_MOST))
|
|
||||||
curWidth = child.measuredWidth
|
|
||||||
curHeight = child.measuredHeight
|
|
||||||
|
|
||||||
if (curLeft + curWidth >= childRight) {
|
|
||||||
curLeft = paddingLeft
|
|
||||||
curTop += maxHeight
|
|
||||||
maxHeight = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
child.layout(curLeft, curTop, curLeft + curWidth, curTop + curHeight)
|
|
||||||
if (maxHeight < curHeight)
|
|
||||||
maxHeight = curHeight
|
|
||||||
|
|
||||||
curLeft += curWidth
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
|
||||||
val usableWidth = mDeviceWidth - paddingLeft - paddingRight
|
|
||||||
var width = 0
|
|
||||||
var rowHeight = 0
|
|
||||||
var lines = 1
|
|
||||||
|
|
||||||
val cnt = childCount
|
|
||||||
for (i in 0..cnt - 1) {
|
|
||||||
val child = getChildAt(i)
|
|
||||||
measureChild(child, widthMeasureSpec, heightMeasureSpec)
|
|
||||||
width += child.measuredWidth
|
|
||||||
rowHeight = child.measuredHeight
|
|
||||||
|
|
||||||
if (width / usableWidth > 0) {
|
|
||||||
lines++
|
|
||||||
width = child.measuredWidth
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val parentWidth = MeasureSpec.getSize(widthMeasureSpec)
|
|
||||||
val calculatedHeight = paddingTop + paddingBottom + rowHeight * lines
|
|
||||||
setMeasuredDimension(parentWidth, calculatedHeight)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setBreadcrumb(fullPath: String, showFullPath: Boolean) {
|
|
||||||
val basePath = Environment.getExternalStorageDirectory().toString()
|
|
||||||
var tempPath = fullPath
|
|
||||||
var currPath = basePath
|
|
||||||
if (!showFullPath) {
|
|
||||||
tempPath = fullPath.replace(basePath, context.getString(R.string.smtfp_initial_breadcrumb) + "/")
|
|
||||||
} else {
|
|
||||||
currPath = "/"
|
|
||||||
}
|
|
||||||
|
|
||||||
removeAllViewsInLayout()
|
|
||||||
val dirs = tempPath.split("/".toRegex()).dropLastWhile(String::isEmpty).toTypedArray()
|
|
||||||
for (i in dirs.indices) {
|
|
||||||
val dir = dirs[i]
|
|
||||||
if (i > 0) {
|
|
||||||
currPath += dir + "/"
|
|
||||||
} else if (showFullPath) {
|
|
||||||
addRootFolder()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dir.isEmpty())
|
|
||||||
continue
|
|
||||||
|
|
||||||
val item = FileDirItem(currPath, dir, true, 0, 0)
|
|
||||||
addBreadcrumb(item, i > 0 || showFullPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dirs.size == 0 && showFullPath) {
|
|
||||||
addRootFolder()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun addBreadcrumb(item: FileDirItem, addPrefix: Boolean) {
|
|
||||||
val view = mInflater!!.inflate(R.layout.smtfp_breadcrumb_item, null, false)
|
|
||||||
var textToAdd = item.name
|
|
||||||
if (addPrefix)
|
|
||||||
textToAdd = " -> " + textToAdd
|
|
||||||
|
|
||||||
view.breadcrumb_text.text = textToAdd
|
|
||||||
addView(view)
|
|
||||||
view.setOnClickListener(this)
|
|
||||||
|
|
||||||
view.tag = item
|
|
||||||
}
|
|
||||||
|
|
||||||
fun removeBreadcrumb() {
|
|
||||||
removeView(getChildAt(childCount - 1))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun addRootFolder() {
|
|
||||||
val item = FileDirItem("/", " / ", true, 0, 0)
|
|
||||||
addBreadcrumb(item, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val cnt = childCount
|
|
||||||
for (i in 0..cnt - 1) {
|
|
||||||
if (getChildAt(i) != null && getChildAt(i) == v) {
|
|
||||||
mListener?.breadcrumbClicked(i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interface BreadcrumbsListener {
|
|
||||||
fun breadcrumbClicked(id: Int)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item>
|
|
||||||
<selector>
|
|
||||||
<item
|
|
||||||
android:drawable="@color/smtfp_activated_item_foreground"
|
|
||||||
android:state_activated="true"/>
|
|
||||||
</selector>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<ripple android:color="@color/smtfp_pressed_item_foreground">
|
|
||||||
<item android:id="@android:id/mask">
|
|
||||||
<color android:color="@android:color/white"/>
|
|
||||||
</item>
|
|
||||||
</ripple>
|
|
||||||
</item>
|
|
||||||
</layer-list>
|
|
|
@ -1,5 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item android:drawable="@color/smtfp_pressed_item_foreground" android:state_pressed="true"/>
|
|
||||||
<item android:drawable="@color/smtfp_activated_item_foreground" android:state_activated="true"/>
|
|
||||||
</selector>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<TextView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/breadcrumb_text"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"/>
|
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/directory_picker_holder"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<com.simplemobiletools.filepicker.views.Breadcrumbs
|
|
||||||
android:id="@+id/directory_picker_breadcrumbs"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="@dimen/smtfp_activity_margin"/>
|
|
||||||
|
|
||||||
<ListView
|
|
||||||
android:id="@+id/directory_picker_list"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
|
@ -1,45 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FrameLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:foreground="@drawable/smtfp_selector">
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/item_holder"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingRight="@dimen/smtfp_activity_margin">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/item_icon"
|
|
||||||
android:layout_width="@dimen/smtfp_icon_size"
|
|
||||||
android:layout_height="@dimen/smtfp_icon_size"
|
|
||||||
android:paddingBottom="@dimen/smtfp_medium_margin"
|
|
||||||
android:paddingTop="@dimen/smtfp_medium_margin"
|
|
||||||
android:src="@mipmap/smtfp_directory"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/item_name"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignTop="@+id/item_icon"
|
|
||||||
android:layout_toRightOf="@+id/item_icon"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:maxLines="3"
|
|
||||||
android:paddingLeft="@dimen/smtfp_small_margin"
|
|
||||||
android:paddingTop="@dimen/smtfp_small_margin"
|
|
||||||
android:text="Directory"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/item_details"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@+id/item_name"
|
|
||||||
android:layout_toRightOf="@+id/item_icon"
|
|
||||||
android:paddingLeft="@dimen/smtfp_small_margin"
|
|
||||||
android:text="1 KB"
|
|
||||||
android:textSize="@dimen/smtfp_details_text_size"/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
</FrameLayout>
|
|
Before Width: | Height: | Size: 135 B |
Before Width: | Height: | Size: 153 B |
Before Width: | Height: | Size: 122 B |
Before Width: | Height: | Size: 133 B |
Before Width: | Height: | Size: 181 B |
Before Width: | Height: | Size: 206 B |
Before Width: | Height: | Size: 245 B |
Before Width: | Height: | Size: 283 B |
Before Width: | Height: | Size: 325 B |
Before Width: | Height: | Size: 372 B |
|
@ -1,11 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="smtfp_select_destination">Ziel auswählen</string>
|
|
||||||
<string name="smtfp_initial_breadcrumb">home</string>
|
|
||||||
<string name="smtfp_ok">OK</string>
|
|
||||||
<string name="smtfp_cancel">Abbrechen</string>
|
|
||||||
|
|
||||||
<plurals name="smtfp_items">
|
|
||||||
<item quantity="one">1 Datei/Ordner</item>
|
|
||||||
<item quantity="other">%1$d Dateien/Ordner</item>
|
|
||||||
</plurals>
|
|
||||||
</resources>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="smtfp_select_destination">Seleziona destinazione</string>
|
|
||||||
<string name="smtfp_initial_breadcrumb">home</string>
|
|
||||||
<string name="smtfp_ok">OK</string>
|
|
||||||
<string name="smtfp_cancel">Annulla</string>
|
|
||||||
|
|
||||||
<plurals name="smtfp_items">
|
|
||||||
<item quantity="one">1 elemento</item>
|
|
||||||
<item quantity="other">%1$d elementi</item>
|
|
||||||
</plurals>
|
|
||||||
</resources>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="smtfp_select_destination">宛先を選択</string>
|
|
||||||
<string name="smtfp_initial_breadcrumb">ホーム</string>
|
|
||||||
<string name="smtfp_ok">OK</string>
|
|
||||||
<string name="smtfp_cancel">Cancel</string>
|
|
||||||
|
|
||||||
<plurals name="smtfp_items">
|
|
||||||
<item quantity="one">1 アイテム</item>
|
|
||||||
<item quantity="other">%1$d アイテム</item>
|
|
||||||
</plurals>
|
|
||||||
</resources>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="smtfp_select_destination">Selecionar destino</string>
|
|
||||||
<string name="smtfp_initial_breadcrumb">início</string>
|
|
||||||
<string name="smtfp_ok">OK</string>
|
|
||||||
<string name="smtfp_cancel">Cancelar</string>
|
|
||||||
|
|
||||||
<plurals name="smtfp_items">
|
|
||||||
<item quantity="one">1 item</item>
|
|
||||||
<item quantity="other">%1$d itens</item>
|
|
||||||
</plurals>
|
|
||||||
</resources>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="smtfp_select_destination">Välj mål</string>
|
|
||||||
<string name="smtfp_initial_breadcrumb">home</string>
|
|
||||||
<string name="smtfp_ok">OK</string>
|
|
||||||
<string name="smtfp_cancel">Cancel</string>
|
|
||||||
|
|
||||||
<plurals name="smtfp_items">
|
|
||||||
<item quantity="one">1 objekt</item>
|
|
||||||
<item quantity="other">%1$d objekt</item>
|
|
||||||
</plurals>
|
|
||||||
</resources>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<color name="smtfp_thumbnail_grey">#33000000</color>
|
|
||||||
<color name="smtfp_pressed_item_foreground">#08000000</color>
|
|
||||||
<color name="smtfp_activated_item_foreground">#44888888</color>
|
|
||||||
</resources>
|
|
|
@ -1,9 +0,0 @@
|
||||||
<resources>
|
|
||||||
<dimen name="smtfp_activity_margin">16dp</dimen>
|
|
||||||
<dimen name="smtfp_small_margin">6dp</dimen>
|
|
||||||
<dimen name="smtfp_medium_margin">10dp</dimen>
|
|
||||||
<dimen name="smtfp_icon_size">48dp</dimen>
|
|
||||||
|
|
||||||
<dimen name="smtfp_details_text_size">12sp</dimen>
|
|
||||||
<dimen name="smtfp_normal_text_size">14sp</dimen>
|
|
||||||
</resources>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="smtfp_select_destination">Select destination</string>
|
|
||||||
<string name="smtfp_initial_breadcrumb">home</string>
|
|
||||||
<string name="smtfp_ok">OK</string>
|
|
||||||
<string name="smtfp_cancel">Cancel</string>
|
|
||||||
|
|
||||||
<plurals name="smtfp_items">
|
|
||||||
<item quantity="one">1 item</item>
|
|
||||||
<item quantity="other">%1$d items</item>
|
|
||||||
</plurals>
|
|
||||||
</resources>
|
|
|
@ -1 +1 @@
|
||||||
include ':app', ':library'
|
include ':app'
|
||||||
|
|