diff --git a/.gitignore b/.gitignore index 39fb081..9b8a21d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.iml .gradle /local.properties +/.idea/ /.idea/workspace.xml /.idea/libraries .DS_Store diff --git a/.idea/misc.xml b/.idea/misc.xml index cbd46bd..53a3fb1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,8 +1,5 @@ - - - - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 2d93f8f..419c8c9 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,7 @@ + diff --git a/README.md b/README.md index 4d77315..ae836cf 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,22 @@ Almost every app has a login and signup, so why do we re-write code everytime? L ![login](https://raw.githubusercontent.com/sirvar/robin/master/assets/login.png) ![signup](https://raw.githubusercontent.com/sirvar/robin/master/assets/signup.png) # Usage -Add this to your **build.gradle** +Add it in your root build.gradle at the end of repositories: +```groovy +allprojects { + repositories { + ... + maven { url 'https://jitpack.io' } + } + } +``` +Add the dependency ```groovy -compile 'com.sirvar:robin:0.0.1' + dependencies { + compile 'com.github.dustedrob:robin:-SNAPSHOT' + } + ``` Create a new activity to handle login and signup requests that extends **RobinActivity** diff --git a/app/build.gradle b/app/build.gradle index 082a525..82fbc0e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId "com.sirvar.robin.demo" minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -17,15 +17,19 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { compile project(':robin') - compile fileTree(dir: 'libs', include: ['*.jar']) + compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:25.3.1' + compile 'com.android.support:appcompat-v7:27.0.2' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' } diff --git a/app/src/main/java/com/sirvar/robin/demo/MainActivity.java b/app/src/main/java/com/sirvar/robin/demo/MainActivity.java index 4f8bf3c..cdb2795 100644 --- a/app/src/main/java/com/sirvar/robin/demo/MainActivity.java +++ b/app/src/main/java/com/sirvar/robin/demo/MainActivity.java @@ -2,9 +2,12 @@ import android.graphics.Typeface; import android.os.Bundle; +import android.view.View; import android.widget.Toast; +import com.sirvar.robin.LoginFragment; import com.sirvar.robin.RobinActivity; +import com.sirvar.robin.SignupFragment; import com.sirvar.robin.Theme; public class MainActivity extends RobinActivity { @@ -24,18 +27,38 @@ protected void onCreate(Bundle savedInstanceState) { } @Override - protected void onLogin(String email, String password) { + public void onSignupFragmentCreated(SignupFragment signupFragment) { + // Example on how to customize the Signup Fragment. If a text input is not + // visible, it won't be validated when the form is submitted +// signupFragment.setNameField(View.VISIBLE,"Your name"); +// signupFragment.setEmailField(View.VISIBLE,"Your email"); +// signupFragment.setPasswordField(View.GONE,null); + } + + + @Override + public void onLoginFragmentCreated(LoginFragment loginFragment) { +// Example on how to customize the LoginFragment +// loginFragment.setEmailField(View.VISIBLE,"your email"); +// loginFragment.setPasswordField(View.GONE,null); + + + + } + + @Override + public void onLogin(String email, String password) { Toast.makeText(getApplicationContext(), "Login", Toast.LENGTH_SHORT).show(); } @Override - protected void onSignup(String name, String email, String password) { + public void onSignup(String name, String email, String password) { Toast.makeText(getApplicationContext(), "Signup", Toast.LENGTH_SHORT).show(); // Make API call } @Override - protected void onForgotPassword(String email) { + public void onForgotPassword(String email) { Toast.makeText(getApplicationContext(), "Forgot Password", Toast.LENGTH_SHORT).show(); // Make API call // After sent password email callback @@ -43,12 +66,12 @@ protected void onForgotPassword(String email) { } @Override - protected void onGoogleLogin() { + public void onGoogleLogin() { Toast.makeText(getApplicationContext(), "Google", Toast.LENGTH_SHORT).show(); } @Override - protected void onFacebookLogin() { + public void onFacebookLogin() { Toast.makeText(getApplicationContext(), "Facebook", Toast.LENGTH_SHORT).show(); } } diff --git a/build.gradle b/build.gradle index c2eea8e..7e01a0a 100644 --- a/build.gradle +++ b/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,6 +16,7 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e4ff074..b1a36da 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed May 17 21:12:05 EDT 2017 +#Wed Jan 17 12:36:42 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/robin/build.gradle b/robin/build.gradle index e95a2d2..1e7ac1a 100644 --- a/robin/build.gradle +++ b/robin/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion 27 + buildToolsVersion "27.0.3" defaultConfig { minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 1 versionName "1.0" @@ -19,16 +19,20 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support:design:25.3.1' + compile 'com.android.support:appcompat-v7:27.0.2' + compile 'com.android.support:design:27.0.2' compile 'com.android.support.constraint:constraint-layout:1.0.2' - compile 'com.android.support:support-v4:25.3.1' + compile 'com.android.support:support-v4:27.0.2' testCompile 'junit:junit:4.12' } diff --git a/robin/src/main/java/com/sirvar/robin/ForgotPasswordFragment.java b/robin/src/main/java/com/sirvar/robin/ForgotPasswordFragment.java index 54a7cc4..21af2f2 100644 --- a/robin/src/main/java/com/sirvar/robin/ForgotPasswordFragment.java +++ b/robin/src/main/java/com/sirvar/robin/ForgotPasswordFragment.java @@ -42,26 +42,16 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, View view = inflater.inflate(R.layout.fragment_forgot_password, container, false); // Initialize views - title = (TextView) view.findViewById(R.id.title); - login = (TextView) view.findViewById(R.id.login); - logo = (ImageView) view.findViewById(R.id.logo); - email = (EditText) view.findViewById(R.id.email); - emailWrapper = (TextInputLayout) view.findViewById(R.id.wrapper_email); - submit = (Button) view.findViewById(R.id.submit); - - submit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((RobinActivity) getActivity()).onForgotPassword(email.getText().toString()); - } - }); - - login.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((RobinActivity) getActivity()).startLoginFragment(); - } - }); + title = view.findViewById(R.id.title); + login = view.findViewById(R.id.login); + logo = view.findViewById(R.id.logo); + email = view.findViewById(R.id.email); + emailWrapper = view.findViewById(R.id.wrapper_email); + submit = view.findViewById(R.id.submit); + + submit.setOnClickListener(v -> ((RobinActivity) getActivity()).onForgotPassword(email.getText().toString())); + + login.setOnClickListener(v -> ((RobinActivity) getActivity()).startLoginFragment()); setDefaults(); diff --git a/robin/src/main/java/com/sirvar/robin/LoginFragment.java b/robin/src/main/java/com/sirvar/robin/LoginFragment.java index 59ec036..8028266 100644 --- a/robin/src/main/java/com/sirvar/robin/LoginFragment.java +++ b/robin/src/main/java/com/sirvar/robin/LoginFragment.java @@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable; import android.media.Image; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.design.widget.TextInputLayout; import android.support.v4.app.Fragment; import android.util.Log; @@ -13,13 +14,19 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import org.w3c.dom.Text; + public class LoginFragment extends Fragment { + private RelativeLayout layout; + private TextView title; private TextView signup; private TextView forgotPassword; @@ -49,57 +56,40 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa View view = inflater.inflate(R.layout.fragment_login, container, false); // Initialize views - title = (TextView) view.findViewById(R.id.title); - signup = (TextView) view.findViewById(R.id.signup); - forgotPassword = (TextView) view.findViewById(R.id.forgotPassword); - logo = (ImageView) view.findViewById(R.id.logo); - email = (EditText) view.findViewById(R.id.email); - password = (EditText) view.findViewById(R.id.password); - emailWrapper = (TextInputLayout) view.findViewById(R.id.wrapper_email); - passwordWrapper = (TextInputLayout) view.findViewById(R.id.wrapper_password); - submit = (Button) view.findViewById(R.id.submit); - google = (ImageButton) view.findViewById(R.id.google_login); - facebook = (ImageButton) view.findViewById(R.id.facebook_login); + title = view.findViewById(R.id.title); + signup = view.findViewById(R.id.signup); + forgotPassword = view.findViewById(R.id.forgotPassword); + logo = view.findViewById(R.id.logo); + email = view.findViewById(R.id.email); + password = view.findViewById(R.id.password); + emailWrapper = view.findViewById(R.id.wrapper_email); + passwordWrapper = view.findViewById(R.id.wrapper_password); + submit = view.findViewById(R.id.submit); + google = view.findViewById(R.id.google_login); + facebook = view.findViewById(R.id.facebook_login); + layout=view.findViewById(R.id.login_layout); + + + ((RobinActivity) getActivity()).onLoginFragmentCreated(this); + + // Login form submitted - submit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (fieldsFilled()) { - ((RobinActivity) getActivity()).onLogin(email.getText().toString(), password.getText().toString()); - } else { - Toast.makeText(getContext(), "Some information is missing.", Toast.LENGTH_SHORT).show(); - } + submit.setOnClickListener(v -> { + if (fieldsFilled()) { + ((RobinActivity) getActivity()).onLogin(email.getText().toString(), password.getText().toString()); + } else { + Toast.makeText(getContext(), "Some information is missing.", Toast.LENGTH_SHORT).show(); } }); - google.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((RobinActivity) getActivity()).onGoogleLogin(); - } - }); + google.setOnClickListener(v -> ((RobinActivity) getActivity()).onGoogleLogin()); - facebook.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((RobinActivity) getActivity()).onFacebookLogin(); - } - }); + facebook.setOnClickListener(v -> ((RobinActivity) getActivity()).onFacebookLogin()); - forgotPassword.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((RobinActivity) getActivity()).startForgotPasswordFragment(); - } - }); + forgotPassword.setOnClickListener(v -> ((RobinActivity) getActivity()).startForgotPasswordFragment()); - signup.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((RobinActivity) getActivity()).startSignupFragment(); - } - }); + signup.setOnClickListener(v -> ((RobinActivity) getActivity()).startSignupFragment()); if (!showLogin) { google.setVisibility(View.INVISIBLE); @@ -184,13 +174,115 @@ protected void showSocialLogin(boolean showLogin) { } private boolean fieldsFilled() { - return !(email.getText().toString().isEmpty() || password.getText().toString().isEmpty()); + + + for( int i = 0; i < layout.getChildCount(); i++ ) { + + if (layout.getChildAt(i) instanceof TextInputLayout) + { + TextInputLayout input= (TextInputLayout) layout.getChildAt(i); + + if (!isFieldFilled(input.getEditText())) + { + return false; + } + + } + else if (layout.getChildAt(i) instanceof FrameLayout) + { + FrameLayout input= (FrameLayout) layout.getChildAt(i); + + //ugly hack to get to the password + TextInputLayout child = (TextInputLayout) input.getChildAt(0); + if (!isFieldFilled(child.getEditText())) + { + return false; + } + + } + } + return true; + } + /** + * + * @param edit + * @return true if a field is {@link android.view.View#VISIBLE} and filled out or if it's + * not visible + */ + private boolean isFieldFilled(EditText edit) { + + return edit.getVisibility() != View.VISIBLE || (edit.getText().toString() != null && !edit.getText().toString().trim().isEmpty()); + } + + + private void setDefaults() { setTitle(); setFont(); setImage(); } + + /** + * + * @param visibility .- The {@link android.view.View} Visibility for this field + * @param hint .- The hint for this Field. Will use default if null + */ + public void setEmailField(int visibility, @Nullable String hint) + { + email.setVisibility(visibility); + if (hint!=null) + { + emailWrapper.setHint(hint); + email.setHint(hint); + } + } + + + /** + * + * @param visibility .- The {@link android.view.View} Visibility for this field + * @param hint .- The hint for this Field. Will use default if null + */ + public void setForgotPassword(int visibility, @Nullable String hint) + { + forgotPassword.setVisibility(visibility); + if (hint!=null) + { + forgotPassword.setHint(hint); + forgotPassword.setText(hint); + } + } + + /** + * + * @param visibility .- The {@link android.view.View} Visibility for this field + * @param hint .- The hint for this Field. Will use default if null + */ + public void setPasswordField(int visibility, @Nullable String hint) + { + password.setVisibility(visibility); + forgotPassword.setVisibility(visibility); + + if (hint!=null) + { + passwordWrapper.setHint(hint); + password.setHint(hint); + } + } + + + public EditText getEmail() { + return email; + } + + public EditText getPassword() { + return password; + } + + public TextView getForgotPassword() { + return forgotPassword; + } } diff --git a/robin/src/main/java/com/sirvar/robin/RobinActivity.java b/robin/src/main/java/com/sirvar/robin/RobinActivity.java index f081d58..aef2eb2 100644 --- a/robin/src/main/java/com/sirvar/robin/RobinActivity.java +++ b/robin/src/main/java/com/sirvar/robin/RobinActivity.java @@ -3,11 +3,9 @@ import android.graphics.Bitmap; import android.graphics.Typeface; import android.graphics.drawable.Drawable; -import android.media.Image; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; -import android.widget.ImageButton; -import android.widget.ImageView; public abstract class RobinActivity extends AppCompatActivity { @@ -48,7 +46,9 @@ protected void onCreate(Bundle savedInstanceState) { * @param email username or email address entered by user * @param password raw password */ - protected abstract void onLogin(String email, String password); + public void onLogin(String email, @Nullable String password){ + + } /** * Override form signup @@ -56,24 +56,55 @@ protected void onCreate(Bundle savedInstanceState) { * @param email username or email address entered by user * @param password raw password */ - protected abstract void onSignup(String name, String email, String password); + public void onSignup(String name, @Nullable String email,@Nullable String password){ + + } /** * Override form forgot password * * @param email username or email address entered by user */ - protected abstract void onForgotPassword(String email); + public void onForgotPassword(String email){ + + } /** * Override form Google login */ - protected abstract void onGoogleLogin(); + public void onGoogleLogin(){ + + } /** * Override form Facebook login */ - protected abstract void onFacebookLogin(); + public void onFacebookLogin(){ + + } + + + /** + * This method will be called when the fragment is ready(onCreateView has been called) and you + * can modify it's fields and components + * @param signupFragment + */ + public void onSignupFragmentCreated(SignupFragment signupFragment) + { + + } + + + + /** + * This method will be called when the fragment is ready(onCreateView has been called) and you + * can modify it's fields and components + * @param loginFragment + */ + public void onLoginFragmentCreated(LoginFragment loginFragment) + { + + } /** * Enables social login button @@ -217,4 +248,5 @@ private void setDefaults() { showLoginFirst(); theme = Theme.LIGHT; } + } diff --git a/robin/src/main/java/com/sirvar/robin/SignupFragment.java b/robin/src/main/java/com/sirvar/robin/SignupFragment.java index a3f182d..3945da4 100644 --- a/robin/src/main/java/com/sirvar/robin/SignupFragment.java +++ b/robin/src/main/java/com/sirvar/robin/SignupFragment.java @@ -4,6 +4,7 @@ import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.design.widget.TextInputLayout; import android.support.v4.app.Fragment; import android.util.Log; @@ -13,11 +14,15 @@ import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import java.util.ArrayList; + public class SignupFragment extends Fragment { + private RelativeLayout layout; private TextView title; private TextView login; private ImageView logo; @@ -46,34 +51,32 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa View view = inflater.inflate(R.layout.fragment_signup, container, false); // Initialize views - title = (TextView) view.findViewById(R.id.title); - login = (TextView) view.findViewById(R.id.login); - logo = (ImageView) view.findViewById(R.id.logo); - name = (EditText) view.findViewById(R.id.name); - email = (EditText) view.findViewById(R.id.email); - password = (EditText) view.findViewById(R.id.password); - confirmPassword = (EditText) view.findViewById(R.id.confirm_password); - nameWrapper = (TextInputLayout) view.findViewById(R.id.wrapper_name); - emailWrapper = (TextInputLayout) view.findViewById(R.id.wrapper_email); - passwordWrapper = (TextInputLayout) view.findViewById(R.id.wrapper_password); - confirmPasswordWrapper = (TextInputLayout) view.findViewById(R.id.wrapper_confirm_password); - submit = (Button) view.findViewById(R.id.submit); - - login.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((RobinActivity) getActivity()).startLoginFragment(); - } - }); + title = view.findViewById(R.id.title); + login = view.findViewById(R.id.login); + logo = view.findViewById(R.id.logo); + name = view.findViewById(R.id.name); + email = view.findViewById(R.id.email); + password = view.findViewById(R.id.password); + confirmPassword = view.findViewById(R.id.confirm_password); + nameWrapper = view.findViewById(R.id.wrapper_name); + emailWrapper = view.findViewById(R.id.wrapper_email); + passwordWrapper = view.findViewById(R.id.wrapper_password); + confirmPasswordWrapper = view.findViewById(R.id.wrapper_confirm_password); + submit = view.findViewById(R.id.submit); + layout=view.findViewById(R.id.signup_layout); - submit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (fieldsFilled()) { - ((RobinActivity) getActivity()).onSignup(name.getText().toString(), email.getText().toString(), password.getText().toString()); - } else { - Toast.makeText(getActivity().getApplicationContext(), "Some information is missing.", Toast.LENGTH_SHORT).show(); - } + + + ((RobinActivity) getActivity()).onSignupFragmentCreated(this); + + login.setOnClickListener(v -> ((RobinActivity) getActivity()).startLoginFragment()); + + submit.setOnClickListener(v -> { + if (fieldsFilled() && passwordsMatch(password,confirmPassword)) { + + ((RobinActivity) getActivity()).onSignup(name.getText().toString(), email.getText().toString(), password.getText().toString()); + } else { + Toast.makeText(getActivity().getApplicationContext(), "Signup Failed.", Toast.LENGTH_SHORT).show(); } }); @@ -153,8 +156,42 @@ private void setFont() { submit.setTypeface(typeface); } + + /** + * + * @param edit + * @return true if a field is {@link android.view.View#VISIBLE} and filled out or if it's + * not visible + */ + private boolean isFieldFilled(EditText edit) { + + return edit.getVisibility() != View.VISIBLE || (edit.getText().toString() != null && !edit.getText().toString().trim().isEmpty()); + } + + private boolean fieldsFilled() { - return (!(name.getText().toString().isEmpty() || email.getText().toString().isEmpty() || password.getText().toString().isEmpty()) && (password.getText().toString().equals(confirmPassword.getText().toString()))); + + + for( int i = 0; i < layout.getChildCount(); i++ ) { + + if (layout.getChildAt(i) instanceof TextInputLayout) + { + TextInputLayout input= (TextInputLayout) layout.getChildAt(i); + + if (!isFieldFilled(input.getEditText())) + { + return false; + } + } + } + return true; + + } + + private boolean passwordsMatch(EditText password, EditText confirmPassword) { + + return password.getVisibility() != View.VISIBLE || password.getText().toString().equals(confirmPassword.getText().toString()); + } private void setDefaults() { @@ -162,4 +199,57 @@ private void setDefaults() { setFont(); setImage(); } + + /** + * + * @param visibility .- The {@link android.view.View} Visibility for this field + * @param hint .- The hint for this Field. Will use default if null + */ + public void setEmailField(int visibility, @Nullable String hint) + { + email.setVisibility(visibility); + if (hint!=null) + { + emailWrapper.setHint(hint); + email.setHint(hint); + } + } + + /** + * + * @param visibility .- The {@link android.view.View} Visibility for this field + * @param hint .- The hint for this Field. Will use default if null + */ + public void setNameField(int visibility, @Nullable String hint) + { + name.setVisibility(visibility); + + if (hint!=null) + { + nameWrapper.setHint(hint); + name.setHint(hint); + } + } + + + /** + * + * @param visibility .- The {@link android.view.View} Visibility for this field + * @param hint .- The hint for this Field. Will use default if null + */ + public void setPasswordField(int visibility, @Nullable String hint) + { + password.setVisibility(visibility); + confirmPassword.setVisibility(visibility); + + + if (hint!=null) + { + passwordWrapper.setHint(hint); + password.setHint(hint); + } + } + + + } diff --git a/robin/src/main/res/layout/fragment_login.xml b/robin/src/main/res/layout/fragment_login.xml index daa9670..8f96be3 100644 --- a/robin/src/main/res/layout/fragment_login.xml +++ b/robin/src/main/res/layout/fragment_login.xml @@ -6,6 +6,7 @@ tools:context="com.sirvar.robin.LoginFragment">