/** * 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; import android.os.Parcel; import android.os.Parcelable; import com.facebook.AccessToken; import com.facebook.AccessTokenSource; import java.util.Collection; import java.util.Date; import java.util.concurrent.ScheduledThreadPoolExecutor; class DeviceAuthMethodHandler extends LoginMethodHandler { private static ScheduledThreadPoolExecutor backgroundExecutor; DeviceAuthMethodHandler(LoginClient loginClient) { super(loginClient); } @Override boolean tryAuthorize(LoginClient.Request request) { showDialog(request); return true; } private void showDialog(final LoginClient.Request request) { DeviceAuthDialog dialog = new DeviceAuthDialog(); dialog.show( loginClient.getActivity().getSupportFragmentManager(), "login_with_facebook"); dialog.startLogin(request); } public void onCancel() { LoginClient.Result outcome = LoginClient.Result.createCancelResult( loginClient.getPendingRequest(), "User canceled log in."); loginClient.completeAndValidate(outcome); } public void onError(Exception ex) { LoginClient.Result outcome = LoginClient.Result.createErrorResult( loginClient.getPendingRequest(), null, ex.getMessage()); loginClient.completeAndValidate(outcome); } public void onSuccess( String accessToken, String applicationId, String userId, Collection<String> permissions, Collection<String> declinedPermissions, AccessTokenSource accessTokenSource, Date expirationTime, Date lastRefreshTime) { AccessToken token = new AccessToken( accessToken, applicationId, userId, permissions, declinedPermissions, accessTokenSource, expirationTime, lastRefreshTime); LoginClient.Result outcome = LoginClient.Result.createTokenResult( loginClient.getPendingRequest(), token); loginClient.completeAndValidate(outcome); } public static synchronized ScheduledThreadPoolExecutor getBackgroundExecutor() { if (backgroundExecutor == null) { backgroundExecutor = new ScheduledThreadPoolExecutor(1); } return backgroundExecutor; } protected DeviceAuthMethodHandler(Parcel parcel) { super(parcel); } @Override String getNameForLogging() { return "device_auth"; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); } public static final Parcelable.Creator<DeviceAuthMethodHandler> CREATOR = new Parcelable.Creator() { @Override public DeviceAuthMethodHandler createFromParcel(Parcel source) { return new DeviceAuthMethodHandler(source); } @Override public DeviceAuthMethodHandler[] newArray(int size) { return new DeviceAuthMethodHandler[size]; } }; }