/* * Copyright 2008-2013, ETH Zürich, Samuel Welten, Michael Kuhn, Tobias Langner, * Sandro Affentranger, Lukas Bossard, Michael Grob, Rahul Jain, * Dominic Langenegger, Sonia Mayor Alonso, Roger Odermatt, Tobias Schlueter, * Yannick Stucki, Sebastian Wendland, Samuel Zehnder, Samuel Zihlmann, * Samuel Zweifel * * This file is part of Jukefox. * * Jukefox is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or any later version. Jukefox is * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * Jukefox. If not, see <http://www.gnu.org/licenses/>. */ package ch.ethz.dcg.pancho3.view.lockscreen; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import android.widget.ImageView; import android.widget.TextView; import ch.ethz.dcg.jukefox.commons.utils.Log; import ch.ethz.dcg.jukefox.controller.player.IOnPlayerStateChangeListener; import ch.ethz.dcg.jukefox.controller.player.IOnPlaylistStateChangeListener; import ch.ethz.dcg.jukefox.model.collection.BaseAlbum; import ch.ethz.dcg.jukefox.model.collection.BaseArtist; import ch.ethz.dcg.jukefox.model.collection.BaseSong; import ch.ethz.dcg.jukefox.model.collection.IReadOnlyPlaylist; import ch.ethz.dcg.jukefox.model.collection.PlaylistSong; import ch.ethz.dcg.jukefox.model.commons.EmptyPlaylistException; import ch.ethz.dcg.jukefox.model.commons.NoAlbumArtException; import ch.ethz.dcg.jukefox.model.player.PlayerState; import ch.ethz.dcg.jukefox.playmode.IPlayMode; import ch.ethz.dcg.pancho3.R; import ch.ethz.dcg.pancho3.controller.player.PlayerService; import ch.ethz.dcg.pancho3.model.JukefoxApplication; import ch.ethz.dcg.pancho3.view.commons.BitmapReflection; import ch.ethz.dcg.pancho3.view.commons.JukefoxActivity; import ch.ethz.dcg.pancho3.view.commons.TriggeringSlider; public class LockScreen extends JukefoxActivity { public static final String TAG = LockScreen.class.getSimpleName(); private IOnPlaylistStateChangeListener playlistStateEventListener; private IOnPlayerStateChangeListener playerStateEventListener; private ImageView playPauseButton; private Handler handler; private TriggeringSlider sliderLock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Log.v(TAG, "onCreate()"); if (!settings.isLockScreenControls() || !playerController.isReady() || playerController.getPlayerState() != PlayerState.PLAY) { // Log.v(TAG, "onCreate() 2"); finish(); return; } handler = new Handler(); setWindowProperties(); setContentView(R.layout.lockscreen); sliderLock = (TriggeringSlider) findViewById(R.id.sliderLock); Bitmap lockBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.d087_lockscreen_lock); sliderLock.setBitmap(lockBitmap); sliderLock.setLockHeight(50); sliderLock.setLockWidth(64); sliderLock.addOnTriggerListener(new TriggeringSlider.OnTriggerListener() { @Override public void onTrigger() { finish(); } }); updateCoverAndText(); registerButtons(); registerPlayerEventListeners(); updatePlayerState(playerController.getPlayerState()); Log.v(TAG, "onCreate() 3"); } private void setWindowProperties() { // turn off the window's title bar requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); // getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); LayoutParams params = getWindow().getAttributes(); getWindow().setAttributes(params); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_MENU: // dismiss(); return true; case KeyEvent.KEYCODE_SEARCH: case KeyEvent.KEYCODE_BACK: // finish(); // return true; case KeyEvent.KEYCODE_DPAD_CENTER: return true; default: return super.onKeyDown(keyCode, event); } } private void updateCoverAndText() { handler.post(new Runnable() { @Override public void run() { try { BaseSong<BaseArtist, BaseAlbum> song = playerController.getCurrentSong(); TextView nowPlaying = (TextView) findViewById(R.id.nowPlayingText); nowPlaying.setText(song.getArtist().getName() + " - " + song.getName()); ImageView albumArt = (ImageView) findViewById(R.id.bigCoverArt); try { Bitmap bitmap = albumArtProvider.getAlbumArt(song.getAlbum(), false); albumArt.setImageBitmap(BitmapReflection.getReflection(bitmap)); } catch (NoAlbumArtException e) { albumArt.setImageResource(R.drawable.d005_empty_cd); } } catch (EmptyPlaylistException e) { Log.w(TAG, e); } } }); } private void registerButtons() { playPauseButton = (ImageView) findViewById(R.id.playPauseButton); playPauseButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(LockScreen.this, PlayerService.class); intent.setAction(PlayerService.ACTION_PLAY_PAUSE); startService(intent); } }); ImageView previousButton = (ImageView) findViewById(R.id.previousButton); previousButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(LockScreen.this, PlayerService.class); intent.setAction(PlayerService.ACTION_PREVIOUS); startService(intent); } }); ImageView nextButton = (ImageView) findViewById(R.id.nextButton); nextButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Log.v(TAG, "nextButton clicked"); Intent intent = new Intent(LockScreen.this, PlayerService.class); intent.setAction(PlayerService.ACTION_NEXT); startService(intent); } }); // View statusBar = findViewById(R.id.statusBarWindow); // statusBar.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // // } // }); // ImageView logo = (ImageView) findViewById(R.id.jukefoxLogo); // logo.setOnTouchListener(new OnTouchListener() { // // @Override // public boolean onTouch(View v, MotionEvent event) { // return onLogoTouched(v, event); // } // // }); } @SuppressWarnings("unused") private boolean onLogoTouched(View v, MotionEvent event) { return true; } private void registerPlayerEventListeners() { playlistStateEventListener = new IOnPlaylistStateChangeListener() { @Override public void onCurrentSongChanged(PlaylistSong<BaseArtist, BaseAlbum> newSong) { updateCoverAndText(); } @Override public void onPlayModeChanged(IPlayMode newPlayMode) { } @Override public void onPlaylistChanged(IReadOnlyPlaylist newPlaylist) { } }; super.playerController.addOnPlaylistStateChangeListener(playlistStateEventListener); playerStateEventListener = new IOnPlayerStateChangeListener() { @Override public void onPlayerStateChanged(PlayerState newPlayerState) { updatePlayerState(newPlayerState); } @Override public void onSongCompleted(PlaylistSong<BaseArtist, BaseAlbum> song) { } @Override public void onSongSkipped(PlaylistSong<BaseArtist, BaseAlbum> song, int position) { } @Override public void onSongStarted(PlaylistSong<BaseArtist, BaseAlbum> song) { } }; super.playerController.addOnPlayerStateChangeListener(playerStateEventListener); } @Override protected void onDestroy() { super.playerController.removeOnPlayerStateChangeListener(playerStateEventListener); super.playerController.removeOnPlaylistStateChangeListener(playlistStateEventListener); super.onDestroy(); } private void updatePlayerState(final PlayerState newPlayerState) { handler.post(new Runnable() { @Override public void run() { if (newPlayerState == PlayerState.PLAY) { playPauseButton.setImageResource(R.drawable.d016_pause_button); } else { playPauseButton.setImageResource(R.drawable.d017_play_button); } } }); } @Override protected void onPause() { Log.v(TAG, "onPause()"); super.onPause(); } protected boolean isScreenOff() { return !JukefoxApplication.isScreenOn(); } @Override protected void onResume() { // Log.v(TAG, "onResume()"); // if (!JukefoxApplication.isScreenLocked()) { // Log.v(TAG, "Screen not locked. Terminating lock screen."); // Intent intent = new Intent(this, PlayerActivity.class); // startActivity(intent); // finish(); // } updateCoverAndText(); super.onResume(); } }