Merge branch 'LanguageTranslation' into 'main'

Merge multi-lingual support in app

See merge request sminnovations/hpos-registration-app!1
This commit is contained in:
Pritimay Sarkar
2023-11-30 09:04:42 +00:00
96 changed files with 6812 additions and 0 deletions

18
.gitignore vendored Normal file
View File

@@ -0,0 +1,18 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
/app/google-services.json
.externalNativeBuild
.cxx
local.properties
/.idea/misc.xml
/.idea/vcs.xml

1
.idea/.name generated Normal file
View File

@@ -0,0 +1 @@
HPOS Registration

6
.idea/compiler.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
</component>
</project>

21
.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="$USER_HOME$/andriod studio gradle/gradle-7.3" />
<option name="gradleJvm" value="jbr-17" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

6
.idea/kotlinc.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="1.8.22" />
</component>
</project>

1496
Login_Feature.patch Normal file

File diff suppressed because it is too large Load Diff

1
app/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

103
app/build.gradle Normal file
View File

@@ -0,0 +1,103 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'dagger.hilt.android.plugin'
id 'com.google.gms.google-services'
id 'androidx.navigation.safeargs.kotlin'
id 'kotlin-kapt'
id 'com.google.firebase.crashlytics'
}
android {
namespace 'in.sminnovations.hposregistration'
compileSdk 34
defaultConfig {
applicationId "in.sminnovations.hposregistration"
minSdk 26
targetSdk 34
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
buildFeatures {
viewBinding true
}
kotlinOptions {
jvmTarget = '17'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.10.1'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
// firebase
implementation("com.google.firebase:firebase-crashlytics-ktx")
implementation platform("com.google.firebase:firebase-bom:32.2.2")
implementation("com.google.firebase:firebase-analytics-ktx")
implementation 'com.google.firebase:firebase-firestore-ktx'
implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.google.firebase:firebase-storage-ktx'
implementation 'com.firebaseui:firebase-ui-firestore:8.0.2'
implementation 'com.google.android.gms:play-services-auth:20.6.0'
// Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1'
// Coroutine Lifecycle Scopes
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1"
//Dagger - Hilt
implementation "com.google.dagger:hilt-android:2.46"
kapt "com.google.dagger:hilt-android-compiler:2.46"
kapt "androidx.hilt:hilt-compiler:1.0.0"
// Navigation Component
implementation "androidx.navigation:navigation-fragment-ktx:2.7.0"
implementation "androidx.navigation:navigation-ui-ktx:2.7.0"
// Retrofit + GSON
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
// Timber
implementation 'com.jakewharton.timber:timber:4.7.1'
// Activity KTX for viewModels()
implementation "androidx.activity:activity-ktx:1.7.2"
//image
implementation 'com.github.bumptech.glide:glide:4.13.2'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'
//Room
implementation "androidx.room:room-ktx:2.6.0-alpha03"
implementation "androidx.room:room-runtime:2.6.0-alpha03"
kapt ("androidx.room:room-compiler:2.6.0-alpha03")
// Barcode scanner
implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
}

113
app/google-services.json Normal file
View File

@@ -0,0 +1,113 @@
{
"project_info": {
"project_number": "650071678820",
"project_id": "hpos-af3cc",
"storage_bucket": "hpos-af3cc.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:650071678820:android:f1435a1c07f710036c6471",
"android_client_info": {
"package_name": "com.example.hposconsentform"
}
},
"oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:650071678820:android:7569c1cad4fc99916c6471",
"android_client_info": {
"package_name": "in.sminnovations.hposregistration"
}
},
"oauth_client": [
{
"client_id": "650071678820-70kp5jvjda4r5diqch2kn4lc40p4f42g.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "in.sminnovations.hposregistration",
"certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a"
}
},
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:650071678820:android:f96be19e5d43102b6c6471",
"android_client_info": {
"package_name": "in.sminnovations.hpostesting"
}
},
"oauth_client": [
{
"client_id": "650071678820-l87dnr0bdj95get0khgnvfv2an1k6ogq.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "in.sminnovations.hpostesting",
"certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a"
}
},
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}

21
app/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,24 @@
package com.example.hposregistration
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.example.hposregistration", appContext.packageName)
}
}

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name="com.example.hposregistration.HPOSRegistrationApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/hpos_icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/hpos_icon_round"
android:supportsRtl="true"
android:theme="@style/Theme.HPOSRegistration"
tools:targetApi="31">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="in.sminnovations.hposregistration.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<activity
android:name="com.example.hposregistration.ui.activities.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="portrait"
android:stateNotNeeded="true"
tools:replace="android:screenOrientation" />
</application>
</manifest>

View File

@@ -0,0 +1,7 @@
package com.example.hposregistration
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class HPOSRegistrationApplication: Application()

View File

@@ -0,0 +1,49 @@
package com.example.hposregistration.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.hposregistration.data.user.UserData
import `in`.sminnovations.hposregistration.databinding.UserItemViewBinding
class UserListOfflineAdapter(private val view: View) : RecyclerView.Adapter<UserListOfflineAdapter.CompanyViewHolder>() {
inner class CompanyViewHolder(val binding: UserItemViewBinding) :
RecyclerView.ViewHolder(binding.root)
private val differCallback = object : DiffUtil.ItemCallback<UserData>() {
override fun areItemsTheSame(oldItem: UserData, newItem: UserData): Boolean {
return oldItem.name == newItem.name
}
override fun areContentsTheSame(oldItem: UserData, newItem: UserData): Boolean {
return oldItem == newItem
}
}
val differ = AsyncListDiffer(this, differCallback)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CompanyViewHolder {
return CompanyViewHolder(
UserItemViewBinding
.inflate(LayoutInflater.from(parent.context), parent, false)
)
}
override fun getItemCount(): Int {
return differ.currentList.size
}
override fun onBindViewHolder(holder: CompanyViewHolder, position: Int) {
val userList = differ.currentList[position]
holder.binding.apply {
userName.text = userList.name
userId.text = userList._id
Glide.with(view).load(userList.userImageURL).into(userImage)
}
}
}

View File

@@ -0,0 +1,35 @@
package com.example.hposregistration.adapters
import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.hposregistration.data.user.UserData
import com.firebase.ui.firestore.FirestoreRecyclerAdapter
import com.firebase.ui.firestore.FirestoreRecyclerOptions
import `in`.sminnovations.hposregistration.databinding.UserItemViewBinding
class UserListOnlineAdapter(options: FirestoreRecyclerOptions<UserData>, private val view: View) :
FirestoreRecyclerAdapter<UserData, UserListOnlineAdapter.OrderItemViewHolder>(options) {
class OrderItemViewHolder(val binding: UserItemViewBinding) :
RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderItemViewHolder {
return OrderItemViewHolder(
UserItemViewBinding
.inflate(LayoutInflater.from(parent.context), parent, false)
)
}
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: OrderItemViewHolder, position: Int, model: UserData) {
holder.binding.apply {
userName.text = "Name: ${model.name}"
userId.text = "User ID: ${model._id}"
Glide.with(view).load(model.userImageURL).into(userImage)
}
}
}

View File

@@ -0,0 +1,11 @@
package com.example.hposregistration.dao
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.example.hposregistration.data.user.UserData
@Database(entities = [UserData::class], version = 1, exportSchema = false)
abstract class MyDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}

View File

@@ -0,0 +1,23 @@
package com.example.hposregistration.dao
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.example.hposregistration.data.user.UserData
@Dao
interface UserDao {
@Query("SELECT * from user_table")
fun getAll(): LiveData<List<UserData>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(userData: UserData)
@Query("SELECT * FROM user_table WHERE _id = :id")
suspend fun getUserByID(id: String): UserData
@Query("DELETE FROM user_table WHERE _id = :id")
suspend fun deleteById(id: String)
}

View File

@@ -0,0 +1,43 @@
package com.example.hposregistration.data
import com.example.hposregistration.data.user.UserData
object Constant {
fun String.fetchYOBFromDOB(): Int {
val startIndex = if (this.length >= 4) this.length - 4 else 0
return this.substring(startIndex).toInt()
}
fun String.mapToGender(): UserData.Gender {
return if (this.lowercase() == "m" || this.lowercase() == "male") {
UserData.Gender.MALE
} else if (this.lowercase() == "f" || this.lowercase() == "female") {
UserData.Gender.FEMALE
} else {
UserData.Gender.OTHER
}
}
const val USER_ID = "usernameId"
val STATICID = listOf(
"SMIREG1",
"SMIREG2",
"SMIREG3",
"SMIREG4",
"SMIREG5",
"SMIREG6",
"SMIREG7",
"SMIREG8",
"SMIREG9",
"SMIREG10",
"SMIREG11",
"SMIREG12",
"SMIREG13",
"SMIREG14",
"SMIREG15"
)
const val password = "SMI@12345"
}

View File

@@ -0,0 +1,58 @@
package com.example.hposregistration.data
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<Boolean>() {
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)
}
}

View File

@@ -0,0 +1,33 @@
package com.example.hposregistration.data
import androidx.lifecycle.LiveData
import com.example.hposregistration.dao.UserDao
import com.example.hposregistration.data.user.UserData
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class MainRepository @Inject constructor(
private val userDao: UserDao,
private val userFireBaseDao: com.example.hposregistration.network.UserDao
) {
val allUsers: LiveData<List<UserData>> = userDao.getAll()
suspend fun insert(userData: UserData){
userDao.insertAll(userData)
}
suspend fun getUserByID(id: String): UserData {
return userDao.getUserByID(id)
}
suspend fun deleteById(id: String) {
return userDao.deleteById(id)
}
suspend fun addDataToFirebase(userData: UserData): Response<String> {
return userFireBaseDao.addUserToDatabase(userData)
}
}

View File

@@ -0,0 +1,6 @@
package com.example.hposregistration.data
sealed class Response<out R> {
data class Success<out T>(val data: T) : Response<T>()
data class Error(val exception: Exception) : Response<Nothing>()
}

View File

@@ -0,0 +1,253 @@
package com.example.hposregistration.data
import com.example.hposregistration.data.aadhar.AadharCard
import com.example.hposregistration.data.aadhar.QrCodeException
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.math.BigInteger
import java.nio.charset.StandardCharsets
import java.util.LinkedList
import java.util.zip.GZIPInputStream
/**
* Class to decode scanned QRcode
*/
open class SecureQrCode(scanData: String?) {
private var emailMobilePresent = 0
private var imageStartIndex = 0
private var imageEndIndex = 0
private var decodedData: ArrayList<String>? = null
private var signature: String? = null
private var email: String? = null
private var mobile: String? = null
var scannedAadharCard: AadharCard = AadharCard()
init {
// 1. Convert Base10 to BigInt
val bigIntScanData = scanData?.let { BigInteger(it, 10) }
// 2. Convert BigInt to Byte Array
val byteScanData = bigIntScanData?.toByteArray()
// 3. Decompress Byte Array
val decompByteScanData = byteScanData?.let { decompressData(it) }
// 4. Split the byte array using delimiter
val parts = decompByteScanData?.let { separateData(it) }
// Throw error if there are no parts
if (parts != null) {
if (parts.isEmpty()) {
throw QrCodeException("Invalid QR Code Data, no parts found after splitting by delimiter")
}
}
// 5. decode extracted data to string
if (parts != null) {
decodeData(parts)
}
// 6. Extract Signature
if (decompByteScanData != null) {
decodeSignature(decompByteScanData)
}
// 7. Email and Mobile number
if (decompByteScanData != null) {
decodeMobileEmail(decompByteScanData)
}
}
/**
* Decompress the byte array, compression used is GZIP
* @param byteScanData compressed byte array
* @return uncompressed byte array
*/
@Throws(QrCodeException::class)
protected fun decompressData(byteScanData: ByteArray): ByteArray {
val bos = ByteArrayOutputStream(byteScanData.size)
val bin = ByteArrayInputStream(byteScanData)
val gis: GZIPInputStream = try {
GZIPInputStream(bin)
} catch (e: IOException) {
throw QrCodeException("Error in opening Gzip byte stream while decompressing QRcode", e)
}
var size = 0
val buf = ByteArray(1024)
while (size >= 0) {
try {
size = gis.read(buf, 0, buf.size)
if (size > 0) {
bos.write(buf, 0, size)
}
} catch (e: IOException) {
throw QrCodeException("Error in writing byte stream while decompressing QRcode", e)
}
}
try {
gis.close()
bin.close()
} catch (e: IOException) {
throw QrCodeException("Error in closing byte stream while decompressing QRcode", e)
}
return bos.toByteArray()
}
/**
* Function to split byte array with delimiter
* @param source source byte array
* @return list of separated byte arrays
*/
private fun separateData(source: ByteArray): List<ByteArray> {
val separatedParts: MutableList<ByteArray> = LinkedList()
var begin = 0
for (i in source.indices) {
if (source[i] == SEPARATOR_BYTE) {
// skip if first or last byte is separator
if (i != 0 && i != source.size - 1) {
separatedParts.add(source.copyOfRange(begin, i))
}
begin = i + 1
// check if we have got all the parts of text data
if (separatedParts.size == VTC_INDEX + 1) {
// this is required to extract image data
imageStartIndex = begin
break
}
}
}
return separatedParts
}
private fun decodeData(encodedData: List<ByteArray>) {
val i = encodedData.iterator()
decodedData = ArrayList()
while (i.hasNext()) {
decodedData!!.add(String(i.next(), StandardCharsets.ISO_8859_1))
}
// set the value of email/mobile present flag
emailMobilePresent = decodedData!![0].toInt()
// populate decoded data
scannedAadharCard.name = decodedData!![2]
scannedAadharCard.dateOfBirth = decodedData!![3]
scannedAadharCard.gender = decodedData!![4]
scannedAadharCard.careOf = decodedData!![5]
scannedAadharCard.district = decodedData!![6]
scannedAadharCard.landmark = decodedData!![7]
scannedAadharCard.house = decodedData!![8]
scannedAadharCard.location = decodedData!![9]
scannedAadharCard.pinCode = decodedData!![10]
scannedAadharCard.postOffice = decodedData!![11]
scannedAadharCard.state = decodedData!![12]
scannedAadharCard.street = decodedData!![13]
scannedAadharCard.subDistrict = decodedData!![14]
scannedAadharCard.vtc = decodedData!![15]
}
/**
* ref : https://uidai.gov.in/2-uncategorised/11320-aadhaar-paperless-offline-e-kyc-3.html
* Hashing logic for Email ID :
* Sha256(Sha256(Email+SharePhrase))*number of times last digit of Aadhaar number
* (Ref ID field contains last 4 digits).
* Example :
* Email: abc@gm.com
* Aadhaar Number:XXXX XXXX 3632
* Passcode : Lock@487
* Hash : Sha256(Sha256(abc@gm.comLock@487))*2
* In case of Aadhaar number ends with Zero we will hashed one time.
* **********************************************************************
* **********************************************************************
* Hashing logic for Mobile Number :
* Sha256(Sha256(Mobile+SharePhrase))*number of times last digit of Aadhaar number
* (Ref ID field contains last 4 digits).
* Example :
* Mobile: 1234567890
* Aadhaar Number:XXXX XXXX 3632
* Passcode : Lock@487
* Hash: Sha256(Sha256(1234567890Lock@487))*2
* In case of Aadhaar number ends with Zero we will hashed one time.
*/
private fun decodeMobileEmail(decompressedData: ByteArray) {
val mobileStartIndex: Int
val mobileEndIndex: Int
val emailStartIndex: Int
val emailEndIndex: Int
when (emailMobilePresent) {
3 -> {
// both email mobile present
mobileStartIndex = decompressedData.size - 289 // length -1 -256 -32
mobileEndIndex = decompressedData.size - 257 // length -1 -256
emailStartIndex = decompressedData.size - 322 // length -1 -256 -32 -1 -32
emailEndIndex = decompressedData.size - 290 // length -1 -256 -32 -1
mobile = bytesToHex(
decompressedData.copyOfRange(mobileStartIndex, mobileEndIndex + 1)
)
email = bytesToHex(
decompressedData.copyOfRange(emailStartIndex, emailEndIndex + 1)
)
// set image end index, it will be used to extract image data
imageEndIndex = decompressedData.size - 323
}
2 -> {
// only mobile
email = ""
mobileStartIndex = decompressedData.size - 289 // length -1 -256 -32
mobileEndIndex = decompressedData.size - 257 // length -1 -256
mobile = bytesToHex(
decompressedData.copyOfRange(mobileStartIndex, mobileEndIndex + 1)
)
// set image end index, it will be used to extract image data
imageEndIndex = decompressedData.size - 290
}
1 -> {
// only email
mobile = ""
emailStartIndex = decompressedData.size - 289 // length -1 -256 -32
emailEndIndex = decompressedData.size - 257 // length -1 -256
email = bytesToHex(
decompressedData.copyOfRange(emailStartIndex, emailEndIndex + 1)
)
// set image end index, it will be used to extract image data
imageEndIndex = decompressedData.size - 290
}
else -> {
// no mobile or email
mobile = ""
email = ""
// set image end index, it will be used to extract image data
imageEndIndex = decompressedData.size - 257
}
}
}
private fun decodeSignature(decompressedData: ByteArray) {
// extract 256 bytes from the end of the byte array
val startIndex = decompressedData.size - 257
val noOfBytes = 256
signature = String(decompressedData, startIndex, noOfBytes, StandardCharsets.ISO_8859_1)
}
companion object {
protected const val SEPARATOR_BYTE = 255.toByte()
protected const val VTC_INDEX = 15
/**
* Convert byte array to hex string
*/
fun bytesToHex(bytes: ByteArray): String {
val hexArray = "0123456789ABCDEF".toCharArray()
val hexChars = CharArray(bytes.size * 2)
for (j in bytes.indices) {
val v = bytes[j].toInt() and 0xFF
hexChars[j * 2] = hexArray[v ushr 4]
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
}
return String(hexChars)
}
}
}

View File

@@ -0,0 +1,20 @@
package com.example.hposregistration.data.aadhar
class AadharCard {
var name = ""
var dateOfBirth = ""
var gender = ""
var careOf = ""
var district = ""
var landmark = ""
var house = ""
var location = ""
var pinCode = ""
var postOffice = ""
var state = ""
var street = ""
var subDistrict = ""
var vtc = ""
}

View File

@@ -0,0 +1,6 @@
package com.example.hposregistration.data.aadhar
class QrCodeException : Exception {
constructor(message: String?) : super(message) {}
constructor(message: String?, cause: Throwable?) : super(message, cause) {}
}

View File

@@ -0,0 +1,42 @@
package com.example.hposregistration.data.user
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "user_table")
data class UserData(
@PrimaryKey
var _id: String = "",
var abhaId: String = "",
var aadharId: String = "",
var name: String = "",
var birthYear: String = "",
var gender: String = "",
var phoneNumber: String = "",
var careOf: String = "",
var maritalStatus: String = "",
var category: String = "",
var caste: String = "",
var subCaste: String? = "",
var appVersion: String ="",
var house: String = "",
var city: String = "",
var district: String = "",
var state: String = "",
var pinCode: String = "",
var bloodGroup: String = "",
var isUnderMedication: Boolean? = false,
var isUnderTransfusion: Boolean? = false,
var sickleCellHistory: String? = "",
var userImageURL: String = "",
var registeredBy: String? = "",
var createdAt: String? = "",
var registrationCenterName: String? = "",
var testStatus: Boolean = false
){
enum class Gender {
MALE,
FEMALE,
OTHER
}
}

View File

@@ -0,0 +1,44 @@
package com.example.hposregistration.di
import android.app.Application
import android.content.Context
import androidx.room.Room
import com.example.hposregistration.dao.MyDatabase
import com.example.hposregistration.dao.UserDao
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
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): UserDao {
return myDatabase.userDao()
}
@Provides
@Singleton
fun provideMyNetworkDao(): com.example.hposregistration.network.UserDao {
return com.example.hposregistration.network.UserDao()
}
@Provides
@Singleton
fun provideContext(application: Application): Context {
return application.applicationContext
}
}

View File

@@ -0,0 +1,30 @@
package com.example.hposregistration.network
import com.example.hposregistration.data.Response
import com.example.hposregistration.data.user.UserData
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import kotlinx.coroutines.tasks.await
class UserDao {
private val db: FirebaseFirestore = Firebase.firestore
private val patientCollection = db.collection("patientData")
suspend fun addUserToDatabase(data: UserData): Response<String> {
return try {
patientCollection.document()
.set(data)
.await()
Response.Success(data._id)
} catch (e: Exception) {
Response.Error(e)
}
}
// suspend fun getPatientList(): List<UserData> {
// return patientCollection.get().await().toObjects(UserData::class.java)
// }
}

View File

@@ -0,0 +1,19 @@
package com.example.hposregistration.ui.activities
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.databinding.ActivityMainBinding
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}

View File

@@ -0,0 +1,50 @@
package com.example.hposregistration.ui.fragments
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.Fragment
import com.journeyapps.barcodescanner.ScanOptions
open class BaseFragment: Fragment() {
fun hideProgressBar(view: View) {
view.visibility = View.GONE
}
fun showProgressBar(view: View) {
view.visibility = View.VISIBLE
}
// fun hideErrorMessage(view: View) {
// view.visibility = View.GONE
// }
//
// fun showErrorMessage(message: String, errorView: View, errorMessageView: TextView) {
// errorView.visibility = View.VISIBLE
// errorMessageView.text = message
// }
//
// fun markButtonDisable(button: Button) {
// button.isEnabled = false
// }
//
// fun markButtonEnable(button: Button) {
// button.isEnabled = true
// }
fun scanQR(scannerMessage: String): ScanOptions {
val options = ScanOptions()
options.setDesiredBarcodeFormats(ScanOptions.QR_CODE)
options.setPrompt("Scan a barcode")
options.setCameraId(0)
options.setBeepEnabled(true)
options.setBarcodeImageEnabled(true)
options.setPrompt(scannerMessage)
options.setOrientationLocked(false)
return options
}
}

View File

@@ -0,0 +1,92 @@
package com.example.hposregistration.ui.fragments
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 android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.example.hposregistration.data.Constant
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentLoginBinding
class LoginFragment : Fragment() {
private var _binding: FragmentLoginBinding? = null
private val binding get() = _binding!!
private lateinit var sharedPreference: SharedPreferences
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentLoginBinding.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() {
if (isUserLoggedIn()) {
navigateToUserListFragment()
return
}
binding.btnLogin.setOnClickListener {
val loginId = binding.loginId.text.toString()
val password = binding.password.text.toString()
if (loginId.isNotBlank() && password.isNotBlank()) {
performLogin(loginId, password)
} else {
if (loginId.isBlank()) {
binding.loginId.error = R.string.enter_proper_login_id.toString()
}
if (password.isBlank()) {
binding.password.error = R.string.enter_proper_password.toString()
}
}
}
}
private fun isUserLoggedIn(): Boolean {
return sharedPreference.getString(Constant.USER_ID, "")?.isNotBlank() == true
}
private fun navigateToUserListFragment() {
findNavController().navigate(R.id.action_loginFragment_to_userListFragment)
}
private fun performLogin(loginId: String, password: String) {
val matchingId = Constant.STATICID.firstOrNull { it == loginId }
if (matchingId != null) {
if (password == Constant.password) {
saveUserId(loginId)
navigateToUserListFragment()
return
} else {
Toast.makeText(requireContext(), R.string.wrong_password, Toast.LENGTH_SHORT).show()
}
}
Toast.makeText(requireContext(), R.string.wrong_user_id, Toast.LENGTH_SHORT).show()
}
private fun saveUserId(userId: String) {
with(sharedPreference.edit()) {
putString(Constant.USER_ID, userId)
apply()
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,26 @@
package com.example.hposregistration.ui.fragments
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.databinding.FragmentProfileBinding
@AndroidEntryPoint
class ProfileFragment : Fragment() {
private lateinit var _binding: FragmentProfileBinding
private val binding get() = _binding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentProfileBinding.inflate(layoutInflater, container, false)
return binding.root
}
}

View File

@@ -0,0 +1,201 @@
package com.example.hposregistration.ui.fragments
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.Toast
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.example.hposregistration.adapters.UserListOfflineAdapter
import com.example.hposregistration.adapters.UserListOnlineAdapter
import com.example.hposregistration.data.Constant
import com.example.hposregistration.data.user.UserData
import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import com.firebase.ui.firestore.FirestoreRecyclerOptions
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentUserListBinding
@AndroidEntryPoint
class UserListFragment : BaseFragment() {
private var _binding: FragmentUserListBinding? = null
private val binding get() = _binding!!
private val viewModel by viewModels<RegistrationViewModel>()
private var isOnline = false
private lateinit var sharedPreference: SharedPreferences
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
_binding = FragmentUserListBinding.inflate(inflater, container, false)
sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
setupViews()
return binding.root
}
override fun onResume() {
super.onResume()
init()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun setupViews() {
binding.btnRegisterUser.setOnClickListener {
findNavController().navigate(R.id.action_userListFragment_to_registrationFragment)
}
binding.btnLogout.setOnClickListener {
logoutUser(requireContext())
}
}
private fun init() {
viewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
if (isNetworkAvailable) {
isOnline = isNetworkAvailable
fetchFromServer()
checkForLocalDBData()
} else {
isOnline = isNetworkAvailable
fetchFromLocalDB()
}
}
binding.uploadData.setOnClickListener {
showUploadDialog(requireContext())
}
viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
deteleIncompleteRegistration(userDataList)
}
}
private fun logoutUser(context: Context) {
val builder = AlertDialog.Builder(context)
builder.setTitle(R.string.log_out)
builder.setMessage(R.string.do_log_out)
// Positive button
builder.setPositiveButton("Yes") { dialog, _ ->
saveUserId()
findNavController().navigate(R.id.action_userListFragment_to_loginFragment)
dialog.dismiss()
}
// Negative button
builder.setNegativeButton("No") { dialog, _ ->
dialog.dismiss()
}
val dialog = builder.create()
dialog.show()
}
private fun saveUserId() {
with(sharedPreference.edit()) {
putString(Constant.USER_ID, "")
apply()
}
}
private fun showUploadDialog(context: Context) {
val builder = AlertDialog.Builder(context)
builder.setTitle(R.string.upload_db_registration)
builder.setMessage(R.string.upload_local_db_to_cloud)
// Positive button
builder.setPositiveButton(R.string.upload) { dialog, _ ->
uploadLoadDBData(dialog)
}
// Negative button
builder.setNegativeButton(R.string.cancel) { dialog, _ ->
dialog.dismiss()
}
val dialog = builder.create()
dialog.show()
}
private fun uploadLoadDBData(dialog: DialogInterface) {
viewModel.allUserData.observe(viewLifecycleOwner) {
if (it.isEmpty()) {
dialog.dismiss()
} else {
it.forEach { userData ->
viewModel.addUserToDatabase(userData)
viewModel.deleteById(userData._id)
}
dialog.dismiss()
Toast.makeText(requireContext(), R.string.upload_done_successfully, Toast.LENGTH_SHORT)
.show()
}
}
}
private fun checkForLocalDBData() {
viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
if (userDataList.isEmpty()) {
binding.uploadData.visibility = View.GONE
} else {
binding.uploadData.visibility = View.VISIBLE
}
}
}
private fun fetchFromServer() {
binding.noList.visibility = View.GONE
binding.rvOrder.visibility = View.VISIBLE
val query = Firebase.firestore.collection("patientData")
val recyclerViewOptions =
FirestoreRecyclerOptions.Builder<UserData>().setQuery(query, UserData::class.java)
.build()
val adapter = UserListOnlineAdapter(recyclerViewOptions, binding.root)
binding.rvOrder.adapter = adapter
adapter.startListening()
}
private fun fetchFromLocalDB() {
binding.uploadData.visibility = View.GONE
viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
if (isOnline) {
binding.noList.visibility = View.GONE
binding.rvOrder.visibility = View.VISIBLE
} else {
if (userDataList.isEmpty()) {
binding.noList.visibility = View.VISIBLE
binding.rvOrder.visibility = View.GONE
} else {
binding.noList.visibility = View.GONE
binding.rvOrder.visibility = View.VISIBLE
deteleIncompleteRegistration(userDataList)
val adapter = UserListOfflineAdapter(binding.root)
adapter.differ.submitList(userDataList)
binding.rvOrder.adapter = adapter
}
}
}
}
private fun deteleIncompleteRegistration(userDataList: List<UserData>) {
userDataList.forEach {
if (it.userImageURL.isEmpty()) {
viewModel.deleteById(it._id)
}
}
}
}

View File

@@ -0,0 +1,219 @@
package com.example.hposregistration.ui.fragments.registration
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.example.hposregistration.data.Constant.fetchYOBFromDOB
import com.example.hposregistration.data.Constant.mapToGender
import com.example.hposregistration.data.SecureQrCode
import com.example.hposregistration.data.user.UserData
import com.example.hposregistration.ui.fragments.BaseFragment
import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanIntentResult
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentAbhaRegistrationBinding
import org.json.JSONObject
@AndroidEntryPoint
class AbhaRegistrationFragment : BaseFragment() {
private var _binding: FragmentAbhaRegistrationBinding? = null
private val binding get() = _binding!!
private val viewModel by viewModels<RegistrationViewModel>()
private val args: AbhaRegistrationFragmentArgs by navArgs()
private var userData = UserData()
private val barcodeLauncher =
registerForActivityResult(ScanContract()) { result: ScanIntentResult ->
if (result.contents == null) {
Toast.makeText(
requireContext(), R.string.cancelled_unable_scan, Toast.LENGTH_LONG
).show()
} else {
processScannedData(result.contents)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
_binding = FragmentAbhaRegistrationBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
init()
}
private fun init() {
binding.btnScanNow.setOnClickListener {
barcodeLauncher.launch(scanQR("Please Scan the Abha ID/Aadhar ID"))
}
if (args.userId != "null") {
viewModel.getUserByID(args.userId)
}
viewModel.userData.observe(viewLifecycleOwner) { user ->
userData = user
with(binding) {
aadharID.setText(user.aadharId)
etAbhaId.setText(user.abhaId)
etName.setText(user.name)
centerName.setText(user.registrationCenterName)
}
}
binding.btnProceed.setOnClickListener {
val abhaIdInput = binding.etAbhaId.text.toString()
val userName = binding.etName.text.toString()
val aadharIdInput = binding.aadharID.text.toString()
val centerName = binding.centerName.text.toString()
if (validateInputs(abhaIdInput, aadharIdInput, userName, centerName)) {
userData.apply {
name = userName
aadharId = aadharIdInput
abhaId = abhaIdInput
registrationCenterName = centerName
_id = aadharId + userName.substring(0, 3).uppercase() + centerName.substring(0, 3).uppercase()
}
viewModel.insert(userData)
navigateToUserDetailsFragment(userData._id)
}
}
}
private fun processScannedData(contents: String) {
try {
val obj = JSONObject(contents)
userData.apply {
abhaId = obj.getString("hidn").replace("-", "")
name = obj.getString("name")
birthYear = obj.getString("dob").fetchYOBFromDOB().toString()
gender = obj.getString("gender").mapToGender().toString()
phoneNumber = obj.getString("mobile")
state = obj.getString("state name")
district = obj.getString("district_name")
house = obj.getString("address")
}
if (userData.abhaId.isNotEmpty()) {
saveUserDataAsPerAbhaId()
} else {
saveUserDataAsPerAadharId()
}
} catch (e: Exception) {
try {
val decodedData = SecureQrCode(contents)
val aadharData = decodedData.scannedAadharCard
userData.apply {
name = aadharData.name
birthYear = aadharData.dateOfBirth.fetchYOBFromDOB().toString()
gender = aadharData.gender.mapToGender().toString()
state = aadharData.state
district = aadharData.district
house = aadharData.house
}
saveUserDataAsPerAadharId()
} catch (e: Exception) {
Toast.makeText(
requireContext(),
R.string.invalid_qr_code,
Toast.LENGTH_SHORT
).show()
}
}
}
private fun saveUserDataAsPerAbhaId() {
with(binding) {
tvScanMessage.visibility = View.VISIBLE
tvScanMessage.text = R.string.enter_aadhar_manually.toString()
etAbhaId.setText(userData.abhaId)
etName.setText(userData.name)
}
Toast.makeText(
requireContext(), R.string.scanned_abha_id, Toast.LENGTH_SHORT
).show()
}
private fun saveUserDataAsPerAadharId() {
with(binding) {
tvScanMessage.text =
R.string.scanned_aadhar_id.toString()
etName.setText(userData.name)
}
Toast.makeText(
requireContext(), R.string.scanned_aadharid, Toast.LENGTH_SHORT
).show()
}
private fun validateInputs(
abhaId: String, aadharId: String, userName: String, centerName: String
): Boolean {
with(binding) {
if (!checkAbhaIDNumber(abhaId)) {
etAbhaId.error = R.string.invalid_abha_id.toString()
return false
}
if (!checkAadharIDNumber(aadharId)) {
aadharID.error = R.string.invalid_aadhar_id.toString()
return false
}
if (!checkUserName(userName)) {
etName.error = R.string.name_field_error.toString()
return false
}
if (!checkCenterName(centerName)) {
etCenterName.error = R.string.center_name_error.toString()
return false
}
}
return true
}
private fun checkAbhaIDNumber(abhaId: String): Boolean {
return abhaId.isNotEmpty() && abhaId.length >= 14
}
private fun checkAadharIDNumber(aadharId: String): Boolean {
return aadharId.isNotEmpty() && aadharId.length >= 12
}
private fun checkUserName(userName: String): Boolean {
return userName.isNotEmpty() && userName.length >= 3
}
private fun checkCenterName(centerName: String): Boolean {
return centerName.isNotEmpty() && centerName.length >= 3
}
private fun navigateToUserDetailsFragment(userId: String) {
val action =
AbhaRegistrationFragmentDirections.actionRegistrationFragmentToUserDetailsRegistrationFragment(
userId
)
findNavController().navigate(action)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,190 @@
package com.example.hposregistration.ui.fragments.registration
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.bumptech.glide.Glide
import com.example.hposregistration.data.user.UserData
import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.databinding.FragmentCaptureUserImageBinding
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.OutputStream
import java.util.UUID
@AndroidEntryPoint
class CaptureUserImageFragment : Fragment() {
private var _binding: FragmentCaptureUserImageBinding? = null
private val binding get() = _binding!!
private val viewModel by viewModels<RegistrationViewModel>()
private var userData = UserData()
private lateinit var cameraLauncher: ActivityResultLauncher<Intent>
private val args: CaptureUserImageFragmentArgs by navArgs()
private lateinit var requestPermissionLauncher: ActivityResultLauncher<Array<String>>
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentCaptureUserImageBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
init()
}
private fun init() {
setupViewModel()
setupCameraLauncher()
setupRequestPermissionLauncher()
checkPermissionsAndPerformCameraOperation()
}
private fun setupViewModel() {
viewModel.getUserByID(args.userId)
viewModel.userData.observe(viewLifecycleOwner) { user ->
userData = user
if (userData.userImageURL.isNotEmpty()) {
binding.userImage.loadImageFromUri(Uri.parse(user.userImageURL))
binding.btnSubmit.isEnabled = true
binding.btnSubmit.setOnClickListener {
navigate()
}
}
}
}
private fun setupCameraLauncher() {
cameraLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK && result.data != null) {
val thumbnail: Bitmap = result.data!!.extras!!.get("data") as Bitmap
val uri: Uri = saveImageToInternalStorage(thumbnail)
uri.let {
binding.btnSubmit.isEnabled = true
Glide.with(requireActivity()).load(it).into(binding.userImage)
binding.btnSubmit.setOnClickListener {
submitImage(uri)
}
}
}
}
}
private fun setupRequestPermissionLauncher() {
requestPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
val grantedPermissions = permissions.filterValues { it }
val deniedPermissions = permissions.filterValues { !it }
if (grantedPermissions.isNotEmpty()) {
binding.userImage.setOnClickListener {
takePicture()
}
}
if (deniedPermissions.isNotEmpty()) {
requestPermissions()
}
}
}
private fun takePicture() {
Intent(MediaStore.ACTION_IMAGE_CAPTURE).also {
cameraLauncher.launch(it)
}
}
private fun submitImage(uri: Uri) {
userData.userImageURL = uri.toString()
viewModel.insert(userData)
navigate()
}
private fun navigate() {
val action = CaptureUserImageFragmentDirections
.actionCaptureUserImageFragment2ToReviewDetailsRegistrationFragment(args.userId)
findNavController().navigate(action)
}
private fun saveImageToInternalStorage(bitmap: Bitmap): Uri {
val file = File(context?.filesDir, "${UUID.randomUUID()}.jpg")
try {
val stream: OutputStream = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream)
stream.flush()
stream.close()
} catch (e: IOException) {
e.printStackTrace()
}
return Uri.fromFile(file)
}
private fun checkPermissionsAndPerformCameraOperation() {
val cameraPermission = ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.CAMERA
)
val storagePermission = ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (cameraPermission == PackageManager.PERMISSION_GRANTED &&
storagePermission == PackageManager.PERMISSION_GRANTED
) {
binding.userImage.setOnClickListener {
takePicture()
}
} else {
requestPermissions()
}
}
private fun requestPermissions() {
val permissions = arrayOf(
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
requestPermissionLauncher.launch(permissions)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
private fun ImageView.loadImageFromUri(uri: Uri) {
Glide.with(this)
.load(uri)
.into(this)
}

View File

@@ -0,0 +1,195 @@
package com.example.hposregistration.ui.fragments.registration
import android.content.Context
import android.content.SharedPreferences
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.bumptech.glide.Glide
import com.example.hposregistration.data.Constant
import com.example.hposregistration.data.user.UserData
import com.example.hposregistration.ui.fragments.BaseFragment
import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentReviewDetailsRegistrationBinding
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
@AndroidEntryPoint
class ReviewDetailsRegistrationFragment : BaseFragment() {
private var _binding: FragmentReviewDetailsRegistrationBinding? = null
private val binding get() = _binding!!
private lateinit var sharedPreference: SharedPreferences
private val viewModel by viewModels<RegistrationViewModel>()
private val args: ReviewDetailsRegistrationFragmentArgs by navArgs()
private var userData = UserData()
private var isOnline = false
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
_binding = FragmentReviewDetailsRegistrationBinding.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() {
viewModel.getUserByID(args.userId)
viewModel.userData.observe(viewLifecycleOwner) { user ->
userData = user
setUserData(user)
}
viewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
isOnline = isNetworkAvailable
}
binding.btnSubmit.setOnClickListener {
if (isOnline) {
showProgressBar(binding.progressBarCL)
addDataToFirebase()
} else {
Toast.makeText(
requireContext(),
R.string.internt_not_local,
Toast.LENGTH_SHORT
).show()
navigateToUserListFragment()
}
}
binding.btnEdit.setOnClickListener {
val action =
ReviewDetailsRegistrationFragmentDirections.actionReviewDetailsRegistrationFragmentToRegistrationFragment(
args.userId
)
findNavController().navigate(action)
}
viewModel.fireBaseUpload.observe(viewLifecycleOwner) {
if (it == "Success") {
Toast.makeText(
requireContext(),
R.string.registration_success,
Toast.LENGTH_SHORT
).show()
navigateToUserListFragment()
}
}
}
private fun addDataToFirebase() {
userData.createdAt = SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
).format(Calendar.getInstance().time)
userData.registeredBy = sharedPreference.getString(Constant.USER_ID, "")
viewModel.addUserToDatabase(userData)
viewModel.deleteById(args.userId)
}
private fun setUserData(userData: UserData) {
with(binding) {
Glide.with(requireActivity()).load(Uri.parse(userData.userImageURL)).into(userImage)
binding.tvUserID.text = requireContext().getString(R.string.user_id, userData._id)
binding.tvAbhaId.text =
requireContext().getString(R.string.abha_number, userData.abhaId)
binding.tvAadharId.text =
requireContext().getString(R.string.aadhar_number_details, userData.aadharId)
binding.tvUserName.text = requireContext().getString(R.string.user_name, userData.name)
binding.tvBirthYear.text =
requireContext().getString(R.string.birth_year_details, userData.birthYear)
binding.tvGender.text =
requireContext().getString(R.string.gender_details, userData.gender)
binding.tvPhoneNumber.text =
requireContext().getString(R.string.phone_number_details, userData.phoneNumber)
binding.tvCareOf.text =
requireContext().getString(R.string.care_of_details, userData.careOf)
binding.tvMaritalStatus.text =
requireContext().getString(R.string.marital_status_details, userData.maritalStatus)
binding.tvCategory.text =
requireContext().getString(R.string.category_details, userData.category)
binding.tvCaste.text =
requireContext().getString(R.string.caste_details, userData.caste)
if (userData.subCaste != "") {
binding.tvSubCaste.text =
requireContext().getString(R.string.sub_caste_details, userData.subCaste)
}
binding.tvHouse.text =
requireContext().getString(R.string.house_details, userData.house)
binding.tvCity.text =
requireContext().getString(R.string.city_town_details, userData.city)
binding.tvDistrict.text =
requireContext().getString(R.string.district_details, userData.district)
binding.tvState.text =
requireContext().getString(R.string.state_details, userData.state)
binding.tvPincode.text =
requireContext().getString(R.string.pincode_details, userData.pinCode)
binding.centerName.text =
requireContext().getString(R.string.centre_name, userData.registrationCenterName)
if (userData.isUnderMedication!!) {
binding.tvIsUnderMedication.text = requireContext().getString(
R.string.is_patient_under_any_medication_details, "Yes"
)
} else {
binding.tvIsUnderMedication.text = requireContext().getString(
R.string.is_patient_under_any_medication_details, "No"
)
}
if (userData.isUnderTransfusion!!) {
binding.tvIsUnderTransfusion.text = requireContext().getString(
R.string.is_patient_undergoing_any_blood_transfusion_details, "Yes"
)
} else {
binding.tvIsUnderTransfusion.text = requireContext().getString(
R.string.is_patient_undergoing_any_blood_transfusion_details, "No"
)
}
if (userData.sickleCellHistory == null) {
binding.tvSickleCellFamilyHistory.text = requireContext().getString(
R.string.sickle_cell_family_history, "No"
)
} else {
binding.tvSickleCellFamilyHistory.text = requireContext().getString(
R.string.sickle_cell_family_history, userData.sickleCellHistory
)
}
val pInfo = requireActivity().packageManager.getPackageInfo(
requireActivity().packageName, 0
)
val version = pInfo.versionName
userData.appVersion = version
}
}
private fun navigateToUserListFragment() {
hideProgressBar(binding.progressBarCL)
val action =
ReviewDetailsRegistrationFragmentDirections.actionReviewDetailsRegistrationFragmentToUserListFragment()
findNavController().navigate(action)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,351 @@
package com.example.hposregistration.ui.fragments.registration
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.example.hposregistration.data.user.UserData
import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentUserDetailsRegistrationBinding
@AndroidEntryPoint
class UserDetailsRegistrationFragment : Fragment() {
private var _binding: FragmentUserDetailsRegistrationBinding? = null
private val binding get() = _binding!!
private val viewModel by viewModels<RegistrationViewModel>()
private lateinit var userData: UserData
private val args: UserDetailsRegistrationFragmentArgs by navArgs()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
_binding = FragmentUserDetailsRegistrationBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
init()
}
private fun init() {
setupViewModel()
setupSubmitButton()
binding.etCategory.setOnItemClickListener { parent, view, position, id ->
if (parent.getItemAtPosition(position).toString().equals("OTHER", ignoreCase = true)) {
binding.tilOther.visibility = View.VISIBLE
} else {
binding.tilOther.visibility = View.GONE
}
}
binding.etCaste.setOnItemClickListener { parent, view, position, id ->
if (parent.getItemAtPosition(position).toString().equals("OTHER", ignoreCase = true)) {
binding.tilOthercaste.visibility = View.VISIBLE
} else {
binding.tilOthercaste.visibility = View.GONE
}
}
}
private fun setupViewModel() {
viewModel.getUserByID(args.userId)
viewModel.userData.observe(viewLifecycleOwner) {
userData = it
autoFillUserData(userData)
}
}
private fun autoFillUserData(user: UserData) {
with(binding) {
user.birthYear.let { etYob.setText(it) }
user.gender.let {
when (it) {
"Male" -> {
male.isChecked = true
binding.tilOthergender.visibility = View.GONE
}
"Female" -> {
female.isChecked = true
binding.tilOthergender.visibility = View.GONE
}
else -> {
other.isChecked = true
binding.tilOthergender.visibility = View.VISIBLE
}
}
}
user.phoneNumber.let { etMobile.setText(it) }
user.careOf.let { etCareof.setText(it) }
user.maritalStatus.let { etIsMarried.setText(it, false) }
user.subCaste.let { etSubCaste.setText(it) }
user.house.let { etHouse.setText(it) }
user.city.let { etCity.setText(it) }
user.district.let { etDistrict.setText(it) }
user.state.let { etState.setText(it) }
user.pinCode.let { etPincode.setText(it) }
user.isUnderMedication.let {
if (it != null) {
yes.isChecked = it
}
}
user.isUnderTransfusion.let {
if (it != null) {
yes1.isChecked = it
}
}
user.sickleCellHistory.let {
if (it != null) {
yes1history.isChecked = true
}
}
user.category.let {
etCategory.setText(it, false)
}
user.caste.let {
etCaste.setText(it, false)
}
if (yes1history.isChecked) {
if (binding.yes1history.isChecked) View.VISIBLE else View.GONE
user.sickleCellHistory.let { etFamilyHistory.setText(it) }
} else {
binding.tilFamilyHistory.visibility = View.GONE
}
binding.yes1history.setOnClickListener {
binding.tilFamilyHistory.visibility =
if (binding.yes1history.isChecked) View.VISIBLE else View.GONE
user.sickleCellHistory.let { etFamilyHistory.setText(it) }
}
binding.no1history.setOnClickListener {
binding.tilFamilyHistory.visibility =
if (binding.no1history.isChecked) View.GONE else View.VISIBLE
}
if(other.isChecked){
user.gender.let { etOthergender.setText(it) }
}
binding.male.setOnClickListener {
binding.tilOthergender.visibility = View.GONE
}
binding.female.setOnClickListener {
binding.tilOthergender.visibility = View.GONE
}
binding.other.setOnClickListener {
binding.tilOthergender.visibility = View.VISIBLE
}
if (binding.etCategory.text.toString().equals("OTHER", ignoreCase = true)) {
binding.tilOther.visibility = View.VISIBLE
binding.etOther.visibility = View.VISIBLE
} else {
binding.tilOther.visibility = View.GONE
}
if (binding.etCaste.text.toString().equals("OTHER", ignoreCase = true)) {
binding.tilOthercaste.visibility = View.VISIBLE
binding.etOthercaste.visibility = View.VISIBLE
} else {
binding.tilOthercaste.visibility = View.GONE
}
}
}
private fun setupSubmitButton() {
binding.btnSubmit.setOnClickListener {
if (verifyUserDetails()) {
userData._id = args.userId
viewModel.insert(userData)
navigateToCaptureUserImageFragment()
} else {
showToast(R.string.enter_details_properly.toString())
}
}
}
private fun navigateToCaptureUserImageFragment() {
val action = UserDetailsRegistrationFragmentDirections
.actionUserDetailsRegistrationFragmentToCaptureUserImageFragment2(args.userId)
findNavController().navigate(action)
}
private fun verifyUserDetails(): Boolean {
with(binding) {
val yob = etYob.text.toString()
if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2023) {
etYob.error = R.string.enter_valid_birth_year.toString()
return false
} else {
userData.birthYear = yob
}
if (male.isChecked) {
binding.tilOthergender.visibility = View.GONE
userData.gender = "Male"
} else if (female.isChecked) {
binding.tilOthergender.visibility = View.GONE
userData.gender = "Female"
} else if(other.isChecked) {
binding.tilOthergender.visibility = View.VISIBLE
val genderother= binding.etOthergender.text.toString()
userData.gender = genderother
if (genderother.isEmpty()) {
etOthergender.error = R.string.fill_field.toString()
return false
}
}
val pInfo = requireActivity().packageManager.getPackageInfo(
requireActivity().packageName, 0
)
val version = pInfo.versionName
userData.appVersion = version
val mobile = etMobile.text.toString()
if (mobile.isEmpty() || mobile.length != 10) {
etMobile.error = R.string.valid_mobile_number.toString()
return false
} else {
userData.phoneNumber = mobile
}
val careOf = etCareof.text.toString()
if (careOf.isEmpty()) {
etCareof.error = R.string.enter_father_husband_name.toString()
return false
} else {
userData.careOf = careOf
}
val maritalStatus = etIsMarried.text.toString()
if (maritalStatus.isEmpty()) {
etIsMarried.error = R.string.enter_marital_status.toString()
return false
} else {
userData.maritalStatus = maritalStatus
}
val category = etCategory.text.toString()
val other = etOther.text.toString()
if (category.isEmpty()) {
etCategory.error = R.string.enter_category.toString()
return false
} else if (category == "OTHER" && tilOther.isVisible) {
userData.category = other
} else {
userData.category = category
}
val caste = etCaste.text.toString()
val othercaste = etOthercaste.text.toString()
if (caste.isEmpty()) {
etCaste.error = R.string.enter_caste.toString()
return false
} else if (caste == "OTHER" && tilOthercaste.isVisible) {
userData.caste = othercaste
} else {
userData.caste = caste
}
val subCaste = etSubCaste.text.toString()
if (subCaste.isNotEmpty()) {
userData.subCaste = subCaste
}
val house = etHouse.text.toString()
if (house.isEmpty()) {
etHouse.error = R.string.enter_house_address.toString()
return false
} else {
userData.house = house
}
val city = etCity.text.toString()
if (city.isEmpty()) {
etCity.error = R.string.enter_city.toString()
return false
} else {
userData.city = city
}
val district = etDistrict.text.toString()
if (district.isEmpty()) {
etDistrict.error = R.string.enter_district.toString()
return false
} else {
userData.district = district
}
val state = etState.text.toString()
if (state.isEmpty()) {
etState.error = R.string.enter_state.toString()
return false
} else {
userData.state = state
}
val pincode = etPincode.text.toString()
if (pincode.isEmpty() || pincode.length != 6) {
etPincode.error = R.string.enter_pincode.toString()
return false
} else {
userData.pinCode = pincode
}
userData.isUnderMedication = yes.isChecked
userData.isUnderTransfusion = yes1.isChecked
userData.sickleCellHistory = yes1history.isChecked.toString()
if (yes1history.isChecked) {
val familyHistory = etFamilyHistory.text.toString()
if (familyHistory.isEmpty()) {
etFamilyHistory.error = R.string.enter_family_history.toString()
return false
}
userData.sickleCellHistory = familyHistory
} else {
userData.sickleCellHistory = null
}
return true
}
}
private fun showToast(message: String) {
Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -0,0 +1,76 @@
package com.example.hposregistration.ui.viewmodels
import android.content.Context
import android.net.Uri
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.hposregistration.data.MainRepository
import com.example.hposregistration.data.NetworkStatusLiveData
import com.example.hposregistration.data.Response
import com.example.hposregistration.data.user.UserData
import com.google.firebase.storage.FirebaseStorage
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class RegistrationViewModel @Inject constructor(
private val mainRepository: MainRepository,
context: Context
) : ViewModel() {
val userData = MutableLiveData<UserData>()
val allUserData = mainRepository.allUsers
val fireBaseUpload = MutableLiveData<String>()
fun addUserToDatabase(userData: UserData) = viewModelScope.launch {
val file = Uri.parse(userData.userImageURL)
val storageRef = FirebaseStorage.getInstance().reference
val imageRef = storageRef.child("${userData._id}/${file.lastPathSegment}")
val uploadTask = file.let { imageRef.putFile(it) }
uploadTask.continueWithTask { task ->
if (!task.isSuccessful) {
throw task.exception!!
}
imageRef.downloadUrl
}.addOnSuccessListener { uri ->
userData.userImageURL = uri.toString()
addDataToFirebase(userData)
}.addOnFailureListener { exception ->
}
}
private fun addDataToFirebase(userData: UserData) = viewModelScope.launch {
when (mainRepository.addDataToFirebase(userData)) {
is Response.Success -> {
fireBaseUpload.postValue("Success")
}
else -> {
}
}
}
private val _networkStatusLiveData = NetworkStatusLiveData(context)
val networkStatusLiveData: LiveData<Boolean>
get() = _networkStatusLiveData
fun insert(userData: UserData) = viewModelScope.launch {
mainRepository.insert(userData)
}
fun getUserByID(userId: String) = viewModelScope.launch {
userData.postValue(mainRepository.getUserByID(id = userId))
}
fun deleteById(userId: String) = viewModelScope.launch {
mainRepository.deleteById(id = userId)
}
}

View File

@@ -0,0 +1,5 @@
<vector android:autoMirrored="true" 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="@color/black" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:tint="@color/red" android:viewportHeight="24"
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/red" android:pathData="M17,7l-1.41,1.41L18.17,11H8v2h10.17l-2.58,2.58L17,17l5,-5zM4,5h8V3H4c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h8v-2H4V5z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:autoMirrored="true" 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="M9.5,6.5v3h-3v-3H9.5M11,5H5v6h6V5L11,5zM9.5,14.5v3h-3v-3H9.5M11,13H5v6h6V13L11,13zM17.5,6.5v3h-3v-3H17.5M19,5h-6v6h6V5L19,5zM13,13h1.5v1.5H13V13zM14.5,14.5H16V16h-1.5V14.5zM16,13h1.5v1.5H16V13zM13,16h1.5v1.5H13V16zM14.5,17.5H16V19h-1.5V17.5zM16,16h1.5v1.5H16V16zM17.5,14.5H19V16h-1.5V14.5zM17.5,17.5H19V19h-1.5V17.5zM22,7h-2V4h-3V2h5V7zM22,22v-5h-2v3h-3v2H22zM2,22h5v-2H4v-3H2V22zM2,2v5h2V4h3V2H2z"/>
</vector>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="360">
<shape
android:shape="ring"
android:innerRadiusRatio="3"
android:thicknessRatio="8"
android:useLevel="false">
<size
android:width="76dip"
android:height="76dip" />
<gradient
android:type="sweep"
android:useLevel="false"
android:startColor="@color/primary"
android:endColor="#00ffffff"
android:angle="0"/>
</shape>
</rotate>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="@color/primary"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/primary" android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM14,13v4h-4v-4H7l5,-5 5,5h-3z"/>
</vector>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".ui.activities.MainActivity">
<fragment
android:id="@+id/homeFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/main_nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,313 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="com.example.hposregistration.ui.fragments.registration.AbhaRegistrationFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/tv_title"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/scan_person_abha_id_card"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_scan_now"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/scan_now"
android:textColor="@color/black"
app:backgroundTint="@color/primary_light"
app:cornerRadius="100dp"
app:icon="@drawable/ic_qr_code_scanner"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/seperator1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_scan_now">
<TextView
android:id="@+id/tvText1"
style="@style/title1_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/or"
android:textColor="@color/gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_margin="5dp"
android:background="@color/gray"
app:layout_constraintBottom_toBottomOf="@id/tvText1"
app:layout_constraintEnd_toStartOf="@id/tvText1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/tvText1" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_margin="5dp"
android:background="@color/gray"
app:layout_constraintBottom_toBottomOf="@id/tvText1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvText1"
app:layout_constraintTop_toTopOf="@id/tvText1" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_title2"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="@string/enter_abha_number_manualy"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/seperator1" />
<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"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title2">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/person_s_name" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/et_abhaId_holder"
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_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etAbhaId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/abha_id"
android:inputType="number"
android:maxLength="14" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/et_aadharID"
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/et_abhaId_holder">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/aadharID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/aadhaar_number"
android:inputType="number"
android:maxLength="12" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/et_centerName"
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/et_aadharID">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/centerName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/center_name"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/tv_scanMessage"
style="@style/title2"
android:visibility="gone"
android:layout_marginTop="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_centerName" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnProceed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/proceed"
app:cornerRadius="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_scanMessage" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/seperator2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnProceed">
<TextView
android:id="@+id/tvText2"
style="@style/title1_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/or"
android:textColor="@color/gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_margin="5dp"
android:background="@color/gray"
app:layout_constraintBottom_toBottomOf="@id/tvText2"
app:layout_constraintEnd_toStartOf="@id/tvText2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/tvText2" />
<View
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_margin="5dp"
android:background="@color/gray"
app:layout_constraintBottom_toBottomOf="@id/tvText2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvText2"
app:layout_constraintTop_toTopOf="@id/tvText2" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_title3"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="@string/create_abha_id_card"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/seperator2" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_click_here"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/click_here"
android:textColor="@color/black"
app:backgroundTint="@color/primary_light"
app:cornerRadius="100dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title3" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/errorMessageCL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<include
android:id="@+id/itemErrorMessage"
layout="@layout/item_error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/progressBarCL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/progressbar_costume_view"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:padding="24dp"
tools:context=".ui.fragments.registration.CaptureUserImageFragment">
<TextView
android:id="@+id/tv_title"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
android:text="@string/capture_user_image"
app:layout_constraintBottom_toTopOf="@+id/userImage"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/userImage"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/ic_add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_submit"
style="@style/title1_1"
android:layout_width="258dp"
android:layout_height="wrap_content"
android:layout_margin="24dp"
android:enabled="false"
android:text="@string/review"
app:cornerRadius="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,145 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.hposregistration.ui.fragments.LoginFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/tv_title"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/login"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/smi_logo"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toStartOf="@id/imageView2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="24dp"
android:src="@drawable/sickle_cell_gov_logo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toBottomOf="@+id/tv_title" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/et_aadharID"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/loginId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/login_id"
android:inputType="textCapCharacters"
android:maxLength="12" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/et_centerName"
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/et_aadharID">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:inputType="text"
android:maxLength="12" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/login"
app:cornerRadius="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_centerName" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/errorMessageCL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<include
android:id="@+id/itemErrorMessage"
layout="@layout/item_error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/progressBarCL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/progressbar_costume_view"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.fragments.ProfileFragment"
android:padding="24dp">
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,321 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.hposregistration.ui.fragments.registration.ReviewDetailsRegistrationFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="24dp">
<TextView
android:id="@+id/tv_title"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/user_details"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/userImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title" />
<TextView
android:id="@+id/tvUserID"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/userImage" />
<TextView
android:id="@+id/tvAbhaId"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvUserID" />
<TextView
android:id="@+id/tvAadharId"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAbhaId" />
<TextView
android:id="@+id/tvUserName"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAadharId" />
<TextView
android:id="@+id/tvBirthYear"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvUserName" />
<TextView
android:id="@+id/tvGender"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvBirthYear" />
<TextView
android:id="@+id/tvPhoneNumber"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvGender" />
<TextView
android:id="@+id/tvCareOf"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvPhoneNumber" />
<TextView
android:id="@+id/tvMaritalStatus"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCareOf" />
<TextView
android:id="@+id/tvCategory"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvMaritalStatus" />
<TextView
android:id="@+id/tvCaste"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCategory" />
<TextView
android:id="@+id/tvSubCaste"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCaste" />
<TextView
android:id="@+id/tvHouse"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSubCaste" />
<TextView
android:id="@+id/tvCity"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvHouse" />
<TextView
android:id="@+id/tvDistrict"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCity" />
<TextView
android:id="@+id/tvState"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvDistrict" />
<TextView
android:id="@+id/tvPincode"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvState" />
<TextView
android:id="@+id/centerName"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvPincode" />
<TextView
android:id="@+id/tvIsUnderMedication"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/centerName" />
<TextView
android:id="@+id/tvIsUnderTransfusion"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvIsUnderMedication" />
<TextView
android:id="@+id/tvSickleCellFamilyHistory"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvIsUnderTransfusion" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_submit"
style="@style/title1_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="24dp"
android:text="@string/proceed"
app:cornerRadius="100dp"
app:layout_constraintStart_toEndOf="@id/btn_edit"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvSickleCellFamilyHistory" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_edit"
style="@style/title1_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="24dp"
android:text="@string/edit"
app:cornerRadius="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_submit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvSickleCellFamilyHistory" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/errorMessageCL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<include
android:id="@+id/itemErrorMessage"
layout="@layout/item_error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/progressBarCL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/progressbar_costume_view"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,560 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="com.example.hposregistration.ui.fragments.registration.UserDetailsRegistrationFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="-16dp"
tools:layout_editor_absoluteY="158dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
android:text="@string/enter_person_s_details"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_yob"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_yob"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/birth_year"
android:inputType="number"
android:maxLength="4" />
</com.google.android.material.textfield.TextInputLayout>
<RadioGroup
android:id="@+id/gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginHorizontal="24dp"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_yob">
<RadioButton
android:id="@+id/male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@string/male"
android:textSize="16sp" />
<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/female"
android:textSize="16sp" />
<RadioButton
android:id="@+id/other"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/other"
android:textSize="16sp" />
</RadioGroup>
<com.google.android.material.textfield.TextInputLayout
android:visibility="gone"
android:id="@+id/til_othergender"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/gender">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_othergender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/other"
android:inputType="text"
android:maxLength="10" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_mobile"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_othergender">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_mobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/mobile_number_10_digits"
android:inputType="number"
android:maxLength="10" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_careof"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_mobile">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_careof"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/father_s_husband_s_name" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_is_married"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_careof">
<AutoCompleteTextView
android:id="@+id/et_is_married"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/marital_status"
android:inputType="none"
android:labelFor="@id/til_is_married"
app:simpleItems="@array/marital_status" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_category"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_is_married">
<AutoCompleteTextView
android:id="@+id/et_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/category"
android:inputType="text"
android:labelFor="@id/til_is_married"
app:simpleItems="@array/category" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:visibility="gone"
android:id="@+id/til_other"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_category">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_other"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/other"
android:inputType="text"
android:maxLength="10" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_caste"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_other">
<AutoCompleteTextView
android:id="@+id/et_Caste"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/caste"
android:inputType="text"
android:labelFor="@id/til_is_married"
app:simpleItems="@array/caste" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:visibility="gone"
android:id="@+id/til_othercaste"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_caste">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_othercaste"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/other"
android:inputType="text"
android:maxLength="10" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_subCaste"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_othercaste">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_subCaste"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/sub_caste" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/tv_title2"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="30dp"
android:text="@string/person_s_address_details"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_subCaste" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_house"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title2">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_house"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/house" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_city"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_house">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/city_town" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_district"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_city">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_district"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/district" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_state"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
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/et_state"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/state" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_pincode"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_state">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_pincode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/pincode"
android:inputType="number"
android:maxLength="6" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/tv_title3"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="30dp"
android:text="@string/patient_medical_records"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_pincode" />
<!-- <com.google.android.material.textfield.TextInputLayout-->
<!-- android:id="@+id/til_blood_group"-->
<!-- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginHorizontal="24dp"-->
<!-- android:layout_marginTop="16dp"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@id/tv_title3">-->
<!-- <AutoCompleteTextView-->
<!-- android:id="@+id/et_blood_group"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:hint="@string/blood_group"-->
<!-- android:inputType="none"-->
<!-- android:labelFor="@id/til_blood_group"-->
<!-- app:simpleItems="@array/blood_group" />-->
<!-- </com.google.android.material.textfield.TextInputLayout>-->
<TextView
android:id="@+id/cb_item1"
style="@style/title1_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
android:text="@string/is_patient_under_any_medication"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title3" />
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cb_item1">
<RadioButton
android:id="@+id/yes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="Yes"
android:textSize="16dp" />
<RadioButton
android:id="@+id/no"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text="No"
android:textSize="16dp" />
</RadioGroup>
<TextView
android:id="@+id/cb_item2"
style="@style/title1_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:text="@string/is_patient_undergoing_any_blood_transfusion"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/radioGroup" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cb_item2">
<RadioButton
android:id="@+id/yes1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="Yes"
android:textSize="16dp" />
<RadioButton
android:id="@+id/no1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="No"
android:textSize="16dp" />
</RadioGroup>
<TextView
android:id="@+id/cb_item3"
style="@style/title1_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:text="@string/is_user_having_any_family_history_for_sickle_cell"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/radioGroup1" />
<RadioGroup
android:id="@+id/historyradiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cb_item3">
<RadioButton
android:id="@+id/yes1history"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="Yes"
android:textSize="16dp" />
<RadioButton
android:id="@+id/no1history"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="No"
android:textSize="16dp" />
</RadioGroup>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_familyHistory"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/historyradiogroup">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_familyHistory"
android:layout_width="match_parent"
android:layout_height="90dp"
android:hint="@string/family_history_of_sickle_cell"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_submit"
style="@style/title1_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="24dp"
android:text="@string/proceed"
android:focusable="false"
app:cornerRadius="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_familyHistory" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:padding="24dp"
tools:context="com.example.hposregistration.ui.fragments.UserListFragment">
<LinearLayout
android:visibility="gone"
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
<TextView
android:id="@+id/tv_title"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/user_details"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/noList"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/internet_is_not_available_and_there_is_no_data_available_in_local_db"
android:textColor="@color/red"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/uploadData"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="5dp"
android:src="@drawable/upload_data"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/tv_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title" />
<ImageView
android:id="@+id/btnLogout"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_logout"
app:layout_constraintBottom_toBottomOf="@+id/tv_title"
app:layout_constraintEnd_toStartOf="@+id/uploadData"
app:layout_constraintTop_toTopOf="@+id/tv_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_order"
android:layout_width="0dp"
android:layout_height="0dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title"
tools:listitem="@layout/user_item_view" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/btnRegisterUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:backgroundTint="@color/primary"
android:contentDescription="@string/register_user"
android:src="@drawable/ic_add"
app:elevation="1dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="10dp"
app:cardCornerRadius="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tvErrorMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_weight="2"
android:gravity="center_horizontal"
android:textSize="22sp"
android:textColor="@color/primary"
android:text="@string/failed_to_connect"
android:textAlignment="center" />
<Button
android:id="@+id/btnRetry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_weight="1"
android:text="@string/retry" />
<Button
android:id="@+id/btnCancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_weight="1"
android:text="@string/cancel" />
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="wrap_content">
<androidx.cardview.widget.CardView
android:id="@+id/userCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:cardBackgroundColor="@color/primary_light"
app:cardCornerRadius="25dp"
app:cardElevation="0dp"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp">
<ImageView
android:id="@+id/userImage"
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_qr_code_scanner" />
<TextView
android:id="@+id/userName"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:gravity="start"
android:textColor="@color/black"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/userImage"
app:layout_constraintTop_toTopOf="@+id/userImage"
tools:text="Name: MohamedKaif" />
<TextView
android:id="@+id/userId"
style="@style/title1_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="4dp"
android:gravity="start"
android:textColor="@color/black"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/userImage"
app:layout_constraintTop_toBottomOf="@id/userName"
tools:text="UserID: MohamedKaif" />
<TextView
android:id="@+id/teststatus"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/title1_1"
android:layout_marginTop="4dp"
android:layout_marginStart="16dp"
android:gravity="start"
android:textColor="@color/black"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/userImage"
app:layout_constraintTop_toBottomOf="@id/userId"
tools:text="Test Status: Completed"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/hpos_icon_background"/>
<foreground android:drawable="@mipmap/hpos_icon_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/hpos_icon_background"/>
<foreground android:drawable="@mipmap/hpos_icon_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/main_nav_graph"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/registrationFragment"
android:name="com.example.hposregistration.ui.fragments.registration.AbhaRegistrationFragment"
android:label="fragment_registration"
tools:layout="@layout/fragment_abha_registration" >
<action
android:id="@+id/action_registrationFragment_to_userDetailsRegistrationFragment"
app:destination="@id/userDetailsRegistrationFragment" />
<argument
android:name="userId"
app:argType="string"
android:defaultValue="null" />
</fragment>
<fragment
android:id="@+id/userListFragment"
android:name="com.example.hposregistration.ui.fragments.UserListFragment"
android:label="fragment_user_list"
tools:layout="@layout/fragment_user_list" >
<action
android:id="@+id/action_userListFragment_to_registrationFragment"
app:destination="@id/registrationFragment" />
<action
android:id="@+id/action_userListFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:popUpTo="@id/main_nav_graph"
app:popUpToInclusive="true"/>
</fragment>
<fragment
android:id="@+id/profileFragment"
android:name="com.example.hposregistration.ui.fragments.ProfileFragment"
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/userDetailsRegistrationFragment"
android:name="com.example.hposregistration.ui.fragments.registration.UserDetailsRegistrationFragment"
android:label="fragment_user_details_registration"
tools:layout="@layout/fragment_user_details_registration" >
<argument
android:name="userId"
app:argType="string" />
<action
android:id="@+id/action_userDetailsRegistrationFragment_to_captureUserImageFragment2"
app:destination="@id/captureUserImageFragment2" />
</fragment>
<fragment
android:id="@+id/reviewDetailsRegistrationFragment"
android:name="com.example.hposregistration.ui.fragments.registration.ReviewDetailsRegistrationFragment"
android:label="fragment_review_details_registration"
tools:layout="@layout/fragment_review_details_registration" >
<argument
android:name="userId"
app:argType="string" />
<action
android:id="@+id/action_reviewDetailsRegistrationFragment_to_userListFragment"
app:destination="@id/userListFragment"
app:popUpTo="@id/main_nav_graph"
app:popUpToInclusive="true"/>
<action
android:id="@+id/action_reviewDetailsRegistrationFragment_to_registrationFragment"
app:destination="@id/registrationFragment"
app:popUpTo="@id/main_nav_graph"
app:popUpToInclusive="true"/>
</fragment>
<fragment
android:id="@+id/captureUserImageFragment2"
android:name="com.example.hposregistration.ui.fragments.registration.CaptureUserImageFragment"
android:label="fragment_capture_user_image"
tools:layout="@layout/fragment_capture_user_image" >
<action
android:id="@+id/action_captureUserImageFragment2_to_reviewDetailsRegistrationFragment"
app:destination="@id/reviewDetailsRegistrationFragment" />
<argument
android:name="userId"
app:argType="string"
android:defaultValue="null" />
</fragment>
<fragment
android:id="@+id/loginFragment"
android:name="com.example.hposregistration.ui.fragments.LoginFragment"
android:label="fragment_login"
tools:layout="@layout/fragment_login" >
<action
android:id="@+id/action_loginFragment_to_userListFragment"
app:destination="@id/userListFragment"
app:popUpTo="@id/main_nav_graph"
app:popUpToInclusive="true"/>
</fragment>
</navigation>

View File

@@ -0,0 +1,206 @@
<resources>
<string name="app_name">HPOS रजिस्ट्रेशन</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">नमस्ते खाली फ़्रेग्मेंट</string>
<!-- त्रुटि संदेश -->
<string name="retry">पुनः प्रयास करें</string>
<string name="failed_to_connect">कनेक्ट करने में विफल</string>
<string name="cancel">रद्द करें</string>
<!-- पंजीकरण स्क्रीनें -->
<string name="scan_person_abha_id_card">व्यक्ति का ABHA ID/Aadhar ID कार्ड स्कैन करें</string>
<string name="scan_now">अब स्कैन करें</string>
<string name="or">या</string>
<string name="enter_abha_number_manualy">ABHA और Aadhar नंबर दर्ज करें</string>
<string name="abha_id">ABHA नंबर</string>
<string name="create_abha_id_card">ABHA ID कार्ड बनाएं</string>
<string name="click_here">यहां क्लिक करें</string>
<string name="scan_person_s_aadhaar_card">व्यक्ति का Aadhaar कार्ड स्कैन करें</string>
<string name="proceed">आगे बढ़ें</string>
<string name="enter_aadhaar_number_manualy">Aadhaar नंबर मैन्युअली दर्ज करें</string>
<string name="aadhaar_number">Aadhaar नंबर</string>
<string name="enter_person_s_details">व्यक्ति का विवरण दर्ज करें</string>
<string name="person_s_name">व्यक्ति का नाम</string>
<string name="age">आयु (वर्षों में)</string>
<string name="gender">लिंग चयन करें</string>
<string name="name_error">नाम खाली नहीं हो सकता</string>
<string name="age_error">आयु खाली नहीं हो सकती</string>
<string name="gender_error">लिंग खाली नहीं हो सकता</string>
<string name="age_error_out_of_bound">आयु मान्य होनी चाहिए</string>
<string name="birth_year">जन्म साल</string>
<string name="marital_status">वैवाहिक स्थिति चयन करें</string>
<string name="father_s_husband_s_name">पिता/पति का नाम</string>
<string name="caste">जाति</string>
<string name="person_s_address_details">व्यक्ति का पता विवरण</string>
<string name="district">जिला</string>
<string name="city_town">शहर / गाँव</string>
<string name="state">राज्य</string>
<string name="pincode">पिनकोड</string>
<string name="patient_medical_records">रोगी का चिकित्सा रेकॉर्ड</string>
<string name="review">समीक्षा</string>
<string name="blood_group">रक्त समूह चयन करें</string>
<string name="house">घर</string>
<string name="is_patient_under_any_medication">क्या आप पिछले तीन महीनों से सिक्ल सेल के लिए दवा ले रहे हैं?</string>
<string name="is_patient_undergoing_any_blood_transfusion">क्या आपने पिछले तीन महीनों में कोई रक्त प्रवाहन किया है?</string>
<string name="user_list">उपयोगकर्ता सूची</string>
<string name="register_user">उपयोगकर्ता पंजीकृत करें</string>
<string name="is_user_having_any_family_history_for_sickle_cell">क्या उपयोगकर्ता के पास सिक्ल सेल के लिए कोई परिवार का इतिहास है?</string>
<string name="family_history_of_sickle_cell">सिक्ल सेल का परिवारिक इतिहास</string>
<string name="mobile_number_10_digits">मोबाइल नंबर (10 अंक)</string>
<string name="sub_caste">उपजाति</string>
<string name="capture_user_image">उपयोगकर्ता की छवि कैद करें</string>
<string name="mobile_number">मोबाइल नंबर</string>
<string name="edit">संपादित करें</string>
<string name="user_details">उपयोगकर्ता विवरण</string>
<string name="internet_is_not_available_and_there_is_no_data_available_in_local_db">इंटरनेट उपलब्ध नहीं है और स्थानीय डेटाबेस में कोई डेटा उपलब्ध नहीं है</string>
<string name="user_id">उपयोगकर्ता आईडी: %1$s</string>
<string name="abha_number">ABHA नंबर: %1$s</string>
<string name="aadhar_number_details">Aadhar नंबर: %1$s</string>
<string name="user_name">व्यक्ति का नाम: %1$s</string>
<string name="birth_year_details">जन्म साल: %1$s</string>
<string name="gender_details">लिंग: %1$s</string>
<string name="phone_number_details">मोबाइल नंबर: %1$s</string>
<string name="care_of_details">पिता/पति का नाम: %1$s</string>
<string name="marital_status_details">वैवाहिक स्थिति: %1$s</string>
<string name="category_details">श्रेणी: %1$s</string>
<string name="caste_details">जाति: %1$s</string>
<string name="sub_caste_details">उपजाति: %1$s</string>
<string name="house_details">घर: %1$s</string>
<string name="city_town_details">शहर/गाँव: %1$s</string>
<string name="district_details">जिला: %1$s</string>
<string name="state_details">राज्य: %1$s</string>
<string name="centre_name">केंद्र का नाम: %1$s</string>
<string name="pincode_details">पिनकोड: %1$s</string>
<string name="is_patient_under_any_medication_details">क्या दवा ले रहे हैं: %1$s</string>
<string name="is_patient_undergoing_any_blood_transfusion_details">क्या रक्त प्रवाहन हो रहा है: %1$s</string>
<string name="is_any_sickle">क्या कोई सिक्ल सेल इतिहास है: %1$s</string>
<string name="sickle_cell_family_history">सिक्ल सेल परिवारिक इतिहास: %1$s</string>
<string name="center_name">केंद्र का नाम</string>
<string name="login_id">लॉगिन आईडी</string>
<string name="password">पासवर्ड</string>
<string name="login">लॉगिन</string>
<string name="_2">श्रेणी</string>
<string name="category">श्रेणी</string>
<string name="male">पुरुष</string>
<string name="female">महिला</string>
<string name="other">अन्य</string>
<string name="cancelled_unable_scan">रद्द किया गया: स्कैन करने में असमर्थ, पुनः प्रयास करें!!</string>
<string name="scan_abha_card">कृपया एबीए आईडी / आधार आईडी स्कैन करें</string>
<string name="invalid_qr_code">आपने स्कैन किया हुआ QR कोड अमान्य है, कृपया डेटा मैन्युअली दर्ज करें</string>
<string name="enter_aadhar_manually">आपने एबीए आईडी स्कैन किया है, आधार आईडी को मैन्युअली दर्ज करने की आवश्यकता है</string>
<string name="invalid_abha_id">अमान्य एबीए आईडी</string>
<string name="invalid_aadhar_id">अमान्य आधार आईडी</string>
<string name="name_field_error">नाम फील्ड खाली नहीं हो सकती या 3 अक्षरों से कम होनी चाहिए</string>
<string name="center_name_error">केंद्र का नाम खाली नहीं हो सकता या 3 अक्षरों से कम होना चाहिए</string>
<string name="registration_success">पंजीकरण सफलतापूर्वक हुआ</string>
<string name="internt_not_local">इंटरनेट उपलब्ध नहीं है, परीक्षण विवरण स्थानीय रूप से संग्रहित किए गए हैं</string>
<string name="enter_details_properly">कृपया सभी विवरणों को ठीक से दर्ज करें</string>
<string name="enter_valid_birth_year">कृपया 1900 से 2023 के बीच एक मान्य जन्म वर्ष दर्ज करें</string>
<string name="fill_field">कृपया फ़ील्ड भरें</string>
<string name="valid_mobile_number">कृपया एक मान्य 10-अंकों का मोबाइल नंबर दर्ज करें</string>
<string name="enter_name">कृपया अपना नाम दर्ज करें</string>
<string name="enter_marital_status">कृपया अपनी वैवाहिक स्थिति दर्ज करें</string>
<string name="enter_category">कृपया अपनी श्रेणी दर्ज करें</string>
<string name="enter_caste">कृपया अपनी जाति दर्ज करें</string>
<string name="enter_house_address">कृपया अपना घर का पता दर्ज करें</string>
<string name="enter_city">कृपया अपने शहर को दर्ज करें</string>
<string name="enter_district">कृपया अपने जिले को दर्ज करें</string>
<string name="enter_state">कृपया अपने राज्य को दर्ज करें</string>
<string name="enter_pincode">कृपया एक मान्य 6-अंकों कोड दर्ज करें</string>
<string name="enter_family_history">कृपया अपना परिवार का इतिहास दर्ज करें</string>
<string name="enter_guardian_name">कृपया अपने पालक का नाम दर्ज करें</string>
<string name="enter_father_husband_name">पिता / पति का नाम दर्ज करें</string>
<string name="do_log_out">क्या आप ऐप्लिकेशन से लॉग आउट करना चाहते हैं?</string>
<string name="log_out">लॉग आउट</string>
<string name="upload_db_registration">डीबी पंजीकरण अपलोड करें</string>
<string name="upload_local_db_to_cloud">क्या आप स्थानीय डीबी को क्लाउड पर अपलोड करना चाहते हैं?</string>
<string name="upload">अपलोड</string>
<string name="upload_done_successfully">अपलोड सफलतापूर्वक हुआ</string>
<string name="enter_proper_login_id">कृपया सही लॉगिन आईडी दर्ज करें</string>
<string name="enter_proper_password">कृपया सही पासवर्ड दर्ज करें</string>
<string name="wrong_password">गलत पासवर्ड</string>
<string name="wrong_user_id">गलत उपयोगकर्ता आईडी</string>
<string name="scanned_aadhar_id">आपने आधार आईडी स्कैन की है, कृपया आधार आईडी नंबर और अभा आईडी को मैन्युअली दर्ज करें</string>
<string name="scanned_abha_id">आपने आभा आईडी स्कैन की है</string>
<string name="scanned_aadharid">आपने आधार आईडी स्कैन की है</string>
<string-array name="category">
<item>NT-A</item>
<item>NT-B</item>
<item>NT-C</item>
<item>NT-D</item>
<item>OBC</item>
<item>OPEN</item>
<item>OTHER</item>
<item>SBC</item>
<item>SC</item>
<item>ST</item>
</string-array>
<string-array name="caste">
<item>अहीर</item>
<item>बराई</item>
<item>ब्राह्मण</item>
<item>बौद्ध</item>
<item>चांब़चार</item>
<item>चामार</item>
<item>देवांगन</item>
<item>धीवर</item>
<item>फुलमाली</item>
<item>गोंड</item>
<item>जैन</item>
<item>कोली</item>
<item>कोष्टी</item>
<item>कुंभार</item>
<item>कुंबी</item>
<item>लोहार</item>
<item>माळी</item>
<item>माणा</item>
<item>महार</item>
<item>मौर्या</item>
<item>मुसलमान</item>
<item>नवी</item>
<item>अन्य</item>
<item>पवार</item>
<item>परदेसी</item>
<item>शाहू</item>
<item>सोनार</item>
<item>तेली</item>
</string-array>
<string-array name="marital_status">
<item>विवाहित</item>
<item>एकत्र</item>
<item>तलाकशुदा</item>
</string-array>
<string-array name="blood_group">
<item>O+ve</item>
<item>O-ve</item>
<item>A+ve</item>
<item>A-ve</item>
<item>B+ve</item>
<item>B-ve</item>
<item>AB+ve</item>
<item>AB-ve</item>
</string-array>
<string-array name="gender">
<item>पुरुष</item>
<item>महिला</item>
<item>अन्य</item>
</string-array>
<string-array name="yes_no">
<item>हाँ</item>
<item>नहीं</item>
</string-array>
</resources>

View File

@@ -0,0 +1,211 @@
<resources>
<string name="app_name">HPOS ನೋಂದಾಯಿಸಲು</string>
<string name="hello_blank_fragment">ಹಲೋ ಖಾಲಿ ಫ್ರ್ಯಾಗ್ಮೆಂಟ್</string>
// ದೋಷ ಸಂದೇಶಗಳು
<string name="retry">ಮರುಪ್ರಯಾಸ</string>
<string name="failed_to_connect">ಸಂಪರ್ಕ ಸಾಧಿಸಲಾಗಿಲ್ಲ</string>
<string name="cancel">ರದ್ದು ಮಾಡಿ</string>
//Registration Screens
<string name="scan_person_abha_id_card">ವ್ಯಕ್ತಿಯ ಏಬಿಎ ಐಡಿ / ಆಧಾರ್ ಐಡಿ ಕಾರ್ಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="scan_now">ಈಗ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="or">ಅಥವಾ</string>
<string name="enter_abha_number_manualy">ಏಬಿಎ ಮತ್ತು ಆಧಾರ್ ಸಂಖ್ಯೆಗಳನ್ನು ಕೈಮಾಡಿ</string>
<string name="abha_id">ಏಬಿಎ ಸಂಖ್ಯೆ</string>
<string name="create_abha_id_card">ಏಬಿಎ ಐಡಿ ಕಾರ್ಡ್ ರಚಿಸಿ</string>
<string name="click_here">ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ</string>
<string name="scan_person_s_aadhaar_card">ವ್ಯಕ್ತಿಯ ಆಧಾರ್ ಕಾರ್ಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="proceed">ಮುಂದುವರಿಸಿ</string>
<string name="enter_aadhaar_number_manualy">ಆಧಾರ್ ಸಂಖ್ಯೆಯನ್ನು ಕೈಮಾಡಿ</string>
<string name="aadhaar_number">ಆಧಾರ್ ಸಂಖ್ಯೆ</string>
<string name="enter_person_s_details">ವ್ಯಕ್ತಿಯ ವಿವರಗಳನ್ನು ನಮೂದಿಸಿ</string>
<string name="person_s_name">ವ್ಯಕ್ತಿಯ ಹೆಸರು</string>
<string name="age">ವಯಸ್ಸು ವರ್ಷಗಳಲ್ಲಿ</string>
<string name="gender">ಲಿಂಗ ಆಯ್ಕೆ ಮಾಡಿ</string>
<string name="name_error">ಹೆಸರು ಖಾಲಿ ಇರಬಾರದು</string>
<string name="age_error">ವಯಸ್ಸು ಖಾಲಿ ಇರಬಾರದು</string>
<string name="gender_error">ಲಿಂಗ ಖಾಲಿ ಇರಬಾರದು</string>
<string name="age_error_out_of_bound">ವಯಸ್ಸು ಯೋಗ್ಯವಾಗಿರಬೇಕು</string>
<string name="birth_year">ಹುಟ್ಟಿದ ವರ್ಷ</string>
<string name="marital_status">ವೈವಾಹಿಕ ಸ್ಥಿತಿ ಆಯ್ಕೆ ಮಾಡಿ</string>
<string name="father_s_husband_s_name">ತಂದೆಯ / ಗಂಡನ ಹೆಸರು</string>
<string name="caste">ಜಾತಿ</string>
<string name="person_s_address_details">ವ್ಯಕ್ತಿಯ ವಿಳಾಸ ವಿವರಗಳು</string>
<string name="district">ಜಿಲ್ಲೆ</string>
<string name="city_town">ನಗರ / ಹಳ್ಳಿ</string>
<string name="state">ರಾಜ್ಯ</string>
<string name="pincode">ಪಿನ್‌ಕೋಡ್</string>
<string name="patient_medical_records">ರೋಗಿಯ ವೈದ್ಯಕೀಯ ದಾಖಲೆಗಳು</string>
<string name="review">ಸಮೀಕ್ಷಿಸಿ</string>
<string name="blood_group">ರಕ್ತ ಗುಂಪು ಆಯ್ಕೆ ಮಾಡಿ</string>
<string name="house">ಮನೆ</string>
<string name="is_patient_under_any_medication">ಹಳೆಯ ಮೂಲಕ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಗೆ ನೀವು ಔಷಧಿಗೆ ಒಳಪಟ್ಟಿದ್ದೀರಾ?</string>
<string name="is_patient_undergoing_any_blood_transfusion">ಹಳೆಯ ಮೂಲಕ ರಕ್ತ ಸಂಚಾರ ನಡೆಸಲಾಗಿದೆಯೇ?</string>
<string name="user_list">ಬಳಕೆದಾರ ಪಟ್ಟಿ</string>
<string name="register_user">ಬಳಕೆದಾರ ನೋಂದಣಿ</string>
<string name="is_user_having_any_family_history_for_sickle_cell">ಬಳಕೆದಾರನಿಗೆ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸವಿದೆಯೇ</string>
<string name="family_history_of_sickle_cell">ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸ</string>
<string name="mobile_number_10_digits">ಮೊಬೈಲ್ ಸಂಖ್ಯೆ (10 ಅಂಕಗಳು)</string>
<string name="sub_caste">ಉಪ ಜಾತಿ</string>
<string name="capture_user_image">ಬಳಕೆದಾರ ಚಿತ್ರ ಹಿಡಿಯಿರಿ</string>
<string name="mobile_number">ಮೊಬೈಲ್ ಸಂಖ್ಯೆ</string>
<string name="edit">ಸಂಪಾದಿಸಿ</string>
<string name="user_details">ಬಳಕೆದಾರ ವಿವರಗಳು</string>
<string name="internet_is_not_available_and_there_is_no_data_available_in_local_db">ಇಂಟರ್ನೆಟ್ ಲಭ್ಯವಿಲ್ಲ ಮತ್ತು ಸ್ಥಳಿಯ ಡಿಬಿಯಲ್ಲಿ ಯಾವುದೇ ಡೇಟಾ ಲಭ್ಯವಿಲ್ಲ</string>
<string name="user_id">ಬಳಕೆದಾರ ಐಡಿ: %1$s</string>
<string name="abha_number">ಆಭಾ ಸಂಖ್ಯೆ: %1$s</string>
<string name="aadhar_number_details">ಆಧಾರ ಸಂಖ್ಯೆ: %1$s</string>
<string name="user_name">ವ್ಯಕ್ತಿಯ ಹೆಸರು: %1$s</string>
<string name="birth_year_details">ಹುಟ್ಟಿದ ವರ್ಷ: %1$s</string>
<string name="gender_details">ಲಿಂಗ: %1$s</string>
<string name="phone_number_details">ಮೊಬೈಲ್ ಸಂಖ್ಯೆ: %1$s</string>
<string name="care_of_details">ತಂದೆಯ / ಗಂಡನ ಹೆಸರು: %1$s</string>
<string name="marital_status_details">ವೈವಾಹಿಕ ಸ್ಥಿತಿ: %1$s</string>
<string name="category_details">ವರ್ಗ: %1$s</string>
<string name="caste_details">ಜಾತಿ: %1$s</string>
<string name="sub_caste_details">ಉಪ ಜಾತಿ: %1$s</string>
<string name="house_details">ಮನೆ: %1$s</string>
<string name="city_town_details">ನಗರ / ಹಳ್ಳಿ: %1$s</string>
<string name="district_details">ಜಿಲ್ಲೆ: %1$s</string>
<string name="state_details">ರಾಜ್ಯ: %1$s</string>
<string name="centre_name">ಕೇಂದ್ರ ಹೆಸರು: %1$s</string>
<string name="pincode_details">ಪಿನ್‌ಕೋಡ್: %1$s</string>
<string name="is_patient_under_any_medication_details">ಔಷಧಿಗಳ ಕೆಳಗೆ ಇದ್ದಾರೆ: %1$s</string>
<string name="is_patient_undergoing_any_blood_transfusion_details">ರಕ್ತ ಸಂರಚನೆಯಲ್ಲಿ ಇದ್ದಾರೆ: %1$s</string>
<string name="is_any_sickle">ಯಾವುದೇ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಇತಿಹಾಸವಿದೆಯೇ: %1$s</string>
<string name="sickle_cell_family_history">ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸ: %1$s</string>
<string name="center_name">ಕೇಂದ್ರ ಹೆಸರು</string>
<string name="login_id">ಲಾಗಿನ್ ಐಡಿ</string>
<string name="password">ಪಾಸ್‌ವರ್ಡ್</string>
<string name="login">ಲಾಗಿನ್</string>
<string name="_2">ವರ್ಗ</string>
<string name="category">ವರ್ಗ</string>
<string name="male">ಗಂಡು</string>
<string name="female">ಹೆಣ್ಣು</string>
<string name="other">ಇತರ</string>
<string name="cancelled_unable_scan">ರದ್ದು ಮಾಡಲಾಗಿದೆ: ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ, ಮತ್ತೊಮ್ಮೆ ಪ್ರಯಾಸಿಸಿ!!</string>
<string name="scan_abha_card">ದಯವಿಟ್ಟು ಆಭಾ ಐಡಿ / ಆಧಾರ್ ಐಡಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="invalid_qr_code">ನೀವು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ QR ಕೋಡ್ ಮಾನ್ಯವಿಲ್ಲ, ದಯವಿಟ್ಟು ಮಾಹಿತಿಯನ್ನು ಕೈಮಾಡಿ ನಮೂದಿಸಿ</string>
<string name="enter_aadhar_manually">ನೀವು ಅಬ ಹಾ ಐಡಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ್ದೀರಿ, ಆಧಾರ್ ಐಡಿ ಅನ್ನು ಕೈಮಾತ್ರ ನಮೂದಿಸಿ</string>
<string name="invalid_abha_id">ಅಮಾನ್ಯವಾದ ಅಬ ಹಾ ಐಡಿ</string>
<string name="invalid_aadhar_id">ಅಮಾನ್ಯವಾದ ಆಧಾರ್ ಐಡಿ</string>
<string name="name_field_error">ಹೆಸರು ಕ್ಷೇತ್ರವು ಖಾಲಿ ಇರಲಾರದು ಅಥವಾ 3 ಅಕ್ಷರಗಳಿಂದ ಕಡಿಮೆ ಇರಲಾರದು</string>
<string name="center_name_error">ಕೇಂದ್ರದ ಹೆಸರು ಖಾಲಿ ಇರಲಾರದು ಅಥವಾ 3 ಅಕ್ಷರಗಳಿಂದ ಕಡಿಮೆ ಇರಲಾರದು</string>
<string name="registration_success">ಯಶಸ್ವಿಯಾಗಿ ನೋಂದಾಯಿಸಲಾಗಿದೆ</string>
<string name="internt_not_local">ಇಂಟರ್ನೆಟ್ ಲಭ್ಯವಿಲ್ಲ, ಪರೀಕ್ಷೆ ವಿವರಗಳನ್ನು ಸ್ಥಾನಿಕವಾಗಿ ಉಳಿಸಲಾಗಿದೆ</string>
<string name="enter_details_properly">ದಯವಿಟ್ಟು ಎಲ್ಲಾ ವಿವರಗಳನ್ನು ಸರಿಯಾಗಿ ನಮೂದಿಸಿ</string>
<string name="enter_valid_birth_year">ದಯವಿಟ್ಟು 1900 ಮತ್ತು 2023 ನ ನಡುವೆ ಒಂದು ವಾಸಿಸುವ ತಾರೀಖು ನಮೂದಿಸಿ</string>
<string name="fill_field">ದಯವಿಟ್ಟು ಕ್ಷೇತ್ರವನ್ನು ನಿರೂಪಿಸಿ</string>
<string name="valid_mobile_number">ದಯವಿಟ್ಟು ಒಂದು ಮಾನ್ಯವಾದ 10 ಅಂಕದ ಮೊಬೈಲ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_name">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಹೆಸರನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_marital_status">ದಯವಿಟ್ಟು ನಿಮ್ಮ ವೈವಾಹಿಕ ಸ್ಥಿತಿಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_category">ದಯವಿಟ್ಟು ನಿಮ್ಮ ವರ್ಗವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_caste">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಜಾತಿಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_house_address">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಮನೆಯ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_city">ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಗರವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_district">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಜಿಲ್ಲೆಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_state">ದಯವಿಟ್ಟು ನಿಮ್ಮ ರಾಜ್ಯವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_pincode">ದಯವಿಟ್ಟು ಒಂದು ಮಾನ್ಯ ಆರು-ಅಂಕ ಪಿನ್‌ಕೋಡ್ ನಮೂದಿಸಿ</string>
<string name="enter_family_history">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಕುಟುಂಬದ ಇತಿಹಾಸವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_guardian_name">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಅಭಿಭಾವಕರ ಹೆಸರನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_father_husband_name">ದಯವಿಟ್ಟು ನಿಮ್ಮ ತಂದೆ / ಗಂಡನ ಹೆಸರನ್ನು ನಮೂದಿಸಿ</string>
<string name="do_log_out">ನೀವು ಅಪ್ಲಿಕೇಶನ್ ನಿಂದ ಲಾಗೌಟ್ ಮಾಡಲು ಇಚ್ಛಿಸುತ್ತೀರಾ?</string>
<string name="log_out">ಲಾಗೌಟ್</string>
<string name="upload_db_registration">ಡಿಬಿ ನೋಂದಾಯಿಸುವ ಕೊರಕು</string>
<string name="upload_local_db_to_cloud">ನೀವು ಲೋಕಲ್ ಡಿಬಿ ನೋಂದಾಯಿಸನ್ನು ಮೇಘಮಾರ್ಗಕ್ಕೆ ಅಪ್ಲೋಡ್ ಮಾಡಲು ಇಚ್ಛಿಸುವಿರಾ?</string>
<string name="upload">ಅಪ್ಲೋಡ್</string>
<string name="upload_done_successfully">ಅಪ್ಲೋಡ್ ಯಶಸ್ವಿಯಾಗಿ ನಡೆಯಿತು</string>
<string name="enter_proper_login_id">ದಯವಿಟ್ಟು ಸರಿಯಾದ ಲಾಗಿನ್ ಐಡಿ ನಮೂದಿಸಿ</string>
<string name="enter_proper_password">ದಯವಿಟ್ಟು ಸರಿಯಾದ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ</string>
<string name="wrong_password">ತಪ್ಪಾದ ಪಾಸ್‌ವರ್ಡ್</string>
<string name="wrong_user_id">ತಪ್ಪಾದ ಬಳಕೆದಾರ ಐಡಿ</string>
<string name="scanned_aadhar_id">ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ್ದೀರಿ, ದಯವಿಟ್ಟು ಆಧಾರ್ ಐಡನ್ನು ನೀವು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ ಮತ್ತು ಅಭಾ ಐಡನ್ನು ಕೈಯಾರೆ ನಮೂದಿಸಿ</string>
<string name="scanned_abha_id">ನೀವು ಅಭಾ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ</string>
<string name="scanned_aadharid">ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ</string>
<string-array name="yes_no">
<item>ಹೌದು</item>
<item>ಇಲ್ಲ</item>
</string-array>
<string-array name="category">
<item>NT-A</item>
<item>NT-B</item>
<item>NT-C</item>
<item>NT-D</item>
<item>OBC</item>
<item>OPEN</item>
<item>OTHER</item>
<item>SBC</item>
<item>SC</item>
<item>ST</item>
</string-array>
<string-array name="caste">
<item>ಅಹೀರ್</item>
<item>ಬರಾಯಿ</item>
<item>ಬ್ರಾಹ್ಮಣ</item>
<item>ಬೌದ್ಧ</item>
<item>ಚಾಂಭಾರ್</item>
<item>ಚಾಮಾರ್</item>
<item>ದೇವಾಂಗನ್</item>
<item>ಧಿವರ್</item>
<item>ಫುಲ್ಮಾಲಿ</item>
<item>ಗೊಂಡ್</item>
<item>ಜೈನ್</item>
<item>ಕೊಲಿ</item>
<item>ಕೊಶ್ತಿ</item>
<item>ಕುಂಭಾರ</item>
<item>ಕುಂಬಿ</item>
<item>ಲೊಹರ್</item>
<item>ಮಾಳಿ</item>
<item>ಮಣ್ಣ</item>
<item>ಮಹಾರ್</item>
<item>ಮೌರ್ಯ</item>
<item>ಮಸ್ಲಿಮ್</item>
<item>ನಾವಿ</item>
<item>ಇತರ</item>
<item>ಪವಾರ್</item>
<item>ಪರ್ದೇಶಿ</item>
<item>ಶಾಹು</item>
<item>ಸೋನಾರ್</item>
<item>ತೆಲಿ</item>
</string-array>
<string-array name="marital_status">
<item>ವಿವಾಹಿತ</item>
<item>ಅವಿವಾಹಿತ</item>
<item>ವಿವಾಹ ವಿಚ್ಛೇದ</item>
</string-array>
<string-array name="blood_group">
<item>O+ve</item>
<item>O-ve</item>
<item>A+ve</item>
<item>A-ve</item>
<item>B+ve</item>
<item>B-ve</item>
<item>AB+ve</item>
<item>AB-ve</item>
</string-array>
<string-array name="gender">
<item>ಗಂಡು</item>
<item>ಹೆಣ್ಣು</item>
<item>ಇತರ</item>
</string-array>
</resources>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary">#4daaff</color>
<color name="primary_dark">#005db3</color>
<color name="primary_light">#e5f3ff</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="gray">#808080</color>
<color name="red">#FF0000</color>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="hpos_icon_background">#FFFFFF</color>
</resources>

View File

@@ -0,0 +1,205 @@
<resources>
<string name="app_name">HPOS Registration</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
//Error message
<string name="retry">Retry</string>
<string name="failed_to_connect">Failed to connect</string>
<string name="cancel">Cancel</string>
<string-array name="yes_no">
<item>Yes</item>
<item>No</item>
</string-array>
//Registration Screens
<string name="scan_person_abha_id_card">Scan Person ABHA ID/Aadhar ID Card</string>
<string name="scan_now">Scan Now</string>
<string name="or">OR</string>
<string name="enter_abha_number_manualy">Enter ABHA and Aadhar Number</string>
<string name="abha_id">ABHA Number</string>
<string name="create_abha_id_card">Create ABHA ID card</string>
<string name="click_here">Click Here</string>
<string name="scan_person_s_aadhaar_card">Scan Person\'s Aadhaar Card</string>
<string name="proceed">Proceed</string>
<string name="enter_aadhaar_number_manualy">Enter Aadhaar number manualy</string>
<string name="aadhaar_number">Aadhaar Number</string>
<string name="enter_person_s_details">Enter Person\'s Details</string>
<string name="person_s_name">Person\'s Name</string>
<string name="age">Age in years</string>
<string name="gender">Select Gender</string>
<string name="name_error">Name can\'t be empty</string>
<string name="age_error">Age can\'t be empty</string>
<string name="gender_error">Gender can\'t be empty</string>
<string name="age_error_out_of_bound">Age should be valid</string>
<string name="birth_year">Birth Year</string>
<string name="marital_status">Select Marital status</string>
<string name="father_s_husband_s_name">Father\'s/Husband\'s Name</string>
<string name="caste">Caste</string>
<string name="person_s_address_details">Person\'s Address Details</string>
<string name="district">District</string>
<string name="city_town">City / Town</string>
<string name="state">State</string>
<string name="pincode">Pincode</string>
<string name="patient_medical_records">Patient Medical Records</string>
<string name="review">Review</string>
<string name="blood_group">Select Blood Group</string>
<string name="house">House</string>
<string name="is_patient_under_any_medication">Have you been under medication for Sickle Cell in the past three months?</string>
<string name="is_patient_undergoing_any_blood_transfusion">Have you undergone any Blood transfusions in the Past three months ?</string>
<string name="user_list">User List</string>
<string name="register_user">Register User</string>
<string name="is_user_having_any_family_history_for_sickle_cell">Is user having any family history for Sickle Cell</string>
<string name="family_history_of_sickle_cell">Family History of Sickle Cell</string>
<string name="mobile_number_10_digits">Mobile Number (10 digits)</string>
<string name="sub_caste">Sub Caste</string>
<string name="capture_user_image">Capture User Image</string>
<string name="mobile_number">Mobile Number</string>
<string name="edit">Edit</string>
<string name="user_details">User Details</string>
<string name="internet_is_not_available_and_there_is_no_data_available_in_local_db">Internet is not available and there is no Data available in Local DB</string>
<string name="user_id">User ID: %1$s</string>
<string name="abha_number">Abha Number: %1$s</string>
<string name="aadhar_number_details">Aadhar Number: %1$s</string>
<string name="user_name">Person\'s Name: %1$s</string>
<string name="birth_year_details">Birth Year: %1$s</string>
<string name="gender_details">Gender: %1$s</string>
<string name="phone_number_details">Mobile Number: %1$s</string>
<string name="care_of_details">Father\'s/Husband\'s Name: %1$s</string>
<string name="marital_status_details">Marital Status: %1$s</string>
<string name="category_details">Category: %1$s</string>
<string name="caste_details">Caste: %1$s</string>
<string name="sub_caste_details">Sub Caste: %1$s</string>
<string name="house_details">House: %1$s</string>
<string name="city_town_details">City/Town: %1$s</string>
<string name="district_details">District: %1$s</string>
<string name="state_details">State: %1$s</string>
<string name="centre_name">Center Name: %1$s</string>
<string name="pincode_details">Pincode: %1$s</string>
<string name="is_patient_under_any_medication_details">Is Under Medication: %1$s</string>
<string name="is_patient_undergoing_any_blood_transfusion_details">Is Under Blood Transfusion: %1$s</string>
<string name="is_any_sickle">Is Any Sickle cell History: %1$s</string>
<string name="sickle_cell_family_history">Sickle cell Family History: %1$s</string>
<string name="center_name">Center Name</string>
<string name="login_id">Login ID</string>
<string name="password">Password</string>
<string name="login">Login</string>
<string name="_2">Category</string>
<string name="category">Category</string>
<string name="male">Male</string>
<string name="female">Female</string>
<string name="other">Other</string>
<string name="cancelled_unable_scan">Cancelled: Unable to scan, Try Again!!</string>
<string name="scan_abha_card">Please Scan the Abha ID/Aadhar ID</string>
<string name="invalid_qr_code">The QR Code you have scanned is not valid, enter the data manually</string>
<string name="enter_aadhar_manually">You have scanned the Abha ID, need to enter Aadhar ID manually</string>
<string name="invalid_abha_id">Invalid Abha ID</string>
<string name="invalid_aadhar_id">Invalid Aadhar ID</string>
<string name="name_field_error">Name field can\'t be empty or less than 3 characters</string>
<string name="center_name_error">Center name can\'t be empty or less than 3 characters</string>
<string name="registration_success">Registration Done Successfully</string>
<string name="internt_not_local">Internet not available, test details stored locally</string>
<string name="enter_details_properly">Please enter all the details properly</string>
<string name="enter_valid_birth_year">Please enter a valid birth year between 1900 and 2023</string>
<string name="fill_field">Please fill the field</string>
<string name="valid_mobile_number">Please enter a valid 10-digit mobile number</string>
<string name="enter_name">Please enter your name</string>
<string name="enter_marital_status">Please enter your marital status</string>
<string name="enter_category">Please enter your category</string>
<string name="enter_caste">Please enter your caste</string>
<string name="enter_house_address">Please enter your house address</string>
<string name="enter_city">Please enter your city</string>
<string name="enter_district">Please enter your district</string>
<string name="enter_state">Please enter your state</string>
<string name="enter_pincode">Please enter a valid 6-digit pin code</string>
<string name="enter_family_history">Please enter your family history</string>
<string name="enter_guardian_name">Please enter your guardian name</string>
<string name="enter_father_husband_name">enter father/husband name</string>
<string name="do_log_out">Do you want to LogOut the Application?</string>
<string name="log_out">Log Out</string>
<string name="upload_db_registration">Upload DB Registration</string>
<string name="upload_local_db_to_cloud">Do you want to upload the local DB Registration to the cloud?</string>
<string name="upload">Upload</string>
<string name="upload_done_successfully">Upload done successfully</string>
<string name="enter_proper_login_id">Please enter a proper Login ID</string>
<string name="enter_proper_password">Please enter a proper password</string>
<string name="wrong_password">Wrong Password</string>
<string name="wrong_user_id">Wrong UserID</string>
<string name="scanned_aadhar_id">You have scanned the Aadhar ID, need to enter Aadhar ID number you have scanned and Abha ID manually</string>
<string name="scanned_abha_id">You have scanned the Abha ID</string>
<string name="scanned_aadharid">You have scanned the Aadhar ID</string>
<string-array name="category">
<item>NT-A</item>
<item>NT-B</item>
<item>NT-C</item>
<item>NT-D</item>
<item>OBC</item>
<item>OPEN</item>
<item>OTHER</item>
<item>SBC</item>
<item>SC</item>
<item>ST</item>
</string-array>
<string-array name="caste">
<item>AHIR</item>
<item>BARAI</item>
<item>BRAHMAN</item>
<item>BUDDHIST</item>
<item>CHAMBHAR</item>
<item>CHAMAR</item>
<item>DEWANGAN</item>
<item>DHIWAR</item>
<item>FULMALI</item>
<item>GOND</item>
<item>JAIN</item>
<item>KOLI</item>
<item>KOSHTI</item>
<item>KUMBHAR</item>
<item>KUNBI</item>
<item>LOHAR</item>
<item>MALI</item>
<item>MANNA</item>
<item>MAHAR</item>
<item>MOURYA</item>
<item>MUSLIM</item>
<item>NAVI</item>
<item>OTHER</item>
<item>PAWAR</item>
<item>PARDESI</item>
<item>SHAHU</item>
<item>SONAR</item>
<item>TELI</item>
</string-array>
<string-array name="marital_status">
<item>Married</item>
<item>Single</item>
<item>Divorce</item>
</string-array>
<string-array name="blood_group">
<item>O+ve</item>
<item>O-ve</item>
<item>A+ve</item>
<item>A-ve</item>
<item>B+ve</item>
<item>B-ve</item>
<item>AB+ve</item>
<item>AB-ve</item>
</string-array>
<string-array name="gender">
<item>Male</item>
<item>Female</item>
<item>Other</item>
</string-array>
</resources>

View File

@@ -0,0 +1,55 @@
<resources>
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
<item name="colorControlNormal">@color/white</item>
</style>
<style name="title1">
<item name="android:textSize">20sp</item>
<item name="android:letterSpacing">-0.01</item>
<item name="android:textColor">@color/black</item>
<item name="fontFamily">@font/poppins_bold</item>
<item name="android:translationY">-0.62sp</item>
</style>
<style name="title1_1">
<item name="android:textSize">18sp</item>
<item name="android:letterSpacing">-0.01</item>
<item name="android:textColor">@color/black</item>
<item name="fontFamily">@font/poppins_semi_bold</item>
<item name="android:translationY">-0.62sp</item>
</style>
<style name="title1_2">
<item name="android:textSize">16sp</item>
<item name="android:letterSpacing">-0.01</item>
<item name="android:textColor">@color/black</item>
<item name="fontFamily">@font/poppins_medium</item>
<item name="android:translationY">-0.62sp</item>
</style>
<style name="title2">
<item name="android:textSize">14sp</item>
<item name="android:letterSpacing">-0.01</item>
<item name="android:textColor">@color/black</item>
<item name="fontFamily">@font/poppins_regular</item>
<item name="android:translationY">-0.62sp</item>
</style>
<style name="title2_5">
<item name="android:textSize">12sp</item>
<item name="android:letterSpacing">-0.01</item>
<item name="android:textColor">@color/black</item>
<item name="fontFamily">@font/poppins_light</item>
<item name="android:translationY">-0.62sp</item>
</style>
</resources>

View File

@@ -0,0 +1,13 @@
<resources>
<!-- Base application theme. -->
<style name="Theme.HPOSRegistration" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryVariant">@color/black</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" >@color/white</item>
<item name="android:windowLightStatusBar">true</item>
<!-- Customize your theme here. -->
</style>
</resources>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample backup rules file; uncomment and customize as necessary.
See https://developer.android.com/guide/topics/data/autobackup
for details.
Note: This file is ignored for devices older that API 31
See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
<!--
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample data extraction rules file; uncomment and customize as necessary.
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
for details.
-->
<data-extraction-rules>
<cloud-backup>
<!-- TODO: Use <include> and <exclude> to control what is backed up.
<include .../>
<exclude .../>
-->
</cloud-backup>
<!--
<device-transfer>
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="photos" path="." />
</paths>

View File

@@ -0,0 +1,17 @@
package com.example.hposregistration
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}

10
build.gradle Normal file
View File

@@ -0,0 +1,10 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '8.0.2' apply false
id 'com.android.library' version '8.0.2' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
id 'androidx.navigation.safeargs' version '2.7.0-beta02' apply false
id 'com.google.dagger.hilt.android' version '2.46' apply false
id "com.google.gms.google-services" version "4.3.15" apply false
id 'com.google.firebase.crashlytics' version "2.9.8" apply false
}

25
gradle.properties Normal file
View File

@@ -0,0 +1,25 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
android.defaults.buildfeatures.buildconfig=true
android.nonFinalResIds=false

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,6 @@
#Wed Jul 12 14:05:11 IST 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

185
gradlew vendored Normal file
View File

@@ -0,0 +1,185 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"

89
gradlew.bat vendored Normal file
View File

@@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

16
settings.gradle Normal file
View File

@@ -0,0 +1,16 @@
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "HPOS Registration"
include ':app'