From 24d4d5a1a8c8ac1a245f6d7d6332dfe9770e03dd Mon Sep 17 00:00:00 2001
From: "Lucas B. Cunha" <lbc16@inf.ufpr.br>
Date: Mon, 25 Sep 2017 10:10:17 -0300
Subject: [PATCH 1/2] Issue AGILE#155: Initial layout done & bug/layout fix

Signed-off-by: Lucas B. Cunha <lbc16@inf.ufpr.br>
---
 app/src/main/AndroidManifest.xml              |   8 +-
 .../agendador/agendador/AccountActivity.java  |  29 +++-
 .../c3sl/agendador/agendador/CepActivity.java |   3 +
 .../agendador/CepNotFoundActivity.java        |   2 +-
 ...Activity.java => CitizenListActivity.java} |   5 +-
 .../agendador/DependentUpdateActivity.java    |  32 +++--
 .../agendador/ForgotPasswordActivity.java     |  52 --------
 .../agendador/agendador/HomeActivity.java     |  15 +--
 .../agendador/agendador/LoginActivity.java    |  13 +-
 .../agendador/NewDependentActivity.java       |  31 ++++-
 .../agendador/PasswordRetrievalActivity.java  | 125 ++++++++++++++++++
 .../agendador/RetrievalFailureActivity.java   |  24 ++++
 .../agendador/RetrievalSuccessActivity.java   |  22 +++
 .../agendador/agendador/SignUpActivity.java   |  11 +-
 .../agendador/agendador/helpers/Mask.java     |  82 +++++++++---
 .../presenters/CitizensPresenter.java         |   5 +-
 .../presenters/ForgotPasswordPresenter.java   |  22 ++-
 .../agendador/presenters/LoginPresenter.java  |   6 +-
 .../agendador/views/AccountView.java          |   1 -
 .../agendador/views/ForgotPasswordView.java   |   7 +
 .../res/drawable-hdpi/ic_back_arrow_black.png | Bin 0 -> 298 bytes
 .../res/drawable-mdpi/ic_back_arrow_black.png | Bin 0 -> 200 bytes
 .../drawable-xhdpi/ic_back_arrow_black.png    | Bin 0 -> 300 bytes
 .../drawable-xxhdpi/ic_back_arrow_black.png   | Bin 0 -> 518 bytes
 .../res/drawable/disabled_container_shape.xml |  14 ++
 .../main/res/layout/activity_account_view.xml |   1 +
 app/src/main/res/layout/activity_citizen.xml  |   2 +-
 .../main/res/layout/activity_dependents.xml   |   1 +
 .../res/layout/activity_dependents_list.xml   |   2 +-
 ...rd.xml => activity_password_retrieval.xml} |  61 ++++++---
 .../res/layout/activity_retrieval_failure.xml |  39 ++++++
 .../res/layout/activity_retrieval_success.xml |  52 ++++++++
 app/src/main/res/layout/activity_signup.xml   |   5 +-
 app/src/main/res/values/integer.xml           |   6 +
 app/src/main/res/values/strings.xml           |   7 +-
 35 files changed, 546 insertions(+), 139 deletions(-)
 rename app/src/main/java/br/ufpr/c3sl/agendador/agendador/{CitizenActivity.java => CitizenListActivity.java} (95%)
 delete mode 100644 app/src/main/java/br/ufpr/c3sl/agendador/agendador/ForgotPasswordActivity.java
 create mode 100644 app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java
 create mode 100644 app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalFailureActivity.java
 create mode 100644 app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalSuccessActivity.java
 create mode 100644 app/src/main/res/drawable-hdpi/ic_back_arrow_black.png
 create mode 100644 app/src/main/res/drawable-mdpi/ic_back_arrow_black.png
 create mode 100644 app/src/main/res/drawable-xhdpi/ic_back_arrow_black.png
 create mode 100644 app/src/main/res/drawable-xxhdpi/ic_back_arrow_black.png
 create mode 100644 app/src/main/res/drawable/disabled_container_shape.xml
 rename app/src/main/res/layout/{activity_forgot_password.xml => activity_password_retrieval.xml} (61%)
 create mode 100644 app/src/main/res/layout/activity_retrieval_failure.xml
 create mode 100644 app/src/main/res/layout/activity_retrieval_success.xml
 create mode 100644 app/src/main/res/values/integer.xml

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 878700b..a2f111e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -35,7 +35,7 @@
         <activity android:name=".CepNotFoundActivity" />
         <activity android:name=".SignUpActivity" />
         <activity android:name=".AccountActivity" />
-        <activity android:name=".ForgotPasswordActivity" />
+        <activity android:name=".PasswordRetrievalActivity" />
         <activity android:name=".DependentsListActivity" />
 
         <service
@@ -52,10 +52,12 @@
             android:name=".SchedulingActivity"
             android:configChanges="keyboardHidden|orientation|screenSize"
             android:screenOrientation="portrait" />
-        <activity android:name=".CitizenActivity" />
+        <activity android:name=".CitizenListActivity" />
         <activity android:name=".ScheduleConfirmationActivity" />
         <activity android:name=".DependentUpdateActivity" />
-        <activity android:name=".NewDependentActivity"/>
+        <activity android:name=".NewDependentActivity" />
+        <activity android:name=".RetrievalFailureActivity" />
+        <activity android:name=".RetrievalSuccessActivity"></activity>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java
index 733c741..7ef5cba 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java
@@ -24,11 +24,13 @@ import android.support.v4.widget.NestedScrollView;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.text.Editable;
+import android.text.InputFilter;
 import android.text.TextWatcher;
 import android.text.method.PasswordTransformationMethod;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ImageButton;
@@ -182,10 +184,19 @@ public class AccountActivity extends AppCompatActivity implements AccountView {
         userImgHelper = new UserImgHelper(getBaseContext());
 
         et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_phone.addTextChangedListener(Mask.insert("(##)####-####", et_phone));
-        et_phone2.addTextChangedListener(Mask.insert("(##)####-####", et_phone2));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+
+        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+
+        et_phone2.addTextChangedListener(Mask.insert("(##)#####-####", et_phone2));
+        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+
         et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+
         et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate));
+        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
 
         loadData();
 
@@ -408,15 +419,25 @@ public class AccountActivity extends AppCompatActivity implements AccountView {
     public void scrollUp() {
         AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar_account);
         CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
-
         NestedScrollView nestedScrollView = (NestedScrollView) findViewById(R.id.nestedscrollview_account);
-        nestedScrollView.fullScroll(View.FOCUS_UP);
+
+
+        //close keyboard if open
+        View view = this.getCurrentFocus();
+        // Check if no view has focus:
+        if (view != null) {
+            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
+            view.clearFocus();
+            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
+
 
         AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
         CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorlayout_account);
         if (behavior != null) {
             behavior.setTopAndBottomOffset(0);
             behavior.onNestedPreScroll(coordinatorLayout, appBarLayout, null, 0, 1, new int[2]);
+
         }
 
         nestedScrollView.fullScroll(View.FOCUS_UP);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java
index 5ceb5a9..3164509 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java
@@ -3,6 +3,7 @@ package br.ufpr.c3sl.agendador.agendador;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.text.Editable;
+import android.text.InputFilter;
 import android.text.TextWatcher;
 import android.view.View;
 import android.widget.EditText;
@@ -47,6 +48,8 @@ public class CepActivity extends AppCompatActivity implements CepView {
 
         et_cep = (EditText) findViewById(R.id.et_cepact_cep);
         et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+
         et_cep.addTextChangedListener(new CepChangeListener());
 
         tv_invalid_cep = (TextView) findViewById(R.id.tv_cepact_invalid_cep);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepNotFoundActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepNotFoundActivity.java
index f9e955c..48005da 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepNotFoundActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepNotFoundActivity.java
@@ -47,7 +47,7 @@ public class CepNotFoundActivity extends AppCompatActivity implements CepNotFoun
         String state_name = intent.getStringExtra("statename_su");
 
         if (city_name.equals("null")) {
-            error_message.setText("Cep inválido");
+            error_message.setText(getResources().getString(R.string.invalid_cep));
         } else {
             error_message.setText(String.format(getString(R.string.cep_not_found_message),
                     city_name, state_name));
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CitizenActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CitizenListActivity.java
similarity index 95%
rename from app/src/main/java/br/ufpr/c3sl/agendador/agendador/CitizenActivity.java
rename to app/src/main/java/br/ufpr/c3sl/agendador/agendador/CitizenListActivity.java
index 30a03a3..047e85f 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CitizenActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CitizenListActivity.java
@@ -20,7 +20,6 @@ import br.ufpr.c3sl.agendador.agendador.helpers.Utils;
 import br.ufpr.c3sl.agendador.agendador.helpers.adapters.CitizensArrayAdapter;
 import br.ufpr.c3sl.agendador.agendador.helpers.listeners.RecyclerViewItemListener;
 import br.ufpr.c3sl.agendador.agendador.models.CitizenCompact;
-import br.ufpr.c3sl.agendador.agendador.models.UserOutput;
 import br.ufpr.c3sl.agendador.agendador.presenters.CitizensPresenter;
 import br.ufpr.c3sl.agendador.agendador.presenters.PresenterManager;
 import br.ufpr.c3sl.agendador.agendador.views.CitizenView;
@@ -31,7 +30,7 @@ import br.ufpr.c3sl.agendador.agendador.views.CitizenView;
  */
 
 
-public class CitizenActivity extends AppCompatActivity implements CitizenView{
+public class CitizenListActivity extends AppCompatActivity implements CitizenView{
 
     private RecyclerView rv_citizens;
 
@@ -73,7 +72,7 @@ public class CitizenActivity extends AppCompatActivity implements CitizenView{
         rv_citizens.addOnItemTouchListener(new RecyclerViewItemListener(getApplicationContext(), rv_citizens,
                 new RecyclerViewItemListener.RecyclerTouchListener() {
                     public void onClickItem(View v, int position) {
-                        Intent intent = new Intent(CitizenActivity.this, TermActivity.class);
+                        Intent intent = new Intent(CitizenListActivity.this, TermActivity.class);
                         Bundle bundle = new Bundle();
                         bundle.putParcelable(Utils.CITIZEN, citizens.get(position));
                         intent.putExtra(Utils.CITIZEN_BUNDLE, bundle);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java
index b91be80..4b62b0b 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java
@@ -4,6 +4,7 @@ import android.Manifest;
 import android.annotation.TargetApi;
 import android.app.FragmentManager;
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -19,11 +20,13 @@ import android.support.v4.widget.NestedScrollView;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.text.Editable;
+import android.text.InputFilter;
 import android.text.TextWatcher;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ImageButton;
@@ -86,12 +89,6 @@ public class DependentUpdateActivity extends AppCompatActivity implements Depend
     private final int LOAD_IMAGE_INTENT = 1;
 
 
-    // TODO: 18/09/17 Cep error dialog shows twice on error
-
-
-    //problema da atualização da foto está na dependent activity.
-
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -160,11 +157,22 @@ public class DependentUpdateActivity extends AppCompatActivity implements Depend
         isChangingPhoto = false;
         userImgHelper = new UserImgHelper(getBaseContext());
         et_disability.setEnabled(false);
+
         et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_phone.addTextChangedListener(Mask.insert("(##)####-####", et_phone));
-        et_phone2.addTextChangedListener(Mask.insert("(##)####-####", et_phone2));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+
+        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+
+        et_phone2.addTextChangedListener(Mask.insert("(##)#####-####", et_phone2));
+        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+
         et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+
+
         et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate));
+        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
 
         try{
             getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -385,6 +393,14 @@ public class DependentUpdateActivity extends AppCompatActivity implements Depend
         CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
 
         NestedScrollView nestedScrollView = (NestedScrollView) findViewById(R.id.nestedscrollview_dependents);
+        //close keyboard if open
+        View view = this.getCurrentFocus();
+        // Check if no view has focus:
+        if (view != null) {
+            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
+            view.clearFocus();
+            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
 
         AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
         CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorlayout_dependents);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/ForgotPasswordActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/ForgotPasswordActivity.java
deleted file mode 100644
index af96586..0000000
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/ForgotPasswordActivity.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package br.ufpr.c3sl.agendador.agendador;
-
-import android.os.Bundle;
-import android.os.PersistableBundle;
-import android.support.v7.app.AppCompatActivity;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import br.ufpr.c3sl.agendador.agendador.presenters.ForgotPasswordPresenter;
-import br.ufpr.c3sl.agendador.agendador.presenters.PresenterManager;
-import br.ufpr.c3sl.agendador.agendador.views.ForgotPasswordView;
-
-/**
- * Created by Horstmann on 23/02/17.
- */
-
-
-
-public class ForgotPasswordActivity extends AppCompatActivity implements ForgotPasswordView {
-    private ForgotPasswordPresenter presenter;
-
-    private Button btn_send;
-    private EditText et_cpf;
-    private TextView tv_cpf, tv_cpf_warning;
-    private ProgressBar pb_waiting;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
-        super.onCreate(savedInstanceState);
-        if (savedInstanceState == null) {
-            presenter = new ForgotPasswordPresenter(this);
-        } else {
-            presenter = PresenterManager.getInstance().restorePresenter(savedInstanceState);
-            if(presenter == null)
-                presenter = new ForgotPasswordPresenter(this);
-        }
-
-        setContentView(R.layout.activity_login);
-
-        tv_cpf = (TextView) findViewById(R.id.tv_forgot_password_cpf);
-        tv_cpf_warning = (TextView) findViewById(R.id.tv_forgot_password_invalid_cpf);
-
-    }
-
-
-    @Override
-    public void setProgressBar(boolean enabled) {
-
-    }
-}
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/HomeActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/HomeActivity.java
index 9b12dac..aa344e0 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/HomeActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/HomeActivity.java
@@ -7,11 +7,11 @@ import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.design.widget.NavigationView;
 import android.support.design.widget.Snackbar;
+import android.support.v4.content.res.ResourcesCompat;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.AppCompatActivity;
@@ -137,7 +137,7 @@ public class HomeActivity extends AppCompatActivity implements HomeView,
         btn_schedule.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                Intent intent = new Intent(HomeActivity.this, CitizenActivity.class);
+                Intent intent = new Intent(HomeActivity.this, CitizenListActivity.class);
                 startActivity(intent);
             }
         });
@@ -157,15 +157,10 @@ public class HomeActivity extends AppCompatActivity implements HomeView,
     private void changeTextColor(){
         //Changing text style
         SpannableString text = new SpannableString(getString(R.string.schedules_more_information));
-        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
-            text.setSpan(new ForegroundColorSpan(getColor(R.color.colorGreen)), 123, 143, 0);
 
-            text.setSpan(new ForegroundColorSpan(getColor(R.color.colorGreen)), 88, 108, 0);
-        } else{
-            text.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.colorGreen)), 123, 143, 0);
+        text.setSpan(new ForegroundColorSpan(ResourcesCompat.getColor(getResources(), R.color.colorGreen, null)), 123, 143, 0);
 
-            text.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.colorGreen)), 88, 108, 0);
-        }
+        text.setSpan(new ForegroundColorSpan(ResourcesCompat.getColor(getResources(), R.color.colorGreen, null)), 88, 108, 0);
 
         tv_presentation.setText(text, TextView.BufferType.SPANNABLE);
     }
@@ -234,7 +229,7 @@ public class HomeActivity extends AppCompatActivity implements HomeView,
                 startActivity(intent);
                 break;
             case R.id.nav_schedule:
-                intent = new Intent(this, CitizenActivity.class);
+                intent = new Intent(this, CitizenListActivity.class);
                 startActivity(intent);
                 break;
             case R.id.nav_dependants:
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java
index e871966..bf28686 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java
@@ -7,11 +7,11 @@ import android.os.Bundle;
 import android.support.v4.content.res.ResourcesCompat;
 import android.support.v7.app.AppCompatActivity;
 import android.text.Editable;
+import android.text.InputFilter;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.TextWatcher;
 import android.text.style.StyleSpan;
-import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
@@ -66,7 +66,10 @@ public class LoginActivity extends AppCompatActivity implements LoginView {
         pb_waiting = (ProgressBar) findViewById(R.id.pb_loginact);
 
         et_cpf = (EditText) findViewById(R.id.et_loginact_cpf);
+
         et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+
         et_cpf.addTextChangedListener(new LoginChangeListener());
 
         et_password = (EditText) findViewById(R.id.et_loginact_password);
@@ -78,7 +81,8 @@ public class LoginActivity extends AppCompatActivity implements LoginView {
         tv_forgot_password.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                presenter.onForgotPasswordClicked();
+            Intent intent = new Intent(getBaseContext(), PasswordRetrievalActivity.class);
+            startActivity(intent);
             }
         });
 
@@ -151,16 +155,15 @@ public class LoginActivity extends AppCompatActivity implements LoginView {
 
     @Override
     public void setProgressBar(boolean enabled) {
-        ProgressBar pb_login = (ProgressBar) findViewById(R.id.pb_loginact);
         EditText et_cpf = (EditText) findViewById(R.id.et_loginact_cpf);
         EditText et_password = (EditText) findViewById(R.id.et_loginact_password);
 
         if (enabled) {
-            pb_login.setVisibility(View.VISIBLE);
+            pb_waiting.setVisibility(View.VISIBLE);
             et_cpf.setEnabled(false);
             et_password.setEnabled(false);
         } else {
-            pb_login.setVisibility(View.INVISIBLE);
+            pb_waiting.setVisibility(View.INVISIBLE);
             et_cpf.setEnabled(true);
             et_password.setEnabled(true);
         }
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java
index 4a3445a..9202316 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java
@@ -5,6 +5,7 @@ import android.annotation.TargetApi;
 import android.app.Activity;
 import android.app.FragmentManager;
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -20,10 +21,12 @@ import android.support.v4.widget.NestedScrollView;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.text.Editable;
+import android.text.InputFilter;
 import android.text.TextWatcher;
 import android.util.Log;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ImageButton;
@@ -144,11 +147,24 @@ public class NewDependentActivity extends AppCompatActivity  implements NewDepen
         isChangingPhoto = false;
         userImgHelper = new UserImgHelper(getBaseContext());
         et_disability.setEnabled(false);
+
         et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_phone.addTextChangedListener(Mask.insert("(##)####-####", et_phone));
-        et_phone2.addTextChangedListener(Mask.insert("(##)####-####", et_phone2));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+
+        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+
+        et_phone2.addTextChangedListener(Mask.insert("(##)#####-####", et_phone2));
+        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+
+
         et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+
+
         et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate));
+        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
+
         try{
             getSupportActionBar().setDisplayShowTitleEnabled(false);
             getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -490,7 +506,16 @@ public class NewDependentActivity extends AppCompatActivity  implements NewDepen
         CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
 
         NestedScrollView nestedScrollView = (NestedScrollView) findViewById(R.id.nestedscrollview_dependents);
-        nestedScrollView.fullScroll(View.FOCUS_UP);
+
+        //close keyboard if open
+        View view = this.getCurrentFocus();
+        // Check if no view has focus:
+        if (view != null) {
+            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
+            view.clearFocus();
+            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
+
 
         AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
         CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorlayout_dependents);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java
new file mode 100644
index 0000000..16ceb75
--- /dev/null
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java
@@ -0,0 +1,125 @@
+package br.ufpr.c3sl.agendador.agendador;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.content.res.ResourcesCompat;
+import android.support.v7.app.AppCompatActivity;
+import android.text.InputFilter;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import br.ufpr.c3sl.agendador.agendador.helpers.Mask;
+import br.ufpr.c3sl.agendador.agendador.presenters.ForgotPasswordPresenter;
+import br.ufpr.c3sl.agendador.agendador.presenters.PresenterManager;
+import br.ufpr.c3sl.agendador.agendador.views.ForgotPasswordView;
+
+/**
+ * Created by Horstmann on 23/02/17.
+ */
+
+
+
+public class PasswordRetrievalActivity extends AppCompatActivity implements ForgotPasswordView {
+    private ForgotPasswordPresenter presenter;
+
+    private Button bt_send;
+    private EditText et_cpf;
+    private TextView tv_cpf_warning;
+    private ProgressBar pb_waiting;
+
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (savedInstanceState == null) {
+            presenter = new ForgotPasswordPresenter(this);
+        } else {
+            presenter = PresenterManager.getInstance().restorePresenter(savedInstanceState);
+            if(presenter == null)
+                presenter = new ForgotPasswordPresenter(this);
+        }
+
+        setContentView(R.layout.activity_password_retrieval);
+
+        tv_cpf_warning = (TextView) findViewById(R.id.tv_passwd_retriev_invalid_cpf);
+
+        et_cpf = (EditText) findViewById(R.id.et_passwd_retriev_cpf);
+
+        et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+
+        pb_waiting = (ProgressBar) findViewById(R.id.pb_passwd_retriev_act);
+
+        bt_send = (Button) findViewById(R.id.bt_passwd_retriev_send);
+        Button bt_back = (Button) findViewById(R.id.bt_passwd_retriev_back);
+
+
+        bt_send.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                tv_cpf_warning.setVisibility(View.INVISIBLE);
+
+                onRequestSuccess();
+                onRequestFailure();
+                /*if(!et_cpf.getText().toString().replaceAll("\\s+", "").isEmpty() && !DateValidator.isValidCPF(et_cpf.getText().toString().replaceAll("\\.", "").replace("-",""))) {
+                    setProgressBar(true);
+                    presenter.requestNewPassword();
+                }
+                else{
+                    tv_cpf_warning.setVisibility(View.VISIBLE);
+                }*/
+            }
+        });
+
+        bt_back.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                onBackPressed();
+            }
+        });
+
+
+    }
+
+    @Override
+    public void onBackPressed() {
+        //-> if request is on the way, cancel
+
+        //-> back to prior activity. finish();
+        super.onBackPressed();
+    }
+
+    @Override
+    public void setProgressBar(boolean enabled) {
+        if(enabled){
+            pb_waiting.setVisibility(View.VISIBLE);
+            bt_send.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.disabled_container_shape, null));
+
+        }else{
+            pb_waiting.setVisibility(View.INVISIBLE);
+            bt_send.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.green_button_shape, null));
+        }
+        et_cpf.setEnabled(!enabled);
+        bt_send.setEnabled(!enabled);
+    }
+
+
+
+    public void onRequestFailure(){
+        Intent intent = new Intent(PasswordRetrievalActivity.this, RetrievalFailureActivity.class);
+        startActivity(intent);
+    }
+
+    public void onRequestSuccess(){
+        Intent intent = new Intent(PasswordRetrievalActivity.this, RetrievalSuccessActivity.class);
+        startActivity(intent);
+    }
+
+    @Override
+    public String getCpf() {
+        return et_cpf.getText().toString().replaceAll("\\.", "").replace("-","");
+    }
+}
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalFailureActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalFailureActivity.java
new file mode 100644
index 0000000..08b5e00
--- /dev/null
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalFailureActivity.java
@@ -0,0 +1,24 @@
+package br.ufpr.c3sl.agendador.agendador;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.ImageView;
+
+public class RetrievalFailureActivity extends AppCompatActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_retrieval_failure);
+
+        ImageView back = (ImageView) findViewById(R.id.bt_retriev_fail_back);
+        back.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                finish();
+            }
+        });
+
+    }
+}
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalSuccessActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalSuccessActivity.java
new file mode 100644
index 0000000..a6f66ca
--- /dev/null
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/RetrievalSuccessActivity.java
@@ -0,0 +1,22 @@
+package br.ufpr.c3sl.agendador.agendador;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+
+public class RetrievalSuccessActivity extends AppCompatActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_retrieval_success);
+        ImageView back = (ImageView) findViewById(R.id.bt_retrieval_succ_back);
+        back.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                finish();
+            }
+        });
+    }
+}
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java
index 2ecf99e..5ac2275 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java
@@ -8,6 +8,7 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
+import android.text.InputFilter;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
@@ -85,12 +86,20 @@ public class SignUpActivity extends AppCompatActivity implements SignupView {
         btn_signup = (Button) findViewById(R.id.btn_signup_signup);
 
         et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+
         loadCepData();
 
 
-        et_phone.addTextChangedListener(Mask.insert("(##)####-####", et_phone));
+        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+
         et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+
         et_birthday.addTextChangedListener(Mask.insert("##/##/####", et_birthday));
+        et_birthday.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
+
 
         btn_back.setOnClickListener(new View.OnClickListener() {
             @Override
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Mask.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Mask.java
index f2fa728..ebcb0a9 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Mask.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Mask.java
@@ -9,38 +9,80 @@ import android.text.TextWatcher;
 import android.widget.EditText;
 
 public abstract class Mask {
+
+    /**
+     *  Remove all symbols from masked string
+     */
     public static String unmask(String s) {
-        /**
-         * Remove all symbols
-         */
         return s.replaceAll("[.]", "").replaceAll("[-]", "")
                 .replaceAll("[/]", "").replaceAll("[(]", "")
                 .replaceAll("[)]", "");
     }
+
+
+    private static boolean isMaskSymbol(char c){
+        return c == '.' || c == '-' || c == '/' || c == '(' || c == ')';
+    }
+
+
     /**
      * Create the mask
      * REF: https://nuvemandroid.wordpress.com/2013/12/13/aplicacao-de-mascaras-em-formularios/
      */
     public static TextWatcher insert(final String mask, final EditText ediTxt) {
         return new TextWatcher() {
-            boolean isUpdating;
+            boolean isUpdating = false;
+            boolean isDeleting = false;
+            boolean reMask = false;
+            int pos = 0;
             String old = "";
+
             public void onTextChanged(CharSequence s, int start, int before,int count) {
-                String str = Mask.unmask(s.toString());
-                String mask2 = "";
+                if(!isUpdating && (count < before) || (start + count) < s.length()){
+                    isDeleting = true;
+                    pos = start + count;
+
+                }
+
+            }
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+                    if(count == 1 && after == 0 && isMaskSymbol(s.charAt(start))){
+                        reMask = true;
+                    }
+
+            }
+            public void afterTextChanged(Editable s) {
+                StringBuilder str = new StringBuilder(Mask.unmask(s.toString()));
+                StringBuilder checkMaskLastPos;
+
+
                 if (isUpdating) {
-                    old = str;
+                    old = str.toString();
                     isUpdating = false;
                     return;
                 }
+                StringBuilder mask2 = new StringBuilder("");
+
+                //if last position is a character mask related, remove it.
+                if(reMask && s.toString().length() > 0) {
+                    checkMaskLastPos = new StringBuilder(s.toString());
+                    if (isMaskSymbol(checkMaskLastPos.charAt(checkMaskLastPos.length() - 1))) {
+                        checkMaskLastPos.deleteCharAt(checkMaskLastPos.length() - 1);
+                        str = new StringBuilder(unmask(checkMaskLastPos.toString()));
+
+                    }
+                }
+
                 int i = 0;
-                if( str.length() > old.length()){
+                if( reMask || str.length() > old.length()){
                     for (char m : mask.toCharArray()) {
                         if (m != '#') {
-                            mask2 += m;
+                            mask2.append(m);
                         }else{
+                            mask2.append(str.charAt(i));
                             try {
-                                mask2 += str.charAt(i);
+                                //stop putting the mask when user string ends
+                                str.charAt(i+1);
                             } catch (Exception e) {
                                 break;
                             }
@@ -48,14 +90,24 @@ public abstract class Mask {
                         }
                     }
                 }else{
-                    mask2 = s.toString();
+
+                    mask2.append(s.toString());
                 }
+
+                //has to be set before setting text to prevent infinite recursion.
                 isUpdating = true;
-                ediTxt.setText(mask2);
-                ediTxt.setSelection(mask2.length());
+                ediTxt.setText(mask2.toString());
+
+                if(!isDeleting) {
+                    ediTxt.setSelection(mask2.length());
+                }
+                else {
+                    ediTxt.setSelection(pos);
+                }
+
+                reMask = false;
+                isDeleting = false;
             }
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-            public void afterTextChanged(Editable s) {}
         };
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/CitizensPresenter.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/CitizensPresenter.java
index a47630e..8f5f2b0 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/CitizensPresenter.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/CitizensPresenter.java
@@ -7,11 +7,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import br.ufpr.c3sl.agendador.agendador.CitizenActivity;
+import br.ufpr.c3sl.agendador.agendador.CitizenListActivity;
 import br.ufpr.c3sl.agendador.agendador.helpers.ObscuredSharedPreferences;
 import br.ufpr.c3sl.agendador.agendador.helpers.Utils;
 import br.ufpr.c3sl.agendador.agendador.models.CitizenCompact;
-import br.ufpr.c3sl.agendador.agendador.models.UserOutput;
 import br.ufpr.c3sl.agendador.agendador.network.ApiEndpoints;
 import br.ufpr.c3sl.agendador.agendador.network.ApiUtils;
 import okhttp3.Headers;
@@ -23,7 +22,7 @@ import retrofit2.Response;
  * Created by Lucas B. Cunha on 27/06/17.
  */
 
-public class CitizensPresenter extends BasePresenter<CitizenActivity> {
+public class CitizensPresenter extends BasePresenter<CitizenListActivity> {
 
     private CitizensPresenter citizensPresenter;
 
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/ForgotPasswordPresenter.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/ForgotPasswordPresenter.java
index 998b464..9e4a0f4 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/ForgotPasswordPresenter.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/ForgotPasswordPresenter.java
@@ -2,17 +2,35 @@ package br.ufpr.c3sl.agendador.agendador.presenters;
 
 import android.content.Context;
 
-import br.ufpr.c3sl.agendador.agendador.views.HomeView;
+import java.util.HashMap;
+import java.util.Map;
+
+import br.ufpr.c3sl.agendador.agendador.PasswordRetrievalActivity;
+import br.ufpr.c3sl.agendador.agendador.network.ApiEndpoints;
+import br.ufpr.c3sl.agendador.agendador.network.ApiUtils;
 
 /**
  * Created by Horstmann on 23/02/17.
  */
 
-public class ForgotPasswordPresenter extends BasePresenter<HomeView> {
+public class ForgotPasswordPresenter extends BasePresenter<PasswordRetrievalActivity> {
 
+    private ForgotPasswordPresenter presenter;
 
     public ForgotPasswordPresenter(Context context) {
         this.context = context;
+        presenter = this;
+    }
+
+
+    public void requestNewPassword(){
+        Map<String, String> header = new HashMap<>();
+        header.put("Content-Type", "application/json");
+        final ApiEndpoints service = ApiUtils.request(header);
+
+        String cpf  = presenter.view().getCpf();
+        // TODO: 21/09/17  request new password...
+
     }
 
     @Override
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/LoginPresenter.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/LoginPresenter.java
index fa36144..6302e15 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/LoginPresenter.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/LoginPresenter.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import br.ufpr.c3sl.agendador.agendador.CepActivity;
-import br.ufpr.c3sl.agendador.agendador.ForgotPasswordActivity;
 import br.ufpr.c3sl.agendador.agendador.helpers.ObscuredSharedPreferences;
 import br.ufpr.c3sl.agendador.agendador.helpers.Utils;
 import br.ufpr.c3sl.agendador.agendador.models.Account;
@@ -77,10 +76,7 @@ public class LoginPresenter extends BasePresenter<LoginView> {
         Intent intent = new Intent(context, CepActivity.class);
         context.startActivity(intent);
     }
-    public void onForgotPasswordClicked(){
-        Intent intent = new Intent(context, ForgotPasswordActivity.class);
-        context.startActivity(intent);
-    }
+
 
     public void onLoginClicked(String cpf, String password) {
         Map<String, String> header = new HashMap<>();
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/AccountView.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/AccountView.java
index c9cf14a..57fc19c 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/AccountView.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/AccountView.java
@@ -26,7 +26,6 @@ public interface AccountView {
     void setNoConnection(boolean enabled);
 
 
-
     void enableButtonEdit(boolean enable);
 
     void enableAllFields(boolean enable);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/ForgotPasswordView.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/ForgotPasswordView.java
index 717f4cb..b77b7dc 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/ForgotPasswordView.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/views/ForgotPasswordView.java
@@ -7,4 +7,11 @@ package br.ufpr.c3sl.agendador.agendador.views;
 public interface ForgotPasswordView {
 
     void setProgressBar(boolean enabled);
+
+    void onRequestFailure();
+
+    void onRequestSuccess();
+
+    String getCpf();
+
 }
diff --git a/app/src/main/res/drawable-hdpi/ic_back_arrow_black.png b/app/src/main/res/drawable-hdpi/ic_back_arrow_black.png
new file mode 100644
index 0000000000000000000000000000000000000000..1477de7947a53b97391082047f38cfc1f2528171
GIT binary patch
literal 298
zcmV+_0oDGAP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0002-Nkl<Zc-rll
zO$x#=6ok`-dJIv5F1l*|j-W0IdM~L`5n6BSO9>*9x@l8=FatwN7LS?qYoHYZf*=Tj
z5=kjlk`ElSXCZtWT>3R`JKq{(9^RqEo@MyptF?B`2Aj|D&bbxaoo5{$*Z><~18jiJ
zS8TM_HC?xPp3hU5=Fd{@yf4s@ZwY-KT%s@h6b>Z@7077N@fYF8D$tdnA*Vis=z33O
znqQ6e9&{xl1!_7zH&V()Dvx>+#c-l0b18~q$>virh7-#Y5u7SkC4duf0#3jQI8BC=
wzo)gGV5ApLEPw94;}pWPRVE+^f}nra6Hg~@W!%%HmjD0&07*qoM6N<$f{kT%MgRZ+

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-mdpi/ic_back_arrow_black.png b/app/src/main/res/drawable-mdpi/ic_back_arrow_black.png
new file mode 100644
index 0000000000000000000000000000000000000000..016dd51e24599a3be73967329801f65714cc816f
GIT binary patch
literal 200
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJeoq(2kcwN$2@<S}6Ev8EgM(GM
zxw%^zH{ZE&qe4l*pJ5~Wks@K?$ukvrQrh`uJauz(yXcU3Ebz3uuKd4g%!SMs7#$Ro
zm5VmaoH<iTby{#w<Flm#Zy6ROJ!LFq;Bz;b5yar|Y~mcg4Hin1@;VEy2rllE2<l^)
wHo>tZf6_r2#zR0#(K_jXjy&t)hA0MxNTxNXjLs^*1v-tv)78&qol`;+0K$1f^#A|>

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xhdpi/ic_back_arrow_black.png b/app/src/main/res/drawable-xhdpi/ic_back_arrow_black.png
new file mode 100644
index 0000000000000000000000000000000000000000..87ab4a516ea285f8726ae7b37984840d2389fed3
GIT binary patch
literal 300
zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=pFLe1Ln>~)o#n{Y<RId(RLpgH
zM*`mj<Hgz6b#GNRFItrPVA0g$CvJb^W#(KWc5}&p+aJ=R4{cLj47-5385rvPrll4q
zpYd6{XY00tbFo)kD^69vU!B%fH9PF*@hi98<QIDHGmYN*X_J`DXPfy-{WhOYC?g1a
zm&%*vlPx`3VpnuNu8@3H`%hoZbJEtRpZAzftlc_ca{N^`iJ+EyOf^CaBU#QD-O;?V
zBy-oRubv<DnqnGjBd1LctbeG=B-r7=q9oAB;i3Rx*1WGiq$Xt@D;V-e<*KOT)IZrQ
kQ$M}s$a=~Mbg+U!d9mTl|L-n7n*(ycr>mdKI;Vst04?Z!>i_@%

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xxhdpi/ic_back_arrow_black.png b/app/src/main/res/drawable-xxhdpi/ic_back_arrow_black.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1743b4b5dabb9853e5ea92ed730abe2f1aa7aef
GIT binary patch
literal 518
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U_9&T;uunK>+KzHZ>B(*w!-d3
zn@(@DYk1%!u!rZ_IoH(+IhUtvG)1{~JKWl)5moYY+gxThrHPt`>1y@-e`YeeOWgZ@
z=CH=%sUS<hV8+2N4k1IS-mu+w-xW?vbuWxpvRwa1qHg)+O5V>x-U6Qc9`YyuNc=6Q
z{%-s2x58ehJgp}`^q(dWzj(3C7Gv3eC7kP8WVU<`=5%y#S32!zeczYk|Eh}_Z#?wW
z-};>0`awA3x$&Q<wc8ZUZY`9(!1uPHEQ5WEv-JYmTa0gkToiQfx-if7y>a>W>;4(}
zZN7PDoyZHp8I@awxhuFn2Rz#O`up$b)GO!q&nV=)8kFhI*tvCagT0=@oCBFV+UtWI
zl-QaN-r6)Rpo2+mUCZWF?S&q!I!hK8{3*U+H?8#0&->y}%}NwyTa)uQ=~#2fANzL7
z;%imy_MijzmCh_(T<|7!M(KTJl`9u_w5+;u>7Hz?Mq}TL4kFMCan(8P-*de5CiXo_
zp0qY>we}_!t54gfa+W^nj~0HFA@lFTDgOn^w>;MXagA!kPguyGdBU7<Z(^>`l&O&*
NAx~F7mvv4FO#q~%@FD;J

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable/disabled_container_shape.xml b/app/src/main/res/drawable/disabled_container_shape.xml
new file mode 100644
index 0000000..4f560f6
--- /dev/null
+++ b/app/src/main/res/drawable/disabled_container_shape.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle"   >
+
+    <solid
+        android:color="@color/colorDisabled" >
+    </solid>
+
+    <corners
+        android:radius="4dp"   >
+    </corners>
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_account_view.xml b/app/src/main/res/layout/activity_account_view.xml
index c4e8b20..4096d34 100644
--- a/app/src/main/res/layout/activity_account_view.xml
+++ b/app/src/main/res/layout/activity_account_view.xml
@@ -95,6 +95,7 @@
                             android:layout_marginLeft="12dp"
                             android:layout_marginRight="12dp"
                             android:text="@string/form_required_name"
+                            android:maxLength="@integer/max_length_name"
                             android:textColor="@color/colorBlack"
                             android:textSize="16sp" />
 
diff --git a/app/src/main/res/layout/activity_citizen.xml b/app/src/main/res/layout/activity_citizen.xml
index ae5c90a..e395bad 100644
--- a/app/src/main/res/layout/activity_citizen.xml
+++ b/app/src/main/res/layout/activity_citizen.xml
@@ -23,7 +23,7 @@
         android:id="@+id/rv_citizens_citizens"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        tools:context="br.ufpr.c3sl.agendador.agendador.CitizenActivity"
+        tools:context="br.ufpr.c3sl.agendador.agendador.CitizenListActivity"
         android:layout_below="@+id/dependents_description"
         android:layout_alignParentStart="true" />
 
diff --git a/app/src/main/res/layout/activity_dependents.xml b/app/src/main/res/layout/activity_dependents.xml
index 1747d99..1e36864 100644
--- a/app/src/main/res/layout/activity_dependents.xml
+++ b/app/src/main/res/layout/activity_dependents.xml
@@ -95,6 +95,7 @@
                             android:layout_marginLeft="12dp"
                             android:layout_marginRight="12dp"
                             android:text="@string/form_required_name"
+                            android:maxLength="@integer/max_length_name"
                             android:textColor="@color/colorBlack"
                             android:textSize="16sp" />
 
diff --git a/app/src/main/res/layout/activity_dependents_list.xml b/app/src/main/res/layout/activity_dependents_list.xml
index 454baa2..408641f 100644
--- a/app/src/main/res/layout/activity_dependents_list.xml
+++ b/app/src/main/res/layout/activity_dependents_list.xml
@@ -38,7 +38,7 @@
             android:id="@+id/rv_dependents"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            tools:context="br.ufpr.c3sl.agendador.agendador.CitizenActivity"
+            tools:context="br.ufpr.c3sl.agendador.agendador.CitizenListActivity"
             android:layout_below="@+id/dependents_description"
             android:layout_alignParentStart="true"
             android:layout_marginTop="27dp" />
diff --git a/app/src/main/res/layout/activity_forgot_password.xml b/app/src/main/res/layout/activity_password_retrieval.xml
similarity index 61%
rename from app/src/main/res/layout/activity_forgot_password.xml
rename to app/src/main/res/layout/activity_password_retrieval.xml
index e242d90..8fd0cc2 100644
--- a/app/src/main/res/layout/activity_forgot_password.xml
+++ b/app/src/main/res/layout/activity_password_retrieval.xml
@@ -21,9 +21,12 @@
             android:textColor="@color/colorGreen"
             android:textSize="16sp"
             android:layout_marginTop="56dp"
+            android:layout_marginEnd="10dp"
+            android:layout_marginStart="10dp"
             android:layout_gravity="center"
             android:text="Esqueceu Sua Senha?"/>
         <TextView
+            android:id="@+id/tv_passwd_retrieval_description"
             android:layout_width="280dp"
             android:layout_height="wrap_content"
             android:textColor="@color/colorBlack"
@@ -33,27 +36,31 @@
             android:text="Insira seu CPF e enviaremos um email com as instruções de recuperação" />
 
         <TextView
+            android:id="@+id/tv_passwd_retriev_invalid_cpf"
             android:text="@string/invalid_cpf"
             android:layout_width="290dp"
             android:layout_height="wrap_content"
-            android:id="@+id/tv_forgot_password_invalid_cpf"
-            android:layout_gravity="center"
             android:textAlignment="center"
             android:textSize="15sp"
             android:textColor="@color/colorRed"
             android:layout_marginTop="18dp"
+            android:layout_marginEnd="10dp"
+            android:layout_marginStart="10dp"
+            android:layout_gravity="center"
             android:visibility="invisible"/>
 
         <LinearLayout
-            android:id="@+id/ll_forgot_password_cpf"
+            android:id="@+id/ll_passwd_retriev_cpf"
             android:layout_width="290dp"
             android:layout_height="45dp"
             android:layout_marginTop="10dp"
-            android:layout_marginStart="50dp"
+            android:layout_marginEnd="10dp"
+            android:layout_marginStart="10dp"
+            android:layout_gravity="center"
             android:background="@drawable/white_container_shape">
 
             <TextView
-                android:id="@+id/tv_forgot_password_cpf"
+                android:id="@+id/tv_passwd_retriev_cpf"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/CPF"
@@ -65,24 +72,46 @@
 
 
             <EditText
-                android:id="@+id/et_forgot_password_cpf"
+                android:id="@+id/et_passwd_retriev_cpf"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:layout_gravity="center"
+                android:inputType="number"
                 android:textSize="16sp"/>
 
         </LinearLayout>
 
-        <Button
-            android:layout_width="100dp"
+
+        <RelativeLayout
+            android:id="@+id/ll_passwd_retriev_bts"
+            android:layout_width="290dp"
             android:layout_height="50dp"
-            android:id="@+id/btn_forgot_passwordact_send"
-            android:layout_marginTop="30dp"
-            android:textColor="@color/colorBlack"
-            android:background="@drawable/green_button_shape"
-            android:text="@string/send"
-            android:layout_gravity="center_horizontal"/>
+            android:layout_marginEnd="10dp"
+            android:layout_marginStart="10dp"
+            android:layout_gravity="center"
+            android:layout_marginTop="50dp">
+
+            <Button
+                android:id="@+id/bt_passwd_retriev_back"
+                android:layout_width="100dp"
+                android:layout_height="50dp"
+                android:background="@drawable/green_button_shape"
+                android:gravity="center"
+                android:text="@string/back"
+                android:textColor="@color/colorBlack" />
+
+            <Button
+                android:id="@+id/bt_passwd_retriev_send"
+                android:layout_width="100dp"
+                android:layout_height="50dp"
+                android:background="@drawable/green_button_shape"
+                android:gravity="center"
+                android:text="@string/send"
+                android:textColor="@color/colorBlack"
+                android:layout_alignParentTop="true"
+                android:layout_alignParentEnd="true" />
 
+        </RelativeLayout>
 
     </LinearLayout>
 
@@ -90,11 +119,9 @@
     <ProgressBar
         android:layout_width="80dp"
         android:layout_height="80dp"
-        android:id="@+id/pb_forgot_paswordact"
+        android:id="@+id/pb_passwd_retriev_act"
         android:layout_centerHorizontal="true"
         android:indeterminate="true"
-        android:indeterminateTintMode="src_atop"
-        android:indeterminateTint="@color/colorGreen"
         android:layout_centerVertical="true"
         android:visibility="invisible"
         />
diff --git a/app/src/main/res/layout/activity_retrieval_failure.xml b/app/src/main/res/layout/activity_retrieval_failure.xml
new file mode 100644
index 0000000..c3d3322
--- /dev/null
+++ b/app/src/main/res/layout/activity_retrieval_failure.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/activity_main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/colorGreen"
+    tools:context="br.ufpr.c3sl.agendador.agendador.MainActivity">
+
+    <ImageView
+        android:id="@+id/bt_retriev_fail_back"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_back_arrow"
+        android:layout_marginTop="15dp"
+        android:layout_marginStart="15dp"/>
+
+    <ImageView
+        android:id="@+id/img_retrieval_fail"
+        android:layout_width="151.5dp"
+        android:layout_height="141.5dp"
+        android:src="@drawable/img_mainact_logo"
+        android:layout_marginTop="87.5dp"
+        android:layout_centerHorizontal="true"/>
+
+    <TextView
+        android:id="@+id/tv_retrieval_fail_error"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="35dp"
+        android:layout_gravity="center"
+        android:layout_marginEnd="65dp"
+        android:layout_marginStart="65dp"
+        android:text="@string/email_not_found"
+        android:textAlignment="center"
+        android:textSize="16sp"
+        android:textColor="@color/colorWhite"
+        android:layout_below="@+id/img_retrieval_fail"/>
+</RelativeLayout>
diff --git a/app/src/main/res/layout/activity_retrieval_success.xml b/app/src/main/res/layout/activity_retrieval_success.xml
new file mode 100644
index 0000000..c657baa
--- /dev/null
+++ b/app/src/main/res/layout/activity_retrieval_success.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/colorGray">
+
+
+    <ImageView
+        android:id="@+id/bt_retrieval_succ_back"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_back_arrow_black"
+        android:layout_marginTop="15dp"
+        android:layout_marginStart="15dp"/>
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true">
+
+        <ImageView
+            android:layout_width="120.5dp"
+            android:layout_height="112.5sp"
+            android:layout_gravity="center"
+            android:layout_marginTop="40dp"
+            android:src="@drawable/img_signupact_logo" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="@color/colorGreen"
+            android:textSize="16sp"
+            android:layout_marginTop="70dp"
+            android:layout_gravity="center"
+            android:text="@string/password_retrieval_description"/>
+
+        <TextView
+            android:layout_width="280dp"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:text="@string/password_retrieval_success"
+            android:textAlignment="center"
+            android:textColor="@color/colorBlack"
+            android:textSize="14sp" />
+
+
+    </LinearLayout>
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_signup.xml b/app/src/main/res/layout/activity_signup.xml
index 77050eb..05f7e4b 100644
--- a/app/src/main/res/layout/activity_signup.xml
+++ b/app/src/main/res/layout/activity_signup.xml
@@ -55,6 +55,7 @@
                         android:text="@string/signup_name"
                         android:textColor="@color/colorGreen"
                         android:textSize="16sp"
+                        android:maxLength="@integer/max_length_name"
                         android:layout_gravity="center_vertical"
                         android:layout_marginRight="12dp"
                         android:layout_marginLeft="12dp"/>
@@ -581,8 +582,8 @@
                 android:background="@drawable/green_button_shape"
                 android:layout_alignBaseline="@+id/btn_signup_back"
                 android:layout_alignBottom="@+id/btn_signup_back"
-                android:layout_alignParentRight="true"
-                android:layout_marginRight="40dp"
+                android:layout_alignParentEnd="true"
+                android:layout_marginEnd="40dp"
                 android:layout_marginBottom="23dp"/>
 
         </RelativeLayout>
diff --git a/app/src/main/res/values/integer.xml b/app/src/main/res/values/integer.xml
new file mode 100644
index 0000000..d0c1abf
--- /dev/null
+++ b/app/src/main/res/values/integer.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <integer name="max_length_name">150</integer>
+
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a924522..8824cb9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,7 +14,7 @@
     <string name="cep">CEP</string>
     <string name="form_required_email">E-mail*</string>
     <string name="form_email">E-mail</string>
-    <string name="signup_password">Senha*</string>
+    <string name="signup_password">Senha</string>
     <string name="signup_confirmPassword">Confirmar Senha</string>
     <string name="signup">Cadastrar</string>
     <string name="back">Voltar</string>
@@ -150,7 +150,7 @@
     <string name="scheduling_type_hint">Selecione o tipo</string>
     <string name="scheduling_location_hint">Selecione o local</string>
     <string name="list_item_absences">Limite de faltas: </string>
-    <string name="dialog_term_error">Ocorreu um erro ao carregar, por favor:\n* Verifique sua conexão com a internet;\n* Ou ente novamente mais tarde.</string>
+    <string name="dialog_term_error">Ocorreu um erro ao carregar, por favor:\n* Verifique sua conexão com a internet;\n* Ou tente novamente mais tarde.</string>
     <string name="citizen_description">Selecione quem será atendido:</string>
     <string name="no_available_hint">Nenhum Disponível</string>
     <string name="schedule_time_dialog">Selecione o horário do atendimento:</string>
@@ -173,4 +173,7 @@
     <string name="dependents_description">Selecione o dependente:</string>
     <string name="save">Salvar</string>
     <string name="blocked">bloqueado</string>
+    <string name="email_not_found">Não encontramos seu e-mail, por favor vá até um posto de atendimento para recuperar sua senha</string>
+    <string name="password_retrieval_description">E-mail enviado com sucesso:</string>
+    <string name="password_retrieval_success">Um e-mail foi enviado com instruções para recuperação da sua senha, aguarde alguns minutos. Caso não encontre o e-mail verifique sua caixa de spam.</string>
 </resources>
-- 
GitLab


From ee6baa5c99ea1f3c68096b9987224d0a8d38ef0d Mon Sep 17 00:00:00 2001
From: "Lucas B. Cunha" <lbc16@inf.ufpr.br>
Date: Mon, 25 Sep 2017 10:24:43 -0300
Subject: [PATCH 2/2] Issue AGILE#155: Changed mask string to constant

Signed-off-by: Lucas B. Cunha <lbc16@inf.ufpr.br>
---
 .../agendador/agendador/AccountActivity.java  | 22 ++++++++--------
 .../c3sl/agendador/agendador/CepActivity.java |  5 ++--
 .../agendador/DependentUpdateActivity.java    | 24 ++++++++----------
 .../agendador/agendador/LoginActivity.java    |  4 +--
 .../agendador/NewDependentActivity.java       | 25 ++++++++-----------
 .../agendador/PasswordRetrievalActivity.java  |  5 ++--
 .../agendador/agendador/SignUpActivity.java   | 18 ++++++-------
 .../agendador/agendador/helpers/Utils.java    |  6 ++++-
 .../agendador/models/DependentCreation.java   |  2 +-
 .../agendador/agendador/models/UserData.java  |  2 +-
 .../agendador/models/UserOutput.java          |  4 +--
 .../agendador/presenters/SignUpPresenter.java |  2 +-
 12 files changed, 60 insertions(+), 59 deletions(-)

diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java
index 7ef5cba..3d16d8d 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/AccountActivity.java
@@ -183,20 +183,20 @@ public class AccountActivity extends AppCompatActivity implements AccountView {
 
         userImgHelper = new UserImgHelper(getBaseContext());
 
-        et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+        et_cep.addTextChangedListener(Mask.insert(Utils.CEP_MASK, et_cep));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CEP_MASK.length())});
 
-        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
-        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+        et_phone.addTextChangedListener(Mask.insert(Utils.PHONE_MASK, et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.PHONE_MASK.length())});
 
-        et_phone2.addTextChangedListener(Mask.insert("(##)#####-####", et_phone2));
-        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+        et_phone2.addTextChangedListener(Mask.insert(Utils.PHONE_MASK, et_phone2));
+        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.PHONE_MASK.length())});
 
-        et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
-        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+        et_cpf.addTextChangedListener(Mask.insert(Utils.CPF_MASK, et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.length())});
 
-        et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate));
-        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
+        et_birthdate.addTextChangedListener(Mask.insert(Utils.BIRTH_DAY_MASK, et_birthdate));
+        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.BIRTH_DAY_MASK.length())});
 
         loadData();
 
@@ -869,7 +869,7 @@ public class AccountActivity extends AppCompatActivity implements AccountView {
 
         values.put(Utils.NAME, et_name.getText().toString());
         values.put(Utils.RG, et_rg.getText().toString());
-        values.put(Utils.BIRTH_DATE, DateValidator.stringToDate(et_birthdate.getText().toString(), false));
+        values.put(Utils.BIRTH_DAY, DateValidator.stringToDate(et_birthdate.getText().toString(), false));
 
         if (rb_no.isChecked()) {
             values.put(Utils.PCD, null);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java
index 3164509..58064b7 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/CepActivity.java
@@ -13,6 +13,7 @@ import android.widget.TextView;
 
 import br.ufpr.c3sl.agendador.agendador.helpers.Mask;
 import br.ufpr.c3sl.agendador.agendador.helpers.ConnectionErrorDialog;
+import br.ufpr.c3sl.agendador.agendador.helpers.Utils;
 import br.ufpr.c3sl.agendador.agendador.presenters.CepPresenter;
 import br.ufpr.c3sl.agendador.agendador.presenters.PresenterManager;
 import br.ufpr.c3sl.agendador.agendador.views.CepView;
@@ -47,8 +48,8 @@ public class CepActivity extends AppCompatActivity implements CepView {
         pb_waiting = (ProgressBar) findViewById(R.id.pb_cepact);
 
         et_cep = (EditText) findViewById(R.id.et_cepact_cep);
-        et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+        et_cep.addTextChangedListener(Mask.insert(Utils.CEP_MASK, et_cep));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.length())});
 
         et_cep.addTextChangedListener(new CepChangeListener());
 
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java
index 4b62b0b..f04eaf2 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/DependentUpdateActivity.java
@@ -22,7 +22,6 @@ import android.support.v7.widget.Toolbar;
 import android.text.Editable;
 import android.text.InputFilter;
 import android.text.TextWatcher;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -158,21 +157,20 @@ public class DependentUpdateActivity extends AppCompatActivity implements Depend
         userImgHelper = new UserImgHelper(getBaseContext());
         et_disability.setEnabled(false);
 
-        et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+        et_cep.addTextChangedListener(Mask.insert(Utils.CEP_MASK, et_cep));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CEP_MASK.length())});
 
-        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
-        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+        et_phone.addTextChangedListener(Mask.insert(Utils.PHONE_MASK, et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.PHONE_MASK.length())});
 
-        et_phone2.addTextChangedListener(Mask.insert("(##)#####-####", et_phone2));
-        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+        et_phone2.addTextChangedListener(Mask.insert(Utils.PHONE_MASK, et_phone2));
+        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.PHONE_MASK.length())});
 
-        et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
-        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+        et_cpf.addTextChangedListener(Mask.insert(Utils.CPF_MASK, et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.length())});
 
-
-        et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate));
-        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
+        et_birthdate.addTextChangedListener(Mask.insert(Utils.BIRTH_DAY_MASK, et_birthdate));
+        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.BIRTH_DAY_MASK.length())});
 
         try{
             getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -544,7 +542,7 @@ public class DependentUpdateActivity extends AppCompatActivity implements Depend
 
         values.put(Utils.RG, et_rg.getText().toString().trim());
 
-        values.put(Utils.BIRTH_DATE, DateValidator.stringToDate(et_birthdate.getText().toString(), false));
+        values.put(Utils.BIRTH_DAY, DateValidator.stringToDate(et_birthdate.getText().toString(), false));
 
         values.put(Utils.CEP, Mask.unmask(et_cep.getText().toString()));
 
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java
index bf28686..1842ca2 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/LoginActivity.java
@@ -67,8 +67,8 @@ public class LoginActivity extends AppCompatActivity implements LoginView {
 
         et_cpf = (EditText) findViewById(R.id.et_loginact_cpf);
 
-        et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
-        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+        et_cpf.addTextChangedListener(Mask.insert(Utils.CPF_MASK, et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.length())});
 
         et_cpf.addTextChangedListener(new LoginChangeListener());
 
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java
index 9202316..065a2f1 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/NewDependentActivity.java
@@ -23,7 +23,6 @@ import android.support.v7.widget.Toolbar;
 import android.text.Editable;
 import android.text.InputFilter;
 import android.text.TextWatcher;
-import android.util.Log;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
@@ -49,7 +48,6 @@ import br.ufpr.c3sl.agendador.agendador.helpers.UserImgHelper;
 import br.ufpr.c3sl.agendador.agendador.helpers.Utils;
 import br.ufpr.c3sl.agendador.agendador.helpers.adapters.PhotoSelectionAdapter;
 import br.ufpr.c3sl.agendador.agendador.models.FullDependent;
-import br.ufpr.c3sl.agendador.agendador.models.UserOutput;
 import br.ufpr.c3sl.agendador.agendador.presenters.NewDependentPresenter;
 import br.ufpr.c3sl.agendador.agendador.presenters.PresenterManager;
 import br.ufpr.c3sl.agendador.agendador.views.NewDependentsView;
@@ -148,22 +146,21 @@ public class NewDependentActivity extends AppCompatActivity  implements NewDepen
         userImgHelper = new UserImgHelper(getBaseContext());
         et_disability.setEnabled(false);
 
-        et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
 
-        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
-        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+        et_cep.addTextChangedListener(Mask.insert(Utils.CEP_MASK, et_cep));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CEP_MASK.length())});
 
-        et_phone2.addTextChangedListener(Mask.insert("(##)#####-####", et_phone2));
-        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+        et_phone.addTextChangedListener(Mask.insert(Utils.PHONE_MASK, et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.PHONE_MASK.length())});
 
+        et_phone2.addTextChangedListener(Mask.insert(Utils.PHONE_MASK, et_phone2));
+        et_phone2.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.PHONE_MASK.length())});
 
-        et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
-        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+        et_cpf.addTextChangedListener(Mask.insert(Utils.CPF_MASK, et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.length())});
 
-
-        et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate));
-        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
+        et_birthdate.addTextChangedListener(Mask.insert(Utils.BIRTH_DAY_MASK, et_birthdate));
+        et_birthdate.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.BIRTH_DAY_MASK.length())});
 
         try{
             getSupportActionBar().setDisplayShowTitleEnabled(false);
@@ -457,7 +454,7 @@ public class NewDependentActivity extends AppCompatActivity  implements NewDepen
         if(!et_rg.getText().toString().isEmpty())
         values.put(Utils.RG, et_rg.getText().toString().trim());
 
-        values.put(Utils.BIRTH_DATE, DateValidator.stringToDate(et_birthdate.getText().toString(), false));
+        values.put(Utils.BIRTH_DAY, DateValidator.stringToDate(et_birthdate.getText().toString(), false));
 
         if (rb_no.isChecked()) {
             values.put(Utils.PCD, null);
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java
index 16ceb75..2488fd8 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java
@@ -12,6 +12,7 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 
 import br.ufpr.c3sl.agendador.agendador.helpers.Mask;
+import br.ufpr.c3sl.agendador.agendador.helpers.Utils;
 import br.ufpr.c3sl.agendador.agendador.presenters.ForgotPasswordPresenter;
 import br.ufpr.c3sl.agendador.agendador.presenters.PresenterManager;
 import br.ufpr.c3sl.agendador.agendador.views.ForgotPasswordView;
@@ -48,8 +49,8 @@ public class PasswordRetrievalActivity extends AppCompatActivity implements Forg
 
         et_cpf = (EditText) findViewById(R.id.et_passwd_retriev_cpf);
 
-        et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
-        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+        et_cpf.addTextChangedListener(Mask.insert(Utils.CPF_MASK, et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.length())});
 
         pb_waiting = (ProgressBar) findViewById(R.id.pb_passwd_retriev_act);
 
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java
index 5ac2275..c2220f5 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/SignUpActivity.java
@@ -85,20 +85,20 @@ public class SignUpActivity extends AppCompatActivity implements SignupView {
         btn_back = (Button) findViewById(R.id.btn_signup_back);
         btn_signup = (Button) findViewById(R.id.btn_signup_signup);
 
-        et_cep.addTextChangedListener(Mask.insert("#####-###", et_cep));
-        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter("#####-###".length())});
+        et_cep.addTextChangedListener(Mask.insert(Utils.CEP_MASK, et_cep));
+        et_cep.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CEP_MASK.length())});
 
         loadCepData();
 
 
-        et_phone.addTextChangedListener(Mask.insert("(##)#####-####", et_phone));
-        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter("(##)#####-####".length())});
+        et_phone.addTextChangedListener(Mask.insert(Utils.PHONE_MASK, et_phone));
+        et_phone.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.PHONE_MASK.length())});
 
-        et_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf));
-        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter("###.###.###-##".length())});
+        et_cpf.addTextChangedListener(Mask.insert(Utils.CPF_MASK, et_cpf));
+        et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.length())});
 
-        et_birthday.addTextChangedListener(Mask.insert("##/##/####", et_birthday));
-        et_birthday.setFilters(new InputFilter[]{new InputFilter.LengthFilter("##/##/####".length())});
+        et_birthday.addTextChangedListener(Mask.insert(Utils.BIRTH_DAY_MASK, et_birthday));
+        et_birthday.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.BIRTH_DAY_MASK.length())});
 
 
         btn_back.setOnClickListener(new View.OnClickListener() {
@@ -308,7 +308,7 @@ public class SignUpActivity extends AppCompatActivity implements SignupView {
         HashMap<String,String> values = new HashMap<String,String>();
 
         values.put(Utils.CPF,Mask.unmask(et_cpf.getText().toString()));
-        values.put(Utils.BIRTH_DATE, DateValidator.stringToDate(et_birthday.getText().toString(),false));
+        values.put(Utils.BIRTH_DAY, DateValidator.stringToDate(et_birthday.getText().toString(),false));
         values.put(Utils.NAME,et_name.getText().toString());
         values.put(Utils.CEP,Mask.unmask(et_cep.getText().toString()));
         values.put(Utils.PASSWORD_CONFIRMATION,et_password_confirm.getText().toString());
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Utils.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Utils.java
index 2c172ad..3eaaae5 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Utils.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Utils.java
@@ -74,7 +74,7 @@ public class Utils {
     public static final String ADDRESS_COMPLEMENT = "address.complement";
     public static final String CREATED_AT = "created_at";
     public static final String CPF = "cpf";
-    public static final String BIRTH_DATE = "birth_date";
+    public static final String BIRTH_DAY = "birth_date";
     public static final String CITY_NAME = "city.name";
     public static final String STATE_NAME = "state.name";
     public static final String STATE_ABBREVIATION = "state.abbreviation";
@@ -91,6 +91,10 @@ public class Utils {
     public static final String PASSWORD_CONFIRMATION = "password_confirmation";
     public static final String CURRENT_PASSWORD = "current_password";
     public static final int NO_ID = 0;
+    public static final String CEP_MASK = "#####-###";
+    public static final String PHONE_MASK = "(##)#####-####";
+    public static final String CPF_MASK = "###.###.###-##";
+    public static final String BIRTH_DAY_MASK = "##/##/####";
 
     public static int getPixelValue(int dp, Context context) {
         Resources resources = context.getResources();
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/DependentCreation.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/DependentCreation.java
index 071c148..4161cb2 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/DependentCreation.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/DependentCreation.java
@@ -77,7 +77,7 @@ public class DependentCreation {
             this.phone1 = values.get(Utils.PHONE_1);
             this.phone2 = values.get(Utils.PHONE_2);
             this.name = values.get(Utils.NAME);
-            this.birthDate = values.get(Utils.BIRTH_DATE);
+            this.birthDate = values.get(Utils.BIRTH_DAY);
             this.cep = values.get(Utils.CEP);
             this.addressComplement = values.get(Utils.ADDRESS_COMPLEMENT);
             this.active = values.get(Utils.ACTIVE).equals("true");
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserData.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserData.java
index b671ea6..bfc9d7c 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserData.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserData.java
@@ -56,7 +56,7 @@ public class UserData {
         this.mPhone1 = values.get(Utils.PHONE_1);
         this.mPhone2 = values.get(Utils.PHONE_2);
         this.mName = values.get(Utils.NAME);
-        this.mBirth_Date = values.get(Utils.BIRTH_DATE);
+        this.mBirth_Date = values.get(Utils.BIRTH_DAY);
         this.mCep = values.get(Utils.CEP);
         this.mAddressComplement = values.get(Utils.ADDRESS_COMPLEMENT);
 
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserOutput.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserOutput.java
index dfab797..65ac748 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserOutput.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/models/UserOutput.java
@@ -100,7 +100,7 @@ public class UserOutput implements Parcelable {
         this.mPhone1 = values.get(Utils.PHONE_1);
         this.mPhone2 = values.get(Utils.PHONE_2);
         this.mName = values.get(Utils.NAME);
-        this.mBirth_Date = values.get(Utils.BIRTH_DATE);
+        this.mBirth_Date = values.get(Utils.BIRTH_DAY);
         this.mCep = values.get(Utils.CEP);
         this.mAddressComplement = values.get(Utils.ADDRESS_COMPLEMENT);
 
@@ -204,7 +204,7 @@ public class UserOutput implements Parcelable {
         osb.edit().putString(Utils.ADDRESS_COMPLEMENT, this.mAddress.getComplement()).apply();
         osb.edit().putString(Utils.CREATED_AT, this.mCreated_At).apply();
         osb.edit().putString(Utils.CPF, this.mCpf).apply();
-        osb.edit().putString(Utils.BIRTH_DATE, this.mBirth_Date).apply();
+        osb.edit().putString(Utils.BIRTH_DAY, this.mBirth_Date).apply();
         osb.edit().putString(Utils.CITY_NAME, this.mCity.mName).apply();
         osb.edit().putString(Utils.STATE_NAME, this.mState.mName).apply();
         osb.edit().putString(Utils.STATE_ABBREVIATION, this.mState.mAbbreviation).apply();
diff --git a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/SignUpPresenter.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/SignUpPresenter.java
index 5c545e9..ccdc64b 100644
--- a/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/SignUpPresenter.java
+++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/SignUpPresenter.java
@@ -49,7 +49,7 @@ public class SignUpPresenter extends BasePresenter<SignupView> {
         ApiEndpoints service = ApiUtils.request(header);
         Map<String, String> body;
         body = signUpPresenter.view().getValues();
-        User user = new User(body.get(Utils.CPF), body.get(Utils.BIRTH_DATE), body.get(Utils.PASSWORD),
+        User user = new User(body.get(Utils.CPF), body.get(Utils.BIRTH_DAY), body.get(Utils.PASSWORD),
                 body.get(Utils.PASSWORD_CONFIRMATION), body.get(Utils.NAME), body.get(Utils.PHONE_1), body.get(Utils.RG), body.get(Utils.CEP),body.get(Utils.EMAIL));
         Call<AccountOutput> listCall = service.signUp(user);
 
-- 
GitLab