Back to project page Calma.
The source code is released under:
Apache License
If you think the Android project Calma listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * Copyright (C) 2013 Thomas Schmid/*from www . j av a 2 s . com*/ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ package com.scto.android.calma; import android.app.Application; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.util.Log; //import com.scto.android.calma.console.Console; //import com.scto.android.calma.console.ConsoleAllocException; //import com.scto.android.calma.console.ConsoleBuilder; //import com.scto.android.calma.console.ConsoleHolder; //import com.scto.android.calma.console.shell.PrivilegedConsole; import com.scto.android.calma.preferences.AccessMode; import com.scto.android.calma.preferences.CalmaSettings; import com.scto.android.calma.preferences.ObjectStringIdentifier; import com.scto.android.calma.preferences.Preferences; //import com.scto.android.calma.ui.ThemeManager; //import com.scto.android.calma.ui.ThemeManager.Theme; //import com.scto.android.calma.util.AIDHelper; //import com.scto.android.calma.util.MimeTypeHelper; import java.io.File; import java.io.FileInputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class CalmaApp extends Application { public static final int THEME_BLACK = R.style.Theme_Calma; public static final int THEME_WHITE = R.style.Theme_Calma_Light; public static final int THEME_WHITE_BLACK = android.R.style.Theme_Holo_Light_DarkActionBar; private static final String TAG = "CalmaApp"; //$NON-NLS-1$ private static boolean DEBUG = false; private static Properties sSystemProperties; private static Map<String, Boolean> sOptionalCommandsMap; /** * A constant that contains the main process name. * @hide */ public static final String MAIN_PROCESS = "com.scto.android.calma"; //$NON-NLS-1$ //Static resources private static CalmaApp sApp; //private static ConsoleHolder sBackgroundConsole; private static boolean sIsDebuggable = false; private static boolean sIsDeviceRooted = false; /** * {@inheritDoc} */ @Override public void onCreate() { if (DEBUG) { Log.d(TAG, "CalmaApp.onCreate"); //$NON-NLS-1$ } init(); } /** * {@inheritDoc} */ @Override public void onTerminate() { if (DEBUG) { Log.d(TAG, "onTerminate"); //$NON-NLS-1$ } super.onTerminate(); } /** * Method that initializes the application. */ private void init() { //Save the static application reference sApp = this; // Read the system properties sSystemProperties = new Properties(); readSystemProperties(); // Check if the application is debuggable sIsDebuggable = (0 != (getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE)); // Check if the device is rooted sIsDeviceRooted = areShellCommandsPresent(); // Check optional commands loadOptionalCommands(); //Sets the default preferences if no value is set yet Preferences.loadDefaults(); // Read AIDs //AIDHelper.getAIDs(getApplicationContext(), true); // Allocate the default and current themes String defaultValue = ((String)CalmaSettings. SETTINGS_THEME.getDefaultValue()); String value = Preferences.getSharedPreferences().getString( CalmaSettings.SETTINGS_THEME.getId(), defaultValue); /* ThemeManager.getDefaultTheme(getApplicationContext()); if (!ThemeManager.setCurrentTheme(getApplicationContext(), value)) { //The current theme was not found. Mark the default setting as default theme ThemeManager.setCurrentTheme(getApplicationContext(), defaultValue); try { Preferences.savePreference( FileManagerSettings.SETTINGS_THEME, defaultValue, true); } catch (Throwable ex) { Log.w(TAG, "can't save theme preference", ex); //$NON-NLS-1$ } } // Set the base theme Theme theme = ThemeManager.getCurrentTheme(getApplicationContext()); theme.setBaseTheme(getApplicationContext(), false); */ } /** * Method that returns the singleton reference of the application. * * @return Application The application singleton reference * @hide */ public static CalmaApp getInstance() { return sApp; } /** * Method that returns if the application is debuggable * * @return boolean If the application is debuggable */ public static boolean isDebuggable() { return sIsDebuggable; } /** * Method that returns if the device is rooted * * @return boolean If the device is rooted */ public static boolean isDeviceRooted() { return sIsDeviceRooted; } /** * Method that returns if a command is present in the system * * @param commandId The command key * @return boolean If the command is present */ public static boolean hasOptionalCommand(String commandId) { if (!sOptionalCommandsMap.containsKey(commandId)) { return false; } return sOptionalCommandsMap.get(commandId).booleanValue(); } /** * Method that returns a system property value * * @param property The system property key * @return String The system property value */ public static String getSystemProperty(String property) { return sSystemProperties.getProperty(property); } /** * Method that returns the access mode of the application * * @return boolean If the access mode of the application */ public static AccessMode getAccessMode() { if (!sIsDeviceRooted) { return AccessMode.SAFE; } String defaultValue = ((ObjectStringIdentifier)CalmaSettings. SETTINGS_ACCESS_MODE.getDefaultValue()).getId(); String id = CalmaSettings.SETTINGS_ACCESS_MODE.getId(); AccessMode mode = AccessMode.fromId(Preferences.getSharedPreferences().getString(id, defaultValue)); return mode; } /** * Method that reads the system properties */ private static void readSystemProperties() { try { String propsFile = getInstance().getApplicationContext().getString(R.string.system_props_file); Properties props = new Properties(); props.load(new FileInputStream(new File(propsFile))); sSystemProperties = props; } catch (Throwable e) { Log.e(TAG, "Failed to read system properties.", e); //$NON-NLS-1$ } } /** * Method that check if all shell commands are present in the device * * @return boolean Check if the device has all of the shell commands */ private boolean areShellCommandsPresent() { try { String shellCommands = getString(R.string.shell_required_commands); String[] commands = shellCommands.split(","); //$NON-NLS-1$ int cc = commands.length; if (cc == 0) { //??? Log.w(TAG, "No shell commands."); //$NON-NLS-1$ return false; } for (int i = 0; i < cc; i++) { String c = commands[i].trim(); if (c.length() == 0) continue; File cmd = new File(c); if (!cmd.exists() || !cmd.isFile()) { Log.w(TAG, String.format( "Command %s not found. Exists: %s; IsFile: %s.", //$NON-NLS-1$ c, String.valueOf(cmd.exists()), String.valueOf(cmd.isFile()))); return false; } } // All commands are present return true; } catch (Exception e) { Log.e(TAG, "Failed to read shell commands.", e); //$NON-NLS-1$ } return false; } @SuppressWarnings("boxing") private void loadOptionalCommands() { try { sOptionalCommandsMap = new HashMap<String, Boolean>(); String shellCommands = getString(R.string.shell_optional_commands); String[] commands = shellCommands.split(","); //$NON-NLS-1$ int cc = commands.length; if (cc == 0) { Log.w(TAG, "No optional commands."); //$NON-NLS-1$ return; } for (int i = 0; i < cc; i++) { String c = commands[i].trim(); String key = c.substring(0, c.indexOf("=")).trim(); //$NON-NLS-1$ c = c.substring(c.indexOf("=")+1).trim(); //$NON-NLS-1$ if (c.length() == 0) continue; File cmd = new File(c); Boolean found = Boolean.valueOf(cmd.exists() && cmd.isFile()); sOptionalCommandsMap.put(key, found); if (DEBUG) { Log.w(TAG, String.format( "Optional command %s %s.", //$NON-NLS-1$ c, found ? "found" : "not found")); //$NON-NLS-1$ //$NON-NLS-2$ } } } catch (Exception e) { Log.e(TAG, "Failed to read optional shell commands.", e); //$NON-NLS-1$ } } }