From 00b4973e1a12e837ce03cf3ff4aed5d9c680e455 Mon Sep 17 00:00:00 2001 From: Vishal Date: Tue, 7 Mar 2017 13:19:50 +0530 Subject: [PATCH] FTP: Add custom path support --- .../fragments/FTPServerFragment.java | 60 +++++++++++++++++-- .../services/ftpservice/FTPService.java | 15 ++++- src/main/res/menu/ftp_server_menu.xml | 3 + src/main/res/values/strings.xml | 7 +++ 4 files changed, 78 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/amaze/filemanager/fragments/FTPServerFragment.java b/src/main/java/com/amaze/filemanager/fragments/FTPServerFragment.java index 418d10013..8bc920f9f 100644 --- a/src/main/java/com/amaze/filemanager/fragments/FTPServerFragment.java +++ b/src/main/java/com/amaze/filemanager/fragments/FTPServerFragment.java @@ -31,6 +31,8 @@ import com.amaze.filemanager.activities.MainActivity; import com.amaze.filemanager.services.ftpservice.FTPService; import com.amaze.filemanager.utils.theme.AppTheme; +import java.io.File; + /** * Created by yashwanthreddyg on 10-06-2016. */ @@ -113,21 +115,71 @@ public class FTPServerFragment extends Fragment { int portNumber = Integer.parseInt(name); if (portNumber < 1024) { Toast.makeText(getActivity(), R.string.ftp_port_change_error_invalid, Toast.LENGTH_SHORT) - .show(); + .show(); } else { FTPService.changeFTPServerPort(preferences, portNumber); Toast.makeText(getActivity(), R.string.ftp_port_change_success, Toast.LENGTH_SHORT) - .show(); + .show(); } } } }) - .positiveText("CHANGE") + .positiveText(getResources().getString(R.string.change).toUpperCase()) .negativeText(R.string.cancel) .build() .show(); - return true; + case R.id.ftp_path: + MaterialDialog.Builder dialogBuilder = new MaterialDialog.Builder(getActivity()); + dialogBuilder.title(getString(R.string.ftp_path)); + dialogBuilder.input(getString(R.string.ftp_path_hint), + FTPService.getDefaultPathFromPreferences(preferences), + false, new MaterialDialog.InputCallback() { + @Override + public void onInput(@NonNull MaterialDialog dialog, CharSequence input) { + + } + }); + dialogBuilder.onPositive(new MaterialDialog.SingleButtonCallback() { + @Override + public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { + + EditText editText = dialog.getInputEditText(); + if (editText != null) { + String path = editText.getText().toString(); + + File pathFile = new File(path); + if (pathFile.exists() && pathFile.isDirectory()) { + + FTPService.changeFTPServerPath(preferences, pathFile.getPath()); + Toast.makeText(getActivity(), R.string.ftp_path_change_success, + Toast.LENGTH_SHORT) + .show(); + } else { + // try to get parent + File pathParentFile = new File(pathFile.getParent()); + if (pathParentFile.exists() && pathParentFile.isDirectory()) { + + FTPService.changeFTPServerPath(preferences, pathParentFile.getPath()); + Toast.makeText(getActivity(), R.string.ftp_path_change_success, + Toast.LENGTH_SHORT) + .show(); + } else { + // don't have access, print error + + Toast.makeText(getActivity(), R.string.ftp_path_change_error_invalid, + Toast.LENGTH_SHORT) + .show(); + } + } + } + } + }); + + dialogBuilder.positiveText(getResources().getString(R.string.change).toUpperCase()) + .negativeText(R.string.cancel) + .build() + .show(); } return false; diff --git a/src/main/java/com/amaze/filemanager/services/ftpservice/FTPService.java b/src/main/java/com/amaze/filemanager/services/ftpservice/FTPService.java index d4adc09ef..c95dcd2f0 100644 --- a/src/main/java/com/amaze/filemanager/services/ftpservice/FTPService.java +++ b/src/main/java/com/amaze/filemanager/services/ftpservice/FTPService.java @@ -45,6 +45,8 @@ public class FTPService extends Service implements Runnable { public static final int DEFAULT_PORT = 2211; public static final String PORT_PREFERENCE_KEY = "ftpPort"; + public static final String KEY_PREFERENCE_PATH = "ftp_path"; + public static final String DEFAULT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath(); public static int getDefaultPortFromPreferences(SharedPreferences preferences) { try { @@ -57,13 +59,22 @@ public class FTPService extends Service implements Runnable { } } + public static String getDefaultPathFromPreferences(SharedPreferences preferences) { + return preferences.getString(KEY_PREFERENCE_PATH, DEFAULT_PATH); + } + public static void changeFTPServerPort(SharedPreferences preferences, int port) { preferences.edit() .putInt(PORT_PREFERENCE_KEY, port) .apply(); } + public static void changeFTPServerPath(SharedPreferences preferences, String path) { + preferences.edit().putString(KEY_PREFERENCE_PATH, path).apply(); + } + private static final String TAG = FTPService.class.getSimpleName(); + /** * TODO: 25/10/16 This is ugly */ @@ -125,8 +136,6 @@ public class FTPService extends Service implements Runnable { serverFactory.setConnectionConfig(connectionConfigFactory.createConnectionConfig()); - String path = Environment.getExternalStorageDirectory().getAbsolutePath(); - BaseUser user = new BaseUser(); if (!isPasswordProtected) { user.setName("anonymous"); @@ -135,7 +144,7 @@ public class FTPService extends Service implements Runnable { user.setPassword(password); } - user.setHomeDirectory(path); + user.setHomeDirectory(getDefaultPathFromPreferences(preferences)); List list = new ArrayList<>(); list.add(new WritePermission()); user.setAuthorities(list); diff --git a/src/main/res/menu/ftp_server_menu.xml b/src/main/res/menu/ftp_server_menu.xml index 32a77c398..6f3499058 100644 --- a/src/main/res/menu/ftp_server_menu.xml +++ b/src/main/res/menu/ftp_server_menu.xml @@ -3,4 +3,7 @@ + \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 096970fba..86bdeae33 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -571,5 +571,12 @@ Time Elapsed Please Wait No applications + Shared Path + Path to the root of directory to share + Path not a directory + Change + + FTP path changed successfully + Invalid path