Add Quick Settings tile (#6006)
This commit is contained in:
parent
fcce8e9e0e
commit
a528e8adfd
@ -119,6 +119,7 @@
|
||||
<intent-filter>
|
||||
<action android:name="de.danoeh.antennapod.intents.MAIN_ACTIVITY" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools" package="de.danoeh.antennapod.core">
|
||||
xmlns:tools="http://schemas.android.com/tools" package="de.danoeh.antennapod.core">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
@ -46,6 +46,19 @@
|
||||
android:label="@string/feed_update_receiver_name"
|
||||
android:exported="true"
|
||||
tools:ignore="ExportedReceiver" /> <!-- allow feeds update to be triggered by external apps -->
|
||||
|
||||
<service
|
||||
android:name=".service.QuickSettingsTileService"
|
||||
android:enabled="true"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name"
|
||||
android:icon="@drawable/ic_notification"
|
||||
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
|
||||
<intent-filter>
|
||||
<action android:name="android.service.quicksettings.action.QS_TILE" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.service.quicksettings.ACTIVE_TILE" android:value="true" />
|
||||
</service>
|
||||
</application>
|
||||
|
||||
<queries>
|
||||
|
@ -0,0 +1,65 @@
|
||||
package de.danoeh.antennapod.core.service;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import android.service.quicksettings.Tile;
|
||||
import android.service.quicksettings.TileService;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
||||
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
public class QuickSettingsTileService extends TileService {
|
||||
|
||||
private static final String TAG = "QuickSettingsTileSvc";
|
||||
|
||||
@Override
|
||||
public void onTileAdded() {
|
||||
super.onTileAdded();
|
||||
updateTile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick() {
|
||||
super.onClick();
|
||||
Intent intent = new Intent(this, MediaButtonReceiver.class);
|
||||
intent.setAction(MediaButtonReceiver.NOTIFY_BUTTON_RECEIVER);
|
||||
intent.putExtra(Intent.EXTRA_KEY_EVENT,
|
||||
new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE));
|
||||
sendBroadcast(intent);
|
||||
}
|
||||
|
||||
// Update the tile status when TileService.requestListeningState() is called elsewhere
|
||||
@Override
|
||||
public void onStartListening() {
|
||||
super.onStartListening();
|
||||
updateTile();
|
||||
}
|
||||
|
||||
// Without this, the tile may not be in the correct state after boot
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
TileService.requestListeningState(this, new ComponentName(this, QuickSettingsTileService.class));
|
||||
return super.onBind(intent);
|
||||
}
|
||||
|
||||
public void updateTile() {
|
||||
Tile qsTile = getQsTile();
|
||||
if (qsTile == null) {
|
||||
Log.d(TAG, "Ignored call to update QS tile: getQsTile() returned null.");
|
||||
} else {
|
||||
boolean isPlaying = PlaybackService.isRunning
|
||||
&& PlaybackPreferences.getCurrentPlayerStatus()
|
||||
== PlaybackPreferences.PLAYER_STATUS_PLAYING;
|
||||
qsTile.setState(isPlaying ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
|
||||
qsTile.updateTile();
|
||||
}
|
||||
}
|
||||
}
|
@ -22,6 +22,7 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.os.Vibrator;
|
||||
import android.service.quicksettings.TileService;
|
||||
import android.support.v4.media.MediaBrowserCompat;
|
||||
import android.support.v4.media.MediaDescriptionCompat;
|
||||
import android.support.v4.media.MediaMetadataCompat;
|
||||
@ -44,6 +45,7 @@ import androidx.core.app.NotificationManagerCompat;
|
||||
import androidx.media.MediaBrowserServiceCompat;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import de.danoeh.antennapod.core.service.QuickSettingsTileService;
|
||||
import de.danoeh.antennapod.event.playback.BufferUpdateEvent;
|
||||
import de.danoeh.antennapod.event.playback.PlaybackServiceEvent;
|
||||
import de.danoeh.antennapod.event.PlayerErrorEvent;
|
||||
@ -846,6 +848,11 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||
break;
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
TileService.requestListeningState(getApplicationContext(),
|
||||
new ComponentName(getApplicationContext(), QuickSettingsTileService.class));
|
||||
}
|
||||
|
||||
IntentUtils.sendLocalBroadcast(getApplicationContext(), ACTION_PLAYER_STATUS_CHANGED);
|
||||
bluetoothNotifyChange(newInfo, AVRCP_ACTION_PLAYER_STATUS_CHANGED);
|
||||
bluetoothNotifyChange(newInfo, AVRCP_ACTION_META_CHANGED);
|
||||
|
Loading…
x
Reference in New Issue
Block a user