diff --git a/ShootAndShare/app/build.gradle b/ShootAndShare/app/build.gradle index 1c9d26f..556de6a 100644 --- a/ShootAndShare/app/build.gradle +++ b/ShootAndShare/app/build.gradle @@ -1,16 +1,25 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 25 + buildToolsVersion "25.0.0" defaultConfig { applicationId "org.jboss.aerogear.android.cookbook.shootandshare" minSdkVersion 16 - targetSdkVersion 23 + targetSdkVersion 25 versionCode 4 versionName "3.0.0" + + jackOptions { + enabled true + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } lintOptions { @@ -26,8 +35,11 @@ android { } dependencies { + compile 'com.android.support:appcompat-v7:25.0.0' + compile 'com.android.support:support-v13:25.0.0' + compile 'org.jboss.aerogear:aerogear-android-authz:3.0.1' compile 'com.squareup.picasso:picasso:2.3.4' - compile ('com.android.support:appcompat-v7:23.+') - compile ('org.jboss.aerogear:aerogear-android-authz:3.0.1') - + compile 'com.afollestad:material-camera:0.4.4' + compile 'com.github.hotchemi:permissionsdispatcher:2.2.0' + annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.2.0' } diff --git a/ShootAndShare/app/src/androidTest/java/org/jboss/aerogear/shootandshare/ApplicationTest.java b/ShootAndShare/app/src/androidTest/java/org/jboss/aerogear/shootandshare/ApplicationTest.java deleted file mode 100644 index fa11645..0000000 --- a/ShootAndShare/app/src/androidTest/java/org/jboss/aerogear/shootandshare/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.jboss.aerogear.shootandshare; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/ShootAndShare/app/src/main/AndroidManifest.xml b/ShootAndShare/app/src/main/AndroidManifest.xml index 4e52ee1..eb7f7fa 100644 --- a/ShootAndShare/app/src/main/AndroidManifest.xml +++ b/ShootAndShare/app/src/main/AndroidManifest.xml @@ -7,9 +7,10 @@ + @@ -21,9 +22,17 @@ - + + + + + diff --git a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/service/UploadService.java b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/service/UploadService.java index 3e706a5..3c500b3 100644 --- a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/service/UploadService.java +++ b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/service/UploadService.java @@ -43,7 +43,7 @@ public final class UploadService extends Service { public static final String FILE_URI = "UploadService.FILE_URI"; public static final String PROVIDER = "UploadService.PROVIDER"; - public static enum PROVIDERS {GOOGLE, KEYCLOAK, FACEBOOK} + public enum PROVIDERS {GOOGLE, KEYCLOAK, FACEBOOK} private static final AtomicInteger notificationCount = new AtomicInteger(1); @@ -55,53 +55,51 @@ public UploadService() { handler = new Handler(thread.getLooper()); } + @SuppressWarnings("unchecked") @Override public int onStartCommand(final Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); - handler.post(new Runnable() { - @Override - public void run() { - int id = 0; - try { - - Bundle extras = intent.getExtras(); - - String fileName = extras.getString(FILE_URI); - String providerName = extras.getString(PROVIDER); - - if (fileName == null) { - displayErrorNotification("No file provided", 0); - return; - } - - if (providerName == null) { - displayErrorNotification("No provider selected", 0); - return; - } - - PROVIDERS provider = PROVIDERS.valueOf(providerName); - File file = new File(fileName); - id = displayUploadNotification(fileName); - - switch (provider) { - - case GOOGLE: - PipeManager.getPipe("gp-upload").save(new PhotoHolder(file), new UploadCallback(id)); - break; - case KEYCLOAK: - PipeManager.getPipe("kc-upload").save(new PhotoHolder(file), new UploadCallback(id)); - break; - case FACEBOOK: - PipeManager.getPipe("fb-upload").save(new PhotoHolder(file), new UploadCallback(id)); - break; - } - - } catch (Exception e) { - displayErrorNotification(e.getMessage(), id); + handler.post(() -> { + int id = 0; + try { + + Bundle extras = intent.getExtras(); + + String fileName = extras.getString(FILE_URI); + String providerName = extras.getString(PROVIDER); + + if (fileName == null) { + displayErrorNotification("No file provided", 0); + return; + } + + if (providerName == null) { + displayErrorNotification("No provider selected", 0); + return; + } + + PROVIDERS provider = PROVIDERS.valueOf(providerName); + File file = new File(fileName); + id = displayUploadNotification(fileName); + + switch (provider) { + + case GOOGLE: + PipeManager.getPipe("gp-upload").save(new PhotoHolder(file), new UploadCallback(id)); + break; + case KEYCLOAK: + PipeManager.getPipe("kc-upload").save(new PhotoHolder(file), new UploadCallback(id)); + break; + case FACEBOOK: + PipeManager.getPipe("fb-upload").save(new PhotoHolder(file), new UploadCallback(id)); + break; } + } catch (Exception e) { + displayErrorNotification(e.getMessage(), id); } + }); return START_NOT_STICKY; diff --git a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/CameraActivity.java b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/CameraActivity.java index e4c82bc..f1348d7 100644 --- a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/CameraActivity.java +++ b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/CameraActivity.java @@ -1,13 +1,13 @@ /** * JBoss, Home of Professional Open Source * Copyright Red Hat, Inc., and individual contributors - * + *

* 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 focusModes = params.getSupportedFocusModes(); - if (focusModes.contains(Camera.Parameters.FOCUS_MODE_MACRO)) { - params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO); + Intent intent = new Intent(getApplicationContext(), PhotoActivity.class); + intent.putExtra("PHOTO", photoPath); + startActivity(intent); + } else if (resultCode == RESULT_CANCELED) { + finish(); + } else if (data != null) { + Exception e = (Exception) data.getSerializableExtra(MaterialCamera.ERROR_EXTRA); + e.printStackTrace(); + Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } - - params.set("jpeg-quality", 70); - params.setPictureFormat(PixelFormat.JPEG); - params.setPictureSize(2048, 1232); - mCamera.setParameters(params); - - - qOpened = (mCamera != null); - } catch (Exception e) { - Log.e(getString(R.string.app_name), "failed to open Camera"); - e.printStackTrace(); - } - - return qOpened; - } - - private void releaseCameraAndPreview() { - if (mCamera != null) { - mCamera.stopPreview(); - mCamera.release(); - mCamera = null; - } - } - - @Override - public void surfaceCreated(SurfaceHolder holder) { - try { - startCameraPreview(); - } catch (Exception e) { - Log.d(TAG, "Error setting camera preview: " + e.getMessage()); } } - @Override - public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - if (mHolder.getSurface() == null){ - return; - } - - try { - mCamera.stopPreview(); - } catch (Exception e){ - // ignore: tried to stop a non-existent preview - } - - try { - startCameraPreview(); - } catch (Exception e){ - Log.d(TAG, "Error starting camera preview: " + e.getMessage()); - } + @NeedsPermission({Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}) + void displayCamera() { + new MaterialCamera(this) + .labelConfirm(R.string.ok) + .qualityProfile(MaterialCamera.QUALITY_HIGH) + .stillShot() + .start(CAMERA_REQUEST); } - private void startCameraPreview() throws IOException { - if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { - mCamera.setDisplayOrientation(90); - } else { - mCamera.setDisplayOrientation(0); - } - - mCamera.setPreviewDisplay(mHolder); - mCamera.startPreview(); + @OnShowRationale({Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}) + void showRationaleForCamera(final PermissionRequest request) { + new AlertDialog.Builder(this) + .setMessage(R.string.permission_camera_rationale) + .setPositiveButton(R.string.allow, (dialog, button) -> request.proceed()) + .setNegativeButton(R.string.deny, (dialog, button) -> request.cancel()) + .show(); } - @Override - public void onRequestPermissionsResult(int requestCode, - String permissions[], int[] grantResults) { - switch (requestCode) { - case CAMERA_REQUEST: { - // If request is cancelled, the result arrays are empty. - if (grantResults.length > 0 - && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - - startActivity(new Intent(getApplicationContext(), CameraActivity.class)); - finish(); - } else { - - finish(); - } - return; - } - - } + @OnPermissionDenied({Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}) + void showDeniedForCamera() { + Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show(); + finish(); } - @Override - public void surfaceDestroyed(SurfaceHolder holder) { - releaseCameraAndPreview(); + @OnNeverAskAgain({Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}) + void showNeverAskForCamera() { + Toast.makeText(this, R.string.permission_camera_never_askagain, Toast.LENGTH_SHORT).show(); } - private final Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { - @Override - public void onPictureTaken(final byte[] data, Camera camera) { - - try { - File internalCacheDir = getApplicationContext().getCacheDir(); - String fileName = String.format("%d.jpg", System.currentTimeMillis()); - File outFile = new File(internalCacheDir, fileName); - - FileOutputStream outStream = new FileOutputStream(outFile); - outStream.write(data); - outStream.flush(); - outStream.close(); - - Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath()); - - Intent intent = new Intent(getApplicationContext(), PhotoActivity.class); - intent.putExtra("PHOTO", outFile.getAbsolutePath()); - startActivity(intent); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - }; - } diff --git a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/PhotoActivity.java b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/PhotoActivity.java index 2469842..29155da 100644 --- a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/PhotoActivity.java +++ b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/ui/PhotoActivity.java @@ -1,13 +1,13 @@ /** * JBoss, Home of Professional Open Source * Copyright Red Hat, Inc., and individual contributors - * + *

* 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() { + @SuppressWarnings("unchecked") @Override public void onSuccess(String s) { callback.onSuccess(s); @@ -99,6 +100,7 @@ public void onFailure(Exception e) { } } + @SuppressWarnings("unchecked") public static void upload(final File file, final Callback callback, Activity activity) { PipeManager.getPipe("fb-upload", activity).save(new PhotoHolder(file), callback); } diff --git a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/GooglePlusHelper.java b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/GooglePlusHelper.java index 57a41ef..1b9d111 100644 --- a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/GooglePlusHelper.java +++ b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/GooglePlusHelper.java @@ -32,7 +32,7 @@ import java.io.File; import java.net.MalformedURLException; import java.net.URL; -import java.util.Arrays; +import java.util.Collections; public class GooglePlusHelper { @@ -55,7 +55,7 @@ public class GooglePlusHelper { .setClientId(AUTHZ_CLIENT_ID) .setClientSecret(AUTHZ_CLIENT_SECRET) .setRedirectURL(AUTHZ_REDIRECT_URL) - .setScopes(Arrays.asList("https://www.googleapis.com/auth/drive")) + .setScopes(Collections.singletonList("https://www.googleapis.com/auth/drive")) .addAdditionalAuthorizationParam(Pair.create("access_type", "offline")) .asModule(); @@ -75,6 +75,7 @@ public static void connect(final Activity activity, final Callback callback) { final AuthzModule authzModule = AuthorizationManager.getModule(MODULE_NAME); authzModule.requestAccess(activity, new Callback() { + @SuppressWarnings("unchecked") @Override public void onSuccess(String s) { callback.onSuccess(s); @@ -95,6 +96,7 @@ public void onFailure(Exception e) { } + @SuppressWarnings("unchecked") public static void upload(final File file, final Callback callback, Activity activity) { PipeManager.getPipe("gp-upload", activity).save(new PhotoHolder(file), callback); } diff --git a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/KeycloakHelper.java b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/KeycloakHelper.java index 370e1d3..05c3c85 100644 --- a/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/KeycloakHelper.java +++ b/ShootAndShare/app/src/main/java/org/jboss/aerogear/android/cookbook/shootandshare/util/KeycloakHelper.java @@ -71,6 +71,7 @@ public static void connect(final Activity activity, final Callback callback) { final AuthzModule authzModule = AuthorizationManager.getModule(MODULE_NAME); authzModule.requestAccess(activity, new Callback() { + @SuppressWarnings("unchecked") @Override public void onSuccess(String s) { callback.onSuccess(s); @@ -92,6 +93,7 @@ public void onFailure(Exception e) { } } + @SuppressWarnings("unchecked") public static void upload(final File file, final Callback callback, Activity activity) { PipeManager.getPipe("kc-upload", activity).save(new PhotoHolder(file), callback); } diff --git a/ShootAndShare/app/src/main/res/drawable-hdpi/ic_camera.png b/ShootAndShare/app/src/main/res/drawable-hdpi/ic_camera.png deleted file mode 100644 index 01bdfe7..0000000 Binary files a/ShootAndShare/app/src/main/res/drawable-hdpi/ic_camera.png and /dev/null differ diff --git a/ShootAndShare/app/src/main/res/drawable-mdpi/ic_camera.png b/ShootAndShare/app/src/main/res/drawable-mdpi/ic_camera.png deleted file mode 100644 index 112c853..0000000 Binary files a/ShootAndShare/app/src/main/res/drawable-mdpi/ic_camera.png and /dev/null differ diff --git a/ShootAndShare/app/src/main/res/drawable-xhdpi/ic_camera.png b/ShootAndShare/app/src/main/res/drawable-xhdpi/ic_camera.png deleted file mode 100644 index 21c2340..0000000 Binary files a/ShootAndShare/app/src/main/res/drawable-xhdpi/ic_camera.png and /dev/null differ diff --git a/ShootAndShare/app/src/main/res/drawable-xxhdpi/ic_camera.png b/ShootAndShare/app/src/main/res/drawable-xxhdpi/ic_camera.png deleted file mode 100644 index 65e4b87..0000000 Binary files a/ShootAndShare/app/src/main/res/drawable-xxhdpi/ic_camera.png and /dev/null differ diff --git a/ShootAndShare/app/src/main/res/drawable-xxxhdpi/ic_camera.png b/ShootAndShare/app/src/main/res/drawable-xxxhdpi/ic_camera.png deleted file mode 100644 index 17a578d..0000000 Binary files a/ShootAndShare/app/src/main/res/drawable-xxxhdpi/ic_camera.png and /dev/null differ diff --git a/ShootAndShare/app/src/main/res/layout-land/activity_camera.xml b/ShootAndShare/app/src/main/res/layout-land/activity_camera.xml deleted file mode 100644 index 4d2b4d7..0000000 --- a/ShootAndShare/app/src/main/res/layout-land/activity_camera.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ShootAndShare/app/src/main/res/layout/activity_camera.xml b/ShootAndShare/app/src/main/res/layout/activity_camera.xml index c8d0857..04e79d5 100644 --- a/ShootAndShare/app/src/main/res/layout/activity_camera.xml +++ b/ShootAndShare/app/src/main/res/layout/activity_camera.xml @@ -1,21 +1,6 @@ - - - - - - \ No newline at end of file + android:gravity="center" + android:orientation="vertical" + android:padding="20dp" /> diff --git a/ShootAndShare/app/src/main/res/values/strings.xml b/ShootAndShare/app/src/main/res/values/strings.xml index 96d820d..472ca7b 100644 --- a/ShootAndShare/app/src/main/res/values/strings.xml +++ b/ShootAndShare/app/src/main/res/values/strings.xml @@ -1,7 +1,12 @@ Shoot And Share - Camera Button + Allow + Deny + Camera permission is needed take a picture. + Camera permission was denied. Please consider granting it in order to access the camera! + Camera permission was denied with never ask again. + Use it! Picture Google Plus icon Keycloak icon diff --git a/ShootAndShare/build.gradle b/ShootAndShare/build.gradle index 42c9b24..2fa616e 100644 --- a/ShootAndShare/build.gradle +++ b/ShootAndShare/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.2' + classpath 'com.android.tools.build:gradle:2.2.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,6 +15,6 @@ buildscript { allprojects { repositories { jcenter() - mavenLocal() + maven { url "https://dl.bintray.com/drummer-aidan/maven" } } } diff --git a/ShootAndShare/gradle.properties b/ShootAndShare/gradle.properties index 0b25ff6..65eedea 100644 --- a/ShootAndShare/gradle.properties +++ b/ShootAndShare/gradle.properties @@ -10,9 +10,9 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx10248m -XX:MaxPermSize=256m -#org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -org.gradle.parallel=false +#org.gradle.parallel=false diff --git a/ShootAndShare/gradle/wrapper/gradle-wrapper.properties b/ShootAndShare/gradle/wrapper/gradle-wrapper.properties index 16f650a..c3b9b71 100644 --- a/ShootAndShare/gradle/wrapper/gradle-wrapper.properties +++ b/ShootAndShare/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu May 12 12:05:20 EDT 2016 +#Fri Nov 04 16:17:36 BRST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip