diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index cc32501..fb1906a 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -267,13 +267,16 @@ class HomeFragment : Fragment() { var password = sharedPreference.getString(Constants.DEVICE_PASSWORD_API, "").toString() var userID = sharedPreference.getString(Constants.DEVICE_ID_API, "").toString() deviceId = sharedPreference.getString(Constants.DEVICE_ID, "").toString() - - if (!isTokenAvailable) { - if(userID.isNotEmpty() || password.isNotEmpty()) { - if(isTokenExpired(accessToken)) { - hemoCubeViewModel.login(createLoginRequestData(userID, password)) - } - } + if(userID.isNotEmpty() && password.isNotEmpty()) { + if (!isTokenAvailable) { + if(isTokenExpired(accessToken)) { + hemoCubeViewModel.login(createLoginRequestData(userID, password)) + } + }else{ + isTokenAvailable = true + hemoCubeViewModel.startPeriodicCheckUpdate() + hemoCubeViewModel.checkUpdate(createCheckUpdateRequestData()) + } } else if (userID.isEmpty() && password.isEmpty() && deviceId.isNotEmpty()) { fetchDeviceCredentials() } else { @@ -288,9 +291,8 @@ class HomeFragment : Fragment() { when (response) { is Result.Success -> { updateTokens(response) + response.data.data?.accessToken isTokenAvailable = true - hemoCubeViewModel.startPeriodicCheckUpdate() - hemoCubeViewModel.checkUpdate(createCheckUpdateRequestData()) } is Result.Error -> { 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 ca5edf2..aff99fc 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) { @@ -82,6 +85,7 @@ open class HemocubeActivity : AppCompatActivity() { super.attachBaseContext(newBase) } + @RequiresApi(Build.VERSION_CODES.O) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityHemocubeBinding.inflate(layoutInflater) @@ -106,6 +110,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)