馃幆 G艂贸wna IdeaMain Concept

Modu艂 Permissions upraszcza obs艂ug臋 uprawnie艅 Android. Zamiast r臋cznie zarz膮dza膰 ActivityResultContracts, wystarczy proste wywo艂anie z callbackiem.The Permissions module simplifies Android permission handling. Instead of manually managing ActivityResultContracts, a simple call with a callback is enough.

馃摑 Podstawowe u偶ycieBasic Usage

// Popro艣 o pojedyncze uprawnienie
ADict.Permissions.request(activity, Permission.CAMERA) { granted ->
    if (granted) {
        openCamera()
    } else {
        showDeniedMessage()
    }
}

// Sprawd藕 bez pytania
if (ADict.Permissions.isGranted(context, Permission.LOCATION)) {
    getCurrentLocation()
}

馃搵 Wiele uprawnie艅 narazMultiple Permissions at Once

// Popro艣 o kilka uprawnie艅
ADict.Permissions.requestMultiple(
    activity,
    listOf(Permission.CAMERA, Permission.RECORD_AUDIO, Permission.LOCATION)
) { results ->
    // results: Map<String, Boolean>

    if (results.all { it.value }) {
        // Wszystkie przyznane
        startVideoRecordingWithLocation()
    } else {
        // Sprawd藕 kt贸re brakuj膮
        val missing = results.filter { !it.value }.keys
        showMissingPermissions(missing)
    }
}

// Sprawd藕 kt贸re brakuj膮
val missing = ADict.Permissions.getMissingPermissions(
    context,
    listOf(Permission.CAMERA, Permission.RECORD_AUDIO)
)
if (missing.isEmpty()) {
    // Wszystkie s膮
}

馃挰 Z wyja艣nieniem (Rationale)With Rationale

Automatycznie pokazuje dialog z wyja艣nieniem gdy potrzeba:Automatically shows rationale dialog when needed:

ADict.Permissions.requestWithRationale(
    activity = activity,
    permission = Permission.CAMERA,
    rationale = "Potrzebujemy dost臋pu do kamery, aby zrobi膰 zdj臋cie profilowe",
    rationaleTitle = "Wymagane uprawnienie",  // opcjonalne
    positiveButton = "OK",                     // opcjonalne
    negativeButton = "Anuluj",                 // opcjonalne
    onGranted = {
        openCamera()
    },
    onDenied = {
        showAlternativeUpload()
    }
)

// Je艣li uprawnienie jest permanentnie odrzucone,
// automatycznie poka偶e dialog z opcj膮 przej艣cia do ustawie艅

馃搳 Stan uprawnienia

val state = ADict.Permissions.getState(activity, Permission.CAMERA)

when (state) {
    PermissionState.GRANTED -> {
        // Przyznane - mo偶na u偶ywa膰
        openCamera()
    }
    PermissionState.DENIED -> {
        // Odrzucone, ale mo偶na zapyta膰 ponownie
        showRationale()
    }
    PermissionState.PERMANENTLY_DENIED -> {
        // Odrzucone z "Don't ask again" - trzeba i艣膰 do ustawie艅
        showSettingsPrompt()
    }
    PermissionState.NOT_APPLICABLE -> {
        // Nie dotyczy (np. Android 12 permission na Android 10)
    }
}

馃摫 Dost臋pne uprawnieniaAvailable Permissions

Sta艂aConstant Uprawnienie UwagiNotes
Permission.CAMERAKamera
Permission.LOCATIONDok艂adna lokalizacjaPrecise location
Permission.LOCATION_COARSEPrzybli偶ona lokalizacjaApproximate location
Permission.RECORD_AUDIOMikrofon
Permission.READ_CONTACTSOdczyt kontakt贸w
Permission.WRITE_CONTACTSZapis kontakt贸w
Permission.READ_STORAGEOdczyt pami臋ciStorage readLegacy
Permission.READ_MEDIA_IMAGESOdczyt zdj臋膰Photo readAndroid 13+
Permission.READ_MEDIA_VIDEOOdczyt wideoAndroid 13+
Permission.POST_NOTIFICATIONSPowiadomieniaNotificationsAndroid 13+
Permission.BLUETOOTH_CONNECTPo艂膮czenieConnection BTAndroid 12+
Permission.BLUETOOTH_SCANSkanowanie BTAndroid 12+

馃敡 Funkcje pomocnicze

// Otw贸rz ustawienia aplikacji
ADict.Permissions.openAppSettings(context)

// Otw贸rz ustawienia lokalizacji
ADict.Permissions.openLocationSettings(context)

// Otw贸rz ustawienia Bluetooth
ADict.Permissions.openBluetoothSettings(context)

// Czy lokalizacja w艂膮czona w systemie?
if (!ADict.Permissions.isLocationEnabled(context)) {
    showEnableLocationPrompt()
}

// Czy Bluetooth w艂膮czony?
if (!ADict.Permissions.isBluetoothEnabled(context)) {
    showEnableBluetoothPrompt()
}

// Obs艂u偶 wynik w Activity (je艣li nie u偶ywasz ActivityResultContracts)
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    ADict.Permissions.onRequestPermissionsResult(requestCode, permissions, grantResults)
}