mirror of
http://galexander.org/git/simplesshd.git
synced 2024-12-28 00:48:07 +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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
@ -50,6 +50,14 @@ public class Prefs {
|
||||
public static String get_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
|
||||
* needed */
|
||||
|
@ -7,6 +7,7 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.Intent;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.text.ClipboardManager;
|
||||
import android.view.View;
|
||||
import android.view.Menu;
|
||||
@ -24,6 +25,7 @@ import java.net.NetworkInterface;
|
||||
import java.net.InetAddress;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import android.Manifest;
|
||||
|
||||
public class SimpleSSHD extends Activity
|
||||
{
|
||||
@ -50,6 +52,7 @@ public class SimpleSSHD extends Activity
|
||||
synchronized (lock) {
|
||||
curr = this;
|
||||
}
|
||||
permission();
|
||||
update_startstop_prime();
|
||||
updater = new UpdaterThread();
|
||||
updater.start();
|
||||
@ -294,4 +297,21 @@ public class SimpleSSHD extends Activity
|
||||
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