//--------------------------------------------------
		//--------------------------------------------------
		DialogueBoxJavaInterface::DialogueBoxJavaInterface()
		{
			CreateNativeInterface("com/chilliworks/chillisource/core/DialogueBoxNativeInterface");
			CreateMethodReference("makeToast", "(Ljava/lang/String;)V");
			CreateMethodReference("showSystemConfirmDialogue", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
			CreateMethodReference("showSystemDialogue", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
		}
		//-----------------------------------------------
		/// Constructor
		//-----------------------------------------------
		AccelerometerJavaInterface::AccelerometerJavaInterface()
			: mbListening(false)
		{
			CreateNativeInterface("com/chilliworks/chillisource/input/AccelerometerNativeInterface");
			CreateMethodReference("IsAvailable", "()Z");
			CreateMethodReference("StartListening", "()V");
			CreateMethodReference("StopListening", "()V");
		}
		//-----------------------------------------------
		//-----------------------------------------------
		TextEntryJavaInterface::TextEntryJavaInterface()
		{
			CreateNativeInterface("com/chilliworks/chillisource/input/TextEntryNativeInterface");
			CreateMethodReference("activate", "()V");
			CreateMethodReference("deactivate", "()V");
			CreateMethodReference("setKeyboardType", "(I)V");
			CreateMethodReference("setCapitalisationMethod", "(I)V");
			CreateMethodReference("setTextBuffer", "(Ljava/lang/String;)V");
		}
		//--------------------------------------------------------------
		//--------------------------------------------------------------
		GooglePlayIAPJavaInterface::GooglePlayIAPJavaInterface(const std::string& in_publicKey)
		{
			CreateNativeInterface("com/chilliworks/chillisource/googleplay/networking/GooglePlayIAPNativeInterface");
			CreateMethodReference("Init", "(Ljava/lang/String;)V");
			CreateMethodReference("IsPurchasingEnabled", "()Z");
			CreateMethodReference("RequestProductDescriptions", "([Ljava/lang/String;)V");
			CreateMethodReference("CancelProductDescriptionsRequest", "()V");
			CreateMethodReference("RequestProductPurchase", "(Ljava/lang/String;I)V");
			CreateMethodReference("CloseTransaction", "(Ljava/lang/String;Ljava/lang/String;)V");
			CreateMethodReference("RestoreManagedPurchases", "()V");
			CreateMethodReference("RestorePendingUnmanagedTransactions", "()V");
			CreateMethodReference("RestorePendingManagedTransactions", "([Ljava/lang/String;)V");

			//initialise the system
			JNIEnv* env = JavaInterfaceManager::GetSingletonPtr()->GetJNIEnvironmentPtr();
			jstring publicKey = JavaInterfaceUtils::CreateJStringFromSTDString(in_publicKey);
			env->CallVoidMethod(GetJavaObject(), GetMethodID("Init"), publicKey);
			env->DeleteLocalRef(publicKey);
		}
		//--------------------------------------------------------------
		//--------------------------------------------------------------
		AmazonIAPJavaInterface::AmazonIAPJavaInterface(const std::string& in_privateKey, const std::string& in_udid)
		{
			CreateNativeInterface("com/chilliworks/chillisource/networking/AmazonIAPNativeInterface");
			CreateMethodReference("Init", "(Ljava/lang/String;Ljava/lang/String;)V");
			CreateMethodReference("IsPurchasingEnabled", "()Z");
			CreateMethodReference("RequestProductDescriptions", "([Ljava/lang/String;)V");
			CreateMethodReference("CancelProductDescriptionsRequest", "()V");
			CreateMethodReference("RequestProductPurchase", "(Ljava/lang/String;)V");
			CreateMethodReference("CloseTransaction", "(Ljava/lang/String;Ljava/lang/String;)V");
			CreateMethodReference("RestoreManagedPurchases", "()V");
			CreateMethodReference("StartListeningForTransactionUpdates", "()V");
			CreateMethodReference("StopListeningForTransactionUpdates", "()V");

			//initialise the system
			JNIEnv* env = JavaInterfaceManager::GetSingletonPtr()->GetJNIEnvironmentPtr();
			jstring privateKey = JavaUtils::CreateJStringFromSTDString(in_privateKey);
			jstring udid = JavaUtils::CreateJStringFromSTDString(in_udid);
			env->CallVoidMethod(GetJavaObject(), GetMethodID("Init"), privateKey, udid);
			env->DeleteLocalRef(privateKey);
			env->DeleteLocalRef(udid);
		}
		//--------------------------------------------------------------------------------------
		//--------------------------------------------------------------------------------------
		CoreJavaInterface::CoreJavaInterface()
		: m_application(nullptr), m_screenWidth(0), m_screenHeight(0), m_screenDensity(-0.1f), m_physicalScreenSize(-0.1f)
		{
			CreateNativeInterface("com/chilliworks/chillisource/core/CoreNativeInterface");
			CreateMethodReference("getExternalStorageDirectory", "()Ljava/lang/String;");
			CreateMethodReference("getApplicationName", "()Ljava/lang/String;");
			CreateMethodReference("getApplicationVersionCode", "()I");
			CreateMethodReference("getApplicationVersionName", "()Ljava/lang/String;");
			CreateMethodReference("getPackageName", "()Ljava/lang/String;");
			CreateMethodReference("getAPKDirectory", "()Ljava/lang/String;");
			CreateMethodReference("getScreenWidth", "()I");
			CreateMethodReference("getScreenHeight", "()I");
			CreateMethodReference("getScreenDensity", "()F");
			CreateMethodReference("forceQuit", "()V");
			CreateMethodReference("getSystemTimeInMilliseconds", "()J");
			CreateMethodReference("setPreferredFPS", "(I)V");
			CreateMethodReference("getActivity", "()Landroid/app/Activity;");
		}
		//--------------------------------------------------------------
		/// Constructor
		//--------------------------------------------------------------
		EmailComposerJavaInterface::EmailComposerJavaInterface()
		{
			CreateNativeInterface("com/chilliworks/chillisource/social/EmailComposerNativeInterface");
			CreateMethodReference("Present", "([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;)V");
		}