Firebase(7)

Firebase သင္တန္းမွ
=========

Email, Password Project Template
============

Email, Password နဲ႔ Create account, Sign in, Sign out, Reset password ေတြ လုပ္ႏိုင္တဲ့ Project template ပံုစံ ကို တင္ေပးလိုက္ပါတယ္။ ခ်ဲ႕ထြင္ အသံုးျပဳပါ။ (Email verification ထည့္မထားပါဘူး)။ Firebase Auth setup လုပ္ထားၿပီး google-services.json file ထည့္ထားရပါမယ္။

MainActivity နဲ႔ SignedInActivity ၂ခု ထည့္ထားပါတယ္။

========

MainActivity.java
========
package nnl.aide.lessons;

import android.app.*;
import android.os.*;
import com.google.firebase.auth.*;
import android.content.*;
import android.widget.*;
import android.view.*;
import com.google.android.gms.tasks.*;

public class MainActivity extends Activity
{
private TextView userText;
private TextView statusText;
private EditText emailText;
private EditText passwordText;

private FirebaseAuth fbAuth;
private FirebaseAuth.AuthStateListener authListener;

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

userText = (TextView) findViewById(R.id.userText);
statusText = (TextView) findViewById(R.id.statusText);
emailText = (EditText) findViewById(R.id.emailText);
passwordText = (EditText) findViewById(R.id.passwordText);
userText.setText("");
statusText.setText("Signed Out");

fbAuth = FirebaseAuth.getInstance();

authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(FirebaseAuth firebaseAuth) {

FirebaseUser user = firebaseAuth.getCurrentUser();

if (user != null) {
userText.setText(user.getEmail());
statusText.setText("Signed In");
//startActivity(new Intent(MainActivity.this,SignedInActivity.class));

} else {
userText.setText("");
statusText.setText("Signed Out");
}
}
};

}

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

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

public void createAccount(View view) {
String email = emailText.getText().toString();
String password = passwordText.getText().toString();

if (email.length() == 0) {
emailText.setError("Enter an email address");
return;
}

if (password.length() < 6) {
passwordText.setError("Password must be at least 6 characters");
return;
}

fbAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this,
new OnCompleteListener<AuthResult>() {
@Override
public void onComplete( Task<AuthResult> task) {

if (!task.isSuccessful()) {
notifyUser("Account creation failed");
}
}
});

}

public void signIn(View view) {

String email = emailText.getText().toString();
String password = passwordText.getText().toString();

if (email.length() == 0) {
emailText.setError("Enter an email address");
return;
}

if (password.length() < 6) {
passwordText.setError("Password must be at least 6 characters");
return;
}

fbAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this,
new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(
  Task<AuthResult> task) {

if (!task.isSuccessful()) {
notifyUser("Authentication failed");
}else{
startActivity(new Intent(MainActivity.this,SignedInActivity.class));
}
}
});

}

public void signOut(View view) {
fbAuth.signOut();
}

public void resetPassword(View view) {

String email = emailText.getText().toString();

if (email.length() == 0) {
emailText.setError("Enter an email address");
return;
}

fbAuth.sendPasswordResetEmail(email)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete( Task<Void> task) {
if (task.isSuccessful()) {
notifyUser("Reset email sent");
}
}
});
}
private void notifyUser(String message) {
Toast.makeText(MainActivity.this, message,
  Toast.LENGTH_SHORT).show();
}
}
========

main.xml
========
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">

<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userText"/>

<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Text"
android:id="@+id/statusText"/>

<EditText
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:ems="10"
android:id="@+id/emailText"/>

<EditText
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:ems="10"
android:id="@+id/passwordText"/>

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Create Account"
android:onClick="createAccount"/>

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Sign In"
android:onClick="signIn"/>

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Sign Out"
android:onClick="signOut"/>

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Reset Password"
android:onClick="resetPassword"/>

</LinearLayout>

========

SignedInActivity.java
========
package nnl.aide.lessons;
import android.app.*;
import android.os.*;
import com.google.firebase.auth.*;
import android.view.*;
import android.content.*;

public class SignedInActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO: Implement this method
super.onCreate(savedInstanceState);
setContentView(R.layout.signedin_layout);
}

public void signOut(View view) {
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(SignedInActivity.this,MainActivity.class));
}

}
========

signedin_layout.xml
========
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="You are signed in. Welcome!"/>

<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Sign Out"
android:onClick="signOut"/>

</LinearLayout>

========

AndroidManifest.xml
========
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nnl.aide.lessons" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:resizeableActivity = "true">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SignedInActivity"/>
</application>

</manifest>
========

app/build.gradle
========
apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
applicationId "nnl.aide.lessons"
minSdkVersion 16
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile 'com.google.firebase:firebase-auth:+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
========

:)

Comments

Popular posts from this blog

Firebase (2)

Story Book Project (8)

Story Book Project (7)