/* * Copyright 2016 Substance Mobile * * 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.animbus.music.ui.activity.nowPlaying; import android.app.ActivityManager; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.design.widget.CollapsingToolbarLayout; import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v4.view.ViewCompat; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.afollestad.appthemeengine.Config; import com.afollestad.appthemeengine.customizers.ATEStatusBarCustomizer; import com.afollestad.appthemeengine.util.ATEUtil; import com.animbus.music.R; import com.animbus.music.media.PlaybackRemote; import com.animbus.music.media.objects.Song; import com.animbus.music.ui.activity.settings.Settings; import com.animbus.music.ui.custom.activity.ThemeActivity; import com.animbus.music.ui.custom.view.MusicControlsView; import com.animbus.music.ui.list.ListAdapter; import com.animbus.music.util.IconManager; public class NowPlaying extends ThemeActivity implements PlaybackRemote.SongChangedListener, ATEStatusBarCustomizer { CollapsingToolbarLayout mCollapsingToolbar; RecyclerView mList; Song mSong; LinearLayout mControlsRoot; MusicControlsView mControls; @Override protected int getLayout() { return R.layout.activity_now_playing; } private void configureTransition() { ViewCompat.setTransitionName(findViewById(R.id.now_playing_album_art), "art"); ViewCompat.setTransitionName(findViewById(R.id.now_playing_recycler), "list"); ViewCompat.setTransitionName(findViewById(R.id.now_playing_controls_root), "controls"); ViewCompat.setTransitionName(findViewById(R.id.toolbar), "appbar"); ViewCompat.setTransitionName(findViewById(R.id.now_playing_toolbar_text_protection), "appbar_text_protection"); ViewCompat.setTransitionName(findViewById(R.id.current_song_title), "title"); ViewCompat.setTransitionName(findViewById(R.id.current_song_artist), "artist"); } @Override protected void setVariables() { mCollapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.now_playing_collapsing_toolbar); mList = (RecyclerView) findViewById(R.id.now_playing_recycler); mControlsRoot = (LinearLayout) findViewById(R.id.now_playing_controls_root); mControls = (MusicControlsView) findViewById(R.id.now_playing_media_controller_view); mSong = PlaybackRemote.getCurrentSong(); } @Override protected void setUp() { PlaybackRemote.registerSongListener(this); configureTransition(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); Drawable menu = getResources().getDrawable(R.drawable.ic_close_24dp); DrawableCompat.setTint(menu, getResources().getColor(R.color.faithfulPrimaryLight)); getSupportActionBar().setHomeAsUpIndicator(menu); mCollapsingToolbar.setExpandedTitleColor(Color.TRANSPARENT); ViewCompat.setElevation(findViewById(R.id.now_playing_controls_root), 12f); configureRecyclerView(); configureControls(); configureUI(); } @Override public int getStatusBarColor() { return ATEUtil.darkenColor(mSong.getAlbum().getBackgroundColor()); } @Override public int getLightStatusBarMode() { return Config.lightStatusBarMode(this, getATEKey()); } private void configureRecyclerView() { mList.setAdapter(new ListAdapter<>(ListAdapter.Type.NowPlaying, PlaybackRemote.getQueue(), this)); mList.setItemAnimator(new DefaultItemAnimator()); mList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); mList.setNestedScrollingEnabled(true); } private void configureUIColors() { mControlsRoot.setBackgroundColor(mSong.getAlbum().getAccentColor()); mCollapsingToolbar.setContentScrimColor(mSong.getAlbum().getAccentColor()); mCollapsingToolbar.setStatusBarScrimColor(mSong.getAlbum().getAccentColor()); mControls.setUIColors(mSong.getAlbum().getAccentIconColor(), mSong.getAlbum().getAccentSecondaryIconColor(), mSong.getAlbum().getAccentSecondaryIconColor(), mSong.getAlbum().getBackgroundColor()); DrawableCompat.setTint(DrawableCompat.wrap(((ImageView) findViewById(R.id.now_playing_eq_icon)).getDrawable()), mSong.getAlbum().getBackgroundColor()); } private void configureUI() { mSong.getAlbum().requestArt((ImageView) findViewById(R.id.now_playing_album_art)); configureRepeatIcon(mSong); configureUIColors(); ((TextView) findViewById(R.id.current_song_title)).setText(mSong.getTitle()); ((TextView) findViewById(R.id.current_song_artist)).setText(mSong.getSongArtist()); //Sets Window description in Multitasking menu if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { IconManager iconM = IconManager.get().setContext(this); Bitmap bm = BitmapFactory.decodeResource(getResources(), iconM.getDrawable(iconM.getOverviewIcon(iconM.getIcon(), mSong.getAlbum().getAccentColor()).getId())); setTaskDescription(new ActivityManager.TaskDescription(mSong.getTitle(), bm, mSong.getAlbum().getAccentColor())); bm.recycle(); } } private void configureControls() { mControls.initView(); mControls.setController(PlaybackRemote.getSession().getController()); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_now_playing, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); break; case R.id.action_stop: PlaybackRemote.stop(); finish(); break; case R.id.action_settings: startActivity(new Intent(this, Settings.class)); break; } return super.onOptionsItemSelected(item); } @Override public void onSongChanged(Song newSong) { mSong = newSong; configureUI(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return mControls.onKeyEvent(event) || super.onKeyDown(keyCode, event); } @Override public void onBackPressed() { super.onBackPressed(); } private void configureRepeatIcon(final Song s) { ImageView i = (ImageView) findViewById(R.id.now_playing_repeat_icon); if (PlaybackRemote.isRepeating()) { Drawable repeatIcon = getResources().getDrawable(R.drawable.ic_repeat_one_black_48dp); DrawableCompat.setTint(DrawableCompat.wrap(repeatIcon), s.getAlbum().getBackgroundColor()); i.setImageDrawable(repeatIcon); } else { Drawable repeatIcon = getResources().getDrawable(R.drawable.ic_repeat_black_48dp); DrawableCompat.setTint(DrawableCompat.wrap(repeatIcon), getSecondaryTextColor()); i.setImageDrawable(repeatIcon); } i.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toggleRepeatIcon(s); } }); } private void toggleRepeatIcon(Song s) { ImageView i = (ImageView) findViewById(R.id.now_playing_repeat_icon); if (PlaybackRemote.isRepeating()) { Drawable repeatIcon = getResources().getDrawable(R.drawable.ic_repeat_black_48dp); DrawableCompat.setTint(DrawableCompat.wrap(repeatIcon), getSecondaryTextColor()); i.setImageDrawable(repeatIcon); PlaybackRemote.setRepeat(false); } else { Drawable repeatIcon = getResources().getDrawable(R.drawable.ic_repeat_one_black_48dp); DrawableCompat.setTint(DrawableCompat.wrap(repeatIcon), s.getAlbum().getBackgroundColor()); i.setImageDrawable(repeatIcon); PlaybackRemote.setRepeat(true); } } }