Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Create a simple Android interface that takes a password and provides feedback as

ID: 3844430 • Letter: C

Question

Create a simple Android interface that takes a password and provides feedback as to its strength (using the provided Classes + Tests ). Your interface needs an input text field, button, and output text and it required to indicate on the form whether the password is strong enough.

Your output should be something like this:

Classes + Tests:

PasswordValidator.java:

import java.util.regex.Pattern;

public class PasswordValidator {

   public static int validatePasswordStage1(String password) {
       if (password == null || password.isEmpty()) {
           return 0;
       }
       int countMatchingRules = 0;

       // check if string is not password
       if (!password.equalsIgnoreCase("PASSWORD")) {
           countMatchingRules++;
       }

       // Check if string is at-least 8 character long
       if (password.length() >= 8) {
           countMatchingRules++;
       }

       return countMatchingRules;
   }

   public static int validatePasswordStage2(String password) {
       int countMatchingRules = 0;

       // Using the first stage to get first 2 matching rules
       countMatchingRules += validatePasswordStage1(password);

       // check if string contains at-least one special character from !, @, #,
       // $, &, *
       if (password.indexOf('!') != -1 || password.indexOf('@') != -1
               || password.indexOf('#') != -1 || password.indexOf('&') != -1
               || password.indexOf('*') != -1) {
           countMatchingRules++;
       }

       // Check if string is at-least one digit
   if (Pattern.compile("[0-9]").matcher(password).find()) {
       System.out.println("Digit for " + password);
       countMatchingRules++;
   }
  
       // Check if string has both upper and lower case characters
   if (Pattern.compile("[a-z]").matcher(password).find() && Pattern.compile("[A-Z]").matcher(password).find() ) {
       System.out.println("Upper lower for " + password);
       countMatchingRules++;
   }
  
       return countMatchingRules;
   }
}



PasswordValidatorTest.java:

import static org.junit.Assert.*;

import org.junit.Test;


public class PasswordValidatorTest {

   @Test
   public void testValidatePasswordStage1() {
       // Rules:
       // - it is not “password” (case insensitive)
       // - it is at least 8 characters long

       assertEquals(PasswordValidator.validatePasswordStage1("PASSWOrD"), 1);
       assertEquals(PasswordValidator.validatePasswordStage1("ABCD"), 1);
       assertEquals(PasswordValidator.validatePasswordStage1("ABCDEFGH"), 2);
       assertEquals(PasswordValidator.validatePasswordStage1("ABCDEFGHIJ"), 2);
   }

   @Test
   public void testValidatePasswordStage2() {
       // Rules:
       // 1 - it is not “password” (case insensitive)
       // 2 - it is at least 8 characters long
       // 3 - atleast one special character out of !, @, #, $, &, *
       // 4 - atleast one digit
       // 5 - atleast one upper and lower case character

       // rule 1, 5 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd"), 2);

       // rule 1, 5, 4 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd34"), 3);

       // rule 1, 5, 4, 2 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd34er"), 4);

       // rule 1, 4, 2 matching
       assertEquals(PasswordValidator.validatePasswordStage2("abcd34er"), 3);

       // rule 1, 5, 4, 2 matching
       assertEquals(PasswordValidator.validatePasswordStage2("abcd@34er"), 4);
      
       // rule 1, 2, 3, 4, 5 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd@34er"), 5);
   }

}

Please explin by steps how to connect the button with text field to view the stngrth of the password in Android Studio

password Not thang

Explanation / Answer

Ans.

// Material Design view

//Create a layout resource called /res/layout/password.xml.

//Content is below

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true">

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="56dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">

  
</android.support.design.widget.TextInputLayout>

<!-- Password Label -->
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp">
<EditText android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="Password"/>
</android.support.design.widget.TextInputLayout>

<android.support.v7.widget.AppCompatButton
android:id="@+id/btn_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"
android:padding="12dp"
android:text="Login"/>

</LinearLayout>
</ScrollView>

//EditText input type attribute called textPassword, which masks the password as it is typed into the control

2.)

package com.sourcey.materiallogindemo;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import butterknife.ButterKnife;
import butterknife.InjectView;

public class PasswordValidator extends AppCompatActivity {
private static final String TAG = "PasswordValidator";
private static final int REQUEST_SIGNUP = 0;


@InjectView(R.id.password) EditText password;
@InjectView(R.id.btn_password) Button _passwordCheckButton;

  
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.inject(this);
  
_passwordCheckButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
login();
}
});

_signupLink.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// Start the Signup activity
Intent intent = new Intent(getApplicationContext(), SignupActivity.class);
startActivityForResult(intent, REQUEST_SIGNUP);
}
});
}

public void login() {
Log.d(TAG, "Login");
String password = password.getText().toString();
if (!validatePasswordStage1(password)&&!validatePasswordStage2(password)) {
onPasswordMatchFailed();
return;
}

_passwordCheckButton.setEnabled(false);

final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this,
R.style.AppTheme_Dark_Dialog);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Authenticating...");
progressDialog.show();

  


new android.os.Handler().postDelayed(
new Runnable() {
public void run() {

onPasswordSuccess();
// onPasswordMatchFailed();
progressDialog.dismiss();
}
}, 3000);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_SIGNUP) {
if (resultCode == RESULT_OK) {
this.finish();
}
}
}

@Override
public void onBackPressed() {
// disable going back to the MainActivity
moveTaskToBack(true);
}

public void onPasswordSuccess() {
_passwordCheckButton.setEnabled(true);
finish();
}

public void onPasswordMatchFailed() {
Toast.makeText(getBaseContext(), "Not Strong", Toast.LENGTH_LONG).show();

_passwordCheckButton.setEnabled(true);
}

public static int validatePasswordStage1(String password) {
if (password == null || password.isEmpty()) {
return 0;
}
int countMatchingRules = 0;
// check if string is not password
if (!password.equalsIgnoreCase("PASSWORD")) {
countMatchingRules++;
}
// Check if string is at-least 8 character long
if (password.length() >= 8) {
countMatchingRules++;
}
return countMatchingRules;
}
public static int validatePasswordStage2(String password) {
int countMatchingRules = 0;
// Using the first stage to get first 2 matching rules
countMatchingRules += validatePasswordStage1(password);
// check if string contains at-least one special character from !, @, #,
// $, &, *
if (password.indexOf('!') != -1 || password.indexOf('@') != -1
|| password.indexOf('#') != -1 || password.indexOf('&') != -1
|| password.indexOf('*') != -1) {
countMatchingRules++;
}
// Check if string is at-least one digit
if (Pattern.compile("[0-9]").matcher(password).find()) {
System.out.println("Digit for " + password);
countMatchingRules++;
}
  
// Check if string has both upper and lower case characters
if (Pattern.compile("[a-z]").matcher(password).find() && Pattern.compile("[A-Z]").matcher(password).find() ) {
System.out.println("Upper lower for " + password);
countMatchingRules++;
}
  
return countMatchingRules;
}
}

3.) Junit Test Case

PasswordValidatorTest.java:

import static org.junit.Assert.*;

import org.junit.Test;


public class PasswordValidatorTest {

   @Test
   public void testValidatePasswordStage1() {
       // Rules:
       // - it is not “password” (case insensitive)
       // - it is at least 8 characters long

       assertEquals(PasswordValidator.validatePasswordStage1("PASSWOrD"), 1);
       assertEquals(PasswordValidator.validatePasswordStage1("ABCD"), 1);
       assertEquals(PasswordValidator.validatePasswordStage1("ABCDEFGH"), 2);
       assertEquals(PasswordValidator.validatePasswordStage1("ABCDEFGHIJ"), 2);
   }

   @Test
   public void testValidatePasswordStage2() {
       // Rules:
       // 1 - it is not “password” (case insensitive)
       // 2 - it is at least 8 characters long
       // 3 - atleast one special character out of !, @, #, $, &, *
       // 4 - atleast one digit
       // 5 - atleast one upper and lower case character

       // rule 1, 5 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd"), 2);

       // rule 1, 5, 4 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd34"), 3);

       // rule 1, 5, 4, 2 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd34er"), 4);

       // rule 1, 4, 2 matching
       assertEquals(PasswordValidator.validatePasswordStage2("abcd34er"), 3);

       // rule 1, 5, 4, 2 matching
       assertEquals(PasswordValidator.validatePasswordStage2("abcd@34er"), 4);
      
       // rule 1, 2, 3, 4, 5 matching
       assertEquals(PasswordValidator.validatePasswordStage2("Abcd@34er"), 5);
   }

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote