{"id":18270092,"url":"https://github.com/ParkSangGwon/TedPermission","last_synced_at":"2025-04-04T23:31:42.156Z","repository":{"id":41081439,"uuid":"51969435","full_name":"ParkSangGwon/TedPermission","owner":"ParkSangGwon","description":"Easy check permission library for Android Marshmallow","archived":false,"fork":false,"pushed_at":"2024-08-14T02:40:19.000Z","size":683,"stargazers_count":1742,"open_issues_count":28,"forks_count":240,"subscribers_count":53,"default_branch":"master","last_synced_at":"2025-04-03T05:09:04.783Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ParkSangGwon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-02-18T01:37:51.000Z","updated_at":"2025-03-27T05:22:57.000Z","dependencies_parsed_at":"2024-03-15T04:24:56.963Z","dependency_job_id":"22ea6703-b49a-445a-9c9a-86a77d39a4fe","html_url":"https://github.com/ParkSangGwon/TedPermission","commit_stats":{"total_commits":190,"total_committers":17,"mean_commits":"11.176470588235293","dds":0.6526315789473685,"last_synced_commit":"cbecb0c355fa8e5abd5fe82fbdb81cf18065f361"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParkSangGwon%2FTedPermission","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParkSangGwon%2FTedPermission/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParkSangGwon%2FTedPermission/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParkSangGwon%2FTedPermission/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ParkSangGwon","download_url":"https://codeload.github.com/ParkSangGwon/TedPermission/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247266476,"owners_count":20910831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T11:38:17.474Z","updated_at":"2025-04-04T23:31:40.978Z","avatar_url":"https://github.com/ParkSangGwon.png","language":"Java","funding_links":[],"categories":["etc"],"sub_categories":[],"readme":"[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-TedPermission-green.svg?style=true)](https://android-arsenal.com/details/1/3238)\n\n# What is TedPermission?\n\nAfter the update to Android 6.0 Marshmallow, we have to not only declare permissions in `AndroidManifest.xml`, but also request them at runtime. Furthermore, the user can turn permissions on/off anytime in application settings. \n\u003cbr/\u003eWhen you use **dangerous permissons**(ex. `CAMERA`, `READ_CONTACTS`, `READ_PHONE_STATE`, ...), you must check and request them at runtime.\u003cbr/\u003e\n(https://developer.android.com/guide/topics/permissions/overview?hl=en#normal-dangerous)\n\nYou can make your own permission check logic [like this](http://developer.android.com/intl/ko/training/permissions/requesting.html), but  it's very complex, mainly because functions Google offer are very hard to use: `checkSelfPermission()`, `requestPermissions()`, `onRequestPermissionsResult()`, `onActivityResult()`.\n\nTedPermission makes it easy to check and request android permissions.\n\n\n(For Korean)\n아래 블로그를 통해 마시멜로우 권한 관련된 사항을 알아보세요\n\u003cbr/\u003ehttp://gun0912.tistory.com/55\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n\n## Demo\n\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n![Screenshot](https://github.com/ParkSangGwon/TedPermission/blob/master/Screenshot.png?raw=true)    \n           \n           \n1. Request permissions.\n2. If user denied permissions, a message dialog with a button to go to Settings will appear. \n\n\n## Setup\n- Edit `root/app/build.gradle` like below.\n- You can choose only one library depend on your code style `normal`/`coroutine`/`rxJava2`/`rxJava3`\n- Replace `x.y.z` with the version shown in the 'Maven Central' button below, or the specific version you want (e.g. replace `x.y.z` with `3.4.2` if you want 3.4.2).\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.ParkSangGwon/tedpermission-normal.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22io.github.ParkSangGwon%22%20AND%20a:%tedpermission-normal%22)\n\n```gradle\nrepositories {\n  google()\n  mavenCentral()\n}\n\ndependencies {\n    // Normal\n    implementation(\"io.github.ParkSangGwon:tedpermission-normal:3.4.2\")\n    \n    // Coroutine\n    implementation(\"io.github.ParkSangGwon:tedpermission-coroutine:3.4.2\")\n\n    // RxJava2\n    implementation(\"io.github.ParkSangGwon:tedpermission-rx2:3.4.2\")\n    // RxJava3\n    implementation(\"io.github.ParkSangGwon:tedpermission-rx3:3.4.2\")\n}\n```\n\n\nIf you think this library is useful, please press the star button at the top.\n\u003cbr/\u003e\n\u003cimg src=\"https://phaser.io/content/news/2015/09/10000-stars.png\" width=\"200\"\u003e\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n## How to use\n\n### Normal\n#### -Make PermissionListener\nWe will use `PermissionListener` for handling permission check result.\nYou will get the result to `onPermissionGranted()` or `onPermissionDenied()` depending on approved permissions.\n\n```java\n\n    PermissionListener permissionlistener = new PermissionListener() {\n        @Override\n        public void onPermissionGranted() {\n            Toast.makeText(MainActivity.this, \"Permission Granted\", Toast.LENGTH_SHORT).show();\n        }\n\n        @Override\n        public void onPermissionDenied(List\u003cString\u003e deniedPermissions) {\n            Toast.makeText(MainActivity.this, \"Permission Denied\\n\" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();\n        }\n\n\n    };\n```\n\n#### -Start TedPermission \nTedPermission class requires `setPermissionListener()`, `setPermissions()`, and `check()` methods.\nCall `check()` to start checking for permissions.\n\n`setRationaleMessage()` and `setDeniedMessage()` are optional methods for displaying messages.\n\n```java\n    TedPermission.create()\n        .setPermissionListener(permissionlistener)\n        .setDeniedMessage(\"If you reject permission,you can not use this service\\n\\nPlease turn on permissions at [Setting] \u003e [Permission]\")\n        .setPermissions(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)\n        .check();\n```\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n### Coroutine\nIf you use kotlin and coroutine, You can use `check()`function.\n`TedPermissionResult` instance has `isGranted()`, `getDeniedPermissions()` methods for checking permission check result.\n```kotlin\nval permissionResult =\n    TedPermission.create()\n        .setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION)\n        .check()\n```\nAlso if you want know only granted result, you can use `checkGranted(): boolean`\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n### RxJava\nIf you use RxJava, You can use `request()` method instead `check()`.\nWhen permission check has finished, you will receive `TedPermissionResult` instance.\n`TedPermissionResult` instance has `isGranted()`, `getDeniedPermissions()` methods for checking permission check result.\n\n```java\n    TedPermission.create()\n        .setRationaleTitle(R.string.rationale_title)\n        .setRationaleMessage(R.string.rationale_message) // \"we need permission for read contact and find your location\"\n        .setPermissions(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)\n        .request()\n        .subscribe(tedPermissionResult -\u003e {\n          if (tedPermissionResult.isGranted()) {\n            Toast.makeText(this, \"Permission Granted\", Toast.LENGTH_SHORT).show();\n          } else {\n            Toast.makeText(this,\n                \"Permission Denied\\n\" + tedPermissionResult.getDeniedPermissions().toString(), Toast.LENGTH_SHORT)\n                .show();\n          }\n        }, throwable -\u003e {\n        });\n```\n\n\n\n\u003cbr/\u003e\n\n## Customize\nTedPermission supports the following methods.\u003cbr /\u003e\n\n* `setGotoSettingButton(boolean) (default: true)`\n* `setRationaleTitle(R.string.xxx or String)`\n* `setRationaleMessage(R.string.xxx or String)`\n* `setRationaleConfirmText(R.string.xxx or String) (default: confirm / 확인)`\n* `setDeniedTitle(R.string.xxx or String)`\n* `setDeniedMessage(R.string.xxx or String)`\n* `setDeniedCloseButtonText(R.string.xxx or String) (default: close / 닫기)`\n* `setGotoSettingButtonText(R.string.xxx or String) (default: setting / 설정)`\n\nAlso you can use the following utility functions.\n* `isGranted(String... permissions)`: Check if all permissions are granted\n* `isDenied(String... permissions)`: Check if all permissions are denied\n* `getDeniedPermissions(String... permissions)`\n* `canRequestPermission(Activity activity, String... permissions)`: If `true` you can request a system popup, `false` means user checked  `Never ask again`.\n* `startSettingActivityForResult()`\n* `startSettingActivityForResult(int requestCode)`\n\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n\n## Number of Cases\n1. Check permissions -\u003e Already have permissions\u003cbr/\u003e\n: `onPermissionGranted()` is called.\u003cbr/\u003e\n\n2. Check permissions -\u003e Don't have permissions\u003cbr/\u003e\n: Request dialog is shown.\u003cbr/\u003e\n![Screenshot](https://github.com/ParkSangGwon/TedPermission/blob/master/request_dialog.png?raw=true)\u003cbr/\u003e\n\n\n3. Show request dialog -\u003e User granted permissions\u003cbr/\u003e\n: `onPermissionGranted()` is called.\u003cbr/\u003e\n\n4. Show request dialog -\u003e User denied one or more permissions\u003cbr/\u003e\n: Denied dialog is shown.\u003cbr/\u003e\n![Screenshot](https://github.com/ParkSangGwon/TedPermission/blob/master/denied_dialog.png?raw=true)\u003cbr/\u003e\n\n5. Show denied dialog -\u003e Close the dialog\u003cbr/\u003e\n: `onPermissionDenied()` called\u003cbr/\u003e\n\n6. Show denied dialog -\u003e Setting button clicked\u003cbr/\u003e\n: `startActivityForResult()` to application Setting Activity.\u003cbr/\u003e\n![Screenshot](https://github.com/ParkSangGwon/TedPermission/blob/master/setting_activity.png?raw=true)\u003cbr/\u003e\n\n\n7. Setting Activity -\u003e `onActivityResult()`\u003cbr/\u003e\n: Check permissions again\u003cbr/\u003e\n\n8. Check permission -\u003e Permissions are granted\u003cbr/\u003e\n: `onPermissionGranted()` is called.\u003cbr/\u003e\n\n9. Check permission -\u003e There are denied permissions\u003cbr/\u003e\n: `onPermissionDenied()` is called.\u003cbr/\u003e\n \n\u003cbr/\u003e\u003cbr/\u003e\n\n\n![Screenshot](https://github.com/ParkSangGwon/TedPermission/blob/master/Screenshot_cases.png?raw=true)    \n\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n## License \n ```code\nCopyright 2021 Ted Park\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FParkSangGwon%2FTedPermission","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FParkSangGwon%2FTedPermission","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FParkSangGwon%2FTedPermission/lists"}