de.tomgrill.gdxdialogs.core.GDXDialogsSystem Maven / Gradle / Ivy
/*******************************************************************************
* Copyright 2015 See AUTHORS file.
*
* 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 de.tomgrill.gdxdialogs.core;
import com.badlogic.gdx.Application.ApplicationType;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import com.badlogic.gdx.utils.reflect.ReflectionException;
public class GDXDialogsSystem {
private Class> gdxClazz = null;
private Object gdxAppObject = null;
private GDXDialogs gdxDialogs;
private static GDXDialogsSystem instance;
private GDXDialogsSystem() {
}
public static GDXDialogs install() {
instance = new GDXDialogsSystem();
instance.installSystem();
return GDXDialogsSystem.getDialogManager();
}
private void installSystem() {
installGdxReflections();
installAndroidGDXDialogs();
installIOSGDXDialogs();
installDesktopGDXDialogs();
// installHTMLGDXDialogs();
if (gdxDialogs == null) {
gdxDialogs = new FallbackGDXDialogs();
}
}
private void installGdxReflections() {
try {
gdxClazz = ClassReflection.forName("com.badlogic.gdx.Gdx");
gdxAppObject = ClassReflection.getField(gdxClazz, "app").get(null);
} catch (ReflectionException e) {
e.printStackTrace();
throw new RuntimeException("No libGDX environment. \n");
}
}
private void installDesktopGDXDialogs() {
if (Gdx.app.getType() != ApplicationType.Desktop) {
showDebugSkipInstall(ApplicationType.Desktop.name());
return;
}
try {
final Class> dialogManagerClazz = ClassReflection.forName("de.tomgrill.gdxdialogs.desktop.DesktopGDXDialogs");
Object dialogManager = ClassReflection.getConstructor(dialogManagerClazz).newInstance();
this.gdxDialogs = (GDXDialogs) dialogManager;
showDebugInstallSuccessful(ApplicationType.Desktop.name());
} catch (ReflectionException e) {
showErrorInstall(ApplicationType.Desktop.name(), "desktop");
e.printStackTrace();
}
}
private void installHTMLGDXDialogs() {
if (Gdx.app.getType() != ApplicationType.WebGL) {
showDebugSkipInstall(ApplicationType.WebGL.name());
return;
}
try {
final Class> dialogManagerClazz = ClassReflection.forName("de.tomgrill.gdxdialogs.html.HTMLGDXDialogs");
Object dialogManager = ClassReflection.getConstructor(dialogManagerClazz).newInstance();
this.gdxDialogs = (GDXDialogs) dialogManager;
showDebugInstallSuccessful(ApplicationType.WebGL.name());
} catch (ReflectionException e) {
showErrorInstall(ApplicationType.WebGL.name(), "html");
e.printStackTrace();
}
}
private void installIOSGDXDialogs() {
if (Gdx.app.getType() != ApplicationType.iOS) {
showDebugSkipInstall(ApplicationType.iOS.name());
return;
}
try {
final Class> dialogManagerClazz = ClassReflection.forName("de.tomgrill.gdxdialogs.ios.IOSGDXDialogs");
Object dialogManager = ClassReflection.getConstructor(dialogManagerClazz).newInstance();
this.gdxDialogs = (GDXDialogs) dialogManager;
showDebugInstallSuccessful(ApplicationType.iOS.name());
} catch (ReflectionException e) {
showErrorInstall(ApplicationType.iOS.name(), "ios");
e.printStackTrace();
}
}
private void installAndroidGDXDialogs() {
if (Gdx.app.getType() != ApplicationType.Android) {
showDebugSkipInstall(ApplicationType.Android.name());
return;
}
if (Gdx.app.getType() == ApplicationType.Android) {
try {
Class> activityClazz = ClassReflection.forName("android.app.Activity");
Class> dialogManagerClazz = ClassReflection.forName("de.tomgrill.gdxdialogs.android.AndroidGDXDialogs");
Object activity = null;
if (ClassReflection.isAssignableFrom(activityClazz, gdxAppObject.getClass())) {
activity = gdxAppObject;
} else {
Class> supportFragmentClass = findClass("android.support.v4.app.Fragment");
// {
if (supportFragmentClass != null && ClassReflection.isAssignableFrom(supportFragmentClass, gdxAppObject.getClass())) {
activity = ClassReflection.getMethod(supportFragmentClass, "getActivity").invoke(gdxAppObject);
} else {
Class> fragmentClass = findClass("android.app.Fragment");
if (fragmentClass != null && ClassReflection.isAssignableFrom(fragmentClass, gdxAppObject.getClass())) {
activity = ClassReflection.getMethod(fragmentClass, "getActivity").invoke(gdxAppObject);
}
}
}
if (activity == null) {
throw new RuntimeException("Can't find your gdx activity to instantiate gdx-dialogs. " + "Looks like you have implemented AndroidApplication without using "
+ "Activity or Fragment classes or Activity is not available at the moment");
}
Object dialogManager = ClassReflection.getConstructor(dialogManagerClazz, activityClazz).newInstance(activity);
this.gdxDialogs = (GDXDialogs) dialogManager;
showDebugInstallSuccessful(ApplicationType.Android.name());
} catch (Exception e) {
showErrorInstall(ApplicationType.Android.name(), "android");
e.printStackTrace();
}
}
}
public static GDXDialogs getDialogManager() {
return instance.gdxDialogs;
}
private static Class> findClass(String name) {
try {
return ClassReflection.forName(name);
} catch (Exception e) {
return null;
}
}
private void showDebugSkipInstall(String os) {
Gdx.app.debug(GDXDialogsVars.LOG_TAG, "Skip installing " + GDXDialogsVars.LOG_TAG + " for " + os + ". Not running " + os + ". \n");
}
private void showErrorInstall(String os, String artifact) {
Gdx.app.error(GDXDialogsVars.LOG_TAG, "Error installing " + GDXDialogsVars.LOG_TAG + " for " + os + "\n");
Gdx.app.error(GDXDialogsVars.LOG_TAG, "Did you add compile >> \"de.tomgrill.gdxdialogs:gdx-dialogs-" + artifact + ":" + GDXDialogsVars.VERSION
+ "\" << to your gradle dependencies?\n");
}
private void showDebugInstallSuccessful(String os) {
Gdx.app.debug(GDXDialogsVars.LOG_TAG, GDXDialogsVars.LOG_TAG + " for " + os + " installed successfully.");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy