info.balthaus.geologrenewed.app.ui.MainActivity.java Source code

Java tutorial

Introduction

Here is the source code for info.balthaus.geologrenewed.app.ui.MainActivity.java

Source

/*
 * Copyright (C) 2013 Jorrit "Chainfire" Jongma
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package info.balthaus.geologrenewed.app.ui;

import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.Html;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import info.balthaus.geologrenewed.app.R;
import info.balthaus.geologrenewed.app.data.Database;
import info.balthaus.geologrenewed.app.service.BackgroundService;

import java.util.Locale;

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    private ProfilesFragment tabProfiles = null;
    private LogsFragment tabLogs = null;
    private SettingsFragment tabSettings = null;

    private SectionsPagerAdapter mSectionsPagerAdapter;
    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
                invalidateOptionsMenu();
            }
        });
        mViewPager.setOffscreenPageLimit(3);

        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
            actionBar
                    .addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
        }

        int play = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (play == ConnectionResult.SUCCESS) {
            // Force database creation
            Database.Helper helper = Database.Helper.getInstance(this);
            helper.getReadableDatabase();

            // Force Off profile as default
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
            long id = prefs.getLong(SettingsFragment.PREF_CURRENT_PROFILE, 0);
            Database.Profile profile = Database.Profile.getById(helper, id, null);
            if (profile == null)
                id = 0;
            if (id == 0) {
                profile = Database.Profile.getOffProfile(helper);
                id = profile.getId();
                prefs.edit().putLong(SettingsFragment.PREF_CURRENT_PROFILE, id).commit();
            }

            // Start background service
            if (profile.getType() != Database.Profile.Type.OFF)
                BackgroundService.startService(this);
        } else {
            GooglePlayServicesUtil.getErrorDialog(play, this, 0).show();
            finish();
        }
    }

    private void addProfile() {
        Cursor list = Database.Profile.list(Database.Helper.getInstance(this));

        final CharSequence[] items = new CharSequence[list.getCount() + 1];
        final Long[] ids = new Long[list.getCount() + 1];

        items[0] = Html.fromHtml(getString(R.string.profile_add_name));
        ids[0] = 0L;

        int i = 1;
        int idxID = list.getColumnIndex(Database.Profile._ID);
        int idxName = list.getColumnIndex(Database.Profile.COLUMN_NAME_NAME);
        if (list.moveToFirst()) {
            while (true) {
                ids[i] = list.getLong(idxID);
                items[i] = Html.fromHtml(String.format(Locale.ENGLISH, getString(R.string.profile_add_copy),
                        list.getString(idxName)));
                i++;
                if (!list.moveToNext())
                    break;
            }
        }

        (new AlertDialog.Builder(this)).setTitle(R.string.profile_add_title).setItems(items, new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Database.Helper h = Database.Helper.getInstance(MainActivity.this);
                if (which == 0) {
                    Database.Profile p = new Database.Profile();
                    p.setName(getString(R.string.profile_add_name));
                    p.setType(Database.Profile.Type.USER);
                    p.saveToDatabase(h);
                    ProfileActivity.launchActivity(MainActivity.this, p.getId());
                } else {
                    ProfileActivity.launchActivity(MainActivity.this,
                            Database.Profile.copy(h, Database.Profile.getById(h, ids[which], null),
                                    getString(R.string.profile_add_name)).getId());
                }
            }
        }).setCancelable(true).setNegativeButton(getString(R.string.generic_cancel), null).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        int tab = getActionBar().getSelectedNavigationIndex();

        if (tab == 0) {
            menu.add(R.string.menu_add).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    addProfile();
                    return true;
                }
            }).setIcon(R.drawable.ic_action_add).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        } else if (tab == 1) {
            menu.add(R.string.menu_export).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    ExportActivity.launchActivity(MainActivity.this, 0);
                    return true;
                }
            }).setIcon(R.drawable.ic_action_export).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
            menu.add(R.string.menu_clear).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    (new AlertDialog.Builder(MainActivity.this)).setTitle(R.string.generic_clear)
                            .setMessage(Html.fromHtml(getString(R.string.logs_clear_confirm)))
                            .setPositiveButton(getString(R.string.generic_clear),
                                    new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            (new ClearLogsAsync()).execute();
                                        }
                                    })
                            .setNegativeButton(getString(R.string.generic_cancel), null).show();

                    return true;
                }
            }).setIcon(R.drawable.ic_action_delete).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

        } else if (tab == 2) {

        }

        return true;
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            if (position == 0) {
                if (tabProfiles == null)
                    tabProfiles = new ProfilesFragment();
                return tabProfiles;
            } else if (position == 1) {
                if (tabLogs == null)
                    tabLogs = new LogsFragment();
                return tabLogs;
            } else if (position == 2) {
                if (tabSettings == null)
                    tabSettings = new SettingsFragment();
                return tabSettings;
            }
            return null;
        }

        @Override
        public int getCount() {
            return 3;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();
            switch (position) {
            case 0:
                return getString(R.string.section_profiles).toUpperCase(l);
            case 1:
                return getString(R.string.section_logs).toUpperCase(l);
            case 2:
                return getString(R.string.section_settings).toUpperCase(l);
            }
            return null;
        }
    }

    private class ClearLogsAsync extends AsyncTask<Void, Void, Void> {
        private ProgressDialog dialog = null;

        @Override
        protected void onPreExecute() {
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setMessage(getString(R.string.logs_clear_clearing));
            dialog.setIndeterminate(true);
            dialog.setCancelable(false);
            dialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            Database.Location.deleteAll(Database.Helper.getInstance(MainActivity.this));
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            dialog.dismiss();
        }
    }
}