diff --git a/app/src/main/java/com/jens/automation2/Miscellaneous.java b/app/src/main/java/com/jens/automation2/Miscellaneous.java index 2c9161a..43436c7 100644 --- a/app/src/main/java/com/jens/automation2/Miscellaneous.java +++ b/app/src/main/java/com/jens/automation2/Miscellaneous.java @@ -128,8 +128,8 @@ import eu.chainfire.libsuperuser.Shell; public class Miscellaneous extends Service { protected static String writeableFolderStringCache = null; - protected final static String http_error_string = "HTTP_ERROR"; - protected final static String last_trigger_url_result_string = "last_trigger_url_result"; + protected final static String http_error_string = "HTTP_ERROR"; + protected final static String last_trigger_url_result_string = "last_trigger_url_result"; protected final static String httpMainData = "httpMainData"; protected final static String doNoEncodingString = "NoEncoding"; protected final static String httpEncoding = "UTF-8"; @@ -163,15 +163,15 @@ public class Miscellaneous extends Service HttpClient httpclient = new DefaultHttpClient(); StringBuilder responseBody = new StringBuilder(); boolean errorFound = false; - - try - { - try - { - URL urlObject = new URL(url); - HttpURLConnection connection; - - if(url.toLowerCase().contains("https")) + + try + { + try + { + URL urlObject = new URL(url); + HttpURLConnection connection; + + if(url.toLowerCase().contains("https")) { connection = (HttpsURLConnection) urlObject.openConnection(); if(Settings.httpAcceptAllCertificates) @@ -187,21 +187,21 @@ public class Miscellaneous extends Service } } - else - connection = (HttpURLConnection) urlObject.openConnection(); + else + connection = (HttpURLConnection) urlObject.openConnection(); - // Add http simple authentication if specified - if(username != null && password != null) - { - String encodedCredentials = Base64.encodeToString(new String(username + ":" + password).getBytes(), Base64.DEFAULT); - connection.setRequestMethod("POST"); - connection.setDoOutput(true); - connection.setRequestProperty ("Authorization", "Basic " + encodedCredentials); - } + // Add http simple authentication if specified + if(username != null && password != null) + { + String encodedCredentials = Base64.encodeToString(new String(username + ":" + password).getBytes(), Base64.DEFAULT); + connection.setRequestMethod("POST"); + connection.setDoOutput(true); + connection.setRequestProperty ("Authorization", "Basic " + encodedCredentials); + } else if(method.equals(ActivityManageActionTriggerUrl.methodPost)) connection.setRequestMethod("POST"); - if(httpParams.size() > 0) + if(httpParams != null && httpParams.size() > 0) { connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); @@ -220,29 +220,29 @@ public class Miscellaneous extends Service writer.close(); } - InputStream content = (InputStream)connection.getInputStream(); - BufferedReader in = new BufferedReader (new InputStreamReader (content)); - String line; - while ((line = in.readLine()) != null) - responseBody.append(line + Miscellaneous.lineSeparator); - } - catch(Exception e) - { - Miscellaneous.logEvent("e", "HTTP error", Log.getStackTraceString(e), 3); - errorFound = true; - } - } - finally - { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - if(errorFound) - return http_error_string; - else - return responseBody.toString(); - } + InputStream content = (InputStream)connection.getInputStream(); + BufferedReader in = new BufferedReader (new InputStreamReader (content)); + String line; + while ((line = in.readLine()) != null) + responseBody.append(line + Miscellaneous.lineSeparator); + } + catch(Exception e) + { + Miscellaneous.logEvent("e", "HTTP error", Log.getStackTraceString(e), 3); + errorFound = true; + } + } + finally + { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + if(errorFound) + return http_error_string; + else + return responseBody.toString(); + } } private static String getQuery(List params, String method) throws UnsupportedEncodingException @@ -295,35 +295,35 @@ public class Miscellaneous extends Service return result.toString(); } - + public static String downloadUrlWithoutCertificateChecking(String url, String username, String password, String method, Map httpParams) { try - { - HttpParams params = new BasicHttpParams(); - params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false); - HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); - HttpClient httpclient = new DefaultHttpClient(params); + { + HttpParams params = new BasicHttpParams(); + params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false); + HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); + HttpClient httpclient = new DefaultHttpClient(params); httpclient = Actions.getInsecureSslClient(httpclient); HttpRequestBase httpRequest; if( method.equals(ActivityManageActionTriggerUrl.methodPost) || - (username != null && password != null) + (username != null && password != null) || - httpParams.size() > 0 - ) + httpParams.size() > 0 + ) httpRequest = new HttpPost(url); else httpRequest = new HttpGet(url); - - // Add http simple authentication if specified - if(username != null && password != null) - { - String encodedCredentials = Base64.encodeToString(new String(username + ":" + password).getBytes(), Base64.DEFAULT); + + // Add http simple authentication if specified + if(username != null && password != null) + { + String encodedCredentials = Base64.encodeToString(new String(username + ":" + password).getBytes(), Base64.DEFAULT); httpRequest.addHeader("Authorization", "Basic " + encodedCredentials); - } + } if(httpParams.size() > 0) { @@ -334,20 +334,20 @@ public class Miscellaneous extends Service ((HttpPost)httpRequest).setEntity(new UrlEncodedFormEntity(paramPairs, "UTF-8")); } - - HttpResponse response = httpclient.execute(httpRequest); - HttpEntity entity = response.getEntity(); - if (entity != null) - { + + HttpResponse response = httpclient.execute(httpRequest); + HttpEntity entity = response.getEntity(); + if (entity != null) + { // System.out.println(EntityUtils.toString(entity)); - return EntityUtils.toString(entity); - } - } - catch(Exception e) - { + return EntityUtils.toString(entity); + } + } + catch(Exception e) + { Miscellaneous.logEvent("e", "HTTP error", Log.getStackTraceString(e), 3); return http_error_string; - } + } // finally // { // // When HttpClient instance is no longer needed, @@ -356,34 +356,34 @@ public class Miscellaneous extends Service // httpclient.getConnectionManager().shutdown(); // return responseBody.toString(); // } - - return null; + + return null; } - public static int boolToInt(boolean input) - { - if(input) - return 1; - else - return 0; - } + public static int boolToInt(boolean input) + { + if(input) + return 1; + else + return 0; + } - @Override + @Override public IBinder onBind(Intent arg0) { return null; } - + public static void logEvent(String type, String header, String description, int logLevel) { - try - { - header = getAnyContext().getResources().getString(R.string.app_name); - } - catch(NullPointerException e) - { - header = "Automation"; - } + try + { + header = getAnyContext().getResources().getString(R.string.app_name); + } + catch(NullPointerException e) + { + header = "Automation"; + } if(Settings.logToConsole) { @@ -411,19 +411,19 @@ public class Miscellaneous extends Service protected static boolean logCleanerRunning = false; protected static void rotateLogFile(File logFile) { - logCleanerRunning = true; + logCleanerRunning = true; - long maxSizeInBytes = (long)Settings.logFileMaxSize * 1024 * 1024; + long maxSizeInBytes = (long)Settings.logFileMaxSize * 1024 * 1024; - if(logFile.exists() && logFile.length() > (maxSizeInBytes)) - { - Miscellaneous.logEvent("i", "Logfile", "Cleaning up log file.", 3); - File archivedLogFile = new File(getWriteableFolder() + "/" + logFileName + "-old"); - logFile.renameTo(archivedLogFile); - Miscellaneous.logEvent("i", "Logfile", "Cleaning up log file finished. Old log renamed to " + archivedLogFile.getAbsolutePath(), 3); - } + if(logFile.exists() && logFile.length() > (maxSizeInBytes)) + { + Miscellaneous.logEvent("i", "Logfile", "Cleaning up log file.", 3); + File archivedLogFile = new File(getWriteableFolder() + "/" + logFileName + "-old"); + logFile.renameTo(archivedLogFile); + Miscellaneous.logEvent("i", "Logfile", "Cleaning up log file finished. Old log renamed to " + archivedLogFile.getAbsolutePath(), 3); + } - logCleanerRunning = false; + logCleanerRunning = false; } protected static boolean testFolder(String folderPath) @@ -492,34 +492,34 @@ public class Miscellaneous extends Service { // if (testFolder(f)) // { - String pathToUse = f + "/" + Settings.folderName; + String pathToUse = f + "/" + Settings.folderName; // Toast.makeText(getAnyContext(), "Using " + pathToUse + " to store settings and log.", Toast.LENGTH_LONG).show(); - // Migrate existing files - File oldDirectory = new File(pathToUse); - File newDirectory = new File(writeableFolderStringCache); - File oldConfigFilePath = new File(pathToUse + "/" + XmlFileInterface.settingsFileName); - if (oldConfigFilePath.exists() && oldConfigFilePath.canWrite()) - { - Miscellaneous.logEvent("i", "Path", "Found old path " + pathToUse + " for settings and logs. Migrating old files to new directory.", 2); + // Migrate existing files + File oldDirectory = new File(pathToUse); + File newDirectory = new File(writeableFolderStringCache); + File oldConfigFilePath = new File(pathToUse + "/" + XmlFileInterface.settingsFileName); + if (oldConfigFilePath.exists() && oldConfigFilePath.canWrite()) + { + Miscellaneous.logEvent("i", "Path", "Found old path " + pathToUse + " for settings and logs. Migrating old files to new directory.", 2); - for (File fileToBeMoved : oldDirectory.listFiles()) - { - File dstFile = new File(writeableFolderStringCache + "/" + fileToBeMoved.getName()); + for (File fileToBeMoved : oldDirectory.listFiles()) + { + File dstFile = new File(writeableFolderStringCache + "/" + fileToBeMoved.getName()); /* For some stupid reason Android's file.moveTo can't move files between mount points. That's why we have to copy it and delete the src if successful. */ - if(copyFileUsingStream(fileToBeMoved, dstFile)) - fileToBeMoved.delete(); - } - - String message = String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.filesHaveBeenMovedTo), newDirectory.getAbsolutePath()); - Miscellaneous.writeStringToFile(oldDirectory.getAbsolutePath() + "/readme.txt", message); - break migration; + if(copyFileUsingStream(fileToBeMoved, dstFile)) + fileToBeMoved.delete(); } + + String message = String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.filesHaveBeenMovedTo), newDirectory.getAbsolutePath()); + Miscellaneous.writeStringToFile(oldDirectory.getAbsolutePath() + "/readme.txt", message); + break migration; + } // } } } catch (Exception e) @@ -560,10 +560,10 @@ public class Miscellaneous extends Service FileWriter fileWriter = new FileWriter(getLogFile(), true); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); Date date = new Date(); - + bufferedWriter.write("\n" + date + ": " + type + " / " + header + " / " + description); bufferedWriter.close(); - + // Log.i("LogFile", "Log entry written."); } catch(Exception e) @@ -571,21 +571,21 @@ public class Miscellaneous extends Service Log.e("LogFile", "Error writing logs to file: " + e.getMessage()); } } - + public static boolean isAndroidEmulator() { String TAG = "EmulatorTest"; - String model = Build.MODEL; + String model = Build.MODEL; // Miscellaneous.logEvent("i", TAG, "model=" + model); - String product = Build.PRODUCT; + String product = Build.PRODUCT; // Miscellaneous.logEvent("i", TAG, "product=" + product); - boolean isEmulator = false; - if (product != null) - { - isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_"); - } + boolean isEmulator = false; + if (product != null) + { + isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_"); + } // Miscellaneous.logEvent("i", TAG, "isEmulator=" + isEmulator); - return isEmulator; + return isEmulator; } public static boolean compare(String direction, String needle, String haystack) @@ -593,8 +593,8 @@ public class Miscellaneous extends Service // If only one of needle or haystack is null if( (needle == null && haystack != null) - || - (needle != null && haystack == null) + || + (needle != null && haystack == null) ) return false; @@ -619,29 +619,29 @@ public class Miscellaneous extends Service return false; } } - + public static int compareTimes(TimeObject time1, TimeObject time2) { // Miscellaneous.logEvent("i", "TimeCompare", "To compare: " + time1.toString() + " / " + time2.toString()); - + if(time1.getHours() == time2.getHours() && time1.getMinutes() == time2.getMinutes()) { // Miscellaneous.logEvent("i", "TimeCompare", "Times are equal."); return 0; } - + if(time1.getHours() > time2.getHours()) { // Miscellaneous.logEvent("i", "TimeCompare", "Time1 is bigger/later by hours."); return -1; } - + if(time1.getHours() < time2.getHours()) { // Miscellaneous.logEvent("i", "TimeCompare", "Time2 is bigger/later by hours."); return 1; } - + if(time1.getHours() == time2.getHours()) { if(time1.getMinutes() < time2.getMinutes()) @@ -649,14 +649,14 @@ public class Miscellaneous extends Service // Miscellaneous.logEvent("i", "TimeCompare", "Hours are equal. Time2 is bigger/later by minutes."); return 1; } - + if(time1.getMinutes() > time2.getMinutes()) { // Miscellaneous.logEvent("i", "TimeCompare", "Hours are equal. Time1 is bigger/later by minutes."); return -1; } } - + Miscellaneous.logEvent("i", "TimeCompare", "Default return code. Shouldn't be here.", 5); return 0; @@ -700,13 +700,13 @@ public class Miscellaneous extends Service Miscellaneous.logEvent("i", "TimeCompare", "Default return code. Shouldn't be here.", 5); return 0; } - + public static String convertStreamToString(InputStream is) { - java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); - return s.hasNext() ? s.next() : ""; + java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); + return s.hasNext() ? s.next() : ""; } - + public static Context getAnyContext() { Context returnContext; @@ -744,7 +744,7 @@ public class Miscellaneous extends Service return false; } } - + @SuppressLint("NewApi") public static String replaceVariablesInText(String source, Context context) throws Exception { @@ -752,7 +752,7 @@ public class Miscellaneous extends Service // Miscellaneous.logEvent("i", "Raw source", source); if(source.contains("[uniqueid]")) source = source.replace("[uniqueid]", Secure.getString(context.getContentResolver(), Secure.ANDROID_ID)); - + if(source.contains("[latitude]") | source.contains("[longitude]")) { if(LocationProvider.getLastKnownLocation() != null) @@ -765,17 +765,17 @@ public class Miscellaneous extends Service Miscellaneous.logEvent("w", "TriggerURL", context.getResources().getString(R.string.triggerUrlReplacementPositionError), 3); } } - + if(source.contains("[phonenr]")) { String lastPhoneNr = PhoneStatusListener.getLastPhoneNumber(); - + if(lastPhoneNr != null && lastPhoneNr.length() > 0) source = source.replace("[phonenr]", PhoneStatusListener.getLastPhoneNumber()); else Miscellaneous.logEvent("w", "TriggerURL", context.getResources().getString(R.string.triggerUrlReplacementPositionError), 3); } - + if(source.contains("[serialnr]")) { if (Build.VERSION.SDK_INT > 8) @@ -786,16 +786,16 @@ public class Miscellaneous extends Service if( source.contains("[d]") || - source.contains("[m]") || - source.contains("[Y]") || - source.contains("[h]") || - source.contains("[H]") || - source.contains("[i]") || - source.contains("[s]") || - source.contains("[ms]") || - source.contains("[w]") || - source.contains("[F]") - ) + source.contains("[m]") || + source.contains("[Y]") || + source.contains("[h]") || + source.contains("[H]") || + source.contains("[i]") || + source.contains("[s]") || + source.contains("[ms]") || + source.contains("[w]") || + source.contains("[F]") + ) { Calendar cal = Calendar.getInstance(); @@ -911,7 +911,7 @@ public class Miscellaneous extends Service if (notificationText != null && notificationText.length() > 0) //source = source.replace("[notificationText]", escapeStringForUrl(notificationText)); - source = source.replace("[notificationText]", notificationText); + source = source.replace("[notificationText]", notificationText); else { source = source.replace("[notificationText]", "notificationText unknown"); @@ -1016,18 +1016,18 @@ public class Miscellaneous extends Service source = source.substring(0, pos1) + escapeStringForUrl(replacement) + source.substring(pos2 +1); } - + // Miscellaneous.logEvent("i", "URL after replace", source); - + return source; } - + /** * Write a log entry and exit the application, so the crash is actually visible. * Might even cause the activity to be automatically restarted by the OS. */ public static UncaughtExceptionHandler uncaughtExceptionHandler = new UncaughtExceptionHandler() - { + { @Override public void uncaughtException(Thread thread, Throwable ex) { @@ -1035,13 +1035,13 @@ public class Miscellaneous extends Service System.exit(0); } }; - + public static AlertDialog messageBox(String title, String message, Context context) { AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); alertDialog.setTitle(title); - alertDialog.setMessage(message); + alertDialog.setMessage(message); alertDialog.setPositiveButton(context.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() { @@ -1071,12 +1071,12 @@ public class Miscellaneous extends Service } return haveConnectedWifi || haveConnectedMobile; } - + /** - * Checks if the device is rooted. - * - * @return true if the device is rooted, false otherwise. - */ + * Checks if the device is rooted. + * + * @return true if the device is rooted, false otherwise. + */ public static boolean isPhoneRooted() { try @@ -1103,14 +1103,14 @@ public class Miscellaneous extends Service } catch (Exception e1) { - // ignore + // ignore } // try executing commands return canExecuteCommand("/system/xbin/which su") - || + || canExecuteCommand("/system/bin/which su") - || + || canExecuteCommand("which su"); } } @@ -1130,7 +1130,7 @@ public class Miscellaneous extends Service } return executedSuccesfully; - } + } public static char getDecimalSeparator() { @@ -1173,16 +1173,16 @@ public class Miscellaneous extends Service else return true; } - + public static boolean isNumeric(String str) { return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal. } - - /** - * Disables the SSL certificate checking for new instances of {@link HttpsURLConnection} This has been created to - * aid testing on a local box, not for use on production. - */ + + /** + * Disables the SSL certificate checking for new instances of {@link HttpsURLConnection} This has been created to + * aid testing on a local box, not for use on production. + */ private static void disableSSLCertificateChecking() { try @@ -1226,48 +1226,48 @@ public class Miscellaneous extends Service Miscellaneous.logEvent("e", "SSL", Log.getStackTraceString(e), 4); } } - - public static TrustManager[] getInsecureTrustManager() - { - TrustManager[] trustAllCerts = + + public static TrustManager[] getInsecureTrustManager() + { + TrustManager[] trustAllCerts = new TrustManager[] - { - new X509TrustManager() - { - public X509Certificate[] getAcceptedIssuers() - { - return null; - } - - @Override - public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException - { - // Not implemented - } - - @Override - public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException - { - // Not implemented - } - } - }; - + { + new X509TrustManager() + { + public X509Certificate[] getAcceptedIssuers() + { + return null; + } + + @Override + public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException + { + // Not implemented + } + + @Override + public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException + { + // Not implemented + } + } + }; + return trustAllCerts; - } - - public static HostnameVerifier getInsecureHostnameVerifier() - { - HostnameVerifier allHostsValid = new HostnameVerifier() - { - public boolean verify(String hostname, SSLSession session) - { - return true; - } - }; - - return allHostsValid; - } + } + + public static HostnameVerifier getInsecureHostnameVerifier() + { + HostnameVerifier allHostsValid = new HostnameVerifier() + { + public boolean verify(String hostname, SSLSession session) + { + return true; + } + }; + + return allHostsValid; + } @SuppressLint("NewApi") @SuppressWarnings("deprecation") @@ -2083,7 +2083,7 @@ public class Miscellaneous extends Service //create dir if required while unzipping if (ze.isDirectory()) { - // dirChecker(ze.getName()); + // dirChecker(ze.getName()); } else { @@ -2175,49 +2175,49 @@ public class Miscellaneous extends Service return formattedDate; } - public static int arraySearchIndexOf(String[] haystack, String needle, boolean caseSensitive, boolean matchFullLine) - { - if(matchFullLine) - { - if(caseSensitive) - { - for (int i = 0; i < haystack.length; i++) - { - if (haystack[i].equals(needle)) - return i; - } - } - else - { - for (int i = 0; i < haystack.length; i++) - { - if (haystack[i].toLowerCase().equals(needle.toLowerCase())) - return i; - } - } - } - else - { - if(caseSensitive) - { - for (int i = 0; i < haystack.length; i++) - { - if (haystack[i].contains(needle)) - return i; - } - } - else - { - for (int i = 0; i < haystack.length; i++) - { - if (haystack[i].toLowerCase().contains(needle.toLowerCase())) - return i; - } - } - } + public static int arraySearchIndexOf(String[] haystack, String needle, boolean caseSensitive, boolean matchFullLine) + { + if(matchFullLine) + { + if(caseSensitive) + { + for (int i = 0; i < haystack.length; i++) + { + if (haystack[i].equals(needle)) + return i; + } + } + else + { + for (int i = 0; i < haystack.length; i++) + { + if (haystack[i].toLowerCase().equals(needle.toLowerCase())) + return i; + } + } + } + else + { + if(caseSensitive) + { + for (int i = 0; i < haystack.length; i++) + { + if (haystack[i].contains(needle)) + return i; + } + } + else + { + for (int i = 0; i < haystack.length; i++) + { + if (haystack[i].toLowerCase().contains(needle.toLowerCase())) + return i; + } + } + } - return -1; - } + return -1; + } public static boolean arraySearch(String[] haystack, String needle, boolean caseSensitive, boolean matchFullLine) {