mirror of
http://galexander.org/git/simplesshd.git
synced 2024-11-27 09:48:08 +00:00
request the SD card permission if it hasn't already been granted or
requested in the past.
This commit is contained in:
parent
0a53e627d2
commit
190c8588e9
53
NOTES
53
NOTES
@ -698,7 +698,58 @@ Anyways, there's a bunch of stuff remaining to do, and then I will
|
|||||||
release it.
|
release it.
|
||||||
|
|
||||||
|
|
||||||
XXX - call checkSelfPermission/requestPermission to get WRITE_EXTERNAL_STORAGE (it only works now because it's grandfathered in)
|
May 26, 2019.
|
||||||
|
|
||||||
|
I got an AVD (emulated android) running SDK 26 (Oreo 8.0) x86. It uses
|
||||||
|
kvm virtualization so it's much faster than the old emulated ARM I used
|
||||||
|
to be shackled with.
|
||||||
|
|
||||||
|
Anyways, right off, it says (in a toast):
|
||||||
|
Developer warning for package "org.galexander.sshd"
|
||||||
|
Failed to post notification on channel "null"
|
||||||
|
See log for more details
|
||||||
|
adb logcat says:
|
||||||
|
05-26 17:13:49.877 1741 1764 E NotificationService: No Channel found
|
||||||
|
for pkg=org.galexander.sshd, channelId=null, id=1, tag=null,
|
||||||
|
opPkg=org.galexander.sshd, callingUid=10085, userId=0, incomingUserId=0,
|
||||||
|
notificationUid=10085, notification=Notification(channel=null pri=0
|
||||||
|
contentView=org.galexander.sshd/0x7f030001 vibrate=null sound=null
|
||||||
|
tick defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)
|
||||||
|
|
||||||
|
This gives a kind of deja vu -- I think from BluntMP3? I'm just adding
|
||||||
|
it to the todo list.
|
||||||
|
|
||||||
|
To access SimpleSSHD, run
|
||||||
|
adb forward tcp:2222 tcp:2222
|
||||||
|
ssh -p 2222 localhost
|
||||||
|
|
||||||
|
And it demonstrates that the sdcard access is forbidden. In fact, I can
|
||||||
|
toggle it inside the System Settings -> Applications -> SimpleSSHD ->
|
||||||
|
permissions -> Storage, and it takes effect more or less immediately.
|
||||||
|
|
||||||
|
Android development is such a constant stream of astonishing garbage.
|
||||||
|
When it requests the permission, which happens just as I would want it
|
||||||
|
to, it then pops up a "System UI has stopped" dialog. But look, it isn't
|
||||||
|
my fault:
|
||||||
|
|
||||||
|
https://stackoverflow.com/questions/49261555/system-ui-has-stopped-emulator-when-requesting-permissions
|
||||||
|
|
||||||
|
For real. There's a bug in the emulator you fix by "increasing the DPI."
|
||||||
|
I had tried some older 854x480 sort of emulated device because I didn't
|
||||||
|
want all those pixels, but I'll just use Pixel 2 (the default, and one
|
||||||
|
Google surely tests). It has a different skin where the soft buttons are
|
||||||
|
part of the skin, which is I bet what the bug is around.
|
||||||
|
|
||||||
|
So, the permissions request works now. It just asks once, and no matter
|
||||||
|
what the answer is, it never asks again. And if it is grandfathered in
|
||||||
|
because the previous version of the app used an older SDK, then it will
|
||||||
|
never ask and it'll just have the permission. And, at least on an
|
||||||
|
emulated Pixel 2, it can access /sdcard, which is "internal storage."
|
||||||
|
It does emulate an "SD card", but it can't access that.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
XXX - assign a channel for the service notification
|
||||||
|
|
||||||
XXX - upgrade to newest dropbear
|
XXX - upgrade to newest dropbear
|
||||||
|
|
||||||
|
@ -50,6 +50,14 @@ public class Prefs {
|
|||||||
public static String get_env() {
|
public static String get_env() {
|
||||||
return pref.getString("env", "");
|
return pref.getString("env", "");
|
||||||
}
|
}
|
||||||
|
public static boolean get_requested() { /* already requested perms */
|
||||||
|
return pref.getBoolean("requested", false);
|
||||||
|
}
|
||||||
|
public static void set_requested() {
|
||||||
|
SharedPreferences.Editor edit = pref.edit();
|
||||||
|
edit.putBoolean("requested", true);
|
||||||
|
edit.commit();
|
||||||
|
}
|
||||||
|
|
||||||
/* NB - other defaults can be filled in by either Prefs or Settings as
|
/* NB - other defaults can be filled in by either Prefs or Settings as
|
||||||
* needed */
|
* needed */
|
||||||
|
@ -7,6 +7,7 @@ import android.content.Context;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.text.ClipboardManager;
|
import android.text.ClipboardManager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@ -24,6 +25,7 @@ import java.net.NetworkInterface;
|
|||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import android.Manifest;
|
||||||
|
|
||||||
public class SimpleSSHD extends Activity
|
public class SimpleSSHD extends Activity
|
||||||
{
|
{
|
||||||
@ -50,6 +52,7 @@ public class SimpleSSHD extends Activity
|
|||||||
synchronized (lock) {
|
synchronized (lock) {
|
||||||
curr = this;
|
curr = this;
|
||||||
}
|
}
|
||||||
|
permission();
|
||||||
update_startstop_prime();
|
update_startstop_prime();
|
||||||
updater = new UpdaterThread();
|
updater = new UpdaterThread();
|
||||||
updater.start();
|
updater.start();
|
||||||
@ -294,4 +297,21 @@ public class SimpleSSHD extends Activity
|
|||||||
return "UNKNOWN";
|
return "UNKNOWN";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void permission() {
|
||||||
|
if (android.os.Build.VERSION.SDK_INT < 23) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Prefs.get_requested()) { /* already asked once */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onRequestPermissionsResult(int code, String[] perms, int[] results) {
|
||||||
|
Prefs.set_requested(); /* whatever result, don't ask again */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user