Add Quick Settings tile (#6006)
This commit is contained in:
parent
fcce8e9e0e
commit
a528e8adfd
@ -119,6 +119,7 @@
|
|||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="de.danoeh.antennapod.intents.MAIN_ACTIVITY" />
|
<action android:name="de.danoeh.antennapod.intents.MAIN_ACTIVITY" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
@ -46,6 +46,19 @@
|
|||||||
android:label="@string/feed_update_receiver_name"
|
android:label="@string/feed_update_receiver_name"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
tools:ignore="ExportedReceiver" /> <!-- allow feeds update to be triggered by external apps -->
|
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>
|
</application>
|
||||||
|
|
||||||
<queries>
|
<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.Bundle;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
|
import android.service.quicksettings.TileService;
|
||||||
import android.support.v4.media.MediaBrowserCompat;
|
import android.support.v4.media.MediaBrowserCompat;
|
||||||
import android.support.v4.media.MediaDescriptionCompat;
|
import android.support.v4.media.MediaDescriptionCompat;
|
||||||
import android.support.v4.media.MediaMetadataCompat;
|
import android.support.v4.media.MediaMetadataCompat;
|
||||||
@ -44,6 +45,7 @@ import androidx.core.app.NotificationManagerCompat;
|
|||||||
import androidx.media.MediaBrowserServiceCompat;
|
import androidx.media.MediaBrowserServiceCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.core.service.QuickSettingsTileService;
|
||||||
import de.danoeh.antennapod.event.playback.BufferUpdateEvent;
|
import de.danoeh.antennapod.event.playback.BufferUpdateEvent;
|
||||||
import de.danoeh.antennapod.event.playback.PlaybackServiceEvent;
|
import de.danoeh.antennapod.event.playback.PlaybackServiceEvent;
|
||||||
import de.danoeh.antennapod.event.PlayerErrorEvent;
|
import de.danoeh.antennapod.event.PlayerErrorEvent;
|
||||||
@ -846,6 +848,11 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
|||||||
break;
|
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);
|
IntentUtils.sendLocalBroadcast(getApplicationContext(), ACTION_PLAYER_STATUS_CHANGED);
|
||||||
bluetoothNotifyChange(newInfo, AVRCP_ACTION_PLAYER_STATUS_CHANGED);
|
bluetoothNotifyChange(newInfo, AVRCP_ACTION_PLAYER_STATUS_CHANGED);
|
||||||
bluetoothNotifyChange(newInfo, AVRCP_ACTION_META_CHANGED);
|
bluetoothNotifyChange(newInfo, AVRCP_ACTION_META_CHANGED);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user