Skip to content

Android: tailscale app does not request storage permission #15263

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
ppaga opened this issue Mar 10, 2025 · 2 comments
Open

Android: tailscale app does not request storage permission #15263

ppaga opened this issue Mar 10, 2025 · 2 comments
Assignees
Labels
bug Bug OS-android Issues involving Tailscale for Android

Comments

@ppaga
Copy link

ppaga commented Mar 10, 2025

What is the issue?

On Android Pixel 7a: when trying to taildrop a file from linux, I get
500 Internal Server Error: open redacted.3e790f11: permission denied
and no notification on the phone.

When checking permissions, the tailscale app only has the notification permission and no other requested.

Steps to reproduce

No response

Are there any recent changes that introduced the issue?

No response

OS

No response

OS version

No response

Tailscale version

No response

Other software

No response

Bug report

No response

@nickoneill nickoneill added OS-android Issues involving Tailscale for Android and removed needs-triage labels Mar 11, 2025
@kari-ts
Copy link
Contributor

kari-ts commented Mar 18, 2025

This is due to our use of getExternalStoragePublicDirectory, which is deprecated in Android 10+ because of changes to Android's management of scoped storage. The fix is to use Storage Access Framework instead.

@kari-ts
Copy link
Contributor

kari-ts commented Mar 19, 2025

SAF is designed to give users control over which directories and files an app can access, so it requires users select where Taildropped files are saved.
We currently set the directory during initialization when creating LocalBackend, but there are cases where Tailscale may be running without the app having been opened by the user (eg if Always On is enabled and the device has been restarted but the app hasn't been opened).
Since we will be adding an additional directory picker, this should get shown in MainActivity to users who haven't selected the Taildrop destination before when we are asking for other permissions.
Context.getExternalFilesDirs gives a directory on external storage that's private to the app and doesn't require permission - when a user has not selected the Taildrop location, Taildropped files should get saved there, and a notification shown explaining this and giving them the option to open up the directory picker, and once the location has been selected, files should be transferred to that location.

kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 3, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 4, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 4, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 4, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 4, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 4, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 4, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 9, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 10, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 15, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 15, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 15, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 15, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 15, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 15, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 16, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 23, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 23, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 23, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 23, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 23, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue Apr 23, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 24, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 24, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 24, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue Apr 24, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 14, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 14, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts pushed a commit that referenced this issue May 14, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts pushed a commit that referenced this issue May 14, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue May 14, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue May 14, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 20, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue May 20, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue May 20, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue May 20, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit that referenced this issue May 20, 2025
Create FileOps for calling platform-specific file operations such as SAF APIs in Taildrop
Update taildrop.PutFile to support both traditional and SAF modes

Updates #15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 20, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 20, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 20, 2025
Use Android Storage Access Framework for receiving Taildropped files.

-Add a picker to allow users to select where Taildropped files go
-If no directory is selected, internal app storage is used
-Provide SAF API for Go to use when writing and renaming files
-Provide Android FileOps implementation

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 29, 2025
-Modify Permissions view to navigate to Taildrop dir view and Notifications view, and to reflect state
-Add Taildrop dir view which navigates to directory selector
-Add Notifications view which navigates to Taildrop notifications setting

Updates tailscale/tailscale#15263
Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 29, 2025
-Modify Permissions view to navigate to Taildrop dir view and Notifications view, and to reflect state
-Add Taildrop dir view which navigates to directory selector
-Add Notifications view which navigates to Taildrop notifications setting

Updates tailscale/tailscale#15263
Signed-off-by: kari-ts <[email protected]>
kari-ts added a commit to tailscale/tailscale-android that referenced this issue May 30, 2025
-Modify Permissions view to navigate to Taildrop dir view and Notifications view, and to reflect state
-Add Taildrop dir view which navigates to directory selector
-Add Notifications view which navigates to Taildrop notifications setting

Updates tailscale/tailscale#15263

Signed-off-by: kari-ts <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Bug OS-android Issues involving Tailscale for Android
Projects
None yet
Development

No branches or pull requests

3 participants