package com.integreight.onesheeld.appFragments; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.TextView; import android.widget.ToggleButton; import com.integreight.onesheeld.MainActivity; import com.integreight.onesheeld.OneSheeldApplication; import com.integreight.onesheeld.R; import com.integreight.onesheeld.enums.UIShield; import com.integreight.onesheeld.popup.ArduinoConnectivityPopup; import com.integreight.onesheeld.sdk.OneSheeldSdk; import com.integreight.onesheeld.shields.ShieldFragmentParent; import com.integreight.onesheeld.shields.controller.CameraShield; import com.integreight.onesheeld.shields.controller.ColorDetectionShield; import com.integreight.onesheeld.utils.ConnectingPinsView; import com.integreight.onesheeld.utils.customviews.MultiDirectionSlidingDrawer; import com.integreight.onesheeld.utils.customviews.OneSheeldTextView; import java.util.concurrent.CopyOnWriteArrayList; public class ShieldsOperations extends Fragment { private View v; private static ShieldsOperations thisInstance; protected SelectedShieldsListFragment mFrag; private ShieldFragmentParent<?> mContent; private MainActivity activity; private CopyOnWriteArrayList<OnChangeListener> onChangeSlidingLockListeners = new CopyOnWriteArrayList<>(); public static ShieldsOperations getInstance() { if (thisInstance == null) { thisInstance = new ShieldsOperations(); } return thisInstance; } @Override public void onSaveInstanceState(Bundle outState) { outState.putInt("position", mFrag.currentShield); super.onSaveInstanceState(outState); } @Override public void onViewStateRestored(Bundle savedInstanceState) { mFrag.currentShield = savedInstanceState == null || savedInstanceState.get("position") == null ? 0 : savedInstanceState.getInt("position"); this.activity = (MainActivity) getActivity(); super.onViewStateRestored(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { v = inflater.inflate(R.layout.activity_shields_operation, container, false); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); this.activity = (MainActivity) getActivity(); } @Override public void onViewCreated(View view, final Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(savedInstanceState); // else new Handler().postDelayed(new Runnable() { // @Override // public void run() { // initView(savedInstanceState); // } // },1000); } MultiDirectionSlidingDrawer pinsSlidingView; MultiDirectionSlidingDrawer settingsSlidingView; private void initView(Bundle savedInstanceState) { activity.getSupportFragmentManager() .beginTransaction() .replace(R.id.pinsViewContainer, ConnectingPinsView.getInstance()).commit(); activity.enableMenu(); ((CheckBox) getView().findViewById(R.id.isMenuOpening)) .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton arg0, boolean arg1) { if (arg1) { activity.disableMenu(); } else activity.enableMenu(); if (onChangeSlidingLockListeners != null && onChangeSlidingLockListeners.size() > 0) { for (OnChangeListener onChangeListener : onChangeSlidingLockListeners) { onChangeListener.onChange(arg1); } } } }); new Handler().postDelayed(new Runnable() { @Override public void run() { if (activity != null && getView() != null && getView().findViewById(R.id.isMenuOpening) != null) { activity.openMenu(); ((CheckBox) getView().findViewById(R.id.isMenuOpening)) .setChecked(false); } } }, 500); if (savedInstanceState == null) { FragmentTransaction t = activity.getSupportFragmentManager() .beginTransaction(); mFrag = SelectedShieldsListFragment.newInstance(activity); t.replace(R.id.selectedShieldsContainer, mFrag, "menuShieldsList"); t.commit(); } else { mFrag = (SelectedShieldsListFragment) activity .getSupportFragmentManager().findFragmentByTag("menuShieldsList"); SelectedShieldsListFragment.renewUiShieldAdapter(activity); } if (mContent == null) { mContent = mFrag.getShieldFragment(savedInstanceState == null || savedInstanceState.get("position") == null ? (mFrag != null ? mFrag.currentShield : 0) : savedInstanceState.getInt("position")); try { new Handler().post(new Runnable() { @Override public void run() { TextView shieldName = (OneSheeldTextView) activity .findViewById(R.id.shieldName); if (shieldName != null && mContent != null && mContent.shieldName != null) { shieldName .setVisibility(mContent.shieldName .equalsIgnoreCase(UIShield.SEVENSEGMENT_SHIELD .getName()) ? View.GONE : View.VISIBLE); shieldName .setText(mContent.shieldName); } } }); } catch (Exception e) { } // activity.setTitle(mFrag.getUIShield(0).name + " " + activity.getString(R.string.shield)); activity.getSupportFragmentManager() .beginTransaction() .replace(R.id.shieldsContainerFrame, mContent, mContent.getControllerTag()).commit(); } pinsSlidingView = (MultiDirectionSlidingDrawer) getView().findViewById( R.id.pinsViewSlidingView); settingsSlidingView = (MultiDirectionSlidingDrawer) getView() .findViewById(R.id.settingsSlidingView); getView().findViewById(R.id.pinsFixedHandler).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { pinsSlidingView.animateOpen(); } }); pinsSlidingView .setOnDrawerOpenListener(new MultiDirectionSlidingDrawer.OnDrawerOpenListener() { @Override public void onDrawerOpened() { if (getView() != null && settingsSlidingView != null) if (settingsSlidingView.isOpened()) settingsSlidingView.animateOpen(); activity.disableMenu(); } }); pinsSlidingView .setOnDrawerCloseListener(new MultiDirectionSlidingDrawer.OnDrawerCloseListener() { @Override public void onDrawerClosed() { if (getView() != null && settingsSlidingView != null && getView().findViewById(R.id.isMenuOpening) != null) if (!settingsSlidingView.isOpened() && !((CheckBox) getView().findViewById( R.id.isMenuOpening)).isChecked()) activity.enableMenu(); } }); pinsSlidingView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return pinsSlidingView.isOpened(); } }); getView().findViewById(R.id.settingsFixedHandler).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { if (getView() != null && settingsSlidingView != null) settingsSlidingView.animateOpen(); } }); settingsSlidingView .setOnDrawerOpenListener(new MultiDirectionSlidingDrawer.OnDrawerOpenListener() { @Override public void onDrawerOpened() { if (getView() != null && pinsSlidingView != null && pinsSlidingView.isOpened()) { pinsSlidingView.animateOpen(); } activity.disableMenu(); } }); settingsSlidingView .setOnDrawerCloseListener(new MultiDirectionSlidingDrawer.OnDrawerCloseListener() { @Override public void onDrawerClosed() { if (getView() != null && pinsSlidingView != null && getView().findViewById( R.id.isMenuOpening) != null) if (!pinsSlidingView.isOpened() && !((CheckBox) getView().findViewById( R.id.isMenuOpening)).isChecked()) activity.enableMenu(); } }); settingsSlidingView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return settingsSlidingView.isOpened(); } }); ((ToggleButton) getView().findViewById(R.id.shieldStatus)) .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (MainActivity.currentShieldTag != null) ((OneSheeldApplication) activity.getApplication()) .getRunningShields().get( MainActivity.currentShieldTag).isInteractive = isChecked; } }); } @Override public void onStart() { super.onStart(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); this.activity = (MainActivity) getActivity(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // inflater.inflate(R.menu.shields_operation, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: return true; } return super.onOptionsItemSelected(item); } @Override public void onDestroy() { mContent = null; super.onDestroy(); } private OneSheeldApplication getApplication() { return (OneSheeldApplication) activity.getApplication(); } @Override public void onResume() { activity.getOnConnectionLostHandler().canInvokeOnCloseConnection = false; if (!getApplication().isConnectedToBluetooth()) { activity.getOnConnectionLostHandler().connectionLost = true; } activity.getOnConnectionLostHandler().sendEmptyMessage(0); activity.closeMenu(); new Handler().postDelayed(new Runnable() { @Override public void run() { if (activity != null && activity.findViewById(R.id.getAvailableDevices) != null) activity.findViewById(R.id.getAvailableDevices) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // if (!((OneSheeldApplication) activity.getApplication()).getIsDemoMode()) { if (activity.getThisApplication().getRunningShields().get(UIShield.CAMERA_SHIELD.name()) != null) try { ((CameraShield) activity.getThisApplication().getRunningShields().get(UIShield.CAMERA_SHIELD.name())).hidePreview(); } catch (RemoteException e) { e.printStackTrace(); } if (activity.getThisApplication().getRunningShields().get(UIShield.COLOR_DETECTION_SHIELD.name()) != null) try { ((ColorDetectionShield) activity.getThisApplication().getRunningShields().get(UIShield.COLOR_DETECTION_SHIELD.name())).hidePreview(); } catch (RemoteException e) { e.printStackTrace(); } // } else { // Log.test("Test", "Cannot disconnect in demoMode"); // ((OneSheeldApplication) activity.getApplication()).setIsDemoMode(false); // } activity.closeMenu(); if (activity.getSupportFragmentManager() .getBackStackEntryCount() > 1) { activity.getSupportFragmentManager() .popBackStack(); activity.getSupportFragmentManager() .executePendingTransactions(); } OneSheeldSdk.getManager().disconnectAll(); if (!ArduinoConnectivityPopup.isOpened) { ArduinoConnectivityPopup.isOpened = true; new ArduinoConnectivityPopup(activity) .show(); } } }); } }, 500); if (((OneSheeldApplication) activity.getApplication()).getIsDemoMode() && !getApplication().isConnectedToBluetooth()) ((ViewGroup) activity.findViewById(R.id.getAvailableDevices)).getChildAt(1).setBackgroundResource(R.drawable.scan_button); else ((ViewGroup) activity.findViewById(R.id.getAvailableDevices)).getChildAt(1).setBackgroundResource(R.drawable.bluetooth_disconnect_button); ((ViewGroup) activity.findViewById(R.id.cancelConnection)) .getChildAt(1).setBackgroundResource(R.drawable.back_button); new Handler().postDelayed(new Runnable() { @Override public void run() { activity.findViewById(R.id.cancelConnection) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean isMenuOpened = (activity.appSlidingMenu != null && activity.appSlidingMenu .isOpen()) || (settingsSlidingView != null && settingsSlidingView .isOpened()) || (pinsSlidingView != null && pinsSlidingView .isOpened()); activity.onBackPressed(); if (!isMenuOpened) activity.findViewById(R.id.cancelConnection) .setOnClickListener( new View.OnClickListener() { @Override public void onClick( View v) { // TODO // Auto-generated // method stub } }); } }); } }, 500); super.onResume(); } public void addOnSlidingLocksListener(OnChangeListener listener) { if (onChangeSlidingLockListeners == null) onChangeSlidingLockListeners = new CopyOnWriteArrayList<>(); if (!onChangeSlidingLockListeners.contains(listener)) onChangeSlidingLockListeners.add(listener); } public static interface OnChangeListener { public void onChange(boolean isChecked); } }