package com.kedzie.vbox.machine.group; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.content.LocalBroadcastManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.kedzie.vbox.R; import com.kedzie.vbox.SettingsActivity; import com.kedzie.vbox.VBoxApplication; import com.kedzie.vbox.api.IHost; import com.kedzie.vbox.api.IMachine; import com.kedzie.vbox.api.jaxb.VBoxEventType; import com.kedzie.vbox.app.BundleBuilder; import com.kedzie.vbox.app.Utils; import com.kedzie.vbox.event.EventNotificationReceiver; import com.kedzie.vbox.host.HostSettingsActivity; import com.kedzie.vbox.metrics.MetricActivity; import com.kedzie.vbox.soap.VBoxSvc; import com.kedzie.vbox.task.ActionBarTask; import com.kedzie.vbox.task.ConfigureMetricsTask; /** * Show Virtual Machines/Groups in a hierarchical layout * @apiviz.stereotype fragment */ public class MachineGroupListFragment extends MachineGroupListBaseFragment { private static final int REQUEST_CODE_PREFERENCES = 6; private LocalBroadcastManager lbm; private EventNotificationReceiver _notificationReceiver = new EventNotificationReceiver(); private BroadcastReceiver _receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(VBoxEventType.ON_MACHINE_STATE_CHANGED.name())) new HandleEventTask(_vmgr).execute(intent.getExtras()); } }; /** * Handle MachineStateChanged event */ private class HandleEventTask extends ActionBarTask<Bundle, IMachine> { public HandleEventTask(VBoxSvc vmgr) { super(getSherlockActivity(), vmgr); } @Override protected IMachine work(Bundle... params) throws Exception { IMachine m = BundleBuilder.getProxy(params[0], IMachine.BUNDLE, IMachine.class); Utils.cacheProperties(m); return m; } @Override protected void onSuccess(IMachine result) { _listView.update(result); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); return _listView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); lbm = LocalBroadcastManager.getInstance(getActivity().getApplicationContext()); lbm.registerReceiver(_notificationReceiver, new IntentFilter(VBoxEventType.ON_MACHINE_STATE_CHANGED.name())); } @Override public void onStart() { super.onStart(); lbm.registerReceiver(_receiver, new IntentFilter(VBoxEventType.ON_MACHINE_STATE_CHANGED.name())); } @Override public void onStop() { super.onStop(); lbm.unregisterReceiver(_receiver); } @Override public void onDestroy() { lbm.unregisterReceiver(_notificationReceiver); super.onDestroy(); } @Override public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu, com.actionbarsherlock.view.MenuInflater inflater) { inflater.inflate(R.menu.machine_list_actions, menu); } @Override public boolean onOptionsItemSelected( com.actionbarsherlock.view.MenuItem item) { switch(item.getItemId()) { case R.id.option_menu_refresh: new LoadGroupsTask(_vmgr).execute(); return false; case R.id.machine_list_option_menu_metrics: startActivity(new Intent(getActivity(), MetricActivity.class).putExtra(VBoxSvc.BUNDLE, (Parcelable)_vmgr) .putExtra(MetricActivity.INTENT_TITLE, getResources().getString(R.string.host_metrics)) .putExtra(MetricActivity.INTENT_OBJECT, _vmgr.getVBox().getHost().getIdRef() ) .putExtra(MetricActivity.INTENT_RAM_AVAILABLE, _vmgr.getVBox().getHost().getMemorySize()) .putExtra(MetricActivity.INTENT_CPU_METRICS , new String[] { "CPU/Load/User", "CPU/Load/Kernel" } ) .putExtra(MetricActivity.INTENT_RAM_METRICS , new String[] { "RAM/Usage/Used" })); return true; case R.id.option_menu_preferences: Utils.startActivityForResult(getActivity(), new Intent(getActivity(), SettingsActivity.class),REQUEST_CODE_PREFERENCES); return true; case R.id.machine_list_option_menu_host_settings: if(VBoxApplication.getInstance().isPremiumVersion()) Utils.startActivity(getActivity(), new Intent(getActivity(), HostSettingsActivity.class).putExtra(IHost.BUNDLE, _vmgr.getVBox().getHost())); else VBoxApplication.getInstance().showPremiumOffer(getActivity()); return true; } return false; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==REQUEST_CODE_PREFERENCES) { new ConfigureMetricsTask(getSherlockActivity(), _vmgr).execute( Utils.getIntPreference(getActivity(), SettingsActivity.PREF_PERIOD), Utils.getIntPreference(getActivity(), SettingsActivity.PREF_COUNT) ); } } }