From 2b543983b9e783664fea9a94f940d3e61ba54c37 Mon Sep 17 00:00:00 2001 From: Francesco <franzbianconero@gmail.com> Date: Sun, 24 Dec 2017 17:56:22 +0100 Subject: [PATCH] Merge branch 'master' of https://github.com/Andre1299/TUI-ConsoleLauncher # Conflicts: # app/build.gradle # app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java --- app/build.gradle | 17 +- .../managers/AliasManager.java | 5 +- .../consolelauncher/managers/AppsManager.java | 216 +++++++++--------- .../managers/RegexManager.java | 10 +- .../notifications/NotificationManager.java | 10 +- .../notifications/NotificationService.java | 2 +- .../managers/xml/XMLPrefsManager.java | 11 +- .../andre/consolelauncher/tuils/Tuils.java | 12 +- app/src/main/res/values/strings.xml | 6 + 9 files changed, 162 insertions(+), 127 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 991a1d7..809e6af 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.google.gms.google-services' android { compileSdkVersion 25 - buildToolsVersion '25.0.2' + buildToolsVersion '26.0.2' defaultConfig { applicationId "ohi.andre.consolelauncher" @@ -11,7 +11,7 @@ android { minSdkVersion 9 targetSdkVersion 23 - versionCode 150 + versionCode 151 versionName "6.4" } @@ -38,16 +38,9 @@ android { compile 'com.android.support:appcompat-v7:23.4.0' } - applicationVariants.all { variant -> - def vn = variant.versionName - - def x = vn.substring(0, vn.length() - 1) - if (x.endsWith(".")) x = vn - - variant.outputs.each { output -> - output.outputFile = new File( - output.outputFile.parent, - output.outputFile.name.replace("app-release.apk", "${x}/${variant.applicationId}_${variant.versionName}_${new Date().format("dd-MM_hh.mm.ss")}.apk")) + android.applicationVariants.all { variant -> + variant.outputs.all { + outputFileName = "./${variant.versionName}/${variant.versionCode}.apk" } } diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java index 5314d8f..cc9cb28 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java @@ -146,7 +146,10 @@ public class AliasManager implements Reloadable { if(aliases != null) aliases.clear(); else aliases = new ArrayList<>(); - File file = new File(Tuils.getFolder(), PATH); + File root = Tuils.getFolder(); + if(root == null) return; + + File file = new File(root, PATH); try { if(!file.exists()) file.createNewFile(); diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java index 63c0d41..8a8c5db 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java @@ -132,7 +132,9 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement { pn = null; } - this.file = new File(Tuils.getFolder(), PATH); + File root = Tuils.getFolder(); + if(root == null) this.file = null; + else this.file = new File(root, PATH); this.preferences = context.getSharedPreferences(PREFS, 0); this.editor = preferences.edit(); @@ -170,148 +172,152 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement { try { defaultApps = new XMLPrefsManager.XMLPrefsList(); - if(!file.exists()) { - resetFile(file, NAME); - } + if(file != null) { + if(!file.exists()) { + resetFile(file, NAME); + } - Object[] o; - try { - o = XMLPrefsManager.buildDocument(file, NAME); - if(o == null) { - Tuils.sendXMLParseError(context, PATH); + Object[] o; + try { + o = XMLPrefsManager.buildDocument(file, NAME); + if(o == null) { + Tuils.sendXMLParseError(context, PATH); + return; + } + } catch (Exception e) { + Tuils.sendXMLParseError(context, PATH, e); return; } - } catch (Exception e) { - Tuils.sendXMLParseError(context, PATH, e); - return; - } - Document d = (Document) o[0]; - Element root = (Element) o[1]; + Document d = (Document) o[0]; + Element root = (Element) o[1]; - List<Apps> enums = new ArrayList<>(Arrays.asList(Apps.values())); - NodeList nodes = root.getElementsByTagName("*"); + List<Apps> enums = new ArrayList<>(Arrays.asList(Apps.values())); + NodeList nodes = root.getElementsByTagName("*"); - for (int count = 0; count < nodes.getLength(); count++) { - final Node node = nodes.item(count); + for (int count = 0; count < nodes.getLength(); count++) { + final Node node = nodes.item(count); - String nn = node.getNodeName(); - int nodeIndex = Tuils.find(nn, (List) enums); - if (nodeIndex != -1) { - defaultApps.add(nn, node.getAttributes().getNamedItem(VALUE_ATTRIBUTE).getNodeValue()); + String nn = node.getNodeName(); + int nodeIndex = Tuils.find(nn, (List) enums); + if (nodeIndex != -1) { + defaultApps.add(nn, node.getAttributes().getNamedItem(VALUE_ATTRIBUTE).getNodeValue()); - for (int en = 0; en < enums.size(); en++) { - if (enums.get(en).label().equals(nn)) { - enums.remove(en); - break; + for (int en = 0; en < enums.size(); en++) { + if (enums.get(en).label().equals(nn)) { + enums.remove(en); + break; + } } } - } // todo support delete - else { - if (node.getNodeType() == Node.ELEMENT_NODE) { - final Element e = (Element) node; - - if(e.hasAttribute(APPS_ATTRIBUTE)) { - final String name = e.getNodeName(); - if(name.contains(Tuils.SPACE)) { - Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_groupspace) + ": " + name); - continue; - } + else { + if (node.getNodeType() == Node.ELEMENT_NODE) { + final Element e = (Element) node; + + if(e.hasAttribute(APPS_ATTRIBUTE)) { + final String name = e.getNodeName(); + if(name.contains(Tuils.SPACE)) { + Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_groupspace) + ": " + name); + continue; + } - new StoppableThread() { - @Override - public void run() { - super.run(); + new StoppableThread() { + @Override + public void run() { + super.run(); - Group g = new Group(name); + Group g = new Group(name); - String apps = e.getAttribute(APPS_ATTRIBUTE); - String[] split = apps.split(APPS_SEPARATOR); + String apps = e.getAttribute(APPS_ATTRIBUTE); + String[] split = apps.split(APPS_SEPARATOR); - List<LaunchInfo> as = new ArrayList<>(allApps); + List<LaunchInfo> as = new ArrayList<>(allApps); - External: - for(String s : split) { - for(int c = 0; c < as.size(); c++) { - if(as.get(c).equals(s)) { - g.add(as.remove(c)); - continue External; + External: + for(String s : split) { + for(int c = 0; c < as.size(); c++) { + if(as.get(c).equals(s)) { + g.add(as.remove(c)); + continue External; + } } } - } - if(e.hasAttribute(BGCOLOR_ATTRIBUTE)) { - String c = e.getAttribute(BGCOLOR_ATTRIBUTE); - if(c.length() > 0) { - try { - g.setBgColor(Color.parseColor(c)); - } catch (Exception e) { - Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c); + if(e.hasAttribute(BGCOLOR_ATTRIBUTE)) { + String c = e.getAttribute(BGCOLOR_ATTRIBUTE); + if(c.length() > 0) { + try { + g.setBgColor(Color.parseColor(c)); + } catch (Exception e) { + Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c); + } } } - } - if(e.hasAttribute(FORECOLOR_ATTRIBUTE)) { - String c = e.getAttribute(FORECOLOR_ATTRIBUTE); - if(c.length() > 0) { - try { - g.setForeColor(Color.parseColor(c)); - } catch (Exception e) { - Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c); + if(e.hasAttribute(FORECOLOR_ATTRIBUTE)) { + String c = e.getAttribute(FORECOLOR_ATTRIBUTE); + if(c.length() > 0) { + try { + g.setForeColor(Color.parseColor(c)); + } catch (Exception e) { + Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c); + } } } - } - groups.add(g); - } - }.start(); - } else { - boolean shown = !e.hasAttribute(SHOW_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(SHOW_ATTRIBUTE)); - if (!shown) { - ComponentName name = null; - - String[] split = nn.split("-"); - if (split.length >= 2) { - name = new ComponentName(split[0], split[1]); - } else if (split.length == 1) { - if (split[0].contains("Activity")) { - for (LaunchInfo i : allApps) { - if (i.componentName.getClassName().equals(split[0])) - name = i.componentName; - } - } else { - for (LaunchInfo i : allApps) { - if (i.componentName.getPackageName().equals(split[0])) - name = i.componentName; + groups.add(g); + } + }.start(); + } else { + boolean shown = !e.hasAttribute(SHOW_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(SHOW_ATTRIBUTE)); + if (!shown) { + ComponentName name = null; + + String[] split = nn.split("-"); + if (split.length >= 2) { + name = new ComponentName(split[0], split[1]); + } else if (split.length == 1) { + if (split[0].contains("Activity")) { + for (LaunchInfo i : allApps) { + if (i.componentName.getClassName().equals(split[0])) + name = i.componentName; + } + } else { + for (LaunchInfo i : allApps) { + if (i.componentName.getPackageName().equals(split[0])) + name = i.componentName; + } } } - } - if (name == null) continue; + if (name == null) continue; - LaunchInfo removed = AppUtils.findLaunchInfoWithComponent(allApps, name); - if (removed != null) { - allApps.remove(removed); - hiddenApps.add(removed); + LaunchInfo removed = AppUtils.findLaunchInfoWithComponent(allApps, name); + if (removed != null) { + allApps.remove(removed); + hiddenApps.add(removed); + } } } } } } - } - if (enums.size() > 0) { - for (XMLPrefsManager.XMLPrefsSave s : enums) { - String value = s.defaultValue(); + if (enums.size() > 0) { + for (XMLPrefsManager.XMLPrefsSave s : enums) { + String value = s.defaultValue(); - Element em = d.createElement(s.label()); - em.setAttribute(VALUE_ATTRIBUTE, value); - root.appendChild(em); + Element em = d.createElement(s.label()); + em.setAttribute(VALUE_ATTRIBUTE, value); + root.appendChild(em); - defaultApps.add(s.label(), value); + defaultApps.add(s.label(), value); + } + writeTo(d, file); } - writeTo(d, file); + } else { + Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_app); } for (Map.Entry<String, ?> entry : this.preferences.getAll().entrySet()) { diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java index dbb5277..fe018ea 100644 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java @@ -1,6 +1,7 @@ package ohi.andre.consolelauncher.managers; import android.content.Context; +import android.graphics.Color; import android.text.SpannableString; import org.w3c.dom.Document; @@ -14,6 +15,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.managers.xml.XMLPrefsManager; import ohi.andre.consolelauncher.managers.xml.options.Theme; import ohi.andre.consolelauncher.tuils.StoppableThread; @@ -47,7 +49,13 @@ public class RegexManager { super.run(); try { - File file = new File(Tuils.getFolder(), PATH); + File root = Tuils.getFolder(); + if(root == null) { + Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_rss); + return; + } + + File file = new File(root, PATH); if(!file.exists()) { file.createNewFile(); XMLPrefsManager.resetFile(file, ROOT); diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java index 0ad120e..6b00063 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java @@ -2,6 +2,7 @@ package ohi.andre.consolelauncher.managers.notifications; import android.annotation.TargetApi; import android.content.Context; +import android.graphics.Color; import android.os.Build; import org.w3c.dom.Document; @@ -16,6 +17,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.managers.RegexManager; import ohi.andre.consolelauncher.managers.xml.XMLPrefsManager; import ohi.andre.consolelauncher.managers.xml.options.Notifications; @@ -78,7 +80,13 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { values = new XMLPrefsManager.XMLPrefsList(); try { - File file = new File(Tuils.getFolder(), PATH); + File r = Tuils.getFolder(); + if(r == null) { + Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_notifications); + return; + } + + File file = new File(r, PATH); if(!file.exists()) { resetFile(file, NAME); } diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java index b4d60a3..0cf9fa8 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java @@ -234,8 +234,8 @@ public class NotificationService extends NotificationListenerService { public void onCreate() { super.onCreate(); - NotificationManager.create(this); try { + NotificationManager.create(this); XMLPrefsManager.create(this); } catch (Exception e) { return; diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java index 7dce317..b95ed48 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java @@ -25,6 +25,7 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.managers.xml.options.Behavior; import ohi.andre.consolelauncher.managers.xml.options.Cmd; import ohi.andre.consolelauncher.managers.xml.options.Suggestions; @@ -201,6 +202,10 @@ public class XMLPrefsManager { called = true; File folder = Tuils.getFolder(); + if(folder == null) { + Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_xmlprefs); + return; + } for(XMLPrefsRoot element : XMLPrefsRoot.values()) { File file = new File(folder, element.path); @@ -544,7 +549,6 @@ public class XMLPrefsManager { Element root = (Element) o[1]; if(d == null || root == null) { - Tuils.log("document is null or root is null"); return Tuils.EMPTYSTRING; } @@ -760,14 +764,13 @@ public class XMLPrefsManager { public static <T> T get(Class<T> c, XMLPrefsManager.XMLPrefsSave prefsSave) { try { - Tuils.log("list", prefsSave.parent().getValues().values().toString()); return (T) transform(prefsSave.parent().getValues().get(prefsSave).value, c); } catch (Exception e) { - Tuils.log(e); +// this will happen if the option is not found try { return (T) transform(prefsSave.defaultValue(), c); } catch (Exception e1) { - Tuils.log(e1); +// attempts to get a default value for the given type, as we say in italian, "the last beach" return Tuils.getDefaultValue(c); } } diff --git a/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java b/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java index dcbdf10..6b1d83b 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java +++ b/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java @@ -105,6 +105,9 @@ public class Tuils { if(systemFont) globalTypeface = Typeface.DEFAULT; else { File tui = Tuils.getFolder(); + if(tui == null) { + return systemFont ? Typeface.DEFAULT : Typeface.createFromAsset(context.getAssets(), "lucida_console.ttf"); + } File font = null; for(File f : tui.listFiles()) { @@ -1081,12 +1084,13 @@ public class Tuils { return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); } - private static final int FILEUPDATE_DELAY = 75; + private static final int FILEUPDATE_DELAY = 100; private static File folder = null; public static File getFolder() { if(folder != null) return folder; - while (true) { + int elapsedTime = 0; + while (elapsedTime < 3500) { File tuiFolder = Tuils.getTuiFolder(); if(tuiFolder != null && ((tuiFolder.exists() && tuiFolder.isDirectory()) || tuiFolder.mkdir())) { folder = tuiFolder; @@ -1096,7 +1100,11 @@ public class Tuils { try { Thread.sleep(FILEUPDATE_DELAY); } catch (InterruptedException e) {} + + elapsedTime += FILEUPDATE_DELAY; } + + return null; } public static int alphabeticCompare(String s1, String s2) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4467be3..9f9059a 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,12 @@ <string name="permissions_toast">You have to grant Storage permission</string> <string name="output_usedefapp">You can use "apps -default_app" instead</string> + <!-- tui folder not found --> + <string name="tuinotfound_app">Your apps preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string> + <string name="tuinotfound_rss">Your rss preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string> + <string name="tuinotfound_notifications">Your notifications preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string> + <string name="tuinotfound_xmlprefs">Your xml preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string> + <!-- hints --> <string name="hint_donate">\nDo you like my work?\nIf yes, rate t-ui on Play Store (cmd: $ rate) or offer me a coffee (cmd: $ donate). Thank you!</string> <string name="hint_twitter">Did you know? t-ui is on Twitter. You can have a look with the cmd \"$ tui -twitter\"</string> -- GitLab