From 852c0399e9cdcdb53ca01b9f4574b8b733cd6e0e Mon Sep 17 00:00:00 2001 From: gee12 Date: Sun, 26 Jan 2020 12:08:40 +0300 Subject: [PATCH 01/12] Add russian translate; Move string constants to string.xml; Increment SDK version to 28 --- folderpicker/build.gradle | 6 ++-- .../java/lib/folderpicker/FolderPicker.java | 34 +++++++++++-------- .../src/main/res/values-ru/strings.xml | 15 ++++++++ folderpicker/src/main/res/values/strings.xml | 6 ++++ 4 files changed, 43 insertions(+), 18 deletions(-) create mode 100644 folderpicker/src/main/res/values-ru/strings.xml diff --git a/folderpicker/build.gradle b/folderpicker/build.gradle index d775d4b..ee4a1fb 100644 --- a/folderpicker/build.gradle +++ b/folderpicker/build.gradle @@ -25,12 +25,12 @@ ext { } android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 28 + buildToolsVersion "28.0.3" defaultConfig { minSdkVersion 9 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 4 versionName "2.4" diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index c5d1a21..8f691fb 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -20,6 +20,10 @@ public class FolderPicker extends Activity { + public static final String EXTRA_DATA = "data"; + public static final String EXTRA_TITLE = "title"; + public static final String EXTRA_LOCATION = "location"; + public static final String EXTRA_PICK_FILES = "pickFiles"; //Folders and Files have separate lists because we show all folders first then files ArrayList folderAndFileList; ArrayList foldersList; @@ -38,7 +42,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.fp_main_layout); if (!isExternalStorageReadable()) { - Toast.makeText(this, "Storage access permission not given", Toast.LENGTH_LONG).show(); + Toast.makeText(this, getString(R.string.no_access_to_storage), Toast.LENGTH_LONG).show(); finish(); } @@ -48,15 +52,15 @@ protected void onCreate(Bundle savedInstanceState) { try { receivedIntent = getIntent(); - if (receivedIntent.hasExtra("title")) { - String receivedTitle = receivedIntent.getExtras().getString("title"); + if (receivedIntent.hasExtra(EXTRA_TITLE)) { + String receivedTitle = receivedIntent.getStringExtra(EXTRA_TITLE); if (receivedTitle != null) { tv_title.setText(receivedTitle); } } - if (receivedIntent.hasExtra("location")) { - String reqLocation = receivedIntent.getExtras().getString("location"); + if (receivedIntent.hasExtra(EXTRA_LOCATION)) { + String reqLocation = receivedIntent.getStringExtra(EXTRA_LOCATION); if (reqLocation != null) { File requestedFolder = new File(reqLocation); if (requestedFolder.exists()) @@ -64,8 +68,8 @@ protected void onCreate(Bundle savedInstanceState) { } } - if (receivedIntent.hasExtra("pickFiles")) { - pickFiles = receivedIntent.getExtras().getBoolean("pickFiles"); + if (receivedIntent.hasExtra(EXTRA_PICK_FILES)) { + pickFiles = receivedIntent.getBooleanExtra(EXTRA_PICK_FILES, false); if (pickFiles) { findViewById(R.id.fp_btn_select).setVisibility(View.GONE); findViewById(R.id.fp_btn_new).setVisibility(View.GONE); @@ -98,7 +102,7 @@ void loadLists(String location) { if (!folder.isDirectory()) exit(); - tv_location.setText("Location : " + folder.getAbsolutePath()); + tv_location.setText(String.format(getString(R.string.location_mask), folder.getAbsolutePath())); File[] files = folder.listFiles(); foldersList = new ArrayList<>(); @@ -168,7 +172,7 @@ void listClick(int position) { if (pickFiles && !folderAndFileList.get(position).isFolder()) { String data = location + File.separator + folderAndFileList.get(position).getName(); - receivedIntent.putExtra("data", data); + receivedIntent.putExtra(EXTRA_DATA, data); setResult(RESULT_OK, receivedIntent); finish(); } else { @@ -210,7 +214,7 @@ void createNewFolder(String filename) { } catch (Exception e) { e.printStackTrace(); - Toast.makeText(this, "Error:" + e.toString(), Toast.LENGTH_LONG) + Toast.makeText(this, String.format(getString(R.string.error_string_mask), e.toString()), Toast.LENGTH_LONG) .show(); } @@ -218,19 +222,19 @@ void createNewFolder(String filename) { public void newFolderDialog(View v) { AlertDialog dialog = new AlertDialog.Builder(this).create(); - dialog.setTitle("Enter Folder Name"); + dialog.setTitle(getString(R.string.enter_folder_name)); final EditText et = new EditText(this); dialog.setView(et); - dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Create", + dialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.create), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { createNewFolder(et.getText().toString()); } }); - dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", + dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { @@ -246,9 +250,9 @@ public void onClick(DialogInterface arg0, int arg1) { public void select(View v) { if (pickFiles) { - Toast.makeText(this, "You have to select a file", Toast.LENGTH_LONG).show(); + Toast.makeText(this, getString(R.string.select_file), Toast.LENGTH_LONG).show(); } else if (receivedIntent != null) { - receivedIntent.putExtra("data", location); + receivedIntent.putExtra(EXTRA_DATA, location); setResult(RESULT_OK, receivedIntent); finish(); } diff --git a/folderpicker/src/main/res/values-ru/strings.xml b/folderpicker/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000..600c3b7 --- /dev/null +++ b/folderpicker/src/main/res/values-ru/strings.xml @@ -0,0 +1,15 @@ + + + Отмена + Расположение + Создать + Выбрать + Выше + Выбрать каталог + Введите имя каталога + Создать + Выберите файл + Нет доступа к хранилищу + Путь: %s + Ошибка: %s + \ No newline at end of file diff --git a/folderpicker/src/main/res/values/strings.xml b/folderpicker/src/main/res/values/strings.xml index ada2cdd..ff37961 100644 --- a/folderpicker/src/main/res/values/strings.xml +++ b/folderpicker/src/main/res/values/strings.xml @@ -7,4 +7,10 @@ Select Folder Location Allow permissions to view files + Enter Folder Name + Create + You have to select a file + Storage access permission not given + Location: %s + Error: %s From a72f3a11a92ff8527b7751e3b5c96df2775b81e7 Mon Sep 17 00:00:00 2001 From: gee12 Date: Wed, 24 Jun 2020 13:00:26 +0300 Subject: [PATCH 02/12] Small fixes. --- folderpicker/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/folderpicker/src/main/res/values/strings.xml b/folderpicker/src/main/res/values/strings.xml index ff37961..89b6c85 100644 --- a/folderpicker/src/main/res/values/strings.xml +++ b/folderpicker/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - Folder Picker + Folder Picker Up New Select From e1da7322cbf12bc7978a78b08df994dd35736ca5 Mon Sep 17 00:00:00 2001 From: gee12 Date: Wed, 2 Sep 2020 20:21:07 +0300 Subject: [PATCH 03/12] Refactoring in FolderAdapter. --- .../java/lib/folderpicker/FolderAdapter.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderAdapter.java b/folderpicker/src/main/java/lib/folderpicker/FolderAdapter.java index 97aee2d..07f9f6a 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderAdapter.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderAdapter.java @@ -1,6 +1,6 @@ package lib.folderpicker; -import android.app.Activity; +import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -12,35 +12,43 @@ public class FolderAdapter extends ArrayAdapter { - Activity context; - ArrayList dataList; + /** + * + */ + private class FileViewHolder { + ImageView iconView; + TextView nameView; + } - public FolderAdapter(Activity context, ArrayList dataList) { + private LayoutInflater mInflater; + private Context mContext; + private ArrayList dataList; + public FolderAdapter(Context context, ArrayList dataList) { super(context, R.layout.fp_filerow, dataList); - this.context = context; + this.mContext = context; + this.mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.dataList = dataList; } @Override public View getView(int position, View convertView, ViewGroup parent) { - LayoutInflater inflater = context.getLayoutInflater(); - convertView = inflater.inflate(R.layout.fp_filerow, parent, false); - - ImageView imageView = (ImageView) convertView.findViewById(R.id.fp_iv_icon); - TextView name = (TextView) convertView.findViewById(R.id.fp_tv_name); - - if( dataList.get(position).isFolder() ) - { - imageView.setImageResource( R.drawable.fp_folder); - } - else - { - imageView.setImageResource( R.drawable.fp_file); + FileViewHolder viewHolder; + if (convertView == null) { + viewHolder = new FileViewHolder(); + convertView = mInflater.inflate(R.layout.fp_filerow, null); + viewHolder.iconView = convertView.findViewById(R.id.fp_iv_icon); + viewHolder.nameView = convertView.findViewById(R.id.fp_tv_name); + convertView.setTag(viewHolder); + } else { + viewHolder = (FileViewHolder) convertView.getTag(); } - name.setText( dataList.get(position).getName() ); + FilePojo item = dataList.get(position); + int iconRes = (item.isFolder()) ? R.drawable.fp_folder : R.drawable.fp_file; + viewHolder.iconView.setImageResource(iconRes); + viewHolder.nameView.setText(item.getName()); return convertView; } From 92d218b66a1c7da201b5ed468abb29a068e5deaf Mon Sep 17 00:00:00 2001 From: gee12 Date: Wed, 2 Sep 2020 20:54:06 +0300 Subject: [PATCH 04/12] Small changes and refactoring. --- .../java/lib/folderpicker/FolderPicker.java | 161 ++++++++---------- .../main/res/layout/dialog_folder_name.xml | 17 ++ folderpicker/src/main/res/values/strings.xml | 4 +- 3 files changed, 90 insertions(+), 92 deletions(-) create mode 100644 folderpicker/src/main/res/layout/dialog_folder_name.xml diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index 8f691fb..cf52cfd 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.os.Bundle; import android.os.Environment; +import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; @@ -20,21 +21,28 @@ public class FolderPicker extends Activity { + Comparator comparatorAscending = new Comparator() { + @Override + public int compare(FilePojo f1, FilePojo f2) { + return f1.getName().compareTo(f2.getName()); + } + }; + public static final String EXTRA_DATA = "data"; public static final String EXTRA_TITLE = "title"; public static final String EXTRA_LOCATION = "location"; public static final String EXTRA_PICK_FILES = "pickFiles"; //Folders and Files have separate lists because we show all folders first then files - ArrayList folderAndFileList; - ArrayList foldersList; - ArrayList filesList; + ArrayList mFolderAndFileList; + ArrayList mFoldersList; + ArrayList mFilesList; - TextView tv_title; - TextView tv_location; + TextView mTvTitle; + TextView mTvLocation; - String location = Environment.getExternalStorageDirectory().getAbsolutePath(); - boolean pickFiles; - Intent receivedIntent; + String mLocation = Environment.getExternalStorageDirectory().getAbsolutePath(); + boolean mPickFiles; + Intent mReceivedIntent; @Override protected void onCreate(Bundle savedInstanceState) { @@ -46,31 +54,31 @@ protected void onCreate(Bundle savedInstanceState) { finish(); } - tv_title = (TextView) findViewById(R.id.fp_tv_title); - tv_location = (TextView) findViewById(R.id.fp_tv_location); + mTvTitle = findViewById(R.id.fp_tv_title); + mTvLocation = findViewById(R.id.fp_tv_location); try { - receivedIntent = getIntent(); + mReceivedIntent = getIntent(); - if (receivedIntent.hasExtra(EXTRA_TITLE)) { - String receivedTitle = receivedIntent.getStringExtra(EXTRA_TITLE); + if (mReceivedIntent.hasExtra(EXTRA_TITLE)) { + String receivedTitle = mReceivedIntent.getStringExtra(EXTRA_TITLE); if (receivedTitle != null) { - tv_title.setText(receivedTitle); + mTvTitle.setText(receivedTitle); } } - if (receivedIntent.hasExtra(EXTRA_LOCATION)) { - String reqLocation = receivedIntent.getStringExtra(EXTRA_LOCATION); + if (mReceivedIntent.hasExtra(EXTRA_LOCATION)) { + String reqLocation = mReceivedIntent.getStringExtra(EXTRA_LOCATION); if (reqLocation != null) { File requestedFolder = new File(reqLocation); if (requestedFolder.exists()) - location = reqLocation; + mLocation = reqLocation; } } - if (receivedIntent.hasExtra(EXTRA_PICK_FILES)) { - pickFiles = receivedIntent.getBooleanExtra(EXTRA_PICK_FILES, false); - if (pickFiles) { + if (mReceivedIntent.hasExtra(EXTRA_PICK_FILES)) { + mPickFiles = mReceivedIntent.getBooleanExtra(EXTRA_PICK_FILES, false); + if (mPickFiles) { findViewById(R.id.fp_btn_select).setVisibility(View.GONE); findViewById(R.id.fp_btn_new).setVisibility(View.GONE); } @@ -80,8 +88,7 @@ protected void onCreate(Bundle savedInstanceState) { e.printStackTrace(); } - loadLists(location); - + loadLists(mLocation); } /* Checks if external storage is available to at least read */ @@ -96,37 +103,36 @@ boolean isExternalStorageReadable() { void loadLists(String location) { try { - File folder = new File(location); if (!folder.isDirectory()) exit(); - tv_location.setText(String.format(getString(R.string.location_mask), folder.getAbsolutePath())); + mTvLocation.setText(String.format(getString(R.string.location_mask), folder.getAbsolutePath())); File[] files = folder.listFiles(); - foldersList = new ArrayList<>(); - filesList = new ArrayList<>(); + mFoldersList = new ArrayList<>(); + mFilesList = new ArrayList<>(); for (File currentFile : files) { if (currentFile.isDirectory()) { FilePojo filePojo = new FilePojo(currentFile.getName(), true); - foldersList.add(filePojo); + mFoldersList.add(filePojo); } else { FilePojo filePojo = new FilePojo(currentFile.getName(), false); - filesList.add(filePojo); + mFilesList.add(filePojo); } } // sort & add to final List - as we show folders first add folders first to the final list - Collections.sort(foldersList, comparatorAscending); - folderAndFileList = new ArrayList<>(); - folderAndFileList.addAll(foldersList); + Collections.sort(mFoldersList, comparatorAscending); + mFolderAndFileList = new ArrayList<>(); + mFolderAndFileList.addAll(mFoldersList); //if we have to show files, then add files also to the final list - if (pickFiles) { - Collections.sort( filesList, comparatorAscending ); - folderAndFileList.addAll(filesList); + if (mPickFiles) { + Collections.sort(mFilesList, comparatorAscending ); + mFolderAndFileList.addAll(mFilesList); } showList(); @@ -135,21 +141,11 @@ void loadLists(String location) { e.printStackTrace(); } - } // load List - - - Comparator comparatorAscending = new Comparator() { - @Override - public int compare(FilePojo f1, FilePojo f2) { - return f1.getName().compareTo(f2.getName()); - } - }; - + } void showList() { - try { - FolderAdapter FolderAdapter = new FolderAdapter(this, folderAndFileList); + FolderAdapter FolderAdapter = new FolderAdapter(this, mFolderAndFileList); ListView listView = (ListView) findViewById(R.id.fp_listView); listView.setAdapter(FolderAdapter); @@ -160,26 +156,22 @@ public void onItemClick(AdapterView parent, View view, listClick(position); } }); - } catch (Exception e) { e.printStackTrace(); } - } void listClick(int position) { - - if (pickFiles && !folderAndFileList.get(position).isFolder()) { - String data = location + File.separator + folderAndFileList.get(position).getName(); - receivedIntent.putExtra(EXTRA_DATA, data); - setResult(RESULT_OK, receivedIntent); + if (mPickFiles && !mFolderAndFileList.get(position).isFolder()) { + String data = mLocation + File.separator + mFolderAndFileList.get(position).getName(); + mReceivedIntent.putExtra(EXTRA_DATA, data); + setResult(RESULT_OK, mReceivedIntent); finish(); } else { - location = location + File.separator + folderAndFileList.get(position).getName(); - loadLists(location); + mLocation = mLocation + File.separator + mFolderAndFileList.get(position).getName(); + loadLists(mLocation); } - } @Override @@ -188,45 +180,44 @@ public void onBackPressed(){ } public void goBack(View v) { - - if (location != null && !location.equals("") && !location.equals("/")) { - int start = location.lastIndexOf('/'); - String newLocation = location.substring(0, start); - location = newLocation; - loadLists(location); - }else{ + if (mLocation != null && !mLocation.equals("") && !mLocation.equals("/")) { + int start = mLocation.lastIndexOf('/'); + String newLocation = mLocation.substring(0, start); + mLocation = newLocation; + loadLists(mLocation); + } else { exit(); } - } - void exit(){ - setResult(RESULT_CANCELED, receivedIntent); + void exit() { + setResult(RESULT_CANCELED, mReceivedIntent); finish(); } void createNewFolder(String filename) { try { - - File file = new File(location + File.separator + filename); + File file = new File(mLocation + File.separator + filename); file.mkdirs(); - loadLists(location); + loadLists(mLocation); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, String.format(getString(R.string.error_string_mask), e.toString()), Toast.LENGTH_LONG) .show(); } - } public void newFolderDialog(View v) { - AlertDialog dialog = new AlertDialog.Builder(this).create(); - dialog.setTitle(getString(R.string.enter_folder_name)); + LayoutInflater inflater = LayoutInflater.from(this); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + View view = inflater.inflate(R.layout.dialog_folder_name, null); + builder.setView(view); + builder.setTitle(getString(R.string.enter_folder_name)); - final EditText et = new EditText(this); - dialog.setView(et); + final EditText et = view.findViewById(R.id.edit_text); + final AlertDialog dialog = builder.create(); dialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.create), new DialogInterface.OnClickListener() { @Override @@ -234,34 +225,24 @@ public void onClick(DialogInterface arg0, int arg1) { createNewFolder(et.getText().toString()); } }); - dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface arg0, int arg1) { - - } - }); + dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), (DialogInterface.OnClickListener)null); dialog.show(); - } - public void select(View v) { - if (pickFiles) { + if (mPickFiles) { Toast.makeText(this, getString(R.string.select_file), Toast.LENGTH_LONG).show(); - } else if (receivedIntent != null) { - receivedIntent.putExtra(EXTRA_DATA, location); - setResult(RESULT_OK, receivedIntent); + } else if (mReceivedIntent != null) { + mReceivedIntent.putExtra(EXTRA_DATA, mLocation); + setResult(RESULT_OK, mReceivedIntent); finish(); } } - public void cancel(View v) { exit(); } - -} // class +} diff --git a/folderpicker/src/main/res/layout/dialog_folder_name.xml b/folderpicker/src/main/res/layout/dialog_folder_name.xml new file mode 100644 index 0000000..7e8d6d4 --- /dev/null +++ b/folderpicker/src/main/res/layout/dialog_folder_name.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/folderpicker/src/main/res/values/strings.xml b/folderpicker/src/main/res/values/strings.xml index 89b6c85..a161572 100644 --- a/folderpicker/src/main/res/values/strings.xml +++ b/folderpicker/src/main/res/values/strings.xml @@ -4,10 +4,10 @@ New Select Cancel - Select Folder + Select folder Location Allow permissions to view files - Enter Folder Name + Enter folder name Create You have to select a file Storage access permission not given From cbd9676063e3712549add0c84bba17ce2dbff3eb Mon Sep 17 00:00:00 2001 From: gee12 Date: Sun, 15 Nov 2020 18:32:29 +0300 Subject: [PATCH 05/12] Dixed the name of the created directory in folderChooser - as a password. --- folderpicker/src/main/res/layout/dialog_folder_name.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/folderpicker/src/main/res/layout/dialog_folder_name.xml b/folderpicker/src/main/res/layout/dialog_folder_name.xml index 7e8d6d4..e688c7b 100644 --- a/folderpicker/src/main/res/layout/dialog_folder_name.xml +++ b/folderpicker/src/main/res/layout/dialog_folder_name.xml @@ -10,8 +10,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/edit_text" - android:inputType="text|textPassword"> + android:inputType="text"> + + \ No newline at end of file From b98d172a290396a8423416e73f44aefca5795f59 Mon Sep 17 00:00:00 2001 From: gee12 Date: Sat, 5 Dec 2020 21:59:22 +0300 Subject: [PATCH 06/12] Added a command to manually enter the folder path in FolderPicker. --- .../java/lib/folderpicker/FolderPicker.java | 27 ++++++++++++++++ .../main/res/layout/dialog_edit_location.xml | 19 +++++++++++ .../src/main/res/layout/fp_main_layout.xml | 32 +++++++++++++++---- .../src/main/res/values-ru/strings.xml | 2 ++ folderpicker/src/main/res/values/strings.xml | 2 ++ 5 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 folderpicker/src/main/res/layout/dialog_edit_location.xml diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index cf52cfd..220bbdc 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -245,4 +245,31 @@ public void cancel(View v) { exit(); } + public void edit(View v) { + LayoutInflater inflater = LayoutInflater.from(this); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + View view = inflater.inflate(R.layout.dialog_edit_location, null); + builder.setView(view); + builder.setTitle(getString(R.string.edit_location)); + + final EditText et = view.findViewById(R.id.edit_text); + if (mLocation != null) { + et.setText(mLocation); + et.setSelection(mLocation.length()); + } + + final AlertDialog dialog = builder.create(); + dialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.ok), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + mLocation = et.getText().toString(); + loadLists(mLocation); + } + }); + dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), (DialogInterface.OnClickListener)null); + + dialog.show(); + } + } diff --git a/folderpicker/src/main/res/layout/dialog_edit_location.xml b/folderpicker/src/main/res/layout/dialog_edit_location.xml new file mode 100644 index 0000000..e688c7b --- /dev/null +++ b/folderpicker/src/main/res/layout/dialog_edit_location.xml @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/folderpicker/src/main/res/layout/fp_main_layout.xml b/folderpicker/src/main/res/layout/fp_main_layout.xml index 4574fea..30a7ae4 100644 --- a/folderpicker/src/main/res/layout/fp_main_layout.xml +++ b/folderpicker/src/main/res/layout/fp_main_layout.xml @@ -1,4 +1,4 @@ - - + @@ -105,7 +123,7 @@ - + android:layout_height="wrap_content" + android:layout_below="@id/fp_buttonsLayout" /> - + diff --git a/folderpicker/src/main/res/values-ru/strings.xml b/folderpicker/src/main/res/values-ru/strings.xml index 600c3b7..553dd73 100644 --- a/folderpicker/src/main/res/values-ru/strings.xml +++ b/folderpicker/src/main/res/values-ru/strings.xml @@ -7,7 +7,9 @@ Выше Выбрать каталог Введите имя каталога + Введите путь Создать + Ok Выберите файл Нет доступа к хранилищу Путь: %s diff --git a/folderpicker/src/main/res/values/strings.xml b/folderpicker/src/main/res/values/strings.xml index a161572..a86381b 100644 --- a/folderpicker/src/main/res/values/strings.xml +++ b/folderpicker/src/main/res/values/strings.xml @@ -8,7 +8,9 @@ Location Allow permissions to view files Enter folder name + Edit location Create + Ok You have to select a file Storage access permission not given Location: %s From 6d4cfbed09ca5896612d12138d2c5802e339c468 Mon Sep 17 00:00:00 2001 From: gee12 Date: Wed, 23 Dec 2020 21:08:51 +0300 Subject: [PATCH 07/12] Add description; Add selection mode for only empty folder. --- .../java/lib/folderpicker/FolderPicker.java | 42 ++++++++++++++---- .../src/main/res/layout/fp_main_layout.xml | 43 +++++++++++++++++-- .../src/main/res/values-ru/strings.xml | 2 + folderpicker/src/main/res/values/strings.xml | 2 + 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index 220bbdc..08ea4c5 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -30,19 +30,21 @@ public int compare(FilePojo f1, FilePojo f2) { public static final String EXTRA_DATA = "data"; public static final String EXTRA_TITLE = "title"; + public static final String EXTRA_DESCRIPTION = "desc"; public static final String EXTRA_LOCATION = "location"; public static final String EXTRA_PICK_FILES = "pickFiles"; + public static final String EXTRA_EMPTY_FOLDER = "emptyFolder"; //Folders and Files have separate lists because we show all folders first then files ArrayList mFolderAndFileList; ArrayList mFoldersList; ArrayList mFilesList; - TextView mTvTitle; TextView mTvLocation; String mLocation = Environment.getExternalStorageDirectory().getAbsolutePath(); boolean mPickFiles; Intent mReceivedIntent; + boolean mEmptyFolder; @Override protected void onCreate(Bundle savedInstanceState) { @@ -54,25 +56,31 @@ protected void onCreate(Bundle savedInstanceState) { finish(); } - mTvTitle = findViewById(R.id.fp_tv_title); mTvLocation = findViewById(R.id.fp_tv_location); try { mReceivedIntent = getIntent(); if (mReceivedIntent.hasExtra(EXTRA_TITLE)) { - String receivedTitle = mReceivedIntent.getStringExtra(EXTRA_TITLE); - if (receivedTitle != null) { - mTvTitle.setText(receivedTitle); + String title = mReceivedIntent.getStringExtra(EXTRA_TITLE); + if (title != null) { + ((TextView)findViewById(R.id.fp_tv_title)).setText(title); + } + } + + if (mReceivedIntent.hasExtra(EXTRA_DESCRIPTION)) { + String desc = mReceivedIntent.getStringExtra(EXTRA_DESCRIPTION); + if (desc != null) { + ((TextView)findViewById(R.id.fp_tv_desc)).setText(desc); } } if (mReceivedIntent.hasExtra(EXTRA_LOCATION)) { - String reqLocation = mReceivedIntent.getStringExtra(EXTRA_LOCATION); - if (reqLocation != null) { - File requestedFolder = new File(reqLocation); + String location = mReceivedIntent.getStringExtra(EXTRA_LOCATION); + if (location != null) { + File requestedFolder = new File(location); if (requestedFolder.exists()) - mLocation = reqLocation; + mLocation = location; } } @@ -84,6 +92,13 @@ protected void onCreate(Bundle savedInstanceState) { } } + if (mReceivedIntent.hasExtra(EXTRA_EMPTY_FOLDER)) { + mEmptyFolder = mReceivedIntent.getBooleanExtra(EXTRA_EMPTY_FOLDER, false); + if (mEmptyFolder) { + findViewById(R.id.fp_tv_empty_dir).setVisibility(View.VISIBLE); + } + } + } catch (Exception e) { e.printStackTrace(); } @@ -235,6 +250,9 @@ public void select(View v) { if (mPickFiles) { Toast.makeText(this, getString(R.string.select_file), Toast.LENGTH_LONG).show(); } else if (mReceivedIntent != null) { + if (mEmptyFolder && !isDirEmpty(mLocation)) { + Toast.makeText(this, getString(R.string.select_empty_folder), Toast.LENGTH_LONG).show(); + } mReceivedIntent.putExtra(EXTRA_DATA, mLocation); setResult(RESULT_OK, mReceivedIntent); finish(); @@ -272,4 +290,10 @@ public void onClick(DialogInterface arg0, int arg1) { dialog.show(); } + boolean isDirEmpty(String path) { + File dir = new File(path); + File[] childs = dir.listFiles(); + return (childs == null || childs.length == 0); + } + } diff --git a/folderpicker/src/main/res/layout/fp_main_layout.xml b/folderpicker/src/main/res/layout/fp_main_layout.xml index 30a7ae4..e8bd703 100644 --- a/folderpicker/src/main/res/layout/fp_main_layout.xml +++ b/folderpicker/src/main/res/layout/fp_main_layout.xml @@ -14,13 +14,50 @@ android:textAppearance="?android:textAppearanceLarge" android:textColor="#333" /> + + + + @@ -39,7 +76,7 @@ android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" - android:layout_below="@id/fp_tv_title" + android:layout_below="@id/fp_tv_empty_dir" android:padding="5dp" android:background="@android:color/transparent" android:onClick="edit" diff --git a/folderpicker/src/main/res/values-ru/strings.xml b/folderpicker/src/main/res/values-ru/strings.xml index 553dd73..5981e9c 100644 --- a/folderpicker/src/main/res/values-ru/strings.xml +++ b/folderpicker/src/main/res/values-ru/strings.xml @@ -11,7 +11,9 @@ Создать Ok Выберите файл + Выберите пустой каталог Нет доступа к хранилищу Путь: %s Ошибка: %s + Выберите пустой каталог \ No newline at end of file diff --git a/folderpicker/src/main/res/values/strings.xml b/folderpicker/src/main/res/values/strings.xml index a86381b..6a834ba 100644 --- a/folderpicker/src/main/res/values/strings.xml +++ b/folderpicker/src/main/res/values/strings.xml @@ -12,7 +12,9 @@ Create Ok You have to select a file + You have to select an empty folder Storage access permission not given Location: %s Error: %s + Select an empty directory From 9218b3333680fb7654f35698b49f63756a560f19 Mon Sep 17 00:00:00 2001 From: gee12 Date: Sun, 27 Dec 2020 15:32:54 +0300 Subject: [PATCH 08/12] Small fixes. --- .../src/main/java/lib/folderpicker/FolderPicker.java | 4 +++- folderpicker/src/main/res/layout/fp_main_layout.xml | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index 08ea4c5..116a907 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -71,7 +71,9 @@ protected void onCreate(Bundle savedInstanceState) { if (mReceivedIntent.hasExtra(EXTRA_DESCRIPTION)) { String desc = mReceivedIntent.getStringExtra(EXTRA_DESCRIPTION); if (desc != null) { - ((TextView)findViewById(R.id.fp_tv_desc)).setText(desc); + TextView textView = findViewById(R.id.fp_tv_desc); + textView.setVisibility(View.VISIBLE); + textView.setText(desc); } } diff --git a/folderpicker/src/main/res/layout/fp_main_layout.xml b/folderpicker/src/main/res/layout/fp_main_layout.xml index e8bd703..88f66f5 100644 --- a/folderpicker/src/main/res/layout/fp_main_layout.xml +++ b/folderpicker/src/main/res/layout/fp_main_layout.xml @@ -23,14 +23,14 @@ android:layout_marginStart="5dp" android:layout_marginRight="5dp" android:layout_marginEnd="5dp" - android:paddingTop="10dp" - android:paddingBottom="10dp" + android:paddingTop="5dp" + android:paddingBottom="5dp" android:paddingLeft="5dp" android:paddingRight="5dp" android:text="Description" android:textAppearance="?android:attr/textAppearanceSmall" android:visibility="gone" - android:textColor="#333" /> + android:textColor="#777" /> Date: Sun, 3 Jan 2021 11:22:29 +0300 Subject: [PATCH 09/12] Some fixes with empty folder to the new storage. --- .../src/main/java/lib/folderpicker/FolderPicker.java | 1 + folderpicker/src/main/res/layout/fp_main_layout.xml | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index 116a907..ae34053 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -254,6 +254,7 @@ public void select(View v) { } else if (mReceivedIntent != null) { if (mEmptyFolder && !isDirEmpty(mLocation)) { Toast.makeText(this, getString(R.string.select_empty_folder), Toast.LENGTH_LONG).show(); + return; } mReceivedIntent.putExtra(EXTRA_DATA, mLocation); setResult(RESULT_OK, mReceivedIntent); diff --git a/folderpicker/src/main/res/layout/fp_main_layout.xml b/folderpicker/src/main/res/layout/fp_main_layout.xml index 88f66f5..1d48c49 100644 --- a/folderpicker/src/main/res/layout/fp_main_layout.xml +++ b/folderpicker/src/main/res/layout/fp_main_layout.xml @@ -30,7 +30,7 @@ android:text="Description" android:textAppearance="?android:attr/textAppearanceSmall" android:visibility="gone" - android:textColor="#777" /> + android:textColor="#999" /> + android:textColor="#999" /> Date: Mon, 4 Jan 2021 12:15:26 +0300 Subject: [PATCH 10/12] Add some checks and notifications. --- .../main/java/lib/folderpicker/FolderPicker.java | 13 ++++++++++--- folderpicker/src/main/res/values-ru/strings.xml | 2 ++ folderpicker/src/main/res/values/strings.xml | 3 ++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index ae34053..cfde80d 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -122,8 +122,15 @@ void loadLists(String location) { try { File folder = new File(location); - if (!folder.isDirectory()) - exit(); + if (!folder.exists()) { + Toast.makeText(this, R.string.dir_is_not_exist, Toast.LENGTH_LONG).show(); + return; + } + + if (!folder.isDirectory()) { + Toast.makeText(this, R.string.is_not_dir, Toast.LENGTH_LONG).show(); + return; + } mTvLocation.setText(String.format(getString(R.string.location_mask), folder.getAbsolutePath())); File[] files = folder.listFiles(); @@ -163,7 +170,7 @@ void loadLists(String location) { void showList() { try { FolderAdapter FolderAdapter = new FolderAdapter(this, mFolderAndFileList); - ListView listView = (ListView) findViewById(R.id.fp_listView); + ListView listView = findViewById(R.id.fp_listView); listView.setAdapter(FolderAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { diff --git a/folderpicker/src/main/res/values-ru/strings.xml b/folderpicker/src/main/res/values-ru/strings.xml index 5981e9c..a99164b 100644 --- a/folderpicker/src/main/res/values-ru/strings.xml +++ b/folderpicker/src/main/res/values-ru/strings.xml @@ -16,4 +16,6 @@ Путь: %s Ошибка: %s Выберите пустой каталог + Это не каталог + Каталог не существует \ No newline at end of file diff --git a/folderpicker/src/main/res/values/strings.xml b/folderpicker/src/main/res/values/strings.xml index 6a834ba..c8c033d 100644 --- a/folderpicker/src/main/res/values/strings.xml +++ b/folderpicker/src/main/res/values/strings.xml @@ -6,7 +6,6 @@ Cancel Select folder Location - Allow permissions to view files Enter folder name Edit location Create @@ -17,4 +16,6 @@ Location: %s Error: %s Select an empty directory + This is not a directory + Directory does not exist From 7720b2bc0d55e9ffd04b75050f1d581798f69805 Mon Sep 17 00:00:00 2001 From: gee12 Date: Mon, 4 Jan 2021 13:19:55 +0300 Subject: [PATCH 11/12] Some fixes, refactoring and comments. --- .../java/lib/folderpicker/FolderPicker.java | 165 +++++++++++++----- 1 file changed, 119 insertions(+), 46 deletions(-) diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index cfde80d..7764a44 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -41,7 +41,7 @@ public int compare(FilePojo f1, FilePojo f2) { TextView mTvLocation; - String mLocation = Environment.getExternalStorageDirectory().getAbsolutePath(); + String mLocation; boolean mPickFiles; Intent mReceivedIntent; boolean mEmptyFolder; @@ -56,6 +56,8 @@ protected void onCreate(Bundle savedInstanceState) { finish(); } + String location = Environment.getExternalStorageDirectory().getAbsolutePath(); + mTvLocation = findViewById(R.id.fp_tv_location); try { @@ -78,11 +80,11 @@ protected void onCreate(Bundle savedInstanceState) { } if (mReceivedIntent.hasExtra(EXTRA_LOCATION)) { - String location = mReceivedIntent.getStringExtra(EXTRA_LOCATION); - if (location != null) { - File requestedFolder = new File(location); - if (requestedFolder.exists()) - mLocation = location; + String newLocation = mReceivedIntent.getStringExtra(EXTRA_LOCATION); + if (newLocation != null) { + File folder = new File(newLocation); + if (folder.exists()) + location = newLocation; } } @@ -105,10 +107,12 @@ protected void onCreate(Bundle savedInstanceState) { e.printStackTrace(); } - loadLists(mLocation); + checkAndLoadLists(location); } - /* Checks if external storage is available to at least read */ + /** + * Checks if external storage is available to at least read + */ boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || @@ -118,19 +122,50 @@ boolean isExternalStorageReadable() { return false; } - void loadLists(String location) { - try { - File folder = new File(location); + boolean checkAndLoadLists(String location, boolean showToast) { + if (checkLocation(location, showToast)) { + mLocation = location; + loadLists(); + return true; + } + return false; + } + + boolean checkAndLoadLists(String location) { + return checkAndLoadLists(location, true); + } - if (!folder.exists()) { + /** + * Check location and load lists if location is correct. + * @param location + * @param showToast + * @return + */ + private boolean checkLocation(String location, boolean showToast) { + File folder = new File(location); + + if (!folder.exists()) { + if (showToast) { Toast.makeText(this, R.string.dir_is_not_exist, Toast.LENGTH_LONG).show(); - return; } + return false; + } - if (!folder.isDirectory()) { + if (!folder.isDirectory()) { + if (showToast) { Toast.makeText(this, R.string.is_not_dir, Toast.LENGTH_LONG).show(); - return; } + return false; + } + return true; + } + + /** + * Load lists and show. + */ + void loadLists() { + try { + File folder = new File(mLocation); mTvLocation.setText(String.format(getString(R.string.location_mask), folder.getAbsolutePath())); File[] files = folder.listFiles(); @@ -167,6 +202,9 @@ void loadLists(String location) { } + /** + * Show list of folders and files. + */ void showList() { try { FolderAdapter FolderAdapter = new FolderAdapter(this, mFolderAndFileList); @@ -185,7 +223,10 @@ public void onItemClick(AdapterView parent, View view, } } - + /** + * Click on the list item. + * @param position + */ void listClick(int position) { if (mPickFiles && !mFolderAndFileList.get(position).isFolder()) { String data = mLocation + File.separator + mFolderAndFileList.get(position).getName(); @@ -193,37 +234,21 @@ void listClick(int position) { setResult(RESULT_OK, mReceivedIntent); finish(); } else { - mLocation = mLocation + File.separator + mFolderAndFileList.get(position).getName(); - loadLists(mLocation); + String location = mLocation + File.separator + mFolderAndFileList.get(position).getName(); + checkAndLoadLists(location); +// checkAndloadLists(mLocation); } } - @Override - public void onBackPressed(){ - goBack(null); - } - - public void goBack(View v) { - if (mLocation != null && !mLocation.equals("") && !mLocation.equals("/")) { - int start = mLocation.lastIndexOf('/'); - String newLocation = mLocation.substring(0, start); - mLocation = newLocation; - loadLists(mLocation); - } else { - exit(); - } - } - - void exit() { - setResult(RESULT_CANCELED, mReceivedIntent); - finish(); - } - + /** + * Create new folder. + * @param filename + */ void createNewFolder(String filename) { try { File file = new File(mLocation + File.separator + filename); file.mkdirs(); - loadLists(mLocation); + checkAndLoadLists(mLocation); } catch (Exception e) { e.printStackTrace(); @@ -232,6 +257,10 @@ void createNewFolder(String filename) { } } + /** + * Show dialog fom enter new folder name; + * @param v + */ public void newFolderDialog(View v) { LayoutInflater inflater = LayoutInflater.from(this); AlertDialog.Builder builder = new AlertDialog.Builder(this); @@ -254,6 +283,10 @@ public void onClick(DialogInterface arg0, int arg1) { dialog.show(); } + /** + * Select the destination folder or file. + * @param v + */ public void select(View v) { if (mPickFiles) { @@ -269,10 +302,10 @@ public void select(View v) { } } - public void cancel(View v) { - exit(); - } - + /** + * Edit path manually. + * @param v + */ public void edit(View v) { LayoutInflater inflater = LayoutInflater.from(this); AlertDialog.Builder builder = new AlertDialog.Builder(this); @@ -291,8 +324,9 @@ public void edit(View v) { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { - mLocation = et.getText().toString(); - loadLists(mLocation); + String location = et.getText().toString(); +// loadLists(mLocation); + checkAndLoadLists(location); } }); dialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), (DialogInterface.OnClickListener)null); @@ -300,10 +334,49 @@ public void onClick(DialogInterface arg0, int arg1) { dialog.show(); } + /** + * Check if folder is empty. + * @param path + * @return + */ boolean isDirEmpty(String path) { File dir = new File(path); File[] childs = dir.listFiles(); return (childs == null || childs.length == 0); } + @Override + public void onBackPressed(){ + goBack(null); + } + + /** + * Load upper level path or exit. + * @param v + */ + public void goBack(View v) { + if (mLocation != null && !mLocation.equals("") && !mLocation.equals("/")) { + int start = mLocation.lastIndexOf('/'); + String newLocation = mLocation.substring(0, start); +// mLocation = newLocation; +// loadLists(newLocation); + if (!checkAndLoadLists(newLocation, false)) { + exit(); + } + } else { + exit(); + } + } + + public void cancel(View v) { + exit(); + } + + /** + * Set result and finish activity. + */ + void exit() { + setResult(RESULT_CANCELED, mReceivedIntent); + finish(); + } } From d85e79b697664cc081fef43dea431aa53a8e3b47 Mon Sep 17 00:00:00 2001 From: gee12 Date: Mon, 4 Jan 2021 15:01:17 +0300 Subject: [PATCH 12/12] Add Home button; Refactoring in layout. --- .../java/lib/folderpicker/FolderPicker.java | 5 ++ .../main/res/drawable/fp_ic_action_home.xml | 11 ++++ .../src/main/res/layout/fp_main_layout.xml | 60 ++++++------------- .../src/main/res/values-ru/strings.xml | 1 + folderpicker/src/main/res/values/strings.xml | 1 + folderpicker/src/main/res/values/styles.xml | 18 ++++++ 6 files changed, 53 insertions(+), 43 deletions(-) create mode 100644 folderpicker/src/main/res/drawable/fp_ic_action_home.xml create mode 100644 folderpicker/src/main/res/values/styles.xml diff --git a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java index 7764a44..c105f3c 100644 --- a/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java +++ b/folderpicker/src/main/java/lib/folderpicker/FolderPicker.java @@ -240,6 +240,11 @@ void listClick(int position) { } } + public void home(View v) { + String location = Environment.getExternalStorageDirectory().getAbsolutePath(); + checkAndLoadLists(location); + } + /** * Create new folder. * @param filename diff --git a/folderpicker/src/main/res/drawable/fp_ic_action_home.xml b/folderpicker/src/main/res/drawable/fp_ic_action_home.xml new file mode 100644 index 0000000..7c20db1 --- /dev/null +++ b/folderpicker/src/main/res/drawable/fp_ic_action_home.xml @@ -0,0 +1,11 @@ + + + diff --git a/folderpicker/src/main/res/layout/fp_main_layout.xml b/folderpicker/src/main/res/layout/fp_main_layout.xml index 1d48c49..cbfe58f 100644 --- a/folderpicker/src/main/res/layout/fp_main_layout.xml +++ b/folderpicker/src/main/res/layout/fp_main_layout.xml @@ -27,6 +27,7 @@ android:paddingBottom="5dp" android:paddingLeft="5dp" android:paddingRight="5dp" + android:gravity="center_horizontal" android:text="Description" android:textAppearance="?android:attr/textAppearanceSmall" android:visibility="gone" @@ -41,11 +42,11 @@ android:layout_marginStart="5dp" android:layout_marginRight="5dp" android:layout_marginEnd="5dp" - android:gravity="center_horizontal" android:paddingTop="5dp" android:paddingBottom="5dp" android:paddingLeft="5dp" android:paddingRight="5dp" + android:gravity="center_horizontal" android:text="@string/select_empty_dir" android:textAppearance="?android:attr/textAppearanceSmall" android:visibility="gone" @@ -92,68 +93,41 @@ android:padding="5sp"> + + + android:text="@string/up" /> + android:text="@string/neww" /> + android:text="@string/select" /> + android:text="@string/cancel" /> diff --git a/folderpicker/src/main/res/values-ru/strings.xml b/folderpicker/src/main/res/values-ru/strings.xml index a99164b..45fc538 100644 --- a/folderpicker/src/main/res/values-ru/strings.xml +++ b/folderpicker/src/main/res/values-ru/strings.xml @@ -4,6 +4,7 @@ Расположение Создать Выбрать + Домой Выше Выбрать каталог Введите имя каталога diff --git a/folderpicker/src/main/res/values/strings.xml b/folderpicker/src/main/res/values/strings.xml index c8c033d..c5016b5 100644 --- a/folderpicker/src/main/res/values/strings.xml +++ b/folderpicker/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ Folder Picker + Home Up New Select diff --git a/folderpicker/src/main/res/values/styles.xml b/folderpicker/src/main/res/values/styles.xml new file mode 100644 index 0000000..c8edbfc --- /dev/null +++ b/folderpicker/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file