3232import com .google .android .gms .tasks .OnSuccessListener ;
3333import com .google .firebase .auth .AuthResult ;
3434import com .google .firebase .auth .FirebaseAuth ;
35- import com .google .firebase .auth .FirebaseUser ;
3635import com .google .firebase .database .DatabaseError ;
3736import com .google .firebase .database .DatabaseReference ;
3837import com .google .firebase .database .FirebaseDatabase ;
3938import com .google .firebase .database .Query ;
4039
41- public class ChatActivity extends AppCompatActivity implements FirebaseAuth .AuthStateListener {
40+ public class ChatActivity extends AppCompatActivity implements FirebaseAuth .AuthStateListener , View . OnClickListener {
4241 private static final String TAG = "RecyclerViewDemo" ;
4342
4443 private FirebaseAuth mAuth ;
45- private DatabaseReference mRef ;
46- private DatabaseReference mChatRef ;
44+ protected DatabaseReference mChatRef ;
4745 private Button mSendButton ;
48- private EditText mMessageEdit ;
46+ protected EditText mMessageEdit ;
4947
5048 private RecyclerView mMessages ;
5149 private LinearLayoutManager mManager ;
52- private FirebaseRecyclerAdapter <Chat , ChatHolder > mAdapter ;
53- private TextView mEmptyListMessage ;
50+ protected FirebaseRecyclerAdapter <Chat , ChatHolder > mAdapter ;
51+ protected TextView mEmptyListMessage ;
5452
5553 @ Override
5654 protected void onCreate (Bundle savedInstanceState ) {
@@ -64,28 +62,9 @@ protected void onCreate(Bundle savedInstanceState) {
6462 mMessageEdit = (EditText ) findViewById (R .id .messageEdit );
6563 mEmptyListMessage = (TextView ) findViewById (R .id .emptyTextView );
6664
67- mRef = FirebaseDatabase .getInstance ().getReference ();
68- mChatRef = mRef .child ("chats" );
65+ mChatRef = FirebaseDatabase .getInstance ().getReference ().child ("chats" );
6966
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 );
8968
9069 mManager = new LinearLayoutManager (this );
9170 mManager .setReverseLayout (false );
@@ -126,33 +105,30 @@ public void onDestroy() {
126105 }
127106
128107 @ 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 );
132111
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 () {
137114 @ 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 ());
147118 }
148119 }
120+ });
149121
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 ();
156132
157133 // Scroll to bottom on new messages
158134 mAdapter .registerAdapterDataObserver (new RecyclerView .AdapterDataObserver () {
@@ -165,6 +141,26 @@ public void onItemRangeInserted(int positionStart, int itemCount) {
165141 mMessages .setAdapter (mAdapter );
166142 }
167143
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+
168164 private void signInAnonymously () {
169165 Toast .makeText (this , "Signing in..." , Toast .LENGTH_SHORT ).show ();
170166 mAuth .signInAnonymously ()
0 commit comments