* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *
+ * http://www.apache.org/licenses/LICENSE-2.0 + *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,220 +19,95 @@
import android.Manifest;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.graphics.PixelFormat;
-import android.hardware.Camera;
import android.os.Bundle;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.ActionBarActivity;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.View;
-import android.widget.ImageView;
+import android.widget.Toast;
+
+import com.afollestad.materialcamera.MaterialCamera;
import org.jboss.aerogear.android.cookbook.shootandshare.R;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.List;
+import permissions.dispatcher.NeedsPermission;
+import permissions.dispatcher.OnNeverAskAgain;
+import permissions.dispatcher.OnPermissionDenied;
+import permissions.dispatcher.OnShowRationale;
+import permissions.dispatcher.PermissionRequest;
+import permissions.dispatcher.RuntimePermissions;
-public class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback {
+@RuntimePermissions
+public class CameraActivity extends AppCompatActivity {
- private static final String TAG = CameraActivity.class.getSimpleName();
+ private static final String TAG = CameraActivity.class.getName();
private static final int CAMERA_REQUEST = 0x1000;
- private Camera mCamera;
- private SurfaceView mSurfaceView;
- private SurfaceHolder mHolder;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
- mSurfaceView = (SurfaceView) findViewById(R.id.camera_preview);
-
- ImageView cameraButton = (ImageView) findViewById(R.id.camera_button);
- cameraButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- mCamera.takePicture(null, null, mPictureCallback);
- } catch (Exception ex) {
- Log.e("PICTURE", ex.getMessage(), ex);
- }
- }
- });
+ CameraActivityPermissionsDispatcher.displayCameraWithCheck(CameraActivity.this);
}
@Override
- protected void onResume() {
- super.onResume();
-
- int cameraCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
- int filesystemCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
- if (PackageManager.PERMISSION_GRANTED == cameraCheck &&
- PackageManager.PERMISSION_GRANTED == filesystemCheck) {
- safeCameraOpen();
-
- mHolder = mSurfaceView.getHolder();
- mHolder.addCallback(this);
- } else {
- ActivityCompat.requestPermissions(this,
- new String[]{ Manifest.permission.CAMERA,
- Manifest.permission.WRITE_EXTERNAL_STORAGE },
- CAMERA_REQUEST);
- }
-
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+ @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ CameraActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode,
+ grantResults);
}
@Override
- protected void onPause() {
- super.onPause();
- releaseCameraAndPreview();
- }
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == CAMERA_REQUEST) {
+ if (resultCode == RESULT_OK) {
+ String photoPath = data.getDataString();
- private boolean safeCameraOpen() {
- boolean qOpened = false;
+ Log.d(TAG, "Saved to: " + photoPath);
- try {
- releaseCameraAndPreview();
-
- Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
- int cameraCount = Camera.getNumberOfCameras();
- for (int cameraNumber = 0; cameraNumber < cameraCount; cameraNumber++) {
- Camera.getCameraInfo(cameraNumber, cameraInfo);
- if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
- mCamera = Camera.open(cameraNumber);
- }
- }
-
- Camera.Parameters params = mCamera.getParameters();
- List
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,16 +18,14 @@
package org.jboss.aerogear.android.cookbook.shootandshare.ui;
import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.os.Bundle;
-import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
-import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
+import com.squareup.picasso.Picasso;
+
import org.jboss.aerogear.android.cookbook.shootandshare.R;
import org.jboss.aerogear.android.cookbook.shootandshare.service.UploadService;
import org.jboss.aerogear.android.cookbook.shootandshare.util.FacebookHelper;
@@ -38,46 +36,25 @@
public class PhotoActivity extends AppCompatActivity {
private static final String TAG = PhotoActivity.class.getSimpleName();
+ private String photo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo);
+ photo = getIntent().getStringExtra("PHOTO");
+ ImageView photoImageView = (ImageView) findViewById(R.id.image);
+ Picasso.with(getApplicationContext()).load(photo).into(photoImageView);
+
ImageView googlePlus = (ImageView) findViewById(R.id.google_plus);
- googlePlus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- sendPhotoToGooglePlus();
- }
- });
+ googlePlus.setOnClickListener(v -> sendPhotoToGooglePlus());
ImageView keycloak = (ImageView) findViewById(R.id.keycloak);
- keycloak.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- sendPhotoToKeycloak();
- }
- });
+ keycloak.setOnClickListener(v -> sendPhotoToKeycloak());
ImageView facebook = (ImageView) findViewById(R.id.facebook);
- facebook.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- sendPhotoToFacebook();
- }
- });
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- String photo = getIntent().getStringExtra("PHOTO");
- Bitmap bitmap = BitmapFactory.decodeFile(photo);
-
- ImageView imageView = (ImageView) findViewById(R.id.image);
- imageView.setImageBitmap(bitmap);
+ facebook.setOnClickListener(v -> sendPhotoToFacebook());
}
private void sendPhotoToGooglePlus() {
@@ -146,7 +123,7 @@ public void onFailure(Exception e) {
private void sendPhoto(UploadService.PROVIDERS provider) {
Intent shareIntent = new Intent(PhotoActivity.this, UploadService.class);
- shareIntent.putExtra(UploadService.FILE_URI, getIntent().getStringExtra("PHOTO"));
+ shareIntent.putExtra(UploadService.FILE_URI, photo.replace("file://", ""));
shareIntent.putExtra(UploadService.PROVIDER, provider.name());
startService(shareIntent);
}
diff --git a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/FacebookHelper.java b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/FacebookHelper.java
index 4349193..89d3432 100644
--- a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/FacebookHelper.java
+++ b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/FacebookHelper.java
@@ -33,7 +33,7 @@
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.Arrays;
+import java.util.Collections;
public class FacebookHelper {
@@ -59,7 +59,7 @@ public class FacebookHelper {
.setRedirectURL(AUTHZ_REDIRECT_URL)
.setRefreshEndpoint(AUTHZ_TOKEN_ENDPOINT)
.addAdditionalAccessParam(Pair.create("response_type", "code"))
- .setScopes(Arrays.asList("photo_upload, publish_actions"))
+ .setScopes(Collections.singletonList("publish_actions"))
.asModule();
PipeManager.config("fb-upload", RestfulPipeConfiguration.class).module(AuthorizationManager.getModule(MODULE_NAME))
@@ -78,6 +78,7 @@ public static void connect(final Activity activity, final Callback callback) {
final OAuth2AuthzModule authzModule = (OAuth2AuthzModule) AuthorizationManager.getModule(MODULE_NAME);
authzModule.requestAccess(activity, new Callback