Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/mumla.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Lublin <daniel@lublin.se>2023-09-02 12:22:06 +0300
committerDaniel Lublin <daniel@lublin.se>2023-09-02 12:26:35 +0300
commitc66076442af14b72923466d2c98d71c1284c4a28 (patch)
tree31b4e5a3183ba5375ada6c722cc41293ca2c5c4b
parent03f3977b81381c18ccfc2cbb7bbc262932342de2 (diff)
Request permission to send notifications on Android 13
The use of shouldShowRequestPermissionRational() makes Mumla ask for the POST_NOTIFICATIONS permission 2 times, and then not again. The mPermPostNotificationsAsked variable makes it so that the 2nd time will take place after a complete restart of Mumla. Seems good. Noting that I don't see any "Never ask again" button in the dialog, which I kind of expected.
-rw-r--r--app/src/main/AndroidManifest.xml1
-rw-r--r--app/src/main/java/se/lublin/mumla/app/MumlaActivity.java81
-rw-r--r--app/src/main/res/values/strings.xml1
3 files changed, 62 insertions, 21 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8443c08..6613f90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -36,6 +36,7 @@
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
+ <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<queries>
<!-- We're using guardianproject's OrbotHelper to check if Orbot is installed -->
diff --git a/app/src/main/java/se/lublin/mumla/app/MumlaActivity.java b/app/src/main/java/se/lublin/mumla/app/MumlaActivity.java
index a33ed11..a9681ae 100644
--- a/app/src/main/java/se/lublin/mumla/app/MumlaActivity.java
+++ b/app/src/main/java/se/lublin/mumla/app/MumlaActivity.java
@@ -29,6 +29,7 @@ import android.content.res.Configuration;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
+import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceManager;
@@ -122,7 +123,9 @@ public class MumlaActivity extends AppCompatActivity implements ListView.OnItemC
private DrawerAdapter mDrawerAdapter;
private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 1;
+ private static final int PERMISSIONS_REQUEST_POST_NOTIFICATIONS = 2;
private Server mServerPendingPerm = null;
+ private boolean mPermPostNotificationsAsked = false;
private ProgressDialog mConnectingDialog;
private AlertDialog mErrorDialog;
@@ -541,18 +544,39 @@ public class MumlaActivity extends AppCompatActivity implements ListView.OnItemC
}
public void connectToServer(final Server server) {
- mServerPendingPerm = null;
+ mServerPendingPerm = server;
+ connectToServerWithPerm();
+ }
+ public void connectToServerWithPerm() {
if (ContextCompat.checkSelfPermission(MumlaActivity.this,
Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MumlaActivity.this,
new String[]{Manifest.permission.RECORD_AUDIO},
PERMISSIONS_REQUEST_RECORD_AUDIO);
- mServerPendingPerm = server;
return;
}
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !mPermPostNotificationsAsked) {
+ if (ContextCompat.checkSelfPermission(MumlaActivity.this,
+ Manifest.permission.POST_NOTIFICATIONS)
+ != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(MumlaActivity.this,
+ new String[]{Manifest.permission.POST_NOTIFICATIONS},
+ PERMISSIONS_REQUEST_POST_NOTIFICATIONS);
+ return;
+ }
+ }
+
+ if (mServerPendingPerm == null) {
+ Log.w(TAG, "No pending server after getting permissions");
+ return;
+ }
+
+ Server server = mServerPendingPerm;
+ mServerPendingPerm = null;
+
// Check if we're already connected to a server; if so, inform user.
if(mService != null && mService.isConnected()) {
AlertDialog.Builder adb = new AlertDialog.Builder(this);
@@ -599,6 +623,40 @@ public class MumlaActivity extends AppCompatActivity implements ListView.OnItemC
connectTask.execute(server);
}
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+ @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+ if (grantResults.length == 0) {
+ return;
+ }
+
+ switch (requestCode) {
+ case PERMISSIONS_REQUEST_RECORD_AUDIO:
+ if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ connectToServerWithPerm();
+ } else {
+ Toast.makeText(MumlaActivity.this, getString(R.string.grant_perm_microphone),
+ Toast.LENGTH_LONG).show();
+ }
+ break;
+ case PERMISSIONS_REQUEST_POST_NOTIFICATIONS:
+ mPermPostNotificationsAsked = true;
+ if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
+ // This is inspired by https://stackoverflow.com/a/34612503
+ if (ActivityCompat.shouldShowRequestPermissionRationale(MumlaActivity.this,
+ Manifest.permission.POST_NOTIFICATIONS)) {
+ Toast.makeText(MumlaActivity.this,
+ getString(R.string.grant_perm_notifications), Toast.LENGTH_LONG).show();
+ }
+ }
+ connectToServerWithPerm();
+ break;
+ }
+ }
+
private boolean isPortOpen(final String host, final int port, final int timeout) {
final AtomicBoolean open = new AtomicBoolean(false);
try {
@@ -624,25 +682,6 @@ public class MumlaActivity extends AppCompatActivity implements ListView.OnItemC
}
return false;
}
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
- @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (requestCode == PERMISSIONS_REQUEST_RECORD_AUDIO) {
- if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- if (mServerPendingPerm != null) {
- connectToServer(mServerPendingPerm);
- } else {
- Log.w(TAG, "No pending server after record audio permission was granted");
- }
- } else {
- Toast.makeText(MumlaActivity.this, getString(R.string.grant_perm_microphone),
- Toast.LENGTH_LONG).show();
- }
- }
- }
-
public void connectToPublicServer(final PublicServer server) {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 78829f2..1f188c5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -196,6 +196,7 @@
<string name="shout_target">Shouting to %s</string>
<string name="shout_configure">Configure Voice Target</string>
<string name="grant_perm_microphone">Please grant microphone permission.</string>
+ <string name="grant_perm_notifications">Please grant permission to send notifications.</string>
<string name="grant_perm_storage">Please grant external storage permission.</string>
<string name="grant_perm_draw_over_apps">Please grant permission to display over other apps.</string>
<string name="orbot_not_installed">The Orbot app is not installed. Not using Tor.</string>