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:
Diffstat (limited to 'app/src/main/java/se/lublin/mumla/app/MumlaActivity.java')
-rw-r--r--app/src/main/java/se/lublin/mumla/app/MumlaActivity.java81
1 files changed, 60 insertions, 21 deletions
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);