Files
sicklecell-app-v1/app/src/main/java/com/smi/SickleCell/MainActivity.java
Ramandeep e6ce908e98 App Version 0.0.3
Version Checking code added
2021-09-21 01:16:01 +05:30

740 lines
24 KiB
Java

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.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
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 com.opencsv.CSVReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
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;
TextView Type;
String line;
TableLayout table;
RelativeLayout relativeLayout1;
String Extension;
String directory_path;
float value;
int columnCount = 0;
int flag = 0;
String serial_no, sample_name, numbers1, numbers2, ratios, resultsamp;
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);
relativeLayout1 = findViewById(R.id.RelativeLayout1);
table = findViewById(R.id.table_main);
TestRef = FirebaseDatabase.getInstance().getReference().child("Test_Data");
Type = findViewById(R.id.type);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
Spinner Spinner_type = findViewById(R.id.spinner_device);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.instrument, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner_type.setAdapter(adapter);
Spinner_type.setOnItemSelectedListener(this);
result = findViewById(R.id.result);
result_confirmatory = findViewById(R.id.result_confirmatory);
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.Q) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package", this.getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
}
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);
Extension = FilePath.substring(FilePath.lastIndexOf("."));
Log.e("Entension ", Extension);
String s = FilePath;
directory_path = Environment.getExternalStorageDirectory().getPath() + "/SickleCell/";
targetUri = directory_path + filename1;
if (!Extension.contains("csv")) {
Type.setText("Wrong file Format");
result.setText("");
Type.setTextColor(Color.RED);
result_confirmatory.setText("");
} else if (flag == 1) {
ImportCSV(new File(targetUri));
} else if (flag == 2) {
ImportCSV2(new File(targetUri));
}
}
}
}
}
private void ImportCSV(File from) {
result_confirmatory.setText("");
result.setText("");
value = 0;
number1 = 0;
number2 = 0;
resultsamp = "";
table.removeAllViews();
try {
CSVReader reader = new CSVReader(new FileReader(from));
String[] line;
InputStream inputStream = new FileInputStream(from);
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String[] header = reader.readNext(); // assuming first read
if (header != null) { // and there is a (header) line
columnCount = header.length; // get the column count
}
Log.e("columc", String.valueOf(columnCount));
if (device.equals("TestRight")) {
result_confirmatory.setText("");
result.setText("");
resultsamp = "";
Type.setText(" Select Test Type * ");
Type.setTextColor(Color.WHITE);
if (columnCount > 100) {
Type.setText("Wrong File");
Type.setTextColor(Color.RED);
} else {
Log.e("device", "Test right");
while ((line = reader.readNext()) != null) {
String[] values = line;
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));
}
}
if (number1 != 0 || number2 != 0) {
value = number2 / number1;
Log.e("value", String.valueOf(value));
if (value < 0.16 || value == 0.0) {
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();
}
} else {
result_confirmatory.setText("");
result.setText("");
Type.setText("Wrong File");
Type.setTextColor(Color.RED);
value = 0;
}
}
} else if (device.equals("Denovix")) {
result_confirmatory.setText("");
result.setText("");
result_confirmatory.setText("");
result.setText("");
Type.setText(" Select Test Type * ");
Type.setTextColor(Color.WHITE);
resultsamp = "";
Log.e("device", "denovix");
if (columnCount < 100) {
result_confirmatory.setText("");
result.setText("");
Type.setText("Wrong file");
Type.setTextColor(Color.RED);
} else {
init1();
while ((line = reader.readNext()) != null) {
String[] values = line;
if (values[1].equals("Blank")) {
continue;
}
if ((values[262].replaceAll("[^\\d.]", "")).equals("427") || (values[390].replaceAll("[^\\d.]", "")).equals("555")) {
continue; //just skip the rows if row number is 0 or 1
} else {
number1 = Float.parseFloat(String.valueOf(values[262].replaceAll("[^\\d.]", "")));
Log.e("number1", String.valueOf(number1));
number2 = Float.parseFloat(String.valueOf(values[390]).replaceAll("[^\\d.]", ""));
Log.e("number2", String.valueOf(number2));
}
if (number1 != 0 || number2 != 0) {
value = number2 / number1;
Log.e("value", String.valueOf(value));
if (value < 0.16 || value == 0.0) {
resultsamp = "Negative";
} else {
resultsamp = "Positive";
}
} else if (columnCount < 100) {
result_confirmatory.setText("");
result.setText("");
Type.setText("Wrong file");
Type.setTextColor(Color.RED);
}
serial_no = values[0];
sample_name = values[1];
numbers1 = values[262];
numbers2 = values[390];
ratios = String.valueOf(value);
init(serial_no, sample_name, ratios, resultsamp);
}
}
}
} catch (IOException ex) {
throw new RuntimeException("Error in reading CSV file: " + ex);
}
}
private void ImportCSV2(File from) {
result_confirmatory.setText("");
result.setText("");
value = 0;
number1 = 0;
number2 = 0;
table.removeAllViews();
try {
CSVReader reader = new CSVReader(new FileReader(from));
String[] line;
InputStream inputStream = new FileInputStream(from);
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String[] header = reader.readNext(); // assuming first read
if (header != null) { // and there is a (header) line
columnCount = header.length; // get the column count
}
Log.e("columc", String.valueOf(columnCount));
if (device.equals("TestRight")) {
resultsamp = "";
result_confirmatory.setText("");
result.setText("");
Type.setText(" Select Test Type * ");
Type.setTextColor(Color.WHITE);
if (columnCount > 100) {
Type.setText("Wrong File");
Type.setTextColor(Color.RED);
} else {
Log.e("device", "Test right");
while ((line = reader.readNext()) != null) {
String[] values = line;
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));
}
}
if (number1 != 0 || number2 != 0) {
value = number2 / number1;
Log.e("value", String.valueOf(value));
if (value < 0.16 || value == 0.0) {
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();
} else if (value >= 0.24) {
result_confirmatory.setText("Sickle-Cell Disease");
result_test = result.getText().toString();
result_test1 = result_confirmatory.getText().toString();
}
} else {
result_confirmatory.setText("");
result.setText("");
Type.setText("Wrong File");
Type.setTextColor(Color.RED);
value = 0;
}
}
} else if (device.equals("Denovix")) {
resultsamp = "";
result_confirmatory.setText("");
result.setText("");
result_confirmatory.setText("");
result.setText("");
Type.setText(" Select Test Type * ");
Type.setTextColor(Color.WHITE);
Log.e("device", "denovix");
if (columnCount < 100) {
result_confirmatory.setText("");
result.setText("");
Type.setText("Wrong file");
Type.setTextColor(Color.RED);
} else {
init1();
while ((line = reader.readNext()) != null) {
String[] values = line;
if (values[1].equals("Blank")) {
continue;
}
if ((values[262].replaceAll("[^\\d.]", "")).equals("427") || (values[390].replaceAll("[^\\d.]", "")).equals("555")) {
continue; //just skip the rows if row number is 0 or 1
} else {
number1 = Float.parseFloat(String.valueOf(values[262].replaceAll("[^\\d.]", "")));
Log.e("number1", String.valueOf(number1));
number2 = Float.parseFloat(String.valueOf(values[390]).replaceAll("[^\\d.]", ""));
Log.e("number2", String.valueOf(number2));
}
if (number1 != 0 || number2 != 0) {
value = number2 / number1;
Log.e("value", String.valueOf(value));
if (value < 0.16 || value == 0.0) {
resultsamp = "Negative";
} else {
resultsamp = "Positive";
}
if (value >= 0.16 && value < 0.24) {
resultsamp = "Sickle Cell Trait ";
} else if (value > 0.24) {
resultsamp = "Sickle-Cell Disease";
}
} else if (columnCount < 100) {
result_confirmatory.setText("");
result.setText("");
Type.setText("Wrong file");
Type.setTextColor(Color.RED);
}
serial_no = values[0];
sample_name = values[1];
numbers1 = values[262];
numbers2 = values[390];
ratios = String.valueOf(value);
init(serial_no, sample_name, ratios, resultsamp);
}
}
}
} 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 SaveTestInfoToDatabase() {
HashMap<String, Object> 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<Void>() {
@Override
public void onComplete(@NonNull Task<Void> 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();
}
}
});
}
public void init1() {
TableLayout stk = (TableLayout) findViewById(R.id.table_main);
TableRow tbrow0 = new TableRow(this);
tbrow0.setBackgroundResource(R.color.purple_700);
TextView tv0 = new TextView(this);
tv0.setText(" S.No ");
tbrow0.addView(tv0);
TextView tv1 = new TextView(this);
tv1.setText(" Name sample ");
tbrow0.addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText(" Ratio ");
tbrow0.addView(tv2);
TextView tv3 = new TextView(this);
tv3.setText("Result ");
tbrow0.addView(tv3);
stk.addView(tbrow0);
}
public void init(String sno, String samplename, String ratio, String result) {
TableLayout stk = (TableLayout) findViewById(R.id.table_main);
TableRow tbrow = new TableRow(this);
TextView t1v = new TextView(this);
t1v.setText("" + sno + " ");
t1v.setBackgroundResource(R.drawable.cellshape);
t1v.setGravity(Gravity.CENTER);
tbrow.addView(t1v);
TextView t2v = new TextView(this);
t2v.setText(samplename + " ");
t2v.setBackgroundResource(R.drawable.cellshape);
t2v.setGravity(Gravity.CENTER);
tbrow.addView(t2v);
TextView t5v = new TextView(this);
t5v.setText(ratio + " ");
t5v.setGravity(Gravity.CENTER);
tbrow.addView(t5v);
t5v.setBackgroundResource(R.drawable.cellshape);
TextView t6v = new TextView(this);
t6v.setText(" " + result);
t6v.setGravity(Gravity.LEFT);
t6v.setBackgroundResource(R.drawable.cellshape);
tbrow.addView(t6v);
stk.addView(tbrow);
}
}