", actual)
+ }
+
+}
\ No newline at end of file
diff --git a/processor/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/processor/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000..ca6ee9ce
--- /dev/null
+++ b/processor/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
\ No newline at end of file
diff --git a/sample-kotlin/src/main/res/layout/fragment_contacts.xml b/sample-kotlin/src/main/res/layout/fragment_contacts.xml
deleted file mode 100644
index 8afdbe0c..00000000
--- a/sample-kotlin/src/main/res/layout/fragment_contacts.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/sample-kotlin/src/main/res/values/strings.xml b/sample-kotlin/src/main/res/values/strings.xml
deleted file mode 100644
index ce4fe1b3..00000000
--- a/sample-kotlin/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
- PermissionsDispatcher Sample
- Back
- Allow
- Deny
-
- Total number of contacts: %1$d\nFirst contact:%2$s
- Contacts not loaded.
- Add a contact
- Show first contact
- This fragment demonstrates access to the contact database on the device.\n
- Clicking \"Add a contact\" adds a new contact named "__DUMMY ENTRY" directly into the database.\n
- Clicking \"Show first contact\" accesses the contact database to display the name of the first contact.
-
- Show camera preview
- Show and add contacts
- Contacts permissions were denied. Please consider granting it in order to access the camera!
- Contacts permissions were denied with never ask again.
-
- Camera permission is needed to show the camera preview.
- Contacts permissions are needed to demonstrate access to the contacts database.
- Camera permission was denied. Please consider granting it in order to access the camera!
- Camera permission was denied with never ask again.
-
diff --git a/sample/build.gradle b/sample/build.gradle
index 2c057d22..5537ca9b 100644
--- a/sample/build.gradle
+++ b/sample/build.gradle
@@ -1,8 +1,9 @@
apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-kapt'
android {
compileSdkVersion COMPILE_SDK_VERSION
- buildToolsVersion BUILD_TOOLS_VERSION
defaultConfig {
applicationId "permissions.dispatcher.sample"
targetSdkVersion TARGET_SDK_VERSION
@@ -11,13 +12,20 @@ android {
versionName "1.0"
}
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ sourceSets {
+ main.java.srcDirs += "src/main/kotlin"
+ }
+ lintOptions {
+ abortOnError false
}
}
dependencies {
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$KOTLIN_VERSION"
implementation "androidx.appcompat:appcompat:$ANDROIDX_LIBRARY_VERSION"
implementation project(':library')
- annotationProcessor project(':processor')
+ kapt project(':processor')
}
diff --git a/sample/src/main/java/permissions/dispatcher/sample/MainActivity.java b/sample/src/main/java/permissions/dispatcher/sample/MainActivity.java
deleted file mode 100644
index 59f6efd8..00000000
--- a/sample/src/main/java/permissions/dispatcher/sample/MainActivity.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package permissions.dispatcher.sample;
-
-import android.Manifest;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.StringRes;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.app.AppCompatActivity;
-import permissions.dispatcher.NeedsPermission;
-import permissions.dispatcher.OnNeverAskAgain;
-import permissions.dispatcher.OnPermissionDenied;
-import permissions.dispatcher.OnShowRationale;
-import permissions.dispatcher.PermissionRequest;
-import permissions.dispatcher.RuntimePermissions;
-import permissions.dispatcher.sample.camera.CameraPreviewFragment;
-import permissions.dispatcher.sample.contacts.ContactsFragment;
-
-@RuntimePermissions
-public class MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- findViewById(R.id.button_camera).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- MainActivityPermissionsDispatcher.showCameraWithPermissionCheck(MainActivity.this);
- }
- });
- findViewById(R.id.button_contacts).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- MainActivityPermissionsDispatcher.showContactsWithPermissionCheck(MainActivity.this);
- }
- });
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- // NOTE: delegate the permission handling to generated method
- MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
- }
-
- @NeedsPermission(Manifest.permission.CAMERA)
- void showCamera() {
- // NOTE: Perform action that requires the permission. If this is run by PermissionsDispatcher, the permission will have been granted
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
- .addToBackStack("camera")
- .commitAllowingStateLoss();
- }
-
- @OnPermissionDenied(Manifest.permission.CAMERA)
- void onCameraDenied() {
- // NOTE: Deal with a denied permission, e.g. by showing specific UI
- // or disabling certain functionality
- Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show();
- }
-
- @OnShowRationale(Manifest.permission.CAMERA)
- void showRationaleForCamera(PermissionRequest request) {
- // NOTE: Show a rationale to explain why the permission is needed, e.g. with a dialog.
- // Call proceed() or cancel() on the provided PermissionRequest to continue or abort
- showRationaleDialog(R.string.permission_camera_rationale, request);
- }
-
- @OnNeverAskAgain(Manifest.permission.CAMERA)
- void onCameraNeverAskAgain() {
- Toast.makeText(this, R.string.permission_camera_never_ask_again, Toast.LENGTH_SHORT).show();
- }
-
- @NeedsPermission({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
- void showContacts() {
- // NOTE: Perform action that requires the permission.
- // If this is run by PermissionsDispatcher, the permission will have been granted
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.sample_content_fragment, ContactsFragment.newInstance())
- .addToBackStack("contacts")
- .commitAllowingStateLoss();
- }
-
- @OnPermissionDenied({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
- void onContactsDenied() {
- // NOTE: Deal with a denied permission, e.g. by showing specific UI
- // or disabling certain functionality
- Toast.makeText(this, R.string.permission_contacts_denied, Toast.LENGTH_SHORT).show();
- }
-
- @OnShowRationale({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
- void showRationaleForContact(PermissionRequest request) {
- // NOTE: Show a rationale to explain why the permission is needed, e.g. with a dialog.
- // Call proceed() or cancel() on the provided PermissionRequest to continue or abort
- showRationaleDialog(R.string.permission_contacts_rationale, request);
- }
-
- @OnNeverAskAgain({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
- void onContactsNeverAskAgain() {
- Toast.makeText(this, R.string.permission_contacts_never_ask_again, Toast.LENGTH_SHORT).show();
- }
-
- private void showRationaleDialog(@StringRes int messageResId, final PermissionRequest request) {
- new AlertDialog.Builder(this)
- .setPositiveButton(R.string.button_allow, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(@NonNull DialogInterface dialog, int which) {
- request.proceed();
- }
- })
- .setNegativeButton(R.string.button_deny, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(@NonNull DialogInterface dialog, int which) {
- request.cancel();
- }
- })
- .setCancelable(false)
- .setMessage(messageResId)
- .show();
- }
-}
diff --git a/sample/src/main/java/permissions/dispatcher/sample/camera/CameraPreview.java b/sample/src/main/java/permissions/dispatcher/sample/camera/CameraPreview.java
deleted file mode 100644
index 97ddd927..00000000
--- a/sample/src/main/java/permissions/dispatcher/sample/camera/CameraPreview.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
-* Copyright 2015 The Android Open Source Project
-*
-* 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
-*
-* 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.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package permissions.dispatcher.sample.camera;
-
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.hardware.Camera;
-import android.util.Log;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-
-import java.io.IOException;
-
-/**
- * Camera preview that displays a {@link Camera}.
- *
- * Handles basic lifecycle methods to display and stop the preview.
- *
- * Implementation is based directly on the documentation at
- * http://developer.android.com/guide/topics/media/camera.html
- */
-@SuppressLint("ViewConstructor")
-public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
-
- private static final String TAG = "CameraPreview";
- private SurfaceHolder mHolder;
- private Camera mCamera;
- private Camera.CameraInfo mCameraInfo;
- private int mDisplayOrientation;
-
- public CameraPreview(Context context, Camera camera, Camera.CameraInfo cameraInfo,
- int displayOrientation) {
- super(context);
-
- // Do not initialise if no camera has been set
- if (camera == null || cameraInfo == null) {
- return;
- }
- setCamera(camera, cameraInfo, displayOrientation);
-
- // Install a SurfaceHolder.Callback so we get notified when the
- // underlying surface is created and destroyed.
- mHolder = getHolder();
- mHolder.addCallback(this);
- }
-
- public void surfaceCreated(SurfaceHolder holder) {
- // The Surface has been created, now tell the camera where to draw the preview.
- try {
- mCamera.setPreviewDisplay(holder);
- mCamera.startPreview();
- Log.d(TAG, "Camera preview started.");
- } catch (IOException e) {
- Log.d(TAG, "Error setting camera preview: " + e.getMessage());
- }
- }
-
- public void surfaceDestroyed(SurfaceHolder holder) {
- // empty. Take care of releasing the Camera preview in your activity.
- }
-
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
- // If your preview can change or rotate, take care of those events here.
- // Make sure to stop the preview before resizing or reformatting it.
-
- if (mHolder.getSurface() == null) {
- // preview surface does not exist
- Log.d(TAG, "Preview surface does not exist");
- return;
- }
-
- // stop preview before making changes
- try {
- mCamera.stopPreview();
- Log.d(TAG, "Preview stopped.");
- } catch (Exception e) {
- // ignore: tried to stop a non-existent preview
- Log.d(TAG, "Error starting camera preview: " + e.getMessage());
- }
-
- int orientation = calculatePreviewOrientation(mCameraInfo, mDisplayOrientation);
- mCamera.setDisplayOrientation(orientation);
-
- try {
- mCamera.setPreviewDisplay(mHolder);
- mCamera.startPreview();
- Log.d(TAG, "Camera preview started.");
- } catch (Exception e) {
- Log.d(TAG, "Error starting camera preview: " + e.getMessage());
- }
- }
-
- /**
- * Calculate the correct orientation for a {@link Camera} preview that is displayed on screen.
- *
- * Implementation is based on the sample code provided in
- * {@link Camera#setDisplayOrientation(int)}.
- */
- public static int calculatePreviewOrientation(Camera.CameraInfo info, int rotation) {
- int degrees = 0;
-
- switch (rotation) {
- case Surface.ROTATION_0:
- degrees = 0;
- break;
- case Surface.ROTATION_90:
- degrees = 90;
- break;
- case Surface.ROTATION_180:
- degrees = 180;
- break;
- case Surface.ROTATION_270:
- degrees = 270;
- break;
- }
-
- int result;
- if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
- result = (info.orientation + degrees) % 360;
- result = (360 - result) % 360; // compensate the mirror
- } else { // back-facing
- result = (info.orientation - degrees + 360) % 360;
- }
-
- return result;
- }
-
- public void setCamera(Camera camera, Camera.CameraInfo cameraInfo, int displayOrientation) {
- // Do not reinitialise if no camera has been set
- if (camera == null || cameraInfo == null) {
- return;
- }
- mCamera = camera;
- mCameraInfo = cameraInfo;
- mDisplayOrientation = displayOrientation;
- }
-}
diff --git a/sample/src/main/java/permissions/dispatcher/sample/camera/CameraPreviewFragment.java b/sample/src/main/java/permissions/dispatcher/sample/camera/CameraPreviewFragment.java
deleted file mode 100644
index a4117c30..00000000
--- a/sample/src/main/java/permissions/dispatcher/sample/camera/CameraPreviewFragment.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-* Copyright 2015 The Android Open Source Project
-*
-* 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
-*
-* 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.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package permissions.dispatcher.sample.camera;
-
-import android.annotation.SuppressLint;
-import android.hardware.Camera;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.FrameLayout;
-
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import permissions.dispatcher.sample.R;
-
-/**
- * Displays a {@link CameraPreview} of the first {@link Camera}.
- * An error message is displayed if the Camera is not available.
- *
- * This Fragment is only used to illustrate that access to the Camera API has been granted (or
- * denied) as part of the runtime permissions model. It is not relevant for the use of the
- * permissions API.
- *
- * Implementation is based directly on the documentation at
- * http://developer.android.com/guide/topics/media/camera.html
- */
-public class CameraPreviewFragment extends Fragment {
-
- private static final String TAG = "CameraPreview";
-
- /**
- * Id of the camera to access. 0 is the first camera.
- */
- private static final int CAMERA_ID = 0;
-
- private CameraPreview preview;
- private Camera camera;
-
- public static CameraPreviewFragment newInstance() {
- return new CameraPreviewFragment();
- }
-
- @SuppressLint("InflateParams")
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment_camera, null);
- }
-
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- Button backButton = view.findViewById(R.id.back);
- backButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- onBackClick();
- }
- });
- initCamera();
- }
-
- private void initCamera() {
- camera = getCameraInstance(CAMERA_ID);
- Camera.CameraInfo cameraInfo = null;
-
- if (camera != null) {
- // Get camera info only if the camera is available
- cameraInfo = new Camera.CameraInfo();
- Camera.getCameraInfo(CAMERA_ID, cameraInfo);
- }
-
- // Get the rotation of the screen to adjust the preview image accordingly.
- final int displayRotation = getActivity().getWindowManager().getDefaultDisplay()
- .getRotation();
-
- if (getView() == null) {
- return;
- }
-
- FrameLayout preview = getView().findViewById(R.id.camera_preview);
- preview.removeAllViews();
-
- if (this.preview == null) {
- // Create the Preview view and set it as the content of this Activity.
- this.preview = new CameraPreview(getActivity(), camera, cameraInfo, displayRotation);
- } else {
- this.preview.setCamera(camera, cameraInfo, displayRotation);
- }
-
- preview.addView(this.preview);
- }
-
- private void onBackClick() {
- getFragmentManager().popBackStack();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (camera == null) {
- initCamera();
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- // Stop camera access
- releaseCamera();
- }
-
- /** A safe way to get an instance of the Camera object. */
- public static Camera getCameraInstance(int cameraId) {
- Camera c = null;
- try {
- c = Camera.open(cameraId); // attempt to get a Camera instance
- } catch (Exception e) {
- // Camera is not available (in use or does not exist)
- Log.d(TAG, "Camera " + cameraId + " is not available: " + e.getMessage());
- }
- return c; // returns null if camera is unavailable
- }
-
- private void releaseCamera() {
- if (camera != null) {
- camera.release(); // release the camera for other applications
- camera = null;
- }
- }
-}
diff --git a/sample/src/main/java/permissions/dispatcher/sample/contacts/ContactsFragment.java b/sample/src/main/java/permissions/dispatcher/sample/contacts/ContactsFragment.java
deleted file mode 100644
index 522d75a1..00000000
--- a/sample/src/main/java/permissions/dispatcher/sample/contacts/ContactsFragment.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-* Copyright 2015 The Android Open Source Project
-*
-* 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
-*
-* 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.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package permissions.dispatcher.sample.contacts;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentResolver;
-import android.content.OperationApplicationException;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.provider.ContactsContract;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.loader.app.LoaderManager;
-import androidx.loader.content.CursorLoader;
-import androidx.loader.content.Loader;
-import permissions.dispatcher.sample.R;
-
-/**
- * Displays the first contact stored on the device and contains an option to add a dummy contact.
- *
- * This Fragment is only used to illustrate that access to the Contacts ContentProvider API has
- * been granted (or denied) as part of the runtime permissions model. It is not relevant for the
- * use
- * of the permissions API.
- *
- * This fragments demonstrates a basic use case for accessing the Contacts Provider. The
- * implementation is based on the training guide available here:
- * https://developer.android.com/training/contacts-provider/retrieve-names.html
- */
-public class ContactsFragment extends Fragment implements LoaderManager.LoaderCallbacks {
-
- private static final String TAG = "Contacts";
- private TextView messageText = null;
-
- /**
- * Projection for the content provider query includes the id and primary name of a contact.
- */
- private static final String[] PROJECTION = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME_PRIMARY};
- /**
- * Sort order for the query. Sorted by primary name in ascending order.
- */
- private static final String ORDER = ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + " ASC";
-
- /**
- * Creates a new instance of a ContactsFragment.
- */
- public static ContactsFragment newInstance() {
- return new ContactsFragment();
- }
-
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_contacts, container, false);
-
- messageText = rootView.findViewById(R.id.contact_message);
-
- Button backButton = rootView.findViewById(R.id.back);
- backButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- onBackClick();
- }
- });
-
- Button button = rootView.findViewById(R.id.contact_add);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- insertDummyContact();
- }
- });
-
- // Register a listener to display the first contact when a button is clicked.
- button = rootView.findViewById(R.id.contact_load);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- loadContact();
- }
- });
- return rootView;
- }
-
- private void onBackClick() {
- getFragmentManager().popBackStack();
- }
-
- /**
- * Restart the Loader to query the Contacts content provider to display the first contact.
- */
- private void loadContact() {
- getLoaderManager().restartLoader(0, null, this);
- }
-
- /**
- * Initialises a new {@link CursorLoader} that queries the {@link ContactsContract}.
- */
- @Override
- public Loader onCreateLoader(int i, Bundle bundle) {
- return new CursorLoader(getActivity(), ContactsContract.Contacts.CONTENT_URI, PROJECTION,
- null, null, ORDER);
- }
-
- /**
- * Dislays either the name of the first contact or a message.
- */
- @Override
- public void onLoadFinished(Loader loader, Cursor cursor) {
-
- if (cursor != null) {
- final int totalCount = cursor.getCount();
- if (totalCount > 0) {
- cursor.moveToFirst();
- String name = cursor
- .getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
- messageText.setText(
- getResources().getString(R.string.contacts_string, totalCount, name));
- Log.d(TAG, "First contact loaded: " + name);
- Log.d(TAG, "Total number of contacts: " + totalCount);
- Log.d(TAG, "Total number of contacts: " + totalCount);
- } else {
- Log.d(TAG, "List of contacts is empty.");
- messageText.setText(R.string.contacts_empty);
- }
- }
- }
-
- @Override
- public void onLoaderReset(Loader loader) {
- messageText.setText(R.string.contacts_empty);
- }
-
- /**
- * Accesses the Contacts content provider directly to insert a new contact.
- *
- * The contact is called "__DUMMY ENTRY" and only contains a name.
- */
- private void insertDummyContact() {
- // Two operations are needed to insert a new contact.
- ArrayList operations = new ArrayList<>(2);
-
- // First, set up a new raw contact.
- ContentProviderOperation.Builder op =
- ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
- .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
- .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null);
- operations.add(op.build());
-
- // Next, set the name for the contact.
- String DUMMY_CONTACT_NAME = "__DUMMY CONTACT from runtime permissions sample";
- op = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE,
- ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
- DUMMY_CONTACT_NAME);
- operations.add(op.build());
-
- // Apply the operations.
- ContentResolver resolver = getActivity().getContentResolver();
- try {
- resolver.applyBatch(ContactsContract.AUTHORITY, operations);
- } catch (RemoteException e) {
- Log.d(TAG, "Could not add a new contact: " + e.getMessage());
- } catch (OperationApplicationException e) {
- Log.d(TAG, "Could not add a new contact: " + e.getMessage());
- }
- }
-}
diff --git a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/MainActivity.kt b/sample/src/main/kotlin/permissions/dispatcher/sample/MainActivity.kt
similarity index 95%
rename from sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/MainActivity.kt
rename to sample/src/main/kotlin/permissions/dispatcher/sample/MainActivity.kt
index f052336b..9effbd56 100644
--- a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/MainActivity.kt
+++ b/sample/src/main/kotlin/permissions/dispatcher/sample/MainActivity.kt
@@ -1,4 +1,4 @@
-package permissions.dispatcher.samplekotlin
+package permissions.dispatcher.sample
import android.Manifest
import android.os.Bundle
@@ -8,8 +8,8 @@ import androidx.annotation.StringRes
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import permissions.dispatcher.*
-import permissions.dispatcher.samplekotlin.camera.CameraPreviewFragment
-import permissions.dispatcher.samplekotlin.contacts.ContactsFragment
+import permissions.dispatcher.sample.camera.CameraPreviewFragment
+import permissions.dispatcher.sample.contacts.ContactsFragment
@RuntimePermissions
class MainActivity : AppCompatActivity() {
diff --git a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/camera/CameraPreview.kt b/sample/src/main/kotlin/permissions/dispatcher/sample/camera/CameraPreview.kt
similarity index 97%
rename from sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/camera/CameraPreview.kt
rename to sample/src/main/kotlin/permissions/dispatcher/sample/camera/CameraPreview.kt
index a1ce903f..e44783bc 100644
--- a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/camera/CameraPreview.kt
+++ b/sample/src/main/kotlin/permissions/dispatcher/sample/camera/CameraPreview.kt
@@ -1,4 +1,4 @@
-package permissions.dispatcher.samplekotlin.camera
+package permissions.dispatcher.sample.camera
import android.annotation.SuppressLint
import android.content.Context
@@ -94,7 +94,7 @@ class CameraPreview(context: Context,
}
companion object {
- private val TAG = "CameraPreview"
+ private const val TAG = "CameraPreview"
/**
* Calculate the correct orientation for a [Camera] preview that is displayed on screen.
diff --git a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/camera/CameraPreviewFragment.kt b/sample/src/main/kotlin/permissions/dispatcher/sample/camera/CameraPreviewFragment.kt
similarity index 97%
rename from sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/camera/CameraPreviewFragment.kt
rename to sample/src/main/kotlin/permissions/dispatcher/sample/camera/CameraPreviewFragment.kt
index ed428ff6..919bdcd6 100644
--- a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/camera/CameraPreviewFragment.kt
+++ b/sample/src/main/kotlin/permissions/dispatcher/sample/camera/CameraPreviewFragment.kt
@@ -1,4 +1,4 @@
-package permissions.dispatcher.samplekotlin.camera
+package permissions.dispatcher.sample.camera
import android.annotation.SuppressLint
import android.hardware.Camera
@@ -10,7 +10,7 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.FrameLayout
import androidx.fragment.app.Fragment
-import permissions.dispatcher.samplekotlin.R
+import permissions.dispatcher.sample.R
/**
* Displays a [CameraPreview] of the first [Camera].
diff --git a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/contacts/ContactsFragment.kt b/sample/src/main/kotlin/permissions/dispatcher/sample/contacts/ContactsFragment.kt
similarity index 98%
rename from sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/contacts/ContactsFragment.kt
rename to sample/src/main/kotlin/permissions/dispatcher/sample/contacts/ContactsFragment.kt
index 85d87882..3d6fe36a 100644
--- a/sample-kotlin/src/main/kotlin/permissions/dispatcher/samplekotlin/contacts/ContactsFragment.kt
+++ b/sample/src/main/kotlin/permissions/dispatcher/sample/contacts/ContactsFragment.kt
@@ -1,4 +1,4 @@
-package permissions.dispatcher.samplekotlin.contacts
+package permissions.dispatcher.sample.contacts
import android.content.ContentProviderOperation
import android.content.OperationApplicationException
@@ -16,7 +16,7 @@ import androidx.fragment.app.Fragment
import androidx.loader.app.LoaderManager
import androidx.loader.content.CursorLoader
import androidx.loader.content.Loader
-import permissions.dispatcher.samplekotlin.R
+import permissions.dispatcher.sample.R
import kotlin.properties.Delegates
/**
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
index 4114bae1..ce4fe1b3 100644
--- a/sample/src/main/res/values/strings.xml
+++ b/sample/src/main/res/values/strings.xml
@@ -4,7 +4,7 @@
Allow
Deny
- Total number of contacts: %1$,d\nFirst contact:%2$s
+ Total number of contacts: %1$d\nFirst contact:%2$s
Contacts not loaded.
Add a contact
Show first contact
diff --git a/sample/src/main/res/values/template-styles.xml b/sample/src/main/res/values/template-styles.xml
index ce13dee6..f9e6afbb 100644
--- a/sample/src/main/res/values/template-styles.xml
+++ b/sample/src/main/res/values/template-styles.xml
@@ -1,4 +1,3 @@
-
diff --git a/scripts/deploy_snapshot.sh b/scripts/deploy_snapshot.sh
deleted file mode 100755
index f13d1785..00000000
--- a/scripts/deploy_snapshot.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-#
-# Deploy a jar, source jar, and javadoc jar to Sonatype's snapshot repo.
-#
-# Adapted from https://coderwall.com/p/9b_lfq and
-# http://benlimmer.com/2013/12/26/automatically-publish-javadoc-to-gh-pages-with-travis-ci/
-
-SLUG="permissions-dispatcher/PermissionsDispatcher"
-JDK="oraclejdk8"
-BRANCH="master"
-
-set -e
-
-if [ "$TRAVIS_REPO_SLUG" != "$SLUG" ]; then
- echo "Skipping snapshot deployment: wrong repository. Expected '$SLUG' but was '$TRAVIS_REPO_SLUG'."
-elif [ "$TRAVIS_JDK_VERSION" != "$JDK" ]; then
- echo "Skipping snapshot deployment: wrong JDK. Expected '$JDK' but was '$TRAVIS_JDK_VERSION'."
-elif [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
- echo "Skipping snapshot deployment: was pull request."
-elif [ "$TRAVIS_BRANCH" != "$BRANCH" ]; then
- echo "Skipping snapshot deployment: wrong branch. Expected '$BRANCH' but was '$TRAVIS_BRANCH'."
-else
- echo "Deploying snapshot..."
- ./gradlew artifactoryPublish
- echo "Snapshot deployed!"
-fi
\ No newline at end of file
diff --git a/scripts/push-to-github-io.sh b/scripts/push-to-github-io.sh
deleted file mode 100755
index e375ec1d..00000000
--- a/scripts/push-to-github-io.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-
-declare repoName="permissions-dispatcher.github.io"
-declare repoUrl="git@github.com:permissions-dispatcher/${repoName}.git"
-declare distDir="_book"
-declare branch="master"
-declare commitMessage="Update content from TravisCI."
-
-commit_and_push_changes() {
- git config --global user.email "$GH_USER_EMAIL" \
- && git config --global user.name "$GH_USER_NAME" \
- && git add -A \
- && git commit --message "$2" \
- && git push --quiet --force "${repoUrl}" "$1"
-}
-
-if [[ "$TRAVIS_BRANCH" != "master" ]] || [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then
- echo "Skip updating gitbook: branch is not master or build was triggered by pull request."
- exit 0
-fi
-
-echo "Decrypt deploy key"
-openssl aes-256-cbc -K $encrypted_786b61619ad8_key -iv $encrypted_786b61619ad8_iv -in .travis/deploy_key.enc -out deploy_key -d
-chmod 600 deploy_key
-eval `ssh-agent -s`
-ssh-add deploy_key
-
-echo "Clone repo"
-rm -rf ${repoName}
-git clone ${repoUrl} ${repoName}
-
-echo "Install Node and dependencies"
-. $HOME/.nvm/nvm.sh
-nvm install stable
-nvm use stable
-npm install -g gitbook-cli
-
-echo "Build HTML"
-gitbook build
-
-echo "Copy files"
-cp -Rf "${distDir}/doc"* "${distDir}/gitbook"* "${distDir}/index.html" "${distDir}/CHANGELOG.html" "${distDir}/search_index.json" "${repoName}"
-
-echo "Commit and push"
-cd "${repoName}"
-commit_and_push_changes "${branch}" "${commitMessage}"
\ No newline at end of file
diff --git a/scripts/release.sh b/scripts/release.sh
deleted file mode 100755
index 3fdf6347..00000000
--- a/scripts/release.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-
-./gradlew clean build
-./gradlew :processor:bintrayUpload
-./gradlew :library:bintrayUpload
-./gradlew :annotation:bintrayUpload
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 131fb08b..29160af9 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':library', ':processor', ':sample', ':lint', ':sample-kotlin', ':test', ':annotation'
\ No newline at end of file
+include ':library', ':processor', ':lint', ':sample', ':test', ':annotation', ':ktx', ':ktx-sample'
\ No newline at end of file
diff --git a/test/build.gradle b/test/build.gradle
index 9a88782c..d88e8973 100644
--- a/test/build.gradle
+++ b/test/build.gradle
@@ -4,7 +4,6 @@ apply plugin: 'kotlin-kapt'
android {
compileSdkVersion COMPILE_SDK_VERSION
- buildToolsVersion BUILD_TOOLS_VERSION
defaultConfig {
applicationId "permissions.dispatcher.test"
targetSdkVersion TARGET_SDK_VERSION
@@ -15,8 +14,8 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
main.java.srcDirs += "src/main/kotlin"
@@ -44,10 +43,12 @@ dependencies {
implementation "androidx.appcompat:appcompat:$ANDROIDX_LIBRARY_VERSION"
testImplementation "junit:junit:$JUNIT_VERSION"
- testImplementation "org.mockito:mockito-core:$MOCKITO_VERSION"
- testImplementation "org.powermock:powermock-api-mockito:$POWERMOCK_VERSION"
- testImplementation "org.powermock:powermock-module-junit4:$POWERMOCK_VERSION"
- testImplementation "org.powermock:powermock-module-junit4-rule:$POWERMOCK_VERSION"
- testImplementation "org.powermock:powermock-classloading-xstream:$POWERMOCK_VERSION"
+ testImplementation "org.jetbrains.kotlin:kotlin-reflect:1.3.11"
+ // TODO: update mockito and powermock
+ testImplementation "org.mockito:mockito-core:1.10.19"
+ testImplementation "org.powermock:powermock-api-mockito:1.6.4"
+ testImplementation "org.powermock:powermock-module-junit4:1.6.4"
+ testImplementation "org.powermock:powermock-module-junit4-rule:1.6.4"
+ testImplementation "org.powermock:powermock-classloading-xstream:1.6.4"
testImplementation "org.robolectric:robolectric:$ROBOLECTRIC_VERSION"
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityOnlyNeedsPermissionPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityOnlyNeedsPermissionPermissionsDispatcherTest.kt
index 85e6c9b6..6efa41e1 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityOnlyNeedsPermissionPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityOnlyNeedsPermissionPermissionsDispatcherTest.kt
@@ -1,10 +1,8 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -17,7 +15,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityOnlyNeedsPermissionPermissionsDispatcherTest {
private lateinit var activity: ActivityOnlyNeedsPermission
@@ -36,14 +34,11 @@ class ActivityOnlyNeedsPermissionPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityOnlyNeedsPermission::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsKtPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsKtPermissionsDispatcherTest.kt
index 9e3a6433..0a19adc7 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsKtPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsKtPermissionsDispatcherTest.kt
@@ -1,10 +1,8 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -19,20 +17,19 @@ import permissions.dispatcher.PermissionRequest
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityWithAllAnnotationsKtPermissionsDispatcherTest {
private lateinit var activity: ActivityWithAllAnnotationsKt
companion object {
private var requestCode = 0
- lateinit private var requestPermissions: Array
+ private lateinit var requestPermissions: Array
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 2
+ requestCode = ActivityWithAllAnnotationsKt::showCameraWithPermissionCheck.packageLevelGetPropertyValueByName("REQUEST_SHOWCAMERA") as Int
requestPermissions = arrayOf("android.permission.CAMERA")
}
}
@@ -41,14 +38,11 @@ class ActivityWithAllAnnotationsKtPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithAllAnnotationsKt::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsPermissionsDispatcherTest.kt
index 08992d48..60c6085c 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithAllAnnotationsPermissionsDispatcherTest.kt
@@ -1,10 +1,8 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -19,7 +17,7 @@ import permissions.dispatcher.PermissionRequest
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityWithAllAnnotationsPermissionsDispatcherTest {
private lateinit var activity: ActivityWithAllAnnotations
@@ -38,14 +36,11 @@ class ActivityWithAllAnnotationsPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithAllAnnotations::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithNoParameterArgumentKtPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithNoParameterArgumentKtPermissionsDispatcherTest.kt
index cd16d3e8..9729fd14 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithNoParameterArgumentKtPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithNoParameterArgumentKtPermissionsDispatcherTest.kt
@@ -1,10 +1,8 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -17,20 +15,19 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityWithNoParameterArgumentKtPermissionsDispatcherTest {
private lateinit var activity: ActivityWithNoParameterArgumentKt
companion object {
private var requestCode = 0
- lateinit private var requestPermissions: Array
+ private lateinit var requestPermissions: Array
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 3
+ requestCode = ActivityWithNoParameterArgumentKt::showCameraWithPermissionCheck.packageLevelGetPropertyValueByName("REQUEST_SHOWCAMERA") as Int
requestPermissions = arrayOf("android.permission.CAMERA")
}
}
@@ -39,14 +36,11 @@ class ActivityWithNoParameterArgumentKtPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithNoParameterArgumentKt::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithOnNeverAskAgainPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithOnNeverAskAgainPermissionsDispatcherTest.kt
index b08aa4db..0fb5f824 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithOnNeverAskAgainPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithOnNeverAskAgainPermissionsDispatcherTest.kt
@@ -1,10 +1,8 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -17,7 +15,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityWithOnNeverAskAgainPermissionsDispatcherTest {
private lateinit var activity: ActivityWithOnNeverAskAgain
@@ -35,14 +33,11 @@ class ActivityWithOnNeverAskAgainPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithOnNeverAskAgain::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithOnPermissionDeniedPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithOnPermissionDeniedPermissionsDispatcherTest.kt
index df8a55a8..6d442f51 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithOnPermissionDeniedPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithOnPermissionDeniedPermissionsDispatcherTest.kt
@@ -1,10 +1,8 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -17,7 +15,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityWithOnPermissionDeniedPermissionsDispatcherTest {
private lateinit var activity: ActivityWithOnPermissionDenied
@@ -35,14 +33,11 @@ class ActivityWithOnPermissionDeniedPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithOnPermissionDenied::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithParametersKtPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithParametersKtPermissionsDispatcherTest.kt
index 077ccb88..6ecd702a 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithParametersKtPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithParametersKtPermissionsDispatcherTest.kt
@@ -1,7 +1,7 @@
package permissions.dispatcher.test
import androidx.core.app.ActivityCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -13,7 +13,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityWithStringParameterKtPermissionsDispatcherTest {
private lateinit var activity: ActivityWithParametersKt
@@ -22,12 +22,11 @@ class ActivityWithStringParameterKtPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithParametersKt::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithShowRationalePermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithShowRationalePermissionsDispatcherTest.kt
index a374518b..c9582db2 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithShowRationalePermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithShowRationalePermissionsDispatcherTest.kt
@@ -1,10 +1,8 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -19,7 +17,7 @@ import permissions.dispatcher.PermissionRequest
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class)
class ActivityWithShowRationalePermissionsDispatcherTest {
private lateinit var activity: ActivityWithShowRationale
@@ -38,14 +36,11 @@ class ActivityWithShowRationalePermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithShowRationale::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest.kt
index 13577ac7..34c720c1 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest.kt
@@ -3,11 +3,10 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -24,8 +23,8 @@ import permissions.dispatcher.test.ActivityWithSystemAlertWindowAllAnnotationsPe
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class,
+ AppOpsManagerCompat::class, Settings::class, Build.VERSION::class, Uri::class)
class ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest {
private lateinit var activity: ActivityWithSystemAlertWindowAllAnnotations
@@ -35,8 +34,7 @@ class ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 10
+ requestCode = getRequestSystemAlertWindow(ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcher::class.java)
}
}
@@ -44,9 +42,7 @@ class ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithSystemAlertWindowAllAnnotations::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -56,7 +52,6 @@ class ActivityWithSystemAlertWindowAllAnnotationsPermissionsDispatcherTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtAllAnnotationsTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtAllAnnotationsTest.kt
index 1f0079cc..e65827a4 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtAllAnnotationsTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtAllAnnotationsTest.kt
@@ -3,11 +3,9 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -22,8 +20,7 @@ import permissions.dispatcher.PermissionRequest
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class, Settings::class, Build.VERSION::class, Uri::class)
class ActivityWithSystemAlertWindowKtAllAnnotationsTest {
private lateinit var activity: ActivityWithSystemAlertWindowKtAllAnnotations
@@ -34,8 +31,7 @@ class ActivityWithSystemAlertWindowKtAllAnnotationsTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 12
+ requestCode = ActivityWithSystemAlertWindowKtAllAnnotations::systemAlertWindowWithPermissionCheck.packageLevelGetPropertyValueByName("REQUEST_SYSTEMALERTWINDOW") as Int
}
}
@@ -43,9 +39,7 @@ class ActivityWithSystemAlertWindowKtAllAnnotationsTest {
fun setUp() {
activity = Mockito.mock(ActivityWithSystemAlertWindowKtAllAnnotations::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -55,7 +49,6 @@ class ActivityWithSystemAlertWindowKtAllAnnotationsTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtTest.kt
index 23c7783a..c0cad553 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowKtTest.kt
@@ -3,11 +3,9 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -21,8 +19,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class, Settings::class, Build.VERSION::class, Uri::class)
class ActivityWithSystemAlertWindowKtTest {
private lateinit var activity: ActivityWithSystemAlertWindowKt
@@ -32,8 +29,7 @@ class ActivityWithSystemAlertWindowKtTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 11
+ requestCode = ActivityWithSystemAlertWindowKt::systemAlertWindowWithPermissionCheck.packageLevelGetPropertyValueByName("REQUEST_SYSTEMALERTWINDOW") as Int
}
}
@@ -41,9 +37,7 @@ class ActivityWithSystemAlertWindowKtTest {
fun setUp() {
activity = Mockito.mock(ActivityWithSystemAlertWindowKt::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -53,7 +47,6 @@ class ActivityWithSystemAlertWindowKtTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
@@ -122,5 +115,4 @@ class ActivityWithSystemAlertWindowKtTest {
Mockito.verify(activity, Mockito.times(0)).systemAlertWindow()
}
-
}
\ No newline at end of file
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowPermissionsDispatcherTest.kt
index 813532a9..79d5879e 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithSystemAlertWindowPermissionsDispatcherTest.kt
@@ -3,11 +3,9 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -21,8 +19,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class, Settings::class, Build.VERSION::class, Uri::class)
class ActivityWithSystemAlertWindowPermissionsDispatcherTest {
private lateinit var activity: ActivityWithSystemAlertWindow
@@ -40,9 +37,7 @@ class ActivityWithSystemAlertWindowPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithSystemAlertWindow::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -52,7 +47,6 @@ class ActivityWithSystemAlertWindowPermissionsDispatcherTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest.kt
index fe3e0cb2..670f3b09 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest.kt
@@ -3,11 +3,9 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -23,8 +21,7 @@ import permissions.dispatcher.test.ActivityWithWriteSettingAllAnnotationsPermiss
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class, Settings::class, Build.VERSION::class, Uri::class)
class ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest {
private lateinit var activity: ActivityWithWriteSettingAllAnnotations
@@ -34,7 +31,7 @@ class ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- requestCode = getRequestWritesetting(ActivityWithWriteSettingAllAnnotationsPermissionsDispatcher::class.java)
+ requestCode = getRequestWriteSetting(ActivityWithWriteSettingAllAnnotationsPermissionsDispatcher::class.java)
}
}
@@ -42,9 +39,7 @@ class ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithWriteSettingAllAnnotations::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings.System::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -54,7 +49,6 @@ class ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtAllAnnotationsTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtAllAnnotationsTest.kt
index 16e8ba1e..32ada366 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtAllAnnotationsTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtAllAnnotationsTest.kt
@@ -3,11 +3,9 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -22,8 +20,7 @@ import permissions.dispatcher.PermissionRequest
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings.System::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class, Settings.System::class, Build.VERSION::class, Uri::class)
class ActivityWithWriteSettingKtAllAnnotationsTest {
private lateinit var activity: ActivityWithWriteSettingKtAllAnnotations
@@ -34,8 +31,7 @@ class ActivityWithWriteSettingKtAllAnnotationsTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 16
+ requestCode = ActivityWithWriteSettingKtAllAnnotations::writeSettingWithPermissionCheck.packageLevelGetPropertyValueByName("REQUEST_WRITESETTING") as Int
}
}
@@ -43,9 +39,7 @@ class ActivityWithWriteSettingKtAllAnnotationsTest {
fun setUp() {
activity = Mockito.mock(ActivityWithWriteSettingKtAllAnnotations::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings.System::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -55,7 +49,6 @@ class ActivityWithWriteSettingKtAllAnnotationsTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtTest.kt
index 8a56ba27..ee70f0dd 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingKtTest.kt
@@ -3,11 +3,9 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -21,8 +19,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings.System::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class, Settings.System::class, Build.VERSION::class, Uri::class)
class ActivityWithWriteSettingKtTest {
private lateinit var activity: ActivityWithWriteSettingKt
@@ -32,8 +29,7 @@ class ActivityWithWriteSettingKtTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 15
+ requestCode = ActivityWithWriteSettingKt::writeSettingWithPermissionCheck.packageLevelGetPropertyValueByName("REQUEST_WRITESETTING") as Int
}
}
@@ -41,9 +37,7 @@ class ActivityWithWriteSettingKtTest {
fun setUp() {
activity = Mockito.mock(ActivityWithWriteSettingKt::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings.System::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -53,7 +47,6 @@ class ActivityWithWriteSettingKtTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
@@ -122,5 +115,4 @@ class ActivityWithWriteSettingKtTest {
Mockito.verify(activity, Mockito.times(0)).writeSetting()
}
-
}
\ No newline at end of file
diff --git a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingPermissionsDispatcherTest.kt
index 7c96e58e..325c8dd0 100644
--- a/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/ActivityWithWriteSettingPermissionsDispatcherTest.kt
@@ -3,11 +3,9 @@ package permissions.dispatcher.test
import android.content.Intent
import android.net.Uri
import android.os.Build
-import android.os.Process
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -21,8 +19,7 @@ import org.powermock.modules.junit4.PowerMockRunner
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(ActivityCompat::class, PermissionChecker::class,
- AppOpsManagerCompat::class, Process::class, Settings::class, Build.VERSION::class, Uri::class)
+@PrepareForTest(ActivityCompat::class, ContextCompat::class, Settings::class, Build.VERSION::class, Uri::class)
class ActivityWithWriteSettingPermissionsDispatcherTest {
private lateinit var activity: ActivityWithWriteSetting
@@ -32,7 +29,7 @@ class ActivityWithWriteSettingPermissionsDispatcherTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- requestCode = getRequestWritesetting(ActivityWithWriteSettingPermissionsDispatcher::class.java)
+ requestCode = getRequestWriteSetting(ActivityWithWriteSettingPermissionsDispatcher::class.java)
}
}
@@ -40,9 +37,7 @@ class ActivityWithWriteSettingPermissionsDispatcherTest {
fun setUp() {
activity = Mockito.mock(ActivityWithWriteSetting::class.java)
PowerMockito.mockStatic(ActivityCompat::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
PowerMockito.mockStatic(Settings.System::class.java)
PowerMockito.mockStatic(Uri::class.java)
@@ -52,7 +47,6 @@ class ActivityWithWriteSettingPermissionsDispatcherTest {
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
@@ -121,5 +115,4 @@ class ActivityWithWriteSettingPermissionsDispatcherTest {
Mockito.verify(activity, Mockito.times(0)).writeSetting()
}
-
}
\ No newline at end of file
diff --git a/test/src/test/java/permissions/dispatcher/test/Extensions.kt b/test/src/test/java/permissions/dispatcher/test/Extensions.kt
index f79036b8..8500059f 100644
--- a/test/src/test/java/permissions/dispatcher/test/Extensions.kt
+++ b/test/src/test/java/permissions/dispatcher/test/Extensions.kt
@@ -8,14 +8,15 @@ import android.net.Uri
import android.os.Build
import android.provider.Settings
import androidx.core.app.ActivityCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentActivity
import org.mockito.Matchers.any
import org.mockito.Matchers.anyString
import org.powermock.api.mockito.PowerMockito
import java.lang.reflect.Field
import java.lang.reflect.Modifier
+import kotlin.jvm.internal.CallableReference
+import kotlin.reflect.KFunction
fun mockShouldShowRequestPermissionRationaleActivity(result: Boolean) {
PowerMockito.`when`(ActivityCompat.shouldShowRequestPermissionRationale(any(Activity::class.java), anyString())).thenReturn(result)
@@ -32,7 +33,7 @@ fun mockActivityCompatShouldShowRequestPermissionRationale(result: Boolean) {
fun mockCheckSelfPermission(result: Boolean) {
val value = if (result) PackageManager.PERMISSION_GRANTED else PackageManager.PERMISSION_DENIED
- PowerMockito.`when`(PermissionChecker.checkSelfPermission(any(Context::class.java), anyString())).thenReturn(value)
+ PowerMockito.`when`(ContextCompat.checkSelfPermission(any(), anyString())).thenReturn(value)
}
fun mockCanDrawOverlays(result: Boolean) {
@@ -49,35 +50,15 @@ private fun getPrivateField(clazz: Class<*>, fieldName: String): Field {
return field
}
-private fun getPrivateIntField(clazz: Class<*>, fieldName: String): Int {
- return getPrivateField(clazz, fieldName).getInt(null)
-}
-
-fun getRequestWritesetting(clazz: Class<*>)
- = getPrivateIntField(clazz, "REQUEST_WRITESETTING")
+private fun getPrivateIntField(clazz: Class<*>, fieldName: String): Int = getPrivateField(clazz, fieldName).getInt(null)
-fun getRequestSystemAlertWindow(clazz: Class<*>)
- = getPrivateIntField(clazz, "REQUEST_SYSTEMALERTWINDOW")
+fun getRequestWriteSetting(clazz: Class<*>) = getPrivateIntField(clazz, "REQUEST_WRITESETTING")
-fun getRequestCameraConstant(clazz: Class<*>)
- = getPrivateIntField(clazz, "REQUEST_SHOWCAMERA")
+fun getRequestSystemAlertWindow(clazz: Class<*>) = getPrivateIntField(clazz, "REQUEST_SYSTEMALERTWINDOW")
-fun getPermissionRequestConstant(clazz: Class<*>)
- = getPrivateField(clazz, "PERMISSION_SHOWCAMERA").get(null) as Array
+fun getRequestCameraConstant(clazz: Class<*>) = getPrivateIntField(clazz, "REQUEST_SHOWCAMERA")
-fun overwriteCustomManufacture(manufactureText: String = "Xiaomi") {
- val modifiersField = Field::class.java.getDeclaredField("modifiers")
- modifiersField.isAccessible = true
-
- val manufacture = Build::class.java.getDeclaredField("MANUFACTURER")
- manufacture.isAccessible = true
- modifiersField.setInt(manufacture, manufacture.modifiers and Modifier.FINAL.inv())
- manufacture.set(null, manufactureText)
-}
-
-fun clearCustomManufacture() {
- overwriteCustomManufacture("")
-}
+fun getPermissionRequestConstant(clazz: Class<*>) = getPrivateField(clazz, "PERMISSION_SHOWCAMERA").get(null) as Array
fun overwriteCustomSdkInt(sdkInt: Int = 23) {
val modifiersField = Field::class.java.getDeclaredField("modifiers")
@@ -95,4 +76,39 @@ fun clearCustomSdkInt() {
fun mockUriParse(result: Uri? = null) {
PowerMockito.`when`(Uri.parse(anyString())).thenReturn(result)
-}
\ No newline at end of file
+}
+
+/**
+ * get other package level property value by other package level function name which is in the same kotlin file
+ */
+fun KFunction.packageLevelGetPropertyValueByName(otherPropertyName: String): Any? {
+ return getTopPropertyValueByName(this as CallableReference, otherPropertyName)
+}
+
+fun getTopPropertyValueByName(otherCallableReference: CallableReference, propertyName: String): Any? {
+ val owner = otherCallableReference.owner ?: return null
+ val containerClass: Class<*>
+ try {
+ containerClass = owner::class.members.firstOrNull { it.name == "jClass" }?.call(owner) as Class<*>
+ } catch (e: Exception) {
+ throw IllegalArgumentException("No such property 'jClass'")
+ }
+
+ var tobeSearchMethodClass: Class<*>? = containerClass
+ while (tobeSearchMethodClass != null) {
+ tobeSearchMethodClass.declaredFields.forEach {
+ if (it.name == propertyName) {
+ it.isAccessible = true
+ // top property(package property) should be static in java level
+ if (Modifier.isStatic(it.modifiers)) {
+ return it.get(null)
+ } else {
+ throw IllegalStateException("It is not a top property : $propertyName")
+ }
+ }
+ }
+ tobeSearchMethodClass = tobeSearchMethodClass.superclass
+ }
+
+ throw IllegalArgumentException("Can't find the property named :$propertyName in the same file with ${otherCallableReference.name}")
+}
diff --git a/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsKtPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsKtPermissionsDispatcherTest.kt
index caa927d6..5fa74899 100644
--- a/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsKtPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsKtPermissionsDispatcherTest.kt
@@ -1,9 +1,7 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -18,7 +16,7 @@ import permissions.dispatcher.PermissionRequest
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(PermissionChecker::class, FragmentWithAllAnnotationsKt::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ContextCompat::class, FragmentWithAllAnnotationsKt::class)
class FragmentWithAllAnnotationsKtPermissionsDispatcherTest {
private lateinit var fragment: FragmentWithAllAnnotationsKt
@@ -30,8 +28,7 @@ class FragmentWithAllAnnotationsKtPermissionsDispatcherTest {
@BeforeClass
@JvmStatic
fun setUpForClass() {
- // TODO Reflection on Kotlin top-level properties?
- requestCode = 18
+ requestCode = FragmentWithAllAnnotationsKt::showCameraWithPermissionCheck.packageLevelGetPropertyValueByName("REQUEST_SHOWCAMERA") as Int
requestPermissions = arrayOf("android.permission.CAMERA")
}
}
@@ -40,14 +37,11 @@ class FragmentWithAllAnnotationsKtPermissionsDispatcherTest {
fun setUp() {
fragment = PowerMockito.mock(FragmentWithAllAnnotationsKt::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}
diff --git a/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsPermissionsDispatcherTest.kt b/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsPermissionsDispatcherTest.kt
index 562c6df5..def1fd41 100644
--- a/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsPermissionsDispatcherTest.kt
+++ b/test/src/test/java/permissions/dispatcher/test/FragmentWithAllAnnotationsPermissionsDispatcherTest.kt
@@ -1,9 +1,7 @@
package permissions.dispatcher.test
import android.content.pm.PackageManager
-import android.os.Process
-import androidx.core.app.AppOpsManagerCompat
-import androidx.core.content.PermissionChecker
+import androidx.core.content.ContextCompat
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
@@ -18,14 +16,14 @@ import permissions.dispatcher.PermissionRequest
@Suppress("IllegalIdentifier")
@RunWith(PowerMockRunner::class)
-@PrepareForTest(PermissionChecker::class, FragmentWithAllAnnotationsKt::class, AppOpsManagerCompat::class, Process::class)
+@PrepareForTest(ContextCompat::class, FragmentWithAllAnnotationsKt::class)
class FragmentWithAllAnnotationsPermissionsDispatcherTest {
private lateinit var fragment: FragmentWithAllAnnotations
companion object {
private var requestCode = 0
- lateinit private var requestPermissions: Array
+ private lateinit var requestPermissions: Array
@BeforeClass
@JvmStatic
@@ -39,14 +37,11 @@ class FragmentWithAllAnnotationsPermissionsDispatcherTest {
fun setUp() {
fragment = PowerMockito.mock(FragmentWithAllAnnotations::class.java)
- PowerMockito.mockStatic(PermissionChecker::class.java)
- PowerMockito.mockStatic(Process::class.java)
- PowerMockito.mockStatic(AppOpsManagerCompat::class.java)
+ PowerMockito.mockStatic(ContextCompat::class.java)
}
@After
fun tearDown() {
- clearCustomManufacture()
clearCustomSdkInt()
}