Skip to content

Commit 3107e50

Browse files
committed
Move permissions handlin to permissions manager
1 parent dbea97c commit 3107e50

File tree

2 files changed

+62
-53
lines changed

2 files changed

+62
-53
lines changed

codec2talkie/src/main/java/com/radio/codec2talkie/MainActivity.java

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@
44
import androidx.activity.result.contract.ActivityResultContracts;
55
import androidx.annotation.NonNull;
66
import androidx.appcompat.app.AppCompatActivity;
7-
import androidx.core.app.ActivityCompat;
8-
import androidx.core.content.ContextCompat;
97
import androidx.core.view.MenuCompat;
108
import androidx.preference.PreferenceManager;
119

12-
import android.Manifest;
1310
import android.annotation.SuppressLint;
1411
import android.bluetooth.BluetoothDevice;
1512
import android.content.BroadcastReceiver;
@@ -63,21 +60,18 @@
6360
import com.radio.codec2talkie.storage.message.group.MessageGroupActivity;
6461
import com.radio.codec2talkie.tools.AudioTools;
6562
import com.radio.codec2talkie.tools.DeviceIdTools;
63+
import com.radio.codec2talkie.tools.PermissionsManager;
6664
import com.radio.codec2talkie.tools.RadioTools;
6765
import com.radio.codec2talkie.transport.TransportFactory;
6866
import com.radio.codec2talkie.connect.UsbConnectActivity;
6967
import com.radio.codec2talkie.connect.UsbPortHandler;
7068

71-
import java.util.LinkedList;
72-
import java.util.List;
7369
import java.util.Locale;
7470

7571
public class MainActivity extends AppCompatActivity implements ServiceConnection {
7672

7773
private static final String TAG = MainActivity.class.getSimpleName();
7874

79-
private final static int REQUEST_PERMISSIONS = 1;
80-
8175
// S9 level at -93 dBm as per VHF Managers Handbook
8276
private final static int S_METER_S0_VALUE_DB = -147;
8377
// from S0 up to S9+40
@@ -256,7 +250,7 @@ private void startTransportConnection() {
256250
Log.i(TAG, "startTransportConnection(" + transportType + ")");
257251
if (AppService.isRunning) {
258252
startAppService(AppService.transportType);
259-
} else if (requestPermissions()) {
253+
} else if (PermissionsManager.requestPermissions(this)) {
260254
switch (transportType) {
261255
case LOOPBACK:
262256
_textConnInfo.setText(R.string.main_status_loopback_test);
@@ -395,49 +389,6 @@ protected void startMessagesActivity() {
395389
_messagesActivityLauncher.launch(new Intent(this, MessageGroupActivity.class));
396390
}
397391

398-
protected boolean requestPermissions() {
399-
List<String> permissionsToRequest = new LinkedList<>();
400-
List<String> versionRequiredPermissions = getRequiredPermissions();
401-
if (!versionRequiredPermissions.isEmpty()) {
402-
for (String permission : versionRequiredPermissions) {
403-
if (ContextCompat.checkSelfPermission(MainActivity.this, permission) == PackageManager.PERMISSION_DENIED) {
404-
permissionsToRequest.add(permission);
405-
}
406-
}
407-
}
408-
if (!permissionsToRequest.isEmpty()) {
409-
ActivityCompat.requestPermissions(
410-
MainActivity.this,
411-
permissionsToRequest.toArray(new String[0]),
412-
REQUEST_PERMISSIONS);
413-
return false;
414-
}
415-
return true;
416-
}
417-
418-
@NonNull
419-
private static List<String> getRequiredPermissions() {
420-
List<String> versionRequiredPermissions = new LinkedList<>();
421-
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH);
422-
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH_ADMIN);
423-
versionRequiredPermissions.add(Manifest.permission.RECORD_AUDIO);
424-
versionRequiredPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
425-
versionRequiredPermissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
426-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
427-
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH_CONNECT);
428-
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH_SCAN);
429-
}
430-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
431-
versionRequiredPermissions.add(Manifest.permission.FOREGROUND_SERVICE);
432-
}
433-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
434-
versionRequiredPermissions.add(Manifest.permission.POST_NOTIFICATIONS);
435-
versionRequiredPermissions.add(Manifest.permission.NEARBY_WIFI_DEVICES);
436-
versionRequiredPermissions.add(Manifest.permission.CAMERA);
437-
}
438-
return versionRequiredPermissions;
439-
}
440-
441392
private void bindAppService() {
442393
if (!bindService(new Intent(this, AppService.class), this, Context.BIND_AUTO_CREATE)) {
443394
Log.e(TAG, "Service does not exists or no access");
@@ -669,7 +620,6 @@ public boolean onKeyDown(int keyCode, KeyEvent event) {
669620

670621
@Override
671622
public void onBackPressed() {
672-
673623
if (_backPressedTimestamp + BACK_EXIT_MS_DELAY > System.currentTimeMillis()) {
674624
exitApplication();
675625
} else {
@@ -718,7 +668,7 @@ public boolean onTouch(View v, MotionEvent event) {
718668
@Override
719669
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
720670
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
721-
if (requestCode == REQUEST_PERMISSIONS) {
671+
if (requestCode == PermissionsManager.REQUEST_PERMISSIONS) {
722672
boolean allGranted = true;
723673
for (int result : grantResults) {
724674
if (result != PackageManager.PERMISSION_GRANTED) {
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.radio.codec2talkie.tools;
2+
3+
import android.Manifest;
4+
import android.app.Activity;
5+
import android.content.Context;
6+
import android.content.pm.PackageManager;
7+
import android.os.Build;
8+
9+
import androidx.core.app.ActivityCompat;
10+
import androidx.core.content.ContextCompat;
11+
12+
import java.util.LinkedList;
13+
import java.util.List;
14+
15+
public class PermissionsManager {
16+
public final static int REQUEST_PERMISSIONS = 1;
17+
18+
private static List<String> getRequiredPermissions() {
19+
List<String> versionRequiredPermissions = new LinkedList<>();
20+
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH);
21+
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH_ADMIN);
22+
versionRequiredPermissions.add(Manifest.permission.RECORD_AUDIO);
23+
versionRequiredPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
24+
versionRequiredPermissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
25+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
26+
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH_CONNECT);
27+
versionRequiredPermissions.add(Manifest.permission.BLUETOOTH_SCAN);
28+
}
29+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
30+
versionRequiredPermissions.add(Manifest.permission.FOREGROUND_SERVICE);
31+
}
32+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
33+
versionRequiredPermissions.add(Manifest.permission.POST_NOTIFICATIONS);
34+
versionRequiredPermissions.add(Manifest.permission.NEARBY_WIFI_DEVICES);
35+
versionRequiredPermissions.add(Manifest.permission.CAMERA);
36+
}
37+
return versionRequiredPermissions;
38+
}
39+
40+
public static boolean requestPermissions(Activity activity) {
41+
List<String> permissionsToRequest = new LinkedList<>();
42+
List<String> versionRequiredPermissions = getRequiredPermissions();
43+
if (!versionRequiredPermissions.isEmpty()) {
44+
for (String permission : versionRequiredPermissions) {
45+
if (ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_DENIED) {
46+
permissionsToRequest.add(permission);
47+
}
48+
}
49+
}
50+
if (!permissionsToRequest.isEmpty()) {
51+
ActivityCompat.requestPermissions(
52+
activity,
53+
permissionsToRequest.toArray(new String[0]),
54+
REQUEST_PERMISSIONS);
55+
return false;
56+
}
57+
return true;
58+
}
59+
}

0 commit comments

Comments
 (0)