Request notification permission when starting session demo app

#minor-release

PiperOrigin-RevId: 572556101
This commit is contained in:
ibaker 2023-10-11 06:25:44 -07:00 committed by Copybara-Service
parent 4dc3db4da3
commit c7a091a973
4 changed files with 44 additions and 3 deletions

View File

@ -15,8 +15,11 @@
*/
package androidx.media3.demo.session
import android.Manifest
import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
@ -25,6 +28,7 @@ import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
@ -81,6 +85,14 @@ class MainActivity : AppCompatActivity() {
}
}
)
if (
Build.VERSION.SDK_INT >= 33 &&
checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) !=
PackageManager.PERMISSION_GRANTED
) {
requestPermissions(arrayOf(Manifest.permission.POST_NOTIFICATIONS), /* requestCode= */ 0)
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
@ -101,6 +113,23 @@ class MainActivity : AppCompatActivity() {
super.onStop()
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (grantResults.isEmpty()) {
// Empty results are triggered if a permission is requested while another request was already
// pending and can be safely ignored in this case.
return
}
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(applicationContext, R.string.notification_permission_denied, Toast.LENGTH_LONG)
.show()
}
}
private fun initializeBrowser() {
browserFuture =
MediaBrowser.Builder(

View File

@ -21,4 +21,6 @@
<string name="shuffle">Shuffle</string>
<string name="play_button">Play</string>
<string name="waiting_for_metadata">Waiting for playlist to load…</string>
<string name="notification_permission_denied">
"Without notification access the app can't warn about failed background operations"</string>
</resources>

View File

@ -13,6 +13,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest package="androidx.media3.demo.session.service">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="androidx.media3.demo.session.service">
<uses-sdk />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
</manifest>

View File

@ -15,11 +15,12 @@
*/
package androidx.media3.demo.session
import android.annotation.SuppressLint
import android.Manifest
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import androidx.annotation.OptIn
import androidx.core.app.NotificationCompat
@ -136,8 +137,15 @@ open class DemoPlaybackService : MediaLibraryService() {
* by a media controller to resume playback when the {@link MediaSessionService} is in the
* background.
*/
@SuppressLint("MissingPermission") // TODO: b/280766358 - Request this permission at runtime.
override fun onForegroundServiceStartNotAllowedException() {
if (
Build.VERSION.SDK_INT >= 33 &&
checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) !=
PackageManager.PERMISSION_GRANTED
) {
// Notification permission is required but not granted
return
}
val notificationManagerCompat = NotificationManagerCompat.from(this@DemoPlaybackService)
ensureNotificationChannel(notificationManagerCompat)
val builder =