2
2
3
3
import android .graphics .Color ;
4
4
import android .os .Bundle ;
5
- import android .support .v7 .app .AppCompatActivity ;
6
5
import android .support .v7 .widget .LinearLayoutManager ;
7
6
import android .support .v7 .widget .RecyclerView ;
8
7
import android .util .Log ;
9
8
import android .view .Gravity ;
9
+ import android .view .Menu ;
10
+ import android .view .MenuItem ;
10
11
import android .view .View ;
11
12
import android .widget .Button ;
12
13
import android .widget .EditText ;
14
+ import android .widget .LinearLayout ;
13
15
import android .widget .TextView ;
14
16
17
+ import com .firebase .client .AuthData ;
15
18
import com .firebase .client .Firebase ;
16
19
import com .firebase .client .FirebaseError ;
20
+ import com .firebase .ui .FirebaseLoginBaseActivity ;
17
21
import com .firebase .ui .FirebaseRecyclerViewAdapter ;
22
+ import com .firebase .ui .com .firebasei .ui .authimpl .SocialProvider ;
18
23
19
24
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
+
21
33
@ Override
22
34
protected void onCreate (Bundle savedInstanceState ) {
23
35
super .onCreate (savedInstanceState );
24
36
setContentView (R .layout .recycler_view_demo );
25
37
26
- final Firebase ref = new Firebase ("https://firebaseui.firebaseio.com/chat" );
27
-
28
38
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 );
31
41
final RecyclerView messages = (RecyclerView ) findViewById (R .id .messagesList );
32
42
messages .setHasFixedSize (true );
33
43
messages .setLayoutManager (new LinearLayoutManager (this ));
34
44
35
- sendButton .setOnClickListener (new View .OnClickListener () {
45
+ mSendButton .setOnClickListener (new View .OnClickListener () {
36
46
@ Override
37
47
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 () {
40
50
@ Override
41
51
public void onComplete (FirebaseError firebaseError , Firebase firebase ) {
42
52
if (firebaseError != null ) {
43
- Log .e ("FirebaseUI.chat" , firebaseError .toString ());
53
+ Log .e (TAG , firebaseError .toString ());
44
54
}
45
55
}
46
56
});
47
- messageEdit .setText ("" );
57
+ mMessageEdit .setText ("" );
48
58
}
49
59
});
50
60
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 ) {
52
62
@ Override
53
63
public void populateViewHolder (ChatHolder chatView , Chat chat ) {
54
64
chatView .textView .setText (chat .getText ());
@@ -68,6 +78,79 @@ public void populateViewHolder(ChatHolder chatView, Chat chat) {
68
78
messages .setAdapter (adapter );
69
79
}
70
80
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
+
71
154
72
155
public static class Chat {
73
156
String name ;
0 commit comments