Pulp
1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
permissions.hpp
Go to the documentation of this file.
1
#pragma once
2
3
// Cross-platform runtime permission queries and requests.
4
//
5
// Mobile platforms (iOS, Android) require explicit user consent for
6
// microphone, camera, Bluetooth, and notifications. Desktop platforms
7
// usually don't gate these through an app-level permission prompt, so
8
// their backends treat most classes as `Granted` and some as
9
// `Restricted` (e.g. Android's `ForegroundService`).
10
//
11
// The contract deliberately stays small:
12
// query(p) — synchronous, never blocks, never prompts.
13
// request(p) — async, always invokes the callback exactly once.
14
//
15
// Tests can redirect the backend with `PermissionsOverride` without
16
// touching the platform implementation.
17
18
#include <functional>
19
20
namespace
pulp::platform
{
21
22
enum class
Permission
{
23
Microphone
,
// iOS mic, Android RECORD_AUDIO
24
Camera
,
// iOS/Android camera
25
BluetoothMidi
,
// iOS NSBluetoothAlwaysUsageDescription, Android BLUETOOTH_*
26
LocalNetwork
,
// iOS NSLocalNetworkUsageDescription (RTP-MIDI, bonjour)
27
Notifications
,
// iOS UNUserNotificationCenter, Android POST_NOTIFICATIONS
28
BackgroundAudio
,
// iOS UIBackgroundModes=audio capability
29
ForegroundService
,
// Android FOREGROUND_SERVICE / FOREGROUND_SERVICE_MICROPHONE
30
};
31
32
enum class
PermissionState
{
33
NotDetermined
,
// Never asked. On platforms without a prompt, backends use Granted instead.
34
Granted
,
// User (or OS policy) granted it.
35
Denied
,
// User denied; may be re-askable depending on platform.
36
Restricted
,
// Policy / parental-control / unsupported-on-platform.
37
};
38
39
using
RequestCallback
= std::function<void(
PermissionState
)>;
40
42
PermissionState
query
(
Permission
p);
43
47
void
request
(
Permission
p,
RequestCallback
cb);
48
52
bool
has_platform_backend
();
53
59
class
PermissionsOverride
{
60
public
:
61
PermissionsOverride
();
62
~PermissionsOverride
();
63
64
PermissionsOverride
(
const
PermissionsOverride
&) =
delete
;
65
PermissionsOverride
&
operator=
(
const
PermissionsOverride
&) =
delete
;
66
68
void
set
(
Permission
p,
PermissionState
state
);
69
71
void
clear
(
Permission
p);
72
73
private
:
74
struct
Impl;
75
Impl* impl_;
76
};
77
78
}
// namespace pulp::platform
pulp::platform::PermissionsOverride::~PermissionsOverride
~PermissionsOverride()
pulp::platform::PermissionsOverride::operator=
PermissionsOverride & operator=(const PermissionsOverride &)=delete
pulp::platform::PermissionsOverride::set
void set(Permission p, PermissionState state)
Map this permission to state for the lifetime of the guard.
pulp::platform::PermissionsOverride::clear
void clear(Permission p)
Remove any override for p. Subsequent queries fall through.
pulp::platform::PermissionsOverride::PermissionsOverride
PermissionsOverride()
pulp::platform::PermissionsOverride::PermissionsOverride
PermissionsOverride(const PermissionsOverride &)=delete
pulp::platform
Device capability vocabulary: one tier ladder, one thermal ladder, and the projection from observed i...
Definition
child_process.hpp:15
pulp::platform::Permission
Permission
Definition
permissions.hpp:22
pulp::platform::Permission::BluetoothMidi
@ BluetoothMidi
Definition
permissions.hpp:25
pulp::platform::Permission::Microphone
@ Microphone
Definition
permissions.hpp:23
pulp::platform::Permission::Camera
@ Camera
Definition
permissions.hpp:24
pulp::platform::Permission::Notifications
@ Notifications
Definition
permissions.hpp:27
pulp::platform::Permission::BackgroundAudio
@ BackgroundAudio
Definition
permissions.hpp:28
pulp::platform::Permission::ForegroundService
@ ForegroundService
Definition
permissions.hpp:29
pulp::platform::Permission::LocalNetwork
@ LocalNetwork
Definition
permissions.hpp:26
pulp::platform::RequestCallback
std::function< void(PermissionState)> RequestCallback
Definition
permissions.hpp:39
pulp::platform::request
void request(Permission p, RequestCallback cb)
Async request.
pulp::platform::query
PermissionState query(Permission p)
Current state. Never blocks, never shows UI.
pulp::platform::PermissionState
PermissionState
Definition
permissions.hpp:32
pulp::platform::PermissionState::Denied
@ Denied
Definition
permissions.hpp:35
pulp::platform::PermissionState::NotDetermined
@ NotDetermined
Definition
permissions.hpp:33
pulp::platform::PermissionState::Granted
@ Granted
Definition
permissions.hpp:34
pulp::platform::PermissionState::Restricted
@ Restricted
Definition
permissions.hpp:36
pulp::platform::has_platform_backend
bool has_platform_backend()
True when a real platform backend is wired (iOS / Android).
pulp::state
SequencerStateChannel is the audio-safe transport for a plugin's structured NON-parameter state: the ...
Definition
audio_device_manager.hpp:48
core
platform
include
pulp
platform
permissions.hpp
Generated by
1.15.0