package com.eolwral.osmonitor;
import java.util.HashMap;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import com.eolwral.osmonitor.ipc.IpcService;
import com.eolwral.osmonitor.ui.ConnectionFragment;
import com.eolwral.osmonitor.ui.MessageFragment;
import com.eolwral.osmonitor.ui.MiscFragment;
import com.eolwral.osmonitor.ui.ProcessFragment;
import com.eolwral.osmonitor.util.CoreUtil;
import com.eolwral.osmonitor.util.UserInterfaceUtil;
import com.eolwral.osmonitor.settings.Settings;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.view.Menu;
@SuppressWarnings("deprecation")
public class OSMonitor extends OSMonitorActivity implements
ActionBar.TabListener, ViewPager.OnPageChangeListener {
private ViewPager mViewPager = null;
@Override
public void onStop() {
super.onStop();
if (mViewPager == null)
return;
((OSMonitorPagerAdapter) mViewPager.getAdapter()).getItem(
mViewPager.getCurrentItem()).setUserVisibleHint(false);
// end self
if (isFinishing()) {
IpcService.getInstance().disconnect();
android.os.Process.killProcess(android.os.Process.myPid());
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
// create view
super.onCreate(savedInstanceState);
IpcService.Initialize(this);
UserInterfaceUtil.Initialize(this);
// load layout
setContentView(R.layout.ui_main);
// prepare pager
mViewPager = (ViewPager) findViewById(R.id.mainpager);
mViewPager
.setAdapter(new OSMonitorPagerAdapter(getSupportFragmentManager()));
mViewPager.setOnPageChangeListener(this);
// keep all fragments
mViewPager.setOffscreenPageLimit(5);
// prepare action bar
final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setElevation(0);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.addTab(actionBar.newTab().setText(R.string.ui_process_tab)
.setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.ui_connection_tab)
.setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.ui_misc_tab)
.setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.ui_debug_tab)
.setTabListener(this));
mViewPager.setCurrentItem(0);
// start background service
final Settings setting = Settings.getInstance(this);
if ((setting.isEnableCPUMeter() || setting.isAddShortCut())
&& !CoreUtil.isServiceRunning(this))
startService(new Intent(this, OSMonitorService.class));
// prepare exit
LocalBroadcastManager.getInstance(this).registerReceiver(ExitReceiver,
new IntentFilter("Exit"));
}
private BroadcastReceiver ExitReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
IpcService.getInstance().forceExit();
context.stopService(new Intent(context, OSMonitorService.class));
finish();
}
};
@Override
protected void onDestroy() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(ExitReceiver);
super.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// No call for super(). Bug on API Level > 11.
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
/* prepare option on action bar */
super.onCreateOptionsMenu(menu);
return true;
}
@Override
public void onRestart() {
super.onRestart();
if (mViewPager == null)
return;
Fragment mFragment = ((OSMonitorPagerAdapter) mViewPager.getAdapter())
.getItem(mViewPager.getCurrentItem());
if (mFragment != null) {
// catch exception when back from screen off
try {
mFragment.setUserVisibleHint(true);
} catch (Exception e) { }
}
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
if (mViewPager.getCurrentItem() != tab.getPosition())
mViewPager.setCurrentItem(tab.getPosition());
// force display menu when selected
((OSMonitorPagerAdapter) mViewPager.getAdapter()).getItem(
mViewPager.getCurrentItem()).setMenuVisibility(true);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// force to hidden when unselected
((OSMonitorPagerAdapter) mViewPager.getAdapter())
.getItem(tab.getPosition()).setMenuVisibility(false);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
getSupportActionBar().setSelectedNavigationItem(arg0);
}
/* Pager Adapter for OSMonitor */
public class OSMonitorPagerAdapter extends FragmentPagerAdapter {
@SuppressLint("UseSparseArrays")
HashMap<Integer, Fragment> mFragment = new HashMap<Integer, Fragment>();
public OSMonitorPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (mFragment.containsKey(position))
return mFragment.get(position);
switch (position) {
/* Process */
case 0:
mFragment.put(0, new ProcessFragment());
break;
/* Connection */
case 1:
mFragment.put(1, new ConnectionFragment());
break;
/* Misc */
case 2:
mFragment.put(2, new MiscFragment());
break;
/* Message */
case 3:
mFragment.put(3, new MessageFragment());
break;
/* Monitor */
case 4:
// under construction
break;
}
return mFragment.get(position);
}
@Override
public int getCount() {
return 4;
}
}
}