package com.appboy.unity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.appboy.Appboy;
import com.appboy.Constants;
import com.appboy.ui.inappmessage.AppboyInAppMessageManager;
import com.appboy.unity.configuration.UnityConfigurationProvider;
import com.appboy.unity.utils.InAppMessageUtils;
import com.unity3d.player.UnityPlayerNativeActivity;
/**
* This class allows UnityPlayerNativeActivity and subclasses instances to gain AppboyUnityPlayerNativeActivity
* functionality by calling appropriate methods during each phase of the Android Activity lifecycle.
*/
public class AppboyUnityPlayerNativeActivityWrapper {
private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, AppboyUnityPlayerNativeActivityWrapper.class.getName());
private UnityConfigurationProvider mUnityConfigurationProvider;
/**
* Call from {@link Activity#onCreate(Bundle)}
* @param unityPlayerNativeActivity
*/
public void onCreateCalled(UnityPlayerNativeActivity unityPlayerNativeActivity) {
mUnityConfigurationProvider = new UnityConfigurationProvider(unityPlayerNativeActivity);
Appboy.getInstance(unityPlayerNativeActivity).subscribeToNewInAppMessages(EventSubscriberFactory.createInAppMessageEventSubscriber(mUnityConfigurationProvider));
Appboy.getInstance(unityPlayerNativeActivity).subscribeToFeedUpdates(EventSubscriberFactory.createFeedUpdatedEventSubscriber(mUnityConfigurationProvider));
Log.d(TAG, String.format("%s finished onCreateCalled setup.", AppboyUnityPlayerNativeActivityWrapper.class.getSimpleName()));
}
/**
* Call from {@link Activity#onStart()}
* @param unityPlayerNativeActivity
*/
public void onStartCalled(UnityPlayerNativeActivity unityPlayerNativeActivity) {
Appboy.getInstance(unityPlayerNativeActivity).openSession(unityPlayerNativeActivity);
if (!mUnityConfigurationProvider.getShowInAppMessagesAutomaticallyKey()) {
AppboyUnityNativeInAppMessageManagerListener.getInstance().setShowInAppMessagesManually(true);
Log.i(TAG, "In-app message display will be handled manually.");
}
AppboyInAppMessageManager.getInstance().setCustomInAppMessageManagerListener(AppboyUnityNativeInAppMessageManagerListener.getInstance());
AppboyUnityNativeInAppMessageManagerListener.getInstance().registerContainerActivity(unityPlayerNativeActivity);
Log.d(TAG, String.format("Starting %s.", AppboyUnityPlayerNativeActivityWrapper.class.getSimpleName()));
}
/**
* Call from {@link Activity#onResume()}
* @param unityPlayerNativeActivity
*/
public void onResumeCalled(UnityPlayerNativeActivity unityPlayerNativeActivity) {
AppboyInAppMessageManager.getInstance().registerInAppMessageManager(unityPlayerNativeActivity);
}
/**
* Call from {@link Activity#onPause()}
* @param unityPlayerNativeActivity
*/
public void onPauseCalled(UnityPlayerNativeActivity unityPlayerNativeActivity) {
AppboyInAppMessageManager.getInstance().unregisterInAppMessageManager(unityPlayerNativeActivity);
}
/**
* Call from {@link Activity#onStop()}
* @param unityPlayerNativeActivity
*/
public void onStopCalled(UnityPlayerNativeActivity unityPlayerNativeActivity) {
Appboy.getInstance(unityPlayerNativeActivity).closeSession(unityPlayerNativeActivity);
}
/**
* Call from {@link Activity#onNewIntent(Intent)}
* @param intent
* @param unityPlayerNativeActivity
*/
public void onNewIntentCalled(Intent intent, UnityPlayerNativeActivity unityPlayerNativeActivity) {
// If the Activity is already open and we receive an intent to open the Activity again, we set
// the new intent as the current one (which has the new intent extras).
unityPlayerNativeActivity.setIntent(intent);
}
/**
* See {@link AppboyUnityPlayerNativeActivity#logInAppMessageClick(String)}
* @param messageJSONString
* @param unityPlayerNativeActivity
*/
public void logInAppMessageClick(String messageJSONString, UnityPlayerNativeActivity unityPlayerNativeActivity) {
InAppMessageUtils.logInAppMessageClick(InAppMessageUtils.inAppMessageFromString(unityPlayerNativeActivity, messageJSONString));
}
/**
* See {@link AppboyUnityPlayerNativeActivity#logInAppMessageButtonClick(String, int)}
* @param messageJSONString
* @param unityPlayerNativeActivity
*/
public void logInAppMessageButtonClick(String messageJSONString, int buttonId, UnityPlayerNativeActivity unityPlayerNativeActivity) {
InAppMessageUtils.logInAppMessageButtonClick(InAppMessageUtils.inAppMessageFromString(unityPlayerNativeActivity, messageJSONString), buttonId);
}
/**
* See {@link AppboyUnityPlayerNativeActivity#logInAppMessageImpression(String)}
* @param messageJSONString
* @param unityPlayerNativeActivity
*/
public void logInAppMessageImpression(String messageJSONString, UnityPlayerNativeActivity unityPlayerNativeActivity) {
InAppMessageUtils.logInAppMessageImpression(InAppMessageUtils.inAppMessageFromString(unityPlayerNativeActivity, messageJSONString));
}
}