123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /*
- ==============================================================================
- This file is part of the juce_core module of the JUCE library.
- Copyright (c) 2016 - ROLI Ltd.
- Permission to use, copy, modify, and/or distribute this software for any purpose with
- or without fee is hereby granted, provided that the above copyright notice and this
- permission notice appear in all copies.
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
- TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
- NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- ------------------------------------------------------------------------------
- NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
- All other JUCE modules are covered by a dual GPL/commercial license, so if you are
- using any other modules, be sure to check that you also comply with their license.
- For more details, visit www.juce.com
- ==============================================================================
- */
- #ifndef JUCE_RUNTIMEPERMISSIONS_H_INCLUDED
- #define JUCE_RUNTIMEPERMISSIONS_H_INCLUDED
- //==============================================================================
- /**
- Class to handle app runtime permissions for certain functionality on some platforms.
- The use of this class is currently only required if the app should run on
- Android API level 23 and higher.
- On lower API levels, the permissions are specified in the app manifest. On iOS,
- runtime permission requests are handled automatically by the Apple APIs and not
- manually in the app code. On Windows, OS X, and Linux, runtime permissions are not
- used at all. In all these cases, request() will simply call through to the
- callback with no overhead and pass true (making it safe to use on all platforms).
- For example, to enable audio recording on Android in your cross-platform app,
- you could modify your code as follows:
- Old code:
- audioDeviceManager.initialise (2, 2, nullptr, true, String(), nullptr);
- New code:
- RuntimePermissions::request (
- RuntimePermissions::audioRecording,
- [this] (bool wasGranted)
- {
- if (! wasGranted)
- {
- // e.g. display an error or initialise with 0 input channels
- return;
- }
- audioDeviceManager.initialise (2, 2, nullptr, true, String(), nullptr);
- }
- );
- */
- class JUCE_API RuntimePermissions
- {
- public:
- //==============================================================================
- enum PermissionID
- {
- /** Permission to access the microphone (required on Android).
- You need to request this, for example, to initialise an AudioDeviceManager with
- a non-zero number of input channels, and to open the default audio input device.
- */
- recordAudio = 1,
- /** Permission to scan for and pair to Bluetooth MIDI devices (required on Android).
- You need to request this before calling BluetoothMidiDevicePairingDialogue::open(),
- otherwise no devices will be found.
- */
- bluetoothMidi = 2,
- };
- //==============================================================================
- /** Function type of runtime permission request callbacks. */
- #if JUCE_COMPILER_SUPPORTS_LAMBDAS
- typedef std::function<void (bool)> Callback;
- #else
- typedef void (*Callback) (bool);
- #endif
- //==============================================================================
- /** Call this method to request a runtime permission.
- @param permission The PermissionID of the permission you want to request.
- @param callback The callback to be called after the request has been granted
- or denied; the argument passed will be true if the permission
- has been granted and false otherwise.
- If no runtime request is required or possible to obtain the permission, the
- callback will be called immediately. The argument passed in will be true
- if the permission is granted or no permission is required on this platform,
- and false otherwise.
- If a runtime request is required to obtain the permission, the callback
- will be called asynchronously after the OS has granted or denied the requested
- permission (typically by displaying a dialog box to the user and waiting until
- the user has responded).
- */
- static void request (PermissionID permission, Callback callback);
- /** Returns whether a runtime request is required to obtain the permission
- on the current platform.
- */
- static bool isRequired (PermissionID permission);
- /** Returns true if the app has been already granted this permission, either
- via a previous runtime request or otherwise, or no permission is necessary.
- Note that this can be false even if isRequired returns false. In this case,
- the permission can not be obtained at all at runtime.
- */
- static bool isGranted (PermissionID permission);
- };
- #endif // JUCE_RUNTIMEPERMISSIONS_H_INCLUDED
|