Skip to content

Commit 8bee737

Browse files
committed
Replace use of PendingIntent with PendingIntentCompat
This ensures FLAG_MUTABLE/FLAG_IMMUTABLE are used as required by platform
1 parent 4099b31 commit 8bee737

File tree

11 files changed

+43
-37
lines changed

11 files changed

+43
-37
lines changed

play-services-core/src/main/java/org/microg/gms/gcm/McsService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import androidx.annotation.Nullable;
4444
import androidx.annotation.RequiresApi;
45+
import androidx.core.app.PendingIntentCompat;
4546
import androidx.legacy.content.WakefulBroadcastReceiver;
4647

4748
import com.squareup.wire.Message;
@@ -176,7 +177,7 @@ public void onCreate() {
176177
super.onCreate();
177178
TriggerReceiver.register(this);
178179
database = new GcmDatabase(this);
179-
heartbeatIntent = PendingIntent.getService(this, 0, new Intent(ACTION_HEARTBEAT, null, this, McsService.class), PendingIntent.FLAG_IMMUTABLE);
180+
heartbeatIntent = PendingIntentCompat.getService(this, 0, new Intent(ACTION_HEARTBEAT, null, this, McsService.class), 0, false);
180181
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
181182
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
182183
if (SDK_INT >= 23 && checkSelfPermission("android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST") == PackageManager.PERMISSION_GRANTED) {
@@ -267,7 +268,7 @@ public static void scheduleReconnect(Context context) {
267268
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
268269
long delay = getCurrentDelay();
269270
logd(context, "Scheduling reconnect in " + delay / 1000 + " seconds...");
270-
PendingIntent pi = PendingIntent.getBroadcast(context, 1, new Intent(ACTION_RECONNECT, null, context, TriggerReceiver.class), PendingIntent.FLAG_IMMUTABLE);
271+
PendingIntent pi = PendingIntentCompat.getBroadcast(context, 1, new Intent(ACTION_RECONNECT, null, context, TriggerReceiver.class), 0, false);
271272
if (SDK_INT >= 23) {
272273
alarmManager.setExactAndAllowWhileIdle(ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + delay, pi);
273274
} else {

play-services-core/src/main/kotlin/org/microg/gms/accountaction/AccountNotification.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.annotation.RequiresApi
1515
import androidx.core.app.ActivityCompat
1616
import androidx.core.app.NotificationCompat
1717
import androidx.core.app.NotificationManagerCompat
18+
import androidx.core.app.PendingIntentCompat
1819
import com.google.android.gms.R
1920
import org.microg.gms.auth.login.LoginActivity
2021

@@ -29,8 +30,8 @@ fun Context.sendAccountReAuthNotification(account: Account) {
2930
val intent = Intent(this, LoginActivity::class.java).apply {
3031
putExtra(LoginActivity.EXTRA_RE_AUTH_ACCOUNT, account)
3132
}.let {
32-
PendingIntent.getActivity(
33-
this, account.hashCode(), it, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT
33+
PendingIntentCompat.getActivity(
34+
this, account.hashCode(), it, PendingIntent.FLAG_CANCEL_CURRENT, false
3435
)
3536
}
3637

@@ -57,12 +58,13 @@ fun Context.sendAccountActionNotification(account: Account, action: UserSatisfyR
5758

5859
registerAccountNotificationChannel()
5960

60-
val intent: PendingIntent = AccountActionActivity.createIntent(this, account, action).let {
61-
PendingIntent.getActivity(
61+
val intent: PendingIntent? = AccountActionActivity.createIntent(this, account, action).let {
62+
PendingIntentCompat.getActivity(
6263
this,
6364
account.hashCode(),
6465
it,
65-
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT
66+
PendingIntent.FLAG_CANCEL_CURRENT,
67+
false
6668
)
6769
}
6870

play-services-core/src/main/kotlin/org/microg/gms/auth/folsom/KeyRetrievalService.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55

66
package org.microg.gms.auth.folsom
77

8-
import android.app.PendingIntent
9-
import android.app.PendingIntent.FLAG_IMMUTABLE
108
import android.app.PendingIntent.FLAG_UPDATE_CURRENT
119
import android.content.Context
1210
import android.content.Intent
1311
import android.os.Parcel
1412
import android.util.Log
13+
import androidx.core.app.PendingIntentCompat
1514
import com.google.android.gms.auth.folsom.RecoveryRequest
1615
import com.google.android.gms.auth.folsom.RecoveryResult
1716
import com.google.android.gms.auth.folsom.SharedKey
@@ -145,7 +144,7 @@ class KeyRetrievalServiceImpl(val context: Context) : IKeyRetrievalService.Stub(
145144
) {
146145
Log.d(TAG, "Not implemented startUxFlow accountName:$accountName type:$type metadata:$metadata")
147146
val intent = Intent().apply { setClassName(GMS_PACKAGE_NAME, GenericActivity::class.java.name) }
148-
val pendingIntent = PendingIntent.getActivity(context, 0, intent, FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE)
147+
val pendingIntent = PendingIntentCompat.getActivity(context, 0, intent, FLAG_UPDATE_CURRENT, false)
149148
val states = Status(CommonStatusCodes.SUCCESS, "UX flow PendingIntent retrieved.", pendingIntent)
150149
callback?.onResult(states)
151150
}

play-services-core/src/main/kotlin/org/microg/gms/gcm/GcmInGmsService.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import android.util.Log
2727
import androidx.core.app.ActivityCompat
2828
import androidx.core.app.NotificationCompat
2929
import androidx.core.app.NotificationManagerCompat
30+
import androidx.core.app.PendingIntentCompat
3031
import androidx.legacy.content.WakefulBroadcastReceiver
3132
import androidx.lifecycle.LifecycleService
3233
import androidx.lifecycle.lifecycleScope
@@ -214,7 +215,7 @@ class GcmInGmsService : LifecycleService() {
214215
intentExtras.forEach { putExtra(it.key, it.value_) }
215216
}
216217
val requestCode = intentExtras.hashCode()
217-
val pendingIntent = PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
218+
val pendingIntent = PendingIntentCompat.getActivity(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT, false)
218219
val builder = NotificationCompat.Builder(this, CHANNEL_ID)
219220
.setContentTitle(content.accountName)
220221
.setContentText(content.description)
@@ -250,7 +251,7 @@ class GcmInGmsService : LifecycleService() {
250251
val intent = Intent(GcmConstants.ACTION_GCM_SEND).apply {
251252
setPackage(Constants.GMS_PACKAGE_NAME)
252253
putExtras(extras)
253-
putExtra(GcmConstants.EXTRA_APP, Intent().apply { setPackage(Constants.GMS_PACKAGE_NAME) }.let { PendingIntent.getBroadcast(this@GcmInGmsService, 0, it, 0) })
254+
putExtra(GcmConstants.EXTRA_APP, Intent().apply { setPackage(Constants.GMS_PACKAGE_NAME) }.let { PendingIntentCompat.getBroadcast(this@GcmInGmsService, 0, it, 0, false) })
254255
}.also {
255256
it.putExtra(GcmConstants.EXTRA_MESSENGER, Messenger(object : Handler(Looper.getMainLooper()) {
256257
override fun handleMessage(msg: Message) {

play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/regular/Fido2AppService.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@
66
package org.microg.gms.fido.core.regular
77

88
import android.app.KeyguardManager
9-
import android.app.PendingIntent
10-
import android.app.PendingIntent.FLAG_IMMUTABLE
119
import android.app.PendingIntent.FLAG_UPDATE_CURRENT
1210
import android.content.Context
1311
import android.content.Context.KEYGUARD_SERVICE
1412
import android.content.Intent
1513
import android.os.Build.VERSION.SDK_INT
1614
import android.os.Parcel
15+
import androidx.core.app.PendingIntentCompat
1716
import androidx.lifecycle.Lifecycle
1817
import androidx.lifecycle.LifecycleOwner
1918
import androidx.lifecycle.lifecycleScope
@@ -64,7 +63,7 @@ class Fido2AppServiceImpl(private val context: Context, override val lifecycle:
6463
.putExtra(KEY_OPTIONS, options.serializeToBytes())
6564

6665
val pendingIntent =
67-
PendingIntent.getActivity(context, options.hashCode(), intent, FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE)
66+
PendingIntentCompat.getActivity(context, options.hashCode(), intent, FLAG_UPDATE_CURRENT, false)
6867
callbacks.onPendingIntent(Status.SUCCESS, pendingIntent)
6968
}
7069
}
@@ -78,7 +77,7 @@ class Fido2AppServiceImpl(private val context: Context, override val lifecycle:
7877
.putExtra(KEY_OPTIONS, options.serializeToBytes())
7978

8079
val pendingIntent =
81-
PendingIntent.getActivity(context, options.hashCode(), intent, FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE)
80+
PendingIntentCompat.getActivity(context, options.hashCode(), intent, FLAG_UPDATE_CURRENT, false)
8281
callbacks.onPendingIntent(Status.SUCCESS, pendingIntent)
8382
}
8483
}

vending-app/src/main/java/com/android/vending/licensing/LicenseServiceNotification.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.util.Log
1313
import androidx.core.app.ActivityCompat
1414
import androidx.core.app.NotificationCompat
1515
import androidx.core.app.NotificationManagerCompat
16+
import androidx.core.app.PendingIntentCompat
1617
import com.android.vending.R
1718
import java.util.TreeSet
1819

@@ -51,17 +52,17 @@ fun Context.sendLicenseServiceNotification(
5152
val authIntent = Intent(this, SignInReceiver::class.java).apply {
5253
putExtra(INTENT_KEY_NOTIFICATION_ID, callerUid)
5354
}.let {
54-
PendingIntent.getBroadcast(
55-
this, callerUid * 2, it, PendingIntent.FLAG_IMMUTABLE
55+
PendingIntentCompat.getBroadcast(
56+
this, callerUid * 2, it, 0, false
5657
)
5758
}
5859

5960
val ignoreIntent = Intent(this, IgnoreReceiver::class.java).apply {
6061
putExtra(INTENT_KEY_IGNORE_PACKAGE_NAME, callerPackageName)
6162
putExtra(INTENT_KEY_NOTIFICATION_ID, callerUid)
6263
}.let {
63-
PendingIntent.getBroadcast(
64-
this, callerUid * 2 + 1, it, PendingIntent.FLAG_MUTABLE
64+
PendingIntentCompat.getBroadcast(
65+
this, callerUid * 2 + 1, it, 0, true
6566
)
6667
}
6768

vending-app/src/main/java/org/microg/vending/billing/InAppBillingServiceImpl.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@
66
package org.microg.vending.billing
77

88
import android.accounts.Account
9-
import android.app.PendingIntent
109
import android.app.PendingIntent.FLAG_CANCEL_CURRENT
11-
import android.app.PendingIntent.FLAG_IMMUTABLE
1210
import android.content.Context
1311
import android.content.Intent
1412
import android.os.Bundle
1513
import android.util.Log
1614
import androidx.annotation.RequiresApi
15+
import androidx.core.app.PendingIntentCompat
1716
import androidx.core.os.bundleOf
1817
import com.android.billingclient.api.BillingClient.BillingResponseCode
1918
import com.android.billingclient.api.BillingClient.ProductType
@@ -350,7 +349,7 @@ class InAppBillingServiceImpl(private val context: Context) : IInAppBillingServi
350349
BuyFlowCacheEntry(packageName, account, buyFlowParams = params)
351350
val intent = Intent(context, InAppBillingHostActivity::class.java)
352351
intent.putExtra(KEY_IAP_SHEET_UI_PARAM, cacheEntryKey)
353-
val buyFlowPendingIntent = PendingIntent.getActivity(context, requestCode, intent, FLAG_CANCEL_CURRENT or FLAG_IMMUTABLE)
352+
val buyFlowPendingIntent = PendingIntentCompat.getActivity(context, requestCode, intent, FLAG_CANCEL_CURRENT, false)
354353
return resultBundle(BillingResponseCode.OK, "", bundleOf("BUY_INTENT" to buyFlowPendingIntent))
355354
}
356355

vending-app/src/main/kotlin/com/android/vending/installer/Install.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import android.content.pm.PackageManager
1616
import android.os.Build
1717
import android.util.Log
1818
import androidx.annotation.RequiresApi
19+
import androidx.core.app.PendingIntentCompat
1920
import androidx.core.content.pm.PackageInfoCompat
2021
import com.google.android.finsky.splitinstallservice.PackageComponent
2122
import kotlinx.coroutines.CompletableDeferred
@@ -191,10 +192,10 @@ private suspend fun Context.installPackagesInternal(
191192
val intent = Intent(this, SessionResultReceiver::class.java)
192193
intent.putExtra(SessionResultReceiver.KEY_NOTIFY_ID, notifyId)
193194
intent.putExtra(SessionResultReceiver.KEY_PACKAGE_NAME, packageName)
194-
val pendingIntent = PendingIntent.getBroadcast(
195+
val pendingIntent = PendingIntentCompat.getBroadcast(
195196
this, sessionId, intent,
196-
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
197-
)
197+
PendingIntent.FLAG_UPDATE_CURRENT, true
198+
)!!
198199

199200
emitProgress(notifyId, CommitingSession)
200201
session.commit(pendingIntent.intentSender)

vending-app/src/main/kotlin/com/android/vending/installer/SessionResultReceiver.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import android.os.Build
1515
import android.util.Log
1616
import androidx.annotation.RequiresApi
1717
import androidx.core.app.NotificationManagerCompat
18+
import androidx.core.app.PendingIntentCompat
1819
import androidx.core.content.ContextCompat
1920
import org.microg.vending.ui.notifyInstallPrompt
2021

@@ -84,9 +85,9 @@ internal class SessionResultReceiver : BroadcastReceiver() {
8485
val notificationManager = NotificationManagerCompat.from(context)
8586
notificationManager.cancel(notifyId)
8687
}
87-
val pendingIntent = PendingIntent.getBroadcast(
88+
val pendingIntent = PendingIntentCompat.getBroadcast(
8889
context, sessionId, intent,
89-
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
90+
PendingIntent.FLAG_UPDATE_CURRENT, true
9091
)
9192
val packageName = intent.getStringExtra(KEY_PACKAGE_NAME)
9293
Log.d(TAG, "handleKeyguardLocked: $packageName notifyId:$notifyId")
@@ -105,13 +106,13 @@ internal class SessionResultReceiver : BroadcastReceiver() {
105106
}
106107
}
107108

108-
val pendingInstallIntent = PendingIntent.getBroadcast(
109+
val pendingInstallIntent = PendingIntentCompat.getBroadcast(
109110
context.applicationContext,
110111
0,
111112
installIntent,
112-
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
113+
PendingIntent.FLAG_UPDATE_CURRENT, false
113114
)
114-
return pendingInstallIntent
115+
return pendingInstallIntent!!
115116
}
116117

117118
data class OnResult(

vending-app/src/main/kotlin/com/android/vending/installer/Uninstall.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import android.content.Context
1010
import android.content.Intent
1111
import android.content.pm.PackageInstaller
1212
import androidx.annotation.RequiresApi
13+
import androidx.core.app.PendingIntentCompat
1314
import kotlinx.coroutines.CompletableDeferred
1415

1516
@RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP)
@@ -26,15 +27,15 @@ suspend fun Context.uninstallPackage(packageName: String) {
2627
)
2728

2829
installer.uninstall(
29-
packageName, PendingIntent.getBroadcast(
30+
packageName, PendingIntentCompat.getBroadcast(
3031
this, session, Intent(this, SessionResultReceiver::class.java).apply {
3132
// for an unknown reason, the session ID is not added to the response automatically :(
3233
putExtra(PackageInstaller.EXTRA_SESSION_ID, session)
3334
},
34-
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
35-
).intentSender
35+
PendingIntent.FLAG_UPDATE_CURRENT, true
36+
)!!.intentSender
3637
)
3738

3839
deferred.await()
3940

40-
}
41+
}

0 commit comments

Comments
 (0)