package com.kedzie.vbox.machine.settings; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.kedzie.vbox.R; import com.kedzie.vbox.api.IMedium; import com.kedzie.vbox.api.IStorageController; import com.kedzie.vbox.api.jaxb.DeviceType; import com.kedzie.vbox.api.jaxb.IMediumAttachment; import com.kedzie.vbox.app.BundleBuilder; import com.kedzie.vbox.app.FragmentActivity; import com.kedzie.vbox.app.FragmentElement; import com.kedzie.vbox.app.Utils; import com.kedzie.vbox.machine.settings.StorageListFragment.OnMediumAttachmentClickedListener; import com.kedzie.vbox.machine.settings.StorageListFragment.OnStorageControllerClickedListener; public class StorageFragment extends SherlockFragment implements OnStorageControllerClickedListener, OnMediumAttachmentClickedListener { private View _view; private boolean _dualPane; private StorageListFragment _listFragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { _view = LayoutInflater.from(getActivity()).inflate(R.layout.settings_storage, null); FrameLayout detailsFrame = (FrameLayout)_view.findViewById(R.id.details); _dualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE; Fragment f = getChildFragmentManager().findFragmentByTag("list"); if(f==null) { _listFragment = new StorageListFragment(); _listFragment.setArguments(getArguments()); getChildFragmentManager().beginTransaction().add(R.id.list, _listFragment, "list").commit(); } else { _listFragment = (StorageListFragment)f; } return _view; } @Override public void onStorageControllerClicked(IStorageController element) { show(new FragmentElement(element.getName(), R.drawable.ic_settings_storage, StorageControllerFragment.class, new BundleBuilder().putAll(getArguments()).putParcelable(IStorageController.BUNDLE, element).create())); } @Override public void onMediumAttachmentClicked(IMediumAttachment element) { FragmentElement details = new FragmentElement("Attachment", R.drawable.ic_settings_storage, null, new BundleBuilder().putAll(getArguments()).putParcelable(IMedium.BUNDLE, element).create()); if(element.getType().equals(DeviceType.HARD_DISK)) details.clazz = StorageHardDiskFragment.class; else if(element.getType().equals(DeviceType.DVD)) details.clazz = StorageDVDFragment.class; // else if(element.getType().equals(DeviceType.FLOPPY)) // details.clazz = StorageFloppyFragment.class; show(details); } private void show(FragmentElement details) { if(_dualPane) { Utils.setCustomAnimations(getChildFragmentManager().beginTransaction()).replace(R.id.details, details.instantiate(getActivity())).commit(); } else { startActivity(new Intent(getActivity(), FragmentActivity.class).putExtra(FragmentElement.BUNDLE, details)); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if(_listFragment !=null) _listFragment.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { if(_listFragment != null) return _listFragment.onOptionsItemSelected(item); return false; } }