package com.kedzie.vbox.metrics; import java.util.ArrayList; import java.util.List; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.PagerTitleStrip; import android.support.v4.view.ViewPager; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.kedzie.vbox.R; import com.kedzie.vbox.SettingsActivity; import com.kedzie.vbox.app.BaseActivity; import com.kedzie.vbox.app.Utils; import com.kedzie.vbox.soap.VBoxSvc; /** * Activity to view metric graphs for Virtual Machine or Host * @author Marek Kedzierski * @apiviz.stereotype activity */ public class MetricActivity extends BaseActivity { private static final int REQUEST_CODE_PREFS = 1; static final String ACTION_METRIC_QUERY = "com.kedzie.vbox.METRIC_QUERY"; public static final String INTENT_TITLE="t",INTENT_OBJECT = "o", INTENT_RAM_AVAILABLE = "ra", INTENT_RAM_METRICS="rm", INTENT_CPU_METRICS="cm"; private ViewPager _flipper; private MetricView cpuV, ramV; private DataThread _thread; private VBoxSvc _vmgr; private String _object; private int _ramAvailable; private int _count; private int _period; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().setDisplayHomeAsUpEnabled(false); getSupportActionBar().setTitle(getIntent().getStringExtra(INTENT_TITLE)); _vmgr = getIntent().getParcelableExtra(VBoxSvc.BUNDLE); _object = getIntent().getStringExtra(INTENT_OBJECT); _ramAvailable = getIntent().getIntExtra(INTENT_RAM_AVAILABLE, 0); _count = Utils.getIntPreference(this, SettingsActivity.PREF_COUNT); _period = Utils.getIntPreference(this, SettingsActivity.PREF_PERIOD); View content = LayoutInflater.from(this).inflate(R.layout.metrics, null); cpuV = (MetricView) content.findViewById(R.id.cpu_metrics); cpuV.init(100, getIntent().getStringArrayExtra(INTENT_CPU_METRICS)); cpuV.setMetricPrefs(_count, _period); ramV = (MetricView) content.findViewById(R.id.ram_metrics); ramV.init( _ramAvailable*1000, getIntent().getStringArrayExtra(INTENT_RAM_METRICS)); ramV.setMetricPrefs(_count, _period); //for large devices show both metric graphs on same page if( (getResources().getConfiguration().screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) >=Configuration.SCREENLAYOUT_SIZE_LARGE) { setContentView(content); } else { //for smaller devices show a single metric graph on the page MetricViewPagerAdapter adapter = new MetricViewPagerAdapter(); adapter.addView(cpuV); adapter.addView(ramV); _flipper = new ViewPager(this); _flipper.setId(99); _flipper.setAdapter(adapter); PagerTitleStrip tabStrip = new PagerTitleStrip(this); ViewPager.LayoutParams params = new ViewPager.LayoutParams(); params.width=LayoutParams.MATCH_PARENT; params.height=LayoutParams.WRAP_CONTENT; params.gravity=Gravity.TOP; _flipper.addView(tabStrip, params); setContentView(_flipper); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==REQUEST_CODE_PREFS) { _count = Utils.getIntPreference(this, SettingsActivity.PREF_COUNT); _period = Utils.getIntPreference(this, SettingsActivity.PREF_PERIOD); cpuV.setMetricPrefs(_count, _period); ramV.setMetricPrefs(_count, _period); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.metric_actions, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.metrics_option_menu_preferences: Utils.startActivityForResult(this, new Intent(this, SettingsActivity.class), REQUEST_CODE_PREFS); return true; } return true; } @Override protected void onStart() { super.onStart(); _thread = new DataThread(this, _vmgr, _object, Utils.getIntPreference(this, SettingsActivity.PREF_PERIOD), cpuV, ramV); _thread.start(); } @Override protected void onStop() { if(_thread!=null) _thread.quit(); super.onStop(); } class MetricViewPagerAdapter extends PagerAdapter { private List<MetricView> _views = new ArrayList<MetricView>(); public void addView(MetricView view) { _views.add(view); } @Override public int getCount() { return _views.size(); } @Override public CharSequence getPageTitle(int position) { return _views.get(position).getHeader(); } @Override public boolean isViewFromObject(View view, Object object) { return view.equals(object); } @Override public Object instantiateItem(ViewGroup container, int position) { MetricView view = _views.get(position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object); } } }