/* * 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.CacheManager; import org.xbmc.android.remote.business.ManagerFactory; import org.xbmc.android.remote.business.receiver.AndroidBroadcastReceiver; import org.xbmc.android.remote.presentation.controller.HomeController; import org.xbmc.android.remote.presentation.controller.HomeController.ProgressThread; import org.xbmc.android.remote.presentation.notification.NowPlayingNotificationManager; import org.xbmc.android.util.KeyTracker.Stage; import org.xbmc.android.util.OnLongPressBackKeyTracker; import org.xbmc.api.business.IEventClientManager; import org.xbmc.api.type.ThumbSize; import org.xbmc.eventclient.ButtonCodes; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.IntentFilter; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Button; import android.widget.GridView; import android.widget.Toast; public class HomeActivity extends Activity { private static final String TAG = "HomeActivity"; private static final int MENU_ABOUT = 1; private static final int MENU_SETTINGS = 2; private static final int MENU_EXIT = 3; private static final int MENU_SWITCH_XBMC = 5; // private static final int MENU_INPUT_TEXT = 6; public static final int MENU_COVER_DOWNLOAD = 4; public static final int MENU_COVER_DOWNLOAD_MUSIC = 41; public static final int MENU_COVER_DOWNLOAD_MOVIES = 42; public static final int MENU_COVER_DOWNLOAD_ACTORS = 43; public static final int MENU_COVER_PURGE_CACHE = 44; public static final int MENU_COVER_DOWNLOAD_TVSHOWS = 45; public static final int MENU_COVER_DOWNLOAD_TVSEASONS = 46; public static final int MENU_COVER_DOWNLOAD_TVEPISODES = 47; private ConfigurationManager mConfigurationManager; private HomeController mHomeController; private IEventClientManager mEventClientManager; private ProgressThread mProgressThread; private ProgressDialog mProgressDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); if (Build.VERSION.SDK_INT >= 9) { final StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } // set display size final Display display = getWindowManager().getDefaultDisplay(); ThumbSize.setScreenSize(display.getWidth(), display.getHeight()); final Button versionButton = (Button)findViewById(R.id.home_version_button); final GridView menuGrid = (GridView)findViewById(R.id.HomeItemGridView); mHomeController = new HomeController(this, new Handler(), menuGrid); mHomeController.setupVersionHandler(new Handler(), versionButton, menuGrid); mEventClientManager = ManagerFactory.getEventClientManager(mHomeController); mConfigurationManager = ConfigurationManager.getInstance(this); versionButton.setText("Connecting..."); versionButton.setOnClickListener(mHomeController.getOnHostChangeListener()); ((Button)findViewById(R.id.home_about_button)).setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent(HomeActivity.this, AboutActivity.class)); } }); // Listen for screen on and off broadcasts IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); registerReceiver(new AndroidBroadcastReceiver(), filter); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, MENU_SWITCH_XBMC, 0, "Switch XBMC").setIcon(R.drawable.menu_switch); SubMenu downloadMenu = menu.addSubMenu(0, MENU_COVER_DOWNLOAD, 0, "Download Covers").setIcon(R.drawable.menu_download); menu.add(0, MENU_ABOUT, 0, "About").setIcon(R.drawable.menu_about); menu.add(0, MENU_SETTINGS, 0, "Settings").setIcon(R.drawable.menu_settings); menu.add(0, MENU_EXIT, 0, "Exit").setIcon(R.drawable.menu_exit); // menu.add(0, MENU_INPUT_TEXT, 0, "Send Text"); downloadMenu.add(2, MENU_COVER_DOWNLOAD_MOVIES, 0, "Movie Posters"); downloadMenu.add(2, MENU_COVER_DOWNLOAD_MUSIC, 0, "Album Covers"); downloadMenu.add(2, MENU_COVER_DOWNLOAD_TVSHOWS, 0, "TV Show Banners"); downloadMenu.add(2, MENU_COVER_DOWNLOAD_TVSEASONS, 0, "TV Season Posters"); downloadMenu.add(2, MENU_COVER_DOWNLOAD_TVEPISODES, 0, "TV Episode Posters"); downloadMenu.add(2, MENU_COVER_DOWNLOAD_ACTORS, 0, "Actor Shots"); downloadMenu.add(2, MENU_COVER_PURGE_CACHE, 0, "Clear Cache"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_ABOUT: startActivity(new Intent(this, AboutActivity.class)); return true; case MENU_SWITCH_XBMC: mHomeController.openHostChanger(); return true; case MENU_SETTINGS: startActivity(new Intent(this, SettingsActivity.class)); return true; case MENU_EXIT: Log.i(TAG, "Exiting XBMC Remote."); NowPlayingNotificationManager.getInstance(getBaseContext()).removeNotification(); android.os.Process.killProcess(android.os.Process.myPid()); // System.exit(0); return true; // case MENU_INPUT_TEXT: // startActivity(new Intent(this, KeyboardAndMouseActivity.class)); // return true; case MENU_COVER_DOWNLOAD_MOVIES: case MENU_COVER_DOWNLOAD_MUSIC: case MENU_COVER_DOWNLOAD_ACTORS: case MENU_COVER_DOWNLOAD_TVSHOWS: case MENU_COVER_DOWNLOAD_TVSEASONS: case MENU_COVER_DOWNLOAD_TVEPISODES: showDialog(item.getItemId()); return true; case MENU_COVER_PURGE_CACHE: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("All downloaded covers, thumbs and posters will be deleted. Are you really sure you want to do this?"); builder.setCancelable(false); builder.setPositiveButton("Absolutely.", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { CacheManager.get().purgeCache(); Toast.makeText(HomeActivity.this, "Cache purged.", Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("Please, no!", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.create().show(); return true; } return false; } @Override public Dialog onCreateDialog(int id) { mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage(""); mProgressDialog.setProgress(0); mProgressDialog.setOnCancelListener(new OnCancelListener() { public void onCancel(DialogInterface dialog) { mProgressThread.cancel(); } }); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); return mProgressDialog; } @Override protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(id, dialog); final ProgressDialog d = (ProgressDialog)dialog; d.setProgress(0); switch (id) { case MENU_COVER_DOWNLOAD_MOVIES: d.setMessage("Downloading movie posters..."); mProgressThread = mHomeController.new ProgressThread(mHandler, MENU_COVER_DOWNLOAD_MOVIES, d); break; case MENU_COVER_DOWNLOAD_MUSIC: d.setMessage("Downloading album covers..."); mProgressThread = mHomeController.new ProgressThread(mHandler, MENU_COVER_DOWNLOAD_MUSIC, d); break; case MENU_COVER_DOWNLOAD_ACTORS: d.setMessage("Downloading actor thumbs..."); mProgressThread = mHomeController.new ProgressThread(mHandler, MENU_COVER_DOWNLOAD_ACTORS, d); break; case MENU_COVER_DOWNLOAD_TVSHOWS: d.setMessage("Downloading TV show banners."); mProgressThread = mHomeController.new ProgressThread(mHandler, MENU_COVER_DOWNLOAD_TVSHOWS, d); break; case MENU_COVER_DOWNLOAD_TVSEASONS: d.setMessage("Downloading TV season posters."); mProgressThread = mHomeController.new ProgressThread(mHandler, MENU_COVER_DOWNLOAD_TVSEASONS, d); break; case MENU_COVER_DOWNLOAD_TVEPISODES: d.setMessage("Downloading TV episode posters."); mProgressThread = mHomeController.new ProgressThread(mHandler, MENU_COVER_DOWNLOAD_TVEPISODES, d); break; default: return; } mProgressThread.start(); } @Override public void onResume(){ super.onResume(); mHomeController.onActivityResume(this); mConfigurationManager.onActivityResume(this); } @Override protected void onPause() { super.onPause(); mHomeController.onActivityPause(); mConfigurationManager.onActivityPause(); mEventClientManager.setController(null); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: mEventClientManager.sendButton("R1", ButtonCodes.REMOTE_VOLUME_PLUS, false, true, true, (short)0, (byte)0); return true; case KeyEvent.KEYCODE_VOLUME_DOWN: mEventClientManager.sendButton("R1", ButtonCodes.REMOTE_VOLUME_MINUS, false, true, true, (short)0, (byte)0); return true; case KeyEvent.KEYCODE_BACK: if(OnLongPressBackKeyTracker.lastStage == Stage.LONG_REPEAT) { return true; } } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: if(OnLongPressBackKeyTracker.lastStage == Stage.LONG_REPEAT) { OnLongPressBackKeyTracker.lastStage = Stage.SHORT_REPEAT; return true; } } return super.onKeyUp(keyCode, event); } final Handler mHandler = new Handler() { public void handleMessage(final Message msg) { mHomeController.onHandleMessage(msg, mProgressDialog, mProgressThread); } }; }