Counselling app - fixed issues related settings fragment

This commit is contained in:
Mariya
2024-01-26 13:52:48 +05:30
parent 659d56123e
commit 3c0e9bf067
27 changed files with 318 additions and 154 deletions

View File

@@ -57,6 +57,7 @@ android {
dependencies {
implementation "com.google.dagger:hilt-android:2.46"
implementation 'androidx.fragment:fragment:1.6.2'
kapt "com.google.dagger:hilt-android-compiler:2.46"
implementation 'com.google.dagger:hilt-android:2.46'
kapt 'com.google.dagger:hilt-android-compiler:2.46'

View File

@@ -1,14 +0,0 @@
package com.example.hpostesting.data.constant
enum class HemoCubeCommands(val command: String) {
startBuffer("B\r"),
AUTO_DAC_COMMAND("C\r"),
runDiagnostics("D\r"),
startSample("S\r"),
PRINT_COMMAND("P\r"),
getDeviceId("I\r"),
FIRST_GAIN_COMMAND("T\r"),
SECOND_GAIN_COMMAND("U\r"),
THIRD_GAIN_COMMAND("V\r"),
FORTH_GAIN_COMMAND("W\r"),
}

View File

@@ -1,4 +1,4 @@
package com.example.hpostesting.data.constant
package com.smi.counselling.data.constant
import android.content.Context
import android.content.SharedPreferences

View File

@@ -1,12 +0,0 @@
package com.example.hpostesting.data.constant
enum class TestRightCommands(val command: String) {
led2Set50("led2 50\r"),
led2Set100("led2 100\r"),
read("read\r"),
autoset("autoset\r"),
run("run\r"),
printInRange("print 239 339\r"),
printAll("print\r"),
testByEnter("\n\r")
}

View File

@@ -1,24 +0,0 @@
package com.example.hpostesting.data.dao
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.example.hpostesting.data.model.patient.DeviceData
import com.example.hpostesting.data.model.patient.HemoCubeTestData
import com.example.hpostesting.data.model.patient.UserData
@Dao
interface DeviceDao {
@Query("SELECT * from device_table")
fun getAll(): LiveData<List<HemoCubeTestData>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(deviceData: DeviceData)
@Query("SELECT * FROM device_table WHERE deviceId = :id")
suspend fun getUserByID(id: String): HemoCubeTestData
@Query("DELETE FROM device_table WHERE deviceId = :id")
suspend fun deleteById(id: String)
}

View File

@@ -3,9 +3,11 @@ package com.smi.counselling.data.dashboard
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.navigation.ui.AppBarConfiguration
import com.example.hpostesting.data.constant.LanguageManager
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.smi.counselling.R
import com.smi.counselling.data.constant.LanguageManager
import com.smi.counselling.databinding.ActivityDashboardBinding
import dagger.hilt.android.AndroidEntryPoint
@@ -23,13 +25,34 @@ class DashboardActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
binding = ActivityDashboardBinding.inflate(layoutInflater)
setContentView(binding.root)
moveToNext()
setSupportActionBar(binding.appBarDashboard.toolbar)
// Load the default fragment (e.g., HomeFragment)
loadFragment(HomeFragment())
// Set up the BottomNavigationView
val bottomNavigationView: BottomNavigationView = findViewById(R.id.bottomNavigationView)
bottomNavigationView.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.navigation_home -> loadFragment(HomeFragment())
R.id.navigation_digital_card -> loadFragment(DigitalCardFragment())
R.id.navigation_settings -> loadFragment(Settings())
}
true
}
}
private fun loadFragment(fragment: Fragment) {
// Check if the fragment is an instance of Settings
if (fragment is Settings) {
// Hide the toolbar
supportActionBar?.hide()
} else {
// Show the toolbar
supportActionBar?.show()
}
private fun moveToNext() {
if (supportFragmentManager.isDestroyed) return
supportFragmentManager.beginTransaction().replace(binding.fghemocube.id, HomeFragment())
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, fragment)
.commit()
}
override fun onResume() {

View File

@@ -3,7 +3,7 @@ package com.smi.counselling.data.dashboard
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.hpostesting.data.constant.LanguageManager
import com.smi.counselling.data.constant.LanguageManager
import com.smi.counselling.databinding.ActivityDigitalCardBinding
import dagger.hilt.android.AndroidEntryPoint

View File

@@ -12,7 +12,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.LiveData
import com.example.hpostesting.data.model.patient.HemoCubeTestData
import com.example.hpostesting.data.model.patient.toHemoCubeTestData
import com.google.firebase.crashlytics.ktx.crashlytics
@@ -20,6 +22,7 @@ import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import com.smi.counselling.R
import com.smi.counselling.data.DataHolder
import com.smi.counselling.data.NetworkStatusLiveData
import com.smi.counselling.databinding.FragmentDigitalCardBinding
import dagger.hilt.android.AndroidEntryPoint
import java.text.SimpleDateFormat
@@ -30,31 +33,30 @@ import java.util.Locale
@AndroidEntryPoint
class DigitalCardFragment : Fragment() {
private lateinit var binding: FragmentDigitalCardBinding
private val hemoCubeViewModel: HomeViewModel by activityViewModels()
private lateinit var sharedPreferences: SharedPreferences
private val testDetails = DataHolder.selectedTest?.toHemoCubeTestData()
private lateinit var _networkStatusLiveData: NetworkStatusLiveData
private val networkStatusLiveData: LiveData<Boolean>
get() = _networkStatusLiveData
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?,
): View {
binding = FragmentDigitalCardBinding.inflate(inflater, container, false)
sharedPreferences =
requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
requireContext().getSharedPreferences("COUNSELLING", Context.MODE_PRIVATE)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
}
@SuppressLint("SetTextI18n")
private fun initViews() {
hemoCubeViewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isConnected ->
_networkStatusLiveData = context?.let { NetworkStatusLiveData(it) } ?: return
networkStatusLiveData.observe(viewLifecycleOwner) { isConnected ->
if (isConnected) {
loadUserData()
@@ -180,5 +182,9 @@ class DigitalCardFragment : Fragment() {
}
}
override fun onResume() {
super.onResume()
(activity as? AppCompatActivity)?.supportActionBar?.title = "Digital Card Fragment"
}
}

View File

@@ -14,8 +14,10 @@ import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.LiveData
import com.bumptech.glide.Glide
import com.example.hpostesting.data.model.patient.HemoCubeTestData
import com.example.hpostesting.data.model.patient.toHemoCubeTestData
@@ -24,6 +26,7 @@ import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import com.smi.counselling.R
import com.smi.counselling.data.DataHolder
import com.smi.counselling.data.NetworkStatusLiveData
import com.smi.counselling.databinding.FragmentHomeBinding
import dagger.hilt.android.AndroidEntryPoint
import java.util.Locale
@@ -32,11 +35,13 @@ data class ClassificationResult(val imageResource: Int, val text: String,val ima
class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
private val hemoCubeViewModel: HomeViewModel by activityViewModels()
private lateinit var sharedPreference: SharedPreferences
private var maleresult: String = ""
private var femaleresult: String = ""
private val testDetails = DataHolder.selectedTest?.toHemoCubeTestData()
private lateinit var _networkStatusLiveData: NetworkStatusLiveData
private val networkStatusLiveData: LiveData<Boolean>
get() = _networkStatusLiveData
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -59,27 +64,15 @@ class HomeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_networkStatusLiveData = context?.let { NetworkStatusLiveData(it) } ?: return
hemoCubeViewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isConnected ->
networkStatusLiveData.observe(viewLifecycleOwner) { isConnected ->
if (isConnected) {
loadUserData()
}
binding.btnDigital.setOnClickListener {
val i = Intent(
requireContext().applicationContext, DigitalCardActivity::class.java
)
startActivity(i)
}
activity?.runOnUiThread {
binding.btnSubmit.setOnClickListener {
when {
@@ -368,16 +361,9 @@ class HomeFragment : Fragment() {
_binding = null
}
private fun setImageResource(context: Context, imageResource: Int) {
when (context) {
is Fragment -> {
val imageView = context.view?.findViewById<ImageView>(R.id.resultImage)
imageView?.setImageResource(imageResource)
}
else -> throw IllegalArgumentException("Unsupported context type")
}
override fun onResume() {
super.onResume()
(activity as? AppCompatActivity)?.supportActionBar?.title = "Counselling App"
}
}

View File

@@ -3,19 +3,12 @@ package com.smi.counselling.data.dashboard
import android.content.Context
import android.content.SharedPreferences
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.hpostesting.data.dao.HemoCubeDao
import com.example.hpostesting.data.dao.UserDao
import com.example.hpostesting.data.model.patient.DeviceData
import com.smi.counselling.data.NetworkStatusLiveData
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class HomeViewModel @Inject constructor(
private val hemoCubeDao: HemoCubeDao,
private val userdao: UserDao,
context: Context,
) : ViewModel() {
private val sharedPreference: SharedPreferences =
@@ -23,11 +16,6 @@ class HomeViewModel @Inject constructor(
// Get the device ID of the device you want to retrieve data for (e.g., the first device in the list)
private val _networkStatusLiveData = NetworkStatusLiveData(context)
val allUserData = hemoCubeDao.getAll()
val deviceData = MutableLiveData<DeviceData?>()
val networkStatusLiveData: LiveData<Boolean>
get() = _networkStatusLiveData
}

View File

@@ -0,0 +1,83 @@
package com.smi.counselling.data.dashboard
import android.content.Context
import android.content.pm.PackageManager
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import android.widget.Toolbar
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.smi.counselling.R
import com.smi.counselling.data.constant.LanguageManager
private var isLanguageChanged = false
class Settings : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
val preferenceScreen = preferenceManager.createPreferenceScreen(requireContext())
val languagePreference = ListPreference(requireContext())
languagePreference.key = "language_preference"
languagePreference.title = getString(R.string.app_language)
languagePreference.summary = getString(R.string.select_language)
languagePreference.entries = arrayOf("English", "Kannada", "Hindi")
languagePreference.entryValues = arrayOf("en", "kn", "hi")
languagePreference.setDefaultValue("en")
languagePreference.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _, newValue ->
val languageCode = newValue as String
updateLanguage(requireContext(), languageCode)
true
}
preferenceScreen.addPreference(languagePreference)
setPreferenceScreen(preferenceScreen)
// App Version Preference
val appVersionPreference = Preference(requireContext())
appVersionPreference.title = "App Version"
appVersionPreference.summary = getAppVersion(requireContext()) + " [ " + getAppEnvironment(requireContext()) + " ]"
preferenceScreen.addPreference(languagePreference)
preferenceScreen.addPreference(appVersionPreference)
setPreferenceScreen(preferenceScreen)
if (isLanguageChanged) {
Toast.makeText(requireContext(), R.string.language_update, Toast.LENGTH_SHORT).show()
}
}
private fun updateLanguage(context: Context, languageCode: String) {
LanguageManager.persistLanguagePreference(context, languageCode)
LanguageManager.setLocale(context, languageCode)
requireActivity().recreate() // Recreate activity to apply language changes
isLanguageChanged = true
}
private fun getAppVersion(context: Context): String {
return try {
val pInfo = context.packageManager.getPackageInfo(context.packageName, 0)
pInfo.versionName
} catch (e: PackageManager.NameNotFoundException) {
"N/A"
}
}
private fun getAppEnvironment(context: Context): String {
return try {
val pInfo = context.packageManager.getPackageInfo(context.packageName, 0)
pInfo.packageName.substringAfterLast('.')
} catch (e: PackageManager.NameNotFoundException) {
"N/A"
}
}
}

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,4H4C2.89,4 2.01,4.89 2.01,6L2,18c0,1.11 0.89,2 2,2h10v-2H4v-6h18V6C22,4.89 21.11,4 20,4zM20,8H4V6h16V8zM24,17v2h-3v3h-2v-3h-3v-2h3v-3h2v3H24z"/>
</vector>

View File

@@ -0,0 +1,6 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M18,11c0.7,0 1.37,0.1 2,0.29V9l-8,-6L4,9v12h7.68C11.25,20.09 11,19.08 11,18C11,14.13 14.13,11 18,11z"/>
<path android:fillColor="@android:color/white" android:pathData="M18,13c-2.76,0 -5,2.24 -5,5s2.24,5 5,5s5,-2.24 5,-5S20.76,13 18,13zM21,18.5h-2.5V21h-1v-2.5H15v-1h2.5V15h1v2.5H21V18.5z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"/>
</vector>

View File

@@ -3,11 +3,20 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/app_bar_dashboard"
layout="@layout/app_bar_dashboard"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<androidx.appcompat.widget.Toolbar
android:visibility="gone"
android:id="@+id/my_toolbar"
@@ -21,17 +30,25 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Use FrameLayout as the direct container for fragments -->
<FrameLayout
android:id="@+id/fghemocube"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/my_toolbar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottomNavigationView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<!-- NavHostFragment for navigation -->
</FrameLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:menu="@menu/bottomnavigationview"
tools:ignore="MissingConstraints"
style="@style/BottomNavigationViewStyle"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".data.dashboard.DashboardActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.HPOS.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/blue_app"
app:popupTheme="@style/Theme.HPOS.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
<!-- <com.google.android.material.floatingactionbutton.FloatingActionButton-->
<!-- android:id="@+id/fab"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="bottom|end"-->
<!-- android:layout_marginEnd="@dimen/fab_margin"-->
<!-- android:layout_marginBottom="16dp"-->
<!-- app:srcCompat="@android:drawable/ic_dialog_email" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -14,7 +14,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="24dp"
android:layout_marginTop="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -33,7 +33,7 @@
android:id="@+id/userCard"
android:layout_width="match_parent"
android:layout_height="350dp"
android:layout_marginTop="24dp"
android:layout_marginTop="70dp"
app:cardBackgroundColor="#C0C0C0"
app:cardCornerRadius="25dp"
app:cardElevation="0dp"

View File

@@ -5,20 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/counsellingcard"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:textStyle="bold"
android:textColor="@color/blue_app"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="Counselling Card" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/abhaid"
@@ -26,17 +13,16 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="40dp"
android:layout_marginTop="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintTop_toBottomOf="@id/counsellingcard">
app:layout_constraintTop_toTopOf="parent">
<AutoCompleteTextView
android:id="@+id/abhaidtext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Select Abha Id for Male"
android:hint="@string/select_abha_card_male"
android:inputType="text"
android:labelFor="@id/abhaid" />
</com.google.android.material.textfield.TextInputLayout>
@@ -57,7 +43,7 @@
android:id="@+id/abhaidtextfemale"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Select Abha Id for Female"
android:hint="@string/select_abha_card_female"
android:inputType="text"
android:labelFor="@id/abhaid" />
</com.google.android.material.textfield.TextInputLayout>
@@ -257,19 +243,4 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_submit"
app:srcCompat="@drawable/sicklecell_6" />
<Button
android:id="@+id/btn_digital"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="24dp"
android:clickable="false"
android:text="view Digital Card"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,24 @@
<!-- language_spinner_preference.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Select Language -->
<TextView
android:layout_marginTop="0dp"
android:id="@+id/textSelectLanguage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Select Language"
android:textStyle="bold"
android:textSize="18sp"/>
<!-- Language Spinner -->
<Spinner
android:id="@+id/languageSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"/>
</LinearLayout>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- res/layout/preference_category_with_margin.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@android:id/title"
style="?android:attr/preferenceCategoryStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:textColor="?android:attr/textColorSecondary"
android:textStyle="bold" />
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/top_margin"
android:paddingEnd="@dimen/top_margin" />
</LinearLayout>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_home"
android:title="Home"
android:icon="@drawable/home" />
<item
android:id="@+id/navigation_digital_card"
android:title="Digital Card"
android:icon="@drawable/digitalcard" />
<item
android:id="@+id/navigation_settings"
android:title="Settings"
android:icon="@drawable/settings" />
</menu>

View File

@@ -1,14 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_usb"
android:checkable="false"
android:enabled="true"
android:title="@string/usb_connection"
android:visible="true"
app:showAsAction="always" />
</menu>
</menu>

View File

@@ -13,6 +13,10 @@
<color name="blue_app_dark">#005db3</color>
<color name="blue_app_light">#e5f3ff</color>
<color name="colorPrimary">#2196F3</color> <!-- Replace with your desired color -->
<color name="colorPrimaryDark">#1976D2</color> <!-- Replace with a slightly darker shade of colorPrimary -->
<color name="primary">#4daaff</color>
<color name="primary_dark">#005db3</color>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="top_margin">60dp</dimen>
</resources>

View File

@@ -128,6 +128,9 @@
<string name="patient_details">Patient Details</string>
<string name="or">OR</string>
<string name="scan_abha_card">Scan ABHA\nCard</string>
<string name="select_abha_card_male">Select Abha Id for Male</string>
<string name="select_abha_card_female">Select Abha Id for Female</string>
<string name="list_of_patients">List Of Patients</string>
<string name="no_patient_records_found_to_test_please_add_one_from_below">No Patient Records \nFound to Test. \nPlease Add one from below.</string>
<string name="add">Add</string>

View File

@@ -50,6 +50,12 @@
<item name="android:translationY">-0.62sp</item>
</style>
<style name="BottomNavigationViewStyle">
<item name="android:background">@color/blue_app</item>
<item name="itemIconTint">@color/white</item>
<item name="itemTextColor">@color/white</item>
</style>
</resources>

View File

@@ -0,0 +1,16 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
android:title="Language Settings">
<!-- Spinner to select language -->
<Preference
android:key="language_preference"
android:title="Select Language"
android:summary="Choose your preferred language"
android:dialogTitle="Select Language"
android:widgetLayout="@layout/language_spinner_preference"/>
</PreferenceCategory>
</PreferenceScreen>