mirror of
https://github.com/kavishdevar/librepods.git
synced 2026-05-28 03:48:39 +00:00
android: add disconnect button
This commit is contained in:
@@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.Spacer
|
|||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.heightIn
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
@@ -430,6 +431,30 @@ fun AirPodsSettingsScreen(viewModel: AirPodsViewModel, navController: NavControl
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
item(key = "spacer_disconnect") { Spacer(modifier = Modifier.height(28.dp)) }
|
||||||
|
item(key = "disconnect_button") {
|
||||||
|
StyledButton(
|
||||||
|
onClick = viewModel::disconnect,
|
||||||
|
backdrop = rememberLayerBackdrop(),
|
||||||
|
isInteractive = false,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.heightIn(min = 56.dp)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.disconnect),
|
||||||
|
style = TextStyle(
|
||||||
|
fontSize = 16.sp,
|
||||||
|
fontWeight = FontWeight.Normal,
|
||||||
|
color = if (isSystemInDarkTheme()) Color(0xFF0091FF) else Color(0xFF0088FF),
|
||||||
|
fontFamily = FontFamily(Font(R.font.sf_pro))
|
||||||
|
),
|
||||||
|
textAlign = TextAlign.Start,
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// item(key = "spacer_debug") { Spacer(modifier = Modifier.height(16.dp)) }
|
// item(key = "spacer_debug") { Spacer(modifier = Modifier.height(16.dp)) }
|
||||||
// item(key = "debug") { NavigationButton("debug", "Debug", navController) }
|
// item(key = "debug") { NavigationButton("debug", "Debug", navController) }
|
||||||
item(key = "spacer_bottom") { Spacer(Modifier.height(bottomPadding)) }
|
item(key = "spacer_bottom") { Spacer(Modifier.height(bottomPadding)) }
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import android.content.pm.PackageManager
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
@@ -529,7 +531,7 @@ class AirPodsViewModel(
|
|||||||
actualModel = fakeInstance.actualModelNumber,
|
actualModel = fakeInstance.actualModelNumber,
|
||||||
serialNumbers = listOf("DEMO", "DEMO", "DEMO"),
|
serialNumbers = listOf("DEMO", "DEMO", "DEMO"),
|
||||||
version3 = "Demo Firmware",
|
version3 = "Demo Firmware",
|
||||||
// isPremium = true
|
isPremium = true
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -540,5 +542,9 @@ class AirPodsViewModel(
|
|||||||
|
|
||||||
fun disconnect() {
|
fun disconnect() {
|
||||||
service.disconnectAirPods()
|
service.disconnectAirPods()
|
||||||
|
if (appContext.checkSelfPermission("android.permission.BLUETOOTH_PRIVILEGED") != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
Toast.makeText(appContext, "App has disconnected, disconnect from Android Settings.",
|
||||||
|
Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3020,21 +3020,26 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
|
|||||||
|
|
||||||
override fun onServiceDisconnected(profile: Int) {}
|
override fun onServiceDisconnected(profile: Int) {}
|
||||||
}, BluetoothProfile.A2DP)
|
}, BluetoothProfile.A2DP)
|
||||||
} else {
|
|
||||||
Log.d(TAG, "not connecting A2DP, no BLUETOOTH_PRIVILEGED permission")
|
|
||||||
}
|
|
||||||
if (checkSelfPermission("android.permission.MODIFY_PHONE_STATE") == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
bluetoothAdapter?.getProfileProxy(context, object : BluetoothProfile.ServiceListener {
|
bluetoothAdapter?.getProfileProxy(context, object : BluetoothProfile.ServiceListener {
|
||||||
override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
|
override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
|
||||||
if (profile == BluetoothProfile.HEADSET) {
|
if (profile == BluetoothProfile.HEADSET) {
|
||||||
try {
|
try {
|
||||||
val policyMethod = proxy.javaClass.getMethod(
|
if (checkSelfPermission("android.permission.MODIFY_PHONE_STATE") == PackageManager.PERMISSION_GRANTED) {
|
||||||
"setConnectionPolicy",
|
|
||||||
BluetoothDevice::class.java,
|
val policyMethod = proxy.javaClass.getMethod(
|
||||||
Int::class.java
|
"setConnectionPolicy",
|
||||||
)
|
BluetoothDevice::class.java,
|
||||||
Log.d(TAG, "calling HEADSET.setConnectionPolicy for ${device?.address} to 100")
|
Int::class.java
|
||||||
policyMethod.invoke(proxy, device, 100)
|
)
|
||||||
|
Log.d(
|
||||||
|
TAG,
|
||||||
|
"calling HEADSET.setConnectionPolicy for ${device?.address} to 100"
|
||||||
|
)
|
||||||
|
policyMethod.invoke(proxy, device, 100)
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "not setting connection policy for HEADSET, no MODIFIY_PHONE_STATE permission")
|
||||||
|
}
|
||||||
val connectMethod =
|
val connectMethod =
|
||||||
proxy.javaClass.getMethod("connect", BluetoothDevice::class.java)
|
proxy.javaClass.getMethod("connect", BluetoothDevice::class.java)
|
||||||
connectMethod.invoke(proxy, device)
|
connectMethod.invoke(proxy, device)
|
||||||
|
|||||||
Reference in New Issue
Block a user