Java tutorial
/* This file is part of ZAX. ZAX 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. ZAX 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 ZAX. If not, see <http://www.gnu.org/licenses/>. */ package com.inovex.zabbixmobile.activities; import android.content.ComponentName; import android.content.res.Configuration; import android.os.Bundle; import android.os.IBinder; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.widget.DrawerLayout; import android.util.Log; import android.view.MenuItem; import com.inovex.zabbixmobile.R; import com.inovex.zabbixmobile.activities.fragments.ChecksApplicationsFragment; import com.inovex.zabbixmobile.activities.fragments.ChecksHostsFragment; import com.inovex.zabbixmobile.activities.fragments.ChecksItemsFragment; import com.inovex.zabbixmobile.listeners.OnApplicationsLoadedListener; import com.inovex.zabbixmobile.listeners.OnChecksItemSelectedListener; import com.inovex.zabbixmobile.listeners.OnHostsLoadedListener; import com.inovex.zabbixmobile.model.Host; import com.inovex.zabbixmobile.model.Item; /** * Activity showing hosts, applications corresponding to the hosts and, * ultimately, the items within the applications. * */ public class ChecksActivity extends BaseHostGroupSpinnerActivity implements OnChecksItemSelectedListener, OnHostsLoadedListener, OnApplicationsLoadedListener { private static final String TAG = ChecksActivity.class.getSimpleName(); protected FragmentManager mFragmentManager; protected ChecksHostsFragment mHostListFragment; protected ChecksApplicationsFragment mApplicationsFragment; protected ChecksItemsFragment mItemDetailsFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate"); mTitle = getResources().getString(R.string.activity_checks); setContentView(R.layout.activity_checks); /* mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); mActionBar.setDisplayShowTitleEnabled(false);*/ mFragmentManager = getSupportFragmentManager(); mHostListFragment = (ChecksHostsFragment) mFragmentManager.findFragmentById(R.id.checks_list); mApplicationsFragment = (ChecksApplicationsFragment) mFragmentManager.findFragmentById(R.id.checks_details); mItemDetailsFragment = (ChecksItemsFragment) mFragmentManager.findFragmentById(R.id.checks_items_details); showHostListFragment(); } @Override protected void onResume() { super.onResume(); mNavigationView.getMenu().findItem(R.id.navigation_item_checks).setChecked(true); } @Override protected void onDestroy() { super.onDestroy(); if (mZabbixDataService != null) { mZabbixDataService.cancelLoadApplicationsTask(); mZabbixDataService.cancelLoadItemsTask(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (!mHostListFragment.isVisible()) { if (mApplicationsFragment.isVisible()) { showHostListFragment(); return true; } showApplicationsFragment(); return true; } break; } return super.onOptionsItemSelected(item); } @Override public void onHostSelected(int position, long id) { Log.d(TAG, "host selected: " + id + " position: " + position + ")"); mHostListFragment.selectItem(position); Host h = mZabbixDataService.getHostById(id); // update view pager Log.d(TAG, "Retrieved host from database: " + ((h == null) ? "null" : h.toString())); mApplicationsFragment.setHost(h); mApplicationsFragment.showApplicationsProgressBar(); showApplicationsFragment(); mApplicationsFragment.selectApplication(0); mZabbixDataService.loadApplicationsByHostId(id, this, true); } @Override public void onItemSelected(int position, Item item, boolean showItemDetails) { mItemDetailsFragment.setItem(item); mItemDetailsFragment.dismissLoadingSpinner(); if (showItemDetails) { showItemDetailsFragment(); } if (showItemDetails || mItemDetailsFragment.isVisible()) mApplicationsFragment.selectItem(position); } @Override public void onApplicationSelected(int position) { // Selecting an application never makes the item details visible. If // item details are already visible, we select the first item of the // chosen application. if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE && mItemDetailsFragment.isVisible()) { mItemDetailsFragment.setItem(null); mApplicationsFragment.selectItem(0); } } @Override public void onBackPressed() { if (!mHostListFragment.isVisible()) { if (mApplicationsFragment.isVisible()) { showHostListFragment(); return; } showApplicationsFragment(); return; } super.onBackPressed(); } @Override public void onServiceConnected(ComponentName className, IBinder service) { super.onServiceConnected(className, service); } @Override public void selectHostGroupInSpinner(int position, long itemId) { // mHostListFragment.showLoadingSpinner(); // this loads the adapter content, hence we need to show the loading // spinner first super.selectHostGroupInSpinner(position, itemId); selectInitialHost(true); if (!mHostListFragment.isVisible()) showHostListFragment(); } @Override protected void loadAdapterContent(boolean hostGroupChanged) { if (mZabbixDataService != null) mZabbixDataService.loadHostsByHostGroup(mSpinnerAdapter.getCurrentItemId(), hostGroupChanged, this); mHostListFragment.showLoadingSpinner(); } protected void showHostListFragment() { FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.show(mHostListFragment); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // portrait ft.show(mApplicationsFragment); } else { // landscape ft.hide(mItemDetailsFragment); } ft.commit(); // Uncheck the currently selected list item because the item fragment is // no longer visible. mApplicationsFragment.uncheckCurrentListItem(); mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); mDrawerToggle.setDrawerIndicatorEnabled(true); mItemDetailsFragment.setHasOptionsMenu(false); } protected void showApplicationsFragment() { if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // portrait FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.hide(mHostListFragment); ft.show(mApplicationsFragment); ft.commit(); mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); mDrawerToggle.setDrawerIndicatorEnabled(false); // details fragment becomes visible -> enable menu mItemDetailsFragment.setHasOptionsMenu(false); } // nothing to do for landscape: applications are always visible } protected void showItemDetailsFragment() { FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.hide(mHostListFragment); ft.show(mItemDetailsFragment); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // portrait ft.hide(mApplicationsFragment); } else { // landscape ft.show(mItemDetailsFragment); } ft.commit(); mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); mDrawerToggle.setDrawerIndicatorEnabled(false); // details fragment becomes visible -> enable menu mItemDetailsFragment.setHasOptionsMenu(true); } @Override public void onHostsLoaded() { Host h = selectInitialHost(false); if (h != null) { mZabbixDataService.loadApplicationsByHostId(h.getId(), this, false); mHostListFragment.dismissLoadingSpinner(); } } private Host selectInitialHost(boolean reset) { Host h; if (reset) h = mHostListFragment.selectItem(0); else h = mHostListFragment.refreshItemSelection(); mApplicationsFragment.setHost(h); return h; } @Override public void onApplicationsLoaded(boolean resetSelection) { mApplicationsFragment.dismissApplicationsProgressBar(); mItemDetailsFragment.dismissLoadingSpinner(); } @Override public void onApplicationsProgressUpdate(int progress) { mApplicationsFragment.updateProgress(progress); } @Override protected void loadData() { super.loadData(); // This loads the host list and - if necessary (i.e. currentHostId is // set) - the applications. mHostListFragment.showLoadingSpinner(); mApplicationsFragment.showApplicationsProgressBar(); mItemDetailsFragment.showLoadingSpinner(); mItemDetailsFragment.setItem(null); loadAdapterContent(true); } }