在OverFlow菜单中实施Firebase帐户设置

时间:2016-07-23 18:29:15

标签: android android-layout authentication firebase firebase-authentication

我是Firebase和开发人员的新手,我使用Firebase创建了一个应用程序,并为其提供了一种登录和退出的方法,但在活动中,我希望注销和其他帐户设置为如果可能的话,由OverFlow菜单完成。

我想在OverFlow菜单上实现的活动代码:

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

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.auth.FirebaseUser;

public class MainActivity extends AppCompatActivity {

private Button btnChangeEmail, btnChangePassword, btnSendResetEmail,    btnRemoveUser,
        changeEmail, changePassword, sendEmail, remove, signOut;

private EditText oldEmail, newEmail, password, newPassword;
private ProgressBar progressBar;
private FirebaseAuth.AuthStateListener authListener;
private FirebaseAuth auth;

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle(getString(R.string.app_name));
    setSupportActionBar(toolbar);

    //get firebase auth instance
    auth = FirebaseAuth.getInstance();

    //get current user
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

    authListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user == null) {
                // user auth state is changed - user is null
                // launch login activity
                startActivity(new Intent(MainActivity.this, LoginActivity.class));
                finish();
            }
        }
    };

    btnChangeEmail = (Button) findViewById(R.id.change_email_button);
    btnChangePassword = (Button) findViewById(R.id.change_password_button);
    btnSendResetEmail = (Button) findViewById(R.id.sending_pass_reset_button);
    btnRemoveUser = (Button) findViewById(R.id.remove_user_button);
    changeEmail = (Button) findViewById(R.id.changeEmail);
    changePassword = (Button) findViewById(R.id.changePass);
    sendEmail = (Button) findViewById(R.id.send);
    remove = (Button) findViewById(R.id.remove);
    signOut = (Button) findViewById(R.id.sign_out);

    oldEmail = (EditText) findViewById(R.id.old_email);
    newEmail = (EditText) findViewById(R.id.new_email);
    password = (EditText) findViewById(R.id.password);
    newPassword = (EditText) findViewById(R.id.newPassword);

    oldEmail.setVisibility(View.GONE);
    newEmail.setVisibility(View.GONE);
    password.setVisibility(View.GONE);
    newPassword.setVisibility(View.GONE);
    changeEmail.setVisibility(View.GONE);
    changePassword.setVisibility(View.GONE);
    sendEmail.setVisibility(View.GONE);
    remove.setVisibility(View.GONE);

    progressBar = (ProgressBar) findViewById(R.id.progressBar);

    if (progressBar != null) {
        progressBar.setVisibility(View.GONE);
    }

    btnChangeEmail.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            oldEmail.setVisibility(View.GONE);
            newEmail.setVisibility(View.VISIBLE);
            password.setVisibility(View.GONE);
            newPassword.setVisibility(View.GONE);
            changeEmail.setVisibility(View.VISIBLE);
            changePassword.setVisibility(View.GONE);
            sendEmail.setVisibility(View.GONE);
            remove.setVisibility(View.GONE);
        }
    });

    changeEmail.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            progressBar.setVisibility(View.VISIBLE);
            if (user != null && !newEmail.getText().toString().trim().equals("")) {
                user.updateEmail(newEmail.getText().toString().trim())
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    Toast.makeText(MainActivity.this, "Email address is updated. Please sign in with new email id!", Toast.LENGTH_LONG).show();
                                    signOut();
                                    progressBar.setVisibility(View.GONE);
                                } else {
                                    Toast.makeText(MainActivity.this, "Failed to update email!", Toast.LENGTH_LONG).show();
                                    progressBar.setVisibility(View.GONE);
                                }
                            }
                        });
            } else if (newEmail.getText().toString().trim().equals("")) {
                newEmail.setError("Enter email");
                progressBar.setVisibility(View.GONE);
            }
        }
    });

    btnChangePassword.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            oldEmail.setVisibility(View.GONE);
            newEmail.setVisibility(View.GONE);
            password.setVisibility(View.GONE);
            newPassword.setVisibility(View.VISIBLE);
            changeEmail.setVisibility(View.GONE);
            changePassword.setVisibility(View.VISIBLE);
            sendEmail.setVisibility(View.GONE);
            remove.setVisibility(View.GONE);
        }
    });

    changePassword.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            progressBar.setVisibility(View.VISIBLE);
            if (user != null && !newPassword.getText().toString().trim().equals("")) {
                if (newPassword.getText().toString().trim().length() < 6) {
                    newPassword.setError("Password too short, enter minimum 6 characters");
                    progressBar.setVisibility(View.GONE);
                } else {
                    user.updatePassword(newPassword.getText().toString().trim())
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        Toast.makeText(MainActivity.this, "Password is updated, sign in with new password!", Toast.LENGTH_SHORT).show();
                                        signOut();
                                        progressBar.setVisibility(View.GONE);
                                    } else {
                                        Toast.makeText(MainActivity.this, "Failed to update password!", Toast.LENGTH_SHORT).show();
                                        progressBar.setVisibility(View.GONE);
                                    }
                                }
                            });
                }
            } else if (newPassword.getText().toString().trim().equals("")) {
                newPassword.setError("Enter password");
                progressBar.setVisibility(View.GONE);
            }
        }
    });

    btnSendResetEmail.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            oldEmail.setVisibility(View.VISIBLE);
            newEmail.setVisibility(View.GONE);
            password.setVisibility(View.GONE);
            newPassword.setVisibility(View.GONE);
            changeEmail.setVisibility(View.GONE);
            changePassword.setVisibility(View.GONE);
            sendEmail.setVisibility(View.VISIBLE);
            remove.setVisibility(View.GONE);
        }
    });

    sendEmail.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            progressBar.setVisibility(View.VISIBLE);
            if (!oldEmail.getText().toString().trim().equals("")) {
                auth.sendPasswordResetEmail(oldEmail.getText().toString().trim())
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    Toast.makeText(MainActivity.this, "Reset password email is sent!", Toast.LENGTH_SHORT).show();
                                    progressBar.setVisibility(View.GONE);
                                } else {
                                    Toast.makeText(MainActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show();
                                    progressBar.setVisibility(View.GONE);
                                }
                            }
                        });
            } else {
                oldEmail.setError("Enter email");
                progressBar.setVisibility(View.GONE);
            }
        }
    });

    btnRemoveUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            progressBar.setVisibility(View.VISIBLE);
            if (user != null) {
                user.delete()
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    Toast.makeText(MainActivity.this, "Your profile is deleted:( Create a account now!", Toast.LENGTH_SHORT).show();
                                    startActivity(new Intent(MainActivity.this, SignupActivity.class));
                                    finish();
                                    progressBar.setVisibility(View.GONE);
                                } else {
                                    Toast.makeText(MainActivity.this, "Failed to delete your account!", Toast.LENGTH_SHORT).show();
                                    progressBar.setVisibility(View.GONE);
                                }
                            }
                        });
            }
        }
    });

    signOut.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            signOut();
        }
    });

}

//sign out method
public void signOut() {
    auth.signOut();
}

@Override
protected void onResume() {
    super.onResume();
    progressBar.setVisibility(View.GONE);
}

@Override
public void onStart() {
    super.onStart();
    auth.addAuthStateListener(authListener);
}

@Override
public void onStop() {
    super.onStop();
    if (authListener != null) {
        auth.removeAuthStateListener(authListener);
    }
}
}

图像:

!Check this] 1

1 个答案:

答案 0 :(得分:1)

如果您想强制将图标加入溢出,则必须将app:showAsAction="never"添加到菜单xml文件中的<item>标记中。 E.g:

<item
    app:showAsAction="never"
    android:title=""
    android:icon="@drawable/icon"
    android:id="@+id/icon"
    />

如果您甚至没有菜单操作,请按以下步骤操作:

第1步:创建菜单xml 右键单击res目录,选择新建&gt; Android资源目录。将资源名称设置为菜单,并为其添加名称。现在,如果尚未自动创建menu.xml,则创建一个menu.xml,并添加所需的所有项目。例如,对于“溢出”菜单中的注销按钮:

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:title="@string/logout"
    app:showAsAction="always"
    android:id="@+id/logout"

    />
</menu>

showAsIcon属性设置为`never&#39;使它总是显示在溢出。

第2步:充气并提供行动:覆盖onCreateOptions菜单,以便您可以创建菜单:

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    //Inflate the menu.xml you created:
    inflater.inflate(R.menu.menu_cno, menu);
    return super.onCreateOptionsMenu(menu);
}

第3步:设置回调:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        //The id of the <item> tag we created was logout, so, if the user clicks on an item with the id logout, we call on doWhateverYouWant(), in your case, doWhateverYouWant() is you logout method.
        case R.id.logout:
            doWhateverYouWant();
            break;
        default:
            return super.onOptionsItemSelected(item);
    }
    return false;

}

你已经完成了。