1
1
package com .firebase .uidemo ;
2
2
3
- import android .app .Activity ;
4
- import android .app .AlertDialog ;
5
- import android .app .Dialog ;
6
- import android .app .DialogFragment ;
7
- import android .content .DialogInterface ;
8
3
import android .graphics .Color ;
4
+ import android .graphics .Typeface ;
9
5
import android .os .Bundle ;
10
6
import android .support .v7 .widget .LinearLayoutManager ;
11
7
import android .support .v7 .widget .RecyclerView ;
12
8
import android .util .Log ;
13
9
import android .view .Gravity ;
14
- import android .view .LayoutInflater ;
15
10
import android .view .Menu ;
11
+ import android .view .MenuInflater ;
16
12
import android .view .MenuItem ;
17
13
import android .view .View ;
18
14
import android .widget .Button ;
25
21
import com .firebase .client .Query ;
26
22
import com .firebase .ui .FirebaseLoginBaseActivity ;
27
23
import com .firebase .ui .FirebaseRecyclerViewAdapter ;
28
- import com .firebase .ui .com .firebasei .ui .authimpl .SocialProvider ;
29
24
30
25
public class RecyclerViewDemoActivity extends FirebaseLoginBaseActivity {
31
26
32
27
public static String TAG = "FirebaseUI.chat" ;
33
28
private Firebase mRef ;
34
29
private AuthData mAuthData ;
30
+ private String name ;
31
+ private String uid ;
35
32
private Button mSendButton ;
36
33
private EditText mMessageEdit ;
37
34
@@ -40,19 +37,15 @@ protected void onCreate(Bundle savedInstanceState) {
40
37
super .onCreate (savedInstanceState );
41
38
setContentView (R .layout .recycler_view_demo );
42
39
43
- final String name = "Android User" ;
44
40
mSendButton = (Button ) findViewById (R .id .sendButton );
45
41
mMessageEdit = (EditText ) findViewById (R .id .messageEdit );
46
- final RecyclerView messages = (RecyclerView ) findViewById (R .id .messagesList );
47
- messages .setHasFixedSize (true );
48
- messages .setLayoutManager (new LinearLayoutManager (this ));
49
42
50
43
mRef = new Firebase ("https://bucket.firebaseio.com/chat" );
51
44
52
45
mSendButton .setOnClickListener (new View .OnClickListener () {
53
46
@ Override
54
47
public void onClick (View v ) {
55
- Chat chat = new Chat (name , mMessageEdit .getText ().toString ());
48
+ Chat chat = new Chat (name , mAuthData . getUid (), mMessageEdit .getText ().toString ());
56
49
mRef .push ().setValue (chat , new Firebase .CompletionListener () {
57
50
@ Override
58
51
public void onComplete (FirebaseError firebaseError , Firebase firebase ) {
@@ -65,20 +58,36 @@ public void onComplete(FirebaseError firebaseError, Firebase firebase) {
65
58
}
66
59
});
67
60
61
+ updateChat ();
62
+ }
63
+
64
+ protected void updateChat () {
65
+ final RecyclerView messages = (RecyclerView ) findViewById (R .id .messagesList );
66
+
67
+ LinearLayoutManager manager = new LinearLayoutManager (this );
68
+ manager .setStackFromEnd (true );
69
+
70
+ messages .setHasFixedSize (true );
71
+ messages .setLayoutManager (manager );
72
+
68
73
Query recentMessages = mRef .limitToLast (50 );
69
74
FirebaseRecyclerViewAdapter <Chat , ChatHolder > adapter = new FirebaseRecyclerViewAdapter <Chat , ChatHolder >(Chat .class , android .R .layout .two_line_list_item , ChatHolder .class , recentMessages ) {
70
75
@ Override
71
76
public void populateViewHolder (ChatHolder chatView , Chat chat ) {
72
77
chatView .textView .setText (chat .getText ());
73
- chatView .textView .setPadding (10 , 0 , 10 , 0 );
78
+ chatView .textView .setPadding (30 , 30 , 30 , 0 );
74
79
chatView .nameView .setText (chat .getName ());
75
- chatView .nameView .setPadding (10 , 0 , 10 , 15 );
76
- if (chat .getName ().equals (name )) {
80
+ chatView .nameView .setPadding (30 , 0 , 30 , 30 );
81
+ chatView .textView .setTextColor (Color .parseColor ("#000000" ));
82
+ chatView .textView .setTypeface (null , Typeface .NORMAL );
83
+ if (mAuthData != null && chat .getUid ().equals (mAuthData .getUid ())) {
77
84
chatView .textView .setGravity (Gravity .END );
78
85
chatView .nameView .setGravity (Gravity .END );
79
- chatView .nameView .setTextColor (Color .parseColor ("#8BC34A" ));
86
+ chatView .nameView .setTextColor (Color .parseColor ("#AAAAAA" ));
87
+ chatView .itemView .setBackground (getDrawable (R .drawable .outgoing_message ));
80
88
} else {
81
89
chatView .nameView .setTextColor (Color .parseColor ("#00BCD4" ));
90
+ chatView .itemView .setBackground (getDrawable (R .drawable .incoming_message ));
82
91
}
83
92
}
84
93
};
@@ -91,28 +100,28 @@ public void populateViewHolder(ChatHolder chatView, Chat chat) {
91
100
92
101
@ Override
93
102
public boolean onCreateOptionsMenu (Menu menu ) {
94
- menu .add (LOGIN , LOGIN , LOGIN , "Login" );
95
- menu .add (LOGOUT , LOGOUT , LOGOUT , "Log out" );
96
-
97
- return super .onCreateOptionsMenu (menu );
103
+ MenuInflater inflater = getMenuInflater ();
104
+ inflater .inflate (R .menu .chat_login_menu , menu );
105
+ return true ;
98
106
}
99
107
100
108
@ Override
101
109
public boolean onPrepareOptionsMenu (Menu menu ) {
102
- menu .getItem ( LOGIN - Menu . FIRST ).setVisible (mAuthData == null );
103
- menu .getItem ( LOGOUT - Menu . FIRST ).setVisible (mAuthData != null );
110
+ menu .findItem ( R . id . login_menu_item ).setVisible (mAuthData == null );
111
+ menu .findItem ( R . id . logout_menu_item ).setVisible (mAuthData != null );
104
112
mSendButton .setEnabled (mAuthData != null );
105
113
mMessageEdit .setEnabled (mAuthData != null );
106
- return super .onPrepareOptionsMenu (menu );
114
+
115
+ return true ;
107
116
}
108
117
109
118
@ Override
110
119
public boolean onOptionsItemSelected (MenuItem item ) {
111
120
switch (item .getItemId ()) {
112
- case LOGIN :
121
+ case R . id . login_menu_item :
113
122
this .showFirebaseLoginPrompt ();
114
123
return true ;
115
- case LOGOUT :
124
+ case R . id . logout_menu_item :
116
125
this .logout ();
117
126
return true ;
118
127
}
@@ -124,26 +133,39 @@ public boolean onOptionsItemSelected(MenuItem item) {
124
133
// Start of FirebaseLoginBaseActivity
125
134
126
135
@ Override
127
- public void onFirebaseLogin (AuthData authData ) {
128
- Log .i (TAG , "Logged in" );
136
+ public void onFirebaseLoginSuccess (AuthData authData ) {
137
+ Log .i (TAG , "Logged in to " + authData . getProvider (). toString () );
129
138
mAuthData = authData ;
139
+
140
+ switch (mAuthData .getProvider ()) {
141
+ case "password" :
142
+ name = (String ) mAuthData .getProviderData ().get ("email" );
143
+ break ;
144
+ default :
145
+ name = (String ) mAuthData .getProviderData ().get ("displayName" );
146
+ break ;
147
+ }
148
+
149
+ updateChat ();
130
150
invalidateOptionsMenu ();
131
151
}
132
152
133
153
@ Override
134
154
public void onFirebaseLogout () {
135
155
Log .i (TAG , "Logged out" );
136
156
mAuthData = null ;
157
+ name = "" ;
137
158
invalidateOptionsMenu ();
159
+ updateChat ();
138
160
}
139
161
140
162
@ Override
141
- public void onFirebaseLoginError (FirebaseError firebaseError ) {
163
+ public void onFirebaseLoginProviderError (FirebaseError firebaseError ) {
142
164
Log .e (TAG , firebaseError .toString ());
143
165
}
144
166
145
167
@ Override
146
- public void onFirebaseLoginCancel ( ) {
168
+ public void onFirebaseLoginUserError ( FirebaseError firebaseError ) {
147
169
Log .i (TAG , "Login cancelled" );
148
170
}
149
171
@@ -157,29 +179,37 @@ public Firebase getFirebaseRef() {
157
179
public static class Chat {
158
180
String name ;
159
181
String text ;
182
+ String uid ;
160
183
161
184
public Chat () {
162
185
}
163
186
164
- public Chat (String name , String message ) {
187
+ public Chat (String name , String uid , String message ) {
165
188
this .name = name ;
166
189
this .text = message ;
190
+ this .uid = uid ;
167
191
}
168
192
169
193
public String getName () {
170
194
return name ;
171
195
}
172
196
197
+ public String getUid () {
198
+ return uid ;
199
+ }
200
+
173
201
public String getText () {
174
202
return text ;
175
203
}
176
204
}
177
205
178
206
public static class ChatHolder extends RecyclerView .ViewHolder {
179
207
TextView nameView , textView ;
208
+ View itemView ;
180
209
181
210
public ChatHolder (View itemView ) {
182
211
super (itemView );
212
+ this .itemView = itemView ;
183
213
nameView = (TextView ) itemView .findViewById (android .R .id .text2 );
184
214
textView = (TextView ) itemView .findViewById (android .R .id .text1 );
185
215
}
0 commit comments