package com.facebook.internal; import android.content.Context; import android.os.Bundle; import com.facebook.widget.FacebookDialog; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * com.facebook.internal is solely for the use of other packages within the Facebook SDK for Android. Use of * any of the classes in this package is unsupported, and they may be modified or removed without warning at * any time. */ public class PendingCallStore { private static final String CALL_ID_ARRAY_KEY = "com.facebook.internal.PendingCallStore.callIdArrayKey"; private static final String CALL_KEY_PREFIX = "com.facebook.internal.PendingCallStore."; private static PendingCallStore mInstance; private Map<String, FacebookDialog.PendingCall> pendingCallMap = new HashMap<String, FacebookDialog.PendingCall>(); public static PendingCallStore getInstance() { if (mInstance == null) { createInstance(); } return mInstance; } private synchronized static void createInstance() { if (mInstance == null) { mInstance = new PendingCallStore(); } } public void trackPendingCall(FacebookDialog.PendingCall pendingCall) { if (pendingCall != null) { pendingCallMap.put(pendingCall.getCallId().toString(), pendingCall); } } public void stopTrackingPendingCall(UUID callId) { if (callId != null) { pendingCallMap.remove(callId.toString()); } } public FacebookDialog.PendingCall getPendingCallById(UUID callId) { if (callId == null) { return null; } return pendingCallMap.get(callId.toString()); } public void saveInstanceState(Bundle outState) { ArrayList<String> callIds = new ArrayList<String>(pendingCallMap.keySet()); outState.putStringArrayList(CALL_ID_ARRAY_KEY, callIds); for(FacebookDialog.PendingCall pendingCall : pendingCallMap.values()) { String stateKey = getSavedStateKeyForPendingCallId(pendingCall.getCallId().toString()); outState.putParcelable(stateKey, pendingCall); } } public void restoreFromSavedInstanceState(Bundle savedInstanceState) { ArrayList<String> callIds = savedInstanceState.getStringArrayList(CALL_ID_ARRAY_KEY); if (callIds != null) { for (String callId : callIds) { String stateKey = getSavedStateKeyForPendingCallId(callId); FacebookDialog.PendingCall pendingCall = savedInstanceState.getParcelable(stateKey); if (pendingCall != null) { pendingCallMap.put(pendingCall.getCallId().toString(), pendingCall); } } } } private String getSavedStateKeyForPendingCallId(String pendingCallId) { return CALL_KEY_PREFIX + pendingCallId; } }