////////////////////////////////////////////////////////////////////////////////////// // // Copyright 2012 Freshplanet (http://freshplanet.com | opensource@freshplanet.com) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ////////////////////////////////////////////////////////////////////////////////////// package com.freshplanet.ane.AirFacebook; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Intent; import android.os.Bundle; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.Settings; import com.freshplanet.ane.AirFacebook.functions.ActivateAppFunction; import com.freshplanet.ane.AirFacebook.functions.CanPresentOpenGraphDialogFunction; import com.freshplanet.ane.AirFacebook.functions.CanPresentMessageDialogFunction; import com.freshplanet.ane.AirFacebook.functions.CanPresentShareDialogFunction; import com.freshplanet.ane.AirFacebook.functions.CloseSessionAndClearTokenInformationFunction; import com.freshplanet.ane.AirFacebook.functions.GetAccessTokenFunction; import com.freshplanet.ane.AirFacebook.functions.GetExpirationTimestampFunction; import com.freshplanet.ane.AirFacebook.functions.InitFunction; import com.freshplanet.ane.AirFacebook.functions.IsSessionOpenFunction; import com.freshplanet.ane.AirFacebook.functions.OpenSessionWithPermissionsFunction; import com.freshplanet.ane.AirFacebook.functions.PresentMessageDialogWithLinkAndParamsFunction; import com.freshplanet.ane.AirFacebook.functions.ReauthorizeSessionWithPermissionsFunction; import com.freshplanet.ane.AirFacebook.functions.RequestWithGraphPathFunction; import com.freshplanet.ane.AirFacebook.functions.SetUsingStage3dFunction; import com.freshplanet.ane.AirFacebook.functions.ShareLinkDialogFunction; import com.freshplanet.ane.AirFacebook.functions.ShareOpenGraphDialogFunction; import com.freshplanet.ane.AirFacebook.functions.ShareStatusDialogFunction; import com.freshplanet.ane.AirFacebook.functions.WebDialogFunction; import com.freshplanet.ane.AirFacebook.functions.OpenDeferredAppLinkFunction; public class AirFacebookExtensionContext extends FREContext { @Override public void dispose() { AirFacebookExtension.context = null; } @Override public Map<String, FREFunction> getFunctions() { Map<String, FREFunction> functions = new HashMap<String, FREFunction>(); functions.put("init", new InitFunction()); functions.put("getAccessToken", new GetAccessTokenFunction()); functions.put("getExpirationTimestamp", new GetExpirationTimestampFunction()); functions.put("isSessionOpen", new IsSessionOpenFunction()); functions.put("openSessionWithPermissions", new OpenSessionWithPermissionsFunction()); functions.put("reauthorizeSessionWithPermissions", new ReauthorizeSessionWithPermissionsFunction()); functions.put("closeSessionAndClearTokenInformation", new CloseSessionAndClearTokenInformationFunction()); functions.put("requestWithGraphPath", new RequestWithGraphPathFunction()); functions.put("canPresentShareDialog", new CanPresentShareDialogFunction()); functions.put("shareStatusDialog", new ShareStatusDialogFunction()); functions.put("shareLinkDialog", new ShareLinkDialogFunction()); functions.put("canPresentOpenGraphDialog", new CanPresentOpenGraphDialogFunction()); functions.put("shareOpenGraphDialog", new ShareOpenGraphDialogFunction()); functions.put("canPresentMessageDialog", new CanPresentMessageDialogFunction()); functions.put("presentMessageDialogWithLinkAndParams", new PresentMessageDialogWithLinkAndParamsFunction()); functions.put("webDialog", new WebDialogFunction()); functions.put("activateApp", new ActivateAppFunction()); functions.put("setUsingStage3D", new SetUsingStage3dFunction()); functions.put("openDeferredAppLink", new OpenDeferredAppLinkFunction()); return functions; } private String _appID; private Session _session; public boolean usingStage3D = false; public void init(String appID, Boolean legacyMode) { _appID = appID; Session session = getSession(); if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { Session.setActiveSession(session); Settings.setPlatformCompatibilityEnabled(legacyMode); try { session.openForRead(null); } catch (UnsupportedOperationException exception) { String error = exception != null ? exception.toString() : "null exception"; AirFacebookExtension.log("ERROR - Couldn't open session from cached token: " + error); } } } public Session getSession() { if (_session == null) { _session = new Session.Builder(getActivity().getApplicationContext()).setApplicationId(_appID).build(); } return _session; } public void closeSessionAndClearTokenInformation() { if (_session != null) { _session.closeAndClearTokenInformation(); _session = null; } } public void launchLoginActivity(List<String> permissions, String type, Boolean reauthorize) { Intent i = new Intent(getActivity().getApplicationContext(), LoginActivity.class); i.putExtra(LoginActivity.extraPrefix+".permissions", permissions.toArray(new String[permissions.size()])); i.putExtra(LoginActivity.extraPrefix+".type", type); i.putExtra(LoginActivity.extraPrefix+".reauthorize", reauthorize); getActivity().startActivity(i); } public void launchDialogActivity(String method, Bundle parameters, String callback) { Intent i = new Intent(getActivity().getApplicationContext(), WebDialogActivity.class); i.putExtra(WebDialogActivity.extraPrefix+".method", method); i.putExtra(WebDialogActivity.extraPrefix+".parameters", parameters); i.putExtra(WebDialogActivity.extraPrefix+".callback", callback); getActivity().startActivity(i); } public void launchRequestThread(String graphPath, Bundle parameters, String httpMethod, String callback) { new RequestThread(this, graphPath, parameters, httpMethod, callback).start(); } }