Java tutorial
/* * 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(); } } }