Skip to content

Commit fd1a949

Browse files
authored
Merge pull request #8867 from element-hq/feature/bma/fixCrashOnApi34
Use ContextCompat.registerReceiver with explicit RECEIVER_EXPORTED
2 parents 10e7984 + 1e32ebd commit fd1a949

File tree

7 files changed

+53
-17
lines changed

7 files changed

+53
-17
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkCallbackStrategy.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import android.content.IntentFilter
2222
import android.net.ConnectivityManager
2323
import android.net.Network
2424
import android.os.Build
25+
import androidx.core.content.ContextCompat
2526
import androidx.core.content.getSystemService
2627
import timber.log.Timber
2728
import javax.inject.Inject
@@ -43,7 +44,12 @@ internal class FallbackNetworkCallbackStrategy @Inject constructor(
4344
networkInfoReceiver.isConnectedCallback = {
4445
hasChanged()
4546
}
46-
context.registerReceiver(networkInfoReceiver, filter)
47+
ContextCompat.registerReceiver(
48+
context,
49+
networkInfoReceiver,
50+
filter,
51+
ContextCompat.RECEIVER_NOT_EXPORTED,
52+
)
4753
}
4854

4955
override fun unregister() {

vector-app/src/debug/java/im/vector/app/receivers/VectorDebugReceiver.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import android.content.Context
2121
import android.content.Intent
2222
import android.content.IntentFilter
2323
import android.content.SharedPreferences
24+
import androidx.core.content.ContextCompat
2425
import androidx.core.content.edit
2526
import im.vector.app.core.debug.DebugReceiver
2627
import im.vector.app.core.di.DefaultPreferences
@@ -37,7 +38,12 @@ class VectorDebugReceiver @Inject constructor(
3738
) : BroadcastReceiver(), DebugReceiver {
3839

3940
override fun register(context: Context) {
40-
context.registerReceiver(this, getIntentFilter(context))
41+
ContextCompat.registerReceiver(
42+
context,
43+
this,
44+
getIntentFilter(context),
45+
ContextCompat.RECEIVER_NOT_EXPORTED,
46+
)
4147
}
4248

4349
override fun unregister(context: Context) {

vector-app/src/main/java/im/vector/app/VectorApplication.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import android.os.HandlerThread
2727
import android.os.StrictMode
2828
import android.util.Log
2929
import android.view.Gravity
30+
import androidx.core.content.ContextCompat
3031
import androidx.core.provider.FontRequest
3132
import androidx.core.provider.FontsContractCompat
3233
import androidx.lifecycle.DefaultLifecycleObserver
@@ -217,13 +218,16 @@ class VectorApplication :
217218
ProcessLifecycleOwner.get().lifecycle.addObserver(callManager)
218219
// This should be done as early as possible
219220
// initKnownEmojiHashSet(appContext)
220-
221-
applicationContext.registerReceiver(powerKeyReceiver, IntentFilter().apply {
222-
// Looks like i cannot receive OFF, if i don't have both ON and OFF
223-
addAction(Intent.ACTION_SCREEN_OFF)
224-
addAction(Intent.ACTION_SCREEN_ON)
225-
})
226-
221+
ContextCompat.registerReceiver(
222+
applicationContext,
223+
powerKeyReceiver,
224+
IntentFilter().apply {
225+
// Looks like i cannot receive OFF, if i don't have both ON and OFF
226+
addAction(Intent.ACTION_SCREEN_OFF)
227+
addAction(Intent.ACTION_SCREEN_ON)
228+
},
229+
ContextCompat.RECEIVER_NOT_EXPORTED,
230+
)
227231
EmojiManager.install(GoogleEmojiProvider())
228232

229233
// Initialize Mapbox before inflating mapViews

vector/src/main/java/im/vector/app/core/services/BluetoothHeadsetReceiver.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import android.content.BroadcastReceiver
2323
import android.content.Context
2424
import android.content.Intent
2525
import android.content.IntentFilter
26+
import androidx.core.content.ContextCompat
2627
import im.vector.lib.core.utils.compat.getParcelableExtraCompat
2728
import java.lang.ref.WeakReference
2829

@@ -83,7 +84,12 @@ class BluetoothHeadsetReceiver : BroadcastReceiver() {
8384
fun createAndRegister(context: Context, listener: EventListener): BluetoothHeadsetReceiver {
8485
val receiver = BluetoothHeadsetReceiver()
8586
receiver.delegate = WeakReference(listener)
86-
context.registerReceiver(receiver, IntentFilter(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED))
87+
ContextCompat.registerReceiver(
88+
context,
89+
receiver,
90+
IntentFilter(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED),
91+
ContextCompat.RECEIVER_NOT_EXPORTED,
92+
)
8793
return receiver
8894
}
8995

vector/src/main/java/im/vector/app/core/services/WiredHeadsetStateReceiver.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import android.content.Context
2121
import android.content.Intent
2222
import android.content.IntentFilter
2323
import android.media.AudioManager
24+
import androidx.core.content.ContextCompat
2425
import timber.log.Timber
2526
import java.lang.ref.WeakReference
2627

@@ -69,7 +70,12 @@ class WiredHeadsetStateReceiver : BroadcastReceiver() {
6970
val receiver = WiredHeadsetStateReceiver()
7071
receiver.delegate = WeakReference(listener)
7172
val action = AudioManager.ACTION_HEADSET_PLUG
72-
context.registerReceiver(receiver, IntentFilter(action))
73+
ContextCompat.registerReceiver(
74+
context,
75+
receiver,
76+
IntentFilter(action),
77+
ContextCompat.RECEIVER_NOT_EXPORTED,
78+
)
7379
return receiver
7480
}
7581

vector/src/main/java/im/vector/app/features/mdm/DefaultMdmService.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import android.content.Context
2121
import android.content.Intent
2222
import android.content.IntentFilter
2323
import android.content.RestrictionsManager
24+
import androidx.core.content.ContextCompat
2425
import androidx.core.content.getSystemService
2526
import dagger.hilt.android.qualifiers.ApplicationContext
2627
import timber.log.Timber
@@ -44,7 +45,12 @@ class DefaultMdmService @Inject constructor(
4445
override fun registerListener(context: Context, onChangedListener: () -> Unit) {
4546
val restrictionsFilter = IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED)
4647
this.onChangedListener = onChangedListener
47-
context.registerReceiver(restrictionsReceiver, restrictionsFilter)
48+
ContextCompat.registerReceiver(
49+
context,
50+
restrictionsReceiver,
51+
restrictionsFilter,
52+
ContextCompat.RECEIVER_NOT_EXPORTED
53+
)
4854
}
4955

5056
override fun unregisterListener(context: Context) {

vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import android.os.Build
3131
import android.util.Rational
3232
import androidx.annotation.RequiresApi
3333
import androidx.core.app.PictureInPictureModeChangedInfo
34+
import androidx.core.content.ContextCompat
3435
import androidx.core.util.Consumer
3536
import androidx.core.view.isVisible
3637
import com.airbnb.mvrx.Mavericks
@@ -201,11 +202,12 @@ class WidgetActivity : VectorBaseActivity<ActivityWidgetBinding>() {
201202
}
202203
}
203204
}
204-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
205-
registerReceiver(hangupBroadcastReceiver, IntentFilter(ACTION_MEDIA_CONTROL), RECEIVER_NOT_EXPORTED)
206-
} else {
207-
registerReceiver(hangupBroadcastReceiver, IntentFilter(ACTION_MEDIA_CONTROL))
208-
}
205+
ContextCompat.registerReceiver(
206+
this,
207+
hangupBroadcastReceiver,
208+
IntentFilter(ACTION_MEDIA_CONTROL),
209+
ContextCompat.RECEIVER_NOT_EXPORTED,
210+
)
209211
} else {
210212
unregisterReceiver(hangupBroadcastReceiver)
211213
}

0 commit comments

Comments
 (0)