1+ package com .fast0n .beercoasterscollection ;
2+
3+ import android .content .Context ;
4+ import android .content .Intent ;
5+ import android .graphics .Color ;
6+ import android .net .ConnectivityManager ;
7+ import android .os .Handler ;
8+ import android .support .annotation .NonNull ;
9+ import android .support .v7 .app .AppCompatActivity ;
10+ import android .os .Bundle ;
11+ import android .view .KeyEvent ;
12+ import android .view .View ;
13+ import android .view .inputmethod .EditorInfo ;
14+ import android .view .inputmethod .InputMethodManager ;
15+ import android .widget .Button ;
16+ import android .widget .EditText ;
17+ import android .widget .ProgressBar ;
18+ import android .widget .TextView ;
19+ import android .widget .Toast ;
20+
21+ import com .fast0n .beercoasterscollection .java .DatabaseInformation ;
22+ import com .google .android .gms .tasks .OnCompleteListener ;
23+ import com .google .android .gms .tasks .Task ;
24+ import com .google .firebase .auth .FirebaseAuth ;
25+ import com .google .firebase .database .DataSnapshot ;
26+ import com .google .firebase .database .DatabaseError ;
27+ import com .google .firebase .database .DatabaseReference ;
28+ import com .google .firebase .database .FirebaseDatabase ;
29+ import com .google .firebase .database .Query ;
30+ import com .google .firebase .database .ValueEventListener ;
31+
32+ import java .util .regex .Matcher ;
33+ import java .util .regex .Pattern ;
34+
35+ import es .dmoral .toasty .Toasty ;
36+
37+ public class HelpActivity extends AppCompatActivity {
38+
39+ private EditText email_field ;
40+ private Button reset_button ;
41+ private TextView back_button ;
42+ InputMethodManager keyboard ;
43+
44+ private FirebaseAuth auth ;
45+ private FirebaseDatabase database ;
46+ private DatabaseReference databaseRef ;
47+
48+ @ Override
49+ protected void onCreate (Bundle savedInstanceState ) {
50+ super .onCreate (savedInstanceState );
51+ setContentView (R .layout .activity_help );
52+
53+ /**
54+ * Indirizzi java
55+ */
56+ email_field = (EditText ) findViewById (R .id .editText );
57+ reset_button = (Button ) findViewById (R .id .button );
58+ back_button = (TextView ) findViewById (R .id .button2 );
59+ keyboard = (InputMethodManager ) getSystemService (Context .INPUT_METHOD_SERVICE );
60+
61+ /**
62+ * Colore Navbar
63+ */
64+ getWindow ().setNavigationBarColor (Color .BLACK );
65+
66+ /**
67+ * Firebase
68+ */
69+ auth = FirebaseAuth .getInstance ();
70+ database = FirebaseDatabase .getInstance ();
71+ databaseRef = database .getReference ();
72+
73+ /**
74+ * Nascondi/mostra il cursore quando si tocca il campo all'apertura dell'activity
75+ */
76+ email_field .setOnClickListener (new View .OnClickListener () {
77+ @ Override
78+ public void onClick (View v ) {
79+ email_field .setFocusable (true );
80+ email_field .setFocusableInTouchMode (true );
81+ email_field .requestFocus ();
82+ keyboard .showSoftInput (email_field , 0 );
83+
84+ }
85+ });
86+
87+ /**
88+ * Click del tasto con la tastiera
89+ */
90+ email_field .setOnEditorActionListener (new TextView .OnEditorActionListener () {
91+ public boolean onEditorAction (TextView v , int actionId , KeyEvent event ) {
92+ if ((event != null && (event .getKeyCode () == KeyEvent .KEYCODE_ENTER ))
93+ || (actionId == EditorInfo .IME_ACTION_DONE )) {
94+ reset_button .performClick ();
95+ }
96+ return false ;
97+ }
98+ });
99+
100+ back_button .setOnClickListener (new View .OnClickListener () {
101+ @ Override
102+ public void onClick (View v ) {
103+ Intent mainActivity = new Intent (HelpActivity .this , LoginActivity .class );
104+ mainActivity .addFlags (Intent .FLAG_ACTIVITY_NO_ANIMATION );
105+ startActivity (mainActivity );
106+ }
107+ });
108+
109+ }
110+
111+ public void CheckFields (final View view ) {
112+ /**
113+ * Al click del tasto c'è un controllo dei campi:
114+ * - controlla se è vuoto o minore di 5.
115+ */
116+ disableField ();
117+
118+ if (email_field .getText ().toString ().equals ("" )) {
119+ email_field .setError (getString (R .string .error ));
120+ enableField ();
121+ }
122+
123+ else if (email_field .getText ().length () < 5 ) {
124+ email_field .setError (getString (R .string .errorLength ));
125+ enableField ();
126+ } else {
127+ reset_button .setBackgroundDrawable (getDrawable (R .drawable .button_border ));
128+ reset_button .setTextColor (Color .BLACK );
129+
130+ if (isOnline ()) {
131+
132+ final Query query = databaseRef .child ("users" ).orderByChild ("email" )
133+ .equalTo (email_field .getText ().toString ().toLowerCase ());
134+
135+ final Query query2 = databaseRef .child ("users" ).orderByChild ("username" )
136+ .equalTo (email_field .getText ().toString ().toLowerCase ());
137+
138+ if (isEmail (email_field .getText ().toString ())) {
139+ query .addListenerForSingleValueEvent (new ValueEventListener () {
140+ @ Override
141+ public void onDataChange (DataSnapshot dataSnapshot ) {
142+
143+ String email = dataSnapshot .toString ().split ("=" )[2 ].replace (" {" , "" );
144+
145+ if (email .equals (" null }" )) {
146+ email_field .setError (getString (R .string .errorEmail ));
147+ enableField ();
148+ } else {
149+ keyboard .hideSoftInputFromWindow (view .getWindowToken (), 0 );
150+ resetPasswordEmail (email_field .getText ().toString ());
151+
152+ }
153+
154+ }
155+
156+ @ Override
157+ public void onCancelled (DatabaseError databaseError ) {
158+
159+ }
160+ });
161+ } else {
162+
163+ query2 .addListenerForSingleValueEvent (new ValueEventListener () {
164+ @ Override
165+ public void onDataChange (DataSnapshot dataSnapshot ) {
166+
167+ final String username = dataSnapshot .toString ().split ("=" )[2 ].replace (" {" , "" );
168+
169+ if (username .equals (" null }" )) {
170+ email_field .setError (getString (R .string .errorUsernameExists ));
171+ enableField ();
172+ } else if (email_field .getText ().toString ().equals (username .toLowerCase ())
173+ || email_field .getText ().toString ().equals (username )) {
174+ keyboard .hideSoftInputFromWindow (view .getWindowToken (), 0 );
175+ databaseRef .addValueEventListener (new ValueEventListener () {
176+ @ Override
177+ public void onDataChange (DataSnapshot dataSnapshot ) {
178+ resetPasswordUsername (dataSnapshot );
179+
180+ }
181+
182+ @ Override
183+ public void onCancelled (DatabaseError databaseError ) {
184+
185+ }
186+ });
187+
188+ }
189+
190+ }
191+
192+ @ Override
193+ public void onCancelled (DatabaseError databaseError ) {
194+
195+ }
196+ });
197+
198+ }
199+ } else {
200+ Toasty .error (HelpActivity .this , getString (R .string .errorConnection ), Toast .LENGTH_SHORT , true ).show ();
201+ }
202+
203+ }
204+
205+ }
206+
207+ /**
208+ * Controllo connessione internet
209+ */
210+ public boolean isOnline () {
211+ ConnectivityManager cm = (ConnectivityManager ) getSystemService (Context .CONNECTIVITY_SERVICE );
212+
213+ return cm .getActiveNetworkInfo () != null && cm .getActiveNetworkInfo ().isConnectedOrConnecting ();
214+ }
215+
216+ private void resetPasswordUsername (DataSnapshot dataSnapshot ) {
217+ for (final DataSnapshot ds : dataSnapshot .getChildren ()) {
218+ final DatabaseInformation uInfo = new DatabaseInformation ();
219+
220+ final Query query = databaseRef .child ("users" ).orderByChild ("username" )
221+ .equalTo (email_field .getText ().toString ().toLowerCase ());
222+
223+ query .addListenerForSingleValueEvent (new ValueEventListener () {
224+ @ Override
225+ public void onDataChange (DataSnapshot dataSnapshot ) {
226+
227+ String username = dataSnapshot .toString ().split ("=" )[2 ].replace (" {" , "" );
228+
229+ uInfo .setEmail ((ds .child (username ).getValue (DatabaseInformation .class ).getEmail ()));
230+ resetPasswordEmail (uInfo .getEmail ());
231+
232+ }
233+
234+ @ Override
235+ public void onCancelled (DatabaseError databaseError ) {
236+
237+ }
238+ });
239+
240+ }
241+
242+ }
243+
244+ /**
245+ * Controllo se il campo è una email
246+ */
247+ public static boolean isEmail (String email ) {
248+ String expression = "^[\\ w\\ .]+@([\\ w]+\\ .)+[A-Z]{2,7}$" ;
249+ CharSequence inputString = email ;
250+ Pattern pattern = Pattern .compile (expression , Pattern .CASE_INSENSITIVE );
251+ Matcher matcher = pattern .matcher (inputString );
252+ if (matcher .matches ()) {
253+ return true ;
254+ } else {
255+ return false ;
256+ }
257+ }
258+
259+ private void resetPasswordEmail (final String email ) {
260+ auth .sendPasswordResetEmail (email ).addOnCompleteListener (this , new OnCompleteListener <Void >() {
261+ @ Override
262+ public void onComplete (@ NonNull Task <Void > task ) {
263+ if (task .isSuccessful ()) {
264+ final ProgressBar spinner = (ProgressBar ) findViewById (R .id .progressBar1 );
265+ spinner .setVisibility (View .GONE );
266+ spinner .setVisibility (View .VISIBLE );
267+ reset_button .setText ("" );
268+ Intent intent = new Intent (HelpActivity .this , LoginActivity .class );
269+ intent .addFlags (Intent .FLAG_ACTIVITY_NO_ANIMATION );
270+ startActivity (intent );
271+ Toasty .info (HelpActivity .this , getString (R .string .toastChangePassword ), Toast .LENGTH_LONG ).show ();
272+
273+ }
274+
275+ }
276+ });
277+ }
278+
279+ public void disableField () {
280+ email_field .setEnabled (false );
281+ reset_button .setEnabled (false );
282+ }
283+
284+ public void enableField () {
285+ reset_button .setBackgroundDrawable (getDrawable (R .drawable .button_disabled_border ));
286+ reset_button .setTextColor (getColor (R .color .colorPrimary ));
287+ email_field .setEnabled (true );
288+ reset_button .setEnabled (true );
289+ }
290+ }
0 commit comments