浏览代码

feat(android) bump minimum required version to 26 aka Oreo

There is a 1.2% cummulative usage change according to [0] and it allows
us to simplify some code going forward.

[0]: https://apilevels.com/
factor2
Saúl Ibarra Corretgé 9 个月前
父节点
当前提交
9846228210

+ 1
- 1
android/build.gradle 查看文件

20
     kotlinVersion = "1.9.24"
20
     kotlinVersion = "1.9.24"
21
     buildToolsVersion = "34.0.0"
21
     buildToolsVersion = "34.0.0"
22
     compileSdkVersion = 34
22
     compileSdkVersion = 34
23
-    minSdkVersion    = 24
23
+    minSdkVersion    = 26
24
     targetSdkVersion = 34
24
     targetSdkVersion = 34
25
     supportLibVersion = "28.0.0"
25
     supportLibVersion = "28.0.0"
26
     ndkVersion = "26.1.10909125"
26
     ndkVersion = "26.1.10909125"

+ 0
- 2
android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerConnectionService.java 查看文件

18
 
18
 
19
 import android.content.Context;
19
 import android.content.Context;
20
 import android.media.AudioManager;
20
 import android.media.AudioManager;
21
-import android.os.Build;
22
 import android.telecom.CallAudioState;
21
 import android.telecom.CallAudioState;
23
 import androidx.annotation.RequiresApi;
22
 import androidx.annotation.RequiresApi;
24
 
23
 
34
  * {@link AudioModeModule.AudioDeviceHandlerInterface} module implementing device handling for
33
  * {@link AudioModeModule.AudioDeviceHandlerInterface} module implementing device handling for
35
  * Android versions >= O when ConnectionService is enabled.
34
  * Android versions >= O when ConnectionService is enabled.
36
  */
35
  */
37
-@RequiresApi(Build.VERSION_CODES.O)
38
 class AudioDeviceHandlerConnectionService implements
36
 class AudioDeviceHandlerConnectionService implements
39
         AudioModeModule.AudioDeviceHandlerInterface,
37
         AudioModeModule.AudioDeviceHandlerInterface,
40
         RNConnectionService.CallAudioStateListener {
38
         RNConnectionService.CallAudioStateListener {

+ 11
- 17
android/sdk/src/main/java/org/jitsi/meet/sdk/AudioDeviceHandlerGeneric.java 查看文件

20
 import android.media.AudioDeviceInfo;
20
 import android.media.AudioDeviceInfo;
21
 import android.media.AudioFocusRequest;
21
 import android.media.AudioFocusRequest;
22
 import android.media.AudioManager;
22
 import android.media.AudioManager;
23
-import android.os.Build;
24
 
23
 
25
 import java.util.HashSet;
24
 import java.util.HashSet;
26
 import java.util.Set;
25
 import java.util.Set;
227
         audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
226
         audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
228
         audioManager.setMicrophoneMute(false);
227
         audioManager.setMicrophoneMute(false);
229
 
228
 
230
-        int gotFocus;
231
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
232
-            gotFocus = audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
233
-                .setAudioAttributes(
234
-                    new AudioAttributes.Builder()
235
-                        .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
236
-                        .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
237
-                        .build()
238
-                )
239
-                .setAcceptsDelayedFocusGain(true)
240
-                .setOnAudioFocusChangeListener(this)
241
-                .build()
242
-            );
243
-        } else {
244
-            gotFocus = audioManager.requestAudioFocus(this, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
245
-        }
229
+        int gotFocus = audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
230
+            .setAudioAttributes(
231
+                new AudioAttributes.Builder()
232
+                    .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
233
+                    .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
234
+                    .build()
235
+            )
236
+            .setAcceptsDelayedFocusGain(true)
237
+            .setOnAudioFocusChangeListener(this)
238
+            .build()
239
+        );
246
 
240
 
247
         if (gotFocus == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
241
         if (gotFocus == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
248
             JitsiMeetLogger.w(TAG + " Audio focus request failed");
242
             JitsiMeetLogger.w(TAG + " Audio focus request failed");

+ 2
- 5
android/sdk/src/main/java/org/jitsi/meet/sdk/AudioModeModule.java 查看文件

20
 import android.app.Activity;
20
 import android.app.Activity;
21
 import android.content.Context;
21
 import android.content.Context;
22
 import android.media.AudioManager;
22
 import android.media.AudioManager;
23
-import android.os.Build;
24
 
23
 
25
 import com.facebook.react.bridge.Arguments;
24
 import com.facebook.react.bridge.Arguments;
26
 import com.facebook.react.bridge.Promise;
25
 import com.facebook.react.bridge.Promise;
58
  * Before a call has started and after it has ended the
57
  * Before a call has started and after it has ended the
59
  * {@code AudioModeModule.DEFAULT} mode should be used.
58
  * {@code AudioModeModule.DEFAULT} mode should be used.
60
  */
59
  */
61
-@SuppressLint("AnnotateVersionCheck")
62
 @ReactModule(name = AudioModeModule.NAME)
60
 @ReactModule(name = AudioModeModule.NAME)
63
 class AudioModeModule extends ReactContextBaseJavaModule {
61
 class AudioModeModule extends ReactContextBaseJavaModule {
64
     public static final String NAME = "AudioMode";
62
     public static final String NAME = "AudioMode";
84
     /**
82
     /**
85
      * Whether or not the ConnectionService is used for selecting audio devices.
83
      * Whether or not the ConnectionService is used for selecting audio devices.
86
      */
84
      */
87
-    private static final boolean supportsConnectionService = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
88
-    private static boolean useConnectionService_ = supportsConnectionService;
85
+    private static boolean useConnectionService_ = true;
89
 
86
 
90
     static boolean useConnectionService() {
87
     static boolean useConnectionService() {
91
-        return supportsConnectionService && useConnectionService_;
88
+        return useConnectionService_;
92
     }
89
     }
93
 
90
 
94
     /**
91
     /**

+ 0
- 1
android/sdk/src/main/java/org/jitsi/meet/sdk/ConnectionService.java 查看文件

37
  *
37
  *
38
  * @author Pawel Domas
38
  * @author Pawel Domas
39
  */
39
  */
40
-@RequiresApi(api = Build.VERSION_CODES.O)
41
 public class ConnectionService extends android.telecom.ConnectionService {
40
 public class ConnectionService extends android.telecom.ConnectionService {
42
 
41
 
43
     /**
42
     /**

+ 1
- 5
android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java 查看文件

83
         ComponentName componentName;
83
         ComponentName componentName;
84
 
84
 
85
         try {
85
         try {
86
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
87
-                componentName = context.startForegroundService(intent);
88
-            } else {
89
-                componentName = context.startService(intent);
90
-            }
86
+            componentName = context.startForegroundService(intent);
91
         } catch (RuntimeException e) {
87
         } catch (RuntimeException e) {
92
             // Avoid crashing due to ForegroundServiceStartNotAllowedException (API level 31).
88
             // Avoid crashing due to ForegroundServiceStartNotAllowedException (API level 31).
93
             // See: https://developer.android.com/guide/components/foreground-services#background-start-restrictions
89
             // See: https://developer.android.com/guide/components/foreground-services#background-start-restrictions

+ 0
- 6
android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingNotification.java 查看文件

29
 import androidx.annotation.StringRes;
29
 import androidx.annotation.StringRes;
30
 import androidx.core.app.NotificationCompat;
30
 import androidx.core.app.NotificationCompat;
31
 
31
 
32
-import android.os.Build;
33
-
34
 
32
 
35
 /**
33
 /**
36
  * Helper class for creating the ongoing notification which is used with
34
  * Helper class for creating the ongoing notification which is used with
45
     static final String ONGOING_CONFERENCE_CHANNEL_ID = "JitsiOngoingConferenceChannel";
43
     static final String ONGOING_CONFERENCE_CHANNEL_ID = "JitsiOngoingConferenceChannel";
46
 
44
 
47
     static void createNotificationChannel(Activity context) {
45
     static void createNotificationChannel(Activity context) {
48
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
49
-            return;
50
-        }
51
-
52
         if (context == null) {
46
         if (context == null) {
53
             JitsiMeetLogger.w(TAG + " Cannot create notification channel: no current context");
47
             JitsiMeetLogger.w(TAG + " Cannot create notification channel: no current context");
54
             return;
48
             return;

+ 1
- 3
android/sdk/src/main/java/org/jitsi/meet/sdk/PictureInPictureModule.java 查看文件

20
 import android.app.Activity;
20
 import android.app.Activity;
21
 import android.app.ActivityManager;
21
 import android.app.ActivityManager;
22
 import android.app.PictureInPictureParams;
22
 import android.app.PictureInPictureParams;
23
-import android.os.Build;
24
 import android.util.Rational;
23
 import android.util.Rational;
25
 
24
 
26
 import com.facebook.react.bridge.Promise;
25
 import com.facebook.react.bridge.Promise;
53
         // Android Go devices don't support PiP. There doesn't seem to be a better way to detect it than
52
         // Android Go devices don't support PiP. There doesn't seem to be a better way to detect it than
54
         // to use ActivityManager.isLowRamDevice().
53
         // to use ActivityManager.isLowRamDevice().
55
         // https://stackoverflow.com/questions/58340558/how-to-detect-android-go
54
         // https://stackoverflow.com/questions/58340558/how-to-detect-android-go
56
-        isSupported = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !am.isLowRamDevice();
55
+        isSupported = !am.isLowRamDevice();
57
     }
56
     }
58
 
57
 
59
     /**
58
     /**
82
      * including when the activity is not visible (paused or stopped), if the
81
      * including when the activity is not visible (paused or stopped), if the
83
      * screen is locked or if the user has an activity pinned.
82
      * screen is locked or if the user has an activity pinned.
84
      */
83
      */
85
-    @TargetApi(Build.VERSION_CODES.O)
86
     public void enterPictureInPicture() {
84
     public void enterPictureInPicture() {
87
         if (!isEnabled) {
85
         if (!isEnabled) {
88
             return;
86
             return;

+ 0
- 3
android/sdk/src/main/java/org/jitsi/meet/sdk/RNConnectionService.java 查看文件

3
 import android.annotation.SuppressLint;
3
 import android.annotation.SuppressLint;
4
 import android.content.Context;
4
 import android.content.Context;
5
 import android.net.Uri;
5
 import android.net.Uri;
6
-import android.os.Build;
7
 import android.os.Bundle;
6
 import android.os.Bundle;
8
 import android.telecom.DisconnectCause;
7
 import android.telecom.DisconnectCause;
9
 import android.telecom.PhoneAccount;
8
 import android.telecom.PhoneAccount;
32
  *
31
  *
33
  * @author Pawel Domas
32
  * @author Pawel Domas
34
  */
33
  */
35
-@RequiresApi(api = Build.VERSION_CODES.O)
36
 @ReactModule(name = RNConnectionService.NAME)
34
 @ReactModule(name = RNConnectionService.NAME)
37
 class RNConnectionService extends ReactContextBaseJavaModule {
35
 class RNConnectionService extends ReactContextBaseJavaModule {
38
 
36
 
53
      * @param audioRoute the new audio route to be set. See
51
      * @param audioRoute the new audio route to be set. See
54
      * {@link android.telecom.CallAudioState} constants prefixed with "ROUTE_".
52
      * {@link android.telecom.CallAudioState} constants prefixed with "ROUTE_".
55
      */
53
      */
56
-    @RequiresApi(api = Build.VERSION_CODES.O)
57
     static void setAudioRoute(int audioRoute) {
54
     static void setAudioRoute(int audioRoute) {
58
         for (ConnectionService.ConnectionImpl c
55
         for (ConnectionService.ConnectionImpl c
59
                 : ConnectionService.getConnections()) {
56
                 : ConnectionService.getConnections()) {

+ 1
- 1
react-native-sdk/README.md 查看文件

69
 
69
 
70
 ## Android
70
 ## Android
71
 
71
 
72
-- In your build.gradle have at least `minSdkVersion = 24`
72
+- In your build.gradle have at least `minSdkVersion = 26`
73
 - In `android/app/src/debug/AndroidManifest.xml` and `android/app/src/main/AndroidManifest.xml`, under the `</application>` tag, include
73
 - In `android/app/src/debug/AndroidManifest.xml` and `android/app/src/main/AndroidManifest.xml`, under the `</application>` tag, include
74
   ```xml
74
   ```xml
75
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
75
     <uses-permission android:name="android.permission.RECORD_AUDIO" />

正在加载...
取消
保存