diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7b58c90..0e73156 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,14 +36,18 @@ - + - - @@ -53,9 +57,9 @@ - - - + + + - - + + --> + + + \ No newline at end of file diff --git a/app/src/main/java/com/permissionx/app/ExampleComponentActivity.kt b/app/src/main/java/com/permissionx/app/ExampleComponentActivity.kt new file mode 100644 index 0000000..affb5fa --- /dev/null +++ b/app/src/main/java/com/permissionx/app/ExampleComponentActivity.kt @@ -0,0 +1,81 @@ +package com.permissionx.app + +import android.Manifest +import android.graphics.Color +import android.os.Bundle +import android.widget.Toast +import androidx.activity.ComponentActivity +import com.permissionx.app.databinding.ActivityExampleComponentBinding +import com.permissionx.guolindev.PermissionX +import com.permissionx.guolindev.patch.PermissionDelegateHolder + +class ExampleComponentActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val layout = ActivityExampleComponentBinding.inflate(layoutInflater) + layout.makeRequestBtn.setOnClickListener { + + PermissionX.init(this) { + it.permissions(Manifest.permission.CAMERA) + .request { allGranted, grantedList, deniedList -> + if (allGranted) { + Toast.makeText(this, "All permissions are granted", Toast.LENGTH_SHORT) + .show() + } else { + Toast.makeText( + this, + "The following permissions are denied:$deniedList", + Toast.LENGTH_SHORT + ).show() + } + } + } + // or directly use PermissionDelegateHolder +// requestPerms() + } + setContentView(layout.root) + } + + fun requestPerms() { + PermissionDelegateHolder.delegate(this) { + PermissionX.init(it) + .permissions( + Manifest.permission.CAMERA, + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.RECORD_AUDIO, +// Manifest.permission.READ_CALENDAR, +// Manifest.permission.READ_CALL_LOG, +// Manifest.permission.READ_CONTACTS, +// Manifest.permission.READ_PHONE_STATE, +// Manifest.permission.BODY_SENSORS, +// Manifest.permission.ACTIVITY_RECOGNITION, +// Manifest.permission.SEND_SMS, +// Manifest.permission.READ_EXTERNAL_STORAGE + ) + .setDialogTintColor(Color.parseColor("#1972e8"), Color.parseColor("#8ab6f5")) + .onExplainRequestReason { scope, deniedList, beforeRequest -> + val message = "PermissionX needs following permissions to continue" + scope.showRequestReasonDialog(deniedList, message, "Allow", "Deny") +// val message = "Please allow the following permissions in settings" +// val dialog = CustomDialogFragment(message, deniedList) +// scope.showRequestReasonDialog(dialog) + } + .onForwardToSettings { scope, deniedList -> + val message = "Please allow following permissions in settings" + scope.showForwardToSettingsDialog(deniedList, message, "Allow", "Deny") + } + .request { allGranted, grantedList, deniedList -> + if (allGranted) { + Toast.makeText(it, "All permissions are granted", Toast.LENGTH_SHORT) + .show() + } else { + Toast.makeText( + it, + "The following permissions are denied:$deniedList", + Toast.LENGTH_SHORT + ).show() + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/permissionx/app/MainFragment.kt b/app/src/main/java/com/permissionx/app/MainFragment.kt index be3fff9..3139b2a 100644 --- a/app/src/main/java/com/permissionx/app/MainFragment.kt +++ b/app/src/main/java/com/permissionx/app/MainFragment.kt @@ -1,6 +1,7 @@ package com.permissionx.app import android.Manifest +import android.content.Intent import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater @@ -17,7 +18,11 @@ class MainFragment : Fragment() { private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { _binding = FragmentMainBinding.inflate(inflater, container, false) return binding.root } @@ -28,7 +33,7 @@ class MainFragment : Fragment() { binding.makeRequestBtn.setOnClickListener { PermissionX.init(this) .permissions( - Manifest.permission.CAMERA, + Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.RECORD_AUDIO, // Manifest.permission.READ_CALENDAR, @@ -54,12 +59,33 @@ class MainFragment : Fragment() { } .request { allGranted, grantedList, deniedList -> if (allGranted) { - Toast.makeText(activity, "All permissions are granted", Toast.LENGTH_SHORT).show() + Toast.makeText(activity, "All permissions are granted", Toast.LENGTH_SHORT) + .show() } else { - Toast.makeText(activity, "The following permissions are denied:$deniedList", Toast.LENGTH_SHORT).show() + Toast.makeText( + activity, + "The following permissions are denied:$deniedList", + Toast.LENGTH_SHORT + ).show() } } } + binding.makeRequestBtn2.setOnClickListener { + requireActivity().startActivity( + Intent( + requireActivity(), + ExampleComponentActivity::class.java + ) + ) + } + binding.makeRequestBtn3.setOnClickListener { + requireActivity().startActivity( + Intent( + requireActivity(), + MainJavaActivity::class.java + ) + ) + } } override fun onDestroyView() { diff --git a/app/src/main/java/com/permissionx/app/MainJavaActivity.java b/app/src/main/java/com/permissionx/app/MainJavaActivity.java index b38d871..b59cbdd 100644 --- a/app/src/main/java/com/permissionx/app/MainJavaActivity.java +++ b/app/src/main/java/com/permissionx/app/MainJavaActivity.java @@ -5,9 +5,15 @@ import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; import com.permissionx.app.databinding.ActivityMainJavaBinding; +import com.permissionx.guolindev.PermissionMediator; import com.permissionx.guolindev.PermissionX; +import com.permissionx.guolindev.patch.PermissionDelegateHolder; + +import kotlin.Unit; +import kotlin.jvm.functions.Function1; public class MainJavaActivity extends AppCompatActivity { @@ -16,11 +22,40 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainJavaBinding binding = ActivityMainJavaBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); - binding.makeRequestBtn.setOnClickListener(view -> PermissionX.init(MainJavaActivity.this) + + binding.makeRequestBtn.setOnClickListener(view -> { + requestCameraPermission(MainJavaActivity.this); + }); + + binding.makeRequestBtn2.setOnClickListener(view -> { + PermissionX.init(this, permissionMediator -> { + permissionMediator + .permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE) + .explainReasonBeforeRequest() + .request((allGranted, grantedList, deniedList) -> { + if (allGranted) { + Toast.makeText(MainJavaActivity.this, "All permissions are granted", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(MainJavaActivity.this, "The following permissions are denied:" + deniedList, Toast.LENGTH_SHORT).show(); + } + }); + return null; + }); + + // or directly use PermissionDelegateHolder +// PermissionDelegateHolder.delegate(this, fragmentActivity -> { +// requestCameraPermission(fragmentActivity);// use the activity argument, do not use MainJavaActivity.this +// return null; +// }); + }); + } + + private void requestCameraPermission(FragmentActivity activity) { + PermissionX.init(activity) .permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE) .explainReasonBeforeRequest() .onExplainRequestReason((scope, deniedList, beforeRequest) -> { -// CustomDialog customDialog = new CustomDialog(MainJavaActivity.this, "PermissionX needs following permissions to continue", deniedList); +// CustomDialog customDialog = new CustomDialog(activity, "PermissionX needs following permissions to continue", deniedList); // scope.showRequestReasonDialog(customDialog); scope.showRequestReasonDialog(deniedList, "PermissionX needs following permissions to continue", "Allow"); }) @@ -33,6 +68,6 @@ protected void onCreate(Bundle savedInstanceState) { } else { Toast.makeText(MainJavaActivity.this, "The following permissions are denied:" + deniedList, Toast.LENGTH_SHORT).show(); } - })); + }); } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_example_component.xml b/app/src/main/res/layout/activity_example_component.xml new file mode 100644 index 0000000..7ec095b --- /dev/null +++ b/app/src/main/res/layout/activity_example_component.xml @@ -0,0 +1,13 @@ + + + +