android/app/src/main/java/org/openlp/android2/OpenLP.java

260 lines
10 KiB
Java

/******************************************************************************
* OpenLP - Open Source Lyrics Projection *
* --------------------------------------------------------------------------- *
* Copyright (c) 2011-2015 OpenLP Android Developers *
* --------------------------------------------------------------------------- *
* 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; version 2 of the License. *
* *
* 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 this program; if not, write to the Free Software Foundation, Inc., 59 *
* Temple Place, Suite 330, Boston, MA 02111-1307 USA *
*******************************************************************************/
package org.openlp.android2;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBarActivity;
import android.app.ActionBar;
import android.app.FragmentManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.support.v4.widget.DrawerLayout;
import android.view.WindowManager;
import org.openlp.android2.activities.SettingsActivity;
import org.openlp.android2.common.NavigationOptions;
import org.openlp.android2.dialogs.AlertDisplayDialog;
import org.openlp.android2.dialogs.BlankDisplayDialog;
import org.openlp.android2.fragments.AboutFragment;
import org.openlp.android2.fragments.HomeFragment;
import org.openlp.android2.fragments.LiveListFragment;
import org.openlp.android2.fragments.LiveWebFragment;
import org.openlp.android2.fragments.NavigationDrawerFragment;
import org.openlp.android2.fragments.ServiceListFragment;
import org.openlp.android2.fragments.StageWebFragment;
public class OpenLP extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
/**
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
*/
private NavigationDrawerFragment mNavigationDrawerFragment;
/**
* Used to store the last screen title. For use in {@link #restoreActionBar()}.
*/
private final String LOG_TAG = OpenLP.class.getName();
private CharSequence mTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
doPreferenceCheck();
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
/**
* Check the preferences have been set at startup and if not redirect them to be set.
*
*/
protected void doPreferenceCheck() {
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
if (sharedPrefs.getString(getString(R.string.key_host), "NONE").equals("NONE")
|| sharedPrefs.getString(getString(R.string.key_host), null).equals(null)) {
Log.d(LOG_TAG,
"URL preference not set. Starting preference activity...");
Intent preferenceIntent = new Intent(this, SettingsActivity.class);
startActivity(preferenceIntent);
}
}
/**
* Handle configuration change.
*
* @param newConfig The new Config.
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
/**
* Handle the selection of the Navigation Menu
*
* @param position Which item has been selected.
*/
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
switch (position) {
case NavigationOptions.Home:
singleTab();
fragmentManager.beginTransaction()
.replace(R.id.container, HomeFragment.newInstance())
.commit();
mTitle = getString(R.string.home);
break;
case NavigationOptions.ServiceList:
singleTab();
fragmentManager.beginTransaction()
.replace(R.id.container, ServiceListFragment.newInstance())
.commit();
mTitle = getString(R.string.service_list);
break;
case NavigationOptions.LiveList:
duelTab();
fragmentManager.beginTransaction()
.replace(R.id.container_left, ServiceListFragment.newInstance())
.commit();
fragmentManager.beginTransaction()
.replace(R.id.container_right, LiveListFragment.newInstance())
.commit();
mTitle = getString(R.string.live_list);
break;
case NavigationOptions.StageView:
singleTab();
fragmentManager.beginTransaction()
.replace(R.id.container, StageWebFragment.newInstance())
.commit();
mTitle = getString(R.string.stage_view);
break;
case NavigationOptions.LiveView:
singleTab();
fragmentManager.beginTransaction()
.replace(R.id.container, LiveWebFragment.newInstance())
.commit();
mTitle = getString(R.string.live_view);
break;
}
}
/**
* Set Display to allow for Duel Columns
*/
protected void duelTab(){
toggerContainer(R.id.container, View.GONE);
toggerContainer(R.id.container_right, View.VISIBLE);
toggerContainer(R.id.container_left, View.VISIBLE);
}
/**
* Set Display to allow for Single Columns
*/
protected void singleTab(){
toggerContainer(R.id.container_right, View.GONE);
toggerContainer(R.id.container_left, View.GONE);
toggerContainer(R.id.container, View.VISIBLE);
}
/**
*
* @param container The container id to be accesses
* @param direction What visibility to use on the container
*/
protected void toggerContainer(int container, int direction){
View cTainer = this.findViewById(container);
if (cTainer != null) {
cTainer.setVisibility(direction);
}
}
public void restoreActionBar() {
try {
ActionBar actionBar = getActionBar();
//actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(mTitle);
} catch (Exception e) {
//noop
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
getMenuInflater().inflate(R.menu.open_l, menu);
restoreActionBar();
return true;
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
Intent intent;
switch (item.getItemId()) {
case R.id.action_preferences:
intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
case R.id.action_refresh:
if (this.mTitle.equals(getString(R.string.service_list))) {
refreshServiceFragment(R.id.container);
} else if (this.mTitle.equals(getString(R.string.live_list)) ) {
refreshServiceFragment(R.id.container_left);
refreshLiveFragment(R.id.container_right);
}
return true;
case R.id.action_blank:
new BlankDisplayDialog().show(getFragmentManager(), "BlankDialog");
return true;
case R.id.action_alert:
new AlertDisplayDialog().show(getFragmentManager(), "AlertDialog");
return true;
case R.id.action_about:
getFragmentManager().beginTransaction().replace(R.id.container,
new AboutFragment()).commit();
default:
return super.onOptionsItemSelected(item);
}
}
public void refreshLiveFragment(int container){
LiveListFragment fragment = (LiveListFragment)
getFragmentManager().findFragmentById(container);
if (fragment != null) {
fragment.refreshDisplay();
}
}
public void refreshServiceFragment(int container){
ServiceListFragment fragment = (ServiceListFragment)
getFragmentManager().findFragmentById(container);
if (fragment != null) {
fragment.refreshDisplay();
}
}
}