/* This file is part of BeepMe. BeepMe 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 (at your option) any later version. BeepMe 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 BeepMe. If not, see <http://www.gnu.org/licenses/>. Copyright 2012-2014 Michael Glanznig http://beepme.yourexp.at */ package com.glanznig.beepme.view; import com.glanznig.beepme.BeeperApp; import com.glanznig.beepme.MainSectionsPagerAdapter; import com.glanznig.beepme.R; import com.glanznig.beepme.db.ScheduledBeepTable; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.AlertDialog; import android.app.FragmentTransaction; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.media.AudioManager; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.util.TypedValue; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.TextView; public class MainActivity extends FragmentActivity implements ActionBar.TabListener { private static final String TAG = "MainActivity"; private AudioManager audioManager = null; private Menu actionMenu = null; private MainSectionsPagerAdapter pagerAdapter = null; private ViewPager pager = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); pagerAdapter = new MainSectionsPagerAdapter(getSupportFragmentManager(), this); final ActionBar actionBar = getActionBar(); final BeeperApp app = (BeeperApp)getApplication(); if (app.getPreferences().isTestMode()) { actionBar.setSubtitle(getString(R.string.pref_title_test_mode)); } // displaying tabs in the action bar actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); pager = (ViewPager)findViewById(R.id.main_tab_pager); pager.setAdapter(pagerAdapter); // set gap between pages pager.setPageMargin((int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, this.getResources().getDisplayMetrics())); pager.setPageMarginDrawable(R.drawable.swipe_filler); // listening for page changes pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); // for each of the sections in the app, add a tab to the action bar for (int i = 0; i < pagerAdapter.getCount(); i++) { // Create a tab with text corresponding to the page title defined by the adapter. // Also specify this Activity object, which implements the TabListener interface, as the // listener for when this tab is selected. actionBar.addTab(actionBar.newTab() .setText(pagerAdapter.getPageTitle(i)) .setTabListener(this)); } } @Override public void onResume() { super.onResume(); // make sure the current state is reflected in the options menu invalidateOptionsMenu(); //make sure that scheduled beeps do not expire due to an error BeeperApp app = (BeeperApp)getApplication(); if (app.isBeeperActive()) { long scheduledBeepId = app.getPreferences().getScheduledBeepId(); if (scheduledBeepId != 0L) { ScheduledBeepTable sbt = new ScheduledBeepTable(this.getApplicationContext()); if (sbt.getStatus(scheduledBeepId) != 3 && sbt.isExpired(scheduledBeepId)) { app.expireTimer(); app.setTimer(); } } else { app.setTimer(); } } } @Override public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: if (action == KeyEvent.ACTION_UP) { audioManager.adjustStreamVolume(AudioManager.STREAM_ALARM, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_PLAY_SOUND); } return true; case KeyEvent.KEYCODE_VOLUME_DOWN: if (action == KeyEvent.ACTION_DOWN) { audioManager.adjustStreamVolume(AudioManager.STREAM_ALARM, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_PLAY_SOUND); } return true; default: return super.dispatchKeyEvent(event); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater mi = getMenuInflater(); mi.inflate(R.menu.main_menu, menu); this.actionMenu = menu; return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { BeeperApp app = (BeeperApp)getApplication(); // hide/show test beep menu entry MenuItem testBeep = menu.findItem(R.id.action_test_beep); if (app.getPreferences().isTestMode() && app.isBeeperActive()) { testBeep.setVisible(true); } else { testBeep.setVisible(false); } // update toggle beeper icon MenuItem item = menu.findItem(R.id.action_toggle_beeper); if (app.isBeeperActive()) { item.setIcon(R.drawable.ic_menu_beeper_on); } else { item.setIcon(R.drawable.ic_menu_beeper_off); } return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { BeeperApp app = (BeeperApp)getApplication(); switch (item.getItemId()) { case R.id.action_toggle_beeper: if (app.isBeeperActive()) { app.cancelTimer(); //call before setBeeperActive app.setBeeperActive(BeeperApp.BEEPER_INACTIVE); item.setIcon(R.drawable.ic_menu_beeper_off); // hide generate beep menu entry if (this.actionMenu != null && app.getPreferences().isTestMode()) { MenuItem testBeep = actionMenu.findItem(R.id.action_test_beep); testBeep.setVisible(false); } } else { app.setBeeperActive(BeeperApp.BEEPER_ACTIVE); app.setTimer(); item.setIcon(R.drawable.ic_menu_beeper_on); // show generate beep menu entry if (this.actionMenu != null && app.getPreferences().isTestMode()) { MenuItem testBeep = actionMenu.findItem(R.id.action_test_beep); testBeep.setVisible(true); } } return true; case R.id.action_test_beep: app.beep(); return true; case R.id.action_export: Intent iExport = new Intent(this, ExportActivity.class); startActivity(iExport); return true; case R.id.action_settings: Intent iSettings = new Intent(this, SettingsActivity.class); startActivity(iSettings); return true; case R.id.action_about: // thanks to F-Droid for the inspiration View view = null; LayoutInflater inflater = LayoutInflater.from(this); view = inflater.inflate(R.layout.about, null); try { PackageInfo pkgInfo = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0); ((TextView)view.findViewById(R.id.about_version)).setText(pkgInfo.versionName); } catch (Exception e) {} AlertDialog.Builder alertBuilder = null; alertBuilder = new AlertDialog.Builder(this).setView(view); AlertDialog dia = alertBuilder.create(); dia.setIcon(R.drawable.ic_launcher_beepme); dia.setTitle(getString(R.string.about_title)); dia.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.about_donate_button), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { Uri uri = Uri.parse("http://beepme.yourexp.at/support-beepme"); startActivity(new Intent(Intent.ACTION_VIEW, uri)); } }); dia.setButton(AlertDialog.BUTTON_NEGATIVE, getString(android.R.string.ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) {} }); dia.show(); return true; } return super.onOptionsItemSelected(item); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { pager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } }