22
33import android .graphics .Color ;
44import android .os .Bundle ;
5- import android .support .v7 .app .AppCompatActivity ;
65import android .support .v7 .widget .LinearLayoutManager ;
76import android .support .v7 .widget .RecyclerView ;
87import android .util .Log ;
98import android .view .Gravity ;
9+ import android .view .Menu ;
10+ import android .view .MenuItem ;
1011import android .view .View ;
1112import android .widget .Button ;
1213import android .widget .EditText ;
1314import android .widget .TextView ;
1415
16+ import com .firebase .client .AuthData ;
1517import com .firebase .client .Firebase ;
1618import com .firebase .client .FirebaseError ;
19+ import com .firebase .client .Query ;
20+ import com .firebase .ui .FirebaseLoginBaseActivity ;
1721import 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+ mRef = new Firebase ("https://firebaseui.firebaseio.com/chat" );
46+
47+ mSendButton .setOnClickListener (new View .OnClickListener () {
3648 @ Override
3749 public void onClick (View v ) {
38- Chat chat = new Chat (name , messageEdit .getText ().toString ());
39- ref .push ().setValue (chat , new Firebase .CompletionListener () {
50+ Chat chat = new Chat (name , mMessageEdit .getText ().toString ());
51+ mRef .push ().setValue (chat , new Firebase .CompletionListener () {
4052 @ Override
4153 public void onComplete (FirebaseError firebaseError , Firebase firebase ) {
4254 if (firebaseError != null ) {
43- Log .e ("FirebaseUI.chat" , firebaseError .toString ());
55+ Log .e (TAG , firebaseError .toString ());
4456 }
4557 }
4658 });
47- messageEdit .setText ("" );
59+ mMessageEdit .setText ("" );
4860 }
4961 });
5062
51- FirebaseRecyclerViewAdapter <Chat , ChatHolder > adapter = new FirebaseRecyclerViewAdapter <Chat , ChatHolder >(Chat .class , android .R .layout .two_line_list_item , ChatHolder .class , ref ) {
63+ Query recentMessages = mRef .limitToLast (50 );
64+ FirebaseRecyclerViewAdapter <Chat , ChatHolder > adapter = new FirebaseRecyclerViewAdapter <Chat , ChatHolder >(Chat .class , android .R .layout .two_line_list_item , ChatHolder .class , recentMessages ) {
5265 @ Override
5366 public void populateViewHolder (ChatHolder chatView , Chat chat ) {
5467 chatView .textView .setText (chat .getText ());
@@ -68,6 +81,74 @@ public void populateViewHolder(ChatHolder chatView, Chat chat) {
6881 messages .setAdapter (adapter );
6982 }
7083
84+ public static final int LOGIN = Menu .FIRST ;
85+ public static final int LOGOUT = LOGIN +1 ;
86+
87+ @ Override
88+ public boolean onCreateOptionsMenu (Menu menu ) {
89+ menu .add (LOGIN , LOGIN , LOGIN , "Log in" );
90+ menu .add (LOGOUT , LOGOUT , LOGOUT , "Log out" );
91+
92+ return super .onCreateOptionsMenu (menu );
93+ }
94+
95+ @ Override
96+ public boolean onPrepareOptionsMenu (Menu menu ) {
97+ menu .getItem (LOGIN -Menu .FIRST ).setVisible (mAuthData == null );
98+ menu .getItem (LOGOUT -Menu .FIRST ).setVisible (mAuthData != null );
99+ mSendButton .setEnabled (mAuthData != null );
100+ mMessageEdit .setEnabled (mAuthData != null );
101+ return super .onPrepareOptionsMenu (menu );
102+ }
103+
104+ @ Override
105+ public boolean onOptionsItemSelected (MenuItem item ) {
106+ switch (item .getItemId ()) {
107+ case LOGIN :
108+ this .loginWithProvider (SocialProvider .google );
109+ return true ;
110+ case LOGOUT :
111+ this .logout ();
112+ return true ;
113+ }
114+
115+ return super .onOptionsItemSelected (item );
116+ }
117+
118+
119+
120+ // Start of FirebaseLoginBaseActivity
121+
122+ @ Override
123+ public void onFirebaseLogin (AuthData authData ) {
124+ Log .i (TAG , "Logged in" );
125+ mAuthData = authData ;
126+ invalidateOptionsMenu ();
127+ }
128+
129+ @ Override
130+ public void onFirebaseLogout () {
131+ Log .i (TAG , "Logged out" );
132+ mAuthData = null ;
133+ invalidateOptionsMenu ();
134+ }
135+
136+ @ Override
137+ public void onFirebaseLoginError (FirebaseError firebaseError ) {
138+ Log .e (TAG , firebaseError .toString ());
139+ }
140+
141+ @ Override
142+ public void onFirebaseLoginCancel () {
143+ Log .i (TAG , "Login cancelled" );
144+ }
145+
146+ @ Override
147+ public Firebase getFirebaseRef () {
148+ return mRef ;
149+ }
150+
151+ // End of FirebaseLoginBaseActivity
71152
72153 public static class Chat {
73154 String name ;
0 commit comments