package com.simplecity.amp_library.services; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import com.google.android.apps.dashclock.api.DashClockExtension; import com.google.android.apps.dashclock.api.ExtensionData; import com.simplecity.amp_library.R; import com.simplecity.amp_library.playback.MusicService; import com.simplecity.amp_library.ui.activities.MainActivity; /** * @see <a href="https://code.google.com/p/dashclock/">DashClock</a> */ public class DashClockService extends DashClockExtension { /** * Used to display the data in on the DashClock widgetUsed to display the * data in on the DashClock widget */ private final ExtensionData mExtensionData = new ExtensionData(); /** * The {@link android.content.IntentFilter} used to monitor specific playback changes from * Shuttle's Service */ private final IntentFilter mFilter = new IntentFilter(); /** * Determines if the DashClock widget has been initialized */ boolean mIsInitialized; /** * Determines if music is currently playing */ boolean mIsPlaying; /** * The {@link Intent} invoked when the widget it touched */ private Intent mIntent; @Override public void onCreate() { super.onCreate(); mIntent = new Intent(this, MainActivity.class); mFilter.addAction(MusicService.InternalIntents.PLAY_STATE_CHANGED); mFilter.addAction(MusicService.InternalIntents.META_CHANGED); registerReceiver(mStatusListener, mFilter); } @Override protected void onInitialize(boolean isReconnect) { mIsInitialized = true; super.onInitialize(isReconnect); } @Override public void onDestroy() { mIsInitialized = false; unregisterReceiver(mStatusListener); super.onDestroy(); } /** * The {@link BroadcastReceiver} used to retrieve the current track's * information */ private final BroadcastReceiver mStatusListener = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!mIsInitialized) { return; } final Bundle extras = intent.getExtras(); mIsPlaying = extras.getBoolean("playing", false); if (!mIsPlaying) { publishUpdate(null); } else { final String artist = extras.getString("artist"); final String album = extras.getString("album"); final String track = extras.getString("track"); publishUpdate(artist, album, track); } } }; /** * Notify DashClock of the changes */ void publishUpdate(String artist, String album, String track) { if (artist == null || album == null || track == null) { return; } // Publish the extension data update publishUpdate(mExtensionData .visible(true) .icon(R.drawable.ic_headphones_white).status(track) .expandedTitle(track).expandedBody(artist + " - " + album) .clickIntent(mIntent)); } @Override protected void onUpdateData(int reason) { // Nothing to do } }