Merge pull request #2749 from Isira-Seneviratne/PendingIntentCompat_helpers

Add PendingIntentCompat helper methods.
This commit is contained in:
Bnyro 2023-01-18 09:42:24 +01:00 committed by GitHub
commit 7151361fdb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 48 additions and 48 deletions

View File

@ -1,20 +1,30 @@
package com.github.libretube.compat package com.github.libretube.compat
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build import android.os.Build
// TODO: Use AndroidX's PendingIntentCompat class instead once it becomes available.
object PendingIntentCompat { object PendingIntentCompat {
val updateCurrentFlags: Int private fun addImmutabilityFlag(flags: Int): Int {
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
(PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) flags or PendingIntent.FLAG_IMMUTABLE
} else { } else {
PendingIntent.FLAG_UPDATE_CURRENT flags
} }
}
val cancelCurrentFlags: Int fun getActivity(context: Context, requestCode: Int, intent: Intent, flags: Int): PendingIntent {
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return PendingIntent.getActivity(context, requestCode, intent, addImmutabilityFlag(flags))
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT }
} else {
PendingIntent.FLAG_CANCEL_CURRENT fun getBroadcast(
} context: Context,
requestCode: Int,
intent: Intent,
flags: Int
): PendingIntent {
return PendingIntent.getBroadcast(context, requestCode, intent, addImmutabilityFlag(flags))
}
} }

View File

@ -367,15 +367,13 @@ class DownloadService : Service() {
} }
private fun getNotificationBuilder(item: DownloadItem): NotificationCompat.Builder { private fun getNotificationBuilder(item: DownloadItem): NotificationCompat.Builder {
val activityIntent = val activityIntent = PendingIntentCompat.getActivity(
PendingIntent.getActivity( this@DownloadService,
this@DownloadService, 0,
0, Intent(this@DownloadService, MainActivity::class.java)
Intent(this@DownloadService, MainActivity::class.java).apply { .putExtra("fragmentToOpen", "downloads"),
putExtra("fragmentToOpen", "downloads") PendingIntent.FLAG_CANCEL_CURRENT
}, )
PendingIntentCompat.cancelCurrentFlags
)
return NotificationCompat return NotificationCompat
.Builder(this, DOWNLOAD_CHANNEL_ID) .Builder(this, DOWNLOAD_CHANNEL_ID)
@ -434,20 +432,19 @@ class DownloadService : Service() {
return NotificationCompat.Action.Builder( return NotificationCompat.Action.Builder(
R.drawable.ic_play, R.drawable.ic_play,
getString(R.string.resume), getString(R.string.resume),
PendingIntent.getBroadcast(this, id, intent, PendingIntentCompat.updateCurrentFlags) PendingIntentCompat.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT)
).build() ).build()
} }
private fun getPauseAction(id: Int): NotificationCompat.Action { private fun getPauseAction(id: Int): NotificationCompat.Action {
val intent = Intent(this, NotificationReceiver::class.java).apply { val intent = Intent(this, NotificationReceiver::class.java)
action = ACTION_DOWNLOAD_PAUSE .setAction(ACTION_DOWNLOAD_PAUSE)
putExtra("id", id) .putExtra("id", id)
}
return NotificationCompat.Action.Builder( return NotificationCompat.Action.Builder(
R.drawable.ic_pause, R.drawable.ic_pause,
getString(R.string.pause), getString(R.string.pause),
PendingIntent.getBroadcast(this, id, intent, PendingIntentCompat.updateCurrentFlags) PendingIntentCompat.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT)
).build() ).build()
} }

View File

@ -70,7 +70,7 @@ class NowPlayingNotification(
* overrides the action when clicking the notification * overrides the action when clicking the notification
*/ */
@SuppressLint("UnspecifiedImmutableFlag") @SuppressLint("UnspecifiedImmutableFlag")
override fun createCurrentContentIntent(player: Player): PendingIntent? { override fun createCurrentContentIntent(player: Player): PendingIntent {
// starts a new MainActivity Intent when the player notification is clicked // starts a new MainActivity Intent when the player notification is clicked
// it doesn't start a completely new MainActivity because the MainActivity's launchMode // it doesn't start a completely new MainActivity because the MainActivity's launchMode
// is set to "singleTop" in the AndroidManifest (important!!!) // is set to "singleTop" in the AndroidManifest (important!!!)
@ -81,11 +81,11 @@ class NowPlayingNotification(
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
} }
} }
return PendingIntent.getActivity( return PendingIntentCompat.getActivity(
context, context,
0, 0,
intent, intent,
PendingIntentCompat.updateCurrentFlags PendingIntent.FLAG_UPDATE_CURRENT
) )
} }
@ -155,12 +155,12 @@ class NowPlayingNotification(
} }
private fun createNotificationAction(drawableRes: Int, actionName: String, instanceId: Int): NotificationCompat.Action { private fun createNotificationAction(drawableRes: Int, actionName: String, instanceId: Int): NotificationCompat.Action {
val intent: Intent = Intent(actionName).setPackage(context.packageName) val intent = Intent(actionName).setPackage(context.packageName)
val pendingIntent = PendingIntent.getBroadcast( val pendingIntent = PendingIntentCompat.getBroadcast(
context, context,
instanceId, instanceId,
intent, intent,
PendingIntentCompat.cancelCurrentFlags PendingIntent.FLAG_CANCEL_CURRENT
) )
return NotificationCompat.Action.Builder(drawableRes, actionName, pendingIntent).build() return NotificationCompat.Action.Builder(drawableRes, actionName, pendingIntent).build()
} }

View File

@ -358,22 +358,14 @@ object PlayerHelper {
return context.packageName + "." + ACTION_MEDIA_CONTROL return context.packageName + "." + ACTION_MEDIA_CONTROL
} }
@RequiresApi(Build.VERSION_CODES.O)
private fun getPendingIntent(activity: Activity, code: Int): PendingIntent { private fun getPendingIntent(activity: Activity, code: Int): PendingIntent {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return PendingIntent.getBroadcast(
PendingIntent.getBroadcast( activity,
activity, code,
code, Intent(getIntentActon(activity)).putExtra(CONTROL_TYPE, code),
Intent(getIntentActon(activity)).putExtra(CONTROL_TYPE, code), PendingIntent.FLAG_IMMUTABLE
PendingIntent.FLAG_IMMUTABLE )
)
} else {
PendingIntent.getBroadcast(
activity,
code,
Intent(getIntentActon(activity)).putExtra(CONTROL_TYPE, code),
0
)
}
} }
@RequiresApi(Build.VERSION_CODES.O) @RequiresApi(Build.VERSION_CODES.O)

View File

@ -12,6 +12,7 @@ import androidx.work.Worker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.SubscriptionHelper import com.github.libretube.api.SubscriptionHelper
import com.github.libretube.compat.PendingIntentCompat
import com.github.libretube.constants.DOWNLOAD_PROGRESS_NOTIFICATION_ID import com.github.libretube.constants.DOWNLOAD_PROGRESS_NOTIFICATION_ID
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.constants.PUSH_CHANNEL_ID import com.github.libretube.constants.PUSH_CHANNEL_ID
@ -173,11 +174,11 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
} }
} }
val pendingIntent: PendingIntent = PendingIntent.getActivity( val pendingIntent = PendingIntentCompat.getActivity(
applicationContext, applicationContext,
notificationId, notificationId,
intent, intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE PendingIntent.FLAG_UPDATE_CURRENT
) )
val builder = NotificationCompat.Builder(applicationContext, PUSH_CHANNEL_ID) val builder = NotificationCompat.Builder(applicationContext, PUSH_CHANNEL_ID)