32
32
import com .google .android .gms .tasks .OnSuccessListener ;
33
33
import com .google .firebase .auth .AuthResult ;
34
34
import com .google .firebase .auth .FirebaseAuth ;
35
- import com .google .firebase .auth .FirebaseUser ;
36
35
import com .google .firebase .database .DatabaseError ;
37
36
import com .google .firebase .database .DatabaseReference ;
38
37
import com .google .firebase .database .FirebaseDatabase ;
39
38
import com .google .firebase .database .Query ;
40
39
41
- public class ChatActivity extends AppCompatActivity implements FirebaseAuth .AuthStateListener {
40
+ public class ChatActivity extends AppCompatActivity implements FirebaseAuth .AuthStateListener , View . OnClickListener {
42
41
private static final String TAG = "RecyclerViewDemo" ;
43
42
44
43
private FirebaseAuth mAuth ;
45
- private DatabaseReference mRef ;
46
- private DatabaseReference mChatRef ;
44
+ protected DatabaseReference mChatRef ;
47
45
private Button mSendButton ;
48
- private EditText mMessageEdit ;
46
+ protected EditText mMessageEdit ;
49
47
50
48
private RecyclerView mMessages ;
51
49
private LinearLayoutManager mManager ;
52
- private FirebaseRecyclerAdapter <Chat , ChatHolder > mAdapter ;
53
- private TextView mEmptyListMessage ;
50
+ protected FirebaseRecyclerAdapter <Chat , ChatHolder > mAdapter ;
51
+ protected TextView mEmptyListMessage ;
54
52
55
53
@ Override
56
54
protected void onCreate (Bundle savedInstanceState ) {
@@ -64,28 +62,9 @@ protected void onCreate(Bundle savedInstanceState) {
64
62
mMessageEdit = (EditText ) findViewById (R .id .messageEdit );
65
63
mEmptyListMessage = (TextView ) findViewById (R .id .emptyTextView );
66
64
67
- mRef = FirebaseDatabase .getInstance ().getReference ();
68
- mChatRef = mRef .child ("chats" );
65
+ mChatRef = FirebaseDatabase .getInstance ().getReference ().child ("chats" );
69
66
70
- mSendButton .setOnClickListener (new View .OnClickListener () {
71
- @ Override
72
- public void onClick (View v ) {
73
- String uid = mAuth .getCurrentUser ().getUid ();
74
- String name = "User " + uid .substring (0 , 6 );
75
-
76
- Chat chat = new Chat (name , mMessageEdit .getText ().toString (), uid );
77
- mChatRef .push ().setValue (chat , new DatabaseReference .CompletionListener () {
78
- @ Override
79
- public void onComplete (DatabaseError error , DatabaseReference reference ) {
80
- if (error != null ) {
81
- Log .e (TAG , "Failed to write message" , error .toException ());
82
- }
83
- }
84
- });
85
-
86
- mMessageEdit .setText ("" );
87
- }
88
- });
67
+ mSendButton .setOnClickListener (this );
89
68
90
69
mManager = new LinearLayoutManager (this );
91
70
mManager .setReverseLayout (false );
@@ -126,33 +105,30 @@ public void onDestroy() {
126
105
}
127
106
128
107
@ Override
129
- public void onAuthStateChanged ( @ NonNull FirebaseAuth firebaseAuth ) {
130
- updateUI ();
131
- }
108
+ public void onClick ( View v ) {
109
+ String uid = mAuth . getCurrentUser (). getUid ();
110
+ String name = "User " + uid . substring ( 0 , 6 );
132
111
133
- private void attachRecyclerViewAdapter () {
134
- Query lastFifty = mChatRef .limitToLast (50 );
135
- mAdapter = new FirebaseRecyclerAdapter <Chat , ChatHolder >(
136
- Chat .class , R .layout .message , ChatHolder .class , lastFifty ) {
112
+ Chat chat = new Chat (name , mMessageEdit .getText ().toString (), uid );
113
+ mChatRef .push ().setValue (chat , new DatabaseReference .CompletionListener () {
137
114
@ Override
138
- public void populateViewHolder (ChatHolder holder , Chat chat , int position ) {
139
- holder .setName (chat .getName ());
140
- holder .setText (chat .getMessage ());
141
-
142
- FirebaseUser currentUser = mAuth .getCurrentUser ();
143
- if (currentUser != null && chat .getUid ().equals (currentUser .getUid ())) {
144
- holder .setIsSender (true );
145
- } else {
146
- holder .setIsSender (false );
115
+ public void onComplete (DatabaseError error , DatabaseReference reference ) {
116
+ if (error != null ) {
117
+ Log .e (TAG , "Failed to write message" , error .toException ());
147
118
}
148
119
}
120
+ });
149
121
150
- @ Override
151
- public void onDataChanged () {
152
- // If there are no chat messages, show a view that invites the user to add a message.
153
- mEmptyListMessage .setVisibility (mAdapter .getItemCount () == 0 ? View .VISIBLE : View .GONE );
154
- }
155
- };
122
+ mMessageEdit .setText ("" );
123
+ }
124
+
125
+ @ Override
126
+ public void onAuthStateChanged (@ NonNull FirebaseAuth firebaseAuth ) {
127
+ updateUI ();
128
+ }
129
+
130
+ private void attachRecyclerViewAdapter () {
131
+ mAdapter = getAdapter ();
156
132
157
133
// Scroll to bottom on new messages
158
134
mAdapter .registerAdapterDataObserver (new RecyclerView .AdapterDataObserver () {
@@ -165,6 +141,26 @@ public void onItemRangeInserted(int positionStart, int itemCount) {
165
141
mMessages .setAdapter (mAdapter );
166
142
}
167
143
144
+ protected FirebaseRecyclerAdapter <Chat , ChatHolder > getAdapter () {
145
+ Query lastFifty = mChatRef .limitToLast (50 );
146
+ return new FirebaseRecyclerAdapter <Chat , ChatHolder >(
147
+ Chat .class ,
148
+ R .layout .message ,
149
+ ChatHolder .class ,
150
+ lastFifty ) {
151
+ @ Override
152
+ public void populateViewHolder (ChatHolder holder , Chat chat , int position ) {
153
+ holder .bind (chat );
154
+ }
155
+
156
+ @ Override
157
+ public void onDataChanged () {
158
+ // If there are no chat messages, show a view that invites the user to add a message.
159
+ mEmptyListMessage .setVisibility (getItemCount () == 0 ? View .VISIBLE : View .GONE );
160
+ }
161
+ };
162
+ }
163
+
168
164
private void signInAnonymously () {
169
165
Toast .makeText (this , "Signing in..." , Toast .LENGTH_SHORT ).show ();
170
166
mAuth .signInAnonymously ()
0 commit comments