<?xml version="1.0"?>
<doc>
    <assembly>
        <name>YourPhone.AppProxyConnection</name>
    </assembly>
    <members>
        <member name="T:YourPhone.AppProxyConnection.Audio.AudioStartOnRemotingService">
            <summary>
            Trigger audio workflow on remoting workflow start instead of inside Orchestrator since
            remoting workflow is the "main" workflow
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager">
            <summary>
            Manages volume of audio during app remoting Audio Streaming
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager.GetVolumeState(System.String)">
            <summary>
            Returns the last saved volume for <paramref name="packageName"/> from the database.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager.SetVolumeState(System.String,YourPhoneAppProxy.Core.Audio.VolumeState)">
            <summary>
            Set volume slider and mute status for all windows under <paramref name="packageName"/>,
            send the new volume to the phone, and save <paramref name="volumeState"/> to the database.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Audio.Volume.IAudioVolumeManager.SendInitialVolumeToPhone(System.String)">
            <summary>
            Send the last saved volume in the database for <paramref name="packageName"/>, to the phone
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService">
            <summary>
            ConnectionService owns the fundamental connection setup, initializing workflows, and setting up channels
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService.RequestConnectionHandleAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Public facing method that takes in handle requests, does handle management, and requests a connection
            Only one handle for each workflow can be requested at once. N+1 requests will throw InvalidOperationException
            </summary>
            <param name="workflowName">Name of workflow to start</param>
            <param name="token">token</param>
            <returns>handle to connection for the workflow</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService.EnsureConnectionAsync(System.Threading.CancellationToken)">
            <summary>
            This method ensures that only one connection attempt occurs at once
            All other invocations will wait for the main connection attempt to succeed (or fail) and will adopt that result as well
            Exception is thrown (and standardized to ConnectionServiceException) if the connection attempt fails or times out
            </summary>
            <param name="token">Token by caller for cancellation (e.g. cancel via Close)</param>
            <returns>Task to wait for a connection attempt to complete</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.ConnectionService.AttemptConnectionAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Actual logic to form a connection
            Underyling components throw if the connection attempt fails or times out
            </summary>
            <param name="correlationId">Correlation ID to pass around and to Android</param>
            <param name="token">CancellationToken to cancel the operation</param>
            <returns>Task to wait for a connection attempt to complete</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Connection.ClientAdapter">
             <summary>
             This object adapts the Nano IClient interface to APC's IClientAdapter interface
             This gets a client which is already connected and maintains it.
             It also creates a message channel so communication is possible with the device. The message channel is for the invocation of workflows
            
             The client is the first recipient of any new channels created. It also monitors the connection (instability/close)
             </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Connection.ClientAdapter.WaitForOpenAsync(System.Threading.CancellationToken)">
             <summary>
             Waits for the client to finish setting up its internal objects
            
             Exceptions thrown:
             - TaskCanceledException - Close is called and current operations will be canceled
             - OperationCanceledException - Cancellation token passed into WaitForOpenAsync has been canceled
             </summary>
             <param name="token">Cancellation token</param>
             <returns>Returns when client has finished setting up internal objects</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Connect.ConnectAdapter">
            <summary>
            This object adapts the Nano IConnect interface to APC's IConnectAdapter interface
            This gets the local handshake request in InitializeAsync and uses the remote handshake response in OpenAsync
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Connect.ConnectAdapter.InitializeAsync(YourPhone.AppProxyConnection.ConnectionSvc.ConnectionTypes.TransportTypeData,System.String,System.Threading.CancellationToken)">
             <summary>
             Initializes the p2p transport
            
             Exceptions thrown:
             - TaskCanceledException - Close is called and current operations will be canceled
             - OperationCanceledException - Cancellation token passed into InitializeAsync has been canceled
             - InvalidOperationException - Invalid call sequence
             </summary>
             <returns>Returns connection string to be sent to peer for handshake</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Connect.ConnectAdapter.OpenAsync(System.Text.Json.Nodes.JsonObject)">
             <summary>
             Using the peer's connection string, attempts to open a connection with the peer
            
             Exceptions thrown:
             - TaskCanceledException - Close is called and current operations will be canceled
             - OperationCanceledException - Cancellation token passed into InitializeAsync has been canceled
             - InvalidOperationException - Invalid call sequence
             - ConnectionServiceException - DirectConnectionTimedOut, Error, Canceled, Failed (unexpected), RemoteTransportTooOld, RemoteTransportTooNew
             </summary>
             <param name="connectionInfo">Peer's connection string</param>
             <returns>Returns client object with open connection</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowMessageChannel">
            <summary>
            Encapsulates the workflow-level message channel. The lifetime of this object is the lifetime of the workflow
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowMessageChannel.InitializeAndOpenAsync">
            <summary>
            Initializes and opens the workflow message channel
            Throws OperationCanceledException if canceled
            Throws InvalidOperationException if Open is called incorrectly
            </summary>
            <returns>Task completed on Open success</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowStarter">
            <summary>
            Encapsulates logic to start a workflow
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowStarter.StartAsync(System.String,System.Action{YourPhone.AppProxyConnection.ConnectionSvc.Workflow.IWorkflowMessageChannel},System.Threading.CancellationToken)">
            <summary>
            Starts a workflow asynchronously
            WorkflowException may be fired for unexpected code issues, cancellations, or connection failures
            </summary>
            <param name="workflowName">Name of workflow to start</param>
            <param name="initializeAction">Opportunity to register listeners with the workflow message channel before open</param>
            <param name="cancellationToken">Cancel token to stop the connection while its still starting</param>
            <returns>WorkflowMessageChannel to represent the workflow connection</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.GetLastVolumeLevelForPackageId(System.String)">
            <summary>
            Get last volume level that was saved in the database for <paramref name="packageId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.SaveLastVolumeLevelForPackageId(System.String,System.Int32)">
            <summary>
            Save <paramref name="volumeLevel"/> in the database as the latest volume level <paramref name="packageId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.GetLastIsMutedStateForPackageId(System.String)">
            <summary>
            Get last mute state that was saved in the database for <paramref name="packageId"/>
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.DatabaseManagement.Util.IHostedAppDatabaseUtil.SaveLastIsMutedStateForPackageId(System.String,System.Boolean)">
            <summary>
            Save <paramref name="isMuted"/> in the database as the latest mute state <paramref name="packageId"/>
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.DragDrop.AppProxyOutputStream">
            <summary>
            Used as a Stream by APC, on write of bytes we send them to AP where they are written into the actual Stream
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService">
            <summary>
            Remoting session describes the time while the user is remoting into the phone
            This interface represents lifecycle events of the remoting workflow
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService.OnStarting(YourPhone.AppProxyConnection.RemotingWorkflow.Services.IStartParameters)">
            <summary>
            Called when the remoting session is starting and objects are initialized for the session
            </summary>
            <param name="startParameters">Contains objects associated with a new start of the session</param>
        </member>
        <member name="M:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService.OnStarted">
            <summary>
            Called when the remoting session has started
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.RemotingWorkflow.Services.IRemotingWorkflowLifecycleService.OnStopped(YourPhoneAppProxy.Core.Utils.Status.DisconnectionReason)">
            <summary>
            Called when the remoting session has stopped
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Services.IApplicationService">
            <summary>
            Service interface for the lifecycle events of AppProxyConnection
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Services.IApplicationService.OnInitialize">
            <summary>
            Called when the remoting session is starting and objects are initialized for the session
            Must be cautious about blocking calls as this is called during initialization of the module
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.OnDeviceChanged">
            <summary>
            Clear caches on device change
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.DeviceStateQueryAsync``1(System.Threading.Tasks.TaskCompletionSource{``0}@,System.Object)">
            <summary>
            Retrieves the cached value or starts a request to fetch the value.
            When starting a new request, create a new cache
            </summary>
            <param name="tcs">Cache location</param>
            <param name="tcsLock">tcsLock</param>
            <returns>Returns cached result if successful, otherwise TaskCanceledException is thrown</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.DeviceStateRequestAsync``1(System.Threading.Tasks.TaskCompletionSource{``0})">
            <summary>
            Shoulder taps then returns cached result
            Possible exceptions:
            - TaskCanceledException if shouldertap fails
            - TimeoutException if shouldertap times out
            </summary>
            <param name="tcs">Cache</param>
            <returns>Returns cached result if successful, otherwise exception is thrown</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.AppProperties.AppPropertyCoordinator.DeviceStateShoulderTapAsync">
            <summary>
            Shoulder taps for all device state
            Task completes on success otherwise throws
            Possible exceptions:
            - TaskCanceledException if shouldertap fails
            - TimeoutException if shouldertap times out
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.DateTime">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.OutgoingItemInfo">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.String">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.Default">
            <summary>
            The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.GeneratedSerializerOptions">
            <summary>
            The source-generated options associated with this context.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.#ctor">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.#ctor(System.Text.Json.JsonSerializerOptions)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.BlobChannel.OutgoingItemInfoContext.GetTypeInfo(System.Type)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.IPermissionMessageChannelAdapter.CheckPermissionAsync(YourPhoneAppProxy.Core.Permission.PermissionType,System.Threading.CancellationToken)">
            <summary>
            Asks Android to check the permission status
            </summary>
            <param name="permissionType">type of permission to check</param>
            <param name="token">cancellation token</param>
            <returns>Returns PermissionStatus based on current permission status</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.IPermissionMessageChannelAdapter.ShowPermissionAsync(YourPhoneAppProxy.Core.Permission.PermissionType,System.Threading.CancellationToken)">
            <summary>
            Asks Android to show permission so user can provide input
            Its possible that the permission does not show on Android because the permission is disabled
            </summary>
            <param name="permissionType">type of permission to check</param>
            <param name="token">cancellation token</param>
            <returns>Returns user input from permission prompt on Android</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.IPermissionMessageChannelAdapter.LaunchSettingsAsync(YourPhoneAppProxy.Core.Permission.PermissionType,System.Threading.CancellationToken)">
            <summary>
            Asks Android to launch app settings so user can change the permission value
            Returns when the user changes the value, closes the app settings, the request times out, or a new request has been made
            </summary>
            <param name="permissionType">type of permission to check</param>
            <param name="token">cancellation token</param>
            <returns>Returns user input from permission prompt on Android</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.MessageChannel.Permission.CombinedAudioPermissionFlowManager.EnsurePermissionFlowCompleteAsync(YourPhone.AppProxyConnection.Session.MessageChannel.Permission.IAudioPermissionManagerInstance,YourPhone.AppProxyConnection.Session.MessageChannel.Permission.IAudioPermissionManagerInstance,System.String,System.Threading.CancellationToken)">
            <summary>
            Triggers the appropriate audio streaming permission flow based on params provided.
            Set <paramref name="virtualDisplayInstance"/> to null if multiple apps is not supported.
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Session.StateMachine.IStateMachineWatcher`4">
            <summary>
            IStateMachineWatcher listens for state changes and ensures that the target
            state machine does not get stuck in an unexpected state.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Session.StateMachine.IStateMachineWatcher`4.Initialize(YourPhone.AppProxyConnection.Session.StateMachine.IStateMachine{`0,`1,`2,`3},`2,`3,System.Int32,`0[])">
            <summary>Initialize the watcher with a target state machine.</summary>
            <param name="stateMachine">Target state machine</param>
            <param name="timeoutCommand">Command to be issued if the state machine spends
            longer than the <paramref name="delayInMs"/> in an invalid state.</param>
            <param name="timeoutDetails">Command details to be sent to the state machine if
            the timeout is reached</param>
            <param name="delayInMs">Maximum time without any transition out of an invalid state. Exceeding
            the delay causes the watcher to timeout and issue the <paramref name="timeoutCommand"/></param>
            <param name="invalidStates">List of states which are not valid long running states.
            Exceeding the <paramref name="delayInMs"/> while in one of theses states will cause a timeout</param>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.DragRequestItemMessage">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.String">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.Default">
            <summary>
            The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance.
            </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.GeneratedSerializerOptions">
            <summary>
            The source-generated options associated with this context.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.#ctor">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.#ctor(System.Text.Json.JsonSerializerOptions)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentContext.GetTypeInfo(System.Type)">
            <inheritdoc/>
        </member>
        <member name="M:YourPhone.AppProxyConnection.TransportContracts.TransportContentParser.TryParseInt(Newtonsoft.Json.Linq.JObject,System.String,System.Int32@)">
            <summary>
            If json[key] is a valid integer, parse the int and set it to value.
            Returns false if json[key] is not a valid int. Otherwise returns true.
            </summary>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Util.AsyncTransactionStore">
            <summary>
            This helps coordinate the request and response of messages where the request is fire and forget
            and a response comes another way. The relationship between the two messages is a transaction id.
            This helps connect the two together so the caller can expose an async method.
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.AsyncTransactionStore.StartTransaction``1(System.Nullable{System.Threading.CancellationToken})">
            <summary>
            This starts a transaction and returns a Task that can be waited on for transaction compmletion.
            </summary>
            <returns>AsyncTransaction that allows the caller to wait and get the transaction id</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.AsyncTransactionStore.CompleteTransaction``1(System.String,``0)">
            <summary>
            This completes the transaction. The task returned when the transaction was started is completed.
            </summary>
            <param name="transactionId">Unique id that links to the start of the transaction</param>
            <param name="result">Value to return in the transaction</param>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.IFeatureUtils.IsAudioSupportedAndEnabledAsync">
            <summary>
            Supported is whether phone supports audio
            Enabled is whether PC has EXP enabled
            </summary>
            <returns>whether audio code can run</returns>
        </member>
        <member name="T:YourPhone.AppProxyConnection.Util.ISingleRun">
             <summary>
             This class is used to ensure that a single method will run just once
             However, it may run again if the method throws or the object is Reset
            
             One example of this class's use if there is a method that creates a connection.
             If there are multiple calls to create that connection from different sources, then only one thread should
             actually create the connection, while the other threads wait for that thread's completion before continuing
            
             This class is thread safe
             </summary>
        </member>
        <member name="P:YourPhone.AppProxyConnection.Util.ISingleRun.CurrentRunTask">
            <summary>
            Returns the current run task so callers can check status without invoking a run
            Returns null if there is no current task
            </summary>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.ISingleRun.RunAsync">
            <summary>
            Runs the single method if not yet run, or waits for a previous call to complete and returns on completion
            </summary>
            <returns>Returns a task to wait for completion</returns>
        </member>
        <member name="M:YourPhone.AppProxyConnection.Util.ISingleRun.Reset">
            <summary>
            Resets the object so that runs are canceled and threads are released
            </summary>
        </member>
        <member name="T:Windows.Win32.PInvoke">
            <content>
            Contains extern methods from "USER32.dll".
            </content>
        </member>
        <member name="M:Windows.Win32.PInvoke.AllowSetForegroundWindow(System.UInt32)">
            <summary>Enables the specified process to set the foreground window using the SetForegroundWindow function. The calling process must already be able to set the foreground window. For more information, see Remarks later in this topic.</summary>
            <param name="dwProcessId">
            <para>Type: <b>DWORD</b> The identifier of the process that will be enabled to set the foreground window. If this parameter is <b>ASFW_ANY</b>, all processes will be enabled to set the foreground window.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-allowsetforegroundwindow#parameters">Read more on docs.microsoft.com</see>.</para>
            </param>
            <returns>
            <para>Type: <b>BOOL</b> If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. The function will fail if the calling process cannot set the foreground window. To get extended error information, call <a href="https://docs.microsoft.com/windows/desktop/api/errhandlingapi/nf-errhandlingapi-getlasterror">GetLastError</a>.</para>
            </returns>
            <remarks>
            <para>The system restricts which processes can set the foreground window. Normally, a process can set the foreground window by calling the [**SetForegroundWindow**](nf-winuser-setforegroundwindow.md) function only if: - All of the following conditions are true: - The calling process belongs to a desktop application, not a UWP app or a Windows Store app designed for Windows 8 or 8.1. - The foreground process has not disabled calls to **SetForegroundWindow** by a previous call to the [**LockSetForegroundWindow**](nf-winuser-locksetforegroundwindow.md) function. - The foreground lock time-out has expired (see [**SPI_GETFOREGROUNDLOCKTIMEOUT** in **SystemParametersInfo**](nf-winuser-systemparametersinfoa.md#SPI_GETFOREGROUNDLOCKTIMEOUT)). - No menus are active. - Additionally, at least one of the following conditions is true: - The calling process is the foreground process. - The calling process was started by the foreground process. - There is currently no foreground window, and thus no foreground process. - The calling process received the last input event. - Either the foreground process or the calling process is being debugged. A process that can set the foreground window can enable another process to set the foreground window by calling **AllowSetForegroundWindow**. The process specified by the *dwProcessId* parameter loses the ability to set the foreground window the next time that either the user generates input, unless the input is directed at that process, or the next time a process calls **AllowSetForegroundWindow**, unless the same process is specified as in the previous call to **AllowSetForegroundWindow**.</para>
            <para><see href="https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-allowsetforegroundwindow#">Read more on docs.microsoft.com</see>.</para>
            </remarks>
        </member>
    </members>
</doc>
