/* * Copyright (c) 2014-present, 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.facebook.samples.loginsample.accountkit; import android.app.Fragment; import android.os.Parcel; import android.support.annotation.Nullable; import com.facebook.accountkit.AccountKitError; import com.facebook.accountkit.ui.BaseUIManager; import com.facebook.accountkit.ui.ButtonType; import com.facebook.accountkit.ui.LoginFlowState; import com.facebook.accountkit.ui.LoginType; import com.facebook.accountkit.ui.TextPosition; import com.facebook.samples.loginsample.R; public class AccountKitSampleAdvancedUIManager extends BaseUIManager { private static final int BODY_HEIGHT = 80; private static final int FOOTER_HEIGHT = 120; private static final int HEADER_HEIGHT = 80; private final ButtonType confirmButton; private final ButtonType entryButton; private AccountKitError error; private LoginType loginType; private final TextPosition textPosition; @Deprecated public AccountKitSampleAdvancedUIManager( final ButtonType confirmButton, final ButtonType entryButton, final TextPosition textPosition, final LoginType loginType) { super(-1); this.confirmButton = confirmButton; this.entryButton = entryButton; this.textPosition = textPosition; this.loginType = loginType; } private AccountKitSampleAdvancedUIManager(final Parcel source) { super(source); this.loginType = LoginType.values()[source.readInt()]; String s = source.readString(); final ButtonType confirmButton = s == null ? null : ButtonType.valueOf(s); s = source.readString(); final ButtonType entryButton = s == null ? null : ButtonType.valueOf(s); s = source.readString(); final TextPosition textPosition = s == null ? null : TextPosition.valueOf(s); this.confirmButton = confirmButton; this.entryButton = entryButton; this.textPosition = textPosition; } @Override @Nullable public Fragment getBodyFragment(final LoginFlowState state) { return getPlaceholderFragment(state, BODY_HEIGHT, "Body"); } @Override @Nullable public ButtonType getButtonType(final LoginFlowState state) { switch (state) { case PHONE_NUMBER_INPUT: case EMAIL_INPUT: return entryButton; case CODE_INPUT: case CONFIRM_ACCOUNT_VERIFIED: return confirmButton; default: return null; } } @Override @Nullable public Fragment getFooterFragment(final LoginFlowState state) { return getPlaceholderFragment(state, FOOTER_HEIGHT, "Footer"); } @Override @Nullable public Fragment getHeaderFragment(final LoginFlowState state) { if (state != LoginFlowState.ERROR) { return getPlaceholderFragment(state, HEADER_HEIGHT, "Header"); } final String errorMessage = getErrorMessage(); if (errorMessage == null) { return PlaceholderFragment.create(HEADER_HEIGHT, R.string.error_message); } else { return PlaceholderFragment.create(HEADER_HEIGHT, errorMessage); } } @Override @Nullable public TextPosition getTextPosition(final LoginFlowState state) { return textPosition; } @Override public void onError(final AccountKitError error) { this.error = error; } private String getErrorMessage() { if (error == null) { return null; } final String message = error.getUserFacingMessage(); if (message == null) { return null; } return message; } @Nullable private PlaceholderFragment getPlaceholderFragment( final LoginFlowState state, final int height, final String suffix) { final String prefix; switch (state) { case PHONE_NUMBER_INPUT: prefix = "Custom Phone Number "; break; case EMAIL_INPUT: prefix = "Custom Email "; break; case ACCOUNT_VERIFIED: prefix = "Custom Account Verified "; break; case CONFIRM_ACCOUNT_VERIFIED: prefix = "Custom Confirm Account Verified "; break; case CONFIRM_INSTANT_VERIFICATION_LOGIN: prefix = "Custom Confirm Instant Verification Login "; break; case EMAIL_VERIFY: prefix = "Custom Email Verify "; break; case SENDING_CODE: switch (loginType) { case EMAIL: prefix = "Custom Sending Email "; break; case PHONE: prefix = "Custom Sending Code "; break; default: return null; } break; case SENT_CODE: switch (loginType) { case EMAIL: prefix = "Custom Sent Email "; break; case PHONE: prefix = "Custom Sent Code "; break; default: return null; } break; case CODE_INPUT: prefix = "Custom Code Input "; break; case VERIFYING_CODE: prefix = "Custom Verifying "; break; case VERIFIED: prefix = "Custom Verified "; break; case RESEND: prefix = "Custom Resend "; break; case ERROR: prefix = "Custom Error "; break; default: return null; } return PlaceholderFragment.create(height, prefix.concat(suffix)); } @Override public void writeToParcel(final Parcel dest, final int flags) { super.writeToParcel(dest, flags); dest.writeInt(loginType.ordinal()); dest.writeString(confirmButton != null ? confirmButton.name() : null); dest.writeString(entryButton != null ? entryButton.name() : null); dest.writeString(textPosition != null ? textPosition.name() : null); } public static final Creator<AccountKitSampleAdvancedUIManager> CREATOR = new Creator<AccountKitSampleAdvancedUIManager>() { @Override public AccountKitSampleAdvancedUIManager createFromParcel(final Parcel source) { return new AccountKitSampleAdvancedUIManager(source); } @Override public AccountKitSampleAdvancedUIManager[] newArray(final int size) { return new AccountKitSampleAdvancedUIManager[size]; } }; }