/** * 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.login.widget; import android.content.Context; import android.net.Uri; import android.util.AttributeSet; import android.view.View; import com.facebook.login.DeviceLoginManager; import com.facebook.login.LoginBehavior; import com.facebook.login.LoginManager; /** * A Log In/Log Out button that maintains login state and logs in/out for the app. * <p/> * This control requires the app ID and client token to be specified in the AndroidManifest.xml. */ public class DeviceLoginButton extends LoginButton { private Uri deviceRedirectUri; /** * Create the LoginButton by inflating from XML * * @see View#View(Context, AttributeSet) */ public DeviceLoginButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * Create the LoginButton by inflating from XML * * @see View#View(Context, AttributeSet) */ public DeviceLoginButton(Context context, AttributeSet attrs) { super(context, attrs); } /** * Create the LoginButton by inflating from XML and applying a style. * * @see View#View(Context, AttributeSet, int) */ public DeviceLoginButton(Context context) { super(context); } /** * Set uri to redirect the user to after they complete * the device login flow on the external device. * <p/> * The Uri must be configured in your App Settings -> Advanced -> OAuth Redirect URIs. * * @param uri The URI to set. */ public void setDeviceRedirectUri(Uri uri) { this.deviceRedirectUri = uri; } /** * Get the previously set uri that will be used to redirect the user to * after they complete the device login flow on the external device. * <p/> * The Uri must be configured in your App Settings -> Advanced -> OAuth Redirect URIs. * * @return The current device redirect uri set. */ public Uri getDeviceRedirectUri() { return this.deviceRedirectUri; } @Override protected LoginClickListener getNewLoginClickListener() { return new DeviceLoginClickListener(); } private class DeviceLoginClickListener extends LoginClickListener { @Override protected LoginManager getLoginManager() { DeviceLoginManager manager = DeviceLoginManager.getInstance(); manager.setDefaultAudience(getDefaultAudience()); manager.setLoginBehavior(LoginBehavior.DEVICE_AUTH); manager.setDeviceRedirectUri(getDeviceRedirectUri()); return manager; } } }