Android Open Source - GlassTunes Metadata Updater Callback






From Project

Back to project page GlassTunes.

License

The source code is released under:

Apache License

If you think the Android project GlassTunes listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*  
 * Copyright (C) 2013 by Alexander Leontev
 *//from   w w  w.  j  a  v  a2  s.  com
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
package com.woodblockwithoutco.remotemetadataprovider.internal;

import java.util.ArrayList;
import java.util.List;

import com.woodblockwithoutco.remotemetadataprovider.media.RemoteMetadataProvider;
import com.woodblockwithoutco.remotemetadataprovider.media.enums.PlayState;
import com.woodblockwithoutco.remotemetadataprovider.media.enums.RemoteControlFeature;

import android.app.PendingIntent;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.media.RemoteControlClient;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

/**
 * Implementation of Handler.Callback interface to transfer necessary data to
 * RemoteMetadataProvider. Shouldn't be used explicitly by user.
 */
public class MetadataUpdaterCallback implements Handler.Callback {

  /*
   * Information about current client.
   */
  private int mGenerationId;
  private Bitmap mPrevBitmap = null;
  private List<RemoteControlFeature> mFeatureList = null;
  private RemoteMetadataProvider mMetadataProvider;

  public MetadataUpdaterCallback(RemoteMetadataProvider metadataProvider) {
    mMetadataProvider = metadataProvider;
    mFeatureList = new ArrayList<RemoteControlFeature>();
  }

  /**
   * @param bundle
   * @param key
   * @return Will return null if we request duration.
   */
  private String getMetadataString(Bundle bundle, int key) {
    if (key != MediaMetadataRetriever.METADATA_KEY_DURATION) {
      return bundle.getString(String.valueOf(key));
    } else {
      return null;
    }
  }

  private long getDuration(Bundle bundle) {
    return bundle.getLong(String.valueOf(MediaMetadataRetriever.METADATA_KEY_DURATION));
  }

  @Override
  public boolean handleMessage(Message msg) {
    switch (msg.what) {
    case RemoteControlDisplay.MSG_SET_GENERATION_ID:
      mGenerationId = msg.arg1;
      mMetadataProvider.setCurrentClientPendingIntent((PendingIntent) msg.obj);
      return true;
    case RemoteControlDisplay.MSG_SET_METADATA:
      if (mGenerationId == msg.arg1) {
        if (mMetadataProvider.getOnMetadataChangeListener() != null) {
          Bundle metadata = (Bundle) msg.obj;
          mMetadataProvider.getOnMetadataChangeListener().onMetadataChanged(getMetadataString(metadata, MediaMetadataRetriever.METADATA_KEY_ARTIST), getMetadataString(metadata, MediaMetadataRetriever.METADATA_KEY_TITLE), getMetadataString(metadata, MediaMetadataRetriever.METADATA_KEY_ALBUM), getMetadataString(metadata, MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST), getDuration(metadata));
        }
      }
      return true;
    case RemoteControlDisplay.MSG_SET_TRANSPORT_CONTROLS:
      if (mGenerationId == msg.arg1) {
        if (mMetadataProvider.getOnRemoteControlFlagsChangeListener() != null) {
          int flags = msg.arg2;
          mFeatureList.clear();
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_FAST_FORWARD) == flags) mFeatureList.add(RemoteControlFeature.USES_FAST_FORWARD);
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_NEXT) == flags) mFeatureList.add(RemoteControlFeature.USES_NEXT);
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE) == flags) mFeatureList.add(RemoteControlFeature.USES_PAUSE);
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_PLAY) == flags) mFeatureList.add(RemoteControlFeature.USES_PLAY);
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE) == flags) mFeatureList.add(RemoteControlFeature.USES_PLAY_PAUSE);
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS) == flags) mFeatureList.add(RemoteControlFeature.USES_PREVIOUS);
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_REWIND) == flags) mFeatureList.add(RemoteControlFeature.USES_REWIND);
          if ((flags | RemoteControlClient.FLAG_KEY_MEDIA_STOP) == flags) mFeatureList.add(RemoteControlFeature.USES_STOP);
          mMetadataProvider.getOnRemoteControlFlagsChangeListener().onFeaturesChanged(mFeatureList);
        }
      }
      return true;
    case RemoteControlDisplay.MSG_SET_ARTWORK:
      if (mGenerationId == msg.arg1) {
        if (mMetadataProvider.getOnArtworkChangeListener() != null) {
          if (mPrevBitmap != null) {
            mPrevBitmap.recycle();
          }
          mPrevBitmap = (Bitmap) msg.obj;
          mMetadataProvider.getOnArtworkChangeListener().onArtworkChanged(mPrevBitmap);
        }
      }
      return true;
    case RemoteControlDisplay.MSG_UPDATE_STATE:
      if (mGenerationId == msg.arg1) {
        if (mMetadataProvider.getOnPlaybackStateChangeListener() != null) {
          switch (msg.arg2) {
          case RemoteControlClient.PLAYSTATE_BUFFERING:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.BUFFERING);
            break;
          case RemoteControlClient.PLAYSTATE_ERROR:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.ERROR);
            break;
          case RemoteControlClient.PLAYSTATE_FAST_FORWARDING:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.FAST_FORWARDING);
            break;
          case RemoteControlClient.PLAYSTATE_PAUSED:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.PAUSED);
            break;
          case RemoteControlClient.PLAYSTATE_PLAYING:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.PLAYING);
            break;
          case RemoteControlClient.PLAYSTATE_REWINDING:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.REWINDING);
            break;
          case RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.SKIPPING_BACKWARDS);
            break;
          case RemoteControlClient.PLAYSTATE_SKIPPING_FORWARDS:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.SKIPPING_FORWARDS);
            break;
          case RemoteControlClient.PLAYSTATE_STOPPED:
            mMetadataProvider.getOnPlaybackStateChangeListener().onPlaybackStateChanged(PlayState.STOPPED);
            break;
          }
        }
      }
      return true;
    }
    return false;
  }
}




Java Source Code List

com.glasstunes.BaseContentCardActivity.java
com.glasstunes.BrowseActivity.java
com.glasstunes.ConfirmationActivity.java
com.glasstunes.ControlsActivity.java
com.glasstunes.Debug.java
com.glasstunes.DetailActivity.java
com.glasstunes.GlassTunesApp.java
com.glasstunes.HeaderActivity.java
com.glasstunes.LauncherActivity.java
com.glasstunes.NowPlayingActivity.java
com.glasstunes.cards.ActionCard.java
com.glasstunes.cards.BrowseCard.java
com.glasstunes.cards.ContentCard.java
com.glasstunes.cards.HeaderCard.java
com.glasstunes.cards.LauncherCard.java
com.glasstunes.cards.NowPlayingCard.java
com.glasstunes.cards.PausePlayCard.java
com.glasstunes.cards.SkipNextCard.java
com.glasstunes.cards.SkipPreviousCard.java
com.glasstunes.controller.LocalMusicController.java
com.glasstunes.controller.MusicController.java
com.glasstunes.screenslide.BasicCardFragment.java
com.glasstunes.screenslide.BasicCardPagerAdapter.java
com.glasstunes.screenslide.BounceBackViewPager.java
com.glasstunes.screenslide.CardFragment.java
com.glasstunes.screenslide.ContextWrapperEdgeEffect.java
com.glasstunes.screenslide.ScreenSlideActivity.java
com.glasstunes.screenslide.ScreenSlidePagerAdapter.java
com.glasstunes.view.RobotoTypefaces.java
com.glasstunes.view.SliderView.java
com.glasstunes.view.TypophileTextView.java
com.viewpagerindicator.CirclePageIndicator.java
com.viewpagerindicator.IconPageIndicator.java
com.viewpagerindicator.IconPagerAdapter.java
com.viewpagerindicator.IcsLinearLayout.java
com.viewpagerindicator.LinePageIndicator.java
com.viewpagerindicator.PageIndicator.java
com.viewpagerindicator.TabPageIndicator.java
com.viewpagerindicator.TitlePageIndicator.java
com.viewpagerindicator.UnderlinePageIndicator.java
com.woodblockwithoutco.remotemetadataprovider.internal.MetadataUpdaterCallback.java
com.woodblockwithoutco.remotemetadataprovider.internal.RemoteControlDisplay.java
com.woodblockwithoutco.remotemetadataprovider.media.RemoteMetadataProvider.java
com.woodblockwithoutco.remotemetadataprovider.media.enums.MediaCommand.java
com.woodblockwithoutco.remotemetadataprovider.media.enums.PlayState.java
com.woodblockwithoutco.remotemetadataprovider.media.enums.RemoteControlFeature.java
com.woodblockwithoutco.remotemetadataprovider.media.listeners.OnArtworkChangeListener.java
com.woodblockwithoutco.remotemetadataprovider.media.listeners.OnMetadataChangeListener.java
com.woodblockwithoutco.remotemetadataprovider.media.listeners.OnPlaybackStateChangeListener.java
com.woodblockwithoutco.remotemetadataprovider.media.listeners.OnRemoteControlFeaturesChangeListener.java