package com.integreight.onesheeld.shields.fragments; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.RemoteException; import android.support.v4.content.FileProvider; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.Toast; import com.integreight.onesheeld.BuildConfig; import com.integreight.onesheeld.MainActivity; import com.integreight.onesheeld.R; import com.integreight.onesheeld.appFragments.ShieldsOperations; import com.integreight.onesheeld.shields.ShieldFragmentParent; import com.integreight.onesheeld.shields.controller.CameraShield; import com.integreight.onesheeld.shields.controller.CameraShield.CameraEventHandler; import com.integreight.onesheeld.shields.controller.utils.CameraUtils; import java.io.File; public class CameraFragment extends ShieldFragmentParent<CameraFragment> implements ShieldsOperations.OnChangeListener, MainActivity.OnSlidingMenueChangeListner { Bitmap lastImageBitmap; private CheckBox frontBackToggle; private CheckBox cameraPreviewToggle; private ImageView lastImage; private View camerLogo; private String lastImageSrc = null; private CameraEventHandler cameraEventHandler = new CameraEventHandler() { @Override public void checkCameraHardware(boolean isHasCamera) { } @Override public void OnPictureTaken() { } @Override public void takePicture() { } @Override public void setFlashMode(String flash_mode) { } @Override public void setOnCameraPreviewTypeChanged(final boolean isBack) { if (canChangeUI() && frontBackToggle != null && getView() != null) uiHandler.post(new Runnable() { @Override public void run() { removeListners(); frontBackToggle.setChecked(isBack); applyListeners(); } }); } @Override public void updatePreviewButton(final String lastImagePath) { if (canChangeUI() && frontBackToggle != null && getView() != null) uiHandler.post(new Runnable() { @Override public void run() { if (lastImagePath != null && !lastImagePath.equals("")) { lastImageSrc = lastImagePath; lastImageBitmap = BitmapFactory.decodeFile(lastImageSrc); if (lastImage != null && lastImageBitmap != null) { lastImageBitmap = Bitmap.createScaledBitmap(lastImageBitmap, 50, 50, true); lastImage.setImageBitmap(lastImageBitmap); lastImage.setVisibility(View.VISIBLE); } } } }); } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment if (getAppActivity().getSupportFragmentManager().findFragmentByTag(ShieldsOperations.class.getName()) != null) ((ShieldsOperations) getAppActivity().getSupportFragmentManager().findFragmentByTag(ShieldsOperations.class.getName())).addOnSlidingLocksListener(this); activity.registerSlidingMenuListner(this); return inflater.inflate(R.layout.camera_shield_fragment_layout, container, false); } @Override public void doOnViewCreated(View view, Bundle savedInstanceState) { frontBackToggle = (CheckBox) view.findViewById(R.id.frontBackToggle); cameraPreviewToggle = (CheckBox) view.findViewById(R.id.camera_preview_toggle); lastImage = (ImageView) view.findViewById(R.id.camera_last_image); camerLogo = view.findViewById(R.id.camera_log); // lastImageSrc = ((CameraShield) getApplication().getRunningShields().get(getControllerTag())).getLastImageAbsoultePath(); activity.backgroundThreadHandler.post(new Runnable() { @Override public void run() { try { lastImageSrc = CameraUtils.getLastCapturedImagePathFromOneSheeldFolder(activity, false); } catch (SecurityException e) { } if (lastImageSrc != null) { lastImageBitmap = BitmapFactory.decodeFile(lastImageSrc); if (lastImage != null && lastImageBitmap != null) { lastImageBitmap = Bitmap.createScaledBitmap(lastImageBitmap, 50, 50, true); uiHandler.post(new Runnable() { @Override public void run() { lastImage.setImageBitmap(lastImageBitmap); lastImage.setVisibility(View.VISIBLE); } }); } } else uiHandler.post(new Runnable() { @Override public void run() { lastImage.setVisibility(View.INVISIBLE); } } ); } }); } @Override public void onResume() { super.onResume(); activity.backgroundThreadHandler.post(new Runnable() { @Override public void run() { if (lastImage != null) { uiHandler.post(new Runnable() { @Override public void run() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { lastImage.setAlpha((float) 1); } } }); try { lastImageSrc = CameraUtils.getLastCapturedImagePathFromOneSheeldFolder(activity, false); } catch (SecurityException e) { } if (lastImageSrc != null) { lastImageBitmap = BitmapFactory.decodeFile(lastImageSrc); if (lastImage != null && lastImageBitmap != null) { lastImageBitmap = Bitmap.createScaledBitmap(lastImageBitmap, 50, 50, true); uiHandler.post(new Runnable() { @Override public void run() { lastImage.setImageBitmap(lastImageBitmap); lastImage.setVisibility(View.VISIBLE); } }); } } else uiHandler.post(new Runnable() { @Override public void run() { lastImage.setVisibility(View.INVISIBLE); } }); } } }); } @Override public void doOnStart() { ((CameraShield) getApplication().getRunningShields().get( getControllerTag())).setCameraEventHandler(cameraEventHandler); } private void removeListners() { frontBackToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { } }); cameraPreviewToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { } }); lastImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } private void applyListeners() { frontBackToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { boolean feeback = ((CameraShield) getApplication().getRunningShields().get( getControllerTag())).setCameraToPreview(b); if (!feeback) { removeListners(); frontBackToggle.setChecked(!b); applyListeners(); } } }); cameraPreviewToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { if (!((CheckBox) activity.findViewById(R.id.isMenuOpening)).isChecked()) ((CheckBox) activity.findViewById(R.id.isMenuOpening)).setChecked(true); else { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) try { if (((CameraShield) getApplication().getRunningShields().get(getControllerTag())).showPreview()) camerLogo.setVisibility(View.INVISIBLE); // else // cameraPreviewToggle.setChecked(false); } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(false); applyListeners(); } } } else { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) try { if ((((CameraShield) getApplication().getRunningShields().get(getControllerTag())).hidePreview())) camerLogo.setVisibility(View.VISIBLE); // else // cameraPreviewToggle.setChecked(true); } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(true); applyListeners(); } } } }); lastImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); if (lastImageSrc != null) { File img = new File(lastImageSrc); if (img.exists()) { cameraPreviewToggle.setEnabled(false); if(Build.VERSION.SDK_INT>=24) { Uri fileURI = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", img); intent.setDataAndType(fileURI, "image/*"); } else { intent.setDataAndType(Uri.fromFile(img), "image/*"); } intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); activity.startActivity(intent); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { v.setAlpha((float) 0.5); } } } } }); } @Override public void doOnActivityCreated(Bundle savedInstanceState) { } private void initializeFirmata() { if (getApplication().getRunningShields().get(getControllerTag()) == null) { getApplication().getRunningShields().put(getControllerTag(), new CameraShield(activity, getControllerTag())); } } public void doOnServiceConnected() { initializeFirmata(); } @Override public void doOnResume() { uiHandler.postDelayed(new Runnable() { @Override public void run() { cameraPreviewToggle.setEnabled(true); if (activity != null && activity.findViewById(R.id.isMenuOpening) != null) { if (((CheckBox) activity.findViewById(R.id.isMenuOpening)).isChecked() && !activity.isMenuOpened() && cameraPreviewToggle.isChecked()) { try { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) if (((CameraShield) getApplication().getRunningShields().get(getControllerTag())).showPreview()) camerLogo.setVisibility(View.INVISIBLE); // else // cameraPreviewToggle.setChecked(false); } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(false); applyListeners(); } } else { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) try { if (((CameraShield) getApplication().getRunningShields().get(getControllerTag())).hidePreview()) camerLogo.setVisibility(View.VISIBLE); // else // cameraPreviewToggle.setChecked(true); } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(true); applyListeners(); } } } } }, 500); try { ((CameraShield) getApplication().getRunningShields().get( getControllerTag())).setCameraToPreview(((CameraShield) getApplication().getRunningShields().get( getControllerTag())).isBackPreview()); ((CameraShield) getApplication().getRunningShields().get( getControllerTag())).invalidatePreview(); } catch (RemoteException e) { e.printStackTrace(); } removeListners(); frontBackToggle.setChecked(((CameraShield) getApplication().getRunningShields().get( getControllerTag())).isBackPreview()); applyListeners(); } @Override public void doOnPause() { if (getApplication().getRunningShields().get( getControllerTag()) != null) { try { ((CameraShield) getApplication().getRunningShields().get( getControllerTag())).hidePreview(); } catch (RemoteException e) { e.printStackTrace(); } } camerLogo.setVisibility(View.VISIBLE); if (getView() != null) getView().invalidate(); } @Override public void onChange(boolean isChecked) { if (canChangeUI() && getView() != null && getApplication().getRunningShields().get( getControllerTag()) != null) { if (activity != null && activity.findViewById(R.id.isMenuOpening) != null) { if (isChecked && !activity.isMenuOpened() && cameraPreviewToggle.isChecked()) { try { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) if (((CameraShield) getApplication().getRunningShields().get(getControllerTag())).showPreview()) camerLogo.setVisibility(View.INVISIBLE); // else // cameraPreviewToggle.setChecked(false); } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(false); applyListeners(); } } else if (!isChecked || activity.isMenuOpened()) { try { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) if (((CameraShield) getApplication().getRunningShields().get(getControllerTag())).hidePreview()) camerLogo.setVisibility(View.VISIBLE); // else // cameraPreviewToggle.setChecked(true); if (!isChecked && !activity.isMenuOpened()) { removeListners(); cameraPreviewToggle.setChecked(false); applyListeners(); } } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(true); applyListeners(); } } } } } @Override public void onMenuClosed() { if (canChangeUI() && getView() != null && getApplication().getRunningShields().get( getControllerTag()) != null) { if (activity != null && activity.findViewById(R.id.isMenuOpening) != null) { if (((CheckBox) activity.findViewById(R.id.isMenuOpening)).isChecked() && cameraPreviewToggle.isChecked()) { try { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) if (((CameraShield) getApplication().getRunningShields().get(getControllerTag())).showPreview()) camerLogo.setVisibility(View.INVISIBLE); // else // cameraPreviewToggle.setChecked(false); } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(false); applyListeners(); } } else { if ((CameraShield) getApplication().getRunningShields().get(getControllerTag()) != null) try { if (((CameraShield) getApplication().getRunningShields().get(getControllerTag())).hidePreview()) camerLogo.setVisibility(View.VISIBLE); // else // cameraPreviewToggle.setChecked(true); } catch (RemoteException e) { e.printStackTrace(); removeListners(); cameraPreviewToggle.setChecked(true); applyListeners(); } } } } } }