/*
* Copyright (C) 2005-2009 Team XBMC
* http://xbmc.org
*
* This Program 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 2, or (at your option)
* any later version.
*
* This Program 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 XBMC Remote; see the file license. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
package org.xbmc.android.remote.presentation.activity;
import org.xbmc.android.remote.R;
import org.xbmc.android.remote.business.ManagerFactory;
import org.xbmc.android.remote.presentation.controller.NowPlayingController;
import org.xbmc.android.remote.presentation.controller.RemoteController;
import org.xbmc.android.remote.presentation.widget.JewelView;
import org.xbmc.android.util.KeyTracker;
import org.xbmc.android.util.KeyTracker.Stage;
import org.xbmc.android.util.OnLongPressBackKeyTracker;
import org.xbmc.api.business.IEventClientManager;
import org.xbmc.api.object.Song;
import org.xbmc.api.type.ThumbSize;
import org.xbmc.eventclient.ButtonCodes;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build.VERSION;
import android.os.Bundle;
import android.os.Handler;
import android.view.Display;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
public class NowPlayingActivity extends Activity {
private TextView mTopTitleView;
private TextView mBottomTitleView;
private TextView mBottomSubtitleView;
private TextView mCounterLeftView;
private TextView mCounterRightView;
private ImageButton mPlayPauseView;
private SeekBar mSeekBar;
private ConfigurationManager mConfigurationManager;
private NowPlayingController mNowPlayingController;
private KeyTracker mKeyTracker;
private boolean mMonitorMode = false;
private static final int MENU_REMOTE = 303;
private static final int MENU_MONITOR_MODE = 304;
public NowPlayingActivity() {
if(Integer.parseInt(VERSION.SDK) < 5) {
mKeyTracker = new KeyTracker(new OnLongPressBackKeyTracker() {
@Override
public void onLongPressBack(int keyCode, KeyEvent event,
Stage stage, int duration) {
onKeyLongPress(keyCode, event);
}
@Override
public void onShortPressBack(int keyCode, KeyEvent event,
Stage stage, int duration) {
callSuperOnKeyDown(keyCode, event);
}
});
};
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set display size
final Display display = getWindowManager().getDefaultDisplay();
ThumbSize.setScreenSize(display.getWidth(), display.getHeight());
setContentView(R.layout.nowplaying);
mNowPlayingController = new NowPlayingController(this, new Handler());
mSeekBar = (SeekBar) findViewById(R.id.now_playing_progessbar);
mTopTitleView = (TextView) findViewById(R.id.now_playing_top_title);
mBottomTitleView = (TextView) findViewById(R.id.now_playing_bottom_title);
mBottomSubtitleView = (TextView) findViewById(R.id.now_playing_bottom_subtitle);
mCounterLeftView = (TextView) findViewById(R.id.now_playing_counter_left);
mCounterRightView = (TextView) findViewById(R.id.now_playing_counter_right);
mPlayPauseView = (ImageButton) findViewById(R.id.MediaPlayPauseButton);
// JewelView jewelCase = (JewelView)findViewById(R.id.now_playing_jewelcase);
// RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(arg0, arg1)
// layoutParams.height = 140;
// layoutParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;
/// layoutParams.addRule(RelativeLayout.ABOVE, R.id.now_playing_bottombar);
// jewelCase.setLayoutParams(layoutParams);
// remove nasty top fading edge
FrameLayout topFrame = (FrameLayout) findViewById(android.R.id.content);
topFrame.setForeground(null);
// set titlebar text
((TextView) findViewById(R.id.titlebar_text)).setText("Now playing");
mConfigurationManager = ConfigurationManager.getInstance(this);
mNowPlayingController.setupButtons(mSeekBar,
findViewById(R.id.MediaPreviousButton),
findViewById(R.id.MediaStopButton),
findViewById(R.id.MediaPlayPauseButton),
findViewById(R.id.MediaNextButton),
findViewById(R.id.MediaPlaylistButton)
);
}
public void setProgressPosition(int pos) {
if (!mSeekBar.isPressed()) {
mSeekBar.setProgress(pos);
}
}
public void updateInfo(String topTitle, String bottomTitme, String bottomSubtitle) {
mTopTitleView.setText(topTitle);
mBottomTitleView.setText(bottomTitme);
mBottomSubtitleView.setText(bottomSubtitle);
}
public void updateProgress(int duration, int time, boolean paused) {
mSeekBar.setEnabled(duration != 0);
mCounterLeftView.setVisibility(View.VISIBLE);
mCounterLeftView.setText(Song.getDuration(time + 1));
mCounterRightView.setVisibility(View.VISIBLE);
mCounterRightView.setText(duration <= 0 ? "unknown" : "-" + Song.getDuration(duration - time - 1));
if(paused)
mPlayPauseView.setBackgroundResource(R.drawable.now_playing_play);
else
mPlayPauseView.setBackgroundResource(R.drawable.now_playing_pause);
}
public void updateCover(Bitmap cover, int mediaType) {
final JewelView jewelCase = (JewelView) findViewById(R.id.now_playing_jewelcase);
if (cover == null) {
jewelCase.setCover(R.drawable.coverbox_back);
} else {
jewelCase.setCover(cover);
}
}
public void clear() {
mSeekBar.setEnabled(false);
mCounterLeftView.setVisibility(View.GONE);
mCounterRightView.setVisibility(View.GONE);
mPlayPauseView.setBackgroundResource(R.drawable.now_playing_play);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
menu.add(0, MENU_REMOTE, 0, "Remote control").setIcon(R.drawable.menu_remote);
menu.add(0, MENU_MONITOR_MODE, 0, "Monitor mode").setIcon(R.drawable.menu_view);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_REMOTE:
final Intent intent;
if (getSharedPreferences("global", Context.MODE_PRIVATE).getInt(RemoteController.LAST_REMOTE_PREFNAME, -1) == RemoteController.LAST_REMOTE_GESTURE) {
intent = new Intent(this, GestureRemoteActivity.class);
} else {
intent = new Intent(this, RemoteActivity.class);
}
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
return true;
case MENU_MONITOR_MODE:
switchMonitorMode();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
IEventClientManager client = ManagerFactory.getEventClientManager(mNowPlayingController);
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
client.sendButton("R1", ButtonCodes.REMOTE_VOLUME_PLUS, false, true, true, (short) 0, (byte) 0);
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
client.sendButton("R1", ButtonCodes.REMOTE_VOLUME_MINUS, false, true, true, (short) 0, (byte) 0);
return true;
case KeyEvent.KEYCODE_SEARCH:
switchMonitorMode();
return true;
/* case KeyEvent.KEYCODE_PAGE_UP:
switchMonitorMode();
return true;*/
}
client.setController(null);
boolean handled = (mKeyTracker != null) ? mKeyTracker.doKeyDown(keyCode, event) : false;
return handled || super.onKeyDown(keyCode, event);
}
private void switchMonitorMode() {
mMonitorMode = !mMonitorMode;
handleLayout();
}
@Override
protected void onResume() {
super.onResume();
mNowPlayingController.onActivityResume(this);
mConfigurationManager.onActivityResume(this);
handleLayout();
}
@Override
protected void onPause() {
super.onPause();
mNowPlayingController.onActivityPause();
mConfigurationManager.onActivityPause();
}
private void handleLayout() {
if (mMonitorMode) {
// TODO
} else {
// TODO
}
}
protected void callSuperOnKeyDown(int keyCode, KeyEvent event) {
onBackPressed();
super.onKeyDown(keyCode, event);
}
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
Intent intent = new Intent(NowPlayingActivity.this, HomeActivity.class);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
boolean handled = (mKeyTracker != null) ? mKeyTracker.doKeyUp(keyCode, event) : false;
return handled || super.onKeyUp(keyCode, event);
}
@Override
public void onBackPressed() {
if (isTaskRoot()) {
Intent intent = new Intent(NowPlayingActivity.this, HomeActivity.class );
NowPlayingActivity.this.startActivity(intent);
}
finish();
return;
}
}