diff --git a/ios/src/cz/nic/tablexia/IOSCameraOpener.java b/ios/src/cz/nic/tablexia/IOSCameraOpener.java index 61d29d7d38f341b9949b02ec055425980d1ca05f..b2b48660e934120e89505b612fb47fb4123f7e62 100644 --- a/ios/src/cz/nic/tablexia/IOSCameraOpener.java +++ b/ios/src/cz/nic/tablexia/IOSCameraOpener.java @@ -17,17 +17,109 @@ package cz.nic.tablexia; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.backends.iosrobovm.IOSApplication; +import com.badlogic.gdx.graphics.Pixmap; + +import org.robovm.apple.foundation.NSData; +import org.robovm.apple.uikit.UIImage; +import org.robovm.apple.uikit.UIImagePickerController; +import org.robovm.apple.uikit.UIImagePickerControllerCameraCaptureMode; +import org.robovm.apple.uikit.UIImagePickerControllerCameraDevice; +import org.robovm.apple.uikit.UIImagePickerControllerDelegate; +import org.robovm.apple.uikit.UIImagePickerControllerEditingInfo; +import org.robovm.apple.uikit.UIImagePickerControllerSourceType; +import org.robovm.apple.uikit.UIInterfaceOrientation; +import org.robovm.apple.uikit.UIInterfaceOrientationMask; +import org.robovm.apple.uikit.UINavigationController; +import org.robovm.apple.uikit.UINavigationControllerDelegateAdapter; +import org.robovm.apple.uikit.UIViewController; + +import java.nio.ByteBuffer; + import cz.nic.tablexia.util.CameraOpener; -public class IOSCameraOpener extends CameraOpener{ +public class IOSCameraOpener extends CameraOpener { + + private class PickerControllerDelegate extends UINavigationControllerDelegateAdapter implements UIImagePickerControllerDelegate { + @Override + public void didFinishPickingMedia(UIImagePickerController picker, UIImagePickerControllerEditingInfo info) { + UIImage uiImage = info.getOriginalImage(); + + NSData nsData = uiImage.toPNGData(); + ByteBuffer buffer = nsData.asByteBuffer(); + byte[] imgData = new byte[buffer.capacity()]; //limit ? + buffer.get(imgData); + + Pixmap pixmap = new Pixmap(imgData, 0, imgData.length); + + nsData.dispose(); + uiImage.dispose(); + closeCamera(); + + onPhotoTaken(pixmap, true); + } + + + @Override + public void didCancel(UIImagePickerController picker) { + picker.dismissViewController(true, null); + } + + @Override + public UIInterfaceOrientationMask getSupportedInterfaceOrientations(UINavigationController navigationController) { + return UIInterfaceOrientationMask.All; + } + + @Override + public UIInterfaceOrientation getPreferredInterfaceOrientation(UINavigationController navigationController) { + return UIInterfaceOrientation.LandscapeLeft; + } + } + + private UIViewController appController; + private PickerControllerDelegate delegate; + private UIImagePickerController imagePickerController; + @Override public void onCameraOpen() { - // TODO: 17.1.17 add iOS implementation + appController = ((IOSApplication) Gdx.app).getUIViewController(); + imagePickerController = new UIImagePickerController() { + @Override + public boolean shouldAutorotate() { + return false; + } + + @Override + public UIInterfaceOrientation getPreferredInterfaceOrientation() { + return UIInterfaceOrientation.LandscapeRight; + } + + @Override + public UIInterfaceOrientationMask getSupportedInterfaceOrientations() { + return UIInterfaceOrientationMask.All; + } + }; + + imagePickerController.getView().setBounds(appController.getView().getBounds()); + + imagePickerController.setSourceType(UIImagePickerControllerSourceType.Camera); + imagePickerController.setCameraCaptureMode(UIImagePickerControllerCameraCaptureMode.Photo); + imagePickerController.setCameraDevice(UIImagePickerControllerCameraDevice.Front); + + delegate = new PickerControllerDelegate(); + imagePickerController.setDelegate(delegate); + appController.presentViewController(imagePickerController, true, null); } @Override public void onCameraClose() { + delegate.dispose(); + delegate = null; + imagePickerController.dismissViewController(true, null); + imagePickerController.removeFromParentViewController(); + imagePickerController = null; } @Override diff --git a/ios/src/cz/nic/tablexia/IOSLauncher.java b/ios/src/cz/nic/tablexia/IOSLauncher.java index 08d61ae30b94991a5c425be926947d8eb91c1c4d..a3172de0a537c66ed171fb8d091ef4eab340e5b3 100644 --- a/ios/src/cz/nic/tablexia/IOSLauncher.java +++ b/ios/src/cz/nic/tablexia/IOSLauncher.java @@ -21,11 +21,8 @@ import com.badlogic.gdx.Files; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.iosrobovm.IOSApplication; import com.badlogic.gdx.backends.iosrobovm.IOSApplicationConfiguration; -import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Pixmap; -import org.robovm.apple.coreservices.CFHost; -import org.robovm.apple.coreservices.CFHostInfoType; import org.robovm.apple.foundation.NSData; import org.robovm.apple.foundation.NSException; import org.robovm.apple.uikit.UIImage; @@ -37,11 +34,7 @@ import org.robovm.apple.uikit.UIInterfaceOrientation; import org.robovm.apple.uikit.UIInterfaceOrientationMask; import org.robovm.apple.uikit.UINavigationController; import org.robovm.apple.uikit.UINavigationControllerDelegateAdapter; -import org.robovm.apple.uikit.UINavigationControllerOperation; import org.robovm.apple.uikit.UIViewController; -import org.robovm.apple.uikit.UIViewControllerAnimatedTransitioning; -import org.robovm.apple.uikit.UIViewControllerInteractiveTransitioning; -import org.robovm.apple.uikit.UIWindow; import org.robovm.objc.ObjCObject; import org.robovm.objc.block.VoidBlock1; import org.robovm.apple.foundation.NSAutoreleasePool;