package com.jdroid.android.context; import android.preference.PreferenceManager; import com.jdroid.android.R; import com.jdroid.android.application.AbstractApplication; import com.jdroid.android.firebase.remoteconfig.RemoteConfigParameter; import com.jdroid.android.utils.LocalizationUtils; import com.jdroid.java.http.Server; import java.util.List; import java.util.Locale; public abstract class AppContext extends AbstractAppContext { // Environment private Server defaultServer; protected Server findServerByName(String name) { return null; } public Server getServer() { if (defaultServer == null) { defaultServer = findServerByName(getServerName()); } return getServer(defaultServer); } @SuppressWarnings("unchecked") protected <T extends Server> T getServer(Server defaultServer) { if (isProductionEnvironment() || !displayDebugSettings()) { return (T)defaultServer; } else { Class<?> clazz = defaultServer.getClass().getEnclosingClass() != null ? defaultServer.getClass().getEnclosingClass() : defaultServer.getClass(); return (T)defaultServer.instance(PreferenceManager.getDefaultSharedPreferences(AbstractApplication.get()).getString( clazz.getSimpleName(), defaultServer.getName()).toUpperCase(Locale.US)); } } protected String getServerName() { return getBuildConfigValue("SERVER_NAME", null); } /** * @return Whether the application should display the debug settings */ public Boolean displayDebugSettings() { return !isProductionEnvironment(); } public Boolean isLoggingEnabled() { return !isProductionEnvironment(); } public String getBuildType() { return getBuildConfigValue("BUILD_TYPE"); } public String getBuildTime() { return getBuildConfigValue("BUILD_TIME", null); } public Boolean isStrictModeEnabled() { return !isProductionEnvironment() && getBuildConfigBoolean("STRICT_MODE_ENABLED", false); } /** * @return Whether the application is running on a production environment */ public Boolean isProductionEnvironment() { return getBuildType().equals("release"); } public String getLocalIp() { return getBuildConfigValue("LOCAL_IP", null); } public String getInstallationSource() { return getBuildConfigValue("INSTALLATION_SOURCE", "GooglePlay"); } public Boolean isChromeInstallationSource() { return getInstallationSource().equals("Chrome"); } /* * Used by Google Sign In */ public String getServerClientId() { return getBuildConfigValue("GOOGLE_SERVER_CLIENT_ID", null); } public String getServerApiVersion() { return null; } public String getWebsite() { return null; } public String getContactUsEmail() { return null; } public String getTwitterAccount() { return null; } public String getFacebookPageId() { return null; } public String getGooglePlusCommunityId() { return null; } public List<RemoteConfigParameter> getRemoteConfigParameters() { return null; } public String getAppInviteTitle() { return LocalizationUtils.getString(R.string.jdroid_appInviteTitle, LocalizationUtils.getString(R.string.jdroid_appName)); } public String getAppInviteMessage() { return LocalizationUtils.getString(R.string.jdroid_appInviteMessage, LocalizationUtils.getString(R.string.jdroid_appName)); } public String getAppInviteDeeplink() { return AbstractApplication.get().getAppContext().getWebsite(); } }