diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt index cb3d223..8ebdbb0 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt @@ -11,12 +11,14 @@ import android.content.ServiceConnection import android.hardware.usb.UsbDevice import android.hardware.usb.UsbDeviceConnection import android.hardware.usb.UsbManager +import android.os.Build import android.os.Bundle import android.os.IBinder import android.util.Log import android.view.Menu import android.widget.Toast import androidx.activity.viewModels +import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.get @@ -43,6 +45,7 @@ open class HemocubeActivity : AppCompatActivity() { private val TAG = "HemoCube" private val broadcastReceiver = object : BroadcastReceiver() { + @RequiresApi(Build.VERSION_CODES.O) override fun onReceive(context: Context, intent: Intent) { synchronized(this) { @@ -81,6 +84,7 @@ open class HemocubeActivity : AppCompatActivity() { } + @RequiresApi(Build.VERSION_CODES.O) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityHemocubeBinding.inflate(layoutInflater) @@ -105,6 +109,7 @@ open class HemocubeActivity : AppCompatActivity() { } } + @RequiresApi(Build.VERSION_CODES.O) open fun connectUsb(permissionGranted: Boolean) { Log.d(TAG, "connectUsb() called, permission variable = $permissionGranted") val manager = getSystemService(Context.USB_SERVICE) as UsbManager @@ -125,32 +130,40 @@ open class HemocubeActivity : AppCompatActivity() { } - @SuppressLint("MutableImplicitPendingIntent") + @RequiresApi(Build.VERSION_CODES.O) + @SuppressLint("UnspecifiedImmutableFlag") private fun requestUserPermission(manager: UsbManager, device: UsbDevice) { val mPendingIntent: PendingIntent - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { - mPendingIntent = PendingIntent.getBroadcast( - this, 0, Intent(Constants.HEMOCUBE_USB_PERMISSION), PendingIntent.FLAG_MUTABLE - ) - } else { - mPendingIntent = PendingIntent.getBroadcast( - this, - 0, - Intent(Constants.HEMOCUBE_USB_PERMISSION), + val pendingIntentFlags = when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + PendingIntent.FLAG_IMMUTABLE + } + else -> { PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE - ) + } } + mPendingIntent = PendingIntent.getBroadcast( + this, + 0, + Intent(Constants.HEMOCUBE_USB_PERMISSION), + pendingIntentFlags + ) + val filter = IntentFilter(Constants.HEMOCUBE_USB_PERMISSION) - registerReceiver(broadcastReceiver, filter) + registerReceiver(broadcastReceiver, filter, RECEIVER_EXPORTED) + + // Request permission manager.requestPermission(device, mPendingIntent) } + fun setupService() { val intent = Intent(this, UsbService::class.java) bindService(intent, connection, Context.BIND_AUTO_CREATE) } + @RequiresApi(Build.VERSION_CODES.O) open fun reconnectDevice() { mService.disconnect() unbindService(connection)