From 7dca70e512b1a1b92605c30d7e617076f70f04f5 Mon Sep 17 00:00:00 2001 From: Ramandeep Date: Mon, 2 Aug 2021 18:14:45 +0530 Subject: [PATCH] Sickle Cell App --- .gitignore | 15 + .idea/.gitignore | 3 + .idea/.name | 1 + .idea/compiler.xml | 6 + .idea/gradle.xml | 20 + .idea/jarRepositories.xml | 30 + .idea/misc.xml | 9 + .idea/runConfigurations.xml | 10 + .idea/vcs.xml | 6 + app/.gitignore | 1 + app/build.gradle | 49 ++ app/google-services.json | 39 ++ app/proguard-rules.pro | 21 + .../SickleCell/ExampleInstrumentedTest.java | 26 + app/src/main/AndroidManifest.xml | 45 ++ .../java/com/smi/SickleCell/MainActivity.java | 573 ++++++++++++++++++ .../drawable-v24/ic_launcher_foreground.xml | 30 + .../res/drawable/ic_launcher_background.xml | 170 ++++++ .../res/drawable/shanmukha_logo_small.png | Bin 0 -> 50097 bytes app/src/main/res/layout/activity_main.xml | 177 ++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3593 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5339 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2636 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3388 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4926 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7472 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7909 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11873 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10652 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16570 bytes app/src/main/res/values-night/themes.xml | 16 + app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/strings.xml | 8 + app/src/main/res/values/themes.xml | 16 + app/src/main/res/xml/file_path.xml | 3 + .../com/smi/SickleCell/ExampleUnitTest.java | 17 + build.gradle | 30 + gradle.properties | 17 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 ++++++ gradlew.bat | 84 +++ settings.gradle | 2 + 45 files changed, 1622 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/google-services.json create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/smi/SickleCell/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/smi/SickleCell/MainActivity.java create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/shanmukha_logo_small.png create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/file_path.xml create mode 100644 app/src/test/java/com/smi/SickleCell/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..cf7c99f --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +app android \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..5cd135a --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..0380d8d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6199cc2 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..036b08e --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,49 @@ +plugins { + id 'com.android.application' + id 'com.google.firebase.crashlytics' + id 'com.google.gms.google-services' + +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + + defaultConfig { + applicationId "com.smi.SickleCell" + minSdkVersion 19 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + multiDexEnabled true + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'com.google.firebase:firebase-database:20.0.1' + testImplementation 'junit:junit:4.+' + implementation 'com.google.firebase:firebase-database:19.5.1' + + + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..bebb59b --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,39 @@ +{ + "project_info": { + "project_number": "93211969564", + "project_id": "sicklecell-app", + "storage_bucket": "sicklecell-app.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:93211969564:android:b83a52de2d54f94f21b7d9", + "android_client_info": { + "package_name": "com.smi.SickleCell" + } + }, + "oauth_client": [ + { + "client_id": "93211969564-kd1qj9bgi5ol338u3smjq2jgr9d0hav7.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDlTMjlvLcXPdbfCi2UWNKeyanaHaWEoZo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "93211969564-kd1qj9bgi5ol338u3smjq2jgr9d0hav7.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -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 \ No newline at end of file diff --git a/app/src/androidTest/java/com/smi/SickleCell/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/smi/SickleCell/ExampleInstrumentedTest.java new file mode 100644 index 0000000..e84ae3e --- /dev/null +++ b/app/src/androidTest/java/com/smi/SickleCell/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.smi.SickleCell; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.appandroid", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ed59fb1 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/smi/SickleCell/MainActivity.java b/app/src/main/java/com/smi/SickleCell/MainActivity.java new file mode 100644 index 0000000..1774380 --- /dev/null +++ b/app/src/main/java/com/smi/SickleCell/MainActivity.java @@ -0,0 +1,573 @@ +package com.smi.SickleCell; + +import androidx.annotation.MainThread; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import android.Manifest; +import android.content.ContentValues; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; + +public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{ + private Button confirmatory,screening; + + private static final int REQUEST_CODE_PICK_FILE = 300; + String FilePath; + private TextView result; + float number1; + float number2; + private String TestRandomKey,saveCurrentDate, saveCurrentTime; + private DatabaseReference TestRef; + private TextView result_confirmatory; + String device; + String result_test; + String result_test1; + String targetUri; + + String directory_path; + float value; + int flag=0; + + File file=null; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_main); + String directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/"; + + screening=findViewById(R.id.screening); + confirmatory=findViewById(R.id.confirmatory); + TestRef = FirebaseDatabase.getInstance().getReference().child("Test_Data"); + + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + Spinner Spinner_gender = findViewById(R.id.spinner_device); + ArrayAdapter adapter = ArrayAdapter.createFromResource(this, + R.array.instrument, android.R.layout.simple_spinner_item); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + Spinner_gender.setAdapter(adapter); + Spinner_gender.setOnItemSelectedListener(this); + result=findViewById(R.id.result); + result_confirmatory=findViewById(R.id.result_confirmatory); + + if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) + { + + ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},23); + + + directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/"; + File file = new File(directory_path); + if (!file.exists()) { + file.mkdirs(); + } + } + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { + directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/"; + File file = new File(directory_path); + if (!file.exists()) { + file.mkdirs(); + } + } else { + // Request permission from the user + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0); + } + + + directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/"; + File file = new File(directory_path); + if (!file.exists()) { + file.mkdirs(); + } + + + + + + + + + directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/"; + file = new File(directory_path); + if (!file.exists()) { + file.mkdirs(); + } + + screening.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + flag=1; + createfolder(); + + selectCSVFile(); + } + }); + + + confirmatory.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + flag=2; + createfolder(); + + selectCSVFile(); + + } + }); + + + + + + } + + private void selectCSVFile(){ + if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + + ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 23); + } + Uri uri = Uri.parse((Environment.getExternalStorageDirectory().getPath() + "/SickleCell/")); + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setDataAndType(uri, "*/*"); + + // intent.setType("*/*"); + startActivityForResult(intent,REQUEST_CODE_PICK_FILE); + + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + + + case REQUEST_CODE_PICK_FILE: { + if (resultCode == RESULT_OK) { + + + Log.e("file",data.getData().getPath()); + + FilePath = data.getData().getPath(); + Log.e("Filepath",FilePath); + + String filename1=FilePath.substring(FilePath.lastIndexOf("/")+1); + + Log.e("file",filename1); + + String s = FilePath; + + directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/"; + targetUri = directory_path+filename1; + + if(flag==1) + { + ImportCSV(new File(targetUri)); + + } + else if(flag==2) + { + ImportCSV2(new File(targetUri)); + + } + + + + } + } + } + } + private void ImportCSV(File from) { + ContentValues cv = new ContentValues(); + result_confirmatory.setText(""); + result.setText(""); + try { + InputStream inputStream = new FileInputStream(from); + BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); + + + String line; + if(device.equals("TestRight")) + { + result_confirmatory.setText(""); + result.setText(""); + Log.e("device", "Test right"); + + while ((line = br.readLine()) != null) { + String[] values = line.split(","); + if (values[0].equals("427.084")) { + + number1 = Float.parseFloat(String.valueOf(values[1])); + + Log.e("number1", String.valueOf(number1)); + + + } + else if(values[0].equals("555.035")) + { + number2 = Float.parseFloat(String.valueOf(values[1])); + Log.e("number2", String.valueOf(number2)); + + + + + } + + + } + value= number2/number1; + + + Log.e("value",String.valueOf(value)); + if(value<0.16) + { + result_confirmatory.setText(""); + result.setText("Negative"); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + SaveProductInfoToDatabase(); + } + else + { + result.setText("Positive"); + result_confirmatory.setText(""); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + SaveProductInfoToDatabase(); + + + } + + } + + else if (device.equals("Denovix")) + { + result_confirmatory.setText(""); + result.setText(""); + Log.e("device", "denovix"); + + while ((line = br.readLine()) != null) { + String[] values = line.split(","); + if (values[2].equals("427.084")) { + + number1 = Float.parseFloat(String.valueOf(values[3])); + + Log.e("number1", String.valueOf(number1)); + + + } + else if(values[2].equals("555.035")) + { + number2 = Float.parseFloat(String.valueOf(values[3])); + Log.e("number2", String.valueOf(number2)); + + + + + } + + + } + value=number2/number1; + Log.e("value",String.valueOf(value)); + if(value<0.16) + { + result.setText("Negative"); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + SaveProductInfoToDatabase(); + + } + else + { + result.setText("Positive"); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + SaveProductInfoToDatabase(); + + + } + + } + } catch (IOException ex) { + throw new RuntimeException("Error in reading CSV file: " + ex); + } + + + + + + } + private void ImportCSV2(File from) { + result_confirmatory.setText(""); + result.setText(""); + + try { + InputStream inputStream = new FileInputStream(from); + BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); + + + String line; + if(device.equals("TestRight")) + { + result_confirmatory.setText(""); + result.setText(""); + Log.e("device", "Test right"); + + while ((line = br.readLine()) != null) { + String[] values = line.split(","); + + if (values[0].equals("427.084")) { + number1 = Float.parseFloat(String.valueOf(values[1])); + Log.e("number1", String.valueOf(number1)); + + + } + else if(values[0].equals("555.035")) + { + number2 = Float.parseFloat(String.valueOf(values[1])); + Log.e("number2", String.valueOf(number2)); + + + + + } + + + } + value=number2/number1; + Log.e("value",String.valueOf(value)); + if(value<0.16) + { + result.setText("Negative"); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + + } + else + { + result.setText("Positive"); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + + + } + if(value>=0.16 && value < 0.24) + { + result_confirmatory.setText("Sickle Cell Trait"); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + SaveProductInfoToDatabase(); + + } + else if( value >=0.24) + { + result_confirmatory.setText("Sickle-Cell Disease"); + result_test=result.getText().toString(); + result_test1=result_confirmatory.getText().toString(); + SaveProductInfoToDatabase(); + + + + } + } + +else if (device.equals("Denovix")) + { + result_confirmatory.setText(""); + result.setText(""); + Log.e("device", "denovix"); + + while ((line = br.readLine()) != null) { + String[] values = line.split(","); + if (values[2].equals("427.084")) { + number1 = Float.parseFloat(String.valueOf(values[3])); + Log.e("number1", String.valueOf(number1)); + + + } + else if(values[2].equals("555.035")) + { + number2 = Float.parseFloat(String.valueOf(values[3])); + Log.e("number2", String.valueOf(number2)); + + + + + } + + + } + value=number2/number1; + Log.e("value",String.valueOf(value)); + if(value<0.16) + { + result.setText("Negative"); + + } + else + { + result.setText("Positive"); + + + } + if(value>=0.16 && value < 0.24) + { + result_confirmatory.setText("Sickle Cell Trait "); + SaveProductInfoToDatabase(); + + } + else if( value >0.24) + { + result_confirmatory.setText("Sickle-Cell Disease"); + SaveProductInfoToDatabase(); + + + } + } + + } catch (IOException ex) { + throw new RuntimeException("Error in reading CSV file: " + ex); + } + + + + + + } + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + if(parent.getId() == R.id.spinner_device) + { + device = parent.getItemAtPosition(position).toString(); + + } + + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + private void createfolder() + { + directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/"; + file = new File(directory_path); + if (!file.exists()) { + file.mkdirs(); + } + + } + + + private void SaveProductInfoToDatabase() + { + HashMap productMap = new HashMap<>(); + productMap.put("Value", String.valueOf(value)); + productMap.put("number1", String.valueOf(number1)); + productMap.put("number2",String.valueOf(number2)); + productMap.put("Device",device); + productMap.put("Result",result_test); + productMap.put("Result Confirmatory",result_test1); + productMap.put("Directory Path",directory_path); + productMap.put("Full Path",targetUri); + + + // productMap("Result",String.valueOf(result.getText().toString())); + + + + Calendar calendar = Calendar.getInstance(); + + SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy"); + + saveCurrentDate = currentDate.format(calendar.getTime()); + saveCurrentDate = saveCurrentDate .replaceAll("[^A-Za-z0-9 ]",""); + + + SimpleDateFormat currentTime = new SimpleDateFormat("h:mm a"); + saveCurrentTime = currentTime.format(calendar.getTime()); + + TestRandomKey = saveCurrentDate + saveCurrentTime+String.valueOf( Math.random()); + TestRandomKey = TestRandomKey .replaceAll("[^A-Za-z0-9 ]",""); + + + + TestRef.child(TestRandomKey).updateChildren(productMap) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) + { + if (task.isSuccessful()) { + + + Toast.makeText(MainActivity.this, "Test Result added in backend successfully ", Toast.LENGTH_SHORT).show(); + + + + } + else + { + + String message = task.getException().toString(); + Toast.makeText(MainActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show(); + } + } + }); + } + + + + + + + + + + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/shanmukha_logo_small.png b/app/src/main/res/drawable/shanmukha_logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..ba5bdf7e8f2336dc57e602a2d302be4b71a61bf3 GIT binary patch literal 50097 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..110d655 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +