diff --git a/app/build.gradle b/app/build.gradle
index f0efbfe7..e744bca9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,21 +6,31 @@ apply plugin: 'com.android.application'
apply plugin: 'io.objectbox'
android {
+ buildToolsVersion = '28.0.3'
compileSdkVersion 28
defaultConfig {
applicationId "br.edu.uepb.nutes.haniot"
minSdkVersion 19
targetSdkVersion 28
- versionCode 2
- versionName "1.5.0"
+ versionCode 4
+ versionName "1.7.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
+ multiDexEnabled true
}
buildTypes {
- release {
+ debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
+ release {
+ lintOptions {
+ disable 'MissingTranslation'
+ }
+ minifyEnabled true
+ shrinkResources true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
}
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
@@ -37,8 +47,8 @@ dependencies {
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:support-vector-drawable:28.0.0'
- implementation 'com.squareup.okhttp3:okhttp:3.10.0'
- // TODO REMOVER após migração com retrofit for finalizada!
+
+ // Charts
implementation 'com.mikhaellopez:circularprogressbar:2.0.0'
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
@@ -46,20 +56,20 @@ dependencies {
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
- //Floating Action Button
+ // Floating Action Button
implementation 'com.github.clans:fab:1.6.4'
- //LIBRARY Simple BLE Connect
+ // LIBRARY Simple BLE Connect
implementation 'com.github.nutes-uepb:simple-ble-scanner:v1.0.1'
- //LIBRARY Pulsator4Droid
+ // LIBRARY Pulsator4Droid
implementation 'pl.bclogic:pulsator4droid:1.0.3'
// NUMBER PICKER
implementation 'com.shawnlin:number-picker:2.4.6'
// EVENT BUS
- implementation 'org.greenrobot:eventbus:3.0.0'
+ implementation 'org.greenrobot:eventbus:3.1.1'
//Android BLE Nordic
implementation 'no.nordicsemi.android:ble:2.1.0'
@@ -68,24 +78,31 @@ dependencies {
implementation 'com.github.nutes-uepb:simple-survey:v1.2.1'
// JavaRx
- implementation 'io.reactivex.rxjava2:rxjava:2.2.7'
+ implementation 'io.reactivex.rxjava2:rxjava:2.2.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
// Retrofit
- implementation 'com.squareup.retrofit2:retrofit:2.5.0'
- implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
- implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
+ implementation 'com.squareup.retrofit2:retrofit:2.6.1'
+ implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
+ implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.1'
+ implementation 'com.squareup.okhttp3:logging-interceptor:4.1.1'
// Encode/Decode
implementation 'com.scottyab:secure-preferences-lib:0.1.7'
implementation 'com.auth0.android:jwtdecode:1.2.0'
+ // Expandable Recyclerview
+ implementation 'com.thoughtbot:expandablerecyclerview:1.3'
+ implementation 'com.thoughtbot:expandablecheckrecyclerview:1.4'
+
+ // Nordic Scanner
+ implementation 'no.nordicsemi.android.support.v18:scanner:1.4.1'
+
// TEST
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'io.jsonwebtoken:jjwt:0.2'
- implementation 'com.thoughtbot:expandablerecyclerview:1.3'
- implementation 'com.thoughtbot:expandablecheckrecyclerview:1.4'
+ implementation 'com.android.support:multidex:1.0.3'
}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index f1b42451..f3448435 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -19,3 +19,11 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
+-dontwarn okhttp3.internal.platform.ConscryptPlatform
+-ignorewarnings
+
+-keepattributes *Annotation*
+-keepclassmembers class ** {
+ @org.greenrobot.eventbus.Subscribe ;
+}
+-keep enum org.greenrobot.eventbus.ThreadMode { *; }
diff --git a/app/release/output.json b/app/release/output.json
new file mode 100644
index 00000000..da55cbf5
--- /dev/null
+++ b/app/release/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":2,"versionName":"1.5.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 46e4057b..94fa459c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,5 +1,6 @@
@@ -8,6 +9,7 @@
+
-
-
+ tools:ignore="GoogleAppIndexingWarning"
+ android:fullBackupContent="true">
+
+
@@ -57,6 +64,9 @@
+
@@ -81,7 +91,7 @@
android:theme="@style/AppTheme" />
-
+
+
prepareMeasurement());
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(mReceiver);
+ }
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ int status = NetworkUtil.getConnectivityStatusString(context);
+
+ if (CONNECTIVITY_CHANGE.equals(action)) {
+ if (status == NetworkUtil.NETWORK_STATUS_NOT_CONNECTED) {
+ showMessageConnection(WIRELESS, true);
+ } else {
+ showMessageConnection(WIRELESS, false);
+ }
+ }
+ }
+ };
+
+ /**
+ * Displays message.
+ */
+ public void showMessageConnection(String typeMessageError, boolean show) {
+ Log.w("MainActivity", "show message: " + typeMessageError);
+
+ if (typeMessageError.equals(WIRELESS)) {
+ if (show) {
+ wifiRequest = true;
+ messageError.setOnClickListener(null);
+ messageError.setText(getString(R.string.wifi_disabled));
+ runOnUiThread(() -> {
+ boxMessage.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
+ boxMessage.setVisibility(View.VISIBLE);
+ });
+ } else {
+ wifiRequest = false;
+ boxMessage.setVisibility(View.GONE);
+ }
+ }
+ }
+
/**
* Set fragment.
*
@@ -175,7 +235,7 @@ public void replaceFragment(int measurementType) {
case ItemGridType.BLOOD_PRESSURE:
measurementText = getResources().getString(R.string.blood_pressure);
- typeMeasurement = "blood_pressure";
+ typeMeasurement = MeasurementType.BLOOD_PRESSURE;
messageInfo.setText(String.format(getResources().getString(R.string.add_measurement_message), measurementText, patientName));
getSupportActionBar().setTitle("Inserir Pressão Arterial");
textUnit.setText(getString(R.string.unit_pressure));
@@ -208,7 +268,7 @@ private void errorHandler(Throwable e) {
if (!checkConnectivity())
showMessage(R.string.no_internet_conection);
else
- showMessage(R.string.error_500);
+ ErrorHandler.showMessage(this, e);
}
/**
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/HistoricQuizActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/HistoricQuizActivity.java
new file mode 100644
index 00000000..fbfca49e
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/HistoricQuizActivity.java
@@ -0,0 +1,413 @@
+package br.edu.uepb.nutes.haniot.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import br.edu.uepb.nutes.haniot.R;
+import br.edu.uepb.nutes.haniot.adapter.HistoricQuizAdapter;
+import br.edu.uepb.nutes.haniot.data.model.GroupItemEvaluation;
+import br.edu.uepb.nutes.haniot.data.model.ItemEvaluation;
+import br.edu.uepb.nutes.haniot.data.model.NutritionalQuestionnaire;
+import br.edu.uepb.nutes.haniot.data.model.OdontologicalQuestionnaire;
+import br.edu.uepb.nutes.haniot.data.model.Patient;
+import br.edu.uepb.nutes.haniot.data.model.TypeEvaluation;
+import br.edu.uepb.nutes.haniot.data.model.User;
+import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
+import br.edu.uepb.nutes.haniot.utils.DateUtils;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+import static br.edu.uepb.nutes.haniot.data.model.ItemEvaluation.TYPE_ERROR;
+import static br.edu.uepb.nutes.haniot.data.model.ItemEvaluation.TYPE_LOADING;
+import static br.edu.uepb.nutes.haniot.data.model.ItemEvaluation.TYPE_QUIZ;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.ALL_QUIZ;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FAMILY_COHESION;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FEEDING_HABITS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.MEDICAL_RECORDS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.ORAL_HEALTH;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.PHYSICAL_ACTIVITY;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SLEEP_HABITS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SOCIODEMOGRAPHICS;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.DENTISTRY;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.NUTRITION;
+
+public class HistoricQuizActivity extends AppCompatActivity implements HistoricQuizAdapter.OnClick {
+
+ @BindView(R.id.list_quiz_nutrition)
+ RecyclerView listNutritional;
+
+ @BindView(R.id.list_quiz_odonto)
+ RecyclerView listOdontological;
+
+ @BindView(R.id.toolbar)
+ Toolbar toolbar;
+
+ @BindView(R.id.box_not_nutrition)
+ LinearLayout boxNotNutrition;
+
+ @BindView(R.id.box_not_odontological)
+ LinearLayout boxNotOdontological;
+
+ @BindView(R.id.icon_error_nutrition)
+ ImageView iconErrorNutrition;
+
+ @BindView(R.id.text_error_nutrition)
+ TextView textErrorNutrition;
+
+ @BindView(R.id.icon_error_dentistry)
+ ImageView iconErrorDentistry;
+
+ @BindView(R.id.text_error_dentistry)
+ TextView textErrorDentistry;
+
+ private HaniotNetRepository haniotNetRepository;
+ private AppPreferencesHelper appPreferencesHelper;
+ private Patient patient;
+ private List groupItemNutritionEvaluations;
+ private List groupItemOdontologicalEvaluations;
+ private HistoricQuizAdapter historicNutritionalAdapter;
+ private HistoricQuizAdapter historicOdontologicalAdapter;
+ private User user;
+ @BindView(R.id.loading_nutrition)
+ ProgressBar loadingNutrition;
+
+ @BindView(R.id.loading_odontological)
+ ProgressBar loadingOdontological;
+
+ @BindView(R.id.category_1)
+ TextView nutritionTitle;
+
+ @BindView(R.id.title_category2)
+ TextView dentistryTitle;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_historic_quiz);
+ ButterKnife.bind(this);
+ initResources();
+ initToolbar();
+ }
+
+ private void initResources() {
+ groupItemNutritionEvaluations = new ArrayList<>();
+ groupItemOdontologicalEvaluations = new ArrayList<>();
+ haniotNetRepository = HaniotNetRepository.getInstance(this);
+ appPreferencesHelper = AppPreferencesHelper.getInstance(this);
+ patient = appPreferencesHelper.getLastPatient();
+ user = appPreferencesHelper.getUserLogged();
+ if (!user.getUserType().equals(ADMIN)) {
+ if (user.getHealthArea().equals(DENTISTRY)) {
+ nutritionTitle.setVisibility(View.GONE);
+ loadingNutrition.setVisibility(View.GONE);
+ } else if (user.getHealthArea().equals(NUTRITION)) {
+ dentistryTitle.setVisibility(View.GONE);
+ loadingOdontological.setVisibility(View.GONE);
+ }
+ }
+ }
+
+
+ /**
+ * Initialize toolbar.
+ */
+ private void initToolbar() {
+ toolbar.setTitle("Histórico de Questionário");
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setDisplayShowHomeEnabled(true);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ prepareItems();
+ }
+
+ /**
+ * Download data listNutritional from the server.
+ */
+
+ private void downloadData() {
+ if (user.getUserType().equals(ADMIN) || !user.getHealthArea().equals(DENTISTRY)) {
+ DisposableManager.add(haniotNetRepository
+ .getAllNutritionalQuestionnaires(patient.get_id(), 1, 100, "created_at")
+ .subscribe(nutritional -> {
+ Log.w("AAA", "Size Nutrition: " + nutritional.size());
+ showErrorDownloadData(false, NUTRITION);
+ setNutritionalGroups(nutritional);
+ loadingNutrition.setVisibility(View.GONE);
+ }, throwable -> {
+ loadingNutrition.setVisibility(View.GONE);
+ showErrorDownloadData(true, NUTRITION);
+ }));
+ }
+
+ if (user.getUserType().equals(ADMIN) || !user.getHealthArea().equals(NUTRITION)) {
+ DisposableManager.add(haniotNetRepository
+ .getAllOdontologicalQuestionnaires(patient.get_id(), 1, 100, "created_at")
+ .subscribe(odontological -> {
+ Log.w("AAA", "Size Odonto: " + odontological.size());
+ showErrorDownloadData(false, DENTISTRY);
+ setOdontologicalGroups(odontological);
+ loadingOdontological.setVisibility(View.GONE);
+ }, throwable -> {
+ loadingOdontological.setVisibility(View.GONE);
+ showErrorDownloadData(true, DENTISTRY);
+ }));
+ }
+ }
+
+ /**
+ * Prepare listNutritional data from the server.
+ */
+ private void setNutritionalItem(NutritionalQuestionnaire nutritionalQuestionnaire) {
+ Log.w("BBBB", "setItem");
+ List itemEvaluations = new ArrayList<>();
+
+ ItemEvaluation itemEvaluation = new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
+ "Hábitos do Sono", TypeEvaluation.SLEEP_HABITS);
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setSleepHabit(nutritionalQuestionnaire.getSleepHabit());
+ itemEvaluations.add(itemEvaluation);
+
+ itemEvaluation = new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
+ "Histórico de Saúde", TypeEvaluation.MEDICAL_RECORDS);
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setMedicalRecord(nutritionalQuestionnaire.getMedicalRecord());
+ itemEvaluations.add(itemEvaluation);
+
+ itemEvaluation = new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
+ "Hábitos Alimentares", TypeEvaluation.FEEDING_HABITS);
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setFeedingHabitsRecord(nutritionalQuestionnaire.getFeedingHabitsRecord());
+ itemEvaluations.add(itemEvaluation);
+
+ itemEvaluation = new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
+ "Hábitos Físicos", TypeEvaluation.PHYSICAL_ACTIVITY);
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setPhysicalActivityHabit(nutritionalQuestionnaire.getPhysicalActivityHabit());
+ itemEvaluations.add(itemEvaluation);
+
+ GroupItemEvaluation groupItemEvaluation = new GroupItemEvaluation(DateUtils.convertDateTimeUTCToLocale(nutritionalQuestionnaire.getCreatedAt(), getString(R.string.datetime_format)),
+ itemEvaluations, 1000, nutritionalQuestionnaire.get_id());
+
+ groupItemNutritionEvaluations.add(groupItemEvaluation);
+
+ }
+
+
+ /**
+ * Prepare listNutritional data from the server.
+ */
+ private void setOdontologicalItem(OdontologicalQuestionnaire odontologicalQuestionnaire) {
+ Log.w("BBBB", "setItem");
+ List itemEvaluations = new ArrayList<>();
+
+ ItemEvaluation itemEvaluation = new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
+ "Sociodemográfico", SOCIODEMOGRAPHICS);
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setSociodemographicRecord(odontologicalQuestionnaire.getSociodemographicRecord());
+ itemEvaluations.add(itemEvaluation);
+
+ itemEvaluation = new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
+ "Coesão Familiar", FAMILY_COHESION);
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setFamilyCohesionRecord(odontologicalQuestionnaire.getFamilyCohesionRecord());
+ itemEvaluations.add(itemEvaluation);
+
+ itemEvaluation = new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
+ "Saúde Bucal", ORAL_HEALTH);
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setOralHealthRecord(odontologicalQuestionnaire.getOralHealthRecord());
+ itemEvaluations.add(itemEvaluation);
+
+
+ GroupItemEvaluation groupItemEvaluation = new GroupItemEvaluation("Respondido em " + DateUtils.convertDateTimeUTCToLocale(odontologicalQuestionnaire.getCreatedAt(), getString(R.string.datetime_format)),
+ itemEvaluations, 1000, odontologicalQuestionnaire.get_id());
+
+ groupItemOdontologicalEvaluations.add(groupItemEvaluation);
+
+ }
+
+ private void setNutritionalGroups(List nutritionalQuestionnaires) {
+
+ groupItemNutritionEvaluations.clear();
+ for (NutritionalQuestionnaire nutritionalQuestionnaire : nutritionalQuestionnaires) {
+ Log.w("AAA", nutritionalQuestionnaire.toString());
+ setNutritionalItem(nutritionalQuestionnaire);
+ }
+ if (nutritionalQuestionnaires.isEmpty()) {
+ showEmpty(true, NUTRITION);
+ }
+ listNutritional.setAdapter(null);
+ initRecyclerView();
+ }
+
+ private void setOdontologicalGroups(List odontologicalQuestionnaires) {
+
+ groupItemOdontologicalEvaluations.clear();
+ for (OdontologicalQuestionnaire odontologicalQuestionnaire : odontologicalQuestionnaires) {
+ Log.w("AAA", odontologicalQuestionnaire.toString());
+ setOdontologicalItem(odontologicalQuestionnaire);
+ }
+ if (odontologicalQuestionnaires.isEmpty()) {
+ showEmpty(true, DENTISTRY);
+ }
+ listOdontological.setAdapter(null);
+ initRecyclerView();
+ }
+
+ /**
+ * Show error.
+ *
+ * @param
+ */
+ private void onDownloadError(int type) {
+ GroupItemEvaluation groupItemEvaluation = getEvaluationGroupByType(type);
+ if (groupItemEvaluation == null) return;
+ groupItemEvaluation.getItems().get(0).setTypeHeader(TYPE_ERROR);
+ }
+
+ /**
+ * Get get listNutritional group object by type.
+ *
+ * @param type
+ * @return
+ */
+ private GroupItemEvaluation getEvaluationGroupByType(int type) {
+ for (GroupItemEvaluation groupItemEvaluation : groupItemNutritionEvaluations) {
+ if (groupItemEvaluation.getType() == type) {
+ return groupItemEvaluation;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Show recyclerview items in prepareItems mode.
+ */
+ private void prepareItems() {
+ groupItemOdontologicalEvaluations.clear();
+ groupItemNutritionEvaluations.clear();
+ downloadData();
+ }
+
+ /**
+ * Show message empty list.
+ */
+ private void showEmpty(boolean enabled, String type) {
+ if (type.equals(NUTRITION)) {
+ iconErrorNutrition.setImageResource(R.drawable.ic_not_form);
+ textErrorNutrition.setText(getString(R.string.nutrition_quiz_empty));
+ if (enabled) boxNotNutrition.setVisibility(View.VISIBLE);
+ else boxNotNutrition.setVisibility(View.GONE);
+ } else if (type.equals(DENTISTRY)) {
+ iconErrorDentistry.setImageResource(R.drawable.ic_not_form);
+ textErrorDentistry.setText(getString(R.string.dentistry_quiz_empty));
+ if (enabled) boxNotOdontological.setVisibility(View.VISIBLE);
+ else boxNotOdontological.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * Show message error download data.
+ */
+ private void showErrorDownloadData(boolean enabled, String type) {
+ if (type.equals(NUTRITION)) {
+ iconErrorNutrition.setImageResource(R.drawable.ic_error_server);
+ textErrorNutrition.setText(getText(R.string.error_recover_data));
+ if (enabled) boxNotNutrition.setVisibility(View.VISIBLE);
+ else boxNotNutrition.setVisibility(View.GONE);
+ } else if (type.equals(DENTISTRY)) {
+ iconErrorDentistry.setImageResource(R.drawable.ic_error_server);
+ textErrorDentistry.setText(getText(R.string.error_recover_data));
+ if (enabled) boxNotOdontological.setVisibility(View.VISIBLE);
+ else boxNotOdontological.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * Initialize NutritionalEvaluation recyclerview.
+ */
+ private void initRecyclerView() {
+ historicNutritionalAdapter = new HistoricQuizAdapter(groupItemNutritionEvaluations, this);
+ historicOdontologicalAdapter = new HistoricQuizAdapter(groupItemOdontologicalEvaluations, this);
+ listNutritional.setLayoutManager(new LinearLayoutManager(this));
+ listOdontological.setLayoutManager(new LinearLayoutManager(this));
+ listNutritional.setNestedScrollingEnabled(false);
+ listOdontological.setNestedScrollingEnabled(false);
+ historicNutritionalAdapter.setListener(this);
+ historicOdontologicalAdapter.setListener(this);
+ listNutritional.setAdapter(historicNutritionalAdapter);
+ listOdontological.setAdapter(historicOdontologicalAdapter);
+ }
+
+ @Override
+ public void onAddItemClick(String name, int type) {
+
+ }
+
+ @Override
+ public void onAddItemClick(String name, int type, String idQuiz) {
+ Intent intent = null;
+
+ switch (type) {
+ case MEDICAL_RECORDS:
+ intent = new Intent(this, QuizNutritionActivity.class);
+ intent.putExtra("checkpoint", MEDICAL_RECORDS);
+ break;
+ case SLEEP_HABITS:
+ intent = new Intent(this, QuizNutritionActivity.class);
+ intent.putExtra("checkpoint", SLEEP_HABITS);
+ break;
+ case FEEDING_HABITS:
+ intent = new Intent(this, QuizNutritionActivity.class);
+ intent.putExtra("checkpoint", FEEDING_HABITS);
+ break;
+ case PHYSICAL_ACTIVITY:
+ intent = new Intent(this, QuizNutritionActivity.class);
+ intent.putExtra("checkpoint", PHYSICAL_ACTIVITY);
+ break;
+ case FAMILY_COHESION:
+ intent = new Intent(this, QuizOdontologyActivity.class);
+ intent.putExtra("checkpoint", FAMILY_COHESION);
+ break;
+ case ORAL_HEALTH:
+ intent = new Intent(this, QuizOdontologyActivity.class);
+ intent.putExtra("checkpoint", ORAL_HEALTH);
+ break;
+ case SOCIODEMOGRAPHICS:
+ intent = new Intent(this, QuizOdontologyActivity.class);
+ intent.putExtra("checkpoint", SOCIODEMOGRAPHICS);
+ break;
+ }
+ if (intent != null) {
+ intent.putExtra("idUpdate", idQuiz);
+ startActivity(intent);
+ }
+ }
+
+ @Override
+ public void onSelectClick(ItemEvaluation itemEvaluation, String idQuiz) {
+
+ }
+
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/MainActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/MainActivity.java
index c677fe77..353c1fd1 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/MainActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/MainActivity.java
@@ -12,6 +12,7 @@
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
+import android.support.v4.widget.NestedScrollView;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
@@ -19,10 +20,13 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.Toast;
import com.github.clans.fab.FloatingActionButton;
+import com.github.clans.fab.FloatingActionMenu;
import br.edu.uepb.nutes.haniot.R;
import br.edu.uepb.nutes.haniot.activity.settings.SettingsActivity;
@@ -35,6 +39,11 @@
import butterknife.BindView;
import butterknife.ButterKnife;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.DENTISTRY;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.HEALTH_PROFESSIONAL;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.NUTRITION;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
+
/**
* Main activity, application start.
*
@@ -44,13 +53,17 @@ public class MainActivity extends AppCompatActivity implements DashboardChartsFr
private final String LOG_TAG = "MainActivity";
private final int REQUEST_ENABLE_BLUETOOTH = 1;
private final int REQUEST_ENABLE_LOCATION = 2;
-
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.frameCharts)
FrameLayout frameChart;
@BindView(R.id.frameMeasurements)
FrameLayout frameMeasurements;
+ @BindView(R.id.nestedScrollView)
+ NestedScrollView nestedScrollView;
+
+ @BindView(R.id.patient_actions)
+ public FloatingActionMenu patientActionsMenu;
@BindView(R.id.evaluation_nutrition)
FloatingActionButton nutritioEvaluation;
@@ -66,6 +79,7 @@ public class MainActivity extends AppCompatActivity implements DashboardChartsFr
private AppPreferencesHelper appPreferences;
private Patient patient;
private long backPressed;
+ private User userLogged;
@Override
@@ -76,16 +90,20 @@ protected void onCreate(Bundle savedInstanceState) {
toolbar.setTitle(getResources().getString(R.string.app_name));
setSupportActionBar(toolbar);
+ toolbar.requestFocus();
appPreferences = AppPreferencesHelper.getInstance(this);
-
dashboardChartsFragment = DashboardChartsFragment.newInstance();
measurementsGridFragment = MeasurementsGridFragment.newInstance();
-
+ userLogged = appPreferences.getUserLogged();
IntentFilter filterBluetooth = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mReceiver, filterBluetooth);
IntentFilter filterInternet = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(mReceiver, filterInternet);
setupPatientActions();
+ Log.w("AAA", "User type: " + appPreferences.getUserAccessHaniot());
+ Log.w("AAA", "User: " + appPreferences.getUserLogged());
+
+
}
private void loadDashboard() {
@@ -109,7 +127,9 @@ protected void onStart() {
protected void onResume() {
super.onResume();
// Verify the pilot is selected
- if (appPreferences.getLastPilotStudy() == null) {
+ Log.w("AAA", "" + userLogged.getPilotStudyIDSelected());
+ if ((userLogged.getPilotStudyIDSelected() == null || userLogged.getPilotStudyIDSelected().isEmpty())
+ && !appPreferences.getUserLogged().getUserType().equals(PATIENT)) {
startActivity(new Intent(this, WelcomeActivity.class));
} else {
checkPatient();
@@ -127,26 +147,43 @@ protected void onDestroy() {
*/
private void setupPatientActions() {
- if (appPreferences.getUserLogged().getHealthArea().equals("dentistry")) {
- quizNutrition.setVisibility(View.GONE);
- nutritioEvaluation.setVisibility(View.GONE);
+ nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
+ if (scrollY > oldScrollY) {
+ patientActionsMenu.hideMenu(true);
+ } else {
+ patientActionsMenu.showMenu(true);
+ }
+ });
+ quizOdonto.setOnClickListener(v -> {
+ startActivity(new Intent(this, QuizOdontologyActivity.class));
+ finish();
+ });
+ quizNutrition.setOnClickListener(v -> {
+ startActivity(new Intent(this, QuizNutritionActivity.class));
+ finish();
+ });
+ nutritioEvaluation.setOnClickListener(v -> {
+ Intent intent = new Intent(this, NutritionalEvaluationActivity.class);
+ intent.putExtra("type", "nutrition");
+ startActivity(intent);
+ });
- quizOdonto.setOnClickListener(v -> {
- startActivity(new Intent(this, QuizOdontologyActivity.class));
- finish();
- });
+ if (appPreferences.getUserLogged().getUserType().equals(HEALTH_PROFESSIONAL)) {
- } else {
- quizOdonto.setVisibility(View.GONE);
- quizNutrition.setOnClickListener(v -> {
- startActivity(new Intent(this, QuizNutritionActivity.class));
- finish();
- });
- nutritioEvaluation.setOnClickListener(v -> {
- measurementsGridFragment.saveHeartRateCollection();
- });
+ String healthArea = appPreferences.getUserLogged().getHealthArea();
+ if (healthArea.equals(DENTISTRY)) {
+ quizNutrition.setVisibility(View.GONE);
+ nutritioEvaluation.setVisibility(View.GONE);
+ } else if (healthArea.equals(NUTRITION)) {
+ quizOdonto.setVisibility(View.GONE);
+
+ } else if (healthArea.equals(PATIENT)) {
+ patientActionsMenu.setVisibility(View.INVISIBLE);
+ }
+ } else if (appPreferences.getUserLogged().getUserType().equals(PATIENT)) {
+ patientActionsMenu.setVisibility(View.INVISIBLE);
}
}
@@ -158,10 +195,11 @@ public void checkPatient() {
if (patient != null) {
loadDashboard();
-
checkPermissions();
} else {
- startActivity(new Intent(this, ManagerPatientsActivity.class));
+ if (!appPreferences.getUserLogged().getUserType().equals(PATIENT)) {
+ startActivity(new Intent(this, ManagerPatientsActivity.class));
+ }
}
}
@@ -172,7 +210,9 @@ public void checkPatient() {
public void checkPermissions() {
if (BluetoothAdapter.getDefaultAdapter() != null &&
!BluetoothAdapter.getDefaultAdapter().isEnabled()) {
- requestBluetoothEnable();
+ Log.w(LOG_TAG, "checkPermissions(): Bluetooth desligado");
+ dashboardChartsFragment.showMessageConnection("bluetooth", true);
+ if (appPreferences.getBluetoothMode()) requestBluetoothEnable();
} else if (!hasLocationPermissions()) {
requestLocationPermission();
}
@@ -182,6 +222,7 @@ public void checkPermissions() {
* Request Bluetooth permission
*/
private void requestBluetoothEnable() {
+ Log.w(LOG_TAG, "requestBluetoothEnable(): Criando intent");
startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE),
REQUEST_ENABLE_BLUETOOTH);
}
@@ -224,8 +265,12 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_ENABLE_BLUETOOTH) {
if (resultCode != Activity.RESULT_OK) {
- requestBluetoothEnable();
+ Log.w(LOG_TAG, "onActivityResult(): Bluetooth negado");
+ appPreferences.saveBluetoothMode(false);
+ dashboardChartsFragment.showMessageConnection("bluetooth", true);
} else {
+ Log.w(LOG_TAG, "onActivityResult(): Bluetooth aceito");
+ appPreferences.saveBluetoothMode(true);
requestLocationPermission();
}
}
@@ -235,6 +280,8 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
+ if (appPreferences.getUserLogged().getUserType().equals(PATIENT))
+ menu.getItem(0).setVisible(false);
return super.onCreateOptionsMenu(menu);
}
@@ -285,7 +332,7 @@ public void notifyNewMeasurement(String valueMeasurement) {
@Override
public void showMessage(int message) {
- dashboardChartsFragment.showMessage(message);
+// dashboardChartsFragment.showMessageConnection(message);
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@@ -295,19 +342,23 @@ public void onReceive(Context context, Intent intent) {
int status = NetworkUtil.getConnectivityStatusString(context);
if ("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) {
if (status == NetworkUtil.NETWORK_STATUS_NOT_CONNECTED) {
- dashboardChartsFragment.showMessage(R.string.wifi_disabled);
+ Log.w(LOG_TAG, "mReceiver: wifi desligado");
+ dashboardChartsFragment.showMessageConnection("wifi", true);
} else {
- dashboardChartsFragment.showMessage(-1);
+ Log.w(LOG_TAG, "mReceiver: wifi ligado");
+ dashboardChartsFragment.showMessageConnection("wifi", false);
}
}
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
BluetoothAdapter.ERROR);
if (state == BluetoothAdapter.STATE_OFF) {
- dashboardChartsFragment.showMessage(R.string.bluetooth_disabled);
-
+ Log.w(LOG_TAG, "mReceiver: Bluetooth desligado");
+ dashboardChartsFragment.showMessageConnection("bluetooth", true);
} else if (state == BluetoothAdapter.STATE_ON) {
- dashboardChartsFragment.showMessage(-1);
+ Log.w(LOG_TAG, "mReceiver: Bluetooth ligado");
+ appPreferences.saveBluetoothMode(true);
+ dashboardChartsFragment.showMessageConnection("bluetooth", false);
}
}
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/ManagerPatientsActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/ManagerPatientsActivity.java
index 4f339f53..6e902857 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/ManagerPatientsActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/ManagerPatientsActivity.java
@@ -2,7 +2,6 @@
import android.app.AlertDialog;
import android.content.Intent;
-import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
@@ -13,11 +12,8 @@
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
@@ -28,11 +24,11 @@
import br.edu.uepb.nutes.haniot.R;
import br.edu.uepb.nutes.haniot.activity.settings.SettingsActivity;
import br.edu.uepb.nutes.haniot.adapter.ManagerPatientAdapter;
-import br.edu.uepb.nutes.haniot.adapter.base.OnRecyclerViewListener;
import br.edu.uepb.nutes.haniot.data.model.Patient;
-import br.edu.uepb.nutes.haniot.data.model.PilotStudy;
+import br.edu.uepb.nutes.haniot.data.model.User;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.ErrorHandler;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -67,7 +63,7 @@ public class ManagerPatientsActivity extends AppCompatActivity {
private SearchView searchView;
private AppPreferencesHelper appPreferencesHelper;
private HaniotNetRepository haniotNetRepository;
- private PilotStudy pilotStudy;
+ private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -79,9 +75,9 @@ protected void onCreate(Bundle savedInstanceState) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
initResources();
- loadData();
}
+
/**
* Initialize SwipeRefresh
*/
@@ -93,21 +89,36 @@ private void initDataSwipeRefresh() {
* Init resources.
*/
private void initResources() {
+ recyclerViewPatient.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ if (dy > 0 || dy < 0 && addPatient.isShown()) {
+ addPatient.hide();
+ }
+ }
+
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ if (!recyclerView.canScrollVertically(1) && newState == RecyclerView.SCROLL_STATE_IDLE) {
+ addPatient.hide();
+ } else if (newState == RecyclerView.SCROLL_STATE_IDLE) {
+ addPatient.show();
+ }
+ super.onScrollStateChanged(recyclerView, newState);
+ }
+ });
message.setVisibility(View.INVISIBLE);
appPreferencesHelper = AppPreferencesHelper.getInstance(this);
haniotNetRepository = HaniotNetRepository.getInstance(this);
- pilotStudy = appPreferencesHelper.getLastPilotStudy();
patientList = new ArrayList<>();
+ user = appPreferencesHelper.getUserLogged();
disableBack();
- addPatient.setOnClickListener(v -> {
- startActivity(new Intent(getApplicationContext(), PatientRegisterActivity.class));
- finish();
- });
- addPatientShortCut.setOnClickListener(v -> {
- startActivity(new Intent(getApplicationContext(), PatientRegisterActivity.class));
- finish();
- });
+ View.OnClickListener onClickListener = v -> {
+ startActivity(new Intent(this, UserRegisterActivity.class));
+ };
+ addPatient.setOnClickListener(onClickListener);
+ addPatientShortCut.setOnClickListener(onClickListener);
initDataSwipeRefresh();
}
@@ -115,12 +126,14 @@ private void initResources() {
* Load patients in server.
*/
private void loadData() {
+ if (!addPatient.isShown()) addPatient.show();
mDataSwipeRefresh.setRefreshing(true);
DisposableManager.add(haniotNetRepository
- .getAllPatients(pilotStudy.get_id(), "created_at", 1, 100)
+ .getAllPatients(user.getPilotStudyIDSelected(), "created_at", 1, 100)
.doAfterTerminate(() -> mDataSwipeRefresh.setRefreshing(false))
.subscribe(patients -> {
patientList = patients;
+
initRecyclerView();
}, this::errorHandler));
disableBack();
@@ -139,12 +152,7 @@ public void onBackPressed() {
* @param e {@link Throwable}
*/
private void errorHandler(Throwable e) {
- if (e instanceof HttpException) {
- HttpException httpEx = ((HttpException) e);
- Log.i(LOG_TAG, httpEx.getMessage());
- showMessage(getResources().getString(R.string.error_500));
- }
- // message 500
+ ErrorHandler.showMessage(this, e);
}
@Override
@@ -157,19 +165,18 @@ private void initRecyclerView() {
adapter.setPatientActionListener(new ManagerPatientAdapter.ActionsPatientListener() {
@Override
public void onMenuClick(String action, Patient patient) {
- switch (action) {
- case "quiz_dentistry":
- appPreferencesHelper.saveLastPatient(patient);
- startActivity(new Intent(ManagerPatientsActivity.this, QuizOdontologyActivity.class));
- break;
- case "quiz_nutrition":
- appPreferencesHelper.saveLastPatient(patient);
- startActivity(new Intent(ManagerPatientsActivity.this, QuizNutritionActivity.class));
- break;
- case "nutrition_evaluation":
- appPreferencesHelper.saveLastPatient(patient);
- startActivity(new Intent(ManagerPatientsActivity.this, NutritionalEvaluationActivity.class));
- break;
+ if ("quiz_dentistry".equals(action)) {
+ appPreferencesHelper.saveLastPatient(patient);
+ startActivity(new Intent(ManagerPatientsActivity.this, QuizOdontologyActivity.class));
+ } else if ("quiz_nutrition".equals(action)) {
+ appPreferencesHelper.saveLastPatient(patient);
+ startActivity(new Intent(ManagerPatientsActivity.this, QuizNutritionActivity.class));
+ } else if ("nutrition_evaluation".equals(action)) {
+ appPreferencesHelper.saveLastPatient(patient);
+ startActivity(new Intent(ManagerPatientsActivity.this, NutritionalEvaluationActivity.class));
+ } else if ("historic_quiz".equals(action)) {
+ appPreferencesHelper.saveLastPatient(patient);
+ startActivity(new Intent(ManagerPatientsActivity.this, HistoricQuizActivity.class));
}
}
@@ -195,12 +202,17 @@ public void onMenuContextClick(View v, Patient item) {
.show();
} else if (v.getId() == R.id.btnEditChildren) {
- Intent intent = new Intent(ManagerPatientsActivity.this, PatientRegisterActivity.class);
+ Intent intent = new Intent(ManagerPatientsActivity.this, UserRegisterActivity.class);
intent.putExtra("action", "edit");
appPreferencesHelper.saveLastPatient(item);
startActivity(intent);
}
}
+
+ @Override
+ public void onItemSwiped(Patient item, int position) {
+
+ }
});
recyclerViewPatient.setHasFixedSize(true);
@@ -222,8 +234,8 @@ private void removePatient(Patient patient) {
adapter.removeItem(patient);
adapter.notifyDataSetChanged();
showMessage(getResources().getString(R.string.patient_removed));
- if (patient.get_id().equals(appPreferencesHelper.getLastPatient().get_id())) {
- Log.i("AAA", "Removendo atual paciente");
+ Patient lastPatient = appPreferencesHelper.getLastPatient();
+ if (lastPatient != null && patient.get_id().equals(lastPatient.get_id())) {
appPreferencesHelper.removeLastPatient();
}
},
@@ -247,26 +259,6 @@ protected void onResume() {
loadData();
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
-
- //Adiciona o menu a activity
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.menu_manage_patient, menu);
-
- //Botão search na toolbar
- MenuItem searchBtn = menu.findItem(R.id.btnSearchPatient);
- this.searchView = (SearchView) searchBtn.getActionView();
- searchView.setIconifiedByDefault(true);
- searchView.setMaxWidth(Integer.MAX_VALUE);
- searchView.setIconified(false);
- searchView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
- EditText searchEditText = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
- searchEditText.setTextColor(Color.WHITE);
-
- return super.onCreateOptionsMenu(menu);
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/NutritionalEvaluationActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/NutritionalEvaluationActivity.java
index 61fb233f..44d7434d 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/NutritionalEvaluationActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/NutritionalEvaluationActivity.java
@@ -18,32 +18,30 @@
import android.widget.Toast;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import br.edu.uepb.nutes.haniot.R;
import br.edu.uepb.nutes.haniot.adapter.EvaluationAdapter;
-import br.edu.uepb.nutes.haniot.data.model.FeedingHabitsRecord;
import br.edu.uepb.nutes.haniot.data.model.GroupItemEvaluation;
import br.edu.uepb.nutes.haniot.data.model.ItemEvaluation;
import br.edu.uepb.nutes.haniot.data.model.ItemGridType;
import br.edu.uepb.nutes.haniot.data.model.Measurement;
-import br.edu.uepb.nutes.haniot.data.model.MedicalRecord;
+import br.edu.uepb.nutes.haniot.data.model.MeasurementLastResponse;
import br.edu.uepb.nutes.haniot.data.model.NutritionalEvaluation;
+import br.edu.uepb.nutes.haniot.data.model.NutritionalQuestionnaire;
import br.edu.uepb.nutes.haniot.data.model.Patient;
-import br.edu.uepb.nutes.haniot.data.model.PhysicalActivityHabit;
import br.edu.uepb.nutes.haniot.data.model.PilotStudy;
-import br.edu.uepb.nutes.haniot.data.model.SleepHabit;
import br.edu.uepb.nutes.haniot.data.model.TypeEvaluation;
+import br.edu.uepb.nutes.haniot.data.model.User;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
import br.edu.uepb.nutes.haniot.devices.GlucoseActivity;
-import br.edu.uepb.nutes.haniot.devices.HeartRateActivity;
import br.edu.uepb.nutes.haniot.devices.ScaleActivity;
import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
import butterknife.BindView;
import butterknife.ButterKnife;
-import retrofit2.HttpException;
import static br.edu.uepb.nutes.haniot.data.model.ItemEvaluation.TYPE_EMPTY_REQUIRED;
import static br.edu.uepb.nutes.haniot.data.model.ItemEvaluation.TYPE_ERROR;
@@ -51,6 +49,7 @@
import static br.edu.uepb.nutes.haniot.data.model.ItemEvaluation.TYPE_MEASUREMENT;
import static br.edu.uepb.nutes.haniot.data.model.ItemEvaluation.TYPE_QUIZ;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.ALL_MEASUREMENT;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.ALL_QUIZ;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.BLOOD_PRESSURE;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FEEDING_HABITS;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.GLUCOSE;
@@ -87,6 +86,12 @@ public class NutritionalEvaluationActivity extends AppCompatActivity implements
private AppPreferencesHelper appPreferencesHelper;
private NutritionalEvaluation nutritionalEvaluation;
private PilotStudy pilotStudy;
+ private NutritionalQuestionnaire lastNutritionalQuestionnaire;
+ private List measurementList;
+ private boolean leftFields;
+ private MeasurementLastResponse measurementLastResponse;
+ private HashMap validated;
+ private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -138,12 +143,13 @@ private void initToolbar() {
* Initialize resources.
*/
private void initResources() {
+ validated = new HashMap<>();
groupItemEvaluations = new ArrayList<>();
helper = AppPreferencesHelper.getInstance(this);
haniotNetRepository = HaniotNetRepository.getInstance(this);
appPreferencesHelper = AppPreferencesHelper.getInstance(this);
patient = helper.getLastPatient();
- pilotStudy = helper.getLastPilotStudy();
+ user = helper.getUserLogged();
}
private void showToast(final String menssage) {
@@ -173,7 +179,7 @@ public void showMessage(@StringRes int str) {
}
/**
- * Get get evaluation group object by type.
+ * Get get listNutritional group object by type.
*
* @param type
* @return
@@ -215,12 +221,6 @@ private void prepareItems() {
groupItemEvaluations.add(new GroupItemEvaluation(getString(R.string.waits_circumference),
itemsLoading, WAIST_CIRCUMFERENCE));
- itemsLoading = new ArrayList<>();
- itemsLoading.add(new ItemEvaluation(R.drawable.xcardiogram, TYPE_LOADING,
- getString(R.string.heart_rate), HEARTRATE));
- groupItemEvaluations.add(new GroupItemEvaluation(getString(R.string.heart_rate),
- itemsLoading, HEARTRATE));
-
itemsLoading = new ArrayList<>();
itemsLoading.add(new ItemEvaluation(R.drawable.xblood_pressure, TYPE_LOADING,
getString(R.string.blood_pressure), BLOOD_PRESSURE));
@@ -230,25 +230,25 @@ private void prepareItems() {
itemsLoading = new ArrayList<>();
itemsLoading.add(new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
"Histórico de Saúde", TypeEvaluation.MEDICAL_RECORDS));
- groupItemEvaluations.add(new GroupItemEvaluation("Questionário Nutricional - Histórico de Saúde",
+ groupItemEvaluations.add(new GroupItemEvaluation("Histórico de Saúde",
itemsLoading, MEDICAL_RECORDS));
itemsLoading = new ArrayList<>();
itemsLoading.add(new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
"Hábitos Físicos", TypeEvaluation.PHYSICAL_ACTIVITY));
- groupItemEvaluations.add(new GroupItemEvaluation("Questionário Nutricional - Hábitos Físicos",
+ groupItemEvaluations.add(new GroupItemEvaluation("Hábitos Físicos",
itemsLoading, PHYSICAL_ACTIVITY));
itemsLoading = new ArrayList<>();
itemsLoading.add(new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
"Hábitos Alimentares", TypeEvaluation.FEEDING_HABITS));
- groupItemEvaluations.add(new GroupItemEvaluation("Questionário Nutricional - Hábitos Alimentares",
+ groupItemEvaluations.add(new GroupItemEvaluation("Hábitos Alimentares",
itemsLoading, FEEDING_HABITS));
itemsLoading = new ArrayList<>();
itemsLoading.add(new ItemEvaluation(R.drawable.action_quiz, TYPE_LOADING,
"Hábitos do Sono", TypeEvaluation.SLEEP_HABITS));
- groupItemEvaluations.add(new GroupItemEvaluation("Questionário Nutricional - Hábitos do Sono",
+ groupItemEvaluations.add(new GroupItemEvaluation("Hábitos do Sono",
itemsLoading, SLEEP_HABITS));
initRecyclerView();
@@ -257,78 +257,86 @@ private void prepareItems() {
}
/**
- * Prepare evaluation data from the server.
+ * Prepare listNutritional data from the server.
+ */
+ private void prepareQuiz(NutritionalQuestionnaire nutritionalQuestionnaire) {
+
+ GroupItemEvaluation groupItemEvaluation;
+ ItemEvaluation itemEvaluation;
+
+ //Sleep Habits
+ groupItemEvaluation = getEvaluationGroupByType(SLEEP_HABITS);
+ if (groupItemEvaluation != null) {
+ itemEvaluation = groupItemEvaluation.getItems().get(0);
+ if (nutritionalQuestionnaire.getSleepHabit() == null) {
+ itemEvaluation.setTypeHeader(TYPE_EMPTY_REQUIRED);
+ } else {
+ nutritionalQuestionnaire.getSleepHabit().setCreatedAt(nutritionalQuestionnaire.getCreatedAt());
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setSleepHabit(lastNutritionalQuestionnaire.getSleepHabit());
+ }
+ }
+
+ //Medical Records
+ groupItemEvaluation = getEvaluationGroupByType(MEDICAL_RECORDS);
+ if (groupItemEvaluation != null) {
+ itemEvaluation = groupItemEvaluation.getItems().get(0);
+ if (nutritionalQuestionnaire.getMedicalRecord() == null) {
+ itemEvaluation.setTypeHeader(TYPE_EMPTY_REQUIRED);
+ } else {
+ nutritionalQuestionnaire.getMedicalRecord().setCreatedAt(nutritionalQuestionnaire.getCreatedAt());
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setMedicalRecord(lastNutritionalQuestionnaire.getMedicalRecord());
+ }
+ }
+
+ //Feeding habits
+ groupItemEvaluation = getEvaluationGroupByType(FEEDING_HABITS);
+ if (groupItemEvaluation != null) {
+ itemEvaluation = groupItemEvaluation.getItems().get(0);
+ if (nutritionalQuestionnaire.getFeedingHabitsRecord() == null) {
+ itemEvaluation.setTypeHeader(TYPE_EMPTY_REQUIRED);
+ } else {
+ nutritionalQuestionnaire.getFeedingHabitsRecord().setCreatedAt(nutritionalQuestionnaire.getCreatedAt());
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setFeedingHabitsRecord(lastNutritionalQuestionnaire.getFeedingHabitsRecord());
+ }
+ }
+
+ //Physical Activity
+ groupItemEvaluation = getEvaluationGroupByType(PHYSICAL_ACTIVITY);
+ if (groupItemEvaluation != null) {
+ itemEvaluation = groupItemEvaluation.getItems().get(0);
+ if (nutritionalQuestionnaire.getPhysicalActivityHabit() == null) {
+ itemEvaluation.setTypeHeader(TYPE_EMPTY_REQUIRED);
+ } else {
+ nutritionalQuestionnaire.getPhysicalActivityHabit().setCreatedAt(nutritionalQuestionnaire.getCreatedAt());
+ itemEvaluation.setTypeHeader(TYPE_QUIZ);
+ itemEvaluation.setPhysicalActivityHabit(lastNutritionalQuestionnaire.getPhysicalActivityHabit());
+ }
+ }
+ evaluationAdapter.notifyDataSetChanged();
+ }
+
+ /**
+ * Prepare item measurement from the server.
*
- * @param data
* @param type
*/
- private void prepareData(List data, int type) {
+ private void prepareMeasurement(Measurement measurement, int type) {
GroupItemEvaluation groupItemEvaluation = getEvaluationGroupByType(type);
- int reminderFirst5 = 0;
- int reminderFirst1 = 0;
- int reminderFirst2 = 0;
- int reminderFirst3 = 0;
- int reminderFirst4 = 0;
if (groupItemEvaluation == null) return;
- if (data.isEmpty() && !groupItemEvaluation.getItems().isEmpty())
+ if (measurement == null && !groupItemEvaluation.getItems().isEmpty())
groupItemEvaluation.getItems().get(0).setTypeHeader(TYPE_EMPTY_REQUIRED);
else {
+ validated.put(type, true);
ItemEvaluation itemEvaluation = (ItemEvaluation) groupItemEvaluation.getItems().get(0).clone();
groupItemEvaluation.getItems().clear();
- switch (type) {
- case SLEEP_HABITS:
- for (SleepHabit sleepHabit : (List) data) {
- if (reminderFirst1 == 0) itemEvaluation.setChecked(true);
- itemEvaluation.setTypeHeader(TYPE_QUIZ);
- itemEvaluation.setSleepHabit(sleepHabit);
- groupItemEvaluation.getItems().add(itemEvaluation);
- itemEvaluation = (ItemEvaluation) groupItemEvaluation.getItems().get(0).clone();
- reminderFirst1++;
- }
- break;
- case MEDICAL_RECORDS:
- for (MedicalRecord medicalRecord : (List) data) {
- if (reminderFirst2 == 0) itemEvaluation.setChecked(true);
- itemEvaluation.setTypeHeader(TYPE_QUIZ);
- itemEvaluation.setMedicalRecord(medicalRecord);
- groupItemEvaluation.getItems().add(itemEvaluation);
- itemEvaluation = (ItemEvaluation) groupItemEvaluation.getItems().get(0).clone();
- reminderFirst2++;
- }
- break;
- case FEEDING_HABITS:
- for (FeedingHabitsRecord feedingHabitsRecord : (List) data) {
- if (reminderFirst3 == 0) itemEvaluation.setChecked(true);
- itemEvaluation.setTypeHeader(TYPE_QUIZ);
- itemEvaluation.setFeedingHabitsRecord(feedingHabitsRecord);
- groupItemEvaluation.getItems().add(itemEvaluation);
- itemEvaluation = (ItemEvaluation) groupItemEvaluation.getItems().get(0).clone();
- reminderFirst3++;
- }
- break;
- case PHYSICAL_ACTIVITY:
- for (PhysicalActivityHabit physicalActivityHabit : (List) data) {
- if (reminderFirst4 == 0) itemEvaluation.setChecked(true);
- itemEvaluation.setChecked(true);
- itemEvaluation.setTypeHeader(TYPE_QUIZ);
- itemEvaluation.setPhysicalActivityHabit(physicalActivityHabit);
- groupItemEvaluation.getItems().add(itemEvaluation);
- itemEvaluation = (ItemEvaluation) groupItemEvaluation.getItems().get(0).clone();
- reminderFirst4++;
- }
- break;
- default:
- for (Measurement measurement : (List) data) {
- if (reminderFirst5 == 0) itemEvaluation.setChecked(true);
- itemEvaluation.setTypeHeader(TYPE_MEASUREMENT);
- itemEvaluation.setMeasurement(measurement);
- groupItemEvaluation.getItems().add(itemEvaluation);
- itemEvaluation = (ItemEvaluation) groupItemEvaluation.getItems().get(0).clone();
- reminderFirst5++;
- }
- }
+ itemEvaluation.setTypeHeader(TYPE_MEASUREMENT);
+ itemEvaluation.setMeasurement(measurement);
+ groupItemEvaluation.getItems().add(itemEvaluation);
}
evaluationAdapter.notifyDataSetChanged();
}
@@ -346,6 +354,11 @@ private void onDownloadError(int type) {
getEvaluationGroupByType(HEIGHT).getItems().get(0).setTypeHeader(TYPE_ERROR);
getEvaluationGroupByType(HEARTRATE).getItems().get(0).setTypeHeader(TYPE_ERROR);
getEvaluationGroupByType(BLOOD_PRESSURE).getItems().get(0).setTypeHeader(TYPE_ERROR);
+ } else if (type == ALL_QUIZ) {
+ getEvaluationGroupByType(MEDICAL_RECORDS).getItems().get(0).setTypeHeader(TYPE_ERROR);
+ getEvaluationGroupByType(PHYSICAL_ACTIVITY).getItems().get(0).setTypeHeader(TYPE_ERROR);
+ getEvaluationGroupByType(SLEEP_HABITS).getItems().get(0).setTypeHeader(TYPE_ERROR);
+ getEvaluationGroupByType(FEEDING_HABITS).getItems().get(0).setTypeHeader(TYPE_ERROR);
} else {
GroupItemEvaluation groupItemEvaluation = getEvaluationGroupByType(type);
if (groupItemEvaluation == null) return;
@@ -354,124 +367,91 @@ private void onDownloadError(int type) {
}
/**
- * Download data evaluation from the server.
+ * Download data listNutritional from the server.
*/
private void downloadData() {
DisposableManager.add(haniotNetRepository
- .getAllMedicalRecord(helper.getLastPatient().get_id()
- , 1, 20, "created_at")
- .subscribe(medicalRecords ->
- prepareData(medicalRecords, MEDICAL_RECORDS),
- error -> {
- Log.i("AAA", error.getMessage());
- onDownloadError(MEDICAL_RECORDS);
- }));
-
- DisposableManager.add(haniotNetRepository
- .getAllPhysicalActivity(helper.getLastPatient().get_id()
- , 1, 20, "created_at")
- .subscribe(physicalActivityHabits ->
- prepareData(physicalActivityHabits, PHYSICAL_ACTIVITY),
- type -> onDownloadError(PHYSICAL_ACTIVITY)));
-
- DisposableManager.add(haniotNetRepository
- .getAllFeedingHabits(helper.getLastPatient().get_id()
- , 1, 20, "created_at")
- .subscribe(feedingHabitsRecords ->
- prepareData(feedingHabitsRecords, FEEDING_HABITS),
- type -> onDownloadError(FEEDING_HABITS)));
+ .getLastNutritionalQuestionnaire(patient.get_id())
+ .subscribe(nutritionalQuestionnaires -> {
+ Log.w("AAA", nutritionalQuestionnaires.toJson());
+ lastNutritionalQuestionnaire = nutritionalQuestionnaires;
+ prepareQuiz(nutritionalQuestionnaires);
+ }, throwable -> {
+ Log.i("AAA", throwable.getMessage());
+ onDownloadError(ALL_QUIZ);
+ }));
DisposableManager.add(haniotNetRepository
- .getAllSleepHabits(helper.getLastPatient().get_id()
- , 1, 20, "created_at")
- .subscribe(sleepHabits ->
- prepareData(sleepHabits, SLEEP_HABITS),
- type -> onDownloadError(SLEEP_HABITS)));
+ .getLastMeasurements(patient.get_id())
+ .subscribe(measurents -> {
+ Log.w("AAA", measurents.toJson());
+ measurementLastResponse = measurents;
+ // measurementList = measurents;
+ prepareMeasurements(measurents);
+ }, throwable -> {
+ Log.i("AAA", throwable.getMessage());
+ onDownloadError(ALL_MEASUREMENT);
+ }));
- DisposableManager.add(haniotNetRepository
- .getAllMeasurements(helper.getLastPatient().get_id()
- , 1, 100000, "-timestamp")
- .subscribe(this::prepareMeasurements,
- type -> onDownloadError(ALL_MEASUREMENT)));
-// DisposableManager.add(haniotNetRepository
-// .getAllMeasurements(helper.getLastPatient().get_id()
-// , "created_at", pilotStudy.getStart(), pilotStudy.getEnd(), 1, 1000)
-// .subscribe(this::prepareMeasurements,
-// type -> onDownloadError(ALL_MEASUREMENT)));
}
/**
- * Prepare measurements list from server.
+ * Prepare measurements from Measurement Last Response from server.
*
- * @param measurements
+ * @param measurementLastResponse
*/
- private void prepareMeasurements(List measurements) {
- List glucose = new ArrayList<>();
- List bloodPressure = new ArrayList<>();
- List heartRate = new ArrayList<>();
- List height = new ArrayList<>();
- List waistCircumference = new ArrayList<>();
- List weight = new ArrayList<>();
-
- int countHeartRate = 0;
- for (Measurement measurement : measurements) {
- Log.i("AAA", measurement.getValue() + " - " + measurement.getType());
- switch (measurement.getType()) {
- case "blood_glucose":
- glucose.add(measurement);
- break;
- case "blood_pressure":
- bloodPressure.add(measurement);
- break;
- case "heart_rate":
- if (countHeartRate >= 5) break;
- heartRate.add(measurement);
- countHeartRate++;
- break;
- case "height":
- height.add(measurement);
- break;
- case "waist_circumference":
- waistCircumference.add(measurement);
- break;
- case "weight":
- weight.add(measurement);
- break;
- }
- }
-
- prepareData(heartRate, HEARTRATE);
- prepareData(bloodPressure, BLOOD_PRESSURE);
- prepareData(weight, WEIGHT);
- prepareData(glucose, GLUCOSE);
- prepareData(waistCircumference, WAIST_CIRCUMFERENCE);
- prepareData(height, HEIGHT);
+ private void prepareMeasurements(MeasurementLastResponse measurementLastResponse) {
+ Log.w("AAA", "A " + measurementLastResponse);
+ if (measurementLastResponse.getBloodPressure() != null && measurementLastResponse.getBloodPressure().get_id() != null)
+ prepareMeasurement(measurementLastResponse.getBloodPressure(), BLOOD_PRESSURE);
+ else prepareMeasurement(null, BLOOD_PRESSURE);
+ if (measurementLastResponse.getWeight() != null && measurementLastResponse.getWeight().get_id() != null)
+ prepareMeasurement(measurementLastResponse.getWeight(), WEIGHT);
+ else prepareMeasurement(null, WEIGHT);
+ if (measurementLastResponse.getBloodGlucose() != null && measurementLastResponse.getBloodGlucose().get_id() != null)
+ prepareMeasurement(measurementLastResponse.getBloodGlucose(), GLUCOSE);
+ else prepareMeasurement(null, GLUCOSE);
+ if (measurementLastResponse.getWaistCircumference() != null && measurementLastResponse.getWaistCircumference().get_id() != null)
+ prepareMeasurement(measurementLastResponse.getWaistCircumference(), WAIST_CIRCUMFERENCE);
+ else prepareMeasurement(null, WAIST_CIRCUMFERENCE);
+ if (measurementLastResponse.getHeight() != null && measurementLastResponse.getHeight().get_id() != null)
+ prepareMeasurement(measurementLastResponse.getHeight(), HEIGHT);
+ else prepareMeasurement(null, HEIGHT);
}
/**
* Send nutritionalEvaluation for server.
*/
private void sendEvaluation() {
-
- Log.i("AAA", "Preparing evaluation...");
+ Log.i("AAA", "Preparing listNutritional...");
nutritionalEvaluation.setPatient(patient);
nutritionalEvaluation.setHealthProfessionalId(appPreferencesHelper.getUserLogged().get_id());
- nutritionalEvaluation.setPilotStudy(appPreferencesHelper.getLastPilotStudy().get_id());
- if (nutritionalEvaluation.getMeasurements() != null)
- nutritionalEvaluation.getMeasurements().clear();
-
- if (getCheckedMeasurement(HEARTRATE)
- && getCheckedMeasurement(GLUCOSE)
- && getCheckedMeasurement(BLOOD_PRESSURE)
- && getCheckedMeasurement(WEIGHT)
- && getCheckedMeasurement(WAIST_CIRCUMFERENCE)
- && getCheckedMeasurement(HEIGHT)
- && getCheckedQuiz(PHYSICAL_ACTIVITY)
- && getCheckedQuiz(MEDICAL_RECORDS)
- && getCheckedQuiz(SLEEP_HABITS)
- && getCheckedQuiz(FEEDING_HABITS)) {
-
+ nutritionalEvaluation.setPilotStudy(user.getPilotStudyIDSelected());
+
+ leftFields = validated.get(GLUCOSE) != null
+ && validated.get(BLOOD_PRESSURE) != null
+ && validated.get(WAIST_CIRCUMFERENCE) != null
+ && validated.get(WEIGHT) != null
+ && validated.get(SLEEP_HABITS) != null
+ && validated.get(PHYSICAL_ACTIVITY) == null
+ && validated.get(MEDICAL_RECORDS) != null
+ && validated.get(FEEDING_HABITS) != null;
+
+ if (!leftFields) {
+ nutritionalEvaluation.setFeedingHabits(lastNutritionalQuestionnaire.getFeedingHabitsRecord());
+ nutritionalEvaluation.setPhysicalActivityHabits(lastNutritionalQuestionnaire.getPhysicalActivityHabit());
+ nutritionalEvaluation.setMedicalRecord(lastNutritionalQuestionnaire.getMedicalRecord());
+ nutritionalEvaluation.setSleepHabits(lastNutritionalQuestionnaire.getSleepHabit());
+
+ List measurements = new ArrayList<>();
+ measurements.add(measurementLastResponse.getBloodPressure());
+ measurements.add(measurementLastResponse.getWaistCircumference());
+ measurements.add(measurementLastResponse.getWeight());
+ measurements.add(measurementLastResponse.getBloodGlucose());
+ measurements.add(measurementLastResponse.getHeight());
+
+ nutritionalEvaluation.setMeasurements(measurements);
Log.i("AAA", "Saida: " + nutritionalEvaluation.toJson());
new AlertDialog.Builder(this)
@@ -492,33 +472,6 @@ && getCheckedQuiz(FEEDING_HABITS)) {
}
}
- private boolean getCheckedQuiz(int type) {
- boolean contains = false;
- if (getEvaluationGroupByType(type) == null) return false;
- for (ItemEvaluation itemEvaluation : getEvaluationGroupByType(type).getItems())
- if (itemEvaluation.isChecked()) {
- switch (itemEvaluation.getTypeEvaluation()) {
- case PHYSICAL_ACTIVITY:
- nutritionalEvaluation.setPhysicalActivityHabits(itemEvaluation.getPhysicalActivityHabit());
- contains = true;
- break;
- case SLEEP_HABITS:
- nutritionalEvaluation.setSleepHabits(itemEvaluation.getSleepHabit());
- contains = true;
- break;
- case MEDICAL_RECORDS:
- nutritionalEvaluation.setMedicalRecord(itemEvaluation.getMedicalRecord());
- contains = true;
- break;
- case FEEDING_HABITS:
- nutritionalEvaluation.setFeedingHabits(itemEvaluation.getFeedingHabitsRecord());
- contains = true;
- break;
- }
- }
- return contains;
- }
-
/**
* Manipulates the error and displays message
* according to the type of error.
@@ -526,6 +479,7 @@ private boolean getCheckedQuiz(int type) {
* @param e {@link Throwable}
*/
private void errorHandler(Throwable e) {
+ Log.w("AAA", e.getMessage());
if (!checkConnectivity())
showMessage(R.string.no_internet_conection);
else
@@ -545,27 +499,6 @@ private boolean checkConnectivity() {
return true;
}
- /**
- * Verify if exists measurement by type selected.
- *
- * @param type
- * @return
- */
- private boolean getCheckedMeasurement(int type) {
- int count = 0;
- GroupItemEvaluation groupItemEvaluation = getEvaluationGroupByType(type);
- if (groupItemEvaluation == null) return false;
-
- for (ItemEvaluation itemEvaluation1 : groupItemEvaluation.getItems()) {
- if (itemEvaluation1.isChecked()) {
- nutritionalEvaluation.addMeasuerement(itemEvaluation1.getMeasurement());
- count++;
- }
- }
-
- return count > 0;
- }
-
@Override
public void onAddItemClick(String name, int type) {
Intent intent;
@@ -573,9 +506,6 @@ public void onAddItemClick(String name, int type) {
case GLUCOSE:
intent = new Intent(this, GlucoseActivity.class);
break;
- case HEARTRATE:
- intent = new Intent(this, HeartRateActivity.class);
- break;
case WEIGHT:
intent = new Intent(this, ScaleActivity.class);
break;
@@ -586,57 +516,20 @@ public void onAddItemClick(String name, int type) {
.saveInt(getResources().getString(R.string.measurementType), ItemGridType.ANTHROPOMETRIC);
break;
case MEDICAL_RECORDS:
- intent = new Intent(this, QuizNutritionActivity.class);
- intent.putExtra("checkpoint", MEDICAL_RECORDS);
+ intent = new Intent(this, HistoricQuizActivity.class);
break;
case PHYSICAL_ACTIVITY:
- intent = new Intent(this, QuizNutritionActivity.class);
- intent.putExtra("checkpoint", PHYSICAL_ACTIVITY);
+ intent = new Intent(this, HistoricQuizActivity.class);
break;
case FEEDING_HABITS:
- intent = new Intent(this, QuizNutritionActivity.class);
- intent.putExtra("checkpoint", FEEDING_HABITS);
+ intent = new Intent(this, HistoricQuizActivity.class);
break;
case SLEEP_HABITS:
- intent = new Intent(this, QuizNutritionActivity.class);
- intent.putExtra("checkpoint", SLEEP_HABITS);
+ intent = new Intent(this, HistoricQuizActivity.class);
break;
default:
return;
}
startActivity(intent);
}
-
- @Override
- public void onSelectClick(ItemEvaluation itemEvaluation, boolean selected) {
- Log.i("AAA", "Antes:" + nutritionalEvaluation.toString());
- if (itemEvaluation.getTypeHeader() == TYPE_MEASUREMENT) {
- if (selected) nutritionalEvaluation.addMeasuerement(itemEvaluation.getMeasurement());
- else nutritionalEvaluation.removeMeasuerement(itemEvaluation.getMeasurement());
- }
- switch (itemEvaluation.getTypeEvaluation()) {
- case SLEEP_HABITS:
- if (selected) nutritionalEvaluation.setSleepHabits(itemEvaluation.getSleepHabit());
- else nutritionalEvaluation.setSleepHabits(null);
- break;
- case MEDICAL_RECORDS:
- if (selected)
- nutritionalEvaluation.setMedicalRecord(itemEvaluation.getMedicalRecord());
- else nutritionalEvaluation.setMedicalRecord(null);
- break;
- case PHYSICAL_ACTIVITY:
- if (selected)
- nutritionalEvaluation.setPhysicalActivityHabits(itemEvaluation.getPhysicalActivityHabit());
- else nutritionalEvaluation.setPhysicalActivityHabits(null);
- break;
- case FEEDING_HABITS:
- if (selected)
- nutritionalEvaluation.setFeedingHabits(itemEvaluation.getFeedingHabitsRecord());
- else nutritionalEvaluation.setFeedingHabits(null);
- break;
- default:
- break;
- }
- Log.i("AAA", "Depois:" + nutritionalEvaluation.toString());
- }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/PatientRegisterActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/PatientRegisterActivity.java
deleted file mode 100644
index 74c179aa..00000000
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/PatientRegisterActivity.java
+++ /dev/null
@@ -1,377 +0,0 @@
-package br.edu.uepb.nutes.haniot.activity;
-
-import android.app.Activity;
-import android.app.DatePickerDialog;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.StringRes;
-import android.support.design.widget.FloatingActionButton;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
-import android.util.Log;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.animation.AnimationUtils;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.RadioGroup;
-import android.widget.TextView;
-
-import java.util.Calendar;
-
-import br.edu.uepb.nutes.haniot.R;
-import br.edu.uepb.nutes.haniot.data.model.Patient;
-import br.edu.uepb.nutes.haniot.data.model.PatientsType;
-import br.edu.uepb.nutes.haniot.data.model.dao.PatientDAO;
-import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
-import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
-import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
-import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
-import br.edu.uepb.nutes.haniot.utils.DateUtils;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import retrofit2.HttpException;
-
-/**
- * PatientRegisterActivity implementation.
- *
- * @author Fábio Júnior
- * @version 1.0
- * @copyright Copyright (c) 2019, NUTES UEPB
- */
-public class PatientRegisterActivity extends AppCompatActivity {
-
- final private String TAG = "PatientRegisterActivity";
- @BindView(R.id.toolbar)
- Toolbar toolbar;
-
- @BindView(R.id.fab)
- FloatingActionButton fab;
-
- @BindView(R.id.name_edittext)
- EditText nameEditTExt;
-
- @BindView(R.id.email_edittext)
- EditText emailEditTExt;
-
- @BindView(R.id.gender_icon)
- ImageView genderIcon;
-
- @BindView(R.id.radio_group)
- RadioGroup genderGroup;
-
- @BindView(R.id.birth_edittext)
- EditText birthEdittext;
-
- @BindView(R.id.phone_edittext)
- EditText phoneEdittext;
-
- @BindView(R.id.box_message_error)
- LinearLayout boxMessage;
-
- @BindView(R.id.message_error)
- TextView messageError;
-
- @BindView(R.id.loading)
- ProgressBar progressBar;
-
- private Calendar myCalendar;
- private Patient patient;
- private AppPreferencesHelper appPreferencesHelper;
- private HaniotNetRepository haniotNetRepository;
- private PatientDAO patientDAO;
- private boolean isEdit = false;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_patient_info);
- ButterKnife.bind(this);
-
- toolbar.setTitle(getResources().getString(R.string.patient_profile));
- setSupportActionBar(toolbar);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-
- if (getIntent().hasExtra("action")) isEdit = true;
- initComponents();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- boxMessage.setVisibility(View.GONE);
- }
-
- /**
- * Validate fields.
- *
- * @return
- */
- private boolean validate() {
- boolean validated = true;
- if (nameEditTExt.getText().toString().isEmpty()) {
- nameEditTExt.setError(getResources().getString(R.string.required_field));
- validated = false;
- }
-
- if (birthEdittext.getText().toString().isEmpty()) {
- birthEdittext.setError(getResources().getString(R.string.required_field));
- validated = false;
- }
- return validated;
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- DisposableManager.dispose();
- }
-
- /**
- * Save patient in App Preferences.
- */
- private void savePatient() {
- if (!isEdit) patient = new Patient();
- patient.setName(nameEditTExt.getText().toString());
- patient.setEmail(emailEditTExt.getText().toString());
- patient.setPhoneNumber(phoneEdittext.getText().toString());
- patient.setBirthDate(DateUtils.formatDate(myCalendar.getTimeInMillis(), "yyyy-MM-dd"));
- if (genderGroup.getCheckedRadioButtonId() == R.id.male)
- patient.setGender(PatientsType.GenderType.MALE);
- else patient.setGender(PatientsType.GenderType.FEMALE);
- patient.setPilotId(appPreferencesHelper.getLastPilotStudy().get_id());
- Log.i(TAG, patient.toJson());
- if (isEdit)
- DisposableManager.add(haniotNetRepository
- .updatePatient(patient)
- .doOnSubscribe(disposable -> showLoading(true))
- .doAfterTerminate(() -> showLoading(false))
- .subscribe(patient1 -> {
- patientDAO.save(patient);
- showMessage(R.string.update_success);
- startActivity(new Intent(PatientRegisterActivity.this, ManagerPatientsActivity.class));
- finish();
- }, this::errorHandler));
- else
- DisposableManager.add(haniotNetRepository
- .savePatient(patient)
- .doOnSubscribe(disposable -> {
- Log.i(TAG, "Salvando paciente no servidor!");
- showLoading(true);
- })
- .doAfterTerminate(() -> {
- showLoading(false);
- Log.i(TAG, "Salvando paciente no servidor!");
- })
- .subscribe(patient -> {
- if (patient.get_id() == null) {
- showMessage(R.string.error_recover_data);
- return;
- }
- patientDAO.save(patient);
- appPreferencesHelper.saveLastPatient(patient);
- if (appPreferencesHelper.getUserLogged().getHealthArea().equals(getString(R.string.type_nutrition)))
- startActivity(new Intent(PatientRegisterActivity.this, QuizNutritionActivity.class));
- else if (appPreferencesHelper.getUserLogged().getHealthArea().equals(getString(R.string.type_dentistry)))
- startActivity(new Intent(PatientRegisterActivity.this, QuizOdontologyActivity.class));
- finish();
- }, this::errorHandler));
- }
-
- /**
- * Manipulates the error and displays message
- * according to the type of error.
- *
- * @param e {@link Throwable}
- */
- private void errorHandler(Throwable e) {
- Log.i(TAG, e.getMessage());
- if (e instanceof HttpException) {
- HttpException httpEx = ((HttpException) e);
- switch (httpEx.code()) {
- case 409:
- showMessage(R.string.error_409_patient);
- break;
- default:
- showMessage(R.string.error_500);
- break;
- }
- } else showMessage(R.string.error_500);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- checkConnectivity();
- }
-
- /**
- * On back pressed.
- */
- @Override
- public void onBackPressed() {
- super.onBackPressed();
- finish();
- }
-
- /**
- * Loading message,
- *
- * @param enabled boolean
- */
- private void showLoading(final boolean enabled) {
- runOnUiThread(() -> {
- fab.setEnabled(!enabled);
- if (enabled) progressBar.setVisibility(View.VISIBLE);
- else progressBar.setVisibility(View.GONE);
- });
- }
-
- /**
- * Validate patient.
- */
- View.OnClickListener fabClick = v -> {
- if (validate()) {
- savePatient();
- }
- };
-
- /**
- * Prepare the view for editing the data
- */
- private void prepareEditing() {
- DisposableManager.add(haniotNetRepository
- .getPatient(appPreferencesHelper.getLastPatient().get_id())
- .doOnSubscribe(disposable -> {
- prepareView(); // Populate view with local data
- enabledView(false);
- showLoading(true);
- })
- .doAfterTerminate(() -> showLoading(false))
- .subscribe(patient1 -> {
- if (patient1.getEmail() != null) patient.setEmail(patient1.getEmail());
- if (patient1.getName() != null) patient.setName(patient1.getName());
-
- prepareView();
- enabledView(true);
- }, this::errorHandler)
-
- );
- }
-
- /**
- * Check if you have connectivity.
- * If it does not, the elements in the view mounted to notify the user
- *
- * @return boolean
- */
- private boolean checkConnectivity() {
- if (!ConnectionUtils.internetIsEnabled(this)) {
- boxMessage.setVisibility(View.VISIBLE);
- messageError.setText(getString(R.string.error_connectivity));
- return false;
- }
- boxMessage.setVisibility(View.GONE);
-
- return true;
- }
-
- /**
- * Enable or disable view
- *
- * @param enabled boolean
- */
- private void enabledView(final boolean enabled) {
- runOnUiThread(() -> {
- nameEditTExt.setEnabled(enabled);
- emailEditTExt.setEnabled(enabled);
- phoneEdittext.setEnabled(enabled);
- birthEdittext.setEnabled(enabled);
- genderGroup.setEnabled(enabled);
- });
- }
-
- private void prepareView() {
- patient = appPreferencesHelper.getLastPatient();
- if (patient == null) return;
- nameEditTExt.setText(patient.getName());
- emailEditTExt.setText(patient.getEmail());
- phoneEdittext.setText(patient.getPhoneNumber());
- birthEdittext.setText(DateUtils.formatDate(patient.getBirthDate(), getString(R.string.date_format)));
- myCalendar = DateUtils.convertStringDateToCalendar(patient.getBirthDate(), getResources().getString(R.string.date_format));
- if (patient.getGender().equals(PatientsType.GenderType.MALE))
- genderGroup.check(R.id.male);
- else genderGroup.check(R.id.female);
- }
-
- /**
- * Displays message.
- *
- * @param str @StringRes message.
- */
- private void showMessage(@StringRes int str) {
- String message = getString(str);
- if (message.isEmpty()) message = getString(R.string.error_500);
-
- messageError.setText(message);
- runOnUiThread(() -> {
- boxMessage.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
- boxMessage.setVisibility(View.VISIBLE);
- });
- }
-
- /**
- * Init components.
- */
- private void initComponents() {
- appPreferencesHelper = AppPreferencesHelper.getInstance(this);
- Log.i(TAG, appPreferencesHelper.getUserAccessHaniot().getAccessToken());
- haniotNetRepository = HaniotNetRepository.getInstance(this);
- patientDAO = PatientDAO.getInstance(this);
- myCalendar = Calendar.getInstance();
- fab.setOnClickListener(fabClick);
-
- if (isEdit) {
- prepareEditing();
- }
- genderGroup.setOnCheckedChangeListener((group, checkedId) -> {
- if (checkedId == R.id.male)
- genderIcon.setImageResource(R.drawable.x_boy);
- else
- genderIcon.setImageResource(R.drawable.x_girl);
- });
-
- birthEdittext.setOnClickListener(v -> {
- InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
- inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
- DatePickerDialog dialog = new DatePickerDialog(PatientRegisterActivity.this,
- (view, year, month, dayOfMonth) -> {
- myCalendar.set(Calendar.YEAR, year);
- myCalendar.set(Calendar.MONTH, month);
- myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
- birthEdittext.setText(DateUtils.formatDate(myCalendar.getTimeInMillis(),
- getResources().getString(R.string.date_format)));
- }, 2010, 1, 1);
- dialog.show();
- });
- }
-
- /**
- * On options item selected.
- *
- * @param item
- * @return
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- finish();
- break;
- }
- return super.onOptionsItemSelected(item);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/PilotStudyActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/PilotStudyActivity.java
index 9e144e8e..088706da 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/PilotStudyActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/PilotStudyActivity.java
@@ -1,6 +1,7 @@
package br.edu.uepb.nutes.haniot.activity;
import android.app.Activity;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
@@ -9,9 +10,12 @@
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
+import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -21,15 +25,24 @@
import br.edu.uepb.nutes.haniot.R;
import br.edu.uepb.nutes.haniot.adapter.PilotStudyAdapter;
import br.edu.uepb.nutes.haniot.adapter.base.OnRecyclerViewListener;
+import br.edu.uepb.nutes.haniot.data.model.Admin;
+import br.edu.uepb.nutes.haniot.data.model.HealthProfessional;
+import br.edu.uepb.nutes.haniot.data.model.Patient;
import br.edu.uepb.nutes.haniot.data.model.PilotStudy;
import br.edu.uepb.nutes.haniot.data.model.User;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.ErrorHandler;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
import butterknife.BindView;
import butterknife.ButterKnife;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.HEALTH_PROFESSIONAL;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.NUTRITION;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
+
/**
* Implementation of the pilot study selection list.
*
@@ -57,6 +70,21 @@ public class PilotStudyActivity extends AppCompatActivity {
@BindView(R.id.info_inactive_selected)
TextView infoInactiveSelectedMessage;
+ @BindView(R.id.content_error)
+ LinearLayout errorPilotStudy;
+
+ @BindView(R.id.content)
+ FrameLayout content;
+
+ @BindView(R.id.icon_error)
+ ImageView iconError;
+
+ @BindView(R.id.message_error_server)
+ TextView messageError;
+
+ @BindView(R.id.message_error_server_title)
+ TextView titleError;
+
/**
* We need this variable to lock and unlock loading more.
* We should not charge more when a request has already been made.
@@ -85,12 +113,8 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- super.onBackPressed();
- break;
- default:
- break;
+ if (item.getItemId() == android.R.id.home) {
+ super.onBackPressed();
}
return super.onOptionsItemSelected(item);
}
@@ -117,6 +141,36 @@ private void initToolBar() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
+ /**
+ * @param enabled
+ */
+ private void showErrorPilot(boolean enabled) {
+ if (enabled) {
+ errorPilotStudy.setVisibility(View.VISIBLE);
+ content.setVisibility(View.GONE);
+ } else {
+ errorPilotStudy.setVisibility(View.GONE);
+ content.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * @param enabled
+ */
+ private void showErrorConnection(boolean enabled) {
+ if (enabled) {
+ showErrorPilot(true);
+ iconError.setImageResource(R.drawable.ic_error_server);
+ titleError.setText("Opss! Houve algum erro.");
+ messageError.setText(getText(R.string.error_500));
+ } else {
+ showErrorPilot(false);
+ iconError.setImageResource(R.drawable.ic_no_pilot_study);
+ titleError.setText("Opss! Você ainda não possui Piloto Estudo.");
+ messageError.setText(getText(R.string.piloty_study_no_allocated));
+ }
+ }
+
/**
* Init RecyclerView
*/
@@ -145,6 +199,11 @@ public void onLongItemClick(View v, PilotStudy pilot) {
public void onMenuContextClick(View v, PilotStudy pilot) {
}
+
+ @Override
+ public void onItemSwiped(PilotStudy item, int position) {
+
+ }
});
mRecyclerView.setAdapter(mPilotStudyAdapter);
@@ -191,12 +250,49 @@ private void dialogPilotIsSelected(PilotStudy pilot) {
private void savePilotSelected(PilotStudy pilot) {
pilot.setSelected(true);
pilot.setUserId(user.get_id());
+ user.setPilotStudyIDSelected(pilot.get_id());
+ appPreferences.removeLastPilotStudy();
appPreferences.saveLastPilotStudy(pilot);
- appPreferences.removeLastPatient();
+ appPreferences.saveUserLogged(user);
+ if (user.getUserType().equals(PATIENT)) {
+ Patient patient = new Patient();
+ patient.set_id(user.get_id());
+ patient.setPilotStudyIDSelected(pilot.get_id());
+ DisposableManager.add(haniotNetRepository.updatePatient(patient).subscribe(patient1 -> {
+ openDashboard();
+ }, throwable -> {
+ Log.w("AAA", throwable.getMessage());
+ ErrorHandler.showMessage(this, throwable);
+ }));
+ } else if (user.getUserType().equals(ADMIN)) {
+ Admin admin = new Admin();
+ admin.set_id(user.get_id());
+ admin.setPilotStudyIDSelected(pilot.get_id());
+
+ DisposableManager.add(haniotNetRepository.updateAdmin(admin).subscribe(admin1 -> {
+ openDashboard();
+ }, throwable -> {
+ Log.w("AAA", throwable.getMessage());
+ ErrorHandler.showMessage(this, throwable);
+ }));
+ } else if (user.getUserType().equals(HEALTH_PROFESSIONAL)) {
+ HealthProfessional healthProfessional = new HealthProfessional();
+ healthProfessional.set_id(user.get_id());
+ healthProfessional.setPilotStudyIDSelected(pilot.get_id());
+ DisposableManager.add(haniotNetRepository.updateHealthProfissional(healthProfessional).subscribe(healthProfessional1 -> {
+ openDashboard();
+ }, throwable -> {
+ Log.w("AAA", throwable.getMessage());
+ ErrorHandler.showMessage(this, throwable);
+ }));
+ }
+
+ }
- // Back activity
- setResult(Activity.RESULT_OK);
- finish();
+ private void openDashboard() {
+ Intent intent = new Intent(this, MainActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
}
/**
@@ -217,24 +313,39 @@ private void loadData() {
return;
}
- DisposableManager.add(haniotNetRepository
- .getAllPilotStudies(appPreferences.getUserLogged().get_id())
- .doOnSubscribe(disposable -> showLoading(true))
- .doAfterTerminate(() -> showLoading(false))
- .subscribe(pilotStudies -> {
- if (pilotStudies.isEmpty()) return;
-
- PilotStudy pilotLast = appPreferences.getLastPilotStudy();
- for (PilotStudy pilot : pilotStudies) {
- if (pilotLast != null && pilot.get_id().equals(pilotLast.get_id())) {
- pilot.setSelected(true);
+ if (appPreferences.getUserLogged().getUserType().equals(ADMIN)) {
+ DisposableManager.add(haniotNetRepository
+ .getAllPilotStudies()
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(pilotStudies -> {
+ for (PilotStudy pilot : pilotStudies) {
+ if (user.getPilotStudyIDSelected() != null && pilot.get_id().equals(user.getPilotStudyIDSelected())) {
+ pilot.setSelected(true);
+ }
}
- }
- populatePilotStudiesView(pilotStudies);
- }, error -> {
- populatePilotStudiesView(null);
- })
- );
+ populatePilotStudiesView(pilotStudies);
+ }, error -> {
+ populatePilotStudiesView(null);
+ })
+ );
+ } else {
+ DisposableManager.add(haniotNetRepository
+ .getAllUserPilotStudies(appPreferences.getUserLogged().get_id())
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(pilotStudies -> {
+ for (PilotStudy pilot : pilotStudies) {
+ if (user.getPilotStudyIDSelected() != null && pilot.get_id().equals(user.getPilotStudyIDSelected())) {
+ pilot.setSelected(true);
+ }
+ }
+ populatePilotStudiesView(pilotStudies);
+ }, error -> {
+ populatePilotStudiesView(null);
+ })
+ );
+ }
}
/**
@@ -246,12 +357,18 @@ private void populatePilotStudiesView(List pilotStudies) {
mPilotStudyAdapter.clearItems();
mPilotStudyAdapter.addItems(pilotStudies);
- if (mPilotStudyAdapter.itemsIsEmpty()) {
- showNoDataMessage(true);
+ if (pilotStudies == null) {
+ showErrorConnection(true);
+ } else if (pilotStudies.isEmpty()) {
+// showNoDataMessage(true);
+ showErrorConnection(false);
+ showErrorPilot(true);
showInstructionsMessage(false);
} else {
- showNoDataMessage(false);
- if (appPreferences.getLastPilotStudy() != null) { // Pilot is selected
+// showNoDataMessage(false);
+ showErrorConnection(false);
+ showErrorPilot(false);
+ if (user.getPilotStudyIDSelected() != null) { // Pilot is selected
showInstructionsMessage(false);
} else {
showInstructionsMessage(true);
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizNutritionActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizNutritionActivity.java
index eb796ec0..31d16385 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizNutritionActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizNutritionActivity.java
@@ -1,6 +1,7 @@
package br.edu.uepb.nutes.haniot.activity;
import android.app.AlertDialog;
+import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Color;
import android.support.v4.content.ContextCompat;
@@ -18,6 +19,8 @@
import br.edu.uepb.nutes.haniot.data.model.FeendingHabitsRecordType;
import br.edu.uepb.nutes.haniot.data.model.FoodType;
import br.edu.uepb.nutes.haniot.data.model.MedicalRecord;
+import br.edu.uepb.nutes.haniot.data.model.NutritionalQuestionnaire;
+import br.edu.uepb.nutes.haniot.data.model.NutritionalQuestionnaireType;
import br.edu.uepb.nutes.haniot.data.model.Patient;
import br.edu.uepb.nutes.haniot.data.model.PhysicalActivityHabit;
import br.edu.uepb.nutes.haniot.data.model.SchoolActivityFrequencyType;
@@ -80,6 +83,10 @@ public class QuizNutritionActivity extends SimpleSurvey implements Infor.OnInfoL
private AppPreferencesHelper appPreferencesHelper;
private HaniotNetRepository haniotNetRepository;
int checkpoint;
+ private NutritionalQuestionnaire nutritionalQuestionnaire;
+ private String updateType;
+ private String idUpdate;
+ private Object resourceToUpdate;
/**
* Init view.
@@ -89,25 +96,30 @@ protected void initView() {
initResources();
checkpoint = getIntent().getIntExtra("checkpoint", -1);
+ idUpdate = getIntent().getStringExtra("idUpdate");
setMessageBlocked(getResources().getString(R.string.not_answered));
// Animation
setFadeAnimation();
- addStartPage();
switch (checkpoint) {
case MEDICAL_RECORDS:
addMedicalRocordsPages();
+ updateType = NutritionalQuestionnaireType.MEDICAL_RECORDS;
break;
case PHYSICAL_ACTIVITY:
addPhysicalHabitsPages();
+ updateType = NutritionalQuestionnaireType.PHYSICAL_ACTIVITY_HABITS;
break;
case FEEDING_HABITS:
addFeedingHabitsPages();
+ updateType = NutritionalQuestionnaireType.FEEDING_HABITS_RECORD;
break;
case SLEEP_HABITS:
addSleepHabitsPages();
+ updateType = NutritionalQuestionnaireType.SLEEP_HABIT;
break;
default:
+ addStartPage();
addPhysicalHabitsPages();
addFeedingHabitsPages();
addMedicalRocordsPages();
@@ -133,6 +145,7 @@ private void initResources() {
physicalActivityHabitsDAO = PhysicalActivityHabitsDAO.getInstance(this);
sleepHabitsDAO = SleepHabitsDAO.getInstance(this);
medicalRecordDAO = MedicalRecordDAO.getInstance(this);
+ nutritionalQuestionnaire = new NutritionalQuestionnaire();
}
/**
@@ -144,13 +157,8 @@ private void saveMedicalRecords() {
medicalRecord.setPatientId(patient.get_id());
Log.i(LOG_TAG, medicalRecord.toJson());
medicalRecordDAO.save(medicalRecord);
- DisposableManager.add(haniotNetRepository
- .saveMedicalRecord(medicalRecord)
- .doOnSubscribe(disposable -> Log.i(LOG_TAG, "Salvando Feending Habits no servidor!"))
- .doAfterTerminate(() -> Log.i(LOG_TAG, "Feending Habits"))
- .subscribe(medicalRecord -> {
- Log.i(LOG_TAG, "Salvo Feending Habits no servidor!");
- }, this::errorHandler));
+ nutritionalQuestionnaire.setMedicalRecord(medicalRecord);
+ resourceToUpdate = medicalRecord;
}
/**
@@ -162,13 +170,8 @@ private void saveFeedingHabits() {
feedingHabitsRecord.setWeeklyFeedingHabits(weeklyFoodRecords);
Log.i(LOG_TAG, feedingHabitsRecord.toJson());
feedingHabitsDAO.save(feedingHabitsRecord);
- DisposableManager.add(haniotNetRepository
- .saveFeedingHabitsRecord(feedingHabitsRecord)
- .doOnSubscribe(disposable -> Log.i(LOG_TAG, "Salvando Feending Habits no servidor!"))
- .doAfterTerminate(() -> Log.i(LOG_TAG, "Feending Habits"))
- .subscribe(feedingHabitsRecord -> {
- Log.i(LOG_TAG, "Salvo Feending Habits no servidor!");
- }, this::errorHandler));
+ nutritionalQuestionnaire.setFeedingHabitsRecord(feedingHabitsRecord);
+ resourceToUpdate = feedingHabitsRecord;
}
/**
@@ -178,13 +181,8 @@ private void saveSleepHabits() {
sleepHabit.setPatientId(patient.get_id());
Log.i(LOG_TAG, sleepHabit.toJson());
sleepHabitsDAO.save(sleepHabit);
- DisposableManager.add(haniotNetRepository
- .saveSleepHabit(sleepHabit)
- .doOnSubscribe(disposable -> Log.i(LOG_TAG, "Salvando Sleep Habits no servidor!"))
- .doAfterTerminate(() -> Log.i(LOG_TAG, "Sleep Habits"))
- .subscribe(sleepHabit -> {
- Log.i(LOG_TAG, "Salvo Sleep Habits no servidor!");
- }, this::errorHandler));
+ nutritionalQuestionnaire.setSleepHabit(sleepHabit);
+ resourceToUpdate = sleepHabit;
}
/**
@@ -194,13 +192,8 @@ private void saveActivityHabits() {
physicalActivityHabits.setPatientId(patient.get_id());
Log.i(LOG_TAG, physicalActivityHabits.toJson());
physicalActivityHabitsDAO.save(physicalActivityHabits);
- DisposableManager.add(haniotNetRepository
- .savePhysicalActivityHabit(physicalActivityHabits)
- .doOnSubscribe(disposable -> Log.i(LOG_TAG, "Salvando Activity Habits no servidor!"))
- .doAfterTerminate(() -> Log.i(LOG_TAG, "Activity Habits"))
- .subscribe(physicalActivityHabits -> {
- Log.i(LOG_TAG, "Salvo Activity Habits no servidor!");
- }, this::errorHandler));
+ nutritionalQuestionnaire.setPhysicalActivityHabit(physicalActivityHabits);
+ resourceToUpdate = physicalActivityHabits;
}
/**
@@ -653,7 +646,6 @@ public void onClosePage() {
.Builder(this)
.setMessage(getResources().getString(R.string.cancel))
.setPositiveButton(getResources().getText(R.string.yes_text), (dialog, which) -> {
- startActivity(new Intent(this, ManagerPatientsActivity.class));
finish();
})
.setNegativeButton(getResources().getText(R.string.no_text), null)
@@ -690,11 +682,92 @@ public void onAnswerInfo(int page) {
break;
default:
saveSleepHabits();
- startActivity(new Intent(this, MainActivity.class));
}
- finish();
+ sendQuestionnaireToServer();
+ }
+ }
+
+ private void sendQuestionnaireToServer() {
+ Log.w("AAA", "sendQuestionnaireToServer");
+ ProgressDialog dialog = ProgressDialog.show(this, "Sincronização",
+ "Aguarde alguns instantes...", true);
+ dialog.show();
+
+ if (updateType == null) {
+ Log.w("AAA", "updateType == null");
+ Log.w("AAA", "Saving: " + nutritionalQuestionnaire.toJson());
+ DisposableManager.add(haniotNetRepository
+ .saveNutritionalQuestionnaire(patient.get_id(), nutritionalQuestionnaire)
+ .doAfterTerminate(() -> {
+ })
+ .subscribe(nutritionalQuestionnaire -> {
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage("Salvo com sucesso!");
+ builder.setCancelable(true);
+ builder.setNeutralButton("Ok", (dialog1, which) -> {
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
+ });
+ builder.show();
+ }, throwable -> {
+ Log.w("AAA", throwable.getMessage());
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Não foi possível concluir a operação...");
+ builder.setMessage("Tente novamente mais tarde!");
+ builder.setCancelable(false);
+ builder.setPositiveButton("Ok", (dialog12, which) -> {
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
+ dialog12.cancel();
+ });
+ builder.show();
+ }));
} else {
+ Log.w("AAA", "updateType != null: " + updateType);
+ Log.w("AAA", "updateType: " + updateType + " idUpdate: " + idUpdate);
+ printJson();
+ Log.w("AAA", "id: " + idUpdate);
+ if (idUpdate != null) {
+ DisposableManager.add(haniotNetRepository
+ .updateNutritionalQuestionnaire(patient.get_id(), idUpdate, updateType, resourceToUpdate)
+ .subscribe(o -> {
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage("Atualizado com sucesso!");
+ builder.setCancelable(true);
+ builder.setNeutralButton("Ok", (dialog1, which) -> {
+ finish();
+ });
+ builder.show();
+ }, throwable -> {
+ Log.w("AAA", throwable.getMessage());
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Não foi possível concluir a operação...");
+ builder.setMessage("Tente novamente mais tarde!");
+ builder.setCancelable(false);
+ builder.setPositiveButton("Ok", (dialog12, which) -> {
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
+ dialog12.cancel();
+ });
+ builder.show();
+ }));
+ }
+ }
+ }
+ private void printJson() {
+ if (resourceToUpdate instanceof SleepHabit) {
+ Log.w("AAA", ((SleepHabit) resourceToUpdate).toJson());
+ } else if (resourceToUpdate instanceof MedicalRecord) {
+ Log.w("AAA", ((MedicalRecord) resourceToUpdate).toJson());
+ } else if (resourceToUpdate instanceof PhysicalActivityHabit) {
+ Log.w("AAA", ((PhysicalActivityHabit) resourceToUpdate).toJson());
+ } else if (resourceToUpdate instanceof FeedingHabitsRecord) {
+ Log.w("AAA", ((FeedingHabitsRecord) resourceToUpdate).toJson());
}
}
@@ -845,23 +918,20 @@ public void onAnswerMultiple(int page, List values, List indexV
+ " | ANSWER (values): " + Arrays.toString(values.toArray())
+ " | ANSWER (indexes): " + Arrays.toString(indexValues.toArray()));
- switch (page) {
- case 4:
- List strings = new ArrayList<>();
+ if (page == 4) {
+ List answers = new ArrayList<>();
- for (Integer integer : indexValues) {
- strings.add(SportsType.getString(integer));
- }
- physicalActivityHabits.setWeeklyActivities(strings);
- break;
- case 18:
- List strings2 = new ArrayList<>();
+ for (Integer integer : indexValues) {
+ answers.add(SportsType.getString(integer));
+ }
+ physicalActivityHabits.setWeeklyActivities(answers);
+ } else if (page == 18) {
+ List answers2 = new ArrayList<>();
- for (Integer integer : indexValues) {
- strings2.add(FeendingHabitsRecordType.FoodAllergyStringolerance.getString(integer));
- }
- feedingHabitsRecord.setFoodAllergyIntolerance(strings2);
- break;
+ for (Integer integer : indexValues) {
+ answers2.add(FeendingHabitsRecordType.FoodAllergyStringolerance.getString(integer));
+ }
+ feedingHabitsRecord.setFoodAllergyIntolerance(answers2);
}
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizOdontologyActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizOdontologyActivity.java
index 2b7aceff..d96f0838 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizOdontologyActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/QuizOdontologyActivity.java
@@ -1,11 +1,14 @@
package br.edu.uepb.nutes.haniot.activity;
import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.support.v4.content.ContextCompat;
import android.text.InputType;
import android.util.Log;
+import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
@@ -15,6 +18,8 @@
import br.edu.uepb.nutes.haniot.R;
import br.edu.uepb.nutes.haniot.data.model.FamilyCohesionRecord;
import br.edu.uepb.nutes.haniot.data.model.FrequencyAnswersType;
+import br.edu.uepb.nutes.haniot.data.model.OdontologicalQuestionnaire;
+import br.edu.uepb.nutes.haniot.data.model.OdontologicalQuestionnaireType;
import br.edu.uepb.nutes.haniot.data.model.OralHealthRecord;
import br.edu.uepb.nutes.haniot.data.model.Patient;
import br.edu.uepb.nutes.haniot.data.model.SociodemographicRecord;
@@ -32,6 +37,12 @@
import br.edu.uepb.nutes.simplesurvey.question.Single;
import retrofit2.HttpException;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FAMILY_COHESION;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FEEDING_HABITS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.ORAL_HEALTH;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SLEEP_HABITS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SOCIODEMOGRAPHICS;
+
/**
* QuizOdontologyActivity implementation.
*
@@ -60,6 +71,11 @@ public class QuizOdontologyActivity extends SimpleSurvey implements Infor.OnInfo
private SociodemographicRecord sociodemographicRecord;
private List toothLesions;
private List points;
+ private OdontologicalQuestionnaire odontologicalQuestionnaire;
+ int checkpoint;
+ private String updateType;
+ private String idUpdate;
+ private Object resourceToUpdate;
/**
* Init view.
@@ -67,7 +83,63 @@ public class QuizOdontologyActivity extends SimpleSurvey implements Infor.OnInfo
@Override
protected void initView() {
initResources();
- addPages();
+
+ checkpoint = getIntent().getIntExtra("checkpoint", -1);
+ idUpdate = getIntent().getStringExtra("idUpdate");
+ setMessageBlocked(getResources().getString(R.string.not_answered));
+
+ // Animation
+ setFadeAnimation();
+ switch (checkpoint) {
+ case FAMILY_COHESION:
+ setFamilyCohesion();
+ updateType = OdontologicalQuestionnaireType.FAMILY_COHESION_RECORD;
+ break;
+ case ORAL_HEALTH:
+ setOralRecord();
+ updateType = OdontologicalQuestionnaireType.ORAL_HEALTH_RECORD;
+ break;
+ case SOCIODEMOGRAPHICS:
+ setSociodemographicRecord();
+ updateType = OdontologicalQuestionnaireType.SOCIODEMOGRAPHIC_RECORD;
+ break;
+ default:
+ addStartPage();
+ setFamilyCohesion();
+ setOralRecord();
+ setSociodemographicRecord();
+ }
+ addEndPage();
+ }
+
+ private void addStartPage() {
+
+ //INTRO PAGE
+ addQuestion(new Infor.Config()
+ .layout(R.layout.welcome_odontology_quiz)
+ .buttonClose(R.drawable.ic_action_close_dark)
+ .colorBackground(getResources().getColor(R.color.colorPrimaryDark))
+ .nextQuestionAuto()
+ .pageNumber(FIRST_PAGE)
+ .build());
+ }
+
+ private void addEndPage() {
+
+ //END PAGE
+ addQuestion(new Infor.Config()
+ .title(R.string.thank_you, Color.WHITE)
+ .titleTextSize(28)
+ .description(R.string.odontology_final_instructions)
+ .descriptionTextSize(14)
+ .descriptionColor(Color.WHITE)
+ .colorBackground(getResources().getColor(R.color.colorPrimaryDark))
+ .image(R.drawable.x_like)
+ .buttonClose(R.drawable.ic_action_close_dark)
+ .buttonColorText(getResources().getColor(R.color.colorPrimaryDark))
+ .buttonBackground(R.drawable.button_stylezed)
+ .pageNumber(END_PAGE)
+ .build());
}
/**
@@ -82,6 +154,7 @@ private void initResources() {
sociodemographicRecord = new SociodemographicRecord();
toothLesions = new ArrayList<>();
points = new ArrayList<>();
+ odontologicalQuestionnaire = new OdontologicalQuestionnaire();
}
/**
@@ -101,395 +174,357 @@ private void errorHandler(Throwable e) {
private void saveFamilyCohesion() {
familyCohesionRecord.setPatientId(patient.get_id());
int totalPoints = 0;
+ Log.w("AAA", "Size points: " + points.size());
for (Integer integer : points) {
totalPoints += integer;
+ Log.w("AAA", "point: " + integer + " - " + totalPoints);
}
familyCohesionRecord.setFamilyCohesionResult(totalPoints);
familyCohesionRecord.toJson();
-
- DisposableManager.add(haniotNetRepository
- .saveFamilyCohesionRecord(familyCohesionRecord)
- .doOnSubscribe(disposable -> Log.i(LOG_TAG, "Salvando familyCohesionRecord no servidor!"))
- .doAfterTerminate(() -> Log.i(LOG_TAG, "familyCohesionRecord"))
- .subscribe(familyCohesionRecord1 -> {
- Log.i(LOG_TAG, "FamilyCohesionRecord saved in server!");
- }, this::errorHandler));
+ odontologicalQuestionnaire.setFamilyCohesionRecord(familyCohesionRecord);
+ resourceToUpdate = familyCohesionRecord;
}
private void saveOralHealth() {
oralHealthRecord.setPatientId(patient.get_id());
oralHealthRecord.setToothLesions(toothLesions);
oralHealthRecord.toJson();
-
- DisposableManager.add(haniotNetRepository
- .saveOralHealthRecord(oralHealthRecord)
- .doOnSubscribe(disposable -> Log.i(LOG_TAG, "Saving oralHealthRecord in server!"))
- .doAfterTerminate(() -> Log.i(LOG_TAG, "oralHealthRecord"))
- .subscribe(oralHealthRecord1 -> {
- Log.i(LOG_TAG, "OralHealthRecord saved in server!");
- }, this::errorHandler));
+ odontologicalQuestionnaire.setOralHealthRecord(oralHealthRecord);
+ resourceToUpdate = oralHealthRecord;
}
private void saveSociodemographic() {
sociodemographicRecord.setPatientId(patient.get_id());
sociodemographicRecord.toJson();
-
- DisposableManager.add(haniotNetRepository
- .saveSociodemographicRecord(sociodemographicRecord)
- .doOnSubscribe(disposable -> Log.i(LOG_TAG, "Salvando sociodemographicRecord no servidor!"))
- .doAfterTerminate(() -> Log.i(LOG_TAG, "sociodemographicRecord"))
- .subscribe(sociodemographicRecord1 -> {
- Log.i(LOG_TAG, "Salvo sociodemographicRecord no servidor!");
- }, this::errorHandler));
+ odontologicalQuestionnaire.setSociodemographicRecord(sociodemographicRecord);
+ resourceToUpdate = sociodemographicRecord;
}
- /**
- * Construct quiz.
- */
- private void addPages() {
- setMessageBlocked(getResources().getString(R.string.not_answered));
-
- // Animation
- setFadeAnimation();
-
- //INTRO PAGE
- addQuestion(new Infor.Config()
- .layout(R.layout.welcome_odontology_quiz)
- .buttonClose(R.drawable.ic_action_close_dark)
- .colorBackground(getResources().getColor(R.color.colorPrimaryDark))
- .nextQuestionAuto()
- .pageNumber(FIRST_PAGE)
- .build());
+ private void setOralRecord() {
- //CATEGORY FAMILY_COHESION
+ //CATEGORY OralHealthRecord
addQuestion(new Infor.Config()
- .title(R.string.category_family_cohesion, Color.WHITE)
+ .title(R.string.category_oralhealth, Color.WHITE)
.titleTextSize(28)
- .description(R.string.category_family_cohesion_desc, Color.WHITE)
+ .description(R.string.category_oralhealth_desc, Color.WHITE)
.descriptionTextSize(20)
- .image(R.drawable.category_family)
- .buttonClose(R.drawable.ic_action_close_dark)
+ .image(R.drawable.category_tooth)
.colorBackground(getResources().getColor(R.color.colorAccent))
.inputText(R.string.bt_next)
+ .buttonClose(R.drawable.ic_action_close_dark)
.buttonBackground(R.drawable.button_stylezed)
.nextQuestionAuto()
- .pageNumber(GATEGORY_FAMILY_COHESION)
+ .pageNumber(CATEGORY_ORAL_HEALTH)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_1), Color.WHITE)
+ .title(getString(R.string.question_15), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorCyan))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorPink))
.description("")
- .image(R.drawable.z_help)
+ .image(R.drawable.z_toothbrush)
.buttonClose(R.drawable.ic_action_close_dark)
- .inputItems(parseAnswers(R.array.default_answers))
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .nextQuestionAuto()
+ .inputItems(parseAnswers(R.array.number3_answers))
.inputDisableAddNewItem()
- .pageNumber(1)
+ .nextQuestionAuto()
+ .pageNumber(14)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_2), Color.WHITE)
+ .title(getString(R.string.question_16), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorRed))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorTeal))
.description("")
- .image(R.drawable.z_friend)
+ .image(R.drawable.z_caries_mil)
.buttonClose(R.drawable.ic_action_close_dark)
+ .inputItems(parseAnswers(R.array.yes_not_answers))
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
- .inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(2)
+ .inputDisableAddNewItem()
+ .pageNumber(15)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_3), Color.WHITE)
+ .title(getString(R.string.question_17), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorAmber))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorRed))
.description("")
- .image(R.drawable.z_only_family)
+ .image(R.drawable.z_caries_mil)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
+ .inputItems(parseAnswers(R.array.yes_not_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(3)
+ .pageNumber(16)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_4), Color.WHITE)
+ .title(getString(R.string.question_18), Color.WHITE)
.titleTextSize(28)
.colorBackground(ContextCompat.getColor(this, R.color.colorOrange))
.description("")
- .image(R.drawable.z_new_friend)
+ .image(R.drawable.z_caries_white)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
+ .inputItems(parseAnswers(R.array.yes_not_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(4)
+ .pageNumber(17)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_5), Color.WHITE)
+ .title(getString(R.string.question_19), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorCyan))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorDeepPurple))
.description("")
- .image(R.drawable.z_time)
+ .image(R.drawable.z_caries_white)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
+ .inputItems(parseAnswers(R.array.yes_not_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(5)
+ .pageNumber(18)
.build());
- addQuestion(new Single.Config()
- .title(getString(R.string.question_6), Color.WHITE)
- .titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorBlueGrey))
- .description("")
- .image(R.drawable.z_proximity_family)
- .buttonClose(R.drawable.ic_action_close_dark)
- .inputColorBackgroundTint(Color.WHITE)
- .inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
- .inputDisableAddNewItem()
- .nextQuestionAuto()
- .pageNumber(6)
- .build());
+ }
- addQuestion(new Single.Config()
- .title(getString(R.string.question_7), Color.WHITE)
+ private void setSociodemographicRecord() {
+
+ //CATEGORY SociodemographicRecord
+ addQuestion(new Infor.Config()
+ .title(R.string.category_sociodemographic, Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorRed))
- .description("")
- .image(R.drawable.z_activity)
+ .description(R.string.category_sociodemographic_desc, Color.WHITE)
+ .descriptionTextSize(20)
+ .image(R.drawable.category_socio)
.buttonClose(R.drawable.ic_action_close_dark)
- .inputColorBackgroundTint(Color.WHITE)
- .inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
- .inputDisableAddNewItem()
+ .colorBackground(getResources().getColor(R.color.colorAccent))
+ .inputText(R.string.bt_next)
+ .buttonClose(R.drawable.ic_action_close_dark)
+ .buttonBackground(R.drawable.button_stylezed)
.nextQuestionAuto()
- .pageNumber(7)
+ .pageNumber(CATEGORY_SOCIODEMOGRAPHIC)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_8), Color.WHITE)
+ .title(getString(R.string.question_12), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorOrange))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorCyan))
.description("")
- .image(R.drawable.z_familiy_activity_easy)
+ .image(R.drawable.z_color)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
+ .inputItems(parseAnswers(R.array.race_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(8)
+ .pageNumber(11)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_9), Color.WHITE)
+ .title(getString(R.string.question_13), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorTeal))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorDeepPurple))
.description("")
- .image(R.drawable.z_conselho)
+ .image(R.drawable.z_scholarity)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
+ .inputItems(parseAnswers(R.array.scholarity_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(9)
+ .pageNumber(12)
.build());
- addQuestion(new Single.Config()
- .title(getString(R.string.question_10), Color.WHITE)
+ addQuestion(new Open.Config()
+ .title(getString(R.string.question_14), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorRed))
+ .inputColorText(Color.WHITE)
+ .colorBackground(ContextCompat.getColor(this, R.color.colorBlue))
.description("")
- .image(R.drawable.z_union_family)
+ .image(R.drawable.z_house)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
- .inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.default_answers))
- .inputDisableAddNewItem()
+ .inputType(InputType.TYPE_CLASS_NUMBER)
.nextQuestionAuto()
- .pageNumber(10)
+ .pageNumber(13)
.build());
- //CATEGORY SociodemographicRecord
+ }
+
+ private void setFamilyCohesion() {
+
+ //CATEGORY FAMILY_COHESION
addQuestion(new Infor.Config()
- .title(R.string.category_sociodemographic, Color.WHITE)
+ .title(R.string.category_family_cohesion, Color.WHITE)
.titleTextSize(28)
- .description(R.string.category_sociodemographic_desc, Color.WHITE)
+ .description(R.string.category_family_cohesion_desc, Color.WHITE)
.descriptionTextSize(20)
- .image(R.drawable.category_socio)
+ .image(R.drawable.category_family)
.buttonClose(R.drawable.ic_action_close_dark)
.colorBackground(getResources().getColor(R.color.colorAccent))
.inputText(R.string.bt_next)
- .buttonClose(R.drawable.ic_action_close_dark)
.buttonBackground(R.drawable.button_stylezed)
.nextQuestionAuto()
- .pageNumber(CATEGORY_SOCIODEMOGRAPHIC)
+ .pageNumber(GATEGORY_FAMILY_COHESION)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_12), Color.WHITE)
+ .title(getString(R.string.question_1), Color.WHITE)
.titleTextSize(28)
.colorBackground(ContextCompat.getColor(this, R.color.colorCyan))
.description("")
- .image(R.drawable.z_color)
+ .image(R.drawable.z_help)
.buttonClose(R.drawable.ic_action_close_dark)
+ .inputItems(parseAnswers(R.array.default_answers))
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.race_answers))
- .inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(11)
+ .inputDisableAddNewItem()
+ .pageNumber(1)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_13), Color.WHITE)
+ .title(getString(R.string.question_2), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorDeepPurple))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorRed))
.description("")
- .image(R.drawable.z_scholarity)
+ .image(R.drawable.z_friend)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.scholarity_answers))
+ .inputItems(parseAnswers(R.array.default_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(12)
+ .pageNumber(2)
.build());
- addQuestion(new Open.Config()
- .title(getString(R.string.question_14), Color.WHITE)
+ addQuestion(new Single.Config()
+ .title(getString(R.string.question_3), Color.WHITE)
.titleTextSize(28)
- .inputColorText(Color.WHITE)
- .colorBackground(ContextCompat.getColor(this, R.color.colorBlue))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorAmber))
.description("")
- .image(R.drawable.z_house)
+ .image(R.drawable.z_only_family)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
- .inputType(InputType.TYPE_CLASS_NUMBER)
+ .inputColorSelectedText(Color.WHITE)
+ .inputItems(parseAnswers(R.array.default_answers))
+ .inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(13)
+ .pageNumber(3)
.build());
- //CATEGORY OralHealthRecord
- addQuestion(new Infor.Config()
- .title(R.string.category_oralhealth, Color.WHITE)
+ addQuestion(new Single.Config()
+ .title(getString(R.string.question_4), Color.WHITE)
.titleTextSize(28)
- .description(R.string.category_oralhealth_desc, Color.WHITE)
- .descriptionTextSize(20)
- .image(R.drawable.category_tooth)
- .colorBackground(getResources().getColor(R.color.colorAccent))
- .inputText(R.string.bt_next)
+ .colorBackground(ContextCompat.getColor(this, R.color.colorOrange))
+ .description("")
+ .image(R.drawable.z_new_friend)
.buttonClose(R.drawable.ic_action_close_dark)
- .buttonBackground(R.drawable.button_stylezed)
+ .inputColorBackgroundTint(Color.WHITE)
+ .inputColorSelectedText(Color.WHITE)
+ .inputItems(parseAnswers(R.array.default_answers))
+ .inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(CATEGORY_ORAL_HEALTH)
+ .pageNumber(4)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_15), Color.WHITE)
+ .title(getString(R.string.question_5), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorPink))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorCyan))
.description("")
- .image(R.drawable.z_toothbrush)
+ .image(R.drawable.z_time)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.number3_answers))
+ .inputItems(parseAnswers(R.array.default_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(14)
+ .pageNumber(5)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_16), Color.WHITE)
+ .title(getString(R.string.question_6), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorTeal))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorBlueGrey))
.description("")
- .image(R.drawable.z_caries_mil)
+ .image(R.drawable.z_proximity_family)
.buttonClose(R.drawable.ic_action_close_dark)
- .inputItems(parseAnswers(R.array.yes_not_answers))
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .nextQuestionAuto()
+ .inputItems(parseAnswers(R.array.default_answers))
.inputDisableAddNewItem()
- .pageNumber(15)
+ .nextQuestionAuto()
+ .pageNumber(6)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_17), Color.WHITE)
+ .title(getString(R.string.question_7), Color.WHITE)
.titleTextSize(28)
.colorBackground(ContextCompat.getColor(this, R.color.colorRed))
.description("")
- .image(R.drawable.z_caries_mil)
+ .image(R.drawable.z_activity)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.yes_not_answers))
+ .inputItems(parseAnswers(R.array.default_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(16)
+ .pageNumber(7)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_18), Color.WHITE)
+ .title(getString(R.string.question_8), Color.WHITE)
.titleTextSize(28)
.colorBackground(ContextCompat.getColor(this, R.color.colorOrange))
.description("")
- .image(R.drawable.z_caries_white)
+ .image(R.drawable.z_familiy_activity_easy)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.yes_not_answers))
+ .inputItems(parseAnswers(R.array.default_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(17)
+ .pageNumber(8)
.build());
addQuestion(new Single.Config()
- .title(getString(R.string.question_19), Color.WHITE)
+ .title(getString(R.string.question_9), Color.WHITE)
.titleTextSize(28)
- .colorBackground(ContextCompat.getColor(this, R.color.colorDeepPurple))
+ .colorBackground(ContextCompat.getColor(this, R.color.colorTeal))
.description("")
- .image(R.drawable.z_caries_white)
+ .image(R.drawable.z_conselho)
.buttonClose(R.drawable.ic_action_close_dark)
.inputColorBackgroundTint(Color.WHITE)
.inputColorSelectedText(Color.WHITE)
- .inputItems(parseAnswers(R.array.yes_not_answers))
+ .inputItems(parseAnswers(R.array.default_answers))
.inputDisableAddNewItem()
.nextQuestionAuto()
- .pageNumber(18)
+ .pageNumber(9)
.build());
- //END PAGE
- addQuestion(new Infor.Config()
- .title(R.string.thank_you, Color.WHITE)
+ addQuestion(new Single.Config()
+ .title(getString(R.string.question_10), Color.WHITE)
.titleTextSize(28)
- .description(R.string.odontology_final_instructions)
- .descriptionTextSize(14)
- .descriptionColor(Color.WHITE)
- .colorBackground(getResources().getColor(R.color.colorPrimaryDark))
- .image(R.drawable.x_like)
+ .colorBackground(ContextCompat.getColor(this, R.color.colorRed))
+ .description("")
+ .image(R.drawable.z_union_family)
.buttonClose(R.drawable.ic_action_close_dark)
- .buttonColorText(getResources().getColor(R.color.colorPrimaryDark))
- .buttonBackground(R.drawable.button_stylezed)
- .pageNumber(END_PAGE)
+ .inputColorBackgroundTint(Color.WHITE)
+ .inputColorSelectedText(Color.WHITE)
+ .inputItems(parseAnswers(R.array.default_answers))
+ .inputDisableAddNewItem()
+ .nextQuestionAuto()
+ .pageNumber(10)
.build());
+
}
/**
@@ -522,7 +557,10 @@ public void onClosePage() {
}
private void setPoint(int index, int value) {
+ Log.w("AAA", "Salvando " + value + " in index " + (index - 1));
points.add(index - 1, value + 1);
+ for (Integer integer : points)
+ Log.w("AAA", "Salvo " + integer);
}
/**
@@ -532,22 +570,111 @@ private void setPoint(int index, int value) {
*/
@Override
public void onAnswerInfo(int page) {
+
Log.d(LOG_TAG, "onAnswerInfo() | PAGE: " + page);
- switch (page) {
- case GATEGORY_FAMILY_COHESION:
+ if (page == GATEGORY_FAMILY_COHESION && checkpoint == -1) {
+ } else if (page == CATEGORY_SOCIODEMOGRAPHIC && checkpoint == -1) {
+ saveOralHealth();
+ } else if (page == CATEGORY_ORAL_HEALTH && checkpoint == -1) {
+ saveFamilyCohesion();
+ } else if (page == END_PAGE) {
+ if (checkpoint == -1) saveSociodemographic();
+ else
+ switch (checkpoint) {
+ case FAMILY_COHESION:
+ saveFamilyCohesion();
+ break;
+ case SOCIODEMOGRAPHICS:
+ saveSociodemographic();
+ break;
+ case ORAL_HEALTH:
+ saveOralHealth();
+ break;
+ default:
+ saveOralHealth();
+ }
+ sendQuestionnaireToServer();
+ }
+ }
- break;
- case CATEGORY_SOCIODEMOGRAPHIC:
- saveFamilyCohesion();
- break;
- case CATEGORY_ORAL_HEALTH:
- saveSociodemographic();
- break;
- case END_PAGE:
- saveOralHealth();
- startActivity(new Intent(this, MainActivity.class));
- finish();
- break;
+ private void sendQuestionnaireToServer() {
+ Log.w("AAA", "sendQuestionnaireToServer");
+ ProgressDialog dialog = ProgressDialog.show(this, "Sincronização",
+ "Aguarde alguns instantes...", true);
+ dialog.show();
+ Log.w("AAA", odontologicalQuestionnaire.toJson());
+ if (updateType == null) {
+ DisposableManager.add(haniotNetRepository
+ .saveOdontologicalQuestionnaire(patient.get_id(), odontologicalQuestionnaire)
+ .doAfterTerminate(() -> {
+ })
+ .subscribe(odontologicalQuestionnaire1 -> {
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage("Salvo com sucesso!");
+ builder.setCancelable(true);
+ builder.setNeutralButton("Ok", (dialog1, which) -> {
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
+ });
+ builder.show();
+ }, throwable -> {
+ Log.w(LOG_TAG, "Error: " + throwable.getMessage());
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Não foi possível concluir a operação...");
+ builder.setMessage("Tente novamente mais tarde!");
+ builder.setCancelable(false);
+ builder.setPositiveButton("Ok", (dialog12, which) -> {
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
+ dialog12.cancel();
+ });
+ builder.show();
+ }));
+ } else {
+ Log.w("AAA", "updateType != null: " + updateType);
+ Log.w("AAA", "updateType: " + updateType + " idUpdate: " + idUpdate);
+ printJson();
+
+ Log.w("AAA", "id: " + idUpdate);
+ if (idUpdate != null) {
+ DisposableManager.add(haniotNetRepository
+ .updateOdontologicalQuestionnaire(patient.get_id(), idUpdate, updateType, resourceToUpdate)
+ .subscribe(o -> {
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage("Atualizado com sucesso!");
+ builder.setCancelable(true);
+ builder.setNeutralButton("Ok", (dialog1, which) -> {
+ finish();
+ });
+ builder.show();
+ }, throwable -> {
+ Log.w("AAA", throwable.getMessage());
+ dialog.cancel();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Não foi possível concluir a operação...");
+ builder.setMessage("Tente novamente mais tarde!");
+ builder.setCancelable(false);
+ builder.setPositiveButton("Ok", (dialog12, which) -> {
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
+ dialog12.cancel();
+ });
+ builder.show();
+ }));
+ }
+ }
+ }
+
+ private void printJson() {
+ if (resourceToUpdate instanceof FamilyCohesionRecord) {
+ Log.w("AAA", "FamilyCohesionRecord " + ((FamilyCohesionRecord) resourceToUpdate).toJson());
+ } else if (resourceToUpdate instanceof OralHealthRecord) {
+ Log.w("AAA", "OralHealthRecord " + ((OralHealthRecord) resourceToUpdate).toJson());
+ } else if (resourceToUpdate instanceof SociodemographicRecord) {
+ Log.w("AAA", "SociodemographicRecord " + ((SociodemographicRecord) resourceToUpdate).toJson());
}
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/SplashScreenActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/SplashScreenActivity.java
index 56fe08f6..fb901fb7 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/SplashScreenActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/SplashScreenActivity.java
@@ -17,6 +17,10 @@
import butterknife.BindView;
import butterknife.ButterKnife;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.NUTRITION;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
+
/**
* Activity SplashScreenActivity.
*
@@ -39,6 +43,10 @@ protected void onCreate(Bundle savedInstanceState) {
appPreference = AppPreferencesHelper.getInstance(this);
+ // TODO for test
+// appPreference.removeLastPilotStudy();
+// appPreference.getUserLogged().setUserType(PATIENT);
+ //
startService(new Intent(this, TokenExpirationService.class));
Animation animation = AnimationUtils.loadAnimation(this, R.anim.slide_up);
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/UserRegisterActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/UserRegisterActivity.java
new file mode 100644
index 00000000..72b22bd7
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/UserRegisterActivity.java
@@ -0,0 +1,555 @@
+package br.edu.uepb.nutes.haniot.activity;
+
+import android.app.Activity;
+import android.app.DatePickerDialog;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.StringRes;
+import android.support.design.widget.FloatingActionButton;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.animation.AnimationUtils;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+
+import java.util.Calendar;
+import java.util.Objects;
+
+import br.edu.uepb.nutes.haniot.R;
+import br.edu.uepb.nutes.haniot.activity.account.ChangePasswordActivity;
+import br.edu.uepb.nutes.haniot.data.model.Admin;
+import br.edu.uepb.nutes.haniot.data.model.HealthProfessional;
+import br.edu.uepb.nutes.haniot.data.model.Patient;
+import br.edu.uepb.nutes.haniot.data.model.PatientsType;
+import br.edu.uepb.nutes.haniot.data.model.User;
+import br.edu.uepb.nutes.haniot.data.model.dao.PatientDAO;
+import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
+import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
+import br.edu.uepb.nutes.haniot.utils.DateUtils;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import retrofit2.HttpException;
+
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.HEALTH_PROFESSIONAL;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
+
+/**
+ * UserRegisterActivity implementation.
+ *
+ * @author Fábio Júnior
+ * @version 1.0
+ * @copyright Copyright (c) 2019, NUTES UEPB
+ */
+public class UserRegisterActivity extends AppCompatActivity {
+
+ final private String TAG = "UserRegisterActivity";
+ @BindView(R.id.toolbar)
+ Toolbar toolbar;
+
+ @BindView(R.id.fab)
+ FloatingActionButton fab;
+
+ @BindView(R.id.name_edittext)
+ EditText nameEditTExt;
+
+ @BindView(R.id.email_edittext)
+ EditText emailEditTExt;
+
+ @BindView(R.id.gender_icon)
+ ImageView genderIcon;
+
+ @BindView(R.id.radio_group)
+ RadioGroup genderGroup;
+
+ @BindView(R.id.birth_edittext)
+ EditText birthEdittext;
+
+ @BindView(R.id.phone_edittext)
+ EditText phoneEdittext;
+
+ @BindView(R.id.box_message_error)
+ LinearLayout boxMessage;
+
+ @BindView(R.id.message_error)
+ TextView messageError;
+
+ @BindView(R.id.loading)
+ ProgressBar progressBar;
+
+ private Calendar myCalendar;
+ private Patient patient;
+ private AppPreferencesHelper appPreferencesHelper;
+ private HaniotNetRepository haniotNetRepository;
+ private PatientDAO patientDAO;
+ private boolean isEdit = false;
+ private String oldEmail;
+ private boolean editUserLogged;
+ private HealthProfessional healthProfessional;
+ private Admin admin;
+ private User userLogged;
+ private String name;
+ private String phoneNumber;
+ private String birthday;
+ private String gender;
+ private String id;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_info);
+ ButterKnife.bind(this);
+
+ toolbar.setTitle(getResources().getString(R.string.patient_profile));
+ setSupportActionBar(toolbar);
+ Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
+ if (getIntent().hasExtra("action")) isEdit = true;
+ if (getIntent().hasExtra("editUser")) editUserLogged = true;
+
+ initComponents();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ boxMessage.setVisibility(View.GONE);
+ }
+
+ /**
+ * Validate fields.
+ */
+ private boolean validate() {
+ boolean validated = true;
+ if (nameEditTExt.getText().toString().isEmpty()) {
+ nameEditTExt.setError(getResources().getString(R.string.required_field));
+ validated = false;
+ }
+
+ if (birthEdittext.getText().toString().isEmpty()) {
+ birthEdittext.setError(getResources().getString(R.string.required_field));
+ validated = false;
+ }
+
+ if (emailEditTExt.getText().length() > 0 && !android.util.Patterns.EMAIL_ADDRESS.matcher(emailEditTExt.getText()).matches()) {
+ emailEditTExt.setError(getResources().getString(R.string.validate_email));
+ validated = false;
+ }
+ return validated;
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ DisposableManager.dispose();
+ }
+
+ private void editAdmin() {
+ Log.w("AAA", "editAdmin()");
+ admin.set_id(id);
+ admin.setName(nameEditTExt.getText().toString());
+ if (isEdit) {
+ if ((emailEditTExt.getText().toString().equals(userLogged.getEmail()))
+ || emailEditTExt.getText().toString().isEmpty()) {
+ admin.setEmail(null);
+ } else admin.setEmail(emailEditTExt.getText().toString());
+ } else {
+ if (emailEditTExt.getText().toString().isEmpty()) admin.setEmail(null);
+ else admin.setEmail(emailEditTExt.getText().toString());
+ }
+
+ admin.setPhoneNumber(phoneEdittext.getText().toString());
+ admin.setBirthDate(DateUtils.formatDate(myCalendar.getTimeInMillis(), "yyyy-MM-dd"));
+ Log.w("AAA", "editing Admin: " + admin.toJson());
+ DisposableManager.add(haniotNetRepository.updateAdmin(admin).subscribe(admin1 -> {
+ showMessage(R.string.update_success);
+ finish();
+ }, this::errorHandler));
+
+ }
+
+ private void edithealthProfessional() {
+ Log.w("AAA", "edithealthProfessional()");
+ healthProfessional.set_id(id);
+ healthProfessional.setName(nameEditTExt.getText().toString());
+
+ if (isEdit) {
+ if ((emailEditTExt.getText().toString().equals(userLogged.getEmail()))
+ || emailEditTExt.getText().toString().isEmpty()) {
+ healthProfessional.setEmail(null);
+ } else healthProfessional.setEmail(emailEditTExt.getText().toString());
+ } else {
+ if (emailEditTExt.getText().toString().isEmpty()) healthProfessional.setEmail(null);
+ else healthProfessional.setEmail(emailEditTExt.getText().toString());
+ }
+
+ healthProfessional.setPhoneNumber(phoneEdittext.getText().toString());
+ healthProfessional.setBirthDate(DateUtils.formatDate(myCalendar.getTimeInMillis(), "yyyy-MM-dd"));
+ Log.w("AAA", "editing Health Professional: " + healthProfessional.toJson());
+ DisposableManager.add(haniotNetRepository.updateHealthProfissional(healthProfessional).subscribe(healthProfessional1 -> {
+ showMessage(R.string.update_success);
+ finish();
+ }, this::errorHandler));
+ }
+
+ /**
+ * Save patient in App Preferences.
+ */
+ private void savePatient() {
+ Log.w("AAA", "savePatient()");
+ if (!isEdit) patient = new Patient();
+
+ patient.setName(nameEditTExt.getText().toString());
+
+ if (isEdit) {
+ patient.set_id(id);
+ if ((emailEditTExt.getText().toString().equals(patient.getEmail()))
+ || emailEditTExt.getText().toString().isEmpty()) {
+ patient.setEmail(null);
+ } else patient.setEmail(emailEditTExt.getText().toString());
+ } else {
+ if (emailEditTExt.getText().toString().isEmpty()) patient.setEmail(null);
+ else patient.setEmail(emailEditTExt.getText().toString());
+ }
+
+ patient.setPhoneNumber(phoneEdittext.getText().toString());
+ patient.setBirthDate(DateUtils.formatDate(myCalendar.getTimeInMillis(), "yyyy-MM-dd"));
+ Log.w("AAA", "patient BirthDate: " + patient.getBirthDate());
+ if (genderGroup.getCheckedRadioButtonId() == R.id.male) {
+ patient.setGender(PatientsType.GenderType.MALE);
+ } else {
+ patient.setGender(PatientsType.GenderType.FEMALE);
+ }
+
+ patient.setPilotId(userLogged.getPilotStudyIDSelected());
+ Log.i(TAG, patient.toJson());
+
+ if (isEdit) {
+ Log.w("AAA", "patient to edit: " + patient.toJson());
+ DisposableManager.add(haniotNetRepository
+ .updatePatient(patient)
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(patient1 -> {
+ patientDAO.save(patient);
+ showMessage(R.string.update_success);
+ startActivity(new Intent(UserRegisterActivity.this, ManagerPatientsActivity.class));
+ finish();
+ }, this::errorHandler));
+ } else {
+ DisposableManager.add(haniotNetRepository
+ .savePatient(patient)
+ .doAfterTerminate(() -> {
+ showLoading(false);
+ Log.i(TAG, "Salvando paciente no servidor!");
+ })
+ .doOnSubscribe(disposable -> {
+ Log.i(TAG, "Salvando paciente no servidor!");
+ showLoading(true);
+ })
+ .subscribe(patient -> {
+ if (patient.get_id() == null) {
+ showMessage(R.string.error_recover_data);
+ return;
+ }
+ this.patient.set_id(patient.get_id());
+ associatePatientToPilotStudy();
+ }, this::errorHandler));
+ }
+ }
+
+ /**
+ * Associate patient to selected pilot study in server.
+ */
+ private void associatePatientToPilotStudy() {
+ DisposableManager.add(haniotNetRepository
+ .associatePatientToPilotStudy(userLogged.getPilotStudyIDSelected(), patient.get_id())
+ .subscribe(o -> {
+ Log.w(TAG, "Patient associated to pilotstudy");
+ patientDAO.save(patient);
+ appPreferencesHelper.saveLastPatient(patient);
+ if (appPreferencesHelper.getUserLogged().getUserType().equals(HEALTH_PROFESSIONAL)) {
+ User user = appPreferencesHelper.getUserLogged();
+ if (user.getHealthArea().equals(getString(R.string.type_nutrition)))
+ startActivity(new Intent(UserRegisterActivity.this, QuizNutritionActivity.class));
+ else if (user.getHealthArea().equals(getString(R.string.type_dentistry)))
+ startActivity(new Intent(UserRegisterActivity.this, QuizOdontologyActivity.class));
+ }
+ finish();
+ }, this::errorHandler));
+ }
+
+ /**
+ * Manipulates the error and displays message
+ * according to the type of error.
+ *
+ * @param e {@link Throwable}
+ */
+ private void errorHandler(Throwable e) {
+ Log.i(TAG, "errorHandler " + e.toString());
+ if (e instanceof HttpException) {
+ HttpException httpEx = ((HttpException) e);
+ if (httpEx.code() == 409) {
+ showMessage(R.string.error_409_patient);
+ } else {
+ showMessage(R.string.error_500);
+ }
+ } else showMessage(R.string.error_500);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ checkConnectivity();
+ }
+
+ /**
+ * On back pressed.
+ */
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();
+ finish();
+ }
+
+ /**
+ * Loading message,
+ *
+ * @param enabled boolean
+ */
+ private void showLoading(final boolean enabled) {
+ runOnUiThread(() -> {
+ fab.setEnabled(!enabled);
+ if (enabled) progressBar.setVisibility(View.VISIBLE);
+ else progressBar.setVisibility(View.GONE);
+ });
+ }
+
+ /**
+ * Validate patient.
+ */
+ View.OnClickListener fabClick = v -> {
+ if (validate()) {
+ Log.w("AAA", "Validated: " + validate());
+ if (editUserLogged && userLogged.getUserType().equals(ADMIN)) editAdmin();
+ else if (editUserLogged && userLogged.getUserType().equals(HEALTH_PROFESSIONAL))
+ edithealthProfessional();
+ else savePatient();
+ }
+ };
+
+ /**
+ * Prepare the view for editing the data
+ */
+ private void prepareEditing() {
+ if (userLogged.getUserType().equals(PATIENT) || !editUserLogged) {
+ DisposableManager.add(haniotNetRepository
+ .getPatient(appPreferencesHelper.getLastPatient().get_id())
+ .doOnSubscribe(disposable -> {
+ enabledView(false);
+ showLoading(true);
+ })
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(patient1 -> {
+ id = patient1.get_id();
+ if (patient1.getEmail() != null) {
+ patient.setEmail(patient1.getEmail());
+ oldEmail = patient1.getEmail();
+ }
+ if (patient1.getName() != null) {
+ patient.setName(patient1.getName());
+ name = patient1.getName();
+ }
+ phoneNumber = patient1.getPhoneNumber();
+ birthday = patient1.getBirthDate();
+ gender = patient1.getGender();
+ prepareView();
+ enabledView(true);
+ }, this::errorHandler));
+ } else if (userLogged.getUserType().equals(HEALTH_PROFESSIONAL)) {
+ genderIcon.setImageResource(R.drawable.ic_health_professional);
+ DisposableManager.add(haniotNetRepository
+ .getHealthProfissional(userLogged.get_id())
+ .doOnSubscribe(disposable -> {
+ enabledView(false);
+ showLoading(true);
+ })
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(healthProfessional1 -> {
+ id = healthProfessional1.get_id();
+
+ if (healthProfessional1.getEmail() != null) {
+ healthProfessional.setEmail(healthProfessional1.getEmail());
+ oldEmail = healthProfessional1.getEmail();
+ }
+ if (healthProfessional1.getName() != null) {
+ healthProfessional.setName(healthProfessional1.getName());
+ name = healthProfessional1.getName();
+ }
+ phoneNumber = healthProfessional1.getPhoneNumber();
+ birthday = healthProfessional1.getBirthDate();
+ prepareView();
+ enabledView(true);
+ }, this::errorHandler));
+ } else if (userLogged.getUserType().equals(ADMIN)) {
+ genderIcon.setImageResource(R.drawable.ic_admin);
+ DisposableManager.add(haniotNetRepository
+ .getAdmin(userLogged.get_id())
+ .doOnSubscribe(disposable -> {
+ enabledView(false);
+ showLoading(true);
+ })
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(admin1 -> {
+ id = admin1.get_id();
+
+ if (admin1.getEmail() != null) {
+ admin.setEmail(admin1.getEmail());
+ oldEmail = admin1.getEmail();
+ }
+ if (admin1.getName() != null) {
+ admin.setName(admin1.getName());
+ name = admin1.getName();
+ }
+ phoneNumber = admin1.getPhoneNumber();
+ birthday = admin1.getBirthDate();
+ prepareView();
+ enabledView(true);
+ }, this::errorHandler));
+ }
+ }
+
+ /**
+ * Check if you have connectivity.
+ * If it does not, the elements in the view mounted to notify the user
+ *
+ * @return boolean
+ */
+ private boolean checkConnectivity() {
+ if (!ConnectionUtils.internetIsEnabled(this)) {
+ boxMessage.setVisibility(View.VISIBLE);
+ messageError.setText(getString(R.string.error_connectivity));
+ return false;
+ }
+ boxMessage.setVisibility(View.GONE);
+
+ return true;
+ }
+
+ /**
+ * Enable or disable view
+ *
+ * @param enabled boolean
+ */
+ private void enabledView(final boolean enabled) {
+ runOnUiThread(() -> {
+ nameEditTExt.setEnabled(enabled);
+ emailEditTExt.setEnabled(enabled);
+ phoneEdittext.setEnabled(enabled);
+ birthEdittext.setEnabled(enabled);
+ genderGroup.setEnabled(enabled);
+ });
+ }
+
+ private void prepareView() {
+ nameEditTExt.setText(name);
+ emailEditTExt.setText(oldEmail);
+ phoneEdittext.setText(phoneNumber);
+ birthEdittext.setText(DateUtils.formatDate(birthday, getString(R.string.date_format)));
+ if (editUserLogged) {
+ genderGroup.setVisibility(View.GONE);
+ }
+
+ Log.w("AAA", birthday);
+ Log.w("AAA", DateUtils.convertStringDateToCalendar(birthday, null).getTime().toString());
+
+ myCalendar = DateUtils.convertStringDateToCalendar(birthday, null);
+
+ if (!editUserLogged)
+ if (gender.equals(PatientsType.GenderType.MALE))
+ genderGroup.check(R.id.male);
+ else genderGroup.check(R.id.female);
+ }
+
+ /**
+ * Displays message.
+ *
+ * @param str @StringRes message.
+ */
+ private void showMessage(@StringRes int str) {
+ String message = getString(str);
+ if (message.isEmpty()) message = getString(R.string.error_500);
+
+ messageError.setText(message);
+ runOnUiThread(() -> {
+ boxMessage.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
+ boxMessage.setVisibility(View.VISIBLE);
+ });
+ }
+
+ /**
+ * Init components.
+ */
+ private void initComponents() {
+ appPreferencesHelper = AppPreferencesHelper.getInstance(this);
+ Log.i(TAG, appPreferencesHelper.getUserAccessHaniot().getAccessToken());
+ haniotNetRepository = HaniotNetRepository.getInstance(this);
+ patientDAO = PatientDAO.getInstance(this);
+ myCalendar = Calendar.getInstance();
+ userLogged = appPreferencesHelper.getUserLogged();
+ fab.setOnClickListener(fabClick);
+ admin = new Admin();
+ healthProfessional = new HealthProfessional();
+ patient = new Patient();
+
+ if (isEdit || editUserLogged) {
+ prepareEditing();
+ }
+
+
+ genderGroup.setOnCheckedChangeListener((group, checkedId) -> {
+ if (checkedId == R.id.male) genderIcon.setImageResource(R.drawable.x_boy);
+ else genderIcon.setImageResource(R.drawable.x_girl);
+ });
+
+ birthEdittext.setOnClickListener(v -> {
+ InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
+ inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
+ DatePickerDialog dialog = new DatePickerDialog(UserRegisterActivity.this,
+ (view, year, month, dayOfMonth) -> {
+ myCalendar.set(Calendar.YEAR, year);
+ myCalendar.set(Calendar.MONTH, month);
+ myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
+ birthEdittext.setText(DateUtils.formatDate(myCalendar.getTimeInMillis(),
+ getResources().getString(R.string.date_format)));
+ }, 2010, 1, 1);
+ dialog.show();
+ });
+ }
+
+ /**
+ * On options item selected.
+ *
+ * @param item
+ * @return
+ */
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/ChangePasswordActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/ChangePasswordActivity.java
index 384b777b..7696845c 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/ChangePasswordActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/ChangePasswordActivity.java
@@ -17,9 +17,11 @@
import java.util.regex.Pattern;
import br.edu.uepb.nutes.haniot.R;
+import br.edu.uepb.nutes.haniot.activity.MainActivity;
import br.edu.uepb.nutes.haniot.data.model.User;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.ErrorHandler;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
import butterknife.BindView;
@@ -69,10 +71,10 @@ protected void onCreate(Bundle savedInstanceState) {
haniotNetRepository = HaniotNetRepository.getInstance(this);
appPreferences = AppPreferencesHelper.getInstance(this);
- Intent intent = getIntent();
- if (intent.hasExtra("user_id")) { // From redirect link
+ String changePasswordId = appPreferences.getString("user_id");
+ if (changePasswordId != null) { // From redirect link
user = new User();
- user.set_id(intent.getStringExtra("user_id"));
+ user.set_id(changePasswordId);
} else {
user = appPreferences.getUserLogged();
}
@@ -190,7 +192,11 @@ private void changePassword() {
.doAfterTerminate(() -> loadingSend(false))
.subscribe(() -> {
printMessage(204);
- signOut();
+// signOut();
+
+ //TODO
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
}, this::errorHandler)
);
}
@@ -202,12 +208,7 @@ private void changePassword() {
* @param e {@link Throwable}
*/
private void errorHandler(Throwable e) {
- if (e instanceof HttpException) {
- HttpException httpEx = ((HttpException) e);
- printMessage(httpEx.code());
- return;
- }
- printMessage(500);
+ ErrorHandler.showMessage(this, e);
}
/**
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/ForgotPasswordActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/ForgotPasswordActivity.java
new file mode 100644
index 00000000..7d97b96f
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/ForgotPasswordActivity.java
@@ -0,0 +1,426 @@
+package br.edu.uepb.nutes.haniot.activity.account;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.annotation.StringRes;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+import android.view.animation.AnimationUtils;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import java.io.IOException;
+import java.util.Objects;
+
+import br.edu.uepb.nutes.haniot.R;
+import br.edu.uepb.nutes.haniot.activity.MainActivity;
+import br.edu.uepb.nutes.haniot.data.model.Device;
+import br.edu.uepb.nutes.haniot.data.model.User;
+import br.edu.uepb.nutes.haniot.data.model.UserAccess;
+import br.edu.uepb.nutes.haniot.data.model.dao.DeviceDAO;
+import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.ErrorHandler;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
+import br.edu.uepb.nutes.haniot.service.TokenExpirationService;
+import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.HttpException;
+
+import static android.view.inputmethod.InputMethodManager.HIDE_NOT_ALWAYS;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.HEALTH_PROFESSIONAL;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
+
+/**
+ * LoginActivity implementation.
+ *
+ * @author Copyright (c) 2018, NUTES/UEPB
+ */
+public class ForgotPasswordActivity extends AppCompatActivity implements View.OnClickListener {
+ private final String LOG_TAG = "LoginActivity";
+
+ @BindView(R.id.progressBarLogin)
+ ProgressBar mProgressBar;
+
+ @BindView(R.id.alert_error_connectivity)
+ FrameLayout mAlertConnectivity;
+
+ @BindView(R.id.edit_text_email)
+ EditText emailEditText;
+
+ @BindView(R.id.btn_forgot)
+ Button buttonForgot;
+
+ @BindView(R.id.btn_ok)
+ Button buttonOk;
+
+ @BindView(R.id.box_message_error)
+ LinearLayout boxMessage;
+
+ @BindView(R.id.box_response)
+ LinearLayout boxResponse;
+
+ @BindView(R.id.box_forgout)
+ LinearLayout boxForgout;
+
+ @BindView(R.id.message_error)
+ TextView messageError;
+
+ private TokenExpirationService tokenExpirationService;
+ private boolean mIsBound;
+ private DeviceDAO mDeviceDAO;
+ private HaniotNetRepository haniotNetRepository;
+ private AppPreferencesHelper appPreferencesHelper;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_forgot_password);
+ ButterKnife.bind(this);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ getWindow().setStatusBarColor(getColor(R.color.colorAccent));
+ }
+ mDeviceDAO = DeviceDAO.getInstance(this);
+ haniotNetRepository = HaniotNetRepository.getInstance(this);
+ appPreferencesHelper = AppPreferencesHelper.getInstance(this);
+
+ doBindService();
+
+ buttonForgot.setOnClickListener(this);
+ buttonOk.setOnClickListener(this);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ checkConnectivity();
+ boxMessage.setVisibility(View.GONE);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ doUnbindService();
+ DisposableManager.dispose();
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.btn_forgot:
+ login();
+ break;
+ case R.id.btn_ok:
+ finish();
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Authenticate user
+ */
+ private void login() {
+ boxMessage.setVisibility(View.GONE);
+
+ // close keyboard
+ InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(Objects.requireNonNull(
+ getCurrentFocus()).getWindowToken(), HIDE_NOT_ALWAYS);
+
+ // Check if you have an internet connection.
+ // If yes, it does authentication with the remote server
+ if (!checkConnectivity() || !validate()) return;
+
+ forgoutPassword();
+ }
+
+ private void showSucess() {
+ boxResponse.setVisibility(View.VISIBLE);
+ boxForgout.setVisibility(View.GONE);
+ }
+
+ /**
+ * Authenticates the user on the remote server
+ */
+ private void forgoutPassword() {
+// user.set
+ JsonObject email = new JsonObject();
+ email.addProperty("email", emailEditText.getText().toString());
+ DisposableManager.add(haniotNetRepository
+ .forgotPassword(email)
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(o -> {
+ showSucess();
+ }, this::errorHandler)
+ );
+ }
+
+ /**
+ * Get data user from server.
+ *
+ * @param userAccess {@link UserAccess}
+ */
+ private void getUserProfile(UserAccess userAccess) {
+ switch (userAccess.getTokenType()) {
+ case HEALTH_PROFESSIONAL:
+ DisposableManager.add(haniotNetRepository
+ .getHealthProfissional(userAccess.getSubject())
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(user -> {
+ if (user.get_id() == null) {
+ showMessage(R.string.error_recover_data);
+ showLoading(false);
+ return;
+ }
+ user.setUserType(HEALTH_PROFESSIONAL);
+ saveUserInfo(user);
+ }, this::errorHandler)
+ );
+ break;
+ case ADMIN:
+ DisposableManager.add(haniotNetRepository
+ .getAdmin(userAccess.getSubject())
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(user -> {
+ if (user.get_id() == null) {
+ showMessage(R.string.error_recover_data);
+ showLoading(false);
+ return;
+ }
+ user.setUserType(ADMIN);
+ saveUserInfo(user);
+ }, this::errorHandler)
+ );
+ break;
+ case PATIENT:
+ DisposableManager.add(haniotNetRepository
+ .getPatient(userAccess.getSubject())
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(user -> {
+ if (user.get_id() == null) {
+ showMessage(R.string.error_recover_data);
+ showLoading(false);
+ return;
+ }
+ user.setUserType(PATIENT);
+ saveUserInfo(user);
+ appPreferencesHelper.saveLastPatient(user);
+ }, this::errorHandler)
+ );
+ break;
+ }
+ }
+
+ /**
+ * Save user info in AppPreferences.
+ *
+ * @param user
+ */
+ private void saveUserInfo(User user) {
+ appPreferencesHelper.saveUserLogged(user);
+ tokenExpirationService.initTokenMonitor();
+ syncDevices(user.get_id());
+ }
+
+ /**
+ * Get devices saved on the server and sync local.
+ */
+ public void syncDevices(String userId) {
+ if (userId == null) return;
+
+ DisposableManager.add(haniotNetRepository
+ .getAllDevices(userId)
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> {
+ startActivity(new Intent(this, MainActivity.class));
+ finish();
+ })
+ .subscribe(devices -> {
+ mDeviceDAO.removeAll(userId);
+ for (Device d : devices) {
+ d.setUserId(userId);
+ mDeviceDAO.save(d);
+ }
+ }, error -> Log.w(LOG_TAG, "syncDevices() error: " + error.getMessage()))
+ );
+ }
+
+ /**
+ * Open screen to change password.
+ *
+ * @param body {@link ResponseBody}
+ */
+ private void openScreenChangePassword(ResponseBody body) {
+ try {
+ JsonObject json = new JsonParser()
+ .parse(body.string())
+ .getAsJsonObject();
+ String redirectLink = json.get("redirect_link").getAsString();
+ Intent intent = new Intent(
+ ForgotPasswordActivity.this,
+ ChangePasswordActivity.class
+ );
+ Log.i("AAA", redirectLink);
+ appPreferencesHelper.saveString("user_id", redirectLink.split("/")[2]);
+ startActivity(intent);
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+ }
+
+ /**
+ * Manipulates the error and displays message
+ * according to the type of error.
+ *
+ * @param e {@link Throwable}
+ */
+ private void errorHandler(Throwable e) {
+ if (e instanceof HttpException) {
+ HttpException httpEx = ((HttpException) e);
+ Log.i(LOG_TAG, httpEx.message());
+ switch (httpEx.code()) {
+ case 401:
+ showMessage(R.string.validate_invalid_email_or_password);
+ break;
+ case 429:
+ showMessage(R.string.error_limit_rate);
+ break;
+ default:
+ ErrorHandler.showMessage(this, e);
+ break;
+ }
+ return;
+ }
+ Log.i(LOG_TAG, e.getMessage());
+ }
+
+ /**
+ * Displays message.
+ *
+ * @param str @StringRes message.
+ */
+ private void showMessage(@StringRes int str) {
+ String message = getString(str);
+ if (message.isEmpty()) message = getString(R.string.error_500);
+
+ messageError.setText(message);
+ runOnUiThread(() -> {
+ boxMessage.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
+ boxMessage.setVisibility(View.VISIBLE);
+ });
+ }
+
+ /**
+ * Validate form.
+ *
+ * @return boolean
+ */
+ public boolean validate() {
+ boolean valid = true;
+
+ String email = emailEditText.getText().toString();
+
+ if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
+ emailEditText.setError(getString(R.string.validate_email));
+ valid = false;
+ } else {
+ emailEditText.setError(null);
+ }
+
+ return true;
+ }
+
+ /**
+ * Loading message,
+ *
+ * @param enabled boolean
+ */
+ private void showLoading(final boolean enabled) {
+ runOnUiThread(() -> {
+ buttonForgot.setEnabled(!enabled);
+
+ if (enabled) mProgressBar.setVisibility(View.VISIBLE);
+ else mProgressBar.setVisibility(View.GONE);
+ });
+ }
+
+ /**
+ * Check if you have connectivity.
+ * If it does not, the elements in the view mounted to notify the user.
+ *
+ * @return boolean
+ */
+ private boolean checkConnectivity() {
+ if (!ConnectionUtils.internetIsEnabled(this)) {
+ mAlertConnectivity.setVisibility(View.VISIBLE);
+ return false;
+ }
+ mAlertConnectivity.setVisibility(View.GONE);
+
+ return true;
+ }
+
+ /**
+ * Bind Account Service.
+ */
+ public void doBindService() {
+ bindService(new Intent(this, TokenExpirationService.class),
+ mServiceConnection, BIND_AUTO_CREATE);
+ mIsBound = true;
+ }
+
+ /**
+ * Unbind Account Service.
+ */
+ public void doUnbindService() {
+ if (mIsBound) {
+ unbindService(mServiceConnection);
+ mIsBound = false;
+ }
+ }
+
+ /**
+ * Code to manage Service lifecycle.
+ */
+ private final ServiceConnection mServiceConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName componentName, IBinder service) {
+ tokenExpirationService = ((TokenExpirationService.LocalBinder) service).getService();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName componentName) {
+ tokenExpirationService = null;
+ }
+ };
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/LoginActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/LoginActivity.java
index 90e2091e..4bdb340c 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/LoginActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/LoginActivity.java
@@ -3,6 +3,8 @@
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.graphics.Color;
+import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.StringRes;
@@ -28,9 +30,13 @@
import br.edu.uepb.nutes.haniot.R;
import br.edu.uepb.nutes.haniot.activity.MainActivity;
import br.edu.uepb.nutes.haniot.data.model.Device;
+import br.edu.uepb.nutes.haniot.data.model.User;
+import br.edu.uepb.nutes.haniot.data.model.UserAccess;
+import br.edu.uepb.nutes.haniot.data.model.UserType;
import br.edu.uepb.nutes.haniot.data.model.dao.DeviceDAO;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.ErrorHandler;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
import br.edu.uepb.nutes.haniot.service.TokenExpirationService;
import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
@@ -40,6 +46,9 @@
import retrofit2.HttpException;
import static android.view.inputmethod.InputMethodManager.HIDE_NOT_ALWAYS;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.HEALTH_PROFESSIONAL;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
/**
* LoginActivity implementation.
@@ -70,6 +79,9 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList
@BindView(R.id.message_error)
TextView messageError;
+ @BindView(R.id.forgot_password)
+ TextView forgotPassword;
+
private TokenExpirationService tokenExpirationService;
private boolean mIsBound;
private DeviceDAO mDeviceDAO;
@@ -80,9 +92,14 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
-
ButterKnife.bind(this);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ int flags = getWindow().getDecorView().getSystemUiVisibility();
+ flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+ getWindow().getDecorView().setSystemUiVisibility(flags);
+ getWindow().setStatusBarColor(getColor(android.R.color.background_light));
+ }
mDeviceDAO = DeviceDAO.getInstance(this);
haniotNetRepository = HaniotNetRepository.getInstance(this);
appPreferencesHelper = AppPreferencesHelper.getInstance(this);
@@ -90,6 +107,7 @@ protected void onCreate(Bundle savedInstanceState) {
doBindService();
buttonLogin.setOnClickListener(this);
+ forgotPassword.setOnClickListener(this);
passwordEditText.setOnEditorActionListener((textView, actionId, keyEvent) -> {
if (actionId == EditorInfo.IME_ACTION_SEND) login();
@@ -122,6 +140,9 @@ public void onClick(View view) {
case R.id.btn_login:
login();
break;
+ case R.id.forgot_password:
+ startActivity(new Intent(this, ForgotPasswordActivity.class));
+ break;
default:
break;
}
@@ -134,9 +155,11 @@ private void login() {
boxMessage.setVisibility(View.GONE);
// close keyboard
- InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
- inputMethodManager.hideSoftInputFromWindow(Objects.requireNonNull(
- getCurrentFocus()).getWindowToken(), HIDE_NOT_ALWAYS);
+ if (getCurrentFocus() != null) {
+ InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(Objects.requireNonNull(getCurrentFocus())
+ .getWindowToken(), HIDE_NOT_ALWAYS);
+ }
// Check if you have an internet connection.
// If yes, it does authentication with the remote server
@@ -155,7 +178,9 @@ private void authenticationInServer() {
.doAfterTerminate(() -> showLoading(false))
.subscribe(userAccess -> {
if (appPreferencesHelper.saveUserAccessHaniot(userAccess)) {
- getUserProfile(userAccess.getSubject());
+ getUserProfile(userAccess);
+ //TODO Temp
+ Log.w("AAA", "Token: " + userAccess.getAccessToken());
}
}, this::errorHandler)
);
@@ -164,25 +189,71 @@ private void authenticationInServer() {
/**
* Get data user from server.
*
- * @param userId {@link String}
+ * @param userAccess {@link UserAccess}
*/
- private void getUserProfile(String userId) {
- DisposableManager.add(haniotNetRepository
- .getHealthProfissional(userId)
- .doOnSubscribe(disposable -> showLoading(true))
- .doAfterTerminate(() -> showLoading(false))
- .subscribe(user -> {
- if (user.get_id() == null) {
- showMessage(R.string.error_recover_data);
- showLoading(false);
- return;
- }
+ private void getUserProfile(UserAccess userAccess) {
+ switch (userAccess.getTokenType()) {
+ case HEALTH_PROFESSIONAL:
+ DisposableManager.add(haniotNetRepository
+ .getHealthProfissional(userAccess.getSubject())
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(user -> {
+ if (user.get_id() == null) {
+ showMessage(R.string.error_recover_data);
+ showLoading(false);
+ return;
+ }
+ user.setUserType(HEALTH_PROFESSIONAL);
+ saveUserInfo(user);
+ }, this::errorHandler)
+ );
+ break;
+ case ADMIN:
+ DisposableManager.add(haniotNetRepository
+ .getAdmin(userAccess.getSubject())
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(user -> {
+ if (user.get_id() == null) {
+ showMessage(R.string.error_recover_data);
+ showLoading(false);
+ return;
+ }
+ user.setUserType(ADMIN);
+ saveUserInfo(user);
+ }, this::errorHandler)
+ );
+ break;
+ case PATIENT:
+ DisposableManager.add(haniotNetRepository
+ .getPatient(userAccess.getSubject())
+ .doOnSubscribe(disposable -> showLoading(true))
+ .doAfterTerminate(() -> showLoading(false))
+ .subscribe(user -> {
+ if (user.get_id() == null) {
+ showMessage(R.string.error_recover_data);
+ showLoading(false);
+ return;
+ }
+ user.setUserType(PATIENT);
+ saveUserInfo(user);
+ appPreferencesHelper.saveLastPatient(user);
+ }, this::errorHandler)
+ );
+ break;
+ }
+ }
- appPreferencesHelper.saveUserLogged(user);
- tokenExpirationService.initTokenMonitor();
- syncDevices(userId);
- }, this::errorHandler)
- );
+ /**
+ * Save user info in AppPreferences.
+ *
+ * @param user
+ */
+ private void saveUserInfo(User user) {
+ appPreferencesHelper.saveUserLogged(user);
+ tokenExpirationService.initTokenMonitor();
+ syncDevices(user.get_id());
}
/**
@@ -224,7 +295,7 @@ private void openScreenChangePassword(ResponseBody body) {
ChangePasswordActivity.class
);
Log.i("AAA", redirectLink);
- intent.putExtra("user_id", redirectLink.split("/")[2]);
+ appPreferencesHelper.saveString("user_id", redirectLink.split("/")[2]);
startActivity(intent);
} catch (IOException e1) {
e1.printStackTrace();
@@ -245,26 +316,17 @@ private void errorHandler(Throwable e) {
case 401:
showMessage(R.string.validate_invalid_email_or_password);
break;
- case 403: {
- if (httpEx.response().errorBody() == null) {
- showMessage(R.string.error_500);
- return;
- }
- Log.i("AAA", "" + httpEx.response().errorBody());
- openScreenChangePassword(Objects.requireNonNull(httpEx.response().errorBody()));
- break;
- }
- case 404:
- showMessage(R.string.error_recover_data);
+ case 429:
+ showMessage(R.string.error_limit_rate);
break;
default:
- showMessage(R.string.error_500);
+ ErrorHandler.showMessage(this, e);
break;
}
return;
}
- Log.i(LOG_TAG, e.getMessage());
showMessage(R.string.error_500);
+ Log.i(LOG_TAG, e.getMessage());
}
/**
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/UpdateDataActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/UpdateDataActivity.java
index 8aced016..9437a76c 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/UpdateDataActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/account/UpdateDataActivity.java
@@ -14,15 +14,23 @@
import android.widget.Toast;
import br.edu.uepb.nutes.haniot.R;
+import br.edu.uepb.nutes.haniot.data.model.Admin;
+import br.edu.uepb.nutes.haniot.data.model.HealthProfessional;
+import br.edu.uepb.nutes.haniot.data.model.Patient;
import br.edu.uepb.nutes.haniot.data.model.User;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.ErrorHandler;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.HttpException;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.HEALTH_PROFESSIONAL;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
+
/**
* UpdateDataActivity implementation.
*
@@ -128,23 +136,59 @@ public void onClick(View view) {
* Prepare the view for editing the data
*/
private void prepareEditing() {
- DisposableManager.add(haniotNetRepository
- .getHealthProfissional(user.get_id())
- .doOnSubscribe(disposable -> {
- populateView(); // Populate view with local data
- enabledView(false);
- loading(true);
- })
- .doAfterTerminate(() -> loading(false))
- .subscribe(healthP -> {
- if (healthP.getEmail() != null) user.setEmail(healthP.getEmail());
- if (healthP.getName() != null) user.setName(healthP.getName());
-
- populateView();
- enabledView(true);
- }, this::errorHandler)
-
- );
+ switch (appPreferences.getUserLogged().getUserType()) {
+ case ADMIN:
+ DisposableManager.add(haniotNetRepository
+ .getAdmin(user.get_id())
+ .doOnSubscribe(disposable -> {
+ populateView(); // Populate view with local data
+ enabledView(false);
+ loading(true);
+ })
+ .doAfterTerminate(() -> loading(false))
+ .subscribe(admin -> {
+ if (admin.getEmail() != null) user.setEmail(admin.getEmail());
+ if (admin.getName() != null) user.setName(admin.getName());
+
+ populateView();
+ enabledView(true);
+ }, this::errorHandler));
+ break;
+ case HEALTH_PROFESSIONAL:
+ DisposableManager.add(haniotNetRepository
+ .getHealthProfissional(user.get_id())
+ .doOnSubscribe(disposable -> {
+ populateView(); // Populate view with local data
+ enabledView(false);
+ loading(true);
+ })
+ .doAfterTerminate(() -> loading(false))
+ .subscribe(healthP -> {
+ if (healthP.getEmail() != null) user.setEmail(healthP.getEmail());
+ if (healthP.getName() != null) user.setName(healthP.getName());
+
+ populateView();
+ enabledView(true);
+ }, this::errorHandler));
+ break;
+ case PATIENT:
+ DisposableManager.add(haniotNetRepository
+ .getPatient(user.get_id())
+ .doOnSubscribe(disposable -> {
+ populateView(); // Populate view with local data
+ enabledView(false);
+ loading(true);
+ })
+ .doAfterTerminate(() -> loading(false))
+ .subscribe(patient -> {
+ if (patient.getEmail() != null) user.setEmail(patient.getEmail());
+ if (patient.getName() != null) user.setName(patient.getName());
+
+ populateView();
+ enabledView(true);
+ }, this::errorHandler));
+ break;
+ }
}
/**
@@ -163,19 +207,53 @@ private void update() {
private void updateInServer() {
if (user == null) return;
- DisposableManager.add(haniotNetRepository
- .updateHealthProfissional(getUserView())
- .doOnSubscribe(disposable -> loading(true))
- .doAfterTerminate(() -> loading(false))
- .subscribe(healthP -> {
- if (healthP.getEmail() != null) user.setEmail(healthP.getEmail());
- if (healthP.getName() != null) user.setName(healthP.getName());
-
- appPreferences.saveUserLogged(user);
- enabledView(true);
- showMessage(200);
- }, this::errorHandler)
- );
+ switch (appPreferences.getUserLogged().getUserType()) {
+ case ADMIN:
+ DisposableManager.add(haniotNetRepository
+ .updateAdmin((Admin) getUserView())
+ .doOnSubscribe(disposable -> loading(true))
+ .doAfterTerminate(() -> loading(false))
+ .subscribe(healthP -> {
+ if (healthP.getEmail() != null) user.setEmail(healthP.getEmail());
+ if (healthP.getName() != null) user.setName(healthP.getName());
+
+ appPreferences.saveUserLogged(user);
+ enabledView(true);
+ showMessage(200);
+ }, this::errorHandler)
+ );
+ break;
+ case HEALTH_PROFESSIONAL:
+ DisposableManager.add(haniotNetRepository
+ .updateHealthProfissional((HealthProfessional) getUserView())
+ .doOnSubscribe(disposable -> loading(true))
+ .doAfterTerminate(() -> loading(false))
+ .subscribe(admin -> {
+ if (admin.getEmail() != null) user.setEmail(admin.getEmail());
+ if (admin.getName() != null) user.setName(admin.getName());
+
+ appPreferences.saveUserLogged(user);
+ enabledView(true);
+ showMessage(200);
+ }, this::errorHandler)
+ );
+ break;
+ case PATIENT:
+ DisposableManager.add(haniotNetRepository
+ .updatePatient((Patient) getUserView())
+ .doOnSubscribe(disposable -> loading(true))
+ .doAfterTerminate(() -> loading(false))
+ .subscribe(patient -> {
+ if (patient.getEmail() != null) user.setEmail(patient.getEmail());
+ if (patient.getName() != null) user.setName(patient.getName());
+
+ appPreferences.saveUserLogged(user);
+ enabledView(true);
+ showMessage(200);
+ }, this::errorHandler)
+ );
+ break;
+ }
}
/**
@@ -185,12 +263,7 @@ private void updateInServer() {
* @param e {@link Throwable}
*/
private void errorHandler(Throwable e) {
- if (e instanceof HttpException) {
- HttpException httpEx = ((HttpException) e);
- showMessage(httpEx.code());
- return;
- }
- showMessage(500);
+ ErrorHandler.showMessage(this, e);
}
/**
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BloodPresssureChartActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BloodPresssureChartActivity.java
index eda473d7..212efb21 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BloodPresssureChartActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BloodPresssureChartActivity.java
@@ -1,7 +1,6 @@
package br.edu.uepb.nutes.haniot.activity.charts;
import android.graphics.Color;
-import android.support.v4.content.ContextCompat;
import android.view.MenuItem;
import android.view.View;
@@ -17,8 +16,6 @@
import br.edu.uepb.nutes.haniot.data.model.Measurement;
import br.edu.uepb.nutes.haniot.data.model.MeasurementType;
-import static br.edu.uepb.nutes.haniot.server.SynchronizationServer.context;
-
/**
* BloodPresssureChartActivity implementation.
*
@@ -41,9 +38,11 @@ public void initView() {
.xAxisStyle(Color.WHITE, XAxis.XAxisPosition.BOTTOM)
.yAxisStyle(Color.WHITE)
.setTextValuesColor(Color.WHITE)
- .drawCircleStyle(ContextCompat.getColor(context, R.color.colorIndigo), ContextCompat.getColor(context, R.color.colorPrimary))
- .lineStyle(2.5f, ContextCompat.getColor(context, R.color.colorIndigo))
+ .drawCircleStyle(getResources().getColor(R.color.colorIndigo), getResources().getColor(R.color.colorPrimary))
+ .lineStyle(2.5f, getResources().getColor(R.color.colorIndigo))
.highlightStyle(Color.TRANSPARENT, 0.7f)
+ .createLimit(getString(R.string.limit_high_systolic), 140, getResources().getColor(R.color.colorRed))
+ .createLimit(getString(R.string.limit_high_diastolic), 90, getResources().getColor(R.color.colorRed))
.addLegend(getString(R.string.systolic), getString(R.string.diastolic))
.build();
@@ -55,12 +54,6 @@ public int getLayout() {
return R.layout.activity_line_chart;
}
-// @Override
-// public int getTypeMeasurement() {
-// return 0;
-//// return MeasurementType.BLOOD_PRESSURE_SYSTOLIC;
-// }
-
@Override
public String getTypeMeasurement() {
return MeasurementType.BLOOD_PRESSURE;
@@ -71,12 +64,6 @@ public Chart getChart() {
return lineChart;
}
-
- @Override
- protected void onResume() {
- super.onResume();
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BodyCompositionChartActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BodyCompositionChartActivity.java
index 14cd20e8..fab469fc 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BodyCompositionChartActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/BodyCompositionChartActivity.java
@@ -1,6 +1,7 @@
package br.edu.uepb.nutes.haniot.activity.charts;
import android.graphics.Color;
+import android.util.Log;
import android.view.MenuItem;
import android.view.View;
@@ -15,6 +16,7 @@
import br.edu.uepb.nutes.haniot.activity.charts.base.CreateChart;
import br.edu.uepb.nutes.haniot.data.model.Measurement;
import br.edu.uepb.nutes.haniot.data.model.MeasurementType;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
/**
* BodyCompositionChartActivity implementation.
@@ -43,8 +45,8 @@ public void initView() {
.setTextValuesColor(Color.WHITE)
.colorFontDescription(Color.WHITE)
.highlightStyle(Color.TRANSPARENT, 0.7f)
- //.createLimit("Obesity", getLimitObesity(OBESITY_OVERWEIGHT), Color.RED)
.build();
+ setLimitObesity();
requestData(CHART_TYPE_MONTH);
}
@@ -64,11 +66,6 @@ public String getTypeMeasurement() {
return MeasurementType.BODY_MASS;
}
- @Override
- protected void onResume() {
- super.onResume();
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -86,7 +83,27 @@ public void onUpdateData(List data, int currentChartType) {
lineChart.setVisibility(View.VISIBLE);
}
-// public float getLimitObesity(float IMC){
-// return (float) (IMC*Math.pow(session.getUserLogged().getHeight(), 2));
-// }
+ /**
+ * Configure the obesity limit in the chart
+ */
+ public void setLimitObesity() {
+ runOnUiThread(() -> {
+ DisposableManager.add(haniotNetRepository.
+ getAllMeasurementsByType(patient.get_id(), MeasurementType.HEIGHT,
+ "-timestamp", null, null, 1, 1)
+ .doAfterSuccess(measurements -> {
+ if (measurements != null && measurements.size() > 0) {
+ double height = measurements.get(0).getValue();
+
+ if (measurements.get(0).getUnit().equals("cm")) height /= 100;
+ float limit = (float) (OBESITY_OVERWEIGHT * Math.pow(height, 2));
+ mChart.getParams().createLimit(getString(R.string.limit_obesity), limit, Color.RED);
+ mChart.getmChart().invalidate();
+ }
+ })
+ .subscribe(measurements -> {
+ }, error -> Log.w("ChartBodyComposition", "onError()")));
+ });
+
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/GlucoseChartActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/GlucoseChartActivity.java
index fdc5a110..efee9f47 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/GlucoseChartActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/GlucoseChartActivity.java
@@ -25,7 +25,7 @@
*/
public class GlucoseChartActivity extends BaseChartActivity {
- private final float PRE_DIABETES = 100;
+ private final float PRE_DIABETES = 200;
private CreateChart mChart;
Chart lineChart;
@@ -54,13 +54,6 @@ public int getLayout() {
return R.layout.activity_line_chart;
}
-// @Override
-// public int getTypeMeasurement() {
-// return 0;
-//// return MeasurementType.BLOOD_GLUCOSE;
-// }
-
-
@Override
public String getTypeMeasurement() {
return MeasurementType.BLOOD_GLUCOSE;
@@ -71,11 +64,6 @@ public Chart getChart() {
return lineChart;
}
- @Override
- protected void onResume() {
- super.onResume();
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -92,4 +80,4 @@ public void onUpdateData(List data, int currentChartType) {
mProgressBar.setVisibility(View.INVISIBLE);
lineChart.setVisibility(View.VISIBLE);
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/HeartRateChartActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/HeartRateChartActivity.java
index 2bc5f6c7..bef4e353 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/HeartRateChartActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/HeartRateChartActivity.java
@@ -43,7 +43,6 @@ public void initView() {
.setTextValuesColor(Color.WHITE)
.colorFontDescription(Color.WHITE)
.highlightStyle(Color.TRANSPARENT, 0.7f)
- .createLimit(getString(R.string.limit_heart_rate), TACHYCARDIA, Color.RED)
.build();
requestData(CHART_TYPE_MONTH);
@@ -54,13 +53,6 @@ public int getLayout() {
return R.layout.activity_line_chart;
}
-// @Override
-// public int getTypeMeasurement() {
-// return 0;
-//// return MeasurementType.HEART_RATE;
-// }
-
-
@Override
public String getTypeMeasurement() {
return MeasurementType.HEART_RATE;
@@ -71,13 +63,6 @@ public Chart getChart() {
return lineChart;
}
-
- @Override
- protected void onResume() {
- super.onResume();
- requestData(CHART_TYPE_DAY);
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/SmartBandChartActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/SmartBandChartActivity.java
index a3cbb906..d3277f38 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/SmartBandChartActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/SmartBandChartActivity.java
@@ -97,11 +97,6 @@ public Chart getChart() {
return barChart;
}
- @Override
- protected void onResume() {
- super.onResume();
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -178,12 +173,12 @@ public List agroup(List data, int type) {
// if (type == Calendar.YEAR) {
// for (int i = 0; i <= data.size() - 1; i++) {
// total += data.get(i).getValue();
-// if (data.get(i).getMeasurementList().get(0).getTypeId() == MeasurementType.DISTANCE) {
-// totalCal += data.get(i).getMeasurementList().get(0).getValue();
-// totalDist += data.get(i).getMeasurementList().get(1).getValue();
+// if (data.get(i).getMeasurements().get(0).getTypeId() == MeasurementType.DISTANCE) {
+// totalCal += data.get(i).getMeasurements().get(0).getValue();
+// totalDist += data.get(i).getMeasurements().get(1).getValue();
// } else {
-// totalCal += data.get(i).getMeasurementList().get(1).getValue();
-// totalDist += data.get(i).getMeasurementList().get(0).getValue();
+// totalCal += data.get(i).getMeasurements().get(1).getValue();
+// totalDist += data.get(i).getMeasurements().get(0).getValue();
// }
// }
//
@@ -207,12 +202,12 @@ public List agroup(List data, int type) {
// int compare = c.get(type);
//
// total += data.get(i).getValue();
-// if (data.get(i).getMeasurementList().get(0).getTypeId() == MeasurementType.DISTANCE) {
-// totalCal += data.get(i).getMeasurementList().get(0).getValue();
-// totalDist += data.get(i).getMeasurementList().get(1).getValue();
+// if (data.get(i).getMeasurements().get(0).getTypeId() == MeasurementType.DISTANCE) {
+// totalCal += data.get(i).getMeasurements().get(0).getValue();
+// totalDist += data.get(i).getMeasurements().get(1).getValue();
// } else {
-// totalCal += data.get(i).getMeasurementList().get(1).getValue();
-// totalDist += data.get(i).getMeasurementList().get(0).getValue();
+// totalCal += data.get(i).getMeasurements().get(1).getValue();
+// totalDist += data.get(i).getMeasurements().get(0).getValue();
// }
//
// if (current != compare) {
@@ -234,19 +229,20 @@ public List agroup(List data, int type) {
return points;
}
- @Override
- protected void requestData(int type) {
- if (type == CHART_TYPE_DAY) {
- currentChartType = CHART_TYPE_DAY;
- } else if (type == CHART_TYPE_SEVEN) {
- currentChartType = CHART_TYPE_SEVEN;
- } else if (type == CHART_TYPE_MONTH) {
- currentChartType = CHART_TYPE_MONTH;
- } else if (type == CHART_TYPE_YEAR) {
- currentChartType = CHART_TYPE_YEAR;
- }
- requestDataInServer("");
- }
+// @Override
+// protected void requestData(int type) {
+// if (type == CHART_TYPE_DAY) {
+// currentChartType = CHART_TYPE_DAY;
+// } else if (type == CHART_TYPE_SEVEN) {
+// currentChartType = CHART_TYPE_SEVEN;
+// } else if (type == CHART_TYPE_MONTH) {
+// currentChartType = CHART_TYPE_MONTH;
+// } else if (type == CHART_TYPE_YEAR) {
+//
+// }
+// currentChartType = type;
+// requestDataInServer(type);
+// }
@Override
public void createMoreInfo(List measurements) {
@@ -270,8 +266,8 @@ protected ArrayList getInfosBase(List measurements
infos.add(new InfoMeasurement(getString(R.string.info_period), " - "));
} else {
infos.add(new InfoMeasurement(getString(R.string.info_steps), String.valueOf((int) measurements.get(0).getValue())));
-// infos.add(new InfoMeasurement(getString(R.string.info_distance), String.valueOf((int) (measurements.get(0).getMeasurementList().get(0).getValue())) + " m"));
-// infos.add(new InfoMeasurement(getString(R.string.info_calories), String.valueOf((int) (measurements.get(0).getMeasurementList().get(1).getValue())) + " kcal"));
+// infos.add(new InfoMeasurement(getString(R.string.info_distance), String.valueOf((int) (measurements.get(0).getMeasurements().get(0).getValue())) + " m"));
+// infos.add(new InfoMeasurement(getString(R.string.info_calories), String.valueOf((int) (measurements.get(0).getMeasurements().get(1).getValue())) + " kcal"));
// infos.add(new InfoMeasurement(getString(R.string.info_period), DateUtils.formatDate(measurements.get(0).getRegistrationDate(), getString(R.string.date_format))));
}
return infos;
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/TemperatureChartActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/TemperatureChartActivity.java
index 742976ea..bd674a6a 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/TemperatureChartActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/TemperatureChartActivity.java
@@ -65,11 +65,6 @@ public String getTypeMeasurement() {
return MeasurementType.BODY_TEMPERATURE;
}
- @Override
- protected void onResume() {
- super.onResume();
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/BaseChartActivity.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/BaseChartActivity.java
index 579c53d5..805cafec 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/BaseChartActivity.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/BaseChartActivity.java
@@ -19,25 +19,19 @@
import com.github.clans.fab.FloatingActionMenu;
import com.github.mikephil.charting.charts.Chart;
-import org.json.JSONObject;
-
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.List;
import br.edu.uepb.nutes.haniot.R;
-import br.edu.uepb.nutes.haniot.activity.settings.Session;
import br.edu.uepb.nutes.haniot.data.model.Measurement;
import br.edu.uepb.nutes.haniot.data.model.MeasurementType;
import br.edu.uepb.nutes.haniot.data.model.Patient;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
-import br.edu.uepb.nutes.haniot.server.historical.CallbackHistorical;
-import br.edu.uepb.nutes.haniot.server.historical.Historical;
-import br.edu.uepb.nutes.haniot.server.historical.HistoricalType;
-import br.edu.uepb.nutes.haniot.server.historical.Params;
+import br.edu.uepb.nutes.haniot.utils.ConnectionUtils;
import br.edu.uepb.nutes.haniot.utils.DateUtils;
-import br.edu.uepb.nutes.haniot.utils.NameColumnsDB;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -57,11 +51,9 @@ abstract public class BaseChartActivity extends AppCompatActivity implements Vie
public final int CHART_TYPE_YEAR = 4;
protected int currentChartType;
- // public Params params;
- public int typeId;
private AppPreferencesHelper appPreferencesHelper;
- private HaniotNetRepository haniotNetRepository;
- private Patient patient;
+ protected HaniotNetRepository haniotNetRepository;
+ protected Patient patient;
@BindView(R.id.toolbar)
public Toolbar mToolbar;
@@ -115,17 +107,23 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
boxMeasurement.requestLayout();
boxToolbar.requestLayout();
}
-
fabDay.setOnClickListener(this);
fabWeek.setOnClickListener(this);
fabMonth.setOnClickListener(this);
fabYear.setOnClickListener(this);
+ fabActionMenu.getMenuIconView().setImageDrawable(getResources().getDrawable(R.drawable.ic_month));
}
@Override
protected void onDestroy() {
- super.onDestroy();
DisposableManager.dispose();
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ requestData(currentChartType);
}
public abstract void initView();
@@ -136,6 +134,8 @@ protected void onDestroy() {
public abstract Chart getChart();
+ abstract public void onUpdateData(List data, int currentChartType);
+
/**
* Check if is tablet.
*
@@ -152,146 +152,94 @@ public static boolean isTablet(Context context) {
public void onClick(View v) {
switch (v.getId()) {
case R.id.fab_day:
- requestData(CHART_TYPE_DAY);
+ currentChartType = CHART_TYPE_DAY;
fabActionMenu.getMenuIconView().setImageDrawable(getResources().getDrawable(R.drawable.ic_day));
- fabActionMenu.close(true);
break;
-
case R.id.fab_month:
- requestData(CHART_TYPE_MONTH);
+ currentChartType = CHART_TYPE_MONTH;
fabActionMenu.getMenuIconView().setImageDrawable(getResources().getDrawable(R.drawable.ic_month));
- fabActionMenu.close(true);
break;
-
case R.id.fab_week:
- requestData(CHART_TYPE_SEVEN);
+ currentChartType = CHART_TYPE_SEVEN;
fabActionMenu.getMenuIconView().setImageDrawable(getResources().getDrawable(R.drawable.ic_week));
- fabActionMenu.close(true);
break;
case R.id.fab_year:
+ currentChartType = CHART_TYPE_YEAR;
fabActionMenu.getMenuIconView().setImageDrawable(getResources().getDrawable(R.drawable.ic_year));
- requestData(CHART_TYPE_YEAR);
- fabActionMenu.close(true);
break;
}
+ requestData(currentChartType);
+ fabActionMenu.close(true);
}
- protected void requestDataInServer(String period) {
- String dateStart = null;
- String dateEnd = null;
-
- DisposableManager.add(haniotNetRepository.
- getAllMeasurementsByType(patient.get_id(), getTypeMeasurement(), "timestamp",
- dateStart, dateEnd, 0, 0)
- .doOnSubscribe(disposable -> {
- Log.w(TAG, "onBeforeSend()");
- mProgressBar.setVisibility(View.VISIBLE);
- getChart().setVisibility(View.INVISIBLE);
- })
- .doAfterTerminate(() -> {
- Log.w(TAG, "onAfterSend()");
- })
- .subscribe(measurements -> {
- Log.w(TAG, "onSuccess()");
- if (measurements != null && measurements.isEmpty()) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- onUpdateData(new ArrayList<>(), currentChartType);
- createMoreInfo(new ArrayList<>());
- }
- });
- }
- if (measurements != null && measurements.size() > 0) {
- Log.w(TAG, "Size = " + measurements.size());
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- onUpdateData(measurements, currentChartType);
- createMoreInfo(measurements);
- }
- });
- }
- }, error -> {
- Log.w(TAG, "onError()");
- printMessage(getString(R.string.error_500));
- }));
-
-
-// Historical.Query query = new Historical.Query()
-// .type(HistoricalType.MEASUREMENTS_TYPE_USER)
-// .params(params)
-// .ordination(NameColumnsDB.MEASUREMENT_REGISTRATION_DATE, "asc");
-////
-// if (!period.isEmpty()) query.filterDate(period);
-////
-////
-// Historical hist = query.build();
-//
-// hist.request(this, new CallbackHistorical() {
-// @Override
-// public void onBeforeSend() {
-// Log.w(TAG, "onBeforeSend()");
-// mProgressBar.setVisibility(View.VISIBLE);
-// getChart().setVisibility(View.INVISIBLE);
-//
-// }
-//
-// @Override
-// public void onError(JSONObject result) {
-// Log.w(TAG, "onError()");
-// printMessage(getString(R.string.error_500));
-//
-// }
-//
-// @Override
-// public void onResult(List result) {
-// Log.w(TAG, "onSuccess()");
-// if (result.isEmpty() && result != null) {
-// runOnUiThread(new Runnable() {
-// @Override
-// public void run() {
-// onUpdateData(new ArrayList<>(), currentChartType);
-// createMoreInfo(new ArrayList<>());
-// }
-// });
-// }
-// if (result != null && result.size() > 0) {
-// runOnUiThread(new Runnable() {
-// @Override
-// public void run() {
-// onUpdateData(result, currentChartType);
-// createMoreInfo(result);
-// }
-// });
-// }
-// }
-//
-// @Override
-// public void onAfterSend() {
-// Log.w(TAG, "onAfterSend()");
-// }
-// });
+ protected void requestData(int type) {
+ requestDataInServer(type);
}
/**
- * Request data in server.
+ * Calculates the end date of according initial date and a period of time
*
- * @param type
+ * @param date Initial date
+ * @param period Period of time
+ * @return
*/
- protected void requestData(int type) {
- if (type == CHART_TYPE_DAY) {
- currentChartType = CHART_TYPE_DAY;
- requestDataInServer("1d");
- } else if (type == CHART_TYPE_SEVEN) {
- currentChartType = CHART_TYPE_SEVEN;
- requestDataInServer("1w");
- } else if (type == CHART_TYPE_MONTH) {
- currentChartType = CHART_TYPE_MONTH;
- requestDataInServer("1m");
- } else if (type == CHART_TYPE_YEAR) {
- currentChartType = CHART_TYPE_YEAR;
- requestDataInServer("1y");
+ private String calcStartDate(String date, int period) {
+ Calendar c = DateUtils.convertStringDateToCalendar(date, DateUtils.DATE_FORMAT_DATE_TIME);
+ switch (period) {
+ case CHART_TYPE_DAY:
+ c.add(Calendar.DAY_OF_YEAR, -1);
+ break;
+ case CHART_TYPE_SEVEN:
+ c.add(Calendar.DAY_OF_YEAR, -7);
+ break;
+ case CHART_TYPE_YEAR:
+ c.add(Calendar.DAY_OF_YEAR, -365);
+ break;
+ default:
+ c.add(Calendar.DAY_OF_YEAR, -30);
+ break;
+ }
+ return DateUtils.formatDate(c.getTimeInMillis(), DateUtils.DATE_FORMAT_DATE_TIME);
+ }
+
+ /**
+ * Request data in server of according with a period of time
+ *
+ * @param period The period of time: 1d, 1w, 1m or 1y
+ */
+ protected void requestDataInServer(int period) {
+ String dateEnd = DateUtils.getCurrentDateTimeUTC(); // data atual
+ String dateStart = calcStartDate(dateEnd, period);
+ Log.w(TAG, "Data inicio: " + dateStart);
+ Log.w(TAG, "Data fim: " + dateEnd);
+
+ if (ConnectionUtils.internetIsEnabled(this)) {
+ DisposableManager.add(haniotNetRepository.
+ getAllMeasurementsByType(patient.get_id(), getTypeMeasurement(), "timestamp",
+ dateStart, dateEnd, 1, 100)
+ .doOnSubscribe(disposable -> {
+ Log.w(TAG, "onBeforeSend()");
+ mProgressBar.setVisibility(View.VISIBLE);
+ getChart().setVisibility(View.INVISIBLE);
+ })
+ .subscribe(measurements -> {
+ Log.w(TAG, "onSuccess()");
+ if (measurements != null) {
+ runOnUiThread(() -> {
+ onUpdateData(measurements, currentChartType);
+ createMoreInfo(measurements);
+ });
+ }
+ }, error -> {
+ Log.w(TAG, "onError()");
+ printMessage(getString(R.string.error_500));
+ }));
+ } else {
+ runOnUiThread(() -> {
+ onUpdateData(new ArrayList<>(), currentChartType);
+ createMoreInfo(new ArrayList<>());
+// printMessage(getString(R.string.connect_network_try_again));
+ });
}
}
@@ -301,72 +249,117 @@ protected void requestData(int type) {
* @param message
*/
private void printMessage(String message) {
- runOnUiThread(() -> {
- Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
- });
+ runOnUiThread(() -> Toast.makeText(this, message, Toast.LENGTH_LONG).show());
}
public void createMoreInfo(List measurements) {
- Log.d(TAG, "createMoreInfoOriginal");
ArrayList infoMeasurements = new ArrayList<>();
infoMeasurements.addAll(getInfosBase(measurements));
- GridView gridView = (GridView) findViewById(R.id.moreinfo_grid);
+ GridView gridView = findViewById(R.id.moreinfo_grid);
InfoAdapter infoAdapter = new InfoAdapter(this, infoMeasurements);
gridView.setAdapter(infoAdapter);
}
protected ArrayList getInfosBase(List measurements) {
+ InfoMeasurement max = new InfoMeasurement(getString(R.string.info_max), "-");
+ InfoMeasurement min = new InfoMeasurement(getString(R.string.info_min), "-");
+ InfoMeasurement avg = new InfoMeasurement(getString(R.string.info_avarage), "-");
+ InfoMeasurement per = new InfoMeasurement(getString(R.string.info_period), " - ");
- ArrayList infos = new ArrayList<>();
+ if (measurements != null && !measurements.isEmpty()) {
+ String firstMeasurementDate, lastMeasurementDate, unit = " ";
+ double mMax = 0, mMin = 0, mAvg = 0.0;
- if (measurements.isEmpty()) {
- infos.add(new InfoMeasurement(getString(R.string.info_max), "-"));
- infos.add(new InfoMeasurement(getString(R.string.info_min), "-"));
- infos.add(new InfoMeasurement(getString(R.string.info_avarage), "-"));
- infos.add(new InfoMeasurement(getString(R.string.info_period), " - "));
- } else {
- double measurementValueMax = measurements.get(0).getValue();
- double measurementValueMin = measurements.get(0).getValue();
- double measurementValueAverage = 0.0;
-
- for (Measurement measurement : measurements) {
- measurementValueAverage += measurement.getValue();
- if (measurementValueMax < measurement.getValue()) {
- measurementValueMax = measurement.getValue();
+ int systolicMax = 0, systolicMin = 0, diastolicMax = 0, diastolicMin = 0;
+
+ String type = getTypeMeasurement();
+
+ if (MeasurementType.HEART_RATE.equals(type)) {
+ mMax = measurements.get(0).getDataset().get(0).getValue();
+ mMin = measurements.get(0).getDataset().get(0).getValue();
+
+ for (Measurement measurement : measurements) {
+ double value = measurement.getDataset().get(0).getValue();
+ mAvg += value;
+
+ if (mMax < value) mMax = value;
+ if (mMin > value) mMin = value;
}
- if (measurementValueMin > measurement.getValue()) {
- measurementValueMin = measurement.getValue();
+ firstMeasurementDate = DateUtils.formatDate(measurements.get(0).getDataset().get(0).getTimestamp(), getString(R.string.date_format));
+ lastMeasurementDate = DateUtils.formatDate(measurements.get(measurements.size() - 1).getDataset().get(0).getTimestamp(), getString(R.string.date_format));
+ } else if (MeasurementType.BLOOD_PRESSURE.equals(type)) {
+ int mediaMax, mediaMin;
+
+ systolicMax = measurements.get(0).getSystolic();
+ systolicMin = measurements.get(0).getSystolic();
+ diastolicMax = measurements.get(0).getDiastolic();
+ diastolicMin = measurements.get(0).getDiastolic();
+
+ mediaMax = calcPressureAverage(measurements.get(0).getSystolic(), measurements.get(0).getDiastolic());
+ mediaMin = calcPressureAverage(measurements.get(0).getSystolic(), measurements.get(0).getDiastolic());
+
+ for (Measurement m : measurements) {
+ int valor = calcPressureAverage(m.getSystolic(), m.getDiastolic());
+ mAvg += valor;
+
+ if (mediaMax < valor) {
+ mediaMax = valor;
+ systolicMax = m.getSystolic();
+ diastolicMax = m.getDiastolic();
+ }
+ if (mediaMin > valor) {
+ mediaMin = valor;
+ systolicMin = m.getSystolic();
+ diastolicMin = m.getDiastolic();
+ }
}
+ firstMeasurementDate = DateUtils.formatDate(measurements.get(0).getTimestamp(), getString(R.string.date_format));
+ lastMeasurementDate = DateUtils.formatDate(measurements.get(measurements.size() - 1).getTimestamp(), getString(R.string.date_format));
+ } else {
+ mMax = measurements.get(0).getValue();
+ mMin = measurements.get(0).getValue();
+
+ for (Measurement measurement : measurements) {
+ double value = measurement.getValue();
+ mAvg += value;
+ if (mMax < value) mMax = value;
+ if (mMin > value) mMin = value;
+ }
+ firstMeasurementDate = DateUtils.formatDate(measurements.get(0).getTimestamp(), getString(R.string.date_format));
+ lastMeasurementDate = DateUtils.formatDate(measurements.get(measurements.size() - 1).getTimestamp(), getString(R.string.date_format));
}
- measurementValueAverage /= measurements.size();
- String unit = " " + measurements.get(0).getUnit();
- String firstMeasurement = DateUtils.formatDate(measurements.get(0).getTimestamp(), getString(R.string.date_format));
- String lastMeasurement = DateUtils.formatDate(measurements.get(measurements.size() - 1).getTimestamp(), getString(R.string.date_format));
-//
- if (getTypeMeasurement() == MeasurementType.HEART_RATE
-// || getTypeMeasurement() == MeasurementType.BLOOD_PRESSURE_DIASTOLIC
-// || getTypeMeasurement() == MeasurementType.BLOOD_PRESSURE_SYSTOLIC
- || getTypeMeasurement() == MeasurementType.BLOOD_GLUCOSE) {
- infos.add(new InfoMeasurement(getString(R.string.info_max), (int) measurementValueMax + unit));
- infos.add(new InfoMeasurement(getString(R.string.info_min), (int) measurementValueMin + unit));
- infos.add(new InfoMeasurement(getString(R.string.info_avarage), (int) measurementValueAverage + unit));
+ mAvg /= measurements.size();
+ unit += measurements.get(0).getUnit();
+
+ if (type.equals(MeasurementType.HEART_RATE) || type.equals(MeasurementType.BLOOD_GLUCOSE)) {
+ max.setValue(((int) mMax) + unit);
+ min.setValue(((int) mMin) + unit);
+ avg.setValue(String.format("%.1f", mAvg) + unit);
+ } else if (type.equals(MeasurementType.BLOOD_PRESSURE)) {
+ max.setValue(systolicMax + "/" + diastolicMax + "\n" + unit);
+ min.setValue(systolicMin + "/" + diastolicMin + "\n" + unit);
+ avg.setValue(String.format("%.1f", mAvg));
} else {
- infos.add(new InfoMeasurement(getString(R.string.info_max), (String.format("%.1f", measurementValueMax)) + unit));
- infos.add(new InfoMeasurement(getString(R.string.info_min), (String.format("%.1f", measurementValueMin)) + unit));
- infos.add(new InfoMeasurement(getString(R.string.info_avarage), (String.format("%.1f", measurementValueAverage)) + unit));
+ max.setValue(String.format("%.1f", mMax) + unit);
+ min.setValue(String.format("%.1f", mMin) + unit);
+ avg.setValue(String.format("%.1f", mAvg) + unit);
}
- if (firstMeasurement.equals(lastMeasurement))
- infos.add(new InfoMeasurement(getString(R.string.info_period), firstMeasurement));
- else
- infos.add(new InfoMeasurement(getString(R.string.info_period), firstMeasurement + "\n-\n" + lastMeasurement));
+ per.setValue(firstMeasurementDate.equals(lastMeasurementDate) ?
+ firstMeasurementDate : firstMeasurementDate + "\n-\n" + lastMeasurementDate);
}
+ ArrayList infos = new ArrayList<>();
+ infos.add(max);
+ infos.add(min);
+ infos.add(avg);
+ infos.add(per);
return infos;
}
-
- abstract public void onUpdateData(List data, int currentChartType);
+ private int calcPressureAverage(int sis, int dia) {
+ return (sis + (dia * 2)) / 3;
+ }
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
@@ -390,6 +383,4 @@ public void getItemOffsets(Rect outRect, View view,
}
}
}
-}
-
-
+}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/CreateChart.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/CreateChart.java
index bc4b9138..7c98c34d 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/CreateChart.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/charts/base/CreateChart.java
@@ -70,6 +70,14 @@ public CreateChart(Params params, Chart mChart) {
this.mChart = mChart;
}
+ public Params getParams() {
+ return params;
+ }
+
+ public Chart getmChart() {
+ return mChart;
+ }
+
/**
* Configure and draw chart with List.
*
@@ -169,37 +177,38 @@ public IAxisValueFormatter prepareVariablesLineData() {
final String[] quarters = new String[dataList.size()];
List measurements = (List) dataList;
+ String timestamp = null;
- for (int i = 0; i < measurements.size(); i++) {
- String date = DateUtils.formatDate(
- measurements.get(i).getTimestamp(), params.formatDate);
- entries.add(new Entry((float) i, (int) measurements.get(i).getValue()));
+ if (MeasurementType.HEART_RATE.equals(measurements.get(0).getType())) {
-// if (!measurements.get(i).getDataset().isEmpty())
-// if (measurements.get(i).getDataset().get(0).getTypeId() == MeasurementType.BLOOD_PRESSURE_DIASTOLIC)
-// entries2.add(new Entry(i, (float) measurements.get(i).getMeasurementList().get(0).getValue()));
+ for (int i = 0; i < measurements.size(); i++) {
+ timestamp = measurements.get(i).getDataset().get(0).getTimestamp();
+ String date = DateUtils.formatDate(timestamp, params.formatDate);
+ entries.add(new Entry(i, measurements.get(i).getDataset().get(0).getValue()));
+ quarters[i] = date;
+ }
+ } else if (MeasurementType.BLOOD_PRESSURE.equals(measurements.get(0).getType())) {
+
+ for (int i = 0; i < measurements.size(); i++) {
+ timestamp = measurements.get(i).getTimestamp();
+ String date = DateUtils.formatDate(timestamp, params.formatDate);
+ entries.add(new Entry(i, measurements.get(i).getSystolic()));
+ entries2.add(new Entry(i, measurements.get(i).getDiastolic()));
+ quarters[i] = date;
+ }
+ } else {
- quarters[i] = date;
+ for (int i = 0; i < measurements.size(); i++) {
+ timestamp = measurements.get(i).getTimestamp();
+ String date = DateUtils.formatDate(timestamp, params.formatDate);
+ entries.add(new Entry(i, (int) measurements.get(i).getValue()));
+ quarters[i] = date;
+ }
}
-// for (int i = 0; i < data.size(); i++) {
-//
-// String date = DateUtils.formatDate(
-// data.get(i).getRegistrationDate(),
-// params.formatDate);
-//
-// entries.add(new Entry((float) i, (int) data.get(i).getValue()));
-//
-// if (!data.get(i).getMeasurementList().isEmpty())
-// if (data.get(i).getMeasurementList().get(0).getTypeId() == MeasurementType.BLOOD_PRESSURE_DIASTOLIC)
-// entries2.add(new Entry(i, (float) data.get(i).getMeasurementList().get(0).getValue()));
-// quarters[i] = date;
-// }
-
//Format date
IAxisValueFormatter formatter = ((value, axis) -> {
if (value >= quarters.length || value < 0) return "";
return quarters[(int) value];
-
});
return formatter;
}
@@ -315,7 +324,6 @@ public void configureDesignChart() {
barChart.getAxisRight().setEnabled(false);
barChart.getAxisLeft().setEnabled(false);
barChart.setDrawValueAboveBar(false);
-
}
//LineChart
@@ -330,8 +338,8 @@ public void configureDesignChart() {
set2.setDrawCircleHole(params.drawCirclesHoleEnabled);
set2.setHighlightEnabled(params.highlightEnabled);
set2.setHighLightColor(params.colorHighLight);
- set2.setCircleColor(ContextCompat.getColor(context, R.color.colorOrange));
- set2.setCircleColorHole(ContextCompat.getColor(context, R.color.colorPrimary));
+ set2.setCircleColor(ContextCompat.getColor(params.context, R.color.colorOrange));
+ set2.setCircleColorHole(ContextCompat.getColor(params.context, R.color.colorPrimary));
set2.setValueTextColor(params.colorValuesText);
set2.setCircleRadius(params.circleValueRadius);
set2.setCircleHoleRadius(params.circleHoleValueRadius);
@@ -340,7 +348,7 @@ public void configureDesignChart() {
set2.setMode(params.typeLine);
set2.setDrawFilled(params.filledLine);
set2.setFillColor(params.lineFilledColor);
- set2.setColor(ContextCompat.getColor(context, R.color.colorOrange));
+ set2.setColor(ContextCompat.getColor(params.context, R.color.colorOrange));
}
LineChart mLineChart = (LineChart) mChart;
@@ -367,7 +375,6 @@ public void configureDesignChart() {
mLineChart.getAxisRight().setAxisMinimum(4f);
mLineChart.getAxisRight().setAxisMaximum(3f);
-
//Set Proprietes
set.setColor(params.lineColor);
set.setValueTextColor(params.colorValuesText);
@@ -394,8 +401,8 @@ public void configureDesignChart() {
leftAxis.removeAllLimitLines();
for (Limit limit : params.limits) {
LimitLine ll1 = new LimitLine(limit.getValue(), limit.getName());
- ll1.setLineWidth(1.4f);
- ll1.enableDashedLine(3f, 10f, 1f);
+ ll1.setLineWidth(1.5f);
+ ll1.enableDashedLine(15f, 5f, 0f);
ll1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_TOP);
ll1.setTextSize(10f);
ll1.setTextColor(Color.WHITE);
@@ -403,15 +410,12 @@ public void configureDesignChart() {
leftAxis.addLimitLine(ll1);
}
-
//RangeY
if (params.YMin > -1 && params.YMax > params.YMin) {
leftAxis.setAxisMinValue(params.YMin);
leftAxis.setAxisMaxValue(params.YMax);
}
}
-
-
//General
mChart.setNoDataTextColor(Color.WHITE);
mChart.setBackgroundColor(params.colorBackground);
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/settings/MainPreferenceFragment.java b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/settings/MainPreferenceFragment.java
index ac1daa3e..887c5c29 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/activity/settings/MainPreferenceFragment.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/activity/settings/MainPreferenceFragment.java
@@ -11,11 +11,13 @@
import android.widget.Toast;
import br.edu.uepb.nutes.haniot.R;
+import br.edu.uepb.nutes.haniot.activity.UserRegisterActivity;
import br.edu.uepb.nutes.haniot.activity.PilotStudyActivity;
+import br.edu.uepb.nutes.haniot.activity.account.ChangePasswordActivity;
import br.edu.uepb.nutes.haniot.activity.account.LoginActivity;
-import br.edu.uepb.nutes.haniot.activity.account.UpdateDataActivity;
-import br.edu.uepb.nutes.haniot.data.model.dao.PilotStudyDAO;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.DisposableManager;
+import br.edu.uepb.nutes.haniot.data.repository.remote.haniot.HaniotNetRepository;
import br.edu.uepb.nutes.haniot.devices.register.DeviceManagerActivity;
/**
@@ -27,6 +29,7 @@ public class MainPreferenceFragment extends PreferenceFragment {
public static final String FORM_UPDATE = "form_update";
private AppPreferencesHelper appPreferences;
+ private HaniotNetRepository haniotNetRepository;
@Override
public void onCreate(final Bundle savedInstanceState) {
@@ -35,7 +38,7 @@ public void onCreate(final Bundle savedInstanceState) {
addPreferencesFromResource(R.xml.preferences);
appPreferences = AppPreferencesHelper.getInstance(getActivity().getApplicationContext());
-
+ haniotNetRepository = HaniotNetRepository.getInstance(getActivity().getApplicationContext());
// Send feedback
Preference prefSendFeedback = findPreference(getString(R.string.key_send_bug));
prefSendFeedback.setOnPreferenceClickListener(preference -> {
@@ -70,8 +73,18 @@ public void onCreate(final Bundle savedInstanceState) {
// Your data
Preference prefYourData = findPreference(getString(R.string.key_your_data));
prefYourData.setOnPreferenceClickListener(preference -> {
- Intent intent = new Intent(getActivity(), UpdateDataActivity.class);
- intent.putExtra(FORM_UPDATE, true);
+ Intent intent = new Intent(getActivity(), UserRegisterActivity.class);
+ intent.putExtra("editUser", true);
+ intent.putExtra("action", true);
+
+ getActivity().startActivity(intent);
+ return true;
+ });
+
+ // Your password
+ Preference prefYourPassword = findPreference(getString(R.string.key_your_password));
+ prefYourPassword.setOnPreferenceClickListener(preference -> {
+ Intent intent = new Intent(getActivity(), ChangePasswordActivity.class);
getActivity().startActivity(intent);
return true;
@@ -91,9 +104,38 @@ public void onCreate(final Bundle savedInstanceState) {
return true;
});
+ // Manager Pilot Study
+ Preference prefDeleteAccount = findPreference(getString(R.string.key_delete_account));
+ prefDeleteAccount.setOnPreferenceClickListener(preference -> {
+ // Dialog - confirm delete account.
+ new AlertDialog
+ .Builder(getActivity())
+ .setMessage(R.string.confirm_delete_account)
+ .setPositiveButton(R.string.bt_ok, (dialog, which) -> {
+ // Remove user from server and redirect to login screen
+ DisposableManager.add(haniotNetRepository
+ .deleteUserById(appPreferences.getUserLogged().get_id()).subscribe(() -> {
+ if (appPreferences.removeUserLogged()) {
+ Intent intent = new Intent(getActivity(), LoginActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ getActivity().startActivity(intent);
+ getActivity().finish();
+ }
+ }, throwable -> {
+ Toast.makeText(getActivity(), R.string.error_sign_out, Toast.LENGTH_SHORT).show();
+ }));
+ }
+ )
+ .setNegativeButton(R.string.bt_cancel, null)
+ .show();
+ return true;
+ });
+
// Manager Pilot Study
Preference prefMeasurements = findPreference(getString(R.string.key_monitor_measurements));
- prefMeasurements.setOnPreferenceClickListener(preference -> {
+ prefMeasurements.setOnPreferenceClickListener(preference ->
+
+ {
Intent intent = new Intent(getActivity(), SettingsActivity.class);
intent.putExtra(SettingsActivity.SETTINGS_TYPE, SettingsActivity.SETTINGS_MEASUREMENTS);
getActivity().startActivity(intent);
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/BloodPressureAdapter.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/BloodPressureAdapter.java
index 9226ed6a..49cb535f 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/BloodPressureAdapter.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/BloodPressureAdapter.java
@@ -51,7 +51,7 @@ public void showData(RecyclerView.ViewHolder holder, int position, List extends ExpandableRecyclerViewAdapter {
+
+ public CustomExpandableRecyclerViewAdapter(List extends ExpandableGroup> groups) {
+ super(groups);
+ }
+
+ public void notifyGroupDataChanged() {
+ expandableList.expandedGroupIndexes = new boolean[getGroups().size()];
+ for (int i = 0; i < getGroups().size(); i++) {
+ expandableList.expandedGroupIndexes[i] = false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/DeviceAdapter.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/DeviceAdapter.java
index 9098cb21..191f4ab0 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/DeviceAdapter.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/DeviceAdapter.java
@@ -3,6 +3,7 @@
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
+import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@@ -67,6 +68,7 @@ public void showData(RecyclerView.ViewHolder holder, int position, List
public void onClick(View v) {
if (DeviceAdapter.super.mListener != null)
DeviceAdapter.super.mListener.onItemClick(device);
+ Log.w("AAA", "Cliquei");
}
});
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/EvaluationAdapter.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/EvaluationAdapter.java
index ee869650..f6720b1b 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/EvaluationAdapter.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/EvaluationAdapter.java
@@ -2,12 +2,13 @@
import android.app.Activity;
import android.content.Context;
+import android.text.Html;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
-import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
@@ -26,6 +27,7 @@
import br.edu.uepb.nutes.haniot.R;
import br.edu.uepb.nutes.haniot.data.model.ChronicDisease;
import br.edu.uepb.nutes.haniot.data.model.ChronicDiseaseType;
+import br.edu.uepb.nutes.haniot.data.model.FamilyCohesionRecord;
import br.edu.uepb.nutes.haniot.data.model.FeedingHabitsRecord;
import br.edu.uepb.nutes.haniot.data.model.FeendingHabitsRecordType;
import br.edu.uepb.nutes.haniot.data.model.FoodType;
@@ -34,9 +36,15 @@
import br.edu.uepb.nutes.haniot.data.model.ItemEvaluation;
import br.edu.uepb.nutes.haniot.data.model.Measurement;
import br.edu.uepb.nutes.haniot.data.model.MedicalRecord;
+import br.edu.uepb.nutes.haniot.data.model.OralHealthRecord;
import br.edu.uepb.nutes.haniot.data.model.PhysicalActivityHabit;
import br.edu.uepb.nutes.haniot.data.model.SchoolActivityFrequencyType;
import br.edu.uepb.nutes.haniot.data.model.SleepHabit;
+import br.edu.uepb.nutes.haniot.data.model.SociodemographicRecord;
+import br.edu.uepb.nutes.haniot.data.model.SociodemographicType;
+import br.edu.uepb.nutes.haniot.data.model.SportsType;
+import br.edu.uepb.nutes.haniot.data.model.ToothLesion;
+import br.edu.uepb.nutes.haniot.data.model.ToothLesionType;
import br.edu.uepb.nutes.haniot.data.model.TypeEvaluation;
import br.edu.uepb.nutes.haniot.data.model.WeeklyFoodRecord;
import br.edu.uepb.nutes.haniot.utils.DateUtils;
@@ -44,10 +52,13 @@
import butterknife.ButterKnife;
import static android.view.View.GONE;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FAMILY_COHESION;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FEEDING_HABITS;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.MEDICAL_RECORDS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.ORAL_HEALTH;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.PHYSICAL_ACTIVITY;
import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SLEEP_HABITS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SOCIODEMOGRAPHICS;
public class EvaluationAdapter extends ExpandableRecyclerViewAdapter {
@@ -142,7 +153,6 @@ public void onBindChildViewHolder(ViewHolder h, int flatPosition, ExpandableGrou
* @param ig
*/
private void resetView(ViewHolder h, ItemEvaluation ig) {
- h.checkItem.setChecked(ig.isChecked());
h.texTime.setVisibility(View.VISIBLE);
h.timeIcon.setVisibility(View.VISIBLE);
h.itemQuizView.setVisibility(GONE);
@@ -150,7 +160,6 @@ private void resetView(ViewHolder h, ItemEvaluation ig) {
h.boxMeasurement.setVisibility(View.VISIBLE);
h.textMeasurement.setVisibility(View.VISIBLE);
h.textMeasurementType.setVisibility(View.VISIBLE);
- h.checkItem.setVisibility(View.VISIBLE);
h.messageText.setVisibility(View.VISIBLE);
h.warning.setVisibility(View.INVISIBLE);
h.loading.setVisibility(View.GONE);
@@ -177,12 +186,6 @@ private void createErrorView(ViewHolder h, ItemEvaluation ig) {
h.messageText.setText(context.getResources().getString(R.string.evaluation_error_message));
h.boxOthersInfo.setVisibility(GONE);
h.boxMeasurement.setVisibility(GONE);
- h.checkItem.setVisibility(View.INVISIBLE);
-// h.mView.setOnClickListener(v -> {
-// if (mListener != null) {
-// mListener.onRefreshClick(ig.getTitle(), ig.getTypeEvaluation());
-// }
-// });
}
private void createEmptyView(ViewHolder h, ItemEvaluation ig) {
@@ -195,7 +198,6 @@ private void createEmptyView(ViewHolder h, ItemEvaluation ig) {
h.messageText.setText(context.getResources().getString(R.string.evaluation_empty_message));
h.boxOthersInfo.setVisibility(GONE);
h.boxMeasurement.setVisibility(GONE);
- h.checkItem.setVisibility(View.INVISIBLE);
}
/**
@@ -205,11 +207,10 @@ private void createEmptyView(ViewHolder h, ItemEvaluation ig) {
* @param ig
*/
private void createMeasurementView(ViewHolder h, ItemEvaluation ig) {
- h.checkItem.setChecked(ig.isChecked());
h.mView.setOnClickListener(v -> {
- ig.setChecked(!ig.isChecked());
- h.checkItem.setChecked(!h.checkItem.isChecked());
- mListener.onSelectClick(ig, ig.isChecked());
+ if (mListener != null) {
+ mListener.onAddItemClick(ig.getTitle(), ig.getTypeEvaluation());
+ }
});
h.textMeasurement.setVisibility(View.VISIBLE);
@@ -253,6 +254,7 @@ private void createMeasurementView(ViewHolder h, ItemEvaluation ig) {
.convertDateTimeUTCToLocale(min.getTimestamp(),
context.getString(R.string.date_format)));
} else {
+ Log.w("AAA", "Errorrrrr " + measurement);
h.textDate.setText(DateUtils
.convertDateTimeUTCToLocale(measurement.getTimestamp(),
context.getString(R.string.date_format)));
@@ -274,6 +276,11 @@ private void createMeasurementView(ViewHolder h, ItemEvaluation ig) {
h.messageText.setVisibility(View.GONE);
}
+ private String getString(int id) {
+ String string = context.getResources().getString(id);
+ return string;
+ }
+
/**
* View responsible for displaying questionnaire data.
*
@@ -288,18 +295,6 @@ private void createQuizView(ViewHolder h, ItemEvaluation ig, ExpandableGroup gro
h.messageText.setVisibility(View.VISIBLE);
h.boxOthersInfo.setVisibility(GONE);
h.boxMeasurement.setVisibility(GONE);
- h.checkItem.setChecked(ig.isChecked());
-
- h.mView.setOnClickListener(v -> {
- for (ItemEvaluation itemEvaluation : (List) group.getItems()) {
- itemEvaluation.setChecked(false);
- }
- notifyDataSetChanged();
-
- ig.setChecked(!ig.isChecked());
- h.checkItem.setChecked(!h.checkItem.isChecked());
- mListener.onSelectClick(ig, ig.isChecked());
- });
StringBuilder stringBuilder = new StringBuilder();
String date = "";
@@ -308,67 +303,122 @@ private void createQuizView(ViewHolder h, ItemEvaluation ig, ExpandableGroup gro
switch (ig.getTypeEvaluation()) {
case SLEEP_HABITS:
SleepHabit sleepHabit = ig.getSleepHabit();
- date = DateUtils.convertDateTimeUTCToLocale(sleepHabit.getCreatedAt(),
- context.getString(R.string.date_format));
- time = DateUtils.convertDateTimeUTCToLocale(sleepHabit.getCreatedAt(),
- context.getString(R.string.time_format_simple));
- stringBuilder.append("\nDorme às ").append(sleepHabit.getWeekDaySleep())
- .append(" horas");
- stringBuilder.append("\nAcorda às ").append(sleepHabit.getWeekDayWakeUp())
- .append(" horas");
+ stringBuilder.append("" + getString(R.string.sleep_at) + "
").append(sleepHabit.getWeekDaySleep())
+ .append(getString(R.string.hours));
+ stringBuilder.append("
" + getString(R.string.wakeup_at) + "
").append(sleepHabit.getWeekDayWakeUp())
+ .append(getString(R.string.hours));
break;
case MEDICAL_RECORDS:
MedicalRecord medicalRecord = ig.getMedicalRecord();
if (medicalRecord == null) return;
- date = DateUtils.convertDateTimeUTCToLocale(medicalRecord.getCreatedAt(),
- context.getString(R.string.date_format));
- time = DateUtils.convertDateTimeUTCToLocale(medicalRecord.getCreatedAt(),
- context.getString(R.string.time_format_simple));
if (medicalRecord.getChronicDiseases() != null) {
for (ChronicDisease chronicDisease : medicalRecord.getChronicDiseases())
stringBuilder
- .append(ChronicDiseaseType.ChronicDisease
+ .append("
" + ChronicDiseaseType.ChronicDisease
.getString_PTBR(chronicDisease.getType()))
- .append(": ")
+ .append("
")
.append(ChronicDiseaseType.DisieaseHistory
- .getStringPTBR(chronicDisease.getDiseaseHistory()))
- .append("\n");
+ .getStringPTBR(chronicDisease.getDiseaseHistory()));
}
break;
case FEEDING_HABITS:
FeedingHabitsRecord feedingHabitsRecord = ig.getFeedingHabitsRecord();
- date = DateUtils.convertDateTimeUTCToLocale(feedingHabitsRecord.getCreatedAt(),
- context.getString(R.string.date_format));
- time = DateUtils.convertDateTimeUTCToLocale(feedingHabitsRecord.getCreatedAt(),
- context.getString(R.string.time_format_simple));
- stringBuilder.append("\nCopos de água por dia: ").append(FrequencyAnswersType.Frequency
+ stringBuilder.append("
" + getString(R.string.water_cup) + "
").append(FeendingHabitsRecordType.OneDayFeedingAmount
.getStringPTBR(feedingHabitsRecord.getDailyWaterGlasses()));
- stringBuilder.append("\nCafé da manhã: ").append(FrequencyAnswersType.Frequency
+ stringBuilder.append("" + getString(R.string.breakfast) + "
").append(FeendingHabitsRecordType.OneDayFeedingAmount
.getStringPTBR(feedingHabitsRecord.getBreakfastDailyFrequency()));
for (WeeklyFoodRecord weeklyFoodRecord : feedingHabitsRecord.getWeeklyFeedingHabits())
stringBuilder
- .append("\n")
- .append(FoodType.getStringPTBR(weeklyFoodRecord.getFood()))
- .append(": ")
+ .append("" + FoodType.getStringPTBR(weeklyFoodRecord.getFood()))
+ .append("
")
.append(FeendingHabitsRecordType.SevenDaysFeedingFrequency
.getStringPTBR(weeklyFoodRecord.getSevenDaysFreq()));
break;
case PHYSICAL_ACTIVITY:
PhysicalActivityHabit physicalActivityHabit = ig.getPhysicalActivityHabit();
- date = DateUtils.convertDateTimeUTCToLocale(physicalActivityHabit.getCreatedAt(),
- context.getString(R.string.date_format));
- time = DateUtils.convertDateTimeUTCToLocale(physicalActivityHabit.getCreatedAt(),
- context.getString(R.string.time_format_simple));
- stringBuilder.append("\nEsportes praticados durante a semana: \n");
+ stringBuilder.append("
" + getString(R.string.sports_in_week) + "
");
for (String sport : physicalActivityHabit.getWeeklyActivities()) {
- stringBuilder.append(sport).append("\n");
+ stringBuilder.append("" + SportsType.getStringPtBr(context, sport) + "
");
}
- stringBuilder.append("\nFrequência de atividades físicas na escola: \n")
+ stringBuilder.append("" + getString(R.string.physical_school) + "
")
.append(SchoolActivityFrequencyType
.getStringPTBR(physicalActivityHabit.getSchoolActivityFreq()));
break;
+ case FAMILY_COHESION:
+ FamilyCohesionRecord familyCohesionRecord = ig.getFamilyCohesionRecord();
+ stringBuilder.append("" + getString(R.string.help_family) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFamilyDecisionSupportFreq()))
+ .append("
" + getString(R.string.approval_friends) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFriendshipApprovalFreq()))
+ .append("
" + getString(R.string.only_family) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFamilyOnlyPreferenceFreq()))
+ .append("
" + getString(R.string.not_strangers) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFamilyMutualAidFreq()))
+ .append("
" + getString(R.string.family_freetime) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFreeTimeTogetherFreq()))
+ .append("
" + getString(R.string.family_union) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFamilyProximityPerceptionFreq()))
+ .append("
" + getString(R.string.family_share) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getAllFamilyTasksFreq()))
+ .append("
" + getString(R.string.easy_family) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFamilyTasksOpportunityFreq()))
+ .append("
" + getString(R.string.family_decision) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFamilyDecisionSupportFreq()))
+ .append("
" + getString(R.string.familiy_union_important) + "
")
+ .append(FrequencyAnswersType.Frequency.getStringPTBR(familyCohesionRecord.getFamilyUnionRelevanceFreq()));
+ break;
+ case ORAL_HEALTH:
+ OralHealthRecord oralHealthRecord = ig.getOralHealthRecord();
+ stringBuilder.append("
" + getString(R.string.tooth_higien) + "
")
+ .append(ToothLesionType.TeethBrushingFreq.getStringPtBr(oralHealthRecord.getTeethBrushingFreq()));
+ if (ig.getOralHealthRecord() == null) break;
+
+ List toothLesions = oralHealthRecord.getToothLesions();
+ ToothLesion whiteSpotLesionDeciduousTooth = new ToothLesion("deciduous_tooth", "white_spot_lesion");
+ ToothLesion whiteSpotLesionPermanentTooth = new ToothLesion("permanent_tooth", "white_spot_lesion");
+ ToothLesion cavitatedLesionDeciduousTooth = new ToothLesion("deciduous_tooth", "cavitated_lesion");
+ ToothLesion cavitatedLesionPermanentTooth = new ToothLesion("permanent_tooth", "cavitated_lesion");
+
+ stringBuilder.append("
" + getString(R.string.white_spot_lesion_deciduous_tooth) + "
");
+ if (toothLesions.contains(whiteSpotLesionDeciduousTooth))
+ stringBuilder.append(getString(R.string.yes_text) + "
");
+ else stringBuilder.append(getString(R.string.no_text) + "
");
+
+ stringBuilder.append("" + getString(R.string.white_spot_lesion_permanent_tooth) + "
");
+ if (toothLesions.contains(whiteSpotLesionPermanentTooth))
+ stringBuilder.append(getString(R.string.yes_text) + "
");
+ else stringBuilder.append(getString(R.string.no_text) + "");
+
+ stringBuilder.append("" + getString(R.string.cavitated_lesion_deciduous_tooth) + "
");
+ if (toothLesions.contains(cavitatedLesionDeciduousTooth))
+ stringBuilder.append(getString(R.string.yes_text) + "
");
+ else stringBuilder.append(getString(R.string.no_text) + "");
+
+ stringBuilder.append("" + getString(R.string.cavitated_lesion_permanent_tooth) + "
");
+ if (toothLesions.contains(cavitatedLesionPermanentTooth))
+ stringBuilder.append(getString(R.string.yes_text) + "
");
+ else stringBuilder.append(getString(R.string.no_text) + "");
+//
+// if (oralHealthRecord.getToothLesions().isEmpty()) {
+// stringBuilder.append("" + "Não possui algum tipo de cárie dentária" + "
");
+// } else
+// for (ToothLesion toothLesion : oralHealthRecord.getToothLesions()) {
+// stringBuilder.append("" + ToothLesionType.LesionType.getStringPtBr(toothLesion.getLesionType()))
+// .append(" em ")
+// .append(ToothLesionType.ToothType.getStringPtbr(toothLesion.getToothType()) + "
");
+// }
+ break;
+ case SOCIODEMOGRAPHICS:
+ SociodemographicRecord sociodemographicRecord = ig.getSociodemographicRecord();
+ stringBuilder.append("" + getString(R.string.color_race) + "
")
+ .append(SociodemographicType.ColorRace.getStringPtBr(sociodemographicRecord.getColorRace()))
+ .append("
" + getString(R.string.schoolarity_mother) + "
")
+ .append(SociodemographicType.MotherScholarity.getStringPtBr(sociodemographicRecord.getMotherScholarity()))
+ .append("
" + getString(R.string.people_in_home) + "
")
+ .append(sociodemographicRecord.getPeopleInHome());
+ break;
}
- h.messageText.setText(stringBuilder.append(String.format("\n\nRespondido em %s às %s", date, time)));
+ h.messageText.setText(Html.fromHtml(stringBuilder.toString()));
}
/**
@@ -382,7 +432,6 @@ private void createLoadingView(ViewHolder h, ItemEvaluation ig) {
h.boxOthersInfo.setVisibility(GONE);
h.boxMeasurement.setVisibility(GONE);
h.messageText.setVisibility(GONE);
- h.checkItem.setVisibility(GONE);
}
@Override
@@ -416,8 +465,6 @@ public class ViewHolder extends ChildViewHolder {
TextView messageText;
@BindView(R.id.text_date_measurement)
TextView textDate;
- @BindView(R.id.check_item)
- CheckBox checkItem;
@BindView(R.id.box_other_info)
LinearLayout boxOthersInfo;
@BindView(R.id.box_measurement)
@@ -479,10 +526,6 @@ public void clearAnimation() {
}
public interface OnClick {
-
void onAddItemClick(String name, int type);
-
- void onSelectClick(ItemEvaluation itemEvaluation, boolean selected);
-
}
}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/HistoricQuizAdapter.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/HistoricQuizAdapter.java
new file mode 100644
index 00000000..5f02af44
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/HistoricQuizAdapter.java
@@ -0,0 +1,416 @@
+package br.edu.uepb.nutes.haniot.adapter;
+
+import android.app.Activity;
+import android.content.Context;
+import android.text.Html;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.ScaleAnimation;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
+import com.thoughtbot.expandablerecyclerview.viewholders.ChildViewHolder;
+import com.thoughtbot.expandablerecyclerview.viewholders.GroupViewHolder;
+
+import java.util.Collection;
+import java.util.List;
+
+import br.edu.uepb.nutes.haniot.R;
+import br.edu.uepb.nutes.haniot.data.model.ChronicDisease;
+import br.edu.uepb.nutes.haniot.data.model.ChronicDiseaseType;
+import br.edu.uepb.nutes.haniot.data.model.FamilyCohesionRecord;
+import br.edu.uepb.nutes.haniot.data.model.FeedingHabitsRecord;
+import br.edu.uepb.nutes.haniot.data.model.FeendingHabitsRecordType;
+import br.edu.uepb.nutes.haniot.data.model.FoodType;
+import br.edu.uepb.nutes.haniot.data.model.FrequencyAnswersType;
+import br.edu.uepb.nutes.haniot.data.model.GroupItemEvaluation;
+import br.edu.uepb.nutes.haniot.data.model.ItemEvaluation;
+import br.edu.uepb.nutes.haniot.data.model.MedicalRecord;
+import br.edu.uepb.nutes.haniot.data.model.OralHealthRecord;
+import br.edu.uepb.nutes.haniot.data.model.PhysicalActivityHabit;
+import br.edu.uepb.nutes.haniot.data.model.SchoolActivityFrequencyType;
+import br.edu.uepb.nutes.haniot.data.model.SleepHabit;
+import br.edu.uepb.nutes.haniot.data.model.SociodemographicRecord;
+import br.edu.uepb.nutes.haniot.data.model.SociodemographicType;
+import br.edu.uepb.nutes.haniot.data.model.SportsType;
+import br.edu.uepb.nutes.haniot.data.model.ToothLesion;
+import br.edu.uepb.nutes.haniot.data.model.ToothLesionType;
+import br.edu.uepb.nutes.haniot.data.model.WeeklyFoodRecord;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+import static android.view.View.GONE;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FAMILY_COHESION;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.FEEDING_HABITS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.MEDICAL_RECORDS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.ORAL_HEALTH;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.PHYSICAL_ACTIVITY;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SLEEP_HABITS;
+import static br.edu.uepb.nutes.haniot.data.model.TypeEvaluation.SOCIODEMOGRAPHICS;
+
+public class HistoricQuizAdapter extends CustomExpandableRecyclerViewAdapter {
+ private Context context;
+ private int lastPosition = -1;
+ public OnClick mListener;
+
+ public HistoricQuizAdapter(List extends ExpandableGroup> groups, Context context) {
+ super(groups);
+ this.context = context;
+ }
+
+ public void addAll(List extends ExpandableGroup> groups) {
+ getGroups().addAll((Collection) groups);
+ notifyGroupDataChanged();
+ notifyDataSetChanged();
+ }
+
+ public void setListener(OnClick mListener) {
+ this.mListener = mListener;
+ }
+
+ /**
+ * Expand all groups.
+ */
+ public void expandAll() {
+ for (int i = 0; i < getItemCount(); i++) {
+ if (!isGroupExpanded(i)) {
+ toggleGroup(i);
+ }
+ }
+ }
+
+ /**
+ * Apply animation to list itemsList.
+ *
+ * @param view {@link View}
+ * @param position int
+ */
+ public void setAnimation(View view, int position) {
+ // If the bound view wasn't previously displayed on screen, it's animated
+ if (position > lastPosition) {
+ ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
+ Animation.RELATIVE_TO_SELF, 0.5f,
+ Animation.RELATIVE_TO_SELF, 0.5f);
+
+ anim.setDuration(400);
+ view.startAnimation(anim);
+ lastPosition = position;
+ }
+ }
+
+ @Override
+ public HeaderViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) {
+ LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
+ View itemView = mInflater.inflate(R.layout.item_evaluation_section, parent, false);
+
+ return new HeaderViewHolder(itemView);
+ }
+
+ @Override
+ public ViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) {
+ LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
+ View itemView = mInflater.inflate(R.layout.item_quiz, parent, false);
+ return new ViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindChildViewHolder(ViewHolder h, int flatPosition, ExpandableGroup group, int childIndex) {
+ ItemEvaluation ig = (ItemEvaluation) group.getItems().get(childIndex);
+ resetView(h, ig);
+
+ if (ig.getTypeHeader() == ItemEvaluation.TYPE_LOADING) {
+ createLoadingView(h, ig);
+ } else if (ig.getTypeHeader() == ItemEvaluation.TYPE_QUIZ) {
+ createQuizView(h, ig, group);
+ } else if (ig.getTypeHeader() == ItemEvaluation.TYPE_EMPTY) {
+ createEmptyView(h, ig);
+ } else if (ig.getTypeHeader() == ItemEvaluation.TYPE_ERROR) {
+ createErrorView(h, ig);
+ }
+
+ setAnimation(h.mView, childIndex);
+ }
+
+ /**
+ * Restore view to default.
+ *
+ * @param h {@link ViewHolder}
+ * @param ig {@link ItemEvaluation}
+ */
+ private void resetView(ViewHolder h, ItemEvaluation ig) {
+ h.checkItem.setVisibility(View.VISIBLE);
+ h.messageText.setVisibility(View.VISIBLE);
+ h.loading.setVisibility(View.GONE);
+ h.imageItem.setImageResource(ig.getIcon());
+ h.textDescription.setText(ig.getTitle());
+ }
+
+ /**
+ * View displayed when there is no data.
+ *
+ * @param h {@link ViewHolder}
+ * @param ig {@link ItemEvaluation}
+ */
+ private void createErrorView(ViewHolder h, ItemEvaluation ig) {
+ h.messageText.setVisibility(View.VISIBLE);
+ h.messageText.setText(context.getResources().getString(R.string.evaluation_error_message));
+ h.checkItem.setVisibility(View.INVISIBLE);
+ }
+
+ private void createEmptyView(ViewHolder h, ItemEvaluation ig) {
+ h.messageText.setVisibility(View.VISIBLE);
+ h.messageText.setText(context.getResources().getString(R.string.evaluation_empty_message));
+ h.checkItem.setVisibility(View.INVISIBLE);
+ }
+
+ private String getString(int id) {
+ String string = context.getResources().getString(id);
+ return string;
+ }
+
+ /**
+ * View responsible for displaying questionnaire data.
+ *
+ * @param h {@link ViewHolder}
+ * @param ig {@link ItemEvaluation}
+ * @param group {@link ExpandableGroup}
+ */
+ private void createQuizView(ViewHolder h, ItemEvaluation ig, ExpandableGroup group) {
+ h.messageText.setVisibility(View.VISIBLE);
+
+ h.checkItem.setOnClickListener(v -> {
+ mListener.onAddItemClick(ig.getTitle(), ig.getTypeEvaluation(), ((GroupItemEvaluation) group).getIdGroup());
+ });
+ StringBuilder stringBuilder = new StringBuilder();
+
+ switch (ig.getTypeEvaluation()) {
+ case SLEEP_HABITS: {
+ SleepHabit sleepHabit = ig.getSleepHabit();
+ stringBuilder.append("")
+ .append(getString(R.string.sleep_at)).append("
")
+ .append(sleepHabit.getWeekDaySleep())
+ .append(getString(R.string.hours));
+ stringBuilder.append("
")
+ .append(getString(R.string.wakeup_at))
+ .append("
")
+ .append(sleepHabit.getWeekDayWakeUp())
+ .append(getString(R.string.hours));
+ break;
+ }
+ case MEDICAL_RECORDS: {
+ MedicalRecord medicalRecord = ig.getMedicalRecord();
+ if (medicalRecord == null) return;
+ if (medicalRecord.getChronicDiseases() != null) {
+ for (ChronicDisease chronicDisease : medicalRecord.getChronicDiseases())
+ stringBuilder.append("
").append(ChronicDiseaseType.ChronicDisease
+ .getString_PTBR(chronicDisease.getType()))
+ .append("
")
+ .append(ChronicDiseaseType.DisieaseHistory
+ .getStringPTBR(chronicDisease.getDiseaseHistory()));
+ }
+ break;
+ }
+ case FEEDING_HABITS: {
+ FeedingHabitsRecord feedingHabitsRecord = ig.getFeedingHabitsRecord();
+ stringBuilder.append("
").append(getString(R.string.water_cup)).append("
")
+ .append(FeendingHabitsRecordType.OneDayFeedingAmount
+ .getStringPTBR(feedingHabitsRecord.getDailyWaterGlasses()));
+ stringBuilder.append("").append(getString(R.string.breakfast)).append("
")
+ .append(FeendingHabitsRecordType.OneDayFeedingAmount
+ .getStringPTBR(feedingHabitsRecord.getBreakfastDailyFrequency()));
+ for (WeeklyFoodRecord weeklyFoodRecord : feedingHabitsRecord.getWeeklyFeedingHabits())
+ stringBuilder.append("").append(FoodType.getStringPTBR(weeklyFoodRecord.getFood()))
+ .append("
")
+ .append(FeendingHabitsRecordType.SevenDaysFeedingFrequency
+ .getStringPTBR(weeklyFoodRecord.getSevenDaysFreq()));
+ break;
+ }
+ case PHYSICAL_ACTIVITY: {
+ PhysicalActivityHabit physicalActivityHabit = ig.getPhysicalActivityHabit();
+ stringBuilder.append("
").append(getString(R.string.sports_in_week)).append("
");
+ for (String sport : physicalActivityHabit.getWeeklyActivities()) {
+ stringBuilder.append("").append(SportsType.getStringPtBr(context, sport)).append("
");
+ }
+ stringBuilder.append("").append(getString(R.string.physical_school)).append("
")
+ .append(SchoolActivityFrequencyType
+ .getStringPTBR(physicalActivityHabit.getSchoolActivityFreq()));
+ break;
+ }
+ case FAMILY_COHESION: {
+ FamilyCohesionRecord familyCohesionRecord = ig.getFamilyCohesionRecord();
+ stringBuilder.append("").append(getString(R.string.help_family)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFamilyDecisionSupportFreq()))
+ .append("
").append(getString(R.string.approval_friends)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFriendshipApprovalFreq()))
+ .append("
").append(getString(R.string.only_family)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFamilyOnlyPreferenceFreq()))
+ .append("
").append(getString(R.string.not_strangers)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFamilyMutualAidFreq()))
+ .append("
").append(getString(R.string.family_freetime)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFreeTimeTogetherFreq()))
+ .append("
").append(getString(R.string.family_union)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFamilyProximityPerceptionFreq()))
+ .append("
").append(getString(R.string.family_share)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getAllFamilyTasksFreq()))
+ .append("
").append(getString(R.string.easy_family)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFamilyTasksOpportunityFreq()))
+ .append("
").append(getString(R.string.family_decision)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFamilyDecisionSupportFreq())).append("
")
+ .append(getString(R.string.familiy_union_important)).append("
")
+ .append(FrequencyAnswersType.Frequency
+ .getStringPTBR(familyCohesionRecord.getFamilyUnionRelevanceFreq()));
+ break;
+ }
+ case ORAL_HEALTH: {
+ OralHealthRecord oralHealthRecord = ig.getOralHealthRecord();
+ if (ig.getOralHealthRecord() == null) break;
+ stringBuilder.append("
").append(getString(R.string.tooth_higien)).append("
")
+ .append(ToothLesionType.TeethBrushingFreq
+ .getStringPtBr(oralHealthRecord.getTeethBrushingFreq()));
+
+ List toothLesions = oralHealthRecord.getToothLesions();
+ ToothLesion whiteSpotLesionDeciduousTooth = new ToothLesion("deciduous_tooth", "white_spot_lesion");
+ ToothLesion whiteSpotLesionPermanentTooth = new ToothLesion("permanent_tooth", "white_spot_lesion");
+ ToothLesion cavitatedLesionDeciduousTooth = new ToothLesion("deciduous_tooth", "cavitated_lesion");
+ ToothLesion cavitatedLesionPermanentTooth = new ToothLesion("permanent_tooth", "cavitated_lesion");
+
+ stringBuilder.append("
").append(getString(R.string.white_spot_lesion_deciduous_tooth)).append("
");
+ if (toothLesions != null && toothLesions.contains(whiteSpotLesionDeciduousTooth))
+ stringBuilder.append(getString(R.string.yes_text)).append("
");
+ else stringBuilder.append(getString(R.string.no_text)).append("
");
+
+ stringBuilder.append("").append(getString(R.string.white_spot_lesion_permanent_tooth)).append("
");
+ if (toothLesions != null && toothLesions.contains(whiteSpotLesionPermanentTooth))
+ stringBuilder.append(getString(R.string.yes_text)).append("
");
+ else stringBuilder.append(getString(R.string.no_text)).append("");
+
+ stringBuilder.append("").append(getString(R.string.cavitated_lesion_deciduous_tooth)).append("
");
+ if (toothLesions != null && toothLesions.contains(cavitatedLesionDeciduousTooth))
+ stringBuilder.append(getString(R.string.yes_text)).append("
");
+ else stringBuilder.append(getString(R.string.no_text)).append("");
+
+ stringBuilder.append("").append(getString(R.string.cavitated_lesion_permanent_tooth)).append("
");
+ if (toothLesions != null && toothLesions.contains(cavitatedLesionPermanentTooth))
+ stringBuilder.append(getString(R.string.yes_text)).append("
");
+ else stringBuilder.append(getString(R.string.no_text)).append("");
+ break;
+ }
+ case SOCIODEMOGRAPHICS: {
+ SociodemographicRecord sociodemographicRecord = ig.getSociodemographicRecord();
+ stringBuilder.append("").append(getString(R.string.color_race)).append("
")
+ .append(SociodemographicType.ColorRace
+ .getStringPtBr(sociodemographicRecord.getColorRace()))
+ .append("
").append(getString(R.string.schoolarity_mother)).append("
")
+ .append(SociodemographicType.MotherScholarity
+ .getStringPtBr(sociodemographicRecord.getMotherScholarity()))
+ .append("
").append(getString(R.string.people_in_home)).append("
")
+ .append(sociodemographicRecord.getPeopleInHome());
+ break;
+ }
+ default:
+ break;
+ }
+ h.messageText.setText(Html.fromHtml(stringBuilder.toString()));
+ }
+
+ /**
+ * View displayed while downloading the data.
+ *
+ * @param h {@link ViewHolder}
+ * @param ig {@link ItemEvaluation}
+ */
+ private void createLoadingView(ViewHolder h, ItemEvaluation ig) {
+ h.loading.setVisibility(View.VISIBLE);
+ h.messageText.setVisibility(GONE);
+ h.checkItem.setVisibility(GONE);
+ }
+
+ @Override
+ public void onBindGroupViewHolder(HeaderViewHolder holder, int flatPosition, ExpandableGroup
+ group) {
+ holder.categoryTitle.setText(group.getTitle());
+ }
+
+ public class ViewHolder extends ChildViewHolder {
+ final View mView;
+
+ @BindView(R.id.imageItem)
+ ImageView imageItem;
+ @BindView(R.id.textDescription)
+ TextView textDescription;
+ @BindView(R.id.quiz_text)
+ TextView messageText;
+ @BindView(R.id.check_item)
+ ImageView checkItem;
+ @BindView(R.id.loading)
+ ProgressBar loading;
+ @BindView(R.id.box_quiz)
+ LinearLayout boxQuiz;
+
+ public ViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+
+ this.mView = itemView.getRootView();
+ }
+
+ public void clearAnimation() {
+ mView.clearAnimation();
+ }
+ }
+
+ public class HeaderViewHolder extends GroupViewHolder {
+ final View mView;
+
+ @BindView(R.id.category_title)
+ TextView categoryTitle;
+
+ @BindView(R.id.expand)
+ ImageView expand;
+
+ HeaderViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+
+ this.mView = itemView.getRootView();
+ }
+
+ @Override
+ public void expand() {
+ super.expand();
+ expand.setRotation(180);
+ }
+
+ @Override
+ public void collapse() {
+ expand.setRotation(0);
+ }
+
+ public void clearAnimation() {
+ mView.clearAnimation();
+ }
+ }
+
+ public interface OnClick {
+ void onAddItemClick(String name, int type);
+
+ void onAddItemClick(String name, int type, String idQuiz);
+
+ void onSelectClick(ItemEvaluation itemEvaluation, String idQuiz);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/ManagerPatientAdapter.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/ManagerPatientAdapter.java
index 5be2f3f6..8c242195 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/ManagerPatientAdapter.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/ManagerPatientAdapter.java
@@ -4,6 +4,7 @@
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@@ -20,12 +21,19 @@
import br.edu.uepb.nutes.haniot.activity.QuizOdontologyActivity;
import br.edu.uepb.nutes.haniot.adapter.base.BaseAdapter;
import br.edu.uepb.nutes.haniot.adapter.base.OnRecyclerViewListener;
+import br.edu.uepb.nutes.haniot.data.model.HealthProfessional;
import br.edu.uepb.nutes.haniot.data.model.Patient;
import br.edu.uepb.nutes.haniot.data.model.PatientsType;
import br.edu.uepb.nutes.haniot.data.repository.local.pref.AppPreferencesHelper;
import butterknife.BindView;
import butterknife.ButterKnife;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.ADMIN;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.DENTISTRY;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.HEALTH_PROFESSIONAL;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.NUTRITION;
+import static br.edu.uepb.nutes.haniot.data.model.UserType.PATIENT;
+
public class ManagerPatientAdapter extends BaseAdapter {
private final String LOG = "ManagerPatientAdapter";
@@ -91,23 +99,28 @@ public void showData(RecyclerView.ViewHolder holder, int position, List
ManagerPatientViewHolder h = (ManagerPatientViewHolder) holder;
h.textName.setText(patient.getName());
+ h.textName.setEllipsize(TextUtils.TruncateAt.END);
h.textAge.setText(calculateAge(patient.getBirthDate()));
if (patient.getGender().equals(PatientsType.GenderType.FEMALE))
h.profile.setImageResource(R.drawable.x_girl);
else h.profile.setImageResource(R.drawable.x_boy);
- h.mView.setOnClickListener(v -> {
- actionsPatientListener.onItemClick(patient);
- });
+ h.mView.setOnClickListener(v -> actionsPatientListener.onItemClick(patient));
h.btnMore.setOnClickListener(v -> {
PopupMenu popup = new PopupMenu(context, ((ManagerPatientViewHolder) holder).btnMore);
popup.inflate(R.menu.menu_patient_actions);
- if (appPreferencesHelper.getUserLogged().getHealthArea().equals("nutrition"))
- popup.getMenu().getItem(2).setVisible(false);
- else if (appPreferencesHelper.getUserLogged().getHealthArea().equals("dentistry")) {
- popup.getMenu().getItem(1).setVisible(false);
- popup.getMenu().getItem(3).setVisible(false);
+
+ if (appPreferencesHelper.getUserLogged().getUserType().equals(HEALTH_PROFESSIONAL)) {
+ String userType = (appPreferencesHelper.getUserLogged()).getHealthArea();
+ if (!userType.equals(ADMIN)) {
+ if (userType.equals(NUTRITION)) {
+ popup.getMenu().getItem(2).setVisible(false);
+ } else if (userType.equals(DENTISTRY)) {
+ popup.getMenu().getItem(1).setVisible(false);
+ popup.getMenu().getItem(3).setVisible(false);
+ }
+ }
}
popup.setOnMenuItemClickListener(item -> {
switch (item.getItemId()) {
@@ -123,6 +136,9 @@ else if (appPreferencesHelper.getUserLogged().getHealthArea().equals("dentistry"
case R.id.nutrition_evaluation:
actionsPatientListener.onMenuClick("nutrition_evaluation", patient);
break;
+ case R.id.historic_quiz:
+ actionsPatientListener.onMenuClick("historic_quiz", patient);
+ break;
default:
break;
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/BaseAdapter.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/BaseAdapter.java
index f9e39eb2..54d9a419 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/BaseAdapter.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/BaseAdapter.java
@@ -1,8 +1,11 @@
package br.edu.uepb.nutes.haniot.adapter.base;
+import android.content.Context;
import android.os.Handler;
import android.os.Looper;
+import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
@@ -24,11 +27,31 @@ public abstract class BaseAdapter extends RecyclerView.Adapter itemsList;
protected int lastPosition = -1;
public OnRecyclerViewListener mListener;
+ public SwipeItemRecyclerViewCallback swipeItemRecyclerViewCallback;
+ public ItemTouchHelper itemTouchhelper;
+ public RecyclerView recyclerView;
protected BaseAdapter() {
this.itemsList = new ArrayList<>();
}
+ /**
+ * Enable swipe item recyclerview.
+ * @param context
+ */
+ public void enableSwipe(Context context) {
+ swipeItemRecyclerViewCallback = new SwipeItemRecyclerViewCallback(context, this) {
+ @Override
+ public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
+ int position = viewHolder.getAdapterPosition();
+ mListener.onItemSwiped(itemsList.get(position), position);
+ }
+ };
+ itemTouchhelper = new ItemTouchHelper(swipeItemRecyclerViewCallback);
+ if (recyclerView != null)
+ itemTouchhelper.attachToRecyclerView(recyclerView);
+ }
+
/**
* Get list items.
*
@@ -66,12 +89,7 @@ public void addItem(T item) {
if (item != null) {
itemsList.add(item);
- new Handler(Looper.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- notifyItemInserted(itemsList.size() - 1);
- }
- });
+ new Handler(Looper.getMainLooper()).post(() -> notifyItemInserted(itemsList.size() - 1));
}
}
@@ -84,12 +102,7 @@ public void addItems(List items) {
if (items != null) {
this.itemsList.addAll(items);
- new Handler(Looper.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- notifyDataSetChanged();
- }
- });
+ new Handler(Looper.getMainLooper()).post(this::notifyDataSetChanged);
}
}
@@ -102,27 +115,22 @@ public void removeItem(T item) {
if (item != null) {
itemsList.remove(item);
- new Handler(Looper.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- notifyDataSetChanged();
- }
- });
+ new Handler(Looper.getMainLooper()).post(this::notifyDataSetChanged);
}
}
+ public void restoreItem(T item, int position) {
+ itemsList.add(position, item);
+ notifyItemInserted(position);
+ }
+
/**
* Clear the list of itemsList and notifies you that the data set has changed.
*/
public void clearItems() {
itemsList.clear();
- new Handler(Looper.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- notifyDataSetChanged();
- }
- });
+ new Handler(Looper.getMainLooper()).post(this::notifyDataSetChanged);
}
/**
@@ -178,6 +186,12 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
showData(holder, position, itemsList);
}
+ @Override
+ public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
+ super.onAttachedToRecyclerView(recyclerView);
+ this.recyclerView = recyclerView;
+ }
+
@Override
public int getItemCount() {
return itemsList != null ? itemsList.size() : 0;
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/OnRecyclerViewListener.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/OnRecyclerViewListener.java
index 2aa1977f..6cb9084e 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/OnRecyclerViewListener.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/OnRecyclerViewListener.java
@@ -16,4 +16,6 @@ public interface OnRecyclerViewListener {
void onLongItemClick(View v, T item);
void onMenuContextClick(View v, T item);
+
+ void onItemSwiped(T item, int position);
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/SwipeItemRecyclerViewCallback.java b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/SwipeItemRecyclerViewCallback.java
new file mode 100644
index 00000000..870fd600
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/adapter/base/SwipeItemRecyclerViewCallback.java
@@ -0,0 +1,73 @@
+package br.edu.uepb.nutes.haniot.adapter.base;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.NonNull;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.helper.ItemTouchHelper;
+import android.view.View;
+
+import br.edu.uepb.nutes.haniot.R;
+
+abstract public class SwipeItemRecyclerViewCallback extends ItemTouchHelper.SimpleCallback {
+
+ Context mContext;
+ RecyclerView.Adapter mAdapter;
+ private Drawable icon;
+ private final ColorDrawable background;
+
+ public SwipeItemRecyclerViewCallback(Context context, RecyclerView.Adapter adapter) {
+ super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
+ mContext = context;
+ mAdapter = adapter;
+ icon = ContextCompat.getDrawable(mContext, R.drawable.ic_delete);
+ background = new ColorDrawable(mContext.getResources().getColor(R.color.colorButtonDanger));
+ }
+
+ @Override
+ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
+ // used for up and down movements
+ return false;
+ }
+
+ @Override
+ public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
+ super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
+
+ View itemView = viewHolder.itemView;
+ int backgroundCornerOffset = 20; //so background is behind the rounded corners of itemView
+
+ int iconMargin = (itemView.getHeight() - icon.getIntrinsicHeight()) / 2;
+ int iconTop = itemView.getTop() + (itemView.getHeight() - icon.getIntrinsicHeight()) / 2;
+ int iconBottom = iconTop + icon.getIntrinsicHeight();
+
+ if (dX > 0) { // Swiping to the right
+ int iconLeft = itemView.getLeft() + iconMargin;
+ int iconRight = iconLeft + icon.getIntrinsicWidth();
+ icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);
+
+ background.setBounds(itemView.getLeft(), itemView.getTop(),
+ itemView.getLeft() + ((int) dX) + backgroundCornerOffset,
+ itemView.getBottom());
+ } else if (dX < 0) { // Swiping to the left
+ int iconLeft = itemView.getRight() - iconMargin - icon.getIntrinsicWidth();
+ int iconRight = itemView.getRight() - iconMargin;
+ icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);
+
+ background.setBounds(itemView.getRight() + ((int) dX) - backgroundCornerOffset,
+ itemView.getTop(), itemView.getRight(), itemView.getBottom());
+ } else { // view is unSwiped
+ background.setBounds(0, 0, 0, 0);
+ }
+
+ background.draw(c);
+ icon.draw(c);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Admin.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Admin.java
new file mode 100644
index 00000000..6808efd3
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Admin.java
@@ -0,0 +1,107 @@
+package br.edu.uepb.nutes.haniot.data.model;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+
+import io.objectbox.annotation.Entity;
+import io.objectbox.annotation.Id;
+import io.objectbox.annotation.Index;
+
+/**
+ * Represents User object.
+ *
+ * @author Copyright (c) 2019, NUTES/UEPB
+ */
+@Entity
+public class Admin extends User {
+
+ @SerializedName("total_pilot_studies")
+ @Expose()
+ private String totalPilotStudies;
+
+ @SerializedName("total_patients")
+ @Expose()
+ private String totalPatients;
+
+ @SerializedName("total_health_professionals")
+ @Expose()
+ private String totalHealthProfessionals;
+
+ @SerializedName("total_admins")
+ @Expose()
+ private String totalAdmins;
+
+ public Admin() {
+ }
+
+ public Admin(String totalPilotStudies, String totalPatients, String totalHealthProfessionals, String totalAdmins) {
+ this.totalPilotStudies = totalPilotStudies;
+ this.totalPatients = totalPatients;
+ this.totalHealthProfessionals = totalHealthProfessionals;
+ this.totalAdmins = totalAdmins;
+ }
+
+ public Admin(String email, String password, String totalPilotStudies, String totalPatients, String totalHealthProfessionals, String totalAdmins) {
+ super(email, password);
+ this.totalPilotStudies = totalPilotStudies;
+ this.totalPatients = totalPatients;
+ this.totalHealthProfessionals = totalHealthProfessionals;
+ this.totalAdmins = totalAdmins;
+ }
+
+ public Admin(String _id, String oldPassword, String newPassword, String totalPilotStudies, String totalPatients, String totalHealthProfessionals, String totalAdmins) {
+ super(_id, oldPassword, newPassword);
+ this.totalPilotStudies = totalPilotStudies;
+ this.totalPatients = totalPatients;
+ this.totalHealthProfessionals = totalHealthProfessionals;
+ this.totalAdmins = totalAdmins;
+ }
+
+ public String getTotalPilotStudies() {
+ return totalPilotStudies;
+ }
+
+ public void setTotalPilotStudies(String totalPilotStudies) {
+ this.totalPilotStudies = totalPilotStudies;
+ }
+
+ public String getTotalPatients() {
+ return totalPatients;
+ }
+
+ public void setTotalPatients(String totalPatients) {
+ this.totalPatients = totalPatients;
+ }
+
+ public String getTotalHealthProfessionals() {
+ return totalHealthProfessionals;
+ }
+
+ public void setTotalHealthProfessionals(String totalHealthProfessionals) {
+ this.totalHealthProfessionals = totalHealthProfessionals;
+ }
+
+ public String getTotalAdmins() {
+ return totalAdmins;
+ }
+
+ public void setTotalAdmins(String totalAdmins) {
+ this.totalAdmins = totalAdmins;
+ }
+
+ @Override
+ public String toString() {
+ return "Admin{" +
+ "totalPilotStudies='" + totalPilotStudies + '\'' +
+ ", totalPatients='" + totalPatients + '\'' +
+ ", totalHealthProfessionals='" + totalHealthProfessionals + '\'' +
+ ", totalAdmins='" + totalAdmins + '\'' +
+ '}';
+ }
+
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Device.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Device.java
index 9e6d8278..43d1ba9c 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Device.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Device.java
@@ -14,6 +14,7 @@
import io.objectbox.annotation.Entity;
import io.objectbox.annotation.Id;
import io.objectbox.annotation.Index;
+import io.objectbox.annotation.Transient;
/**
* Represents Device object.
@@ -56,17 +57,23 @@ public class Device implements Parcelable {
private String userId;
@Expose(serialize = false, deserialize = false)
+ @Transient // not persisted
+ private String uuid;
+
+ @Expose(serialize = false, deserialize = false)
+ @Transient // not persisted
private int img;
public Device() {
}
- public Device(String name, String manufacturer, String modelNumber, int img, String type) {
+ public Device(String name, String manufacturer, String modelNumber, int img, String type, String uuid) {
this.name = name;
this.manufacturer = manufacturer;
this.modelNumber = modelNumber;
this.img = img;
this.type = type;
+ this.uuid = uuid;
}
protected Device(Parcel in) {
@@ -79,6 +86,7 @@ protected Device(Parcel in) {
manufacturer = in.readString();
userId = in.readString();
img = in.readInt();
+ uuid = in.readString();
}
@Override
@@ -92,6 +100,7 @@ public void writeToParcel(Parcel dest, int flags) {
dest.writeString(manufacturer);
dest.writeString(userId);
dest.writeInt(img);
+ dest.writeString(uuid);
}
@Override
@@ -183,6 +192,14 @@ public void setImg(int img) {
this.img = img;
}
+ public String getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
@Override
public int hashCode() {
return Objects.hash(address);
@@ -193,7 +210,7 @@ public boolean equals(Object o) {
if (!(o instanceof Device)) return false;
Device other = (Device) o;
- return this.address.equals(other.address) || this.name.equals(other.name);
+ return this.type.equals(other.type);
}
/**
@@ -219,6 +236,7 @@ public String toString() {
", manufacturer='" + manufacturer + '\'' +
", userId='" + userId + '\'' +
", img=" + img +
+ ", uuid=" + uuid +
'}';
}
}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FamilyCohesionRecord.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FamilyCohesionRecord.java
index b3d058f2..b31e85bd 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FamilyCohesionRecord.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FamilyCohesionRecord.java
@@ -204,4 +204,25 @@ public String toJson() {
Log.i("AAAAAAAAAA", a);
return a;
}
+
+ @Override
+ public String toString() {
+ return "FamilyCohesionRecord{" +
+ "id=" + id +
+ ", _id='" + _id + '\'' +
+ ", patientId='" + patientId + '\'' +
+ ", createdAt='" + createdAt + '\'' +
+ ", familyMutualAidFreq='" + familyMutualAidFreq + '\'' +
+ ", friendshipApprovalFreq='" + friendshipApprovalFreq + '\'' +
+ ", familyOnlyTaskFreq='" + familyOnlyTaskFreq + '\'' +
+ ", familyOnlyPreferenceFreq='" + familyOnlyPreferenceFreq + '\'' +
+ ", freeTimeTogetherFreq='" + freeTimeTogetherFreq + '\'' +
+ ", familyProximityPerceptionFreq='" + familyProximityPerceptionFreq + '\'' +
+ ", allFamilyTasksFreq='" + allFamilyTasksFreq + '\'' +
+ ", familyTasksOpportunityFreq='" + familyTasksOpportunityFreq + '\'' +
+ ", familyDecisionSupportFreq='" + familyDecisionSupportFreq + '\'' +
+ ", familyUnionRelevanceFreq='" + familyUnionRelevanceFreq + '\'' +
+ ", familyCohesionResult=" + familyCohesionResult +
+ '}';
+ }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FrequencyAnswersType.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FrequencyAnswersType.java
index a7edfeb6..4b204fed 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FrequencyAnswersType.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/FrequencyAnswersType.java
@@ -14,7 +14,7 @@ public static class Frequency {
public static final String RARELY_PTBR = "Raramente";
public static final String SOMETIMES_PTBR = "As vezes";
public static final String OFTEN_PTBR = "Frequentemente";
- public static final String ALMOST_EVERYDAY_PTBR = "Quase todos os dias";
+ public static final String ALMOST_ALWAYS_PTBR = "Quase sempre";
public static String getString(int type) {
switch (type) {
@@ -44,10 +44,41 @@ public static String getStringPTBR(String type) {
case OFTEN:
return OFTEN_PTBR;
case ALMOST_ALWAYS:
- return ALMOST_EVERYDAY_PTBR;
+ return ALMOST_ALWAYS_PTBR;
default:
return "";
}
}
}
-}
+
+ public static class Afirmation {
+
+ public static final String YES = "yes";
+ public static final String NOT = "not";
+
+ public static final String YES_PTBR = "Sim";
+ public static final String NOT_PTBR = "Não";
+
+ public static String getString(int type) {
+ switch (type) {
+ case 0:
+ return YES;
+ case 1:
+ return NOT;
+ default:
+ return "";
+ }
+ }
+
+ public static String getStringPTBR(String type) {
+ switch (type) {
+ case YES:
+ return YES_PTBR;
+ case NOT:
+ return NOT_PTBR;
+ default:
+ return "";
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/GroupItemEvaluation.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/GroupItemEvaluation.java
index 4aa69bb2..2415496e 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/GroupItemEvaluation.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/GroupItemEvaluation.java
@@ -8,12 +8,19 @@
public class GroupItemEvaluation extends ExpandableGroup {
private int type;
+ private String idGroup;
public GroupItemEvaluation(String title, List items, int type) {
super(title, items);
this.type = type;
}
+ public GroupItemEvaluation(String title, List items, int type, String idGroup) {
+ super(title, items);
+ this.type = type;
+ this.idGroup = idGroup;
+ }
+
public int getType() {
return type;
}
@@ -21,4 +28,12 @@ public int getType() {
public void setType(int type) {
this.type = type;
}
+
+ public String getIdGroup() {
+ return idGroup;
+ }
+
+ public void setIdGroup(String idGroup) {
+ this.idGroup = idGroup;
+ }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/HealthProfessional.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/HealthProfessional.java
new file mode 100644
index 00000000..67cedaf8
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/HealthProfessional.java
@@ -0,0 +1,42 @@
+package br.edu.uepb.nutes.haniot.data.model;
+
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+import io.objectbox.annotation.Entity;
+
+/**
+ * Represents User object.
+ *
+ * @author Copyright (c) 2019, NUTES/UEPB
+ */
+@Entity
+public class HealthProfessional extends User {
+
+ @SerializedName("total_pilot_studies")
+ @Expose()
+ private String totalPilotStudies;
+
+ @SerializedName("total_patients")
+ @Expose()
+ private String totalPatients;
+
+ public HealthProfessional() {
+ }
+
+ public String getTotalPilotStudies() {
+ return totalPilotStudies;
+ }
+
+ public void setTotalPilotStudies(String totalPilotStudies) {
+ this.totalPilotStudies = totalPilotStudies;
+ }
+
+ public String getTotalPatients() {
+ return totalPatients;
+ }
+
+ public void setTotalPatients(String totalPatients) {
+ this.totalPatients = totalPatients;
+ }
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/MeasurementLastResponse.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/MeasurementLastResponse.java
new file mode 100644
index 00000000..86cee952
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/MeasurementLastResponse.java
@@ -0,0 +1,120 @@
+package br.edu.uepb.nutes.haniot.data.model;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+
+public class MeasurementLastResponse {
+
+ @SerializedName("weight")
+ @Expose()
+ Measurement weight;
+
+ @SerializedName("hearte_rate")
+ @Expose()
+ Measurement heartRate;
+
+ @SerializedName("height")
+ @Expose()
+ Measurement height;
+
+ @SerializedName("blood_glucose")
+ @Expose()
+ Measurement bloodGlucose;
+
+ @SerializedName("blood_pressure")
+ @Expose()
+ Measurement bloodPressure;
+
+ @SerializedName("waist_circumference")
+ @Expose()
+ Measurement waistCircumference;
+
+ public Measurement getWeight() {
+ return weight;
+ }
+
+ public void setWeight(Measurement weight) {
+ this.weight = weight;
+ }
+
+ public Measurement getHeartRate() {
+ return heartRate;
+ }
+
+ public void setHeartRate(Measurement heartRate) {
+ this.heartRate = heartRate;
+ }
+
+ public Measurement getHeight() {
+ return height;
+ }
+
+ public void setHeight(Measurement height) {
+ this.height = height;
+ }
+
+ public Measurement getBloodGlucose() {
+ return bloodGlucose;
+ }
+
+ public void setBloodGlucose(Measurement bloodGlucose) {
+ this.bloodGlucose = bloodGlucose;
+ }
+
+ public Measurement getBloodPressure() {
+ return bloodPressure;
+ }
+
+ public void setBloodPressure(Measurement bloodPressure) {
+ this.bloodPressure = bloodPressure;
+ }
+
+ public Measurement getWaistCircumference() {
+ return waistCircumference;
+ }
+
+ public void setWaistCircumference(Measurement waistCircumference) {
+ this.waistCircumference = waistCircumference;
+ }
+
+ /**
+ * Convert object to json format.
+ *
+ * @return String
+ */
+ public String toJson() {
+ Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
+ String a = gson.toJson(this);
+ return a;
+ }
+
+ /**
+ * Convert json to Object.
+ *
+ * @param json String
+ * @return Patient
+ */
+ public static Patient jsonDeserialize(String json) {
+ Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
+ Type typeLastMeasurement = new TypeToken() {
+ }.getType();
+ return gson.fromJson(json, typeLastMeasurement);
+ }
+
+ @Override
+ public String toString() {
+ return "MeasurementLastResponse{" +
+ ", weight=" + weight +
+ ", heartRate=" + heartRate +
+ ", height=" + height +
+ ", bloodGlucose=" + bloodGlucose +
+ ", bloodPressure=" + bloodPressure +
+ ", waistCircumference=" + waistCircumference +
+ '}';
+ }
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/NutritionalQuestionnaire.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/NutritionalQuestionnaire.java
new file mode 100644
index 00000000..44006ee4
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/NutritionalQuestionnaire.java
@@ -0,0 +1,132 @@
+package br.edu.uepb.nutes.haniot.data.model;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+import java.util.Objects;
+
+import io.objectbox.annotation.Id;
+
+public class NutritionalQuestionnaire {
+
+ @Id
+ @Expose(deserialize = false, serialize = false)
+ private long id;
+
+ @SerializedName("id")
+ @Expose()
+ private String _id;
+
+ @SerializedName("created_at")
+ @Expose()
+ String createdAt;
+
+ @SerializedName("sleep_habit")
+ @Expose()
+ SleepHabit sleepHabit;
+
+ @SerializedName("physical_activity_habits")
+ @Expose()
+ PhysicalActivityHabit physicalActivityHabit;
+
+ @SerializedName("feeding_habits_record")
+ @Expose()
+ FeedingHabitsRecord feedingHabitsRecord;
+
+ @SerializedName("medical_record")
+ @Expose()
+ MedicalRecord medicalRecord;
+
+ public NutritionalQuestionnaire() {
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String get_id() {
+ return _id;
+ }
+
+ public void set_id(String _id) {
+ this._id = _id;
+ }
+
+ public String getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(String createdAt) {
+ this.createdAt = createdAt;
+ }
+
+ public SleepHabit getSleepHabit() {
+ return sleepHabit;
+ }
+
+ public void setSleepHabit(SleepHabit sleepHabit) {
+ this.sleepHabit = sleepHabit;
+ }
+
+ public PhysicalActivityHabit getPhysicalActivityHabit() {
+ return physicalActivityHabit;
+ }
+
+ public void setPhysicalActivityHabit(PhysicalActivityHabit physicalActivityHabit) {
+ this.physicalActivityHabit = physicalActivityHabit;
+ }
+
+ public FeedingHabitsRecord getFeedingHabitsRecord() {
+ return feedingHabitsRecord;
+ }
+
+ public void setFeedingHabitsRecord(FeedingHabitsRecord feedingHabitsRecord) {
+ this.feedingHabitsRecord = feedingHabitsRecord;
+ }
+
+ public MedicalRecord getMedicalRecord() {
+ return medicalRecord;
+ }
+
+ public void setMedicalRecord(MedicalRecord medicalRecord) {
+ this.medicalRecord = medicalRecord;
+ }
+
+ /**
+ * Convert object to json format.
+ *
+ * @return String
+ */
+ public String toJson() {
+ Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
+ return gson.toJson(this);
+ }
+
+ @Override
+ public String toString() {
+ return "NutritionalQuestionnaire{" +
+ "id=" + id +
+ ", _id='" + _id + '\'' +
+ ", createdAt='" + createdAt + '\'' +
+ ", sleepHabit=" + sleepHabit +
+ ", physicalActivityHabit=" + physicalActivityHabit +
+ ", feedingHabitsRecord=" + feedingHabitsRecord +
+ ", medicalRecord=" + medicalRecord +
+ '}';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ NutritionalQuestionnaire that = (NutritionalQuestionnaire) o;
+ return Objects.equals(_id, that._id) &&
+ Objects.equals(createdAt, that.createdAt);
+ }
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/NutritionalQuestionnaireType.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/NutritionalQuestionnaireType.java
new file mode 100644
index 00000000..8fd60ac5
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/NutritionalQuestionnaireType.java
@@ -0,0 +1,9 @@
+package br.edu.uepb.nutes.haniot.data.model;
+
+public class NutritionalQuestionnaireType {
+
+ public final static String SLEEP_HABIT = "sleep_habit";
+ public final static String PHYSICAL_ACTIVITY_HABITS = "physical_activity_habits";
+ public final static String FEEDING_HABITS_RECORD = "feeding_habits_record";
+ public final static String MEDICAL_RECORDS = "medical_record";
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OdontologicalQuestionnaire.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OdontologicalQuestionnaire.java
new file mode 100644
index 00000000..7adf3602
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OdontologicalQuestionnaire.java
@@ -0,0 +1,119 @@
+package br.edu.uepb.nutes.haniot.data.model;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+import java.util.Objects;
+
+import io.objectbox.annotation.Id;
+
+public class OdontologicalQuestionnaire {
+
+ @Id
+ @Expose(deserialize = false, serialize = false)
+ private long id;
+
+ @SerializedName("id")
+ @Expose()
+ private String _id;
+
+ @SerializedName("created_at")
+ @Expose()
+ String createdAt;
+
+ @SerializedName("sociodemographic_record")
+ @Expose()
+ SociodemographicRecord sociodemographicRecord;
+
+ @SerializedName("family_cohesion_record")
+ @Expose()
+ FamilyCohesionRecord familyCohesionRecord;
+
+ @SerializedName("oral_health_record")
+ @Expose()
+ OralHealthRecord oralHealthRecord;
+
+ public OdontologicalQuestionnaire() {
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String get_id() {
+ return _id;
+ }
+
+ public void set_id(String _id) {
+ this._id = _id;
+ }
+
+ public String getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(String createdAt) {
+ this.createdAt = createdAt;
+ }
+
+ public SociodemographicRecord getSociodemographicRecord() {
+ return sociodemographicRecord;
+ }
+
+ public void setSociodemographicRecord(SociodemographicRecord sociodemographicRecord) {
+ this.sociodemographicRecord = sociodemographicRecord;
+ }
+
+ public FamilyCohesionRecord getFamilyCohesionRecord() {
+ return familyCohesionRecord;
+ }
+
+ public void setFamilyCohesionRecord(FamilyCohesionRecord familyCohesionRecord) {
+ this.familyCohesionRecord = familyCohesionRecord;
+ }
+
+ public OralHealthRecord getOralHealthRecord() {
+ return oralHealthRecord;
+ }
+
+ public void setOralHealthRecord(OralHealthRecord oralHealthRecord) {
+ this.oralHealthRecord = oralHealthRecord;
+ }
+
+ /**
+ * Convert object to json format.
+ *
+ * @return String
+ */
+ public String toJson() {
+ Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
+ return gson.toJson(this);
+ }
+
+ @Override
+ public String toString() {
+ return "OdontologicalQuestionnaire{" +
+ "id=" + id +
+ ", _id='" + _id + '\'' +
+ ", createdAt='" + createdAt + '\'' +
+ ", sociodemographicRecord=" + sociodemographicRecord +
+ ", familyCohesionRecord=" + familyCohesionRecord +
+ ", oralHealthRecord=" + oralHealthRecord +
+ '}';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ OdontologicalQuestionnaire that = (OdontologicalQuestionnaire) o;
+ return Objects.equals(_id, that._id) &&
+ Objects.equals(createdAt, that.createdAt);
+ }
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OdontologicalQuestionnaireType.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OdontologicalQuestionnaireType.java
new file mode 100644
index 00000000..d6b1961e
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OdontologicalQuestionnaireType.java
@@ -0,0 +1,8 @@
+package br.edu.uepb.nutes.haniot.data.model;
+
+public class OdontologicalQuestionnaireType {
+
+ public final static String SOCIODEMOGRAPHIC_RECORD = "sociodemographic_record";
+ public final static String FAMILY_COHESION_RECORD = "family_cohesion_record";
+ public final static String ORAL_HEALTH_RECORD = "oral_health_record";
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OralHealthRecord.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OralHealthRecord.java
index f0896412..d482e127 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OralHealthRecord.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/OralHealthRecord.java
@@ -111,4 +111,17 @@ public String toJson() {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
return gson.toJson(this);
}
+
+ @Override
+ public String toString() {
+ return "OralHealthRecord{" +
+ "id=" + id +
+ ", _id='" + _id + '\'' +
+ ", patientId='" + patientId + '\'' +
+ ", createdAt='" + createdAt + '\'' +
+ ", teethBrushingFreq='" + teethBrushingFreq + '\'' +
+ ", toothLesions=" + toothLesions +
+ ", toothLesionsDB=" + toothLesionsDB +
+ '}';
+ }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Patient.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Patient.java
index c99a72bb..c958a87d 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Patient.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/Patient.java
@@ -14,40 +14,16 @@
import io.objectbox.annotation.Index;
@Entity
-public class Patient {
- @Id
- @Expose(serialize = false, deserialize = false)
- private long id;
-
- @Index
- @SerializedName("id")
- @Expose()
- private String _id; // _id in server remote (UUID)
+public class Patient extends User{
@SerializedName("pilotstudy_id")
@Expose()
private String pilotId;
- @SerializedName("name")
- @Expose()
- private String name;
-
- @SerializedName("email")
- @Expose()
- private String email;
-
@SerializedName("gender")
@Expose()
private String gender;
- @SerializedName("birth_date")
- @Expose()
- private String birthDate;
-
- @SerializedName("phone_number")
- @Expose()
- private String phoneNumber;
-
@Expose(serialize = false, deserialize = false)
private String healthProfessionalId;
@@ -55,22 +31,6 @@ public Patient() {
}
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public String get_id() {
- return _id;
- }
-
- public void set_id(String _id) {
- this._id = _id;
- }
-
public String getPilotId() {
return pilotId;
}
@@ -79,14 +39,6 @@ public void setPilotId(String pilotId) {
this.pilotId = pilotId;
}
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
public String getGender() {
return gender;
}
@@ -95,22 +47,6 @@ public void setGender(String gender) {
this.gender = gender;
}
- public String getBirthDate() {
- return birthDate;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- public void setBirthDate(String birthDate) {
- this.birthDate = birthDate;
- }
-
public String getHealthProfessionalId() {
return healthProfessionalId;
}
@@ -119,14 +55,6 @@ public void setHealthProfessionalId(String healthProfessionalId) {
this.healthProfessionalId = healthProfessionalId;
}
- public String getPhoneNumber() {
- return phoneNumber;
- }
-
- public void setPhoneNumber(String phoneNumber) {
- this.phoneNumber = phoneNumber;
- }
-
/**
* Convert object to json format.
*
@@ -154,28 +82,9 @@ public static Patient jsonDeserialize(String json) {
@Override
public String toString() {
return "Patient{" +
- "id=" + id +
- ", _id='" + _id + '\'' +
", pilotId='" + pilotId + '\'' +
- ", name='" + name + '\'' +
- ", email='" + email + '\'' +
", gender='" + gender + '\'' +
- ", birthDate='" + birthDate + '\'' +
", healthProfessionalId='" + healthProfessionalId + '\'' +
- ", phoneNumber='" + phoneNumber + '\'' +
'}';
}
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Patient patient = (Patient) o;
- return Objects.equals(_id, patient._id);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(_id);
- }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicRecord.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicRecord.java
index ecb73687..abd59bfb 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicRecord.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicRecord.java
@@ -108,4 +108,17 @@ public String toJson() {
Log.i("AAAAAAAAAA", a);
return a;
}
+
+ @Override
+ public String toString() {
+ return "SociodemographicRecord{" +
+ "id=" + id +
+ ", _id='" + _id + '\'' +
+ ", patientId='" + patientId + '\'' +
+ ", createdAt='" + createdAt + '\'' +
+ ", colorRace='" + colorRace + '\'' +
+ ", motherScholarity='" + motherScholarity + '\'' +
+ ", peopleInHome=" + peopleInHome +
+ '}';
+ }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicType.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicType.java
index e2043bd0..7919092b 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicType.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SociodemographicType.java
@@ -5,9 +5,13 @@ public class SociodemographicType {
public static class ColorRace {
public static final String WHITE = "white";
+ public static final String WHITE_PTBR = "Branca";
public static final String BLACK = "black";
+ public static final String BLACK_PTBR = "Preta/Negra";
public static final String PARDA = "parda";
+ public static final String PARDA_PTBR = "Parda";
public static final String YELLOW = "yellow";
+ public static final String YELLOW_PTBR = "Amarela";
public static String getString(int type) {
@@ -24,15 +28,35 @@ public static String getString(int type) {
return "";
}
}
+
+ public static String getStringPtBr(String type) {
+ switch (type) {
+ case WHITE:
+ return WHITE_PTBR;
+ case BLACK:
+ return BLACK_PTBR;
+ case PARDA:
+ return PARDA_PTBR;
+ case YELLOW:
+ return YELLOW_PTBR;
+ default:
+ return "";
+ }
+ }
}
public static class MotherScholarity {
public static final String UNLETTERED_ELEMENTARY_ONE_INCOMPLETE = "unlettered_elementary_one_incomplete";
+ public static final String UNLETTERED_ELEMENTARY_ONE_INCOMPLETE_PTBR = "Analfabeto/Fundamental I Incompleto";
public static final String ELEMENTARY_ONE_ELEMENTARY_TWO_INCOMPLETE = "elementary_one_elementary_two_incomplete";
+ public static final String ELEMENTARY_ONE_ELEMENTARY_TWO_INCOMPLETE_PTBR = "Fundamental I Completo/Fundamental II Incompleto";
public static final String ELEMENTARY_TWO_HIGH_SCHOOL_INCOMPLETE = "elementary_two_high_school_incomplete";
+ public static final String ELEMENTARY_TWO_HIGH_SCHOOL_INCOMPLETE_PTBR = "Fundamental Completo/Médio Incompleto";
public static final String MEDIUM_GRADUATION_INCOMPLETE = "medium_graduation_incomplete";
+ public static final String MEDIUM_GRADUATION_INCOMPLETE_PTBR = "Superior Incompleto";
public static final String GRADUATION_COMPLETE = "graduation_complete";
+ public static final String GRADUATION_COMPLETE_PTBR = "Superio Completo";
public static String getString(int type) {
@@ -51,5 +75,22 @@ public static String getString(int type) {
return "";
}
}
+
+ public static String getStringPtBr(String type) {
+ switch (type) {
+ case UNLETTERED_ELEMENTARY_ONE_INCOMPLETE:
+ return UNLETTERED_ELEMENTARY_ONE_INCOMPLETE_PTBR;
+ case ELEMENTARY_ONE_ELEMENTARY_TWO_INCOMPLETE:
+ return ELEMENTARY_ONE_ELEMENTARY_TWO_INCOMPLETE_PTBR;
+ case ELEMENTARY_TWO_HIGH_SCHOOL_INCOMPLETE:
+ return ELEMENTARY_TWO_HIGH_SCHOOL_INCOMPLETE_PTBR;
+ case MEDIUM_GRADUATION_INCOMPLETE:
+ return MEDIUM_GRADUATION_INCOMPLETE_PTBR;
+ case GRADUATION_COMPLETE:
+ return GRADUATION_COMPLETE_PTBR;
+ default:
+ return "";
+ }
+ }
}
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SportsType.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SportsType.java
index c34e805a..b95c4b5e 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SportsType.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/SportsType.java
@@ -1,28 +1,33 @@
package br.edu.uepb.nutes.haniot.data.model;
+import android.content.Context;
+import android.support.v4.content.ContextCompat;
+
+import br.edu.uepb.nutes.haniot.R;
+
public class SportsType {
- public static final String SOCCER = "soccer";
+ public static final String SOCCER = "football";
public static final String FUTSAL = "futsal";
public static final String HANDBALL = "handball";
public static final String BASKETBALL = "basketball";
- public static final String SKATES = "skates";
+ public static final String SKATES = "roller_skate";
public static final String ATHLETICS = "athletics";
- public static final String SWIM = "swim";
- public static final String GYMNASTICS = "gymnastics";
+ public static final String SWIM = "swimming";
+ public static final String GYMNASTICS = "olympic_rhythmic_gymnastics";
public static final String FIGHT = "fight";
public static final String DANCE = "dance";
public static final String RUN = "run";
- public static final String RIDE_A_BIKE = "ride a bike";
- public static final String WALKING_AS_A_PHYSICAL_EXERCISE = "walking as a physical exercise";
- public static final String WALKING_AS_A_MEANS_OF_TRANSPORT = "walking as a means of transport";
+ public static final String RIDE_A_BIKE = "bike";
+ public static final String WALKING_AS_A_PHYSICAL_EXERCISE = "exercise_walking";
+ public static final String WALKING_AS_A_MEANS_OF_TRANSPORT = "locomotion_walking";
public static final String VOLLEYBALL = "volleyball";
- public static final String MUSCULATION = "musculation";
- public static final String ABDOMINAL_EXERCISE = "abdominal exercise";
+ public static final String MUSCULATION = "bodybuilding";
+ public static final String ABDOMINAL_EXERCISE = "abdominal";
public static final String TENNIS = "tennis";
- public static final String WALK_WITH_DOG = "walk with dog";
- public static final String GYMNASTICS_GYM = "gymnastics gym";
- public static final String NO_ACTIVITY = "no activity";
+ public static final String WALK_WITH_DOG = "dog_walk";
+ public static final String GYMNASTICS_GYM = "gym_exercise";
+ public static final String NO_ACTIVITY = "none_activity";
public static String getString(int type) {
switch (type) {
@@ -72,4 +77,54 @@ public static String getString(int type) {
return "";
}
}
+
+ public static String getStringPtBr(Context context, String type) {
+ String[] answers = context.getResources().getStringArray(R.array.sports_answers);
+ switch (type) {
+ case SOCCER:
+ return answers[0];
+ case FUTSAL:
+ return answers[1];
+ case HANDBALL:
+ return answers[2];
+ case BASKETBALL:
+ return answers[3];
+ case SKATES:
+ return answers[4];
+ case ATHLETICS:
+ return answers[5];
+ case SWIM:
+ return answers[6];
+ case GYMNASTICS:
+ return answers[7];
+ case FIGHT:
+ return answers[8];
+ case DANCE:
+ return answers[9];
+ case RUN:
+ return answers[10];
+ case RIDE_A_BIKE:
+ return answers[11];
+ case WALKING_AS_A_PHYSICAL_EXERCISE:
+ return answers[12];
+ case WALKING_AS_A_MEANS_OF_TRANSPORT:
+ return answers[13];
+ case VOLLEYBALL:
+ return answers[14];
+ case MUSCULATION:
+ return answers[15];
+ case ABDOMINAL_EXERCISE:
+ return answers[16];
+ case TENNIS:
+ return answers[17];
+ case WALK_WITH_DOG:
+ return answers[18];
+ case GYMNASTICS_GYM:
+ return answers[19];
+ case NO_ACTIVITY:
+ return answers[20];
+ default:
+ return "";
+ }
+ }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesion.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesion.java
index 90a97541..ae943c1e 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesion.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesion.java
@@ -7,6 +7,8 @@
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
+import java.util.Objects;
+
import io.objectbox.relation.ToOne;
public class ToothLesion {
@@ -25,6 +27,11 @@ public class ToothLesion {
public ToothLesion() {
}
+ public ToothLesion(String toothType, String lesionType) {
+ this.toothType = toothType;
+ this.lesionType = lesionType;
+ }
+
public String getToothType() {
return toothType;
}
@@ -60,4 +67,27 @@ public String toJson() {
Log.i("AAAAAAAAAA", a);
return a;
}
+
+ @Override
+ public String toString() {
+ return "ToothLesion{" +
+ "toothType='" + toothType + '\'' +
+ ", lesionType='" + lesionType + '\'' +
+ ", oralHealthRecord=" + oralHealthRecord +
+ '}';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ ToothLesion that = (ToothLesion) o;
+ return toothType.equals(that.toothType) &&
+ lesionType.equals(that.lesionType);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(toothType, lesionType);
+ }
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesionType.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesionType.java
index 0a068478..a3ac172c 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesionType.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/ToothLesionType.java
@@ -5,7 +5,9 @@ public class ToothLesionType {
public static class ToothType {
public static final String DECIDUOUS_TOOTH = "deciduous_tooth";
+ public static final String DECIDUOUS_TOOTH_PTBR = "dentes decíduos";
public static final String PERMANENT_TOOTH = "permanent_tooth";
+ public static final String PERMANENT_TOOTH_PTBR = "dentes permanentes";
public static String getString(int type) {
switch (type) {
@@ -17,12 +19,25 @@ public static String getString(int type) {
return "";
}
}
+
+ public static String getStringPtbr(String type) {
+ switch (type) {
+ case DECIDUOUS_TOOTH:
+ return DECIDUOUS_TOOTH_PTBR;
+ case PERMANENT_TOOTH:
+ return PERMANENT_TOOTH_PTBR;
+ default:
+ return "";
+ }
+ }
}
public static class LesionType {
public static final String WHITE_SPOT_LESION = "white_spot_lesion";
+ public static final String WHITE_SPOT_LESION_PTBR = "Cárie do tipo mancha branca";
public static final String CAVITATED_LESION = "cavitated_lesion";
+ public static final String CAVITATED_LESION_PTBR = "Cárie cavitada";
public static String getString(int type) {
switch (type) {
@@ -34,14 +49,29 @@ public static String getString(int type) {
return "";
}
}
+
+ public static String getStringPtBr(String type) {
+ switch (type) {
+ case WHITE_SPOT_LESION:
+ return WHITE_SPOT_LESION_PTBR;
+ case CAVITATED_LESION:
+ return CAVITATED_LESION_PTBR;
+ default:
+ return "";
+ }
+ }
}
public static class TeethBrushingFreq {
public static final String NONE = "none";
+ public static final String NONE_PTBR = "Nenhuma vez";
public static final String ONCE = "once";
+ public static final String ONCE_PTBR = "Uma vez";
public static final String TWICE = "twice";
+ public static final String TWICE_PTBR = "Duas vezes";
public static final String THREE_MORE = "three_more";
+ public static final String THREE_MORE_PTBR = "Três vezes";
public static String getString(int type) {
switch (type) {
@@ -57,5 +87,20 @@ public static String getString(int type) {
return "";
}
}
+
+ public static String getStringPtBr(String type) {
+ switch (type) {
+ case NONE:
+ return NONE_PTBR;
+ case ONCE:
+ return ONCE_PTBR;
+ case TWICE:
+ return TWICE_PTBR;
+ case THREE_MORE:
+ return THREE_MORE_PTBR;
+ default:
+ return "";
+ }
+ }
}
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/TypeEvaluation.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/TypeEvaluation.java
index 1de10e59..8c85eb82 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/TypeEvaluation.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/TypeEvaluation.java
@@ -19,5 +19,6 @@ public class TypeEvaluation {
public final static int FAMILY_COHESION = 14;
public final static int FEEDING_HABITS = 15;
public final static int ALL_MEASUREMENT = 16;
+ public final static int ALL_QUIZ = 17;
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/User.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/User.java
index f8e923ea..dbd36ed5 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/User.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/User.java
@@ -37,6 +37,14 @@ public class User {
@Expose()
private String name;
+ @SerializedName("birth_date")
+ @Expose()
+ private String birthDate;
+
+ @SerializedName("health_area")
+ @Expose()
+ private String healthArea;
+
@Expose(deserialize = false)
private String password;
@@ -48,20 +56,30 @@ public class User {
@Expose(deserialize = false)
private String newPassword;
- @SerializedName("health_area")
- @Expose()
- private String healthArea; // provide by the server
-
@SerializedName("phone_number")
@Expose()
private String phoneNumber; // provide by the server
+ @SerializedName("last_login")
+ @Expose()
+ private String lastLogin;
+
+ @SerializedName("last_sync")
+ @Expose()
+ private String lastSync;
+
+ @SerializedName("language")
+ @Expose()
+ private String language;
+
+ @SerializedName("selected_pilot_study")
@Expose()
private String pilotStudyIDSelected;
/**
* {@link UserType ()}
*/
- private int userType; // 1 admin, 2 health_profissional
+ @Expose()
+ private String userType; // 1 admin, 2 health_profissional
public User() {
}
@@ -71,12 +89,6 @@ public User(String email, String password) {
this.password = password;
}
- public User(String name, String email, int userType) {
- this.name = name;
- this.email = email;
- this.userType = userType;
- }
-
public User(String _id, String oldPassword, String newPassword) {
this._id = _id;
this.oldPassword = oldPassword;
@@ -115,11 +127,11 @@ public void setEmail(String email) {
this.email = email;
}
- public int getUserType() {
+ public String getUserType() {
return userType;
}
- public void setUserType(int userType) {
+ public void setUserType(String userType) {
this.userType = userType;
}
@@ -147,14 +159,6 @@ public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
- public String getHealthArea() {
- return healthArea;
- }
-
- public void setHealthArea(String healthArea) {
- this.healthArea = healthArea;
- }
-
public String getPilotStudyIDSelected() {
return pilotStudyIDSelected;
}
@@ -181,6 +185,46 @@ public String toJson() {
return gson.toJson(this);
}
+ public String getBirthDate() {
+ return birthDate;
+ }
+
+ public void setBirthDate(String birthDate) {
+ this.birthDate = birthDate;
+ }
+
+ public String getLastLogin() {
+ return lastLogin;
+ }
+
+ public void setLastLogin(String lastLogin) {
+ this.lastLogin = lastLogin;
+ }
+
+ public String getLastSync() {
+ return lastSync;
+ }
+
+ public void setLastSync(String lastSync) {
+ this.lastSync = lastSync;
+ }
+
+ public String getLanguage() {
+ return language;
+ }
+
+ public void setLanguage(String language) {
+ this.language = language;
+ }
+
+ public String getHealthArea() {
+ return healthArea;
+ }
+
+ public void setHealthArea(String healthArea) {
+ this.healthArea = healthArea;
+ }
+
/**
* Convert json to Object.
*
@@ -201,7 +245,10 @@ public boolean equals(Object o) {
User other = (User) o;
- return other.get_id().equals(this.get_id()) && other.getEmail().equals(this.getEmail());
+ return other.get_id().equals(this.get_id())
+ && (other.email == null
+ || this.email == null
+ || other.getEmail().equals(this.getEmail()));
}
@Override
@@ -211,12 +258,17 @@ public String toString() {
", _id='" + _id + '\'' +
", email='" + email + '\'' +
", name='" + name + '\'' +
+ ", birthDate='" + birthDate + '\'' +
+ ", healthArea='" + healthArea + '\'' +
", password='" + password + '\'' +
", oldPassword='" + oldPassword + '\'' +
", newPassword='" + newPassword + '\'' +
- ", healthArea='" + healthArea + '\'' +
+ ", phoneNumber='" + phoneNumber + '\'' +
+ ", lastLogin='" + lastLogin + '\'' +
+ ", lastSync='" + lastSync + '\'' +
+ ", language='" + language + '\'' +
", pilotStudyIDSelected='" + pilotStudyIDSelected + '\'' +
- ", userType=" + userType +
+ ", userType='" + userType + '\'' +
'}';
}
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserAccess.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserAccess.java
index 2c468f01..aa3f9dcd 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserAccess.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserAccess.java
@@ -18,6 +18,7 @@
*/
public class UserAccess implements Parcelable {
public static final String KEY_SCOPES = "scope";
+ public static final String SUB_TYPE = "sub_type";
@Expose()
private String subject;
@@ -38,6 +39,7 @@ public class UserAccess implements Parcelable {
@Expose(serialize = false, deserialize = false)
private String scopes;
+
public UserAccess() {
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserType.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserType.java
index 82f2065c..443a1c97 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserType.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/UserType.java
@@ -12,8 +12,16 @@
* @copyright Copyright (c) 2017, NUTES UEPB
*/
public class UserType {
- public static final int ADMIN = 1;
- public static final int HEALTH_PROFISSIONAL = 2;
+// public static final int ADMIN = 1;
+// public static final int HEALTH_PROFESSEIONAL = 2;
+// public static final int NUTRITION = 3;
+// public static final int DENTISTRY = 4;
+// public static final int PATIENT = 4;
+ public static final String ADMIN = "admin";
+ public static final String HEALTH_PROFESSIONAL = "health_professional";
+ public static final String PATIENT = "patient";
+ public static final String DENTISTRY = "dentistry";
+ public static final String NUTRITION = "nutrition";
/**
* Retrieve the mapped group name in resources.
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/dao/DeviceDAO.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/dao/DeviceDAO.java
index 3082231a..0150c365 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/dao/DeviceDAO.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/model/dao/DeviceDAO.java
@@ -136,14 +136,14 @@ public boolean remove(@NonNull Device device) {
}
/**
- * Removes device passed as parameter.
+ * Removes device passed as parameter.
*
- * @param address String
+ * @param _id String
* @return boolean
*/
- public boolean remove(@NonNull String address) {
+ public boolean remove(@NonNull String _id) {
return (deviceBox.query()
- .equal(Device_.address, address)
+ .equal(Device_._id, _id)
.build()
.remove()) > 0;
}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/AppPreferencesHelper.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/AppPreferencesHelper.java
index b5de18a6..2a4161a6 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/AppPreferencesHelper.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/AppPreferencesHelper.java
@@ -23,6 +23,7 @@ public class AppPreferencesHelper implements PreferencesHelper {
private final String PREF_KEY_USER_PROFILE = "pref_key_user_profile";
private final String PREF_KEY_PATIENT = "pref_key_patient";
private final String PREF_KEY_PILOT_STUDY = "pref_key_pilot_study";
+ private final String PREF_KEY_BLUETOOTH_MODE = "pref_key_bluetooth_mode";
private static AppPreferencesHelper instance;
private SharedPreferences mPrefs;
@@ -108,6 +109,13 @@ public boolean saveFloat(String key, float value) {
return mPrefs.edit().putFloat(key, value).commit();
}
+ @Override
+ public boolean saveBluetoothMode(boolean activated) {
+ return mPrefs.edit()
+ .putBoolean(PREF_KEY_BLUETOOTH_MODE, activated)
+ .commit();
+ }
+
@Override
public UserAccess getUserAccessHaniot() {
String userAccess = mPrefs.getString(PREF_KEY_AUTH_STATE_HANIOT, null);
@@ -132,7 +140,7 @@ public PilotStudy getLastPilotStudy() {
PilotStudy pilotStudy = PilotStudy.jsonDeserialize(pilot);
Log.i("AAAA", getUserLogged().toJson());
Log.i("AAAA", "" + pilotStudy);
- if ( (pilotStudy != null && pilotStudy.getUserId() != null) && pilotStudy.getUserId()
+ if ((pilotStudy != null && pilotStudy.getUserId() != null) && pilotStudy.getUserId()
.equals(getUserLogged().get_id())) {
Log.i("AAAA", pilotStudy.toJson());
return pilotStudy;
@@ -140,6 +148,11 @@ public PilotStudy getLastPilotStudy() {
return null;
}
+ @Override
+ public boolean getBluetoothMode() {
+ return mPrefs.getBoolean(PREF_KEY_BLUETOOTH_MODE, true);
+ }
+
@Override
public String getString(String key) {
checkKey(key);
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/PreferencesHelper.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/PreferencesHelper.java
index ddcd175c..3b666bb0 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/PreferencesHelper.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/local/pref/PreferencesHelper.java
@@ -29,6 +29,8 @@ public interface PreferencesHelper {
boolean saveFloat(String key, float value);
+ boolean saveBluetoothMode(boolean activated);
+
UserAccess getUserAccessHaniot();
User getUserLogged();
@@ -37,6 +39,8 @@ public interface PreferencesHelper {
PilotStudy getLastPilotStudy();
+ boolean getBluetoothMode();
+
String getString(String key);
boolean getBoolean(String key);
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/remote/haniot/ErrorHandler.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/remote/haniot/ErrorHandler.java
new file mode 100644
index 00000000..1e0a11c5
--- /dev/null
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/remote/haniot/ErrorHandler.java
@@ -0,0 +1,42 @@
+package br.edu.uepb.nutes.haniot.data.repository.remote.haniot;
+
+import android.content.Context;
+import android.widget.Toast;
+
+import br.edu.uepb.nutes.haniot.R;
+import retrofit2.HttpException;
+
+public class ErrorHandler {
+ private static final int INVALID_AUTH = 401;
+ private static final int NOT_PERMISSION = 403;
+ private static final int NOT_FOUND = 404;
+ private static final int REQUESTS_EXCEEDED = 429;
+ private static final int INTERNAL_ERROR = 500;
+
+ public static void showMessage(Context context, Throwable e) {
+ if (e instanceof HttpException) {
+ int message;
+ HttpException httpEx = ((HttpException) e);
+ switch (httpEx.code()) {
+ case INVALID_AUTH:
+ message = R.string.invalid_auth;
+ break;
+ case NOT_PERMISSION:
+ message = R.string.not_permission;
+ break;
+ case NOT_FOUND:
+ message = R.string.error_recover_data;
+ break;
+ case REQUESTS_EXCEEDED:
+ message = R.string.request_exceeded;
+ break;
+ case INTERNAL_ERROR:
+ message = R.string.error_500;
+ break;
+ default:
+ message = R.string.error_500;
+ }
+ Toast.makeText(context, context.getString(message), Toast.LENGTH_SHORT).show();
+ }
+ }
+}
diff --git a/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/remote/haniot/HaniotNetRepository.java b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/remote/haniot/HaniotNetRepository.java
index 13117c34..035c3b2c 100644
--- a/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/remote/haniot/HaniotNetRepository.java
+++ b/app/src/main/java/br/edu/uepb/nutes/haniot/data/repository/remote/haniot/HaniotNetRepository.java
@@ -4,18 +4,25 @@
import android.util.Log;
import com.auth0.android.jwt.JWT;
+import com.google.gson.JsonObject;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
+import java.util.Objects;
+import br.edu.uepb.nutes.haniot.data.model.Admin;
import br.edu.uepb.nutes.haniot.data.model.Device;
import br.edu.uepb.nutes.haniot.data.model.FamilyCohesionRecord;
import br.edu.uepb.nutes.haniot.data.model.FeedingHabitsRecord;
+import br.edu.uepb.nutes.haniot.data.model.HealthProfessional;
import br.edu.uepb.nutes.haniot.data.model.Measurement;
+import br.edu.uepb.nutes.haniot.data.model.MeasurementLastResponse;
import br.edu.uepb.nutes.haniot.data.model.MedicalRecord;
import br.edu.uepb.nutes.haniot.data.model.NutritionalEvaluation;
import br.edu.uepb.nutes.haniot.data.model.NutritionalEvaluationResult;
+import br.edu.uepb.nutes.haniot.data.model.NutritionalQuestionnaire;
+import br.edu.uepb.nutes.haniot.data.model.OdontologicalQuestionnaire;
import br.edu.uepb.nutes.haniot.data.model.OralHealthRecord;
import br.edu.uepb.nutes.haniot.data.model.Patient;
import br.edu.uepb.nutes.haniot.data.model.PhysicalActivityHabit;
@@ -32,6 +39,7 @@
import io.reactivex.schedulers.Schedulers;
import okhttp3.Interceptor;
import okhttp3.Request;
+import okhttp3.RequestBody;
import okhttp3.Response;
/**
@@ -99,10 +107,6 @@ private Interceptor responseInterceptor() {
.getInstance(mContext).getUserLogged() != null) {
EventBus.getDefault().post("unauthorized");
}
-// Log.i("AAA", ":"+chain.proceed(chain.request()).body().string());
-
-// Log.w("RESPONSEBODY", response.code() + " | " +
-// Objects.requireNonNull(response.body()).string());
return response;
};
}
@@ -116,6 +120,7 @@ public Single auth(String username, String password) {
userAccess.setSubject(jwt.getSubject());
userAccess.setExpirationDate(jwt.getExpiresAt().getTime());
userAccess.setScopes(jwt.getClaim(UserAccess.KEY_SCOPES).asString());
+ userAccess.setTokenType(jwt.getClaim(UserAccess.SUB_TYPE).asString());
}
return userAccess;
})
@@ -123,6 +128,13 @@ public Single auth(String username, String password) {
.observeOn(AndroidSchedulers.mainThread());
}
+ // forgot password
+ public Single