diff --git a/README.md b/README.md index 811f74a1..4f1c5ac4 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,25 @@ # Primitive FTPd -FTP server app for android. +FTP and SFTP server app for Android with external SD-card access. + ![Code Size](https://img.shields.io/github/languages/code-size/wolpi/prim-ftpd.svg?style=popout) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Q8TU8ZQX3WV8J) -[Get it on F-Droid](https://f-droid.org/app/org.primftpd) - -[Get it on Google Play](https://play.google.com/store/apps/details?id=org.primftpd) +How can you use this server on your device to access your files? +* Install from F-Droid +* Download from GitHub releases +* Use SAF +* Use QuickShare -[Get it on Amazon](http://www.amazon.com/wolpi-primitive-FTPd/dp/B00KERCPNY/ref=sr_1_1) +| [Get it on F-Droid](https://f-droid.org/app/org.primftpd) | [Get it on Google Play](https://play.google.com/store/apps/details?id=org.primftpd) | [Get it on Amazon](http://www.amazon.com/wolpi-primitive-FTPd/dp/B00KERCPNY/ref=sr_1_1) | +| --- | --- | --- | +You may download latest development snapshot from [GitHub packages](https://github.com/wolpi/prim-ftpd/packages/). ## Some features: * Can optionally be started on system boot @@ -30,20 +35,29 @@ FTP server app for android. * Plugins for powertoggles and tasker * Android 7 Quicksettings Tile * Optional root access -* Optional support for Android Storage Access Framework to access external sd-card the official way (NOTE requires selecting a directory, not the root of the sd-card). +* Optional support for Android Storage Access Framework to be able to write external SD-cards +## Translation +You may help translate this app in [hosted weblate](https://hosted.weblate.org/projects/pftpd/pftpd/). -## Development Snapshot -You may download latest development snapshot from [GitHub packages](https://github.com/wolpi/prim-ftpd/packages/). +## SFTP vs SCP +When accessing this app's server via scp, it might be necessary for some clients (specific versions of ssh coming with linux distros), to specify option -O. -## Translation -You may help translate this app in [hosted weblate](https://hosted.weblate.org/projects/pftpd/pftpd/). +## Running in the background + +Depending your Android version, Android keeps closing apps running in the background. Even if you think you configured explicitly not do this. Please visit https://dontkillmyapp.com/ on more information about battery saving options. + +## External SD card read/write access - Android Storage Access Framework + +Basically it requires selecting a directory, not the root of the SD-card. + +If you select the root of the SD-card, it will work temporarily, but the permission possibly gets revoked and you have to re-select regularly. Revocation can happen as soon as you close the app, or Android kills it within a few hours or days (see above). + +Depending on your Android version, permanent access to the root of the SD-card can be possible, if you first select a directory on your SD-card, then select the root of the SD-card. Though after an update, maybe you have to repeat these steps again. You can check whether the permission is stored permanently by visiting Android Settings → Apps → Special access → Directory access. If you see the primitive ftpd app there after you selected the root of the SD-card, there is a chance, that the permission to access the root of the SD-card will not be revoked. -## sftp vs scp -Note: when accessing this app's server via scp, it might be necessary for some clients (specific versions of ssh coming with linux distros), to specify option -O. +## All files access permission -## Permission Google introduces more and more restrictions to filesystem access to Android. In order to access all your files through this server you might have to grant it 'all files access' permission in Anroid settings. @@ -57,12 +71,6 @@ To be able to allow 'All files access' an app must declare `android.permission.M Google has a policy wether an app is allowed to declare that permission and be published on Google Play. As you can see below this app is considered as not compliant. -How can you use this server on your device to access your files? -* Install from f-droid -* Download from GitHub releases -* Use SAF -* Use QuickShare - Mail from Google: ![google play policy mail](fastlane/img/google-play-policy-mail.png) diff --git a/primitiveFTPd/res/layout/block_storage_type.xml b/primitiveFTPd/res/layout/block_storage_type.xml index 87e3719b..6406c50a 100644 --- a/primitiveFTPd/res/layout/block_storage_type.xml +++ b/primitiveFTPd/res/layout/block_storage_type.xml @@ -74,7 +74,7 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" - android:text="@string/safExplain" + android:text="@string/safExplainV2" /> Plain old filesystem Plain old filesystem\nGot read-only access? See our GitHub page. Super user (device must be rooted) - "Android Storage Access Framework (SAF) -\n(e.g. for card)" + "Android Storage Access Framework (SAF)\n(e.g. for external SD-card)" Read only SAF (faster !) Virtual Folders (provides all Storage Types) How SAF works - Android will ask you to choose a directory. That will be available via server(s). From time to time permission might be revoked and you have to re-select. + Android will ask you to choose a directory. That will be available via server(s). Permission gets revoked and you have to re-select regularly? See our GitHub page. Selected SAF URI: start server only start with server diff --git a/primitiveFTPd/src/org/primftpd/ui/PftpdFragment.java b/primitiveFTPd/src/org/primftpd/ui/PftpdFragment.java index 40835dda..093e9d3c 100644 --- a/primitiveFTPd/src/org/primftpd/ui/PftpdFragment.java +++ b/primitiveFTPd/src/org/primftpd/ui/PftpdFragment.java @@ -166,6 +166,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, // make links clickable ((TextView)view.findViewById(R.id.radioStoragePlain)).setMovementMethod(LinkMovementMethod.getInstance()); + ((TextView)view.findViewById(R.id.safExplain)).setMovementMethod(LinkMovementMethod.getInstance()); // create sample authorized_keys files new SampleAuthKeysFileCreator().createSampleAuthorizedKeysFiles(getContext());