Skip to content

Commit 892e053

Browse files
committed
Adds login dialog and various fixes
1 parent 6d472ef commit 892e053

22 files changed

+410
-28
lines changed

app/app.iml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@
110110
<orderEntry type="library" exported="" name="play-services-identity-8.1.0" level="project" />
111111
<orderEntry type="library" exported="" name="support-annotations-22.2.1" level="project" />
112112
<orderEntry type="library" exported="" name="firebase-client-jvm-2.3.1" level="project" />
113-
<orderEntry type="library" exported="" name="firebase-client-android-2.3.1" level="project" />
114113
<orderEntry type="library" exported="" name="jackson-core-2.2.2" level="project" />
114+
<orderEntry type="library" exported="" name="firebase-client-android-2.3.1" level="project" />
115115
<orderEntry type="library" exported="" name="appcompat-v7-22.2.0" level="project" />
116116
<orderEntry type="library" exported="" name="jackson-databind-2.2.2" level="project" />
117117
<orderEntry type="library" exported="" name="play-services-basement-8.1.0" level="project" />

app/src/main/ic_google-web.png

5.23 KB
Loading

app/src/main/java/com/firebase/uidemo/RecyclerViewDemoActivity.java

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package com.firebase.uidemo;
22

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;
38
import android.graphics.Color;
49
import android.os.Bundle;
510
import android.support.v7.widget.LinearLayoutManager;
611
import android.support.v7.widget.RecyclerView;
712
import android.util.Log;
813
import android.view.Gravity;
14+
import android.view.LayoutInflater;
915
import android.view.Menu;
1016
import android.view.MenuItem;
1117
import android.view.View;
@@ -21,7 +27,6 @@
2127
import com.firebase.ui.FirebaseRecyclerViewAdapter;
2228
import com.firebase.ui.com.firebasei.ui.authimpl.SocialProvider;
2329

24-
2530
public class RecyclerViewDemoActivity extends FirebaseLoginBaseActivity {
2631

2732
public static String TAG = "FirebaseUI.chat";
@@ -81,26 +86,20 @@ public void populateViewHolder(ChatHolder chatView, Chat chat) {
8186
messages.setAdapter(adapter);
8287
}
8388

84-
public static final int LOGIN_TWITTER = Menu.FIRST;
85-
public static final int LOGIN_FACEBOOK = LOGIN_TWITTER+1;
86-
public static final int LOGIN_GOOGLE = LOGIN_TWITTER+2;
87-
public static final int LOGOUT = LOGIN_TWITTER+3;
89+
public static final int LOGIN = Menu.FIRST;
90+
public static final int LOGOUT = LOGIN+1;
8891

8992
@Override
9093
public boolean onCreateOptionsMenu(Menu menu) {
91-
menu.add(LOGIN_TWITTER, LOGIN_TWITTER, LOGIN_TWITTER, "Log in via Twitter");
92-
menu.add(LOGIN_FACEBOOK, LOGIN_FACEBOOK, LOGIN_FACEBOOK, "Log in via Facebook");
93-
menu.add(LOGIN_GOOGLE, LOGIN_GOOGLE, LOGIN_GOOGLE, "Log in via Google");
94+
menu.add(LOGIN, LOGIN, LOGIN, "Login");
9495
menu.add(LOGOUT, LOGOUT, LOGOUT, "Log out");
9596

9697
return super.onCreateOptionsMenu(menu);
9798
}
9899

99100
@Override
100101
public boolean onPrepareOptionsMenu(Menu menu) {
101-
menu.getItem(LOGIN_TWITTER-Menu.FIRST).setVisible(mAuthData == null);
102-
menu.getItem(LOGIN_GOOGLE-Menu.FIRST).setVisible(mAuthData == null);
103-
menu.getItem(LOGIN_FACEBOOK-Menu.FIRST).setVisible(mAuthData == null);
102+
menu.getItem(LOGIN-Menu.FIRST).setVisible(mAuthData == null);
104103
menu.getItem(LOGOUT-Menu.FIRST).setVisible(mAuthData != null);
105104
mSendButton.setEnabled(mAuthData != null);
106105
mMessageEdit.setEnabled(mAuthData != null);
@@ -110,20 +109,13 @@ public boolean onPrepareOptionsMenu(Menu menu) {
110109
@Override
111110
public boolean onOptionsItemSelected(MenuItem item) {
112111
switch (item.getItemId()) {
113-
case LOGIN_TWITTER:
114-
this.loginWithProvider(SocialProvider.twitter);
115-
return true;
116-
case LOGIN_FACEBOOK:
117-
this.loginWithProvider(SocialProvider.facebook);
118-
return true;
119-
case LOGIN_GOOGLE:
120-
this.loginWithProvider(SocialProvider.google);
112+
case LOGIN:
113+
this.showFirebaseLoginPrompt();
121114
return true;
122115
case LOGOUT:
123116
this.logout();
124117
return true;
125118
}
126-
127119
return super.onOptionsItemSelected(item);
128120
}
129121

library/library.iml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@
100100
<orderEntry type="library" exported="" name="play-services-identity-8.1.0" level="project" />
101101
<orderEntry type="library" exported="" name="support-annotations-22.2.1" level="project" />
102102
<orderEntry type="library" exported="" name="firebase-client-jvm-2.3.1" level="project" />
103-
<orderEntry type="library" exported="" name="jackson-core-2.2.2" level="project" />
104103
<orderEntry type="library" exported="" name="firebase-client-android-2.3.1" level="project" />
104+
<orderEntry type="library" exported="" name="jackson-core-2.2.2" level="project" />
105105
<orderEntry type="library" exported="" name="appcompat-v7-22.2.0" level="project" />
106106
<orderEntry type="library" exported="" name="jackson-databind-2.2.2" level="project" />
107107
<orderEntry type="library" exported="" name="play-services-basement-8.1.0" level="project" />

library/src/main/ic_google-web.png

5.23 KB
Loading
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.firebase.ui;
2+
3+
4+
import android.os.Bundle;
5+
import android.app.Fragment;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
10+
11+
/**
12+
* A simple {@link Fragment} subclass.
13+
* Use the {@link FirebaseLogin#newInstance} factory method to
14+
* create an instance of this fragment.
15+
*/
16+
public class FirebaseLogin extends Fragment {
17+
// TODO: Rename parameter arguments, choose names that match
18+
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
19+
private static final String ARG_PARAM1 = "param1";
20+
private static final String ARG_PARAM2 = "param2";
21+
22+
// TODO: Rename and change types of parameters
23+
private String mParam1;
24+
private String mParam2;
25+
26+
27+
/**
28+
* Use this factory method to create a new instance of
29+
* this fragment using the provided parameters.
30+
*
31+
* @param param1 Parameter 1.
32+
* @param param2 Parameter 2.
33+
* @return A new instance of fragment FirebaseLogin.
34+
*/
35+
// TODO: Rename and change types and number of parameters
36+
public static FirebaseLogin newInstance(String param1, String param2) {
37+
FirebaseLogin fragment = new FirebaseLogin();
38+
Bundle args = new Bundle();
39+
args.putString(ARG_PARAM1, param1);
40+
args.putString(ARG_PARAM2, param2);
41+
fragment.setArguments(args);
42+
return fragment;
43+
}
44+
45+
public FirebaseLogin() {
46+
// Required empty public constructor
47+
}
48+
49+
@Override
50+
public void onCreate(Bundle savedInstanceState) {
51+
super.onCreate(savedInstanceState);
52+
if (getArguments() != null) {
53+
mParam1 = getArguments().getString(ARG_PARAM1);
54+
mParam2 = getArguments().getString(ARG_PARAM2);
55+
}
56+
}
57+
58+
@Override
59+
public View onCreateView(LayoutInflater inflater, ViewGroup container,
60+
Bundle savedInstanceState) {
61+
// Inflate the layout for this fragment
62+
return inflater.inflate(R.layout.fragment_firebase_login, container, false);
63+
}
64+
65+
66+
}

library/src/main/java/com/firebase/ui/FirebaseLoginBaseActivity.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package com.firebase.ui;
22

3+
import android.app.AlertDialog;
4+
import android.app.Dialog;
5+
import android.app.DialogFragment;
36
import android.content.Intent;
47
import android.os.Bundle;
58
import android.support.v7.app.AppCompatActivity;
69
import android.util.Log;
10+
import android.view.LayoutInflater;
11+
import android.view.View;
712

813
import com.firebase.client.AuthData;
914
import com.firebase.client.Firebase;
@@ -25,11 +30,12 @@
2530

2631
public abstract class FirebaseLoginBaseActivity extends AppCompatActivity {
2732

28-
private final String LOG_TAG = "FirebaseLoginBaseAct";
33+
private final String TAG = "FirebaseLoginBaseAct";
2934

3035
private GoogleAuthHelper mGoogleAuthHelper;
3136
private FacebookAuthHelper mFacebookAuthHelper;
3237
private TwitterAuthHelper mTwitterAuthHelper;
38+
private FirebaseLoginDialog mDialog;
3339

3440
public SocialProvider mChosenProvider;
3541

@@ -147,6 +153,15 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
147153
mTwitterAuthHelper.onActivityResult(requestCode, resultCode, data);
148154
}
149155

156+
public void showFirebaseLoginPrompt() {
157+
mDialog = new FirebaseLoginDialog();
158+
mDialog
159+
.addAuthHelper(mGoogleAuthHelper)
160+
.addAuthHelper(mFacebookAuthHelper)
161+
.addAuthHelper(mTwitterAuthHelper)
162+
.show(getFragmentManager(), "");
163+
}
164+
150165
@Override
151166
protected void onStart() {
152167
super.onStart();
@@ -157,6 +172,7 @@ protected void onStart() {
157172
public void onAuthStateChanged(AuthData authData) {
158173
if (authData != null) {
159174
mChosenProvider = SocialProvider.valueOf(authData.getProvider());
175+
if (mDialog != null) mDialog.dismiss();
160176
onFirebaseLogin(authData);
161177
} else {
162178
onFirebaseLogout();
@@ -181,6 +197,7 @@ public void onAuthenticationError(FirebaseError firebaseError) {
181197
});
182198
} else if (token.mode == FirebaseOAuthToken.COMPLEX) {
183199
// Complex mode is used for Twitter auth
200+
Log.d(TAG, "Complex mode" + token.provider);
184201
Map<String, String> options = new HashMap<>();
185202
options.put("oauth_token", token.token);
186203
options.put("oauth_token_secret", token.secret);
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.firebase.ui;
2+
3+
import android.app.AlertDialog;
4+
import android.app.Dialog;
5+
import android.app.DialogFragment;
6+
import android.hardware.camera2.params.Face;
7+
import android.os.Bundle;
8+
import android.util.Log;
9+
import android.view.LayoutInflater;
10+
import android.view.View;
11+
import android.widget.Button;
12+
13+
import com.firebase.ui.com.firebasei.ui.authimpl.FacebookAuthHelper;
14+
import com.firebase.ui.com.firebasei.ui.authimpl.FirebaseAuthHelper;
15+
import com.firebase.ui.com.firebasei.ui.authimpl.GoogleAuthHelper;
16+
import com.firebase.ui.com.firebasei.ui.authimpl.SocialProvider;
17+
import com.firebase.ui.com.firebasei.ui.authimpl.TwitterAuthHelper;
18+
19+
public class FirebaseLoginDialog extends DialogFragment {
20+
21+
FirebaseAuthHelper mFacebookAuthHelper;
22+
FirebaseAuthHelper mTwitterAuthHelper;
23+
FirebaseAuthHelper mGoogleAuthHelper;
24+
View mView;
25+
26+
@Override
27+
public Dialog onCreateDialog(Bundle savedInstanceState) {
28+
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
29+
// Get the layout inflater
30+
LayoutInflater inflater = getActivity().getLayoutInflater();
31+
32+
// Inflate and set the layout for the dialog
33+
// Pass null as the parent view because its going in the dialog layout
34+
mView = inflater.inflate(R.layout.fragment_firebase_login, null);
35+
36+
if (mFacebookAuthHelper != null) showLoginOption(mFacebookAuthHelper, R.id.facebook_button);
37+
else mView.findViewById(R.id.facebook_button).setVisibility(View.GONE);
38+
39+
if (mGoogleAuthHelper != null) showLoginOption(mGoogleAuthHelper, R.id.google_button);
40+
else mView.findViewById(R.id.google_button).setVisibility(View.GONE);
41+
42+
if (mTwitterAuthHelper != null) showLoginOption(mTwitterAuthHelper, R.id.twitter_button);
43+
else mView.findViewById(R.id.twitter_button).setVisibility(View.GONE);
44+
45+
builder.setView(mView);
46+
return builder.create();
47+
}
48+
49+
public FirebaseLoginDialog addAuthHelper(FirebaseAuthHelper helper) {
50+
switch (helper.getProviderName()) {
51+
case "google":
52+
mGoogleAuthHelper = helper;
53+
break;
54+
case "facebook":
55+
mFacebookAuthHelper = helper;
56+
break;
57+
case "twitter":
58+
mTwitterAuthHelper = helper;
59+
break;
60+
}
61+
62+
return this;
63+
}
64+
65+
private void showLoginOption(final FirebaseAuthHelper helper, int id) {
66+
mView.findViewById(id).setOnClickListener(new View.OnClickListener() {
67+
@Override
68+
public void onClick(View view) {
69+
helper.login();
70+
}
71+
});
72+
}
73+
}

library/src/main/java/com/firebase/ui/com/firebasei/ui/authimpl/FacebookAuthHelper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
/**
2929
*
3030
*/
31-
public class FacebookAuthHelper {
31+
public class FacebookAuthHelper implements FirebaseAuthHelper {
3232

3333
private final String LOG_TAG = "FacebookAuthHelper";
3434

@@ -79,6 +79,10 @@ public void login() {
7979
mLoginManager.logInWithReadPermissions(mActivity, permissions);
8080
}
8181

82+
public String getProviderName() {
83+
return PROVIDER_NAME;
84+
}
85+
8286
public void logout() {
8387
mLoginManager.logOut();
8488
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.firebase.ui.com.firebasei.ui.authimpl;
2+
3+
import com.google.android.gms.auth.GoogleAuthException;
4+
import com.google.android.gms.auth.UserRecoverableAuthException;
5+
6+
import java.io.IOException;
7+
8+
/**
9+
* Created by abehaskins on 11/4/15.
10+
*/
11+
public interface FirebaseAuthHelper {
12+
String getProviderName();
13+
void login();
14+
void logout();
15+
}

0 commit comments

Comments
 (0)