/*
* Copyright (c) 2014, Facebook, Inc. All rights reserved.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
* copy, modify, and distribute this software in source code or binary form for use
* in connection with the web services and APIs provided by Facebook.
*
* As with any software that integrates with the Facebook platform, your use of
* this software is subject to the Facebook Developer Principles and Policies
* [http://developers.facebook.com/policy/]. This copyright notice shall be
* included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
package com.parse.ui;
import java.util.Collection;
import android.content.Context;
import android.content.Intent;
public class ParseLoginBuilder {
private Context context;
private ParseLoginConfig config = new ParseLoginConfig();
public ParseLoginBuilder(Context context) {
this.context = context;
}
/**
* Customize the logo shown in the login screens
*
* @param id
* The resource ID for the logo drawable.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setAppLogo(int id) {
config.setAppLogo(id);
return this;
}
/**
* Whether to show Parse username/password UI elements on the login screen,
* and the associated signup screen. Default is false.
*
* @param enabled
* Whether to show the username/password login.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginEnabled(boolean enabled) {
config.setParseLoginEnabled(enabled);
return this;
}
/**
* Customize the text of the Parse username/password login button.
*
* @param text
* The text to display on the button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginButtonText(CharSequence text) {
config.setParseLoginButtonText(text);
return this;
}
/**
* Customize the text of the Parse username/password login button.
*
* @param id
* The resource ID for the text to display on the login button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginButtonText(int id) {
return setParseLoginButtonText(maybeGetString(id));
}
/**
* Customize the text on the Parse signup button.
*
* @param text
* The text to display on the button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseSignupButtonText(CharSequence text) {
config.setParseSignupButtonText(text);
return this;
}
/**
* Customize the text on the Parse signup button.
*
* @param id
* The resource ID for the text to display on the button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseSignupButtonText(int id) {
return setParseSignupButtonText(maybeGetString(id));
}
/**
* Customize the text for the link to resetting the user's forgotten password.
*
* @param text
* The text to display on the link.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginHelpText(CharSequence text) {
config.setParseLoginHelpText(text);
return this;
}
/**
* Customize the text for the link to resetting the user's forgotten password.
*
* @param id
* The resource ID for the text to display on the link.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginHelpText(int id) {
return setParseLoginHelpText(maybeGetString(id));
}
/**
* Customize the toast shown when the user enters an invalid username/password
* pair.
*
* @param text
* The text to display on the toast.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginInvalidCredentialsToastText(
CharSequence text) {
config.setParseLoginInvalidCredentialsToastText(text);
return this;
}
/**
* Customize the toast shown when the user enters an invalid username/password
* pair.
*
* @param id
* The resource ID for the text to display on the toast.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginInvalidCredentialsToastText(int id) {
return setParseLoginInvalidCredentialsToastText(maybeGetString(id));
}
/**
* Use the user's email as their username. By default, the user's username is
* separate from their email; we ask the user for their username and email on
* the signup form, and ask for their username on the login form. If this
* option is set to true, we'll not ask for their username on the signup and
* login forms; users will just enter their email on both (internally we'll
* send the user email as the username when calling the Parse SDK).
*
* @param emailAsUsername
* Whether to use email as the user's username in the Parse SDK.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseLoginEmailAsUsername(boolean emailAsUsername) {
config.setParseLoginEmailAsUsername(emailAsUsername);
return this;
}
/**
* Sets the minimum required password length on the user signup page.
*
* @param minPasswordLength
* The minimum required password length for signups
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseSignupMinPasswordLength(int minPasswordLength) {
config.setParseSignupMinPasswordLength(minPasswordLength);
return this;
}
/**
* Customize the submit button on the Parse signup screen. This signup screen
* is only shown if you enable Parse username/password login.
*
* @param text
* The text to display on the user signup submission button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseSignupSubmitButtonText(CharSequence text) {
config.setParseSignupSubmitButtonText(text);
return this;
}
/**
* Customize the submit button on the Parse signup screen. This signup screen
* is only shown if you enable Parse username/password login.
*
* @param id
* The resource ID fo the text to display on the user signup
* submission button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setParseSignupSubmitButtonText(int id) {
return setParseSignupSubmitButtonText(maybeGetString(id));
}
/**
* Whether to show the Facebook login option on the login screen. Default is
* false.
*
* @param enabled
* Whether to show the facebook login.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setFacebookLoginEnabled(boolean enabled) {
config.setFacebookLoginEnabled(enabled);
return this;
}
/**
* Customize the text on the Facebook login button.
*
* @param text
* The text to display on the Facebook login button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setFacebookLoginButtonText(CharSequence text) {
config.setFacebookLoginButtonText(text);
return this;
}
/**
* Customize the text on the Facebook login button.
*
* @param id
* The resource ID for the text to display on the Facebook login
* button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setFacebookLoginButtonText(int id) {
config.setFacebookLoginButtonText(maybeGetString(id));
return this;
}
/**
* Customize the requested permissions for Facebook login
*
* @param permissions
* The Facebook permissions being requested.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setFacebookLoginPermissions(
Collection<String> permissions) {
config.setFacebookLoginPermissions(permissions);
return this;
}
/**
* Whether to show the Twitter login option on the login screen. Default is
* false.
*
* @param enabled
* Whether to show the Twitter login.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setTwitterLoginEnabled(boolean enabled) {
config.setTwitterLoginEnabled(enabled);
return this;
}
/**
* Customize the text on the Twitter login button.
*
* @param loginButtonText
* The text to display on the Twitter login button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setTwitterLoginButtontext(
CharSequence loginButtonText) {
config.setTwitterLoginButtonText(loginButtonText);
return this;
}
/**
* Customize the text on the Twitter login button.
*
* @param id
* The text to display on the Twitter login button.
* @return The caller instance to allow chaining.
*/
public ParseLoginBuilder setTwitterLoginButtontext(int id) {
config.setTwitterLoginButtonText(maybeGetString(id));
return this;
}
/**
* Construct an intent that can be used to start ParseLoginActivity with the
* specified customizations.
*
* @return The intent for starting ParseLoginActivity
*/
public Intent build() {
Intent intent = new Intent(context, ParseLoginActivity.class);
intent.putExtras(config.toBundle());
return intent;
}
private String maybeGetString(int id) {
return id != 0 ? context.getString(id) : null;
}
}