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 ;
14+ import android .widget .LinearLayout ;
1315import android .widget .TextView ;
1416
17+ import com .firebase .client .AuthData ;
1518import com .firebase .client .Firebase ;
1619import com .firebase .client .FirebaseError ;
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+ mSendButton .setOnClickListener (new View .OnClickListener () {
3646 @ Override
3747 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 () {
4050 @ Override
4151 public void onComplete (FirebaseError firebaseError , Firebase firebase ) {
4252 if (firebaseError != null ) {
43- Log .e ("FirebaseUI.chat" , firebaseError .toString ());
53+ Log .e (TAG , firebaseError .toString ());
4454 }
4555 }
4656 });
47- messageEdit .setText ("" );
57+ mMessageEdit .setText ("" );
4858 }
4959 });
5060
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 ) {
5262 @ Override
5363 public void populateViewHolder (ChatHolder chatView , Chat chat ) {
5464 chatView .textView .setText (chat .getText ());
@@ -68,6 +78,79 @@ public void populateViewHolder(ChatHolder chatView, Chat chat) {
6878 messages .setAdapter (adapter );
6979 }
7080
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+
71154
72155 public static class Chat {
73156 String name ;
0 commit comments