com.glanznig.beepme.view.MainActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.glanznig.beepme.view.MainActivity.java

Source

/*
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) {
    }

}