Search code examples
javaandroidauthenticationhardcodehardcoded

Android - Hardcode Login not Working


Aim

To login to my Admin.xml via AdminLogin.xml

Flow of Classes

AdminLoginActivity ---> AdminActivity

AdminLoginActivityClass

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class AdminLoginActivity extends AppCompatActivity {

    private Toolbar jAdminToolbar;

    private EditText jAdminID;
    private EditText jAdminPassword;

    private Button jAdminLoginBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_login);

        jAdminToolbar = (Toolbar) findViewById(R.id.adminLoginToolbar);
        setSupportActionBar(jAdminToolbar);
        getSupportActionBar().setTitle("Admin Login");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        jAdminID = (EditText) findViewById(R.id.adminLoginName);
        jAdminPassword = (EditText) findViewById(R.id.adminLoginPassword);
        jAdminLoginBtn = (Button) findViewById(R.id.adminLoginBtn);

        jAdminLoginBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                String adminLoginID = jAdminID.getText().toString();
                String adminLoginPassword = jAdminPassword.getText().toString();

                if(adminLoginID.equals("admin")&& adminLoginPassword.equals("admin")){
                    Intent intentAdmin = new Intent(AdminLoginActivity.this, AdminActivity.class);
                    intentAdmin.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intentAdmin);
                    finish();
                }else{
                    Toast.makeText(AdminLoginActivity.this, "Failed Login", Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        });
    }
  }

AdminActivityClass

import android.content.Intent;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class AdminActivity extends AppCompatActivity {

    private FirebaseAuth mAdminAuth;
    private Toolbar jAdminToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin);

        mAdminAuth = FirebaseAuth.getInstance();
        jAdminToolbar = (Toolbar) findViewById(R.id.adminToolbar);
        setSupportActionBar(jAdminToolbar);
        getSupportActionBar().setTitle("Administrator");


    }

    @Override
    public void onStart() {
        super.onStart();
        FirebaseUser currentUser = mAdminAuth.getCurrentUser();

        if(currentUser == null){
            sendUserToStartPage();
        }

    }

    private void sendUserToStartPage(){
        Intent intentStart = new Intent(AdminActivity.this, StartActivity.class);
        startActivity(intentStart);
        finish();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        getMenuInflater().inflate(R.menu.activity_admin_menu, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);

        if(item.getItemId() == R.id.mainSignOutBtn){
            FirebaseAuth.getInstance().signOut();
            sendUserToStartPage();
        }

        if(item.getItemId() == R.id.mainViewContactsBtn){
            Intent intentViewContacts = new Intent(AdminActivity.this, AllUsersActivity.class);
            startActivity(intentViewContacts);
        }

        return true;
    }
}

Manifest File

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
    android:name=".SecurityApp"
    android:allowBackup="true"
    android:icon="@mipmap/appiconone"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/appiconone"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".StartActivity" />
    <activity
        android:name=".ResidentRegistrationActivity"
        android:parentActivityName=".StartActivity" />
    <activity
        android:name=".AdminLoginActivity"
        android:parentActivityName=".LoginActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.lenovo.securityapp.LoginActivity" />
    </activity>
    <activity
        android:name=".LoginActivity"
        android:parentActivityName=".StartActivity" />
    <activity
        android:name=".SettingsActivity"
        android:parentActivityName=".MainActivity" />
    <activity
        android:name=".DetailsActivity"
        android:parentActivityName=".SettingsActivity" />
    <activity
        android:name=".AllUsersActivity"
        android:parentActivityName=".MainActivity" />

    <activity android:name=".UserProfileActivity" />
    <activity
        android:name=".HelpInformationActivity"
        android:parentActivityName=".StartActivity" />

    <activity android:name=".AdminActivity" />

</application>

Problem

  1. ToolBar on AdminLogin does not allow me to return to LoginActivity when I select the back Button
  2. Admin Login does not work despite entering the hardcoded input for the Admin Name and Password. After clicking on the Login button, the app prompts out a White layout for a few seconds I am brought back to the StartActivity and the Toast message does not show "Failed Login".

SOLUTION

The problem was because the "AdminActivityClass" had

 @Override
public void onStart() {
    super.onStart();
    FirebaseUser currentUser = mAdminAuth.getCurrentUser();

    if(currentUser == null){
        sendUserToStartPage();
    }

}

private void sendUserToStartPage(){
    Intent intentStart = new Intent(AdminActivity.this, StartActivity.class);
    startActivity(intentStart);
    finish();
}

Since the Admin login was hardcoded, the currentUser within the FirebaseUser currentUser = mAdminAuth.getCurrentUser(); was set to null. This caused the activity to be sent back to the start page (sendUserToStartPage();)


Solution

  • After posting your full set of code, you should be doing the following.

    comment out the sendUserToStartPage(); inside of the currentuser == null and then try.
    

    why? Because the user IS null. why? because you hard coded it into the code. The user admin with password admin does not exist in your Firebase (and if it does, you never checked it prior) so when you sign in, you do not create a session for admin, therefore the current user is null.

    try doing this

    if ("admin".equals(adminLoginID)) {
        if ("admin".equals(adminLoginPassword)) {
            //goto activity
        }
    } else {
        //not admin
    }
    

    this might be better actually

    if (("admin".equals(adminLoginID)) && ("admin".equals(adminLoginPassword))) {
        //goto activity
    } else {
        //not admin
    }
    

    or even this....

    if (("admin".equals(jAdminID.getText().toString().trim())) && ("admin".equals(jAdminPassword.getText().toString().trim()))) {
        //goto activity
    } else {
        //not admin
    }
    

    Try this example in the manifest. Youre manifest for the activities are missing a theme. Also, its missed the meta-data.

    <activity
        android:name=".Leagues.CreateLeague"
        android:label="Create League"
        android:parentActivityName=".MainActivity"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme2">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.aaa.bbb.MainActivity" />
    </activity>