Skip to content

Commit

Permalink
Issue square#2079. Make PendingIntent mutability explicit, to fix a c…
Browse files Browse the repository at this point in the history
…rash when targeting Android 12
  • Loading branch information
ihrupin committed Mar 18, 2021
1 parent 5ba7585 commit d93e0ab
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
Expand Up @@ -4,6 +4,7 @@ import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Build.VERSION.SDK_INT
import leakcanary.internal.NotificationReceiver.Action.CANCEL_NOTIFICATION
import leakcanary.internal.NotificationReceiver.Action.DUMP_HEAP
import shark.SharkLog
Expand Down Expand Up @@ -39,7 +40,12 @@ internal class NotificationReceiver : BroadcastReceiver() {
): PendingIntent {
val broadcastIntent = Intent(context, NotificationReceiver::class.java)
broadcastIntent.action = action.name
return PendingIntent.getBroadcast(context, 0, broadcastIntent, 0)
val flags = if (SDK_INT > 30) {
0 or PendingIntent.FLAG_IMMUTABLE
} else {
0
}
return PendingIntent.getBroadcast(context, 0, broadcastIntent, flags)
}
}
}
Expand Up @@ -20,13 +20,15 @@ import android.annotation.TargetApi
import android.app.Activity
import android.app.PendingIntent
import android.app.PendingIntent.FLAG_UPDATE_CURRENT
import android.app.PendingIntent.FLAG_IMMUTABLE
import android.content.Context
import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Build.VERSION_CODES.M
import android.os.Bundle
import android.os.Build.VERSION.SDK_INT
import android.widget.Toast
import android.widget.Toast.LENGTH_LONG
import com.squareup.leakcanary.core.R
Expand Down Expand Up @@ -74,7 +76,12 @@ internal class RequestStoragePermissionActivity : Activity() {
fun createPendingIntent(context: Context): PendingIntent {
val intent = Intent(context, RequestStoragePermissionActivity::class.java)
intent.flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TOP
return PendingIntent.getActivity(context, 1, intent, FLAG_UPDATE_CURRENT)
val flags = if (SDK_INT > 30) {
FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE
} else {
FLAG_UPDATE_CURRENT
}
return PendingIntent.getActivity(context, 1, intent, flags)
}
}
}
Expand Up @@ -6,6 +6,7 @@ import android.content.Intent
import android.net.Uri
import android.os.AsyncTask
import android.os.Bundle
import android.os.Build.VERSION.SDK_INT
import android.view.View
import com.squareup.leakcanary.core.R
import leakcanary.internal.HeapAnalyzerService
Expand Down Expand Up @@ -178,7 +179,12 @@ internal class LeakActivity : NavigatingActivity() {
val intent = Intent(context, LeakActivity::class.java)
intent.putExtra("screens", screens)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
return PendingIntent.getActivity(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)
val flags = if (SDK_INT > 30) {
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
} else {
PendingIntent.FLAG_UPDATE_CURRENT
}
return PendingIntent.getActivity(context, 1, intent, flags)
}

fun createIntent(context: Context): Intent {
Expand Down

0 comments on commit d93e0ab

Please sign in to comment.