From 4722a08d855fabe357c0d46ecf2c45f2763391e0 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 10:29:32 +0530 Subject: [PATCH 1/8] feat: QuickShare file sharing support --- app/src/main/AndroidManifest.xml | 25 ++ .../ui/activities/QuickShareSendActivity.kt | 290 ++++++++++++++ .../OutboundQuickShareConnection.kt | 367 ++++++++++++++++++ .../airsync/quickshare/QuickShareDiscovery.kt | 147 +++++++ .../airsync/quickshare/Ukey2Context.kt | 77 ++++ .../service/OutboundQuickShareService.kt | 314 +++++++++++++++ app/src/main/res/values/strings.xml | 1 + 7 files changed, 1221 insertions(+) create mode 100644 app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/QuickShareSendActivity.kt create mode 100644 app/src/main/java/com/sameerasw/airsync/quickshare/OutboundQuickShareConnection.kt create mode 100644 app/src/main/java/com/sameerasw/airsync/quickshare/QuickShareDiscovery.kt create mode 100644 app/src/main/java/com/sameerasw/airsync/service/OutboundQuickShareService.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd1d5d7c..b0c5ca60 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -119,6 +119,31 @@ + + + + + + + + + + + + + + + { + if (intent == null) return emptyList() + return when (intent.action) { + Intent.ACTION_SEND -> { + val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri::class.java) + } else { + @Suppress("DEPRECATION") + intent.getParcelableExtra(Intent.EXTRA_STREAM) + } + listOfNotNull(uri) + } + + Intent.ACTION_SEND_MULTIPLE -> { + val list: ArrayList? = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM, Uri::class.java) + } else { + @Suppress("DEPRECATION") + intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) + } + list?.filterIsInstance() ?: emptyList() + } + + else -> emptyList() + } + } +} + +@OptIn(ExperimentalAnimationApi::class, ExperimentalMaterial3ExpressiveApi::class) +@Composable +private fun QuickShareSendScreen( + hasWindowFocus: Boolean, + uris: List, + pairedDeviceName: String?, + onFinished: () -> Unit +) { + val context = LocalContext.current + var uiState by remember { mutableStateOf(SendUiState.Loading) } + var hasStarted by remember { mutableStateOf(false) } + + LaunchedEffect(hasWindowFocus) { + if (hasWindowFocus && !hasStarted) { + hasStarted = true + delay(100) + + if (uris.isEmpty()) { + uiState = SendUiState.Error("Nothing to send") + delay(1500) + onFinished() + } else if (pairedDeviceName.isNullOrBlank()) { + uiState = SendUiState.Error("No Mac paired") + delay(1500) + onFinished() + } else { + val localUris = withContext(Dispatchers.IO) { copyUrisToCache(context, uris) } + if (localUris.isEmpty()) { + uiState = SendUiState.Error("Couldn't read the file") + delay(1500) + onFinished() + } else { + OutboundQuickShareService.start(context, localUris) + uiState = SendUiState.Success + delay(1200) + onFinished() + } + } + } + } + + Box( + modifier = Modifier + .fillMaxSize() + .clickable(onClick = onFinished), + contentAlignment = Alignment.BottomCenter + ) { + Surface( + modifier = Modifier + .navigationBarsPadding() + .padding(bottom = 64.dp) + .padding(horizontal = 24.dp), + shape = RoundedCornerShape(percent = 50), + color = MaterialTheme.colorScheme.surfaceContainerHigh, + tonalElevation = 8.dp, + shadowElevation = 12.dp + ) { + Row( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = androidx.compose.foundation.layout.Arrangement.spacedBy(12.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.ic_laptop_24), + contentDescription = null, + modifier = Modifier.size(24.dp), + tint = MaterialTheme.colorScheme.primary + ) + + val label = when (uiState) { + is SendUiState.Loading -> "Sending to ${pairedDeviceName ?: stringResource(R.string.your_mac)}..." + is SendUiState.Success -> "Sending to ${pairedDeviceName ?: stringResource(R.string.your_mac)}" + is SendUiState.Error -> (uiState as SendUiState.Error).message + } + Text( + text = label, + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + + AnimatedContent( + targetState = uiState, + transitionSpec = { fadeIn().togetherWith(fadeOut()) }, + label = "StatusAnimation" + ) { state -> + Box(modifier = Modifier.size(28.dp), contentAlignment = Alignment.Center) { + when (state) { + is SendUiState.Loading -> LoadingIndicator( + modifier = Modifier.size(24.dp), + color = MaterialTheme.colorScheme.primary + ) + + is SendUiState.Success -> Icon( + imageVector = Icons.Rounded.CheckCircle, + contentDescription = "Success", + modifier = Modifier.size(28.dp), + tint = MaterialTheme.colorScheme.primary + ) + + is SendUiState.Error -> Icon( + imageVector = Icons.Rounded.Error, + contentDescription = "Error", + tint = MaterialTheme.colorScheme.error, + modifier = Modifier.size(28.dp) + ) + } + } + } + } + } + } +} + +sealed class SendUiState { + data object Loading : SendUiState() + data object Success : SendUiState() + data class Error(val message: String) : SendUiState() +} + +private fun copyUrisToCache(context: Context, uris: List): List { + val outDir = File(context.cacheDir, "quickshare_outgoing").apply { mkdirs() } + return uris.mapNotNull { uri -> + try { + var name = "file_${System.currentTimeMillis()}" + context.contentResolver.query(uri, null, null, null, null)?.use { cursor -> + val nameIdx = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) + if (cursor.moveToFirst() && nameIdx >= 0) { + cursor.getString(nameIdx)?.let { name = it } + } + } + + var dest = File(outDir, name) + var counter = 1 + while (dest.exists()) { + val base = name.substringBeforeLast(".") + val ext = name.substringAfterLast(".", "") + dest = File(outDir, if (ext.isEmpty()) "$base ($counter)" else "$base ($counter).$ext") + counter++ + } + + context.contentResolver.openInputStream(uri)?.use { input -> + dest.outputStream().use { output -> input.copyTo(output) } + } ?: return@mapNotNull null + + Uri.fromFile(dest) + } catch (e: Exception) { + Log.e("QuickShareSendActivity", "Failed to cache $uri", e) + null + } + } +} + +@Preview(name = "Loading", showBackground = true) +@Composable +private fun QuickShareSendScreenPreviewLoading() { + AirSyncTheme { + QuickShareSendScreen( + hasWindowFocus = true, + uris = emptyList(), + pairedDeviceName = "Sameera's Mac", + onFinished = {} + ) + } +} diff --git a/app/src/main/java/com/sameerasw/airsync/quickshare/OutboundQuickShareConnection.kt b/app/src/main/java/com/sameerasw/airsync/quickshare/OutboundQuickShareConnection.kt new file mode 100644 index 00000000..821c4c1b --- /dev/null +++ b/app/src/main/java/com/sameerasw/airsync/quickshare/OutboundQuickShareConnection.kt @@ -0,0 +1,367 @@ +package com.sameerasw.airsync.quickshare + +import android.content.Context +import android.net.Uri +import android.util.Log +import com.google.android.gms.nearby.sharing.ConnectionResponseFrame as SharingResponse +import com.google.android.gms.nearby.sharing.Frame +import com.google.android.gms.nearby.sharing.FileMetadata +import com.google.android.gms.nearby.sharing.IntroductionFrame +import com.google.android.gms.nearby.sharing.PairedKeyEncryptionFrame +import com.google.android.gms.nearby.sharing.PairedKeyResultFrame +import com.google.android.gms.nearby.sharing.V1Frame as SharingV1 +import com.google.location.nearby.connections.proto.ConnectionRequestFrame +import com.google.location.nearby.connections.proto.OfflineFrame +import com.google.location.nearby.connections.proto.PayloadTransferFrame +import com.google.location.nearby.connections.proto.PayloadTransferFrame.PayloadHeader +import com.google.location.nearby.connections.proto.V1Frame +import com.google.security.cryptauth.lib.securegcm.Ukey2Message +import com.google.security.cryptauth.lib.securegcm.Ukey2ServerInit +import okio.ByteString.Companion.toByteString +import java.io.InputStream +import java.net.Socket +import java.util.concurrent.Executors + +class OutboundQuickShareConnection( + private val context: Context, + private val socket: Socket, + private val ourDeviceName: String, + private val files: List +) : QuickShareConnection(socket.getInputStream(), socket.getOutputStream()) { + + data class PendingFile( + val uri: Uri, + val name: String, + val mimeType: String, + val size: Long, + val payloadId: Long = kotlin.random.Random.nextLong() + ) + + var onConnectionReady: ((pin: String) -> Unit)? = null + var onRejected: (() -> Unit)? = null + var onFileProgress: ((fileName: String, percent: Int, bytesTransferred: Long, totalSize: Long, transferId: String) -> Unit)? = + null + var onFileComplete: ((fileName: String, transferId: String, success: Boolean) -> Unit)? = null + var onFinished: (() -> Unit)? = null + var onError: ((Throwable) -> Unit)? = null + + companion object { + private const val TAG = "OutboundQSConnection" + private const val CHUNK_SIZE = 512 * 1024 + } + + private val executor = Executors.newSingleThreadExecutor() + private var isRunning = true + + fun start() { + executor.execute { + try { + runHandshake() + } catch (e: Exception) { + Log.e(TAG, "Outbound handshake/transfer failed", e) + onError?.invoke(e) + closeConnection() + } + } + } + + private fun runHandshake() { + val request = OfflineFrame( + version = OfflineFrame.Version.V1, + v1 = V1Frame( + type = V1Frame.FrameType.CONNECTION_REQUEST, + connection_request = ConnectionRequestFrame( + endpoint_id = randomEndpointId(), + endpoint_name = ourDeviceName, + endpoint_info = serializeEndpointInfo(ourDeviceName).toByteString() + ) + ) + ) + writeFrame(request.encode()) + Log.d(TAG, "Sent ConnectionRequest") + + // 2. UKEY2 handshake (we are client) + val ukey2 = Ukey2Context() + val clientInit = ukey2.buildClientInit() + val clientInitEnvelope = Ukey2Message( + message_type = Ukey2Message.Type.CLIENT_INIT, + message_data = clientInit.encode().toByteString() + ) + val clientInitEnvelopeBytes = clientInitEnvelope.encode() + writeFrame(clientInitEnvelopeBytes) + Log.d(TAG, "Sent ClientInit") + + val serverInitEnvelopeBytes = readFrame() + val serverInitEnvelope = Ukey2Message.ADAPTER.decode(serverInitEnvelopeBytes) + if (serverInitEnvelope.message_type != Ukey2Message.Type.SERVER_INIT) { + throw IllegalStateException("Expected SERVER_INIT, got ${serverInitEnvelope.message_type}") + } + val serverInit = Ukey2ServerInit.ADAPTER.decode(serverInitEnvelope.message_data!!) + ukey2.handleServerInit(serverInit, clientInitEnvelopeBytes, serverInitEnvelopeBytes) + Log.d(TAG, "Received ServerInit, derived keys. PIN: ${ukey2.authString}") + + writeFrame(ukey2.clientFinishEnvelopeBytes!!) + Log.d(TAG, "Sent ClientFinish") + + setUkey2Context(ukey2) + onConnectionReady?.invoke(ukey2.authString ?: "----") + + val ourResponse = OfflineFrame( + version = OfflineFrame.Version.V1, + v1 = V1Frame( + type = V1Frame.FrameType.CONNECTION_RESPONSE, + connection_response = com.google.location.nearby.connections.proto.ConnectionResponseFrame( + response = com.google.location.nearby.connections.proto.ConnectionResponseFrame.ResponseStatus.ACCEPT, + status = 0 + ) + ) + ) + writeFrame(ourResponse.encode()) + Log.d(TAG, "Sent our ConnectionResponse (ACCEPT)") + + val remoteResponseData = readFrame() + val remoteResponse = OfflineFrame.ADAPTER.decode(remoteResponseData) + if (remoteResponse.v1?.type != V1Frame.FrameType.CONNECTION_RESPONSE) { + throw IllegalStateException("Expected CONNECTION_RESPONSE, got ${remoteResponse.v1?.type}") + } + if (remoteResponse.v1.connection_response?.response != com.google.location.nearby.connections.proto.ConnectionResponseFrame.ResponseStatus.ACCEPT) { + throw IllegalStateException("Receiver rejected the connection") + } + Log.d(TAG, "Receiver accepted the connection") + + val ourPairedKeyEnc = Frame( + version = Frame.Version.V1, + v1 = SharingV1( + type = SharingV1.FrameType.PAIRED_KEY_ENCRYPTION, + paired_key_encryption = PairedKeyEncryptionFrame( + signed_data = randomBytes(72), + secret_id_hash = randomBytes(6) + ) + ) + ) + writeSharingFrame(ourPairedKeyEnc) + Log.d(TAG, "Sent PairedKeyEncryption") + + val remotePairedKeyEnc = readSharingFrame() + Log.d(TAG, "Received PairedKeyEncryption from receiver: ${remotePairedKeyEnc.v1?.type}") + + val ourPairedKeyResult = Frame( + version = Frame.Version.V1, + v1 = SharingV1( + type = SharingV1.FrameType.PAIRED_KEY_RESULT, + paired_key_result = PairedKeyResultFrame(status = PairedKeyResultFrame.Status.UNABLE) + ) + ) + writeSharingFrame(ourPairedKeyResult) + Log.d(TAG, "Sent PairedKeyResult") + + val remotePairedKeyResult = readSharingFrame() + Log.d(TAG, "Received PairedKeyResult from receiver: ${remotePairedKeyResult.v1?.type}") + + val introduction = IntroductionFrame( + file_metadata = files.map { f -> + FileMetadata( + name = f.name, + payload_id = f.payloadId, + size = f.size, + mime_type = f.mimeType + ) + } + ) + writeSharingFrame( + Frame( + version = Frame.Version.V1, + v1 = SharingV1(type = SharingV1.FrameType.INTRODUCTION, introduction = introduction) + ) + ) + Log.d(TAG, "Sent Introduction (${files.size} file(s))") + + val response = waitForResponse() + if (response != SharingResponse.Status.ACCEPT) { + Log.d(TAG, "Receiver declined the transfer") + onRejected?.invoke() + closeConnection() + return + } + Log.d(TAG, "Receiver accepted the transfer, sending files") + + for (file in files) { + sendFile(file) + } + + try { + socket.shutdownOutput() + socket.soTimeout = 5000 + readFrame() + } catch (e: Exception) { + Log.d(TAG, "Post-send wait ended (expected once the receiver finishes/closes): $e") + } + + onFinished?.invoke() + closeConnection() + } + + private fun waitForResponse(): SharingResponse.Status { + while (isRunning) { + val frame = readSharingFrame() + val v1 = frame.v1 ?: continue + when (v1.type) { + SharingV1.FrameType.RESPONSE -> { + return v1.connection_response?.status ?: SharingResponse.Status.UNKNOWN + } + + SharingV1.FrameType.CANCEL -> { + return SharingResponse.Status.REJECT + } + + else -> Log.d(TAG, "Ignoring sharing frame while waiting for response: ${v1.type}") + } + } + return SharingResponse.Status.REJECT + } + + private fun sendFile(file: PendingFile) { + val stream: InputStream = context.contentResolver.openInputStream(file.uri) + ?: throw IllegalStateException("Could not open ${file.name}") + + stream.use { input -> + val buffer = ByteArray(CHUNK_SIZE) + var offset = 0L + var lastUpdate = 0L + + while (true) { + val read = input.read(buffer) + if (read <= 0) break + + val chunkBody = if (read == buffer.size) buffer else buffer.copyOf(read) + writePayloadChunk(file, offset = offset, flags = 0, body = chunkBody) + offset += read + + val now = System.currentTimeMillis() + if (now - lastUpdate > 250) { + lastUpdate = now + val percent = if (file.size > 0) ((offset * 100) / file.size).toInt() else 100 + onFileProgress?.invoke(file.name, percent, offset, file.size, file.payloadId.toString()) + } + } + + writePayloadChunk(file, offset = offset, flags = 1, body = null) + onFileProgress?.invoke(file.name, 100, offset, file.size, file.payloadId.toString()) + } + + Log.d(TAG, "Finished sending ${file.name}") + onFileComplete?.invoke(file.name, file.payloadId.toString(), true) + } + + private fun writePayloadChunk(file: PendingFile, offset: Long, flags: Int, body: ByteArray?) { + writeEncryptedMessage( + OfflineFrame( + version = OfflineFrame.Version.V1, + v1 = V1Frame( + type = V1Frame.FrameType.PAYLOAD_TRANSFER, + payload_transfer = PayloadTransferFrame( + packet_type = PayloadTransferFrame.PacketType.DATA, + payload_header = PayloadHeader( + id = file.payloadId, + type = PayloadHeader.PayloadType.FILE, + total_size = file.size, + file_name = file.name + ), + payload_chunk = PayloadTransferFrame.PayloadChunk( + offset = offset, + flags = flags, + body = body?.toByteString() + ) + ) + ) + ).encode() + ) + } + + private fun readSharingFrame(): Frame { + val d2dPayload = readEncryptedMessage() + val offlineFrame = OfflineFrame.ADAPTER.decode(d2dPayload) + val payloadBody = offlineFrame.v1!!.payload_transfer!!.payload_chunk!!.body!!.toByteArray() + readEncryptedMessage() // discard the last-chunk marker frame + return Frame.ADAPTER.decode(payloadBody) + } + + private fun writeSharingFrame(frame: Frame) { + val frameBytes = frame.encode() + val payloadId = kotlin.random.Random.nextLong() + val dataFrame = OfflineFrame( + version = OfflineFrame.Version.V1, + v1 = V1Frame( + type = V1Frame.FrameType.PAYLOAD_TRANSFER, + payload_transfer = PayloadTransferFrame( + packet_type = PayloadTransferFrame.PacketType.DATA, + payload_header = PayloadHeader( + id = payloadId, + type = PayloadHeader.PayloadType.BYTES, + total_size = frameBytes.size.toLong(), + is_sensitive = false + ), + payload_chunk = PayloadTransferFrame.PayloadChunk( + offset = 0, + flags = 0, + body = frameBytes.toByteString() + ) + ) + ) + ) + writeEncryptedMessage(dataFrame.encode()) + + val lastChunk = OfflineFrame( + version = OfflineFrame.Version.V1, + v1 = V1Frame( + type = V1Frame.FrameType.PAYLOAD_TRANSFER, + payload_transfer = PayloadTransferFrame( + packet_type = PayloadTransferFrame.PacketType.DATA, + payload_header = PayloadHeader( + id = payloadId, + type = PayloadHeader.PayloadType.BYTES, + total_size = frameBytes.size.toLong(), + is_sensitive = false + ), + payload_chunk = PayloadTransferFrame.PayloadChunk( + offset = frameBytes.size.toLong(), + flags = 1 + ) + ) + ) + ) + writeEncryptedMessage(lastChunk.encode()) + } + + private fun serializeEndpointInfo(deviceName: String): ByteArray { + val nameBytes = deviceName.toByteArray(Charsets.UTF_8) + val nameLen = nameBytes.size.coerceAtMost(255) + + val bytes = ByteArray(1 + 16 + 1 + nameLen) + bytes[0] = (1 shl 1).toByte() // deviceType=phone(1) << 1 | visibility(0) | version(0) + val randomBytes = ByteArray(16).also { java.security.SecureRandom().nextBytes(it) } + System.arraycopy(randomBytes, 0, bytes, 1, 16) + bytes[17] = nameLen.toByte() + System.arraycopy(nameBytes, 0, bytes, 18, nameLen) + return bytes + } + + private fun randomEndpointId(): String { + val alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + return (1..4).map { alphabet.random() }.joinToString("") + } + + private fun randomBytes(n: Int) = + ByteArray(n).also { java.security.SecureRandom().nextBytes(it) }.toByteString() + + fun closeConnection() { + isRunning = false + close() + try { + socket.close() + } catch (e: Exception) { + // Ignore + } + executor.shutdownNow() + } +} diff --git a/app/src/main/java/com/sameerasw/airsync/quickshare/QuickShareDiscovery.kt b/app/src/main/java/com/sameerasw/airsync/quickshare/QuickShareDiscovery.kt new file mode 100644 index 00000000..af878521 --- /dev/null +++ b/app/src/main/java/com/sameerasw/airsync/quickshare/QuickShareDiscovery.kt @@ -0,0 +1,147 @@ +package com.sameerasw.airsync.quickshare + +import android.content.Context +import android.net.nsd.NsdManager +import android.net.nsd.NsdServiceInfo +import android.os.Build +import android.util.Base64 +import android.util.Log +import java.net.InetAddress +import java.nio.charset.StandardCharsets + +class QuickShareDiscovery(private val context: Context) { + companion object { + private const val TAG = "QuickShareDiscovery" + private const val SERVICE_TYPE = "_FC9F5ED42C8A._tcp." + + fun decodeDeviceName(endpointInfoBase64: String): String? { + return try { + val bytes = Base64.decode( + endpointInfoBase64, + Base64.URL_SAFE or Base64.NO_WRAP or Base64.NO_PADDING + ) + if (bytes.size < 18) return null + val nameLen = bytes[17].toInt() and 0xFF + if (bytes.size < 18 + nameLen) return null + String(bytes, 18, nameLen, StandardCharsets.UTF_8) + } catch (e: Exception) { + Log.e(TAG, "Failed to decode endpoint info", e) + null + } + } + } + + data class ResolvedHost(val host: InetAddress, val port: Int, val deviceName: String) + + private val nsdManager = context.getSystemService(Context.NSD_SERVICE) as NsdManager + private var discoveryListener: NsdManager.DiscoveryListener? = null + + fun start(targetDeviceName: String, onFound: (ResolvedHost) -> Unit) { + stop() + + val normalizedTarget = targetDeviceName.replace("’", "'").lowercase() + + discoveryListener = object : NsdManager.DiscoveryListener { + override fun onDiscoveryStarted(serviceType: String) { + Log.d(TAG, "Discovery started") + } + + override fun onServiceFound(service: NsdServiceInfo) { + Log.d(TAG, "Service found: ${service.serviceName}") + resolve(service, normalizedTarget, onFound) + } + + override fun onServiceLost(service: NsdServiceInfo) { + Log.d(TAG, "Service lost: ${service.serviceName}") + } + + override fun onDiscoveryStopped(serviceType: String) { + Log.d(TAG, "Discovery stopped") + } + + override fun onStartDiscoveryFailed(serviceType: String, errorCode: Int) { + Log.e(TAG, "Start discovery failed: $errorCode") + } + + override fun onStopDiscoveryFailed(serviceType: String, errorCode: Int) { + Log.e(TAG, "Stop discovery failed: $errorCode") + } + } + + try { + nsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, discoveryListener) + } catch (e: Exception) { + Log.e(TAG, "Failed to start discovery", e) + } + } + + private fun resolve( + service: NsdServiceInfo, + normalizedTarget: String, + onFound: (ResolvedHost) -> Unit + ) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + nsdManager.registerServiceInfoCallback( + service, + context.mainExecutor, + object : NsdManager.ServiceInfoCallback { + override fun onServiceInfoCallbackRegistrationFailed(errorCode: Int) { + Log.e(TAG, "Resolve registration failed: $errorCode") + } + + override fun onServiceUpdated(info: NsdServiceInfo) { + handleResolved(info, normalizedTarget, onFound) + try { + nsdManager.unregisterServiceInfoCallback(this) + } catch (e: Exception) { + // Ignore + } + } + + override fun onServiceLost() {} + override fun onServiceInfoCallbackUnregistered() {} + } + ) + } else { + @Suppress("DEPRECATION") + nsdManager.resolveService(service, object : NsdManager.ResolveListener { + override fun onResolveFailed(info: NsdServiceInfo, errorCode: Int) { + Log.e(TAG, "Resolve failed: $errorCode") + } + + override fun onServiceResolved(info: NsdServiceInfo) { + handleResolved(info, normalizedTarget, onFound) + } + }) + } + } + + private fun handleResolved( + info: NsdServiceInfo, + normalizedTarget: String, + onFound: (ResolvedHost) -> Unit + ) { + val endpointInfoBytes = info.attributes["n"] ?: return + val endpointInfoBase64 = String(endpointInfoBytes, StandardCharsets.UTF_8) + val deviceName = decodeDeviceName(endpointInfoBase64) ?: return + val normalizedFound = deviceName.replace("’", "'").lowercase() + + Log.d(TAG, "Resolved '$deviceName' at ${info.host}:${info.port}") + + if (normalizedFound == normalizedTarget) { + val host = info.host ?: return + onFound(ResolvedHost(host, info.port, deviceName)) + } + } + + fun stop() { + discoveryListener?.let { + try { + nsdManager.stopServiceDiscovery(it) + } catch (e: Exception) { + // Ignore + } + } + discoveryListener = null + } +} diff --git a/app/src/main/java/com/sameerasw/airsync/quickshare/Ukey2Context.kt b/app/src/main/java/com/sameerasw/airsync/quickshare/Ukey2Context.kt index a0e884ba..3ea5f5aa 100644 --- a/app/src/main/java/com/sameerasw/airsync/quickshare/Ukey2Context.kt +++ b/app/src/main/java/com/sameerasw/airsync/quickshare/Ukey2Context.kt @@ -178,6 +178,83 @@ class Ukey2Context { sendHmacKey = hkdf(d2dServerKey, smsgSalt, "SIG:1".toByteArray()) } + fun buildClientInit(): Ukey2ClientInit { + val ourPubKey = GenericPublicKey( + type = PublicKeyType.EC_P256, + ec_p256_public_key = EcP256PublicKey( + x = encodePoint(keyPair.public as ECPublicKey).first.toByteString(), + y = encodePoint(keyPair.public as ECPublicKey).second.toByteString() + ) + ) + val clientFinished = Ukey2ClientFinished(public_key = ourPubKey.encode().toByteString()) + val clientFinishEnvelope = com.google.security.cryptauth.lib.securegcm.Ukey2Message( + message_type = com.google.security.cryptauth.lib.securegcm.Ukey2Message.Type.CLIENT_FINISH, + message_data = clientFinished.encode().toByteString() + ) + clientFinishEnvelopeBytes = clientFinishEnvelope.encode() + + val digest = SHA512Digest() + digest.update(clientFinishEnvelopeBytes!!, 0, clientFinishEnvelopeBytes!!.size) + val commitment = ByteArray(digest.digestSize) + digest.doFinal(commitment, 0) + + return Ukey2ClientInit( + version = 1, + random = serverRandom.toByteString(), + cipher_commitments = listOf( + Ukey2ClientInit.CipherCommitment( + handshake_cipher = Ukey2HandshakeCipher.P256_SHA512, + commitment = commitment.toByteString() + ) + ), + next_protocol = "AES_256_CBC-HMAC_SHA256" + ) + } + + var clientFinishEnvelopeBytes: ByteArray? = null + private set + + /** + * Processes the server's ServerInit: derives the shared secret via ECDH against our keypair, + * then the same HKDF chain as the server role, but with encrypt/decrypt keys swapped since + * we're the client this time. + * + * @param clientInitEnvelopeBytes Raw bytes of the ClientInit envelope we sent + * @param serverInitEnvelopeBytes Raw bytes of the ServerInit envelope we received + */ + fun handleServerInit( + serverInit: Ukey2ServerInit, + clientInitEnvelopeBytes: ByteArray, + serverInitEnvelopeBytes: ByteArray + ) { + val serverPubKeyProto = GenericPublicKey.ADAPTER.decode(serverInit.public_key!!) + val serverPubKey = decodePublicKey(serverPubKeyProto.ec_p256_public_key!!) + + val ka = KeyAgreement.getInstance("ECDH") + ka.init(keyPair.private) + ka.doPhase(serverPubKey, true) + val dhs = ka.generateSecret() + + val sha256 = java.security.MessageDigest.getInstance("SHA-256") + val derivedSecretKey = sha256.digest(dhs) + + val ukeyInfo = clientInitEnvelopeBytes + serverInitEnvelopeBytes + val authKey = hkdf(derivedSecretKey, "UKEY2 v1 auth".toByteArray(), ukeyInfo) + val nextSecret = hkdf(derivedSecretKey, "UKEY2 v1 next".toByteArray(), ukeyInfo) + + authString = generatePinCode(authKey) + + val d2dClientKey = hkdf(nextSecret, D2D_SALT, "client".toByteArray()) + val d2dServerKey = hkdf(nextSecret, D2D_SALT, "server".toByteArray()) + + val smsgSalt = sha256.digest("SecureMessage".toByteArray()) + + encryptKey = hkdf(d2dClientKey, smsgSalt, "ENC:2".toByteArray()) + sendHmacKey = hkdf(d2dClientKey, smsgSalt, "SIG:1".toByteArray()) + decryptKey = hkdf(d2dServerKey, smsgSalt, "ENC:2".toByteArray()) + receiveHmacKey = hkdf(d2dServerKey, smsgSalt, "SIG:1".toByteArray()) + } + private fun hkdf( key: ByteArray, salt: ByteArray, diff --git a/app/src/main/java/com/sameerasw/airsync/service/OutboundQuickShareService.kt b/app/src/main/java/com/sameerasw/airsync/service/OutboundQuickShareService.kt new file mode 100644 index 00000000..c8202805 --- /dev/null +++ b/app/src/main/java/com/sameerasw/airsync/service/OutboundQuickShareService.kt @@ -0,0 +1,314 @@ +package com.sameerasw.airsync.service + +import android.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.Service +import android.content.Context +import android.content.Intent +import android.content.pm.ServiceInfo +import android.net.Uri +import android.os.Build +import android.os.IBinder +import android.provider.OpenableColumns +import android.util.Log +import androidx.core.app.NotificationCompat +import com.sameerasw.airsync.R +import com.sameerasw.airsync.data.local.DataStoreManager +import com.sameerasw.airsync.quickshare.OutboundQuickShareConnection +import com.sameerasw.airsync.quickshare.QuickShareDiscovery +import com.sameerasw.airsync.utils.NotificationUtil +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import java.io.File +import java.net.Socket + +/** + * Foreground service that sends one or more files to the paired Mac via Quick Share, initiated + * from within the AirSync app (share-sheet target) rather than Android's system Quick Share. + * Mirrors QuickShareService's structure, but drives OutboundQuickShareConnection instead. + */ +class OutboundQuickShareService : Service() { + + companion object { + private const val TAG = "OutboundQuickShare" + private const val NOTIFICATION_ID = 2101 + private const val CHANNEL_ID = "quick_share_send_channel" + private const val DISCOVERY_TIMEOUT_MS = 15_000L + + const val EXTRA_URIS = "uris" + + fun start(context: Context, uris: List) { + val intent = Intent(context, OutboundQuickShareService::class.java).apply { + putParcelableArrayListExtra(EXTRA_URIS, ArrayList(uris)) + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + context.startForegroundService(intent) + } else { + context.startService(intent) + } + } + } + + private lateinit var dataStoreManager: DataStoreManager + private val serviceScope = CoroutineScope(Dispatchers.IO) + private var discovery: QuickShareDiscovery? = null + private var connection: OutboundQuickShareConnection? = null + @Volatile + private var connecting = false + + override fun onCreate() { + super.onCreate() + createNotificationChannel() + dataStoreManager = DataStoreManager.getInstance(this) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + startForeground( + NOTIFICATION_ID, + createNotification("Preparing to send..."), + ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE + ) + } else { + startForeground(NOTIFICATION_ID, createNotification("Preparing to send...")) + } + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + val uris: List = intent?.getParcelableArrayListExtra(EXTRA_URIS) ?: emptyList() + if (uris.isEmpty()) { + Log.w(TAG, "No files to send, stopping") + stopSelf() + return START_NOT_STICKY + } + + serviceScope.launch { + val pairedDevice = dataStoreManager.getLastConnectedDevice().first() + if (pairedDevice == null) { + Log.w(TAG, "No paired Mac, cannot send") + updateNotification("No paired Mac found") + stopSelf() + return@launch + } + + // Must match SyncManager's fallback chain exactly — this is what the Mac stored as + // AppState.shared.device?.name during pairing, and its Quick Share auto-accept does + // an exact string match against it (no normalization), so any divergence here means + // it silently falls through to a manual consent notification instead of auto-accepting. + val ourName = dataStoreManager.getDeviceName().first().ifBlank { null } + ?: com.sameerasw.airsync.utils.DeviceInfoUtil.getDeviceName(this@OutboundQuickShareService) + val files = uris.mapNotNull { toPendingFile(it) } + if (files.isEmpty()) { + Log.w(TAG, "Could not read any of the shared files") + updateNotification("Couldn't read the selected file(s)") + stopSelf() + return@launch + } + + updateNotification("Looking for ${pairedDevice.name}...") + findAndSend(pairedDevice.name, ourName, files) + } + + return START_NOT_STICKY + } + + private fun findAndSend( + macName: String, + ourName: String, + files: List + ) { + val d = QuickShareDiscovery(this) + discovery = d + + val timeoutJob = serviceScope.launch { + kotlinx.coroutines.delay(DISCOVERY_TIMEOUT_MS) + if (connection == null) { + Log.w(TAG, "Discovery timed out") + updateNotification("Couldn't find $macName") + d.stop() + kotlinx.coroutines.delay(2000) + stopSelf() + } + } + + d.start(macName) { resolved -> + if (connecting) return@start // already connecting/connected + connecting = true + timeoutJob.cancel() + d.stop() + + // NSD resolve callbacks land on the main thread — do the blocking socket connect + // off of it. + serviceScope.launch { + try { + val socket = Socket(resolved.host, resolved.port) + val conn = OutboundQuickShareConnection( + context = this@OutboundQuickShareService, + socket = socket, + ourDeviceName = ourName, + files = files + ) + connection = conn + wireCallbacks(conn, macName) + conn.start() + } catch (e: Exception) { + Log.e(TAG, "Failed to connect to $macName", e) + updateNotification("Couldn't connect to $macName") + kotlinx.coroutines.delay(2000) + stopSelf() + } + } + } + } + + private fun wireCallbacks(conn: OutboundQuickShareConnection, macName: String) { + conn.onConnectionReady = { pin -> + Log.d(TAG, "Connection ready, PIN: $pin") + updateNotification("Connecting to $macName (PIN $pin)...") + } + + conn.onRejected = { + Log.d(TAG, "Transfer rejected by $macName") + updateNotification("$macName declined the transfer") + serviceScope.launch { + kotlinx.coroutines.delay(2000) + stopSelf() + } + } + + var lastUpdate = 0L + conn.onFileProgress = { fileName, percent, bytesTransferred, totalSize, transferId -> + val now = System.currentTimeMillis() + if (now - lastUpdate > 800) { + lastUpdate = now + NotificationUtil.showFileProgress( + this, + transferId.hashCode(), + fileName, + percent, + transferId, + isSending = true + ) + } + } + + conn.onFileComplete = { fileName, transferId, success -> + NotificationUtil.showFileComplete( + this, + transferId.hashCode(), + fileName, + success, + isSending = true + ) + } + + conn.onError = { e -> + Log.e(TAG, "Transfer error", e) + updateNotification("Failed to send to $macName") + } + + conn.onFinished = { + Log.d(TAG, "Transfer to $macName finished") + updateNotification("Sent to $macName") + serviceScope.launch { + kotlinx.coroutines.delay(1500) + stopSelf() + } + } + } + + private fun toPendingFile(uri: Uri): OutboundQuickShareConnection.PendingFile? { + return try { + // Files we cached ourselves (see QuickShareSendActivity.copyUrisToCache) — a plain + // java.io.File is always the accurate source of truth for these, and ContentResolver + // has no provider registered for the "file" scheme to query metadata from anyway. + if (uri.scheme == "file") { + val f = java.io.File(uri.path ?: return null) + if (!f.exists() || f.length() <= 0) { + Log.w(TAG, "Cached file missing or empty: $uri") + return null + } + return OutboundQuickShareConnection.PendingFile( + uri = uri, + name = f.name, + mimeType = contentResolver.getType(uri) ?: "application/octet-stream", + size = f.length() + ) + } + + var name = "file" + var size = 0L + contentResolver.query(uri, null, null, null, null)?.use { cursor -> + val nameIdx = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) + val sizeIdx = cursor.getColumnIndex(OpenableColumns.SIZE) + if (cursor.moveToFirst()) { + if (nameIdx >= 0) name = cursor.getString(nameIdx) ?: name + if (sizeIdx >= 0) size = cursor.getLong(sizeIdx) + } + } + + // OpenableColumns.SIZE is unreliable for some providers (returns 0/null) — the Mac + // hard-rejects any chunk that would exceed the size we declared in FileMetadata, so + // a wrong-but-truthy 0 here breaks the very first real chunk. Fall back to the AFD's + // stat size, which reflects the real underlying file. + if (size <= 0) { + size = try { + contentResolver.openAssetFileDescriptor(uri, "r")?.use { it.length } ?: -1L + } catch (e: Exception) { + -1L + } + } + if (size <= 0) { + Log.w(TAG, "Could not determine size for $uri, skipping") + return null + } + + val mimeType = contentResolver.getType(uri) ?: "application/octet-stream" + OutboundQuickShareConnection.PendingFile( + uri = uri, + name = name, + mimeType = mimeType, + size = size + ) + } catch (e: Exception) { + Log.e(TAG, "Failed to read metadata for $uri", e) + null + } + } + + private fun createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channel = NotificationChannel( + CHANNEL_ID, + "Quick Share (Sending)", + NotificationManager.IMPORTANCE_LOW + ) + getSystemService(NotificationManager::class.java).createNotificationChannel(channel) + } + } + + private fun updateNotification(content: String) { + getSystemService(NotificationManager::class.java).notify(NOTIFICATION_ID, createNotification(content)) + } + + private fun createNotification(content: String): Notification { + return NotificationCompat.Builder(this, CHANNEL_ID) + .setContentTitle("Sending via AirSync") + .setContentText(content) + .setSmallIcon(R.drawable.ic_laptop_24) + .setOngoing(true) + .setPriority(NotificationCompat.PRIORITY_LOW) + .build() + } + + override fun onBind(intent: Intent?): IBinder? = null + + override fun onDestroy() { + discovery?.stop() + connection?.closeConnection() + // Clean up the cache copies QuickShareSendActivity made (see copyUrisToCache) now that + // this transfer attempt is done, successful or not. + File(cacheDir, "quickshare_outgoing").deleteRecursively() + super.onDestroy() + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 25c272e9..c0f90525 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,6 +25,7 @@ Clipboard Sent Failed to Send Clipboard Your Mac + AirSync (Send to Mac) Disconnected Paused Pause From 589b5dc281bdf05c5beb51181848d44cd738441d Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 10:56:54 +0530 Subject: [PATCH 2/8] feat: add dynamic file sharing shortcut for connected device --- .../sameerasw/airsync/utils/MacModelMapper.kt | 16 ++++++------- .../sameerasw/airsync/utils/ShortcutUtil.kt | 21 ++++++++++++++++++ app/src/main/res/drawable/ic_device_imac.png | Bin 139353 -> 4930 bytes .../main/res/drawable/ic_device_mac_mini.png | Bin 0 -> 10093 bytes .../main/res/drawable/ic_device_mac_pro.png | Bin 0 -> 21014 bytes .../res/drawable/ic_device_mac_studio.png | Bin 0 -> 10093 bytes .../res/drawable/ic_device_macbook_air.png | Bin 0 -> 5767 bytes app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/shortcuts.xml | 4 ++++ 9 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 app/src/main/res/drawable/ic_device_mac_mini.png create mode 100644 app/src/main/res/drawable/ic_device_mac_pro.png create mode 100644 app/src/main/res/drawable/ic_device_mac_studio.png create mode 100644 app/src/main/res/drawable/ic_device_macbook_air.png diff --git a/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt b/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt index 69760501..a5d49376 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt @@ -47,14 +47,14 @@ object MacModelMapper { val hay = "$nameStr$modelStr$typeStr".lowercase() return when { - hay.contains("macbookair") -> R.drawable.rounded_laptop_mac_24 - hay.contains("macbookpro") -> R.drawable.rounded_laptop_mac_24 - hay.contains("macmini") -> R.drawable.ic_mac_mini_24 - hay.contains("imac") -> R.drawable.ic_desktop_24 - hay.contains("macstudio") -> R.drawable.ic_mac_studio_24 - hay.contains("macpro") -> R.drawable.ic_mac_pro_24 - hay.contains("macbookneo") -> R.drawable.rounded_laptop_mac_24 - else -> R.drawable.rounded_laptop_mac_24 + hay.contains("macbookair") -> R.drawable.ic_device_macbook_air + hay.contains("macbookpro") -> R.drawable.ic_device_macbook_air + hay.contains("macmini") -> R.drawable.ic_device_mac_mini + hay.contains("imac") -> R.drawable.ic_device_imac + hay.contains("macstudio") -> R.drawable.ic_device_mac_studio + hay.contains("macpro") -> R.drawable.ic_device_mac_pro + hay.contains("macbookneo") -> R.drawable.ic_device_macbook_air + else -> R.drawable.ic_device_macbook_air } } diff --git a/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt b/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt index 5b7907f7..16ff4615 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt @@ -8,6 +8,7 @@ import androidx.core.graphics.drawable.IconCompat import com.sameerasw.airsync.R import com.sameerasw.airsync.data.local.DataStoreManager import com.sameerasw.airsync.presentation.ui.activities.ClipboardActionActivity +import com.sameerasw.airsync.presentation.ui.activities.QuickShareSendActivity import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking @@ -20,6 +21,8 @@ object ShortcutUtil { const val SHORTCUT_ID_DISCONNECT = "shortcut_disconnect" const val SHORTCUT_ID_PAUSE = "shortcut_pause" const val SHORTCUT_ID_RESUME = "shortcut_resume" + const val SHORTCUT_ID_SHARE_MAC = "shortcut_share_mac" + const val SHARE_TARGET_CATEGORY_FILE = "com.sameerasw.airsync.categories.SHARE_TARGET_FILE" const val DASH_ACTION_RECONNECT = "com.sameerasw.airsync.ACTION_RECONNECT" const val DASH_ACTION_CLIPBOARD = "com.sameerasw.airsync.ACTION_CLIPBOARD" @@ -94,6 +97,24 @@ object ShortcutUtil { .build() ) } else { + val lastConnectedDevice = runBlocking { + dataStoreManager.getLastConnectedDevice().first() + } + if (lastConnectedDevice != null) { + shortcuts.add( + ShortcutInfoCompat.Builder(context, SHORTCUT_ID_SHARE_MAC) + .setShortLabel(lastConnectedDevice.name) + .setLongLabel(lastConnectedDevice.name) + .setIcon(IconCompat.createWithResource(context, MacModelMapper.getTileIconRes(lastConnectedDevice))) + .setLongLived(true) + .setCategories(setOf(SHARE_TARGET_CATEGORY_FILE)) + .setIntent(Intent(context, QuickShareSendActivity::class.java).apply { + action = Intent.ACTION_SEND + }) + .build() + ) + } + // 1. Remote (Direct to Remote tab) // Use MainActivity with a specific action shortcuts.add( diff --git a/app/src/main/res/drawable/ic_device_imac.png b/app/src/main/res/drawable/ic_device_imac.png index ca09ba0f29feec0ef028cea9d339644806efe7e2..4d44d62825f115641f8675d8a0abbb1b51d96370 100644 GIT binary patch literal 4930 zcmeHL`#V%?-@n()Fz8|IO7H9b=kxh~?(bSx zZLBTjvs*rSwm$23{Gn*@de~D(t0+e~pzLYn z346P9l1r`v(jRu8@7Qdyk+Z#Nh`E)p=iw*wZy#gdjaYOf5-Z!T1qJp*)UnEEniow7 zr^-kNBP)zsq6Q-o#QT8;+;lBL7-8*5+c?XXmCoXURrjoU#Z*k&jjG~U%t zEAUTIHsIjp*k3YJM(#E|Mf2$v{4ZxYS@+Mx4_exD-0vM|aoHvj*^1^5a{58ct}y)8 z>hNdW3a-%5>o!=-*=f^Ul;mf77c3-W4*W;E+d~{V_&R?@8k{WdxxF!c zJnrI5d%EYrV`Zq7S$HF3 z`rRcz!-d{Lm!43M$;%_s&0<|Y?a`Dvw|tXI*XWreZIZ@*mlx&MA6*}o2hTqI(J};H>o^o$ z)Rh;Lv?Ikd;^U-MFL43A+s~!}ort9hy1x#aXH`pzMqxCi$#$tso#Rz0Zoj7WRtALc zTd@A+LSudQG^GT0SLI<(Rm8S=G^xy)G~(=;SF>?Sa3h|RHYOs~aVrWIyXE7lkuh(% zJk``04*$^b_N)*`Fyd_g^vDvUT{JE1TQVDZ?PjvaP|x&C(%syLyrxQ4qdcpfS5F2S{VhrEtMx<-H_45NE{X(kt>?aUO_Uu`kf2SPfvsE+SIHPXuV3$WTeD0FkaGHzNZaJofc;Z*1}@$tXGi~t2bL8J zReGlevMuW5r@ID_{7aYVuFq#koUn{NEbP`48kVtSpZz{q>1}K6Llsn zKgk8*N7oAIzOFh3AUkE$jhLYOv93XZ6pyYgMDx59k_We`FFUmsWtGqBb&8~%Q6<*qVp?Wf zQ*WdLj7OX!u%hG8M$PV-`f+GBZKwJ&=;1&W4}&f`*#!lW|5u>I77>;So>E(>4GK`beAzjz;1Abj(r=3j6Nt_yuP^lHj=m<(@$|;c0Ke-?}lfa|5jvybGIeToTFc{4q;8gj;xWQNz z{uLuEbSq)l^60$n+|Lk^eNyT?lxl0`w9o~sAy4Jlj7KYigaoFn3x$$Ntwh~>w@wiu z^f)-T4In4mje&x~5V0+)ViX)Z3;ooJJnfG0=1H?Yl`?3ny}pPTo2}*fLOC9K^0-Ei z5rrRm-Usx^smu4y?ESe1!SsF@$$ZqQQmJ5c5?24O%j!pRfyt7u((Z=Wb+V7z9;LP& z!FW4OV+Vxr>4ega?Z*z~4S~5Uh63j-KBe_g2nB;0x}=;*CE5rYN$%Mwm^-LDq~9y!pkoZytfX!P zlH}p56$gWWiVM#fkeK@2C^`B79mWc2HR4KWDleokE9KK^W`SrQF0gjEI&h^2;kr|l zT^3#_P*p>O7mhsnH_$SIHnWthkJ8D9}(-=}2b#w$F-d^9rRfe+8-kr5FB};h>Zp+fl!) zoFH+*8TetOO>5wxv^=LNXSbifepx#&SEC@l*>fd_1LqT*-kD$Z4-%TAkwNj2T zCQVx~7w(tDb~GrkHm`Uc7Z{dVpcukuU-7UFbCpPUwvg-(xT%pk?X4WJ6Fp&Ckv<8I1x-zlUu+BsNJh>5cDl5JBUJQC zf55s(cPZxz6={TC$L4!)FTOxA2O0H3e?D@L@bB@|*KrQ_&X@k2ktzadRu=6YS$ZeqB7)8o~(w_O>v7 zW>sy?=Q_-yN3mu5QRT4wz#HB8Ls$&9&&h%6Xkh8>`dS$iy|&_zi~?y}YjuP={YJoF zPX0kbQE_<}g7tv{hrD3+U~2k2C8Vn{Iu-EthNxPpLduRSCHV zmnsUf88<2vWHSq16BRS{nbzY+t7IP{Y($rgOForgKroLo63nsiIU&G*a2|KL&sddj z>hXZFzCxtGJs|n9RV#GzluFfD{*asLX3D}-bbT^No!pse+wdm^N1e~R8yZGbz?}L% zC_Pa%Ys1O%ITZ;4_vuO2&#EpCTDFuB70JglswUV!Ip{UMsqF!L8urL&9Q>ap0HgAxr2NhqTMplBD(P_5s_5KGChQ3ELwP z!DGV=$;b>RP?}V*vl(Y181H9VkNQ#6ch`7MgmI(Ws&K?`t`Ugz_w=26gw0s0ZjtLt zeD?gjq@7yvqPU7DB+(czos+aHf(}crL zycz6Uz@I!VSUpG300n^o(F^X$bjpC=`j~y}(;>ArFkTT8OL>|ubJZ$P&Z`*T*;@qx zQD3P#(fyY`s?8=o+63bghIe}-5vG>(TqIxg%pd#Oqz(CagfJt8+>VgJVx52++UJwH z@z#>1&hFH@NWtR{1MZu}HxC}W85J7{b>tn_C2Be-2Rfa8&1p-(#p%D)GcE0(&o<6? zJ4aF9b}(!DWU}k$$l0s>w)29*Opz1#5;jiHdhJ^SW#T~8FN$rjwxo`rYTQ;_Z*E{68! zEBMvfQ;Kyxxb+`xi0m8WXs0}7!3lV3jj-4=!-xUAM3EiJd@gTWxpzk}76@rb&sQ_E z$x(B(Xy$IHspRv&Pw4p5IbXWEBT_d_zQ4w4$>8)X#9Gx~ZND^v(_WNFqJNKh5lI#o z8E9AjS%g&>V{jH?f3XH%PIw!H;v)w}Yu&2)N*By(%|zLqgh+{V5`Hh)F|BeF7|qaZ zaS=6ABZP1HykhLGtbAwsLM`@qg}7rW0GF^9#lnjwyz>{kEL%oLje3TgTI9uoXamXU z&PMpM42tD?viFOquQzIhzde6R)3}s6UO*izZdan19m`9wNTcX5chjG z7Zc?+%77EI)2Y0~>Zro8e_g28Bvj|z9fctBu*vL?8$8~yF=2d~S;K&hs+Fl-v_#30 zU}#S%!cwZrxLR68tU(x--W%u&F54XZb{HNvFTh@67@j z=CA=)1(mRA@<$ z@SRDP2>(3l7|kkbj^&qC&#?jw2ueqVaY}$Pkmi1rARgmb8x`FMn`wQIlcc>erPRsM zh($#wmKKydOod%Pu2m`ZVO5>(Q(DlL)FpBIC6O7&eZv*Nj{BEAJ?i^(C!;(v)ZN>U z@>v+<^r}>MUnp7Jyk^0g_mVo))Iwhaw@FA_`QHy6|5smoawKSS?1jBai?QYKM=@~t Mfc5@-b8_7O096VrKL7v# literal 139353 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 diff --git a/app/src/main/res/drawable/ic_device_mac_mini.png b/app/src/main/res/drawable/ic_device_mac_mini.png new file mode 100644 index 0000000000000000000000000000000000000000..3c67f9214321190fadd7fb39253e5925c2002f58 GIT binary patch literal 10093 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c0f90525..8276e73f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,7 +25,7 @@ Clipboard Sent Failed to Send Clipboard Your Mac - AirSync (Send to Mac) + Send Disconnected Paused Pause diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index e5ef4db7..ee867dcd 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -4,4 +4,8 @@ + + + + From 6fb33b1475721e76481bde75bed87425400daaf1 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 12:10:41 +0530 Subject: [PATCH 3/8] feat: add Mac model share icon mapping and update share shortcut icon --- .../sameerasw/airsync/utils/MacModelMapper.kt | 25 +++++++++++++++++++ .../sameerasw/airsync/utils/ShortcutUtil.kt | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt b/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt index a5d49376..2670c319 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/MacModelMapper.kt @@ -46,6 +46,31 @@ object MacModelMapper { val typeStr = deviceType?.replace(" ", "")?.lowercase() ?: "" val hay = "$nameStr$modelStr$typeStr".lowercase() + return when { + hay.contains("macbookair") -> R.drawable.rounded_laptop_mac_24 + hay.contains("macbookpro") -> R.drawable.rounded_laptop_mac_24 + hay.contains("macmini") -> R.drawable.ic_mac_mini_24 + hay.contains("imac") -> R.drawable.ic_desktop_24 + hay.contains("macstudio") -> R.drawable.ic_mac_studio_24 + hay.contains("macpro") -> R.drawable.ic_mac_pro_24 + hay.contains("macbookneo") -> R.drawable.rounded_laptop_mac_24 + else -> R.drawable.rounded_laptop_mac_24 + } + } + + @DrawableRes + fun getShareIconRes(device: ConnectedDevice?): Int { + if (device == null) return R.drawable.ic_device_macbook_air + return getShareIconRes(device.name, device.model, device.deviceType) + } + + @DrawableRes + fun getShareIconRes(name: String, model: String?, deviceType: String?): Int { + val modelStr = model?.replace(" ", "") ?: "" + val nameStr = name.replace(" ", "").lowercase() + val typeStr = deviceType?.replace(" ", "")?.lowercase() ?: "" + val hay = "$nameStr$modelStr$typeStr".lowercase() + return when { hay.contains("macbookair") -> R.drawable.ic_device_macbook_air hay.contains("macbookpro") -> R.drawable.ic_device_macbook_air diff --git a/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt b/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt index 16ff4615..0cb8f352 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt @@ -105,7 +105,7 @@ object ShortcutUtil { ShortcutInfoCompat.Builder(context, SHORTCUT_ID_SHARE_MAC) .setShortLabel(lastConnectedDevice.name) .setLongLabel(lastConnectedDevice.name) - .setIcon(IconCompat.createWithResource(context, MacModelMapper.getTileIconRes(lastConnectedDevice))) + .setIcon(IconCompat.createWithResource(context, MacModelMapper.getShareIconRes(lastConnectedDevice))) .setLongLived(true) .setCategories(setOf(SHARE_TARGET_CATEGORY_FILE)) .setIntent(Intent(context, QuickShareSendActivity::class.java).apply { From d9a0d0424d24c6abab3f1cacf253da03e0cc8fbb Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 12:58:23 +0530 Subject: [PATCH 4/8] refactor: rename Wallpaper Access to Wallpaper & File Access across UI and utils --- .../ui/components/dialogs/PermissionDialog.kt | 4 ++-- .../airsync/presentation/ui/screens/PermissionsScreen.kt | 4 ++-- .../java/com/sameerasw/airsync/utils/PermissionUtil.kt | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/sameerasw/airsync/presentation/ui/components/dialogs/PermissionDialog.kt b/app/src/main/java/com/sameerasw/airsync/presentation/ui/components/dialogs/PermissionDialog.kt index fd242a95..96d1e55e 100644 --- a/app/src/main/java/com/sameerasw/airsync/presentation/ui/components/dialogs/PermissionDialog.kt +++ b/app/src/main/java/com/sameerasw/airsync/presentation/ui/components/dialogs/PermissionDialog.kt @@ -190,8 +190,8 @@ private fun getPermissionInfo(context: Context, permissionType: PermissionType): PermissionType.WALLPAPER_ACCESS -> PermissionInfo( title = "Wallpaper & File Access", icon = R.drawable.rounded_folder_managed_24, - description = "This optional permission allows AirSync to sync your phone's wallpaper to your mac.", - whyNeeded = "To read your current wallpaper which is not accessible with regular privileges, AirSync needs external storage permissions. \nBut the app will only use the permission for the given explained use cases and will not alter or read any other files on the storage.", + description = "This optional permission allows AirSync to sync your phone's wallpaper to your Mac, and lets your Mac browse your phone's storage as a Finder volume when the File Access feature is turned on.", + whyNeeded = "To read your current wallpaper, and to let your paired Mac mount your phone's storage over Wi-Fi (the File Access feature in the Mac app's settings), AirSync needs broader storage permissions than regular apps get. \nThis permission is only used for these two features — wallpaper sync always, and file browsing only while File Access is explicitly enabled on your Mac and only over your local network.", buttonText = "Grant Storage Access" ) diff --git a/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/PermissionsScreen.kt b/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/PermissionsScreen.kt index 11eb4c2e..819827e4 100644 --- a/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/PermissionsScreen.kt +++ b/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/PermissionsScreen.kt @@ -181,10 +181,10 @@ fun PermissionsScreen( ) } - "Wallpaper Access" -> { + "Wallpaper & File Access" -> { PermissionButton( permissionName = permission, - description = "Enables wallpaper sync", + description = "Enables wallpaper sync and Mac File Access", onExplainClick = { showDialog = PermissionType.WALLPAPER_ACCESS }, diff --git a/app/src/main/java/com/sameerasw/airsync/utils/PermissionUtil.kt b/app/src/main/java/com/sameerasw/airsync/utils/PermissionUtil.kt index e7d18211..96cccd7c 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/PermissionUtil.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/PermissionUtil.kt @@ -181,9 +181,9 @@ object PermissionUtil { missing.add("Background App Usage") } - // Check wallpaper access permission (optional) + // Check wallpaper/file access permission (optional) if (!hasWallpaperAccess()) { - missing.add("Wallpaper Access") + missing.add("Wallpaper & File Access") } // Check call log permission (optional) @@ -249,9 +249,9 @@ object PermissionUtil { optional.add("Background App Usage") } - // Wallpaper access is optional for wallpaper sync feature + // Wallpaper/file access is optional, for wallpaper sync and the Mac File Access (WebDAV) feature if (!hasWallpaperAccess()) { - optional.add("Wallpaper Access") + optional.add("Wallpaper & File Access") } // Call log access is optional for call log sync From 3241e9789e64bea52b007eb147bb9b7c09bc3d38 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 13:06:07 +0530 Subject: [PATCH 5/8] feat: support sharing text content in QuickShareSendActivity --- app/src/main/AndroidManifest.xml | 5 ----- .../ui/activities/QuickShareSendActivity.kt | 12 +++++++++++- app/src/main/res/xml/shortcuts.xml | 4 ---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0c5ca60..4ac949a5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -112,11 +112,6 @@ android:noHistory="true" android:taskAffinity="" android:theme="@style/Theme.AirSync.Transparent"> - - - - - , + sharedText: String?, pairedDeviceName: String?, onFinished: () -> Unit ) { @@ -141,7 +145,7 @@ private fun QuickShareSendScreen( hasStarted = true delay(100) - if (uris.isEmpty()) { + if (uris.isEmpty() && sharedText.isNullOrBlank()) { uiState = SendUiState.Error("Nothing to send") delay(1500) onFinished() @@ -149,6 +153,11 @@ private fun QuickShareSendScreen( uiState = SendUiState.Error("No Mac paired") delay(1500) onFinished() + } else if (uris.isEmpty()) { + ClipboardSyncManager.syncTextToDesktop(sharedText!!) + uiState = SendUiState.Success + delay(1200) + onFinished() } else { val localUris = withContext(Dispatchers.IO) { copyUrisToCache(context, uris) } if (localUris.isEmpty()) { @@ -283,6 +292,7 @@ private fun QuickShareSendScreenPreviewLoading() { QuickShareSendScreen( hasWindowFocus = true, uris = emptyList(), + sharedText = null, pairedDeviceName = "Sameera's Mac", onFinished = {} ) diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index ee867dcd..08bdd6fc 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -1,9 +1,5 @@ - - - - From bbd429ad96cf6f5e76a7c13452eeaa11d2a74321 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 13:20:36 +0530 Subject: [PATCH 6/8] feat: report Mac share shortcut usage upon QuickShare send completion --- .../ui/activities/QuickShareSendActivity.kt | 11 +++++ .../sameerasw/airsync/utils/ShortcutUtil.kt | 44 ++++++++++++------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/QuickShareSendActivity.kt b/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/QuickShareSendActivity.kt index bb7cf232..747d397c 100644 --- a/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/QuickShareSendActivity.kt +++ b/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/QuickShareSendActivity.kt @@ -56,6 +56,7 @@ import com.sameerasw.airsync.presentation.viewmodel.AirSyncViewModel import com.sameerasw.airsync.service.OutboundQuickShareService import com.sameerasw.airsync.ui.theme.AirSyncTheme import com.sameerasw.airsync.utils.ClipboardSyncManager +import com.sameerasw.airsync.utils.ShortcutUtil import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext @@ -155,6 +156,7 @@ private fun QuickShareSendScreen( onFinished() } else if (uris.isEmpty()) { ClipboardSyncManager.syncTextToDesktop(sharedText!!) + reportSummonShortcutUsed(context) uiState = SendUiState.Success delay(1200) onFinished() @@ -166,6 +168,7 @@ private fun QuickShareSendScreen( onFinished() } else { OutboundQuickShareService.start(context, localUris) + reportSummonShortcutUsed(context) uiState = SendUiState.Success delay(1200) onFinished() @@ -252,6 +255,14 @@ sealed class SendUiState { data class Error(val message: String) : SendUiState() } +private fun reportSummonShortcutUsed(context: Context) { + try { + ShortcutUtil.reportShareMacShortcutUsed(context) + } catch (_: Exception) { + + } +} + private fun copyUrisToCache(context: Context, uris: List): List { val outDir = File(context.cacheDir, "quickshare_outgoing").apply { mkdirs() } return uris.mapNotNull { uri -> diff --git a/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt b/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt index 0cb8f352..a72a001b 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/ShortcutUtil.kt @@ -97,23 +97,7 @@ object ShortcutUtil { .build() ) } else { - val lastConnectedDevice = runBlocking { - dataStoreManager.getLastConnectedDevice().first() - } - if (lastConnectedDevice != null) { - shortcuts.add( - ShortcutInfoCompat.Builder(context, SHORTCUT_ID_SHARE_MAC) - .setShortLabel(lastConnectedDevice.name) - .setLongLabel(lastConnectedDevice.name) - .setIcon(IconCompat.createWithResource(context, MacModelMapper.getShareIconRes(lastConnectedDevice))) - .setLongLived(true) - .setCategories(setOf(SHARE_TARGET_CATEGORY_FILE)) - .setIntent(Intent(context, QuickShareSendActivity::class.java).apply { - action = Intent.ACTION_SEND - }) - .build() - ) - } + buildShareMacShortcut(context)?.let { shortcuts.add(it) } // 1. Remote (Direct to Remote tab) // Use MainActivity with a specific action @@ -184,6 +168,32 @@ object ShortcutUtil { ShortcutManagerCompat.setDynamicShortcuts(context, shortcuts) } + + private fun buildShareMacShortcut(context: Context): ShortcutInfoCompat? { + val dataStoreManager = DataStoreManager.getInstance(context) + val lastConnectedDevice = runBlocking { + dataStoreManager.getLastConnectedDevice().first() + } ?: return null + + return ShortcutInfoCompat.Builder(context, SHORTCUT_ID_SHARE_MAC) + .setShortLabel(lastConnectedDevice.name) + .setLongLabel(lastConnectedDevice.name) + .setIcon(IconCompat.createWithResource(context, MacModelMapper.getShareIconRes(lastConnectedDevice))) + .setLongLived(true) + .setCategories(setOf(SHARE_TARGET_CATEGORY_FILE)) + .setIntent(Intent(context, QuickShareSendActivity::class.java).apply { + action = Intent.ACTION_SEND + }) + .build() + } + + + fun reportShareMacShortcutUsed(context: Context) { + buildShareMacShortcut(context)?.let { + ShortcutManagerCompat.pushDynamicShortcut(context, it) + } + } + // Legacy method cleanup fun removeShareShortcut(context: Context) { ShortcutManagerCompat.removeAllDynamicShortcuts(context) From e80d731a51c1b6c852616919729b18698f7b35e8 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 19:56:01 +0530 Subject: [PATCH 7/8] refactor: introduce manual parameter to WebSocketUtil disconnect and clean up call sites --- .../com/sameerasw/airsync/MainActivity.kt | 6 ++-- .../ui/activities/ClipboardActionActivity.kt | 7 ++-- .../ui/screens/AirSyncMainScreen.kt | 3 +- .../viewmodel/AirSyncViewModel.kt | 8 +---- .../airsync/service/AirSyncTileService.kt | 4 +-- .../service/NotificationActionReceiver.kt | 2 +- .../airsync/utils/WebSocketMessageHandler.kt | 10 +----- .../sameerasw/airsync/utils/WebSocketUtil.kt | 34 +++++++++++++------ .../airsync/widget/AirSyncWidgetProvider.kt | 6 +--- 9 files changed, 33 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/sameerasw/airsync/MainActivity.kt b/app/src/main/java/com/sameerasw/airsync/MainActivity.kt index 01ee3e5f..9e6f98be 100644 --- a/app/src/main/java/com/sameerasw/airsync/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/airsync/MainActivity.kt @@ -344,10 +344,9 @@ class MainActivity : ComponentActivity() { // Not connected and not paused: pause the app on QS tile long-press runBlocking { ds.setAppPaused(true) - ds.setUserManuallyDisconnected(true) } WebSocketUtil.stopAutoReconnect(this) - WebSocketUtil.disconnect(this) + WebSocketUtil.disconnect(this, manual = true) com.sameerasw.airsync.utils.discovery.DiscoveryOrchestrator.stop(this) com.sameerasw.airsync.service.AirSyncService.stop(this) ShortcutUtil.refreshShortcuts(this, false) @@ -578,10 +577,9 @@ class MainActivity : ComponentActivity() { if (!isPaused && !WebSocketUtil.isConnected()) { runBlocking { ds.setAppPaused(true) - ds.setUserManuallyDisconnected(true) } WebSocketUtil.stopAutoReconnect(this) - WebSocketUtil.disconnect(this) + WebSocketUtil.disconnect(this, manual = true) com.sameerasw.airsync.utils.discovery.DiscoveryOrchestrator.stop(this) com.sameerasw.airsync.service.AirSyncService.stop(this) ShortcutUtil.refreshShortcuts(this, false) diff --git a/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/ClipboardActionActivity.kt b/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/ClipboardActionActivity.kt index 64c8458b..d540e3fa 100644 --- a/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/ClipboardActionActivity.kt +++ b/app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/ClipboardActionActivity.kt @@ -159,9 +159,8 @@ private fun ClipboardActionScreen( ShortcutUtil.DASH_ACTION_PAUSE -> { val ds = DataStoreManager.getInstance(context) ds.setAppPaused(true) - ds.setUserManuallyDisconnected(true) WebSocketUtil.stopAutoReconnect(context) - WebSocketUtil.disconnect(context) + WebSocketUtil.disconnect(context, manual = true) com.sameerasw.airsync.utils.discovery.DiscoveryOrchestrator.stop(context) com.sameerasw.airsync.service.AirSyncService.stop(context) ShortcutUtil.refreshShortcuts(context, false) @@ -185,9 +184,7 @@ private fun ClipboardActionScreen( } ShortcutUtil.DASH_ACTION_DISCONNECT -> { - val ds = DataStoreManager.getInstance(context) - ds.setUserManuallyDisconnected(true) - WebSocketUtil.disconnect(context) + WebSocketUtil.disconnect(context, manual = true) uiState = ClipboardUiState.Success delay(1200) onFinished() diff --git a/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/AirSyncMainScreen.kt b/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/AirSyncMainScreen.kt index 1f690e6e..1a18968b 100644 --- a/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/AirSyncMainScreen.kt +++ b/app/src/main/java/com/sameerasw/airsync/presentation/ui/screens/AirSyncMainScreen.kt @@ -542,8 +542,7 @@ fun AirSyncMainScreen( fun disconnect() { scope.launch { - viewModel.setUserManuallyDisconnectedAwait(true) - WebSocketUtil.disconnect(context) + WebSocketUtil.disconnect(context, manual = true) viewModel.setConnectionStatus(isConnected = false, isConnecting = false) viewModel.clearClipboardHistory() viewModel.setResponse("Disconnected") diff --git a/app/src/main/java/com/sameerasw/airsync/presentation/viewmodel/AirSyncViewModel.kt b/app/src/main/java/com/sameerasw/airsync/presentation/viewmodel/AirSyncViewModel.kt index 3040c3b7..429c712a 100644 --- a/app/src/main/java/com/sameerasw/airsync/presentation/viewmodel/AirSyncViewModel.kt +++ b/app/src/main/java/com/sameerasw/airsync/presentation/viewmodel/AirSyncViewModel.kt @@ -840,18 +840,12 @@ class AirSyncViewModel( } } - // Awaitable variant used when ordering matters (e.g., ensure flag is persisted before disconnect) - suspend fun setUserManuallyDisconnectedAwait(disconnected: Boolean) { - repository.setUserManuallyDisconnected(disconnected) - } - fun setAppPaused(context: Context, paused: Boolean) { viewModelScope.launch { repository.setAppPaused(paused) if (paused) { - repository.setUserManuallyDisconnected(true) WebSocketUtil.stopAutoReconnect(context) - WebSocketUtil.disconnect(context) + WebSocketUtil.disconnect(context, manual = true) com.sameerasw.airsync.utils.discovery.DiscoveryOrchestrator.stop(context) com.sameerasw.airsync.service.AirSyncService.stop(context) _uiState.value = _uiState.value.copy( diff --git a/app/src/main/java/com/sameerasw/airsync/service/AirSyncTileService.kt b/app/src/main/java/com/sameerasw/airsync/service/AirSyncTileService.kt index 2de351a0..67b3476b 100644 --- a/app/src/main/java/com/sameerasw/airsync/service/AirSyncTileService.kt +++ b/app/src/main/java/com/sameerasw/airsync/service/AirSyncTileService.kt @@ -115,9 +115,7 @@ class AirSyncTileService : TileService() { dataStoreManager.setUserManuallyDisconnected(true) updateTileState() } else if (isConnected) { - // Mark manual disconnect BEFORE disconnecting so listeners won't schedule auto-reconnect - dataStoreManager.setUserManuallyDisconnected(true) - WebSocketUtil.disconnect(this@AirSyncTileService) + WebSocketUtil.disconnect(this@AirSyncTileService, manual = true) updateTileState() } else { dataStoreManager.setUserManuallyDisconnected(false) diff --git a/app/src/main/java/com/sameerasw/airsync/service/NotificationActionReceiver.kt b/app/src/main/java/com/sameerasw/airsync/service/NotificationActionReceiver.kt index 4d7a376a..ad43a86d 100644 --- a/app/src/main/java/com/sameerasw/airsync/service/NotificationActionReceiver.kt +++ b/app/src/main/java/com/sameerasw/airsync/service/NotificationActionReceiver.kt @@ -42,7 +42,7 @@ class NotificationActionReceiver : BroadcastReceiver() { AirSyncService.ACTION_DISCONNECT -> { Log.d(TAG, "Disconnecting from notification") - WebSocketUtil.disconnect(context) + WebSocketUtil.disconnect(context, manual = true) } ACTION_CANCEL_TRANSFER -> { diff --git a/app/src/main/java/com/sameerasw/airsync/utils/WebSocketMessageHandler.kt b/app/src/main/java/com/sameerasw/airsync/utils/WebSocketMessageHandler.kt index 57b6dc97..ba07ed82 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/WebSocketMessageHandler.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/WebSocketMessageHandler.kt @@ -437,15 +437,7 @@ object WebSocketMessageHandler { private fun handleDisconnectRequest(context: Context) { try { - CoroutineScope(Dispatchers.IO).launch { - try { - val dataStoreManager = DataStoreManager(context) - dataStoreManager.setUserManuallyDisconnected(true) - } catch (_: Exception) { - } - } - // Immediately disconnect the WebSocket - WebSocketUtil.disconnect() + WebSocketUtil.disconnect(context, manual = true) Log.d(TAG, "WebSocket disconnected as per request") } catch (e: Exception) { Log.e(TAG, "Error handling disconnect request: ${e.message}") diff --git a/app/src/main/java/com/sameerasw/airsync/utils/WebSocketUtil.kt b/app/src/main/java/com/sameerasw/airsync/utils/WebSocketUtil.kt index 57b95343..7dcac9ea 100644 --- a/app/src/main/java/com/sameerasw/airsync/utils/WebSocketUtil.kt +++ b/app/src/main/java/com/sameerasw/airsync/utils/WebSocketUtil.kt @@ -693,9 +693,19 @@ object WebSocketUtil { /** * Disconnects the WebSocket and cleans up resources. * Stops related services (AirSyncService, periodic sync) and updates UI state. + * + * @param manual True only for a user-initiated disconnect. Persists the manual-disconnect + * flag and tells the Mac so neither side auto-reconnects. Internal/automatic disconnects + * (handshake timeout, network change, socket error) must pass false so auto-reconnect can + * still resume. */ - fun disconnect(context: Context? = null) { - Log.d(TAG, "Disconnecting WebSocket") + fun disconnect(context: Context? = null, manual: Boolean = false) { + Log.d(TAG, "Disconnecting WebSocket (manual=$manual)") + + if (manual) { + sendMessage("{\"type\":\"userDisconnected\",\"data\":{}}") + } + updateConnectedStatus(false) isConnecting.set(false) isSocketOpen.set(false) @@ -703,19 +713,21 @@ object WebSocketUtil { handshakeTimeoutJob?.cancel() currentIpAddress = null - // Set manual disconnect flag val ctx = context ?: appContext - ctx?.let { c -> - CoroutineScope(Dispatchers.IO).launch { - try { - val ds = com.sameerasw.airsync.data.local.DataStoreManager.getInstance(c) - ds.setUserManuallyDisconnected(true) - } catch (_: Exception) { + + if (manual) { + ctx?.let { c -> + CoroutineScope(Dispatchers.IO).launch { + try { + val ds = com.sameerasw.airsync.data.local.DataStoreManager.getInstance(c) + ds.setUserManuallyDisconnected(true) + } catch (_: Exception) { + } } } } - webSocket?.close(1000, "Manual disconnection") + webSocket?.close(1000, if (manual) "Manual disconnection" else "Disconnected") webSocket = null // Transition back to scanning on disconnect @@ -753,7 +765,7 @@ object WebSocketUtil { // Disconnect any active BLE transport connections try { val bleManager = com.sameerasw.airsync.AirSyncApp.getBleConnectionManager() - if (bleManager != null && bleManager.isAuthenticated) { + if (manual && bleManager != null && bleManager.isAuthenticated) { BleTransportBridge.sendManualDisconnect() } bleManager?.disconnectAllConnectedDevices() diff --git a/app/src/main/java/com/sameerasw/airsync/widget/AirSyncWidgetProvider.kt b/app/src/main/java/com/sameerasw/airsync/widget/AirSyncWidgetProvider.kt index 7f0c76b1..55874f43 100644 --- a/app/src/main/java/com/sameerasw/airsync/widget/AirSyncWidgetProvider.kt +++ b/app/src/main/java/com/sameerasw/airsync/widget/AirSyncWidgetProvider.kt @@ -55,11 +55,7 @@ class AirSyncWidgetProvider : AppWidgetProvider() { ACTION_DISCONNECT -> { try { - // Mark manual disconnect and disconnect - runBlocking { - DataStoreManager(context).setUserManuallyDisconnected(true) - } - WebSocketUtil.disconnect(context) + WebSocketUtil.disconnect(context, manual = true) } catch (e: Exception) { Log.e(TAG, "Widget disconnect failed: ${e.message}") } From dca4f8c9997066c7e3ab416014303555c5e27ecb Mon Sep 17 00:00:00 2001 From: sameerasw Date: Wed, 16 Sep 2026 20:21:42 +0530 Subject: [PATCH 8/8] feat: handle manual disconnect action from BLE in BleTransportBridge --- .../com/sameerasw/airsync/data/ble/BleTransportBridge.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/com/sameerasw/airsync/data/ble/BleTransportBridge.kt b/app/src/main/java/com/sameerasw/airsync/data/ble/BleTransportBridge.kt index c179c969..33462585 100644 --- a/app/src/main/java/com/sameerasw/airsync/data/ble/BleTransportBridge.kt +++ b/app/src/main/java/com/sameerasw/airsync/data/ble/BleTransportBridge.kt @@ -91,6 +91,12 @@ object BleTransportBridge { fun handleMediaControl(action: String, context: android.content.Context) { Log.d(TAG, "Media control from BLE: $action") when { + action == "manual_disconnect" -> { + Log.d(TAG, "Received manual disconnect from Mac via BLE") + com.sameerasw.airsync.utils.WebSocketUtil.disconnect(context, manual = true) + gattServer?.disconnectAllConnectedDevices() + } + action == "playPause" -> com.sameerasw.airsync.utils.MediaControlUtil.playPause(context) action == "next" -> com.sameerasw.airsync.utils.MediaControlUtil.skipNext(context) action == "previous" -> com.sameerasw.airsync.utils.MediaControlUtil.skipPrevious(