Skip to content

Commit 4c3a5a9

Browse files
committed
Add basic login/logout functionality
1 parent 88e010c commit 4c3a5a9

File tree

3 files changed

+98
-14
lines changed

3 files changed

+98
-14
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package="com.firebase.uidemo">
33

44
<uses-permission android:name="android.permission.INTERNET" />
5+
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
56

67
<application
78
android:allowBackup="true"

app/src/main/java/com/firebase/uidemo/RecyclerViewDemoActivity.java

Lines changed: 95 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,63 @@
22

33
import android.graphics.Color;
44
import android.os.Bundle;
5-
import android.support.v7.app.AppCompatActivity;
65
import android.support.v7.widget.LinearLayoutManager;
76
import android.support.v7.widget.RecyclerView;
87
import android.util.Log;
98
import android.view.Gravity;
9+
import android.view.Menu;
10+
import android.view.MenuItem;
1011
import android.view.View;
1112
import android.widget.Button;
1213
import android.widget.EditText;
14+
import android.widget.LinearLayout;
1315
import android.widget.TextView;
1416

17+
import com.firebase.client.AuthData;
1518
import com.firebase.client.Firebase;
1619
import com.firebase.client.FirebaseError;
20+
import com.firebase.ui.FirebaseLoginBaseActivity;
1721
import com.firebase.ui.FirebaseRecyclerViewAdapter;
22+
import com.firebase.ui.com.firebasei.ui.authimpl.SocialProvider;
1823

1924

20-
public class RecyclerViewDemoActivity extends AppCompatActivity {
25+
public class RecyclerViewDemoActivity extends FirebaseLoginBaseActivity {
26+
27+
public static String TAG = "FirebaseUI.chat";
28+
private Firebase mRef;
29+
private AuthData mAuthData;
30+
private Button mSendButton;
31+
private EditText mMessageEdit;
32+
2133
@Override
2234
protected void onCreate(Bundle savedInstanceState) {
2335
super.onCreate(savedInstanceState);
2436
setContentView(R.layout.recycler_view_demo);
2537

26-
final Firebase ref = new Firebase("https://firebaseui.firebaseio.com/chat");
27-
2838
final String name = "Android User";
29-
final Button sendButton = (Button) findViewById(R.id.sendButton);
30-
final EditText messageEdit = (EditText) findViewById(R.id.messageEdit);
39+
mSendButton = (Button) findViewById(R.id.sendButton);
40+
mMessageEdit = (EditText) findViewById(R.id.messageEdit);
3141
final RecyclerView messages = (RecyclerView) findViewById(R.id.messagesList);
3242
messages.setHasFixedSize(true);
3343
messages.setLayoutManager(new LinearLayoutManager(this));
3444

35-
sendButton.setOnClickListener(new View.OnClickListener() {
45+
mSendButton.setOnClickListener(new View.OnClickListener() {
3646
@Override
3747
public void onClick(View v) {
38-
Chat chat = new Chat(name, messageEdit.getText().toString());
39-
ref.push().setValue(chat, new Firebase.CompletionListener() {
48+
Chat chat = new Chat(name, mMessageEdit.getText().toString());
49+
mRef.push().setValue(chat, new Firebase.CompletionListener() {
4050
@Override
4151
public void onComplete(FirebaseError firebaseError, Firebase firebase) {
4252
if (firebaseError != null) {
43-
Log.e("FirebaseUI.chat", firebaseError.toString());
53+
Log.e(TAG, firebaseError.toString());
4454
}
4555
}
4656
});
47-
messageEdit.setText("");
57+
mMessageEdit.setText("");
4858
}
4959
});
5060

51-
FirebaseRecyclerViewAdapter<Chat, ChatHolder> adapter = new FirebaseRecyclerViewAdapter<Chat, ChatHolder>(Chat.class, android.R.layout.two_line_list_item, ChatHolder.class, ref) {
61+
FirebaseRecyclerViewAdapter<Chat, ChatHolder> adapter = new FirebaseRecyclerViewAdapter<Chat, ChatHolder>(Chat.class, android.R.layout.two_line_list_item, ChatHolder.class, mRef) {
5262
@Override
5363
public void populateViewHolder(ChatHolder chatView, Chat chat) {
5464
chatView.textView.setText(chat.getText());
@@ -68,6 +78,79 @@ public void populateViewHolder(ChatHolder chatView, Chat chat) {
6878
messages.setAdapter(adapter);
6979
}
7080

81+
public static final int LOGIN = Menu.FIRST;
82+
public static final int LOGOUT = LOGIN+1;
83+
84+
@Override
85+
public boolean onCreateOptionsMenu(Menu menu) {
86+
menu.add(LOGIN, LOGIN, LOGIN, "Log in");
87+
menu.add(LOGOUT, LOGOUT, LOGOUT, "Log out");
88+
89+
return super.onCreateOptionsMenu(menu);
90+
}
91+
92+
@Override
93+
public boolean onPrepareOptionsMenu(Menu menu) {
94+
menu.getItem(LOGIN-Menu.FIRST).setVisible(mAuthData == null);
95+
menu.getItem(LOGOUT-Menu.FIRST).setVisible(mAuthData != null);
96+
mSendButton.setEnabled(mAuthData != null);
97+
mMessageEdit.setEnabled(mAuthData != null);
98+
return super.onPrepareOptionsMenu(menu);
99+
}
100+
101+
@Override
102+
public boolean onOptionsItemSelected(MenuItem item) {
103+
switch (item.getItemId()) {
104+
case LOGIN:
105+
this.loginWithProvider(SocialProvider.Google);
106+
return true;
107+
case LOGOUT:
108+
this.logout();
109+
return true;
110+
}
111+
112+
return super.onOptionsItemSelected(item);
113+
}
114+
115+
116+
117+
// Start of FirebaseLoginBaseActivity
118+
119+
@Override
120+
public void onFirebaseLogin(AuthData authData) {
121+
Log.i(TAG, "Logged in");
122+
mAuthData = authData;
123+
invalidateOptionsMenu();
124+
}
125+
126+
@Override
127+
public void onFirebaseLogout() {
128+
Log.i(TAG, "Logged out");
129+
mAuthData = null;
130+
invalidateOptionsMenu();
131+
}
132+
133+
@Override
134+
public void onFirebaseLoginError(FirebaseError firebaseError) {
135+
Log.e(TAG, firebaseError.toString());
136+
}
137+
138+
@Override
139+
public void onFirebaseLoginCancel() {
140+
Log.i(TAG, "Login cancelled");
141+
}
142+
143+
@Override
144+
public Firebase setupFirebase() {
145+
if (mRef == null) {
146+
mRef = new Firebase("https://firebaseui.firebaseio.com/chat");
147+
}
148+
149+
return mRef;
150+
}
151+
152+
// End of FirebaseLoginBaseActivity
153+
71154

72155
public static class Chat {
73156
String name;

app/src/main/res/layout/recycler_view_demo.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
android:layout_alignParentLeft="true"
1414
android:layout_alignParentStart="true"
1515
android:layout_alignParentTop="true"
16-
android:layout_above="@+id/linearLayout" />
16+
android:layout_above="@+id/footer" />
1717

1818
<LinearLayout
1919
android:orientation="horizontal"
@@ -22,7 +22,7 @@
2222
android:layout_alignParentLeft="true"
2323
android:layout_alignParentStart="true"
2424
android:layout_alignParentBottom="true"
25-
android:id="@+id/linearLayout">
25+
android:id="@+id/footer">
2626

2727
<EditText
2828
android:layout_width="wrap_content"

0 commit comments

Comments
 (0)