package org.emdev;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.util.Locale;
import java.util.Properties;
import org.emdev.common.android.AndroidVersion;
import org.emdev.common.log.LogManager;
import org.emdev.utils.FileUtils;
import org.emdev.utils.LengthUtils;
public class BaseDroidApp extends Application {
public static Context context;
public static int APP_VERSION_CODE;
public static String APP_VERSION_NAME;
public static String APP_PACKAGE;
public static File EXT_STORAGE;
public static File APP_STORAGE;
public static Properties BUILD_PROPS;
public static boolean IS_EMULATOR;
public static String APP_NAME;
public static Locale defLocale;
private static Locale appLocale;
/**
* {@inheritDoc}
*
* @see android.app.Application#onCreate()
*/
@Override
public void onCreate() {
super.onCreate();
this.init();
LogManager.init(this);
}
protected void init() {
context = getApplicationContext();
final Configuration config = context.getResources().getConfiguration();
appLocale = defLocale = config.locale;
BUILD_PROPS = new Properties();
try {
BUILD_PROPS.load(new FileInputStream("/system/build.prop"));
} catch (final Throwable th) {
}
final PackageManager pm = getPackageManager();
try {
final PackageInfo pi = pm.getPackageInfo(getPackageName(), 0);
APP_NAME = getString(pi.applicationInfo.labelRes);
APP_VERSION_CODE = pi.versionCode;
APP_VERSION_NAME = LengthUtils.safeString(pi.versionName, "DEV");
APP_PACKAGE = pi.packageName;
EXT_STORAGE = Environment.getExternalStorageDirectory();
APP_STORAGE = getAppStorage(APP_PACKAGE);
IS_EMULATOR = "sdk".equalsIgnoreCase(Build.MODEL);
Log.i(APP_NAME, APP_NAME + " (" + APP_PACKAGE + ")" + " " + APP_VERSION_NAME + "(" + pi.versionCode + ")");
Log.i(APP_NAME, "Root dir: " + Environment.getRootDirectory());
Log.i(APP_NAME, "Data dir: " + Environment.getDataDirectory());
Log.i(APP_NAME, "External storage dir: " + EXT_STORAGE);
Log.i(APP_NAME, "App storage dir: " + APP_STORAGE);
Log.i(APP_NAME, "Files dir: " + FileUtils.getAbsolutePath(getFilesDir()));
Log.i(APP_NAME, "Cache dir: " + FileUtils.getAbsolutePath(getCacheDir()));
Log.i(APP_NAME, "System locale : " + defLocale);
Log.i(APP_NAME, "VERSION : " + AndroidVersion.VERSION);
Log.i(APP_NAME, "BOARD : " + Build.BOARD);
Log.i(APP_NAME, "BRAND : " + Build.BRAND);
Log.i(APP_NAME, "CPU_ABI : " + BUILD_PROPS.getProperty("ro.product.cpu.abi"));
Log.i(APP_NAME, "CPU_ABI2 : " + BUILD_PROPS.getProperty("ro.product.cpu.abi2"));
Log.i(APP_NAME, "DEVICE : " + Build.DEVICE);
Log.i(APP_NAME, "DISPLAY : " + Build.DISPLAY);
Log.i(APP_NAME, "FINGERPRINT : " + Build.FINGERPRINT);
Log.i(APP_NAME, "ID : " + Build.ID);
Log.i(APP_NAME, "MANUFACTURER: " + BUILD_PROPS.getProperty("ro.product.manufacturer"));
Log.i(APP_NAME, "MODEL : " + Build.MODEL);
Log.i(APP_NAME, "PRODUCT : " + Build.PRODUCT);
} catch (final NameNotFoundException e) {
e.printStackTrace();
}
}
@Override
public void onConfigurationChanged(final Configuration newConfig) {
final Configuration oldConfig = getResources().getConfiguration();
final int diff = oldConfig.diff(newConfig);
final Configuration target = diff == 0 ? oldConfig : newConfig;
if (appLocale != null) {
setAppLocaleIntoConfiguration(target);
}
super.onConfigurationChanged(target);
}
protected File getAppStorage(final String appPackage) {
File dir = EXT_STORAGE;
if (dir != null) {
final File appDir = new File(dir, "." + appPackage);
if (appDir.isDirectory() || appDir.mkdir()) {
dir = appDir;
}
} else {
dir = context.getFilesDir();
}
dir.mkdirs();
return dir.getAbsoluteFile();
}
public static void setAppLocale(final String lang) {
final Configuration config = context.getResources().getConfiguration();
appLocale = LengthUtils.isNotEmpty(lang) ? new Locale(lang) : defLocale;
setAppLocaleIntoConfiguration(config);
}
protected static void setAppLocaleIntoConfiguration(final Configuration config) {
if (!config.locale.equals(appLocale)) {
Locale.setDefault(appLocale);
config.locale = appLocale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}
Log.i(APP_NAME, "UI Locale: " + appLocale);
}
}