package com.glasstunes; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; import android.app.Application; import com.woodblockwithoutco.remotemetadataprovider.media.RemoteMetadataProvider; import com.woodblockwithoutco.remotemetadataprovider.media.enums.PlayState; import com.woodblockwithoutco.remotemetadataprovider.media.listeners.OnPlaybackStateChangeListener; public class GlassTunesApp extends Application implements OnPlaybackStateChangeListener { private RemoteMetadataProvider mMetadataProvider; List<WeakReference<OnPlaybackStateChangeListener>> mPlaybackStateChangeListeners = new ArrayList<WeakReference<OnPlaybackStateChangeListener>>(); private PlayState mCurrentState = PlayState.STOPPED; @Override public void onCreate() { super.onCreate(); mMetadataProvider = RemoteMetadataProvider.getInstance(this); mMetadataProvider.setOnPlaybackStateChangeListener(this); mMetadataProvider.acquireRemoteControls(); } public void addOnPlaybackStateChangedListener( OnPlaybackStateChangeListener listener) { mPlaybackStateChangeListeners .add(new WeakReference<OnPlaybackStateChangeListener>(listener)); listener.onPlaybackStateChanged(mCurrentState); } @Override public void onPlaybackStateChanged(PlayState playbackState) { for (WeakReference<OnPlaybackStateChangeListener> ref : mPlaybackStateChangeListeners) { OnPlaybackStateChangeListener listener = ref.get(); if (listener != null) { listener.onPlaybackStateChanged(playbackState); } else { mPlaybackStateChangeListeners.remove(ref); } } mCurrentState = playbackState; } public void removeOnPlaybackStateChangedListener( OnPlaybackStateChangeListener listener) { for (int i = mPlaybackStateChangeListeners.size() - 1; i >= 0; i--) { WeakReference<OnPlaybackStateChangeListener> ref = mPlaybackStateChangeListeners .get(i); OnPlaybackStateChangeListener item = ref.get(); if (item == null || item.equals(listener)) { mPlaybackStateChangeListeners.remove(i); } } } }