From 15bf15ff8c239b367bbfab22dd0a770aba735387 Mon Sep 17 00:00:00 2001
From: Francesco Andreuzzi <andreuzzi.francesco@gmail.com>
Date: Mon, 6 Jun 2016 20:40:30 +0200
Subject: [PATCH] Performance/Code improvement

---
 .../commands/CommandTuils.java                |  65 ++++-----
 .../consolelauncher/managers/SkinManager.java | 127 ++++++++++++++----
 .../andre/consolelauncher/tuils/Tuils.java    |  42 +++++-
 3 files changed, 166 insertions(+), 68 deletions(-)

diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
index 7156419..d526fff 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
@@ -3,7 +3,6 @@ package ohi.andre.consolelauncher.commands;
 import android.annotation.SuppressLint;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -14,6 +13,8 @@ import ohi.andre.consolelauncher.managers.FileManager;
 import ohi.andre.consolelauncher.managers.FileManager.DirInfo;
 import ohi.andre.consolelauncher.managers.MusicManager;
 import ohi.andre.consolelauncher.tuils.ShellUtils;
+import ohi.andre.consolelauncher.tuils.SpecificExtensionFileFilter;
+import ohi.andre.consolelauncher.tuils.SpecificNameFileFilter;
 import ohi.andre.consolelauncher.tuils.Tuils;
 
 @SuppressLint("DefaultLocale")
@@ -22,6 +23,9 @@ public class CommandTuils {
     private static final int MIN_CONTACT_RATE = 4;
     private static final int MIN_SONG_RATE = 5;
 
+    private static SpecificExtensionFileFilter extensionFileFilter = new SpecificExtensionFileFilter();
+    private static SpecificNameFileFilter nameFileFilter = new SpecificNameFileFilter();
+
     //	parse a command
     public static Command parse(String input, ExecInfo info, boolean suggestion) throws Exception {
         Command command = new Command();
@@ -57,7 +61,7 @@ public class CommandTuils {
                 if (input.length() <= 0)
                     break;
 
-                ArgInfo arg = CommandTuils.getArg(info, input, type);
+                ArgInfo arg = CommandTuils.getArg(info, input, type, suggestion);
 
                 if (!arg.found) {
                     command.nArgs = Command.ARG_NOTFOUND;
@@ -89,7 +93,7 @@ public class CommandTuils {
     }
 
     //	find args
-    public static ArgInfo getArg(ExecInfo info, String input, int type) {
+    public static ArgInfo getArg(ExecInfo info, String input, int type, boolean suggestion) {
         if (type == CommandAbstraction.FILE)
             return file(input, info.currentDirectory);
         else if (type == CommandAbstraction.CONTACTNUMBER)
@@ -105,7 +109,10 @@ public class CommandTuils {
         else if (type == CommandAbstraction.SONG)
             return song(input, info.player);
         else if (type == CommandAbstraction.FILE_LIST)
-            return fileList(input, info.currentDirectory);
+            if(suggestion)
+                return file(input, info.currentDirectory);
+            else
+                return fileList(input, info.currentDirectory);
         else if (type == CommandAbstraction.COMMAND)
             return command(input, info.commandGroup);
         else if (type == CommandAbstraction.PARAM)
@@ -226,47 +233,33 @@ public class CommandTuils {
     private static List<File> attemptWildcard(DirInfo dir) {
         List<File> files;
 
-        String extension = FileManager.wildcard(dir.notFound);
-        if (extension == null)
+        FileManager.WildcardInfo info = FileManager.wildcard(dir.notFound);
+        if(info == null) {
             return null;
+        }
 
         File cd = dir.file;
-        if (!cd.isDirectory())
+        if (!cd.isDirectory()) {
             return null;
+        }
 
-        int spaceIndex = extension.indexOf(Tuils.SPACE);
-        if (spaceIndex != -1)
-            extension = extension.substring(0, spaceIndex);
-
-        final String ext = extension;
-
-        if (extension.equals(FileManager.ALL))
+        if (info.allExtensions && info.allNames) {
             files = Arrays.asList(cd.listFiles());
-        else {
-            FileFilter filter = new FileFilter() {
-
-                @Override
-                public boolean accept(File f) {
-                    if (f.isDirectory())
-                        return false;
-
-                    String name = f.getName();
-                    if (!name.contains("."))
-                        return false;
-
-                    String fileExtension = name.substring(name.lastIndexOf("."));
-
-                    return !(!fileExtension.equals(ext.toLowerCase()) && !fileExtension.equals(ext.toUpperCase()));
-
-                }
-            };
-
-            files = Arrays.asList(cd.listFiles(filter));
+        } else if(info.allNames) {
+            extensionFileFilter.setExtension(info.extension);
+            files = Arrays.asList(cd.listFiles(extensionFileFilter));
+        } else if(info.allExtensions) {
+            nameFileFilter.setName(info.name);
+            files = Arrays.asList(cd.listFiles(nameFileFilter));
+        } else {
+            return null;
         }
 
-        if (files.size() > 0)
+        if (files.size() > 0) {
             return files;
-        return null;
+        } else {
+            return null;
+        }
     }
 
     private static ArgInfo param(String input) {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/SkinManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/SkinManager.java
index 12bfa79..56fb5a4 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/SkinManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/SkinManager.java
@@ -2,6 +2,9 @@ package ohi.andre.consolelauncher.managers;
 
 import android.graphics.Color;
 import android.graphics.Typeface;
+import android.graphics.drawable.ColorDrawable;
+
+import java.util.HashMap;
 
 public class SkinManager {
 
@@ -16,24 +19,39 @@ public class SkinManager {
     public static final int outputDefault = 0xffffffff;
     public static final int ramDefault = 0xfff44336;
     public static final int bgDefault = 0xff000000;
-    public static final int suggestionColorDefault = 0xff000000;
-    public static final int suggestionBgDefault = 0xffffffff;
+
+    public static final int suggestionTextColorDefault = 0xff000000;
+    public static final int aliasSuggestionBgDefault = 0xffFF5722;
+    public static final int appSuggestionBgDefault = 0xff00897B;
+    public static final int commandSuggestionsBgDefault = 0xff76FF03;
+    public static final int songSuggestionBgDefault = 0xffEEFF41;
+    public static final int contactSuggestionBgDefault = 0xff64FFDA;
+    public static final int fileSuggestionBgDeafult = 0xff03A9F4;
+    public static final int defaultSuggestionBgDefault = 0xffFFFFFF;
+
     public static final int defaultSize = 15;
     private static final int deviceScale = 3;
     private static final int textScale = 2;
     private static final int ramScale = 3;
     private static final int suggestionScale = 0;
+
     private Typeface globalTypeface;
     private int globalFontSize;
+
     private int deviceColor;
     private int inputColor;
     private int outputColor;
     private int ramColor;
     private int bgColor;
+
     private boolean useSystemWp;
     private boolean showSuggestions;
-    private int suggestionColor;
-    private int suggestionBg;
+
+    private HashMap<Integer, ColorDrawable> suggestionBgs = new HashMap<>();
+
+    private int suggestionTextColor;
+
+    private boolean multicolorSuggestions;
     private boolean transparentSuggestions;
 
     public SkinManager(PreferencesManager prefs, Typeface lucidaConsole) {
@@ -83,22 +101,91 @@ public class SkinManager {
 
         showSuggestions = Boolean.parseBoolean(prefs.getValue(PreferencesManager.SHOWSUGGESTIONS));
         if (showSuggestions) {
+
             try {
-                suggestionColor = Color.parseColor(prefs.getValue(PreferencesManager.SUGGESTION_COLOR));
+                suggestionTextColor = Color.parseColor(prefs.getValue(PreferencesManager.SUGGESTIONTEXT_COLOR));
             } catch (Exception e) {
-                suggestionColor = suggestionColorDefault;
+                suggestionTextColor = suggestionTextColorDefault;
             }
 
             try {
-                suggestionBg = Color.parseColor(prefs.getValue(PreferencesManager.SUGGESTION_BG));
+                transparentSuggestions = Boolean.parseBoolean(prefs.getValue(PreferencesManager.TRANSPARENT_SUGGESTIONS));
             } catch (Exception e) {
-                suggestionBg = suggestionBgDefault;
+                transparentSuggestions = false;
             }
 
             try {
-                transparentSuggestions = Boolean.parseBoolean(prefs.getValue(PreferencesManager.TRANSPARENT_SUGGESTIONS));
+                multicolorSuggestions = Boolean.parseBoolean(prefs.getValue(PreferencesManager.USE_MULTICOLOR_SUGGESTIONS));
             } catch (Exception e) {
-                transparentSuggestions = false;
+                transparentSuggestions = true;
+            }
+            if(multicolorSuggestions) {
+                transparentSuggestions = !multicolorSuggestions;
+            }
+
+            if(!transparentSuggestions && !multicolorSuggestions) {
+                int defaultSuggestionBg;
+                try {
+                    defaultSuggestionBg = Color.parseColor(prefs.getValue(PreferencesManager.DEFAULT_SUGGESTION_BG));
+                } catch (Exception e) {
+                    defaultSuggestionBg = defaultSuggestionBgDefault;
+                }
+                suggestionBgs.put(null, new ColorDrawable(defaultSuggestionBg));
+            }
+
+            if(transparentSuggestions) {
+                suggestionBgs.put(null, null);
+            }
+
+            if(multicolorSuggestions) {
+
+                int appSuggestionBg;
+                try {
+                    appSuggestionBg = Color.parseColor(prefs.getValue(PreferencesManager.APP_SUGGESTION_BG));
+                } catch (Exception e) {
+                    appSuggestionBg = appSuggestionBgDefault;
+                }
+                suggestionBgs.put(SuggestionsManager.Suggestion.TYPE_APP, new ColorDrawable(appSuggestionBg));
+
+                int contactSuggestionBg;
+                try {
+                    contactSuggestionBg = Color.parseColor(prefs.getValue(PreferencesManager.CONTACT_SUGGESTION_BG));
+                } catch (Exception e) {
+                    contactSuggestionBg = contactSuggestionBgDefault;
+                }
+                suggestionBgs.put(SuggestionsManager.Suggestion.TYPE_CONTACT, new ColorDrawable(contactSuggestionBg));
+
+                int commandSuggestionsBg;
+                try {
+                    commandSuggestionsBg = Color.parseColor(prefs.getValue(PreferencesManager.COMMAND_SUGGESTION_BG));
+                } catch (Exception e) {
+                    commandSuggestionsBg = commandSuggestionsBgDefault;
+                }
+                suggestionBgs.put(SuggestionsManager.Suggestion.TYPE_COMMAND, new ColorDrawable(commandSuggestionsBg));
+
+                int songSuggestionBg;
+                try {
+                    songSuggestionBg = Color.parseColor(prefs.getValue(PreferencesManager.SONG_SUGGESTION_BG));
+                } catch (Exception e) {
+                    songSuggestionBg = songSuggestionBgDefault;
+                }
+                suggestionBgs.put(SuggestionsManager.Suggestion.TYPE_SONG, new ColorDrawable(songSuggestionBg));
+
+                int fileSuggestionBg;
+                try {
+                    fileSuggestionBg = Color.parseColor(prefs.getValue(PreferencesManager.FILE_SUGGESTION_BG));
+                } catch (Exception e) {
+                    fileSuggestionBg = fileSuggestionBgDeafult;
+                }
+                suggestionBgs.put(SuggestionsManager.Suggestion.TYPE_FILE, new ColorDrawable(fileSuggestionBg));
+
+                int aliasSuggestionBg;
+                try {
+                    aliasSuggestionBg = Color.parseColor(prefs.getValue(PreferencesManager.ALIAS_SIGGESTION_BG));
+                } catch (Exception e) {
+                    aliasSuggestionBg = aliasSuggestionBgDefault;
+                }
+                suggestionBgs.put(SuggestionsManager.Suggestion.TYPE_ALIAS, new ColorDrawable(aliasSuggestionBg));
             }
         }
     }
@@ -139,16 +226,12 @@ public class SkinManager {
         return showSuggestions;
     }
 
-    public int getSuggestionBg() {
-        return suggestionBg;
+    public ColorDrawable getSuggestionBg(Integer type) {
+        return suggestionBgs.get(type);
     }
 
-    public int getSuggestionColor() {
-        return suggestionColor;
-    }
-
-    public boolean getTransparentSuggestions() {
-        return transparentSuggestions;
+    public int getSuggestionTextColor() {
+        return suggestionTextColor;
     }
 
     public int getDeviceSize() {
@@ -167,12 +250,4 @@ public class SkinManager {
         return globalFontSize - suggestionScale;
     }
 
-
-//	public void setupSubmit(Button submit) {
-//		submit.setBackgroundColor(android.R.color.transparent);
-//
-//		submit.setTextColor(input);
-//		submit.setTextSize(fontSize + SkinManager.submitScale);
-//	}
-//
 }
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 7c92d31..07edf7d 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java
@@ -18,6 +18,7 @@ import android.os.Environment;
 import android.provider.Settings;
 import android.support.v7.app.AppCompatActivity;
 import android.text.TextUtils;
+import android.util.Log;
 import android.util.Patterns;
 import android.widget.Toast;
 
@@ -37,6 +38,7 @@ import java.util.regex.Pattern;
 
 import dalvik.system.DexFile;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
+import ohi.andre.consolelauncher.managers.MusicManager;
 import ohi.andre.consolelauncher.tuils.tutorial.TutorialIndexActivity;
 
 public class Tuils {
@@ -71,24 +73,52 @@ public class Tuils {
 
         List<ResolveInfo> infos = mgr.queryIntentActivities(i, 0);
 
-        AppInfo app;
         for (ResolveInfo info : infos) {
-            app = new AppInfo(info.activityInfo.packageName, info.loadLabel(mgr).toString());
-            set.add(app);
+            set.add(new AppInfo(info.activityInfo.packageName, info.loadLabel(mgr).toString()));
         }
 
         return set;
     }
 
+    public static boolean arrayContains(int[] array, int value) {
+        for(int i : array) {
+            if(i == value) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static boolean containsExtension(String[] array, String value) {
+        value = value.toLowerCase().trim();
+        for(String s : array) {
+            if(value.endsWith(s)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public static List<File> getSongsInFolder(File folder) {
         List<File> songs = new ArrayList<>();
 
         File[] files = folder.listFiles();
+        if(files == null || files.length == 0) {
+            return null;
+        }
+
         for (File file : files) {
-            if (file.isDirectory())
+            Log.e("andre", file.getAbsolutePath());
+            if (file.isDirectory()) {
+                Log.e("andre", "dir");
                 songs.addAll(getSongsInFolder(file));
-            else if (file.getName().toLowerCase().endsWith(".mp3"))
+            }
+            else if (containsExtension(MusicManager.MUSIC_EXTENSIONS, file.getName())) {
+                Log.e("andre", "song");
                 songs.add(file);
+            } else {
+                Log.e("andre", "nothing");
+            }
         }
 
         return songs;
@@ -135,7 +165,7 @@ public class Tuils {
         return availableMegs + " MB";
     }
 
-    public static List<String> getClassesOfPackage(String packageName, Context c)
+    public static List<String> getClassesInPackage(String packageName, Context c)
             throws IOException {
         List<String> classes = new ArrayList<>();
         String packageCodePath = c.getPackageCodePath();
-- 
GitLab