dvAndroidPermissions top-level constant

Map<String, DVAndroidPermissionGroup> const dvAndroidPermissions

Every permission name Dartvel understands, and what it means on Android.

The names are the platform-independent ones DV.Permissions takes, so the same call works on a desktop -- where the answer is a fact about the process rather than a dialog -- and on a phone.

Implementation

const Map<String, DVAndroidPermissionGroup> dvAndroidPermissions =
    <String, DVAndroidPermissionGroup>{
  'camera': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.CAMERA'),
  ]),
  'microphone': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.RECORD_AUDIO'),
  ]),
  // Precise or approximate. Asking for the precise one without declaring the
  // approximate one takes away the person's choice: Android only offers the
  // two-button dialog when both are declared.
  'location': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.ACCESS_FINE_LOCATION'),
    DVAndroidPermission('android.permission.ACCESS_COARSE_LOCATION'),
  ], anyOf: true),
  'contacts': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.READ_CONTACTS'),
  ]),
  'notifications': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.POST_NOTIFICATIONS', minSdk: 33),
  ]),
  // Reading someone else's files. The application's own directory needs
  // nothing at all, which is why `files` below is an empty group rather than
  // an entry here.
  'storage': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.READ_EXTERNAL_STORAGE', maxSdk: 32),
  ]),
  'photos': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.READ_MEDIA_IMAGES', minSdk: 33),
    DVAndroidPermission('android.permission.READ_EXTERNAL_STORAGE', maxSdk: 32),
  ], anyOf: true),
  'bluetooth': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.BLUETOOTH_CONNECT', minSdk: 31),
    DVAndroidPermission('android.permission.BLUETOOTH_SCAN', minSdk: 31),
    DVAndroidPermission('android.permission.BLUETOOTH', maxSdk: 30),
    DVAndroidPermission('android.permission.BLUETOOTH_ADMIN', maxSdk: 30),
  ]),
  // Granted at install once declared, so a request for it answers straight
  // away rather than showing a dialog.
  'nfc': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.NFC'),
  ]),
  'biometrics': DVAndroidPermissionGroup(<DVAndroidPermission>[
    DVAndroidPermission('android.permission.USE_BIOMETRIC'),
  ]),
  // Nothing to ask for. An empty group is granted, and it is not the same as
  // an unknown name -- which is a typo, and answers with an error rather
  // than a refusal nobody can act on.
  'clipboard': DVAndroidPermissionGroup(<DVAndroidPermission>[]),
  'files': DVAndroidPermissionGroup(<DVAndroidPermission>[]),
};