Skip to content

Puf kill switches #47

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 48 commits into from
Jan 18, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
89c0b96
Now treat providers as a common type
puf Dec 11, 2015
9ce6152
Update docs for recent changes
puf Dec 11, 2015
1c8f573
Remove need for google_client_id value
puf Dec 11, 2015
1b743f8
Fix for the previous commit
puf Dec 11, 2015
93ad19b
Added some minimal JavaDoc
puf Dec 11, 2015
eeb0dfc
Added more JavaDoc, clarified requiredness of some on-methods.
puf Dec 11, 2015
78598a7
Added some missing overrides
puf Dec 11, 2015
9022554
Raise error, instead of just an assumption on the cause of it
puf Dec 17, 2015
15e5517
We don't need the server auth code
puf Dec 17, 2015
f28a5ce
Clear the Google token, to ensure it isn't stored
puf Dec 17, 2015
5e6f910
We don't need an application element in the library
puf Dec 29, 2015
3870fd0
The SocialProvider names are now uppercase
puf Dec 29, 2015
bb7b0fc
Rename SocialProvider to AuthProviderType
puf Dec 29, 2015
f1924c7
Added onActivityResult to the FirebaseAuthProvider base class
puf Dec 29, 2015
4b0bdf2
Remove google-services plugin
puf Dec 29, 2015
b054219
Allow using DataSnapshot as model class, remove old populate method (…
puf Dec 29, 2015
8fa944a
Mark view holder as public
puf Dec 29, 2015
984c056
Allow overriding of snapshot parsing
puf Dec 30, 2015
8ffc04b
Fixed a few populateView implementations
puf Dec 30, 2015
1f271c9
Allow overriding of snapshot parsing
puf Dec 30, 2015
978a9c7
Look up classes by their string name
puf Dec 30, 2015
e50e0c6
Shorten class names
puf Dec 30, 2015
6c47885
Fix rendering bug on SDK 23
abeisgoat Jan 6, 2016
2b99139
Merge branch 'puf-kill-switches' of github.com:firebase/FirebaseUI-An…
abeisgoat Jan 6, 2016
77f32c1
Syntax Highlighting in Codelab!
abeisgoat Jan 7, 2016
e462221
Update README.md
abeisgoat Jan 7, 2016
5e0fb40
Update Codelab
abeisgoat Jan 7, 2016
ffa82b3
Beginning of new Codelab images
abeisgoat Jan 7, 2016
5e4ac6c
Merge branch 'puf-kill-switches' of github.com:firebase/FirebaseUI-An…
abeisgoat Jan 7, 2016
3daa13e
Try new images again
abeisgoat Jan 7, 2016
e65a988
Replace image 2_6 and 2_7
abeisgoat Jan 7, 2016
aa39cf1
Codelab images
abeisgoat Jan 7, 2016
9f7f92f
Codelab typo fix
abeisgoat Jan 7, 2016
53e9f2d
More images!
abeisgoat Jan 7, 2016
ed84bac
More codelab changes
abeisgoat Jan 7, 2016
2388408
Codelab changes
abeisgoat Jan 7, 2016
28dbda7
Codelab changes
abeisgoat Jan 7, 2016
a0896f9
Update Codelab
abeisgoat Jan 7, 2016
4504afa
Update Codelab
abeisgoat Jan 7, 2016
49e646e
Adds check for Twitter token being null
abeisgoat Jan 12, 2016
dd5afce
Merge branch 'puf-kill-switches' of github.com:firebase/FirebaseUI-An…
abeisgoat Jan 12, 2016
745ad82
More codelab improvements
abeisgoat Jan 13, 2016
8cda5b3
Dialog -> Prompt
abeisgoat Jan 15, 2016
f3f472c
Addresses #53 and other minor cleanup
abeisgoat Jan 18, 2016
ac3c1fe
Merge branch 'puf-kill-switches' of github.com:firebase/FirebaseUI-An…
abeisgoat Jan 18, 2016
befd789
Addresses #54
abeisgoat Jan 18, 2016
544fc98
Codelab improvements
abeisgoat Jan 18, 2016
5e96d68
Finish #59 (or at least, I hope so)
abeisgoat Jan 18, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 33 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ We'll go into each of these steps below.

### Add SDK dependencies

Since FirebaseUI depends on the SDKs of various providers, we'll need to include those in our depedencies as well.
Since FirebaseUI depends on the SDKs of various providers, we'll need to include those in our dependencies as well.

```
dependencies {
Expand All @@ -62,9 +62,9 @@ dependencies {
}
```

### Add Facebook/Twitter/Google keys to strings.xml
### Add Facebook/Twitter/Google keys

Open your `res/values/strings.xml` file and add the following lines, replacing `[VALUE]` with your key.
Open your application's `res/values/strings.xml` file and add the following lines, replacing `[VALUE]` with your key.

Keep in mind, these are all optional. You only have to provide values for the providers you plan to use.

Expand All @@ -74,9 +74,10 @@ Keep in mind, these are all optional. You only have to provide values for the pr
<string name="facebook_app_id">[VALUE]</string>
<string name="twitter_app_key">[VALUE]</string>
<string name="twitter_app_secret">[VALUE]</string>
<string name="google_client_id">[VALUE]</string>
```

If you're using Google authentication, place your `google-services.json` in the app folder.

### Change our AndroidManifest.xml

Open your `manifests/AndroidManifest.xml` file. This will allow Android to recognize the various activities that FirebaseUI exposes.
Expand Down Expand Up @@ -114,18 +115,6 @@ If you're using Facebook authentication, add the following to your `<application
android:value="@string/facebook_app_id" />
```

If you're using Google authentication, add the following to your `<application>` tag.

```xml
<!-- Google Configuration -->
<meta-data
android:name="com.firebase.ui.GoogleClientId"
android:value="@string/google_client_id" />
```

**Note:** If you're using Google Sign-in you'll also need to ensure that your `google-services.json` file is created
and placed in your app folder.

### Inherit from FirebaseLoginBaseActivity

Now we get to the juicy bits. Open your `MainActivity` and change your activity to extend `FirebaseLoginBaseActivity`
Expand All @@ -147,27 +136,34 @@ public class MainActivity extends FirebaseLoginBaseActivity {
}

@Override
public void onFirebaseLoggedIn(AuthData authData) {
// TODO: Handle successful login
public void onFirebaseLoginProviderError(FirebaseLoginError firebaseError) {
// TODO: Handle an error from the authentication provider
}

@Override
public void onFirebaseLoggedOut() {
// TODO: Handle logout
public void onFirebaseLoginUserError(FirebaseLoginError firebaseError) {
// TODO: Handle an error from the user
}
}
```

In addition you can override these methods to customize what happens when a user logs in or out:

```
@Override
public void onFirebaseLoginProviderError(FirebaseLoginError firebaseError) {
// TODO: Handle an error from the authentication provider
public void onFirebaseLoggedIn(AuthData authData) {
// TODO: Handle successful login
}

@Override
public void onFirebaseLoginUserError(FirebaseLoginError firebaseError) {
// TODO: Handle an error from the user
public void onFirebaseLoggedOut() {
// TODO: Handle logout
}
}

```

If you want to know the current `AuthData` at any point, you can call `getAuth()`. This will return the `AuthData` for the currently authenticated user, or `null` if no user is authenticated.

### Enable Authentication Providers

Now that our activity is set up, we can enable authentication providers. The FirebaseUI login prompt will only display providers you enable here, so don't worry if you don't want to use them all!
Expand All @@ -179,15 +175,15 @@ public class MainActivity extends FirebaseLoginBaseActivity {
protected void onStart() {
super.onStart();
// All providers are optional! Remove any you don't want.
setEnabledAuthProvider(SocialProvider.facebook);
setEnabledAuthProvider(SocialProvider.twitter);
setEnabledAuthProvider(SocialProvider.google);
setEnabledAuthProvider(SocialProvider.password);
setEnabledAuthProvider(AuthProviderType.FACEBOOK);
setEnabledAuthProvider(AuthProviderType.TWITTER);
setEnabledAuthProvider(AuthProviderType.GOOGLE);
setEnabledAuthProvider(AuthProviderType.PASSWORD);
}
```


### Call showFirebaseLoginDialog();
### Call showFirebaseLoginPrompt();

You're now ready to display the login dialog!

Expand Down Expand Up @@ -331,7 +327,7 @@ protected void onCreate(Bundle savedInstanceState) {

mAdapter = new FirebaseListAdapter<ChatMessage>(this, ChatMessage.class, android.R.layout.two_line_list_item, ref) {
@Override
protected void populateView(View view, ChatMessage chatMessage) {
protected void populateView(View view, ChatMessage chatMessage, int position) {
((TextView)view.findViewById(android.R.id.text1)).setText(chatMessage.getName());
((TextView)view.findViewById(android.R.id.text2)).setText(chatMessage.getMessage());

Expand Down Expand Up @@ -385,7 +381,7 @@ protected void onCreate(Bundle savedInstanceState) {

mAdapter = new FirebaseListAdapter<ChatMessage>(this, ChatMessage.class, android.R.layout.two_line_list_item, ref) {
@Override
protected void populateView(View view, ChatMessage chatMessage) {
protected void populateView(View view, ChatMessage chatMessage, int position) {
((TextView)view.findViewById(android.R.id.text1)).setText(chatMessage.getName());
((TextView)view.findViewById(android.R.id.text2)).setText(chatMessage.getMessage());
}
Expand Down Expand Up @@ -428,7 +424,7 @@ If we use the same layout as before (`android.R.layout.two_line_list_item`), the
We can wrap that in a ViewHolder with:

```java
private static class ChatMessageViewHolder extends RecyclerView.ViewHolder {
public static class ChatMessageViewHolder extends RecyclerView.ViewHolder {
TextView messageText;
TextView nameText;

Expand All @@ -442,18 +438,18 @@ private static class ChatMessageViewHolder extends RecyclerView.ViewHolder {

There's nothing magical going on here; we're just mapping numeric IDs and casts into a nice, type-safe contract.

### Create a custom FirebaseListAdapter
### Create a custom FirebaseRecyclerAdapter

Just like we did for FirebaseListAdapter, we'll create an anonymous subclass for our ChatMessages:
Just like we did for `FirebaseListAdapter`, we'll create an anonymous subclass for our ChatMessages, but this time we'll use `FirebaseRecyclerAdapter`:

```java
RecyclerView recycler = (RecyclerView) findViewById(R.id.messages_recycler);
recycler.setHasFixedSize(true);
recycler.setLayoutManager(new LinearLayoutManager(this));

mAdapter = new FirebaseRecyclerViewAdapter<ChatMessage, ChatMessageViewHolder>(ChatMessage.class, android.R.layout.two_line_list_item, ChatMessageViewHolder.class, mRef) {
mAdapter = new FirebaseRecyclerAdapter<ChatMessage, ChatMessageViewHolder>(ChatMessage.class, android.R.layout.two_line_list_item, ChatMessageViewHolder.class, mRef) {
@Override
public void populateViewHolder(ChatMessageViewHolder chatMessageViewHolder, ChatMessage chatMessage) {
public void populateViewHolder(ChatMessageViewHolder chatMessageViewHolder, ChatMessage chatMessage, int position) {
chatMessageViewHolder.nameText.setText(chatMessage.getName());
chatMessageViewHolder.messageText.setText(chatMessage.getMessage());
}
Expand Down
5 changes: 2 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
compileSdkVersion 22
Expand All @@ -23,7 +22,7 @@ android {
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
}

}

dependencies {
Expand All @@ -34,4 +33,4 @@ dependencies {
compile 'com.android.support:recyclerview-v7:22.2.1'
compile 'com.facebook.android:facebook-android-sdk:4.6.0'
compile project(':library')
}
}
15 changes: 8 additions & 7 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.firebase.uidemo">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:name=".DemoApplication"
android:label="@string/app_name"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:theme="@style/Theme.AppCompat.Light">

android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name=".RecyclerViewDemoActivity"
android:label="@string/app_name">
Expand All @@ -22,23 +22,24 @@

<!-- Twitter Configuration -->
<activity android:name="com.firebase.ui.auth.twitter.TwitterPromptActivity" />

<meta-data
android:name="com.firebase.ui.TwitterKey"
android:value="@string/twitter_app_key"/>
android:value="@string/twitter_app_key" />
<meta-data
android:name="com.firebase.ui.TwitterSecret"
android:value="@string/twitter_app_secret"/>
android:value="@string/twitter_app_secret" />

<!-- Facebook Configuration -->
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import com.firebase.ui.auth.core.FirebaseLoginBaseActivity;
import com.firebase.ui.FirebaseRecyclerAdapter;
import com.firebase.ui.auth.core.FirebaseLoginError;
import com.firebase.ui.auth.core.SocialProvider;
import com.firebase.ui.auth.core.AuthProviderType;

public class RecyclerViewDemoActivity extends FirebaseLoginBaseActivity {

Expand Down Expand Up @@ -99,10 +99,10 @@ public void populateViewHolder(ChatHolder chatView, Chat chat, int position) {
@Override
protected void onStart() {
super.onStart();
setEnabledAuthProvider(SocialProvider.facebook);
setEnabledAuthProvider(SocialProvider.twitter);
setEnabledAuthProvider(SocialProvider.google);
setEnabledAuthProvider(SocialProvider.password);
setEnabledAuthProvider(AuthProviderType.FACEBOOK);
setEnabledAuthProvider(AuthProviderType.TWITTER);
setEnabledAuthProvider(AuthProviderType.GOOGLE);
setEnabledAuthProvider(AuthProviderType.PASSWORD);
}

@Override
Expand Down Expand Up @@ -135,6 +135,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}


@Override
public void onFirebaseLoggedIn(AuthData authData) {
Log.i(TAG, "Logged in to " + authData.getProvider().toString());
Expand Down Expand Up @@ -162,13 +163,14 @@ public void onFirebaseLoggedOut() {

@Override
public void onFirebaseLoginProviderError(FirebaseLoginError firebaseError) {
Log.i(TAG, "Login provider error: " + firebaseError.toString());
Log.e(TAG, "Login provider error: " + firebaseError.toString());
resetFirebaseLoginPrompt();
}

@Override
public void onFirebaseLoginUserError(FirebaseLoginError firebaseError) {
resetFirebaseLoginDialog();
Log.i(TAG, "Login user error: " + firebaseError.toString());
Log.e(TAG, "Login user error: "+firebaseError.toString());
resetFirebaseLoginPrompt();
}

@Override
Expand Down
Loading