MCPcopy Index your code
hub / github.com/MichaelJokAr/PermissionDispatcher

github.com/MichaelJokAr/PermissionDispatcher @2.0.8

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.0.8 ↗ · + Follow
149 symbols 350 edges 33 files 37 documented · 25%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PermissionDispatcher

rewrite the PermissionsDispatcher for Java and add code for "Xiaomi" phone;

Usage

Here's a minimum example, in which we register a MainActivity which requires Manifest.permission.CAMERA.

1. Attach annotations

PermissionsDispatcher introduces only a few annotations, keeping its general API concise:

NOTE: Annotated methods must not be private.

Annotation Required Description
@RuntimePermissions Register an Activity or Fragment to handle permissions
@NeedsPermission Annotate a method which performs the action that requires one or more permissions
@OnShowRationale Annotate a method which explains why the permission/s is/are needed. It passes in a PermissionRequest object which can be used to continue or abort the current permission request upon user input
@OnPermissionDenied Annotate a method which is invoked if the user doesn't grant the permissions
@OnNeverAskAgain Annotate a method which is invoked if the user chose to have the device "never ask again" about a permission
@RuntimePermissions
public class MainActivity extends AppCompatActivity {

    @NeedsPermission(Manifest.permission.CAMERA)
    void showCamera() {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
                .addToBackStack("camera")
                .commitAllowingStateLoss();
    }

    @OnShowRationale(Manifest.permission.CAMERA)
    void showRationaleForCamera(PermissionRequest request) {
        new AlertDialog.Builder(this)
            .setMessage(R.string.permission_camera_rationale)
            .setPositiveButton(R.string.button_allow, (dialog, button) -> request.proceed())
            .setNegativeButton(R.string.button_deny, (dialog, button) -> request.cancel())
            .show();
    }

    @OnPermissionDenied(Manifest.permission.CAMERA)
    void showDeniedForCamera() {
        Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show();
    }

    @OnNeverAskAgain(Manifest.permission.CAMERA)
    void showNeverAskForCamera() {
        Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show();
    }
}

2. Delegate to generated class

Upon compilation, PermissionsDispatcher generates a class for MainActivityPermissionsDispatcher, which you can use to safely access these permission-protected methods.

The only step you have to do is delegating the work to this helper class:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button_camera).setOnClickListener(v -> {
      // NOTE: delegate the permission handling to generated method
      MainActivityPermissionsDispatcher.showCameraWithCheck(this);
    });
    findViewById(R.id.button_contacts).setOnClickListener(v -> {
      // NOTE: delegate the permission handling to generated method
      MainActivityPermissionsDispatcher.showContactsWithCheck(this);
    });
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    // NOTE: delegate the permission handling to generated method
    MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}

Check out the sample

Note

  • PermissionsDispatcher depends on the support-v4 library by default, in order to be able to use some permission compat classes.
  • You can use this library with JDK 1.6 or up, but we test library's behaviour on the JDK 1.8 because it has been becoming the default of Android development.

Fragment Support

PermissionsDispatcher is supported on API levels 4 and up ,with which you get support for annotating android.app.Activity and android.support.v4.app.Fragment sub-classes out of the box.

In case you rely on android.app.Fragment in your app, you can use these with PermissionsDispatcher as well!

Download

To add it to your project, include the following in your project build.gradle file:

buildscript {
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

And on your app module build.gradle:

${latest.version} is Download

apply plugin: 'android-apt'

dependencies {
  compile 'org.jokar:permissiondispatcher:${latest.version}'
  apt 'org.jokar:permissiondispatcher-processor:${latest.version}'
}

Licence

Copyright 2016 Shintaro Katafuchi, Marcel Schnelle, Yoshinori Isogai,JokAr

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.

Extension points exported contracts — how you extend this code

SensitivePermissionInterface (Interface)
Created by JokAr on 16/8/26. [4 implementers]
processor/src/main/java/org/jokar/permissiondispatcher/processor/helper/SensitivePermissionInterface.java
GrantableRequest (Interface)
Created by JokAr on 16/8/23.
library/src/main/android/org.jokar.permissiondispatcher.library/GrantableRequest.java
TypeResolver (Interface)
Created by JokAr on 16/8/23. [2 implementers]
processor/src/main/java/org/jokar/permissiondispatcher/processor/event/TypeResolver.java
PermissionRequest (Interface)
Created by JokAr on 16/8/22.
library/src/main/android/org.jokar.permissiondispatcher.library/PermissionRequest.java
ConstantsProvider (Interface)
Created by JokAr on 16/8/23.
processor/src/main/java/org/jokar/permissiondispatcher/processor/event/ConstantsProvider.java

Core symbols most depended-on inside this repo

toString
called by 35
processor/src/main/java/org/jokar/permissiondispatcher/processor/utils/ProcessorUtil.java
getClassType
called by 10
processor/src/main/java/org/jokar/permissiondispatcher/processor/event/ClassType.java
isEmpty
called by 8
processor/src/main/java/org/jokar/permissiondispatcher/processor/utils/ProcessorUtil.java
getNeedsPermissionsMethods
called by 7
processor/src/main/java/org/jokar/permissiondispatcher/processor/RuntimePermissionsElement.java
requestCodeFieldName
called by 5
processor/src/main/java/org/jokar/permissiondispatcher/processor/utils/ProcessorUtil.java
permissionFieldName
called by 5
processor/src/main/java/org/jokar/permissiondispatcher/processor/utils/ProcessorUtil.java
getActivity
called by 5
processor/src/main/java/org/jokar/permissiondispatcher/processor/event/ClassType.java
getTypeName
called by 4
processor/src/main/java/org/jokar/permissiondispatcher/processor/RuntimePermissionsElement.java

Shape

Method 121
Class 22
Interface 5
Enum 1

Languages

Java100%

Modules by API surface

processor/src/main/java/org/jokar/permissiondispatcher/processor/JavaFileBuilder.java23 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/utils/ProcessorUtil.java20 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/RuntimePermissionsElement.java20 symbols
app/src/main/java/org/jokar/permissiondispatcher/MainActivity.java11 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/PermissionsProcessor.java9 symbols
library/src/main/android/org.jokar.permissiondispatcher.library/PermissionUtils.java9 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/utils/ValidatorUtils.java8 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/event/TypeResolver.java4 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/event/ClassType.java4 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/helper/WriteSettingsHelper.java3 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/helper/SystemAlertWindowHelper.java3 symbols
processor/src/main/java/org/jokar/permissiondispatcher/processor/helper/SensitivePermissionInterface.java3 symbols

For agents

$ claude mcp add PermissionDispatcher \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page