diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 31ff158..9da154a 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -9,12 +9,12 @@ plugins {
android {
namespace = "in.sminnovations.homocube"
- compileSdk = 33
+ compileSdk = 34
defaultConfig {
applicationId = "in.sminnovations.homocube"
minSdk = 24
- targetSdk = 33
+ targetSdk = 34
versionCode = 1
versionName = "1.0"
@@ -94,5 +94,8 @@ dependencies {
// Barcode scanner
implementation("com.journeyapps:zxing-android-embedded:4.3.0")
+ //USB
+ implementation("com.github.mik3y:usb-serial-for-android:3.5.1")
+
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a12e7dc..dcda3ce 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,8 +13,12 @@
android:supportsRtl="true"
android:theme="@style/Theme.HomoCube"
tools:targetApi="31">
+
diff --git a/app/src/main/java/in/sminnovations/homocube/data/Repository.kt b/app/src/main/java/in/sminnovations/homocube/data/Repository.kt
new file mode 100644
index 0000000..d0994e4
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/Repository.kt
@@ -0,0 +1,29 @@
+package `in`.sminnovations.homocube.data
+
+import androidx.lifecycle.LiveData
+import `in`.sminnovations.homocube.data.api.FirebaseAPI
+import `in`.sminnovations.homocube.data.dao.TestDao
+import `in`.sminnovations.homocube.data.model.Response
+import `in`.sminnovations.homocube.data.model.TestData
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class Repository @Inject constructor(
+ private val testDao: TestDao,
+ private val firebaseAPI: FirebaseAPI
+) {
+
+ val testData: LiveData> = testDao.getTestData()
+ suspend fun insertTestData(testData: TestData) {
+ testDao.insertTestData(testData)
+ }
+
+ suspend fun deleteTestDataByID(id: String) {
+ testDao.deleteTestDataByID(id)
+ }
+
+ suspend fun addTestDetails(testData: TestData): Response {
+ return firebaseAPI.addTestDetails(testData)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/data/api/FirebaseAPI.kt b/app/src/main/java/in/sminnovations/homocube/data/api/FirebaseAPI.kt
new file mode 100644
index 0000000..b43fc61
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/api/FirebaseAPI.kt
@@ -0,0 +1,23 @@
+package `in`.sminnovations.homocube.data.api
+
+import com.google.firebase.firestore.ktx.firestore
+import com.google.firebase.ktx.Firebase
+import `in`.sminnovations.homocube.data.model.Response
+import `in`.sminnovations.homocube.data.model.TestData
+import kotlinx.coroutines.tasks.await
+
+class FirebaseAPI {
+
+ private val patientCollection = Firebase.firestore.collection("patientData")
+
+ suspend fun addTestDetails(testData: TestData): Response {
+ return try {
+ val documentReference = patientCollection.document()
+ documentReference.set(testData).await()
+
+ Response.Success(documentReference.id)
+ } catch (e: Exception) {
+ Response.Error(e)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/data/constant/Constant.kt b/app/src/main/java/in/sminnovations/homocube/data/constant/Constant.kt
new file mode 100644
index 0000000..acd4b48
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/constant/Constant.kt
@@ -0,0 +1,6 @@
+package `in`.sminnovations.homocube.data.constant
+
+object Constant {
+
+ const val WRITE_TIMEOUT_MILLIS = 30000
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/data/constant/HemoCubeCommands.kt b/app/src/main/java/in/sminnovations/homocube/data/constant/HemoCubeCommands.kt
new file mode 100644
index 0000000..c2065b9
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/constant/HemoCubeCommands.kt
@@ -0,0 +1,8 @@
+package `in`.sminnovations.homocube.data.constant
+
+enum class HemoCubeCommands(val command: String) {
+ startBuffer("B\r"),
+ getBuffer("Q\r"),
+ startSample("S\r"),
+ getSample("R\r"),
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/data/dao/MyDatabase.kt b/app/src/main/java/in/sminnovations/homocube/data/dao/MyDatabase.kt
new file mode 100644
index 0000000..6489ec6
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/dao/MyDatabase.kt
@@ -0,0 +1,10 @@
+package `in`.sminnovations.homocube.data.dao
+
+import androidx.room.Database
+import androidx.room.RoomDatabase
+import `in`.sminnovations.homocube.data.model.TestData
+
+@Database(entities = [TestData::class], version = 1, exportSchema = false)
+abstract class MyDatabase : RoomDatabase() {
+ abstract fun userDao(): TestDao
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/data/dao/TestDao.kt b/app/src/main/java/in/sminnovations/homocube/data/dao/TestDao.kt
new file mode 100644
index 0000000..c8d6b49
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/dao/TestDao.kt
@@ -0,0 +1,20 @@
+package `in`.sminnovations.homocube.data.dao
+
+import androidx.lifecycle.LiveData
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.OnConflictStrategy
+import androidx.room.Query
+import `in`.sminnovations.homocube.data.model.TestData
+
+@Dao
+interface TestDao {
+ @Query("SELECT * from test_table")
+ fun getTestData(): LiveData>
+
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ suspend fun insertTestData(testData: TestData)
+
+ @Query("DELETE FROM test_table WHERE _id = :id")
+ suspend fun deleteTestDataByID(id: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/data/model/Response.kt b/app/src/main/java/in/sminnovations/homocube/data/model/Response.kt
new file mode 100644
index 0000000..b037777
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/model/Response.kt
@@ -0,0 +1,7 @@
+package `in`.sminnovations.homocube.data.model
+
+sealed class Response {
+ data class Success(val data: T) : Response()
+ data class Error(val exception: Exception) : Response()
+ class Loading : Response()
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/data/model/TestData.kt b/app/src/main/java/in/sminnovations/homocube/data/model/TestData.kt
new file mode 100644
index 0000000..ed5daf0
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/model/TestData.kt
@@ -0,0 +1,10 @@
+package `in`.sminnovations.homocube.data.model
+
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "test_table")
+data class TestData(
+ @PrimaryKey
+ val _id: String = ""
+)
diff --git a/app/src/main/java/in/sminnovations/homocube/data/model/UserData.kt b/app/src/main/java/in/sminnovations/homocube/data/model/UserData.kt
new file mode 100644
index 0000000..5e76a64
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/data/model/UserData.kt
@@ -0,0 +1,5 @@
+package `in`.sminnovations.homocube.data.model
+
+data class UserData (
+ val _id: String = ""
+)
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/domain/InternetConnectionLiveData.kt b/app/src/main/java/in/sminnovations/homocube/domain/InternetConnectionLiveData.kt
new file mode 100644
index 0000000..861c770
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/domain/InternetConnectionLiveData.kt
@@ -0,0 +1,58 @@
+package `in`.sminnovations.homocube.domain
+
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import androidx.lifecycle.LiveData
+
+class NetworkStatusLiveData(context: Context) : LiveData() {
+
+ private val connectivityManager: ConnectivityManager =
+ context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+
+ private val networkCallback = object : ConnectivityManager.NetworkCallback() {
+ override fun onAvailable(network: Network) {
+ postValue(true)
+ }
+
+ override fun onLost(network: Network) {
+ postValue(false)
+ }
+ }
+
+ override fun onActive() {
+ super.onActive()
+ postValue(isNetworkAvailable())
+ registerNetworkCallback()
+ }
+
+ override fun onInactive() {
+ super.onInactive()
+ unregisterNetworkCallback()
+ }
+
+ private fun registerNetworkCallback() {
+ val networkRequest = NetworkRequest.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+ .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
+ .build()
+
+ connectivityManager.registerNetworkCallback(networkRequest, networkCallback)
+ }
+
+ private fun unregisterNetworkCallback() {
+ connectivityManager.unregisterNetworkCallback(networkCallback)
+ }
+
+ private fun isNetworkAvailable(): Boolean {
+ val network = connectivityManager.activeNetwork
+ val networkCapabilities = connectivityManager.getNetworkCapabilities(network)
+ return networkCapabilities != null &&
+ networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
+ networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/di/AppModule.kt b/app/src/main/java/in/sminnovations/homocube/presentation/di/AppModule.kt
new file mode 100644
index 0000000..c2a3786
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/di/AppModule.kt
@@ -0,0 +1,45 @@
+package `in`.sminnovations.homocube.presentation.di
+
+import android.app.Application
+import android.content.Context
+import androidx.room.Room
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
+import `in`.sminnovations.homocube.data.api.FirebaseAPI
+import `in`.sminnovations.homocube.data.dao.MyDatabase
+import `in`.sminnovations.homocube.data.dao.TestDao
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object AppModule {
+
+ @Provides
+ @Singleton
+ fun provideMyDatabase(@ApplicationContext context: Context): MyDatabase {
+ return Room.databaseBuilder(
+ context, MyDatabase::class.java, "my_database"
+ ).build()
+ }
+
+ @Provides
+ @Singleton
+ fun provideMyDao(myDatabase: MyDatabase): TestDao {
+ return myDatabase.userDao()
+ }
+
+ @Provides
+ @Singleton
+ fun provideFirebaseAPI(): FirebaseAPI {
+ return FirebaseAPI()
+ }
+
+ @Provides
+ @Singleton
+ fun provideContext(application: Application): Context {
+ return application.applicationContext
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/services/USBService.kt b/app/src/main/java/in/sminnovations/homocube/presentation/services/USBService.kt
new file mode 100644
index 0000000..672ccd6
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/services/USBService.kt
@@ -0,0 +1,75 @@
+package `in`.sminnovations.homocube.presentation.services
+
+import android.app.Service
+import android.content.Intent
+import android.hardware.usb.UsbDeviceConnection
+import android.os.Binder
+import android.os.IBinder
+import com.hoho.android.usbserial.driver.UsbSerialDriver
+import com.hoho.android.usbserial.driver.UsbSerialPort
+import com.hoho.android.usbserial.util.SerialInputOutputManager
+import `in`.sminnovations.homocube.data.constant.Constant
+import `in`.sminnovations.homocube.data.constant.HemoCubeCommands
+import java.io.IOException
+
+class USBService : Service() {
+ private val binder = UsbServiceBinder()
+ private lateinit var mPort: UsbSerialPort
+ private var isUsbConnected = false
+
+ inner class UsbServiceBinder : Binder() {
+ fun getService(): USBService = this@USBService
+ }
+
+ override fun onBind(intent: Intent): IBinder {
+ return binder
+ }
+
+ var listener: UsbServiceListener? = null
+ private var bus: UsbServiceListener? = null
+
+ fun connect(driver: UsbSerialDriver, connection: UsbDeviceConnection) {
+ mPort = driver.ports[0] // Most devices have just one port (port 0)
+ mPort.open(connection)
+ mPort.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE)
+ isUsbConnected = true
+
+ val usbIoManager = SerialInputOutputManager(mPort,
+ object : SerialInputOutputManager.Listener {
+ override fun onNewData(data: ByteArray?) {
+ listener?.onUsbRead(data)
+ }
+
+ override fun onRunError(e: Exception?) {
+ listener?.onUsbError(e)
+ }
+
+ })
+ usbIoManager.start()
+ }
+
+ fun disconnect() {
+ if (isUsbConnected) {
+ mPort.close()
+ isUsbConnected = false
+ }
+ }
+
+ fun listenToHemoCube(listener: UsbServiceListener) {
+ this.listener = listener
+ try {
+
+ } catch (e: IOException) {
+ listener.onUsbError(e)
+ }
+ }
+
+ fun sendAndListenToHemoCube(command: HemoCubeCommands, listener: UsbServiceListener) {
+ try {
+ this.bus = listener
+ mPort.write(command.command.toByteArray(), Constant.WRITE_TIMEOUT_MILLIS)
+ } catch (e: IOException) {
+ listener.onUsbError(e)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/services/UsbServiceListener.kt b/app/src/main/java/in/sminnovations/homocube/presentation/services/UsbServiceListener.kt
new file mode 100644
index 0000000..7d9e92c
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/services/UsbServiceListener.kt
@@ -0,0 +1,6 @@
+package `in`.sminnovations.homocube.presentation.services
+
+interface UsbServiceListener {
+ fun onUsbRead(data: ByteArray?)
+ fun onUsbError(e: Exception?)
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/ui/MainActivity.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/MainActivity.kt
similarity index 85%
rename from app/src/main/java/in/sminnovations/homocube/ui/MainActivity.kt
rename to app/src/main/java/in/sminnovations/homocube/presentation/ui/MainActivity.kt
index 077f23c..94eda22 100644
--- a/app/src/main/java/in/sminnovations/homocube/ui/MainActivity.kt
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/MainActivity.kt
@@ -1,4 +1,4 @@
-package `in`.sminnovations.homocube.ui
+package `in`.sminnovations.homocube.presentation.ui
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/adapter/UserListAdapter.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/adapter/UserListAdapter.kt
new file mode 100644
index 0000000..048568d
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/adapter/UserListAdapter.kt
@@ -0,0 +1,4 @@
+package `in`.sminnovations.homocube.presentation.ui.adapter
+
+class UserListAdapter() {
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/BaseFragment.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/BaseFragment.kt
new file mode 100644
index 0000000..525cc67
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/BaseFragment.kt
@@ -0,0 +1,23 @@
+package `in`.sminnovations.homocube.presentation.ui.fragment
+
+import android.view.View
+import android.widget.Button
+import androidx.fragment.app.Fragment
+
+open class BaseFragment: Fragment() {
+ fun hideProgressBar(view: View) {
+ view.visibility = View.GONE
+ }
+
+ fun showProgressBar(view: View) {
+ view.visibility = View.VISIBLE
+ }
+
+ fun markButtonDisable(button: Button) {
+ button.isEnabled = false
+ }
+
+ fun markButtonEnable(button: Button) {
+ button.isEnabled = true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/KitInformationFragment.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/KitInformationFragment.kt
new file mode 100644
index 0000000..fe5b399
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/KitInformationFragment.kt
@@ -0,0 +1,28 @@
+package `in`.sminnovations.homocube.presentation.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import `in`.sminnovations.homocube.databinding.FragmentUserListBinding
+
+
+class KitInformationFragment : Fragment() {
+
+ private var _binding: FragmentUserListBinding? = null
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentUserListBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/LoginFragment.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/LoginFragment.kt
new file mode 100644
index 0000000..ad9c680
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/LoginFragment.kt
@@ -0,0 +1,31 @@
+package `in`.sminnovations.homocube.presentation.ui.fragment
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import `in`.sminnovations.homocube.databinding.FragmentLoginBinding
+
+class LoginFragment : Fragment() {
+
+ private var _binding: FragmentLoginBinding? = null
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentLoginBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/ResultFragment.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/ResultFragment.kt
new file mode 100644
index 0000000..42dfa9e
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/ResultFragment.kt
@@ -0,0 +1,31 @@
+package `in`.sminnovations.homocube.presentation.ui.fragment
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import `in`.sminnovations.homocube.databinding.FragmentResultBinding
+
+class ResultFragment : Fragment() {
+
+ private var _binding: FragmentResultBinding? = null
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentResultBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/SelectTestFragment.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/SelectTestFragment.kt
new file mode 100644
index 0000000..db71c62
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/SelectTestFragment.kt
@@ -0,0 +1,27 @@
+package `in`.sminnovations.homocube.presentation.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import `in`.sminnovations.homocube.databinding.FragmentSelectTestBinding
+
+class SelectTestFragment : Fragment() {
+
+ private var _binding: FragmentSelectTestBinding? = null
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentSelectTestBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/TestFragment.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/TestFragment.kt
new file mode 100644
index 0000000..d7b67c1
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/TestFragment.kt
@@ -0,0 +1,32 @@
+package `in`.sminnovations.homocube.presentation.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import `in`.sminnovations.homocube.databinding.FragmentTestBinding
+
+class TestFragment : Fragment() {
+
+ private var _binding: FragmentTestBinding? = null
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentTestBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/UserListFragment.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/UserListFragment.kt
new file mode 100644
index 0000000..6eecebb
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/fragment/UserListFragment.kt
@@ -0,0 +1,43 @@
+package `in`.sminnovations.homocube.presentation.ui.fragment
+
+import android.content.Context
+import android.content.SharedPreferences
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import `in`.sminnovations.homocube.databinding.FragmentUserListBinding
+import `in`.sminnovations.homocube.presentation.ui.adapter.UserListAdapter
+
+class UserListFragment : BaseFragment() {
+
+ private var _binding: FragmentUserListBinding? = null
+ private val binding get() = _binding!!
+
+ private lateinit var sharedPreference: SharedPreferences
+
+ private val adapter = UserListAdapter()
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = FragmentUserListBinding.inflate(inflater, container, false)
+ sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ init()
+ }
+
+ private fun init() {
+
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/in/sminnovations/homocube/presentation/ui/viewmodels/MainViewModel.kt b/app/src/main/java/in/sminnovations/homocube/presentation/ui/viewmodels/MainViewModel.kt
new file mode 100644
index 0000000..a5a4ed1
--- /dev/null
+++ b/app/src/main/java/in/sminnovations/homocube/presentation/ui/viewmodels/MainViewModel.kt
@@ -0,0 +1,45 @@
+package `in`.sminnovations.homocube.presentation.ui.viewmodels
+
+import android.content.Context
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import dagger.hilt.android.lifecycle.HiltViewModel
+import `in`.sminnovations.homocube.data.Repository
+import `in`.sminnovations.homocube.data.model.Response
+import `in`.sminnovations.homocube.data.model.TestData
+import `in`.sminnovations.homocube.domain.NetworkStatusLiveData
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@HiltViewModel
+class MainViewModel @Inject constructor(
+ private val repository: Repository,
+ context: Context
+) : ViewModel(){
+
+ val fireBaseUpload = MutableLiveData>()
+
+ val allUserData = repository.testData
+
+ fun addDataToFirebase(testData: TestData) = viewModelScope.launch {
+ fireBaseUpload.postValue(Response.Loading())
+ repository.addTestDetails(testData).let {
+ fireBaseUpload.postValue(it)
+ }
+ }
+
+ fun insertTestData(testData: TestData) = viewModelScope.launch {
+ repository.insertTestData(testData)
+ }
+
+ fun deleteTestDataByID(userId: String) = viewModelScope.launch {
+ repository.deleteTestDataByID(id = userId)
+ }
+
+ private val _networkStatusLiveData = NetworkStatusLiveData(context)
+ val networkStatusLiveData: LiveData
+ get() = _networkStatusLiveData
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 14211f4..a508f7c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.MainActivity">
+ tools:context=".presentation.ui.MainActivity">
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml
new file mode 100644
index 0000000..49cb0c5
--- /dev/null
+++ b/app/src/main/res/layout/fragment_login.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml
new file mode 100644
index 0000000..2cc16e9
--- /dev/null
+++ b/app/src/main/res/layout/fragment_result.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_select_test.xml b/app/src/main/res/layout/fragment_select_test.xml
new file mode 100644
index 0000000..cc7c8ed
--- /dev/null
+++ b/app/src/main/res/layout/fragment_select_test.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_test.xml b/app/src/main/res/layout/fragment_test.xml
new file mode 100644
index 0000000..7a909b7
--- /dev/null
+++ b/app/src/main/res/layout/fragment_test.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_user_list.xml b/app/src/main/res/layout/fragment_user_list.xml
new file mode 100644
index 0000000..3e9239f
--- /dev/null
+++ b/app/src/main/res/layout/fragment_user_list.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f26c0ec..fc99b2e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,5 @@
HomoCube
+
+ Hello blank fragment
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index efc4d0b..a24d3ba 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Jul 31 21:35:38 IST 2023
+#Mon Aug 07 11:32:44 IST 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle.kts b/settings.gradle.kts
index d6d7165..490ea1c 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -10,9 +10,9 @@ dependencyResolutionManagement {
repositories {
google()
mavenCentral()
+ maven("https://jitpack.io")
}
}
rootProject.name = "HomoCube"
include(":app")
-
\ No newline at end of file