| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library.
 -    Copyright (c) 2016 - ROLI Ltd.
 - 
 -    Permission is granted to use this software under the terms of the ISC license
 -    http://www.isc.org/downloads/software-support-policy/isc-license/
 - 
 -    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 ISC DISCLAIMS ALL WARRANTIES WITH REGARD
 -    TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
 -    FITNESS. IN NO EVENT SHALL ISC 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.
 - 
 -    -----------------------------------------------------------------------------
 - 
 -    To release a closed-source product which uses other parts of JUCE not
 -    licensed under the ISC terms, commercial licenses are available: visit
 -    www.juce.com for more information.
 - 
 -   ==============================================================================
 - */
 - 
 - #pragma once
 - 
 - //==============================================================================
 - /**
 -     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);
 - };
 
 
  |