diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 878700bf1338aad2d98e8f26ddbacfa9e1d5b7a1..a2f111e99fed6452b065b2c53f3f6f73b8a5207c 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 733c741b38104ef8bc4576379fe3675b23188361..3d16d8d7f24f3974fa2106533e6141212fba7d9a 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; @@ -181,11 +183,20 @@ 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_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf)); - et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate)); + 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(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(Utils.CPF_MASK, et_cpf)); + et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.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(); @@ -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); @@ -848,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 5ceb5a9a835182628d241fb6793aac578332c1ee..58064b7db3167322edf13b725b74d4490d742f23 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; @@ -12,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; @@ -46,7 +48,9 @@ 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.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()); 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 f9e955c9e4f2e4e8fc3e708f7a01da573e75bb3b..48005dada8f70a84476595aa981256df939fc93f 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 30a03a34c19a7787e92e4a6672f936c75ce1332e..047e85f8ad51986ecb36dd13f3d2f5bd747b9d8b 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 b91be80904dccb1b3824ced1901b8b71731f6eb0..f04eaf22bc29cba7ecd2f1baf52d3ac46a18952a 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,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.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 +88,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 +156,21 @@ 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_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf)); - et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate)); + + 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(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(Utils.CPF_MASK, et_cpf)); + et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.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); @@ -385,6 +391,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); @@ -528,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/ForgotPasswordActivity.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/ForgotPasswordActivity.java deleted file mode 100644 index af965868cc4187eae3f7cd852101ab00752adfbf..0000000000000000000000000000000000000000 --- 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 9b12dacc08cab645808fdf8856f14c67ec7eaf38..aa344e070f1e6226588896d8534b43657418c454 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 e871966f34e9b875ff7b2cdda932d6295e048a86..1842ca22e6dc76562bdc4bde6491d6991dda9364 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.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()); 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 4a3445aae623659cad74b151bdf6fa3e8797f138..065a2f1c409a1d9012977beb6b46633d508e7b1e 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,11 @@ 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; @@ -46,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; @@ -144,11 +145,23 @@ 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_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf)); - et_birthdate.addTextChangedListener(Mask.insert("##/##/####", et_birthdate)); + + + 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(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(Utils.CPF_MASK, et_cpf)); + et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.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); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -441,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); @@ -490,7 +503,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 0000000000000000000000000000000000000000..2488fd8e1e84fe04a1d40865ec018a404f900725 --- /dev/null +++ b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/PasswordRetrievalActivity.java @@ -0,0 +1,126 @@ +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.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; + +/** + * 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(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); + + 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 0000000000000000000000000000000000000000..08b5e006dcbe5a6f0bc29638acc64f22f6d26be2 --- /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 0000000000000000000000000000000000000000..a6f66cac68e9ea8d2bf69d2ea87b1f79fa59f1b1 --- /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 2ecf99eefdc3af87c62e005a5008dc06264365b2..c2220f5ccd55472c50bf104704af84c7d3349f0a 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; @@ -84,13 +85,21 @@ 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.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_cpf.addTextChangedListener(Mask.insert("###.###.###-##", et_cpf)); - et_birthday.addTextChangedListener(Mask.insert("##/##/####", et_birthday)); + 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(Utils.CPF_MASK, et_cpf)); + et_cpf.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Utils.CPF_MASK.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() { @Override @@ -299,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/Mask.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Mask.java index f2fa728ad452ae94be332ed5a2e84d492ba64058..ebcb0a9a4bd6aeeb525a736b7c4af50dbc488476 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/helpers/Utils.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/helpers/Utils.java index 2c172ade35f47d5bae3e1002816aef66a7afe9cc..3eaaae5ba8cda1ea737af0402a5f8951c044b0e9 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 071c1484ec4a334fd76a28fcb1ab576a1d581020..4161cb23a98d746c3e25bef6127e7ecc137959a0 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 b671ea653a435c0d4bd96a10ec1f8351959ca5b4..bfc9d7c096e3347284f163d0b077520994e109d0 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 dfab7973f411fb9c48c24b3ac83bf1b1e688f75b..65ac7482fda7b892f1627091f2b4f4f1d8b71f2c 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/CitizensPresenter.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/CitizensPresenter.java index a47630ee38621e26d4b1dcbcc044677ddedc53bd..8f5f2b0f75c2eece3c04d79d4b317f3cc85bcc9a 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 998b4645af0373c726d37a230b1a50dfb746fdc1..9e4a0f4a79f4da58f6766d826b31e0a499a03c12 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 fa361447c65cf7bfb91a4bcde2e1f6c0a8fce774..6302e1527afda45862f0e70e715c0c3519384b47 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/presenters/SignUpPresenter.java b/app/src/main/java/br/ufpr/c3sl/agendador/agendador/presenters/SignUpPresenter.java index 5c545e9cedd90eb8e4dd1af304759614e6cab31d..ccdc64b7572be2f5469bca63e98d04faeaf4e524 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); 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 c9cf14ac8527e8964554dc232ea3efe8df11d7cf..57fc19cb03568c9f4f8f6bb49346b1ceb113d9a0 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 717f4cbb62d880e1aa56089969048e7330a1648f..b77b7dca51e3cca940292cf1d9817c3a12548f7d 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 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_back_arrow_black.png differ 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 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_back_arrow_black.png differ 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 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_back_arrow_black.png differ 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 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_back_arrow_black.png differ 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 0000000000000000000000000000000000000000..4f560f6cdef97f0a6f9a1193464035b59537c306 --- /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 c4e8b2001a5cecb494765b3f574297a17c3c94dc..4096d3469e61499d1d019dc4d133349776064f42 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 ae5c90a8ca9545433e375aae45b55d13e8b0a11f..e395badf26132179b0cf295448374f1895c24d51 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 1747d999407fa77b039db817d926dd3bd295c09a..1e36864503759a2b479c184fd3a9c11957b3478a 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 454baa212f8c1093acf8c765c0747c43666ed319..408641f49dfadfd890ba23935ecdd2ff995ab45c 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 e242d90ac6eb46ae04e9df6923d2e60bf7d66f6f..8fd0cc246c7efdc8cc5d26f66bbbc095d359f830 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 0000000000000000000000000000000000000000..c3d332250950c122001379b951a4293b98bfce9c --- /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 0000000000000000000000000000000000000000..c657baad993f1c1a2f0a14d132e80795c5575250 --- /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 77050eb19783bf1fb0cc25a1876fe76ed73a8612..05f7e4bad2b99d1fe879bd1636c4123c09f32136 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 0000000000000000000000000000000000000000..d0c1abf8782237c7cf7aa6490c3893d74ba1d2c4 --- /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 a9245226540b9a558f31b8eecd677210bd4c0f4b..8824cb9e52c8576f9cc40feb78867e9019c9361c 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>