registerForActivityResult is not called in fragment

Viewed 1223

I Recently migrated to latest callback mechanism for registering the request permissions however the latest api for registering request callback is never triggered I am attaching the code snippet can anyone help me to find what went wrong,

        @AndroidEntryPoint
class ManageTeamFragment : Fragment(), View.OnClickListener {

    @Inject
    lateinit var manageTeamViewModel: ManageTeamViewModel

    private var requestMultiplePermissions:ActivityResultLauncher<Array<out String>>? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        requestMultiplePermissions =
            registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
                println("DEBUG $it")
                if (allPermissionsGranted()) {
                    btnAddUser.showLoading(true)
                    btnAddUser.postDelayed({
                        (activity as? DashboardActivity)?.navToFragment(AddUserFragment(), true)
                    }, 10)
                } else {
                    if (addOrEditUserBottomSheet == null) {
                        addOrEditUserBottomSheet =
                            AddOrEditUserBottomSheet(toolbar.context, addOrEditUserInteractionsListener)
                    }
                    addOrEditUserBottomSheet?.showBottomSheet()
                }
            }

    }


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {



        return inflater.inflate(R.layout.fragment_manage_team, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initViews()
        initViewModels()
        // Inflate the layout for this fragment

        btnAddUser.setOnClickListener {
            println("DEBUG requesting")
            requestMultiplePermissions?.launch(REQUIRED_PERMISSIONS)
        }
    }
}

gradle dependencies

implementation 'androidx.activity:activity-ktx:1.2.0-alpha05'
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha05'
2 Answers

The problem I had was that the given activity was marked as android:noHistory="true" in the AndroidManifest.xml file. And it should be like this:

<activity
            android:name=".activity.PaletteAddActivity"
            android:noHistory="false" />

just try requesting for one permission like this.

private val requestMultiplePermissions =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            println("DEBUG $it")
            if (allPermissionsGranted()) {
                btnAddUser.showLoading(true)
                btnAddUser.postDelayed({
                    (activity as? DashboardActivity)?.navToFragment(AddUserFragment(), true)
                }, 10)
            } else {
                if (addOrEditUserBottomSheet == null) {
                    addOrEditUserBottomSheet =
                        AddOrEditUserBottomSheet(toolbar.context, addOrEditUserInteractionsListener)
                }
                addOrEditUserBottomSheet?.showBottomSheet()
            }
        }

Then try launching the request inside the onCreateView method instead and just pass the one permission that you need as a String.

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

//launch permission request here and pass the permission
requestMultiplePermissions.launch(Manifest.permission.READ_CONTACTS)
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_manage_team, container, false)
    }
Related