new 124 version
This commit is contained in:
@@ -1,13 +1,51 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "630821402019",
|
||||
"project_id": "iocl-iisc",
|
||||
"storage_bucket": "iocl-iisc.appspot.com"
|
||||
"project_number": "243503501547",
|
||||
"project_id": "iocl-iisc-hpos",
|
||||
"storage_bucket": "iocl-iisc-hpos.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:630821402019:android:ed56bae066ac32b51dd616",
|
||||
"mobilesdk_app_id": "1:243503501547:android:f17de652a3524d047feeae",
|
||||
"android_client_info": {
|
||||
"package_name": "com.iocl_iisc.hposqc"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBPxgcDkZfZMr8cFrkMWkVf1a-MstzWC1k"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": []
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:243503501547:android:e1bb0f338c8448dd7feeae",
|
||||
"android_client_info": {
|
||||
"package_name": "in.sminnovations.hposregistration.iocl"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBPxgcDkZfZMr8cFrkMWkVf1a-MstzWC1k"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": []
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:243503501547:android:18b8b33b2dc3776d7feeae",
|
||||
"android_client_info": {
|
||||
"package_name": "in.sminnovations.hpostesting.iocl"
|
||||
}
|
||||
@@ -15,7 +53,7 @@
|
||||
"oauth_client": [],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyABIdxI89eTZ8BqU2cIoJOgJ1lS1cFLCtQ"
|
||||
"current_key": "AIzaSyBPxgcDkZfZMr8cFrkMWkVf1a-MstzWC1k"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
|
||||
@@ -1066,8 +1066,8 @@ object Constants {
|
||||
),
|
||||
)
|
||||
|
||||
const val INCUBATION_TIME_MIN = 0
|
||||
const val INCUBATION_TIME_MAX = 1400
|
||||
const val INCUBATION_TIME_MIN = 15
|
||||
const val INCUBATION_TIME_MAX = 30
|
||||
const val BATTERY_LEVEL_MIN = Int.MIN_VALUE
|
||||
|
||||
const val PQ_MODE = true
|
||||
@@ -1578,7 +1578,7 @@ object Constants {
|
||||
const val positiveForSickleCellMin10mm = 0.31
|
||||
const val positiveForSickleCellMax10mm = 0.43
|
||||
const val sickleCellDiseaseMin10mm = 0.43
|
||||
const val sickleCellDiseaseMax10mm = 1.0
|
||||
const val sickleCellDiseaseMax10mm = 0.7
|
||||
//Hemocube for 2mm
|
||||
const val positiveBoderLine2mm1 = 0.8
|
||||
const val positiveBoderLine2mm2 = 1.1
|
||||
@@ -1593,7 +1593,7 @@ object Constants {
|
||||
const val positiveForSickleCellMin2mm = 0.31
|
||||
const val positiveForSickleCellMax2mm = 0.45
|
||||
const val sickleCellDiseaseMin2mm = 0.45
|
||||
const val sickleCellDiseaseMax2mm = 1.0
|
||||
const val sickleCellDiseaseMax2mm = 0.7
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -38,6 +38,8 @@ object DataHolder {
|
||||
var selectedTest: UserData? = null
|
||||
var hemoCubeTestData: HemoCubeTestData? = null
|
||||
var kitSerial: String = ""
|
||||
var centerName: String = ""
|
||||
var district: String = ""
|
||||
var location: UserData.Location? = null
|
||||
var testExp: Boolean = true
|
||||
var hemocubeResult: Double? = null
|
||||
|
||||
@@ -107,5 +107,7 @@ data class HemoCubeTestData(
|
||||
var volume: String? = "",
|
||||
var isCSVCreated: Boolean = false,
|
||||
var labName: String? = "",
|
||||
var cuvetteSize: String? = ""
|
||||
var cuvetteSize: String? = "",
|
||||
var district: String? = "",
|
||||
var centerName: String? = ""
|
||||
)
|
||||
|
||||
@@ -75,7 +75,7 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
||||
}
|
||||
Toast.makeText(this, "Selected cuvette size: 2mm", Toast.LENGTH_SHORT).show()
|
||||
binding.nameEditText.setText(contents)
|
||||
}else if(contents.contains("SC-2-D10/")){
|
||||
}else if(contents.contains("SMI/SC-2-D10/")){
|
||||
with(sharedPreference.edit()) {
|
||||
putString(Constants.CUVETTE_SIZE, "10mm")
|
||||
apply()
|
||||
@@ -178,10 +178,6 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
||||
// Optionally, show a user-friendly error message to the user
|
||||
// Toast.makeText(applicationContext, "An error occurred", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
|
||||
binding.nameEditText.setText("SMI/SC/")
|
||||
|
||||
setSupportActionBar(binding.toolbar)
|
||||
|
||||
binding.btnScanNow.setOnClickListener {
|
||||
@@ -198,7 +194,7 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
||||
apply()
|
||||
}
|
||||
Toast.makeText(this, "Selected cuvette size: 2mm", Toast.LENGTH_SHORT).show()
|
||||
}else if(serialNumber.contains("SC-2-D10/")){
|
||||
}else if(serialNumber.contains("SMI/SC-2-D10/")){
|
||||
with(sharedPreference.edit()) {
|
||||
putString(Constants.CUVETTE_SIZE, "10mm")
|
||||
apply()
|
||||
@@ -322,8 +318,17 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
||||
}
|
||||
|
||||
private fun isSerialValid(s: String): Boolean {
|
||||
if (s.length != 17) {
|
||||
binding.nameEditText.error = getString(R.string.invalid_kit)
|
||||
if (s.contains("SMI/SC/")) {
|
||||
if(s.length != 17){
|
||||
binding.nameEditText.error = getString(R.string.invalid_kit)
|
||||
return false
|
||||
}
|
||||
}else if(s.contains("SMI/SC-2-D10/")){
|
||||
if(s.length != 27){
|
||||
binding.nameEditText.error = "Invalid Kit Serial Number, correct example SMI/SC-2-D10/000000/000/000"
|
||||
return false
|
||||
}
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -113,23 +113,22 @@ class OfflineUserListAdapter(private val view: View, private val batLevel: Int,p
|
||||
view.context.getString(R.string.incubation_not_completed),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
} else
|
||||
if (isBetween15And30Minutes(userList.incubationTime) > Constants.INCUBATION_TIME_MAX) {
|
||||
Toast.makeText(
|
||||
view.context,
|
||||
view.context.getString(R.string.incubation_crossed_30_minutes),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
} else {
|
||||
DataHolder.selectedTest = UserData(
|
||||
} else if (isBetween15And30Minutes(userList.incubationTime) > Constants.INCUBATION_TIME_MAX) {
|
||||
Toast.makeText(
|
||||
view.context,
|
||||
view.context.getString(R.string.incubation_crossed_30_minutes),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
} else {
|
||||
DataHolder.selectedTest = UserData(
|
||||
sampleid = userList.sampleid,
|
||||
_id = userList._id,
|
||||
bloodGroup = userList.bloodGroup,
|
||||
incubationTime = userList.incubationTime
|
||||
)
|
||||
view.findNavController()
|
||||
)
|
||||
view.findNavController()
|
||||
.navigate(R.id.action_nav_home_to_mainActivity)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(
|
||||
view.context,
|
||||
|
||||
@@ -655,10 +655,9 @@ class HomeFragment : Fragment() {
|
||||
val version = pInfo.versionName
|
||||
var labname = sharedPreference.getString(Constants.LABNAME,"")
|
||||
return LoginRequest(
|
||||
password = password, serialNumber = userID, username = userID, version = version, lab = labname
|
||||
latitude = DataHolder.location!!.latitude.toString(), longitude = DataHolder.location!!.longitude.toString(), location = DataHolder.location.toString(), password = password, serialNumber = userID, username = userID, version = version, lab = labname
|
||||
)
|
||||
}//latitude = DataHolder.location!!.latitude.toString(), longitude = DataHolder.location!!.longitude.toString(), location = DataHolder.location.toString()
|
||||
|
||||
}
|
||||
private fun createCheckUpdateRequestData(): CheckUpdateRequest {
|
||||
val pInfo = requireActivity().packageManager.getPackageInfo(
|
||||
requireActivity().packageName, 0
|
||||
@@ -1087,15 +1086,15 @@ class HomeFragment : Fragment() {
|
||||
// dialog.dismiss()
|
||||
// }
|
||||
|
||||
hemoCubeViewModel.allKitTestData.observe(viewLifecycleOwner) { kitDataList ->
|
||||
kitDataList.forEach { userData ->
|
||||
if (!userData.localFlag) {
|
||||
userData.localFlag = true
|
||||
hemoCubeViewModel.bulkAddResultKitTestToDb(userData)
|
||||
}
|
||||
}
|
||||
dialog.dismiss()
|
||||
}
|
||||
// hemoCubeViewModel.allKitTestData.observe(viewLifecycleOwner) { kitDataList ->
|
||||
// kitDataList.forEach { userData ->
|
||||
// if (!userData.localFlag) {
|
||||
// userData.localFlag = true
|
||||
// hemoCubeViewModel.bulkAddResultKitTestToDb(userData)
|
||||
// }
|
||||
// }
|
||||
// dialog.dismiss()
|
||||
// }
|
||||
}
|
||||
|
||||
private fun downloadLocalDBData(dialog: DialogInterface) {
|
||||
|
||||
@@ -34,6 +34,7 @@ import androidx.annotation.RequiresApi
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.example.hpostesting.data.constant.Constants
|
||||
import com.example.hpostesting.data.constant.DataHolder
|
||||
import com.example.hpostesting.util.AppInitializer
|
||||
import `in`.sminnovations.hpostesting.R
|
||||
import `in`.sminnovations.hpostesting.databinding.FragmentLoginBinding
|
||||
@@ -140,6 +141,14 @@ class LoginFragment : Fragment() {
|
||||
}
|
||||
private fun validateCredentials(username: String, password: String): Boolean {
|
||||
var storedPassword = secureStorage.getPassword()
|
||||
// if (!checkUserName(binding.etName.text.toString())) {
|
||||
// binding.etName.error = "Name field can't be empty or less than 3 characters"
|
||||
// return false
|
||||
// }
|
||||
if (!checkCenterName(binding.centerName.text.toString())) {
|
||||
binding.centerName.error = "Center name can't be empty or less than 3 characters"
|
||||
return false
|
||||
}
|
||||
if(username == "ADMIN"){
|
||||
storedPassword = secureStorage.getAdminPassword()
|
||||
}
|
||||
@@ -156,6 +165,8 @@ class LoginFragment : Fragment() {
|
||||
putString(Constants.USER_ID, userId)
|
||||
apply()
|
||||
}
|
||||
DataHolder.centerName = binding.centerName.text.toString()
|
||||
DataHolder.district = binding.etDistrict.text.toString()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
@@ -283,5 +294,12 @@ class LoginFragment : Fragment() {
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
private fun checkUserName(userName: String): Boolean {
|
||||
return userName.isNotEmpty() && userName.length >= 3
|
||||
}
|
||||
|
||||
private fun checkCenterName(centerName: String): Boolean {
|
||||
return centerName.isNotEmpty() && centerName.length >= 3
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ class HemoCubeFragment : Fragment() {
|
||||
if (isBufferValueAvailable()){
|
||||
binding.btnPlacebuffer.apply {
|
||||
setBackgroundColor(Color.GREEN) // Set button background color to green
|
||||
text = "Fresh Buffer" // Change button text to "Buffer Exists"
|
||||
text = "Refresh Buffer" // Change button text to "Buffer Exists"
|
||||
}
|
||||
}else{
|
||||
binding.btnPlacebuffer.apply {
|
||||
@@ -896,11 +896,12 @@ class HemoCubeFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
fun handleBackButtonPress() {
|
||||
if (isTestOngoing) {
|
||||
fun handleBackButtonPress(): Boolean {
|
||||
return if (isTestOngoing) {
|
||||
showToast(R.string.test_go_noback)
|
||||
true // Indicate that the back press was handled
|
||||
} else {
|
||||
activity?.onBackPressed()
|
||||
false // Indicate that the back press was not handled
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -415,7 +415,8 @@ class HemoCubeViewModel @Inject constructor(
|
||||
testDetails?.filter = DataHolder.hemoCubeTestData?.filter
|
||||
testDetails?.labName = DataHolder.hemoCubeTestData?.labName
|
||||
testDetails?.cuvetteSize = DataHolder.hemoCubeTestData?.cuvetteSize
|
||||
|
||||
testDetails?.centerName = DataHolder.centerName
|
||||
testDetails?.district = DataHolder.district
|
||||
}
|
||||
|
||||
private fun addResultTestToDb() {
|
||||
@@ -488,6 +489,7 @@ class HemoCubeViewModel @Inject constructor(
|
||||
when (repository.addTestToDatabase(userData)) {
|
||||
is Response.Success -> {
|
||||
fireBaseBulkUpload.postValue("Success")
|
||||
userData.localFlag = true
|
||||
updateLocalFlag(userData._id)
|
||||
}
|
||||
|
||||
|
||||
@@ -196,14 +196,25 @@ open class HemocubeActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
|
||||
override fun onBackPressed() {
|
||||
val fragment = supportFragmentManager.findFragmentById(R.id.fghemocube)
|
||||
if (fragment is HemoCubeFragment) {
|
||||
fragment.handleBackButtonPress()
|
||||
} else {
|
||||
super.onBackPressed()
|
||||
// override fun onBackPressed() {
|
||||
// val fragment = supportFragmentManager.findFragmentById(R.id.fghemocube)
|
||||
// if (fragment is HemoCubeFragment) {
|
||||
// fragment.handleBackButtonPress()
|
||||
// } else {
|
||||
// super.onBackPressed()
|
||||
// }
|
||||
// }
|
||||
override fun onBackPressed() {
|
||||
val fragment = supportFragmentManager.findFragmentById(R.id.fghemocube)
|
||||
if (fragment is HemoCubeFragment) {
|
||||
if (fragment.handleBackButtonPress()) {
|
||||
// If the fragment handled the back press, return to avoid calling super.onBackPressed
|
||||
return
|
||||
}
|
||||
}
|
||||
// If the fragment did not handle the back press, call the superclass method
|
||||
super.onBackPressed()
|
||||
}
|
||||
|
||||
fun onErrorReported(msg: String) {
|
||||
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
android:id="@+id/name_edit_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLength="17"
|
||||
android:maxLength="27"
|
||||
android:inputType="text"
|
||||
android:hint="@string/serial_number" />
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_title" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/et_aadharID"
|
||||
android:id="@+id/et_login"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -77,7 +77,25 @@
|
||||
android:inputType="textCapCharacters"
|
||||
android:maxLength="13" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_name"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/et_login">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/et_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLength="24"
|
||||
android:hint="Device user name" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/et_centerName"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||
@@ -86,7 +104,46 @@
|
||||
android:layout_marginTop="16dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/et_aadharID">
|
||||
app:layout_constraintTop_toBottomOf="@id/til_name">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/centerName"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLength="24"
|
||||
android:hint="Center name"
|
||||
android:inputType="text" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_district"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/et_centerName">
|
||||
|
||||
<AutoCompleteTextView
|
||||
android:id="@+id/et_district"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/district"
|
||||
android:inputType="none"
|
||||
android:text="Mysuru"
|
||||
android:labelFor="@id/til_district"
|
||||
app:simpleItems="@array/district" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/et_password"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/til_district">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/password"
|
||||
@@ -104,9 +161,10 @@
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="@string/login"
|
||||
app:cornerRadius="16dp"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/et_centerName" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/et_password" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
20
app/src/main/res/values-hi/arrays.xml
Normal file
20
app/src/main/res/values-hi/arrays.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ // Copyright (c) 2024 ShanMukha Innovations Pvt. Ltd. All rights reserved.
|
||||
~ // Notice: All information contained herein is, and remains
|
||||
~ // the property of ShanMukha Innovations Pvt. Ltd. and its suppliers,
|
||||
~ // if any. The intellectual and technical concepts contained
|
||||
~ // herein are proprietary to ShanMukha Innovations Pvt. Ltd.
|
||||
~ // and its suppliers and may be covered by Indian and Foreign Patents,
|
||||
~ // patents in process, and are protected by trade secret or copyright law.
|
||||
~ // Dissemination of this information or reproduction of this material
|
||||
~ // is strictly forbidden unless prior written permission is obtained
|
||||
~ // from ShanMukha Innovations Pvt. Ltd.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<string-array name="district">
|
||||
<item>Mysuru</item>
|
||||
<item>Kodagu</item>
|
||||
<item>Chamarajanagar</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
20
app/src/main/res/values-kn/arrays.xml
Normal file
20
app/src/main/res/values-kn/arrays.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ // Copyright (c) 2024 ShanMukha Innovations Pvt. Ltd. All rights reserved.
|
||||
~ // Notice: All information contained herein is, and remains
|
||||
~ // the property of ShanMukha Innovations Pvt. Ltd. and its suppliers,
|
||||
~ // if any. The intellectual and technical concepts contained
|
||||
~ // herein are proprietary to ShanMukha Innovations Pvt. Ltd.
|
||||
~ // and its suppliers and may be covered by Indian and Foreign Patents,
|
||||
~ // patents in process, and are protected by trade secret or copyright law.
|
||||
~ // Dissemination of this information or reproduction of this material
|
||||
~ // is strictly forbidden unless prior written permission is obtained
|
||||
~ // from ShanMukha Innovations Pvt. Ltd.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<string-array name="district">
|
||||
<item>Mysuru</item>
|
||||
<item>Kodagu</item>
|
||||
<item>Chamarajanagar</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -25,5 +25,10 @@
|
||||
<item>ka</item>
|
||||
<!-- Use language codes (e.g., en, kn) as values -->
|
||||
</string-array>
|
||||
<string-array name="district">
|
||||
<item>Mysuru</item>
|
||||
<item>Kodagu</item>
|
||||
<item>Chamarajanagar</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user