From 4472b414139ffa70951564a17d0d4584454fc437 Mon Sep 17 00:00:00 2001
From: Francesco Andreuzzi <andreuzzi.francesco@gmail.com>
Date: Thu, 16 Jun 2016 15:16:56 +0200
Subject: [PATCH] bugfix

---
 .../TerminalMAnager.java}                     | 32 +++++++++++++------
 1 file changed, 22 insertions(+), 10 deletions(-)
 rename app/src/main/java/ohi/andre/consolelauncher/{tuils/TerminalAdapter.java => managers/TerminalMAnager.java} (91%)

diff --git a/app/src/main/java/ohi/andre/consolelauncher/tuils/TerminalAdapter.java b/app/src/main/java/ohi/andre/consolelauncher/managers/TerminalMAnager.java
similarity index 91%
rename from app/src/main/java/ohi/andre/consolelauncher/tuils/TerminalAdapter.java
rename to app/src/main/java/ohi/andre/consolelauncher/managers/TerminalMAnager.java
index 492335b..7dcc163 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/tuils/TerminalAdapter.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/TerminalMAnager.java
@@ -1,7 +1,8 @@
-package ohi.andre.consolelauncher.tuils;
+package ohi.andre.consolelauncher.managers;
 
 import android.app.Activity;
 import android.os.IBinder;
+import android.os.Looper;
 import android.text.InputType;
 import android.text.Layout;
 import android.text.Spannable;
@@ -19,7 +20,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import ohi.andre.consolelauncher.managers.SkinManager;
+import ohi.andre.consolelauncher.tuils.SimpleMutableEntry;
+import ohi.andre.consolelauncher.tuils.Tuils;
 import ohi.andre.consolelauncher.tuils.interfaces.OnNewInputListener;
 
 /*Copyright Francesco Andreuzzi
@@ -36,14 +38,14 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.*/
 
-public class TerminalAdapter {
+public class TerminalManager {
 
     private final CharSequence PREFIX = ">>";
 
     private final int SCROLL_DELAY = 200;
 
-    private final int INPUT = 10;
-    private final int OUTPUT = 11;
+    public static final int INPUT = 10;
+    public static final int OUTPUT = 11;
 
     private int mCurrentOutputId = 0;
 
@@ -63,7 +65,7 @@ public class TerminalAdapter {
 
     private OnNewInputListener mInputListener;
 
-    public TerminalAdapter(TextView terminalView, EditText inputView, TextView prefixView, TextView submitView, SkinManager skinManager,
+    public TerminalManager(TextView terminalView, EditText inputView, TextView prefixView, TextView submitView, SkinManager skinManager,
                            String hint, final boolean physicalEnter) {
         if (terminalView == null || inputView == null || prefixView == null || skinManager == null)
             throw new UnsupportedOperationException();
@@ -140,23 +142,33 @@ public class TerminalAdapter {
     }
 
     public void setOutput(String output, int id) {
-        if (output == null || output.length() == 0)
+        if (output == null)
             return;
 
         writeToView(output, OUTPUT, id);
         scrollToEnd();
     }
 
-    private void writeToView(String text, int type) {
+    public void writeToView(String text, int type) {
         writeToView(text, type, mCurrentOutputId);
     }
 
-    private void writeToView(String text, int type, int id) {
+    private void writeToView(final String text, final int type, int id) {
         if(type == INPUT || id == mCurrentOutputId) {
             if(!mTerminalView.getText().toString().endsWith(Tuils.NEWLINE)) {
                 mTerminalView.append(Tuils.NEWLINE);
             }
-            mTerminalView.append(getSpannable(text, type));
+
+            if(Looper.myLooper() == Looper.getMainLooper()) {
+                mTerminalView.append(getSpannable(text, type));
+            } else {
+                ((Activity) mTerminalView.getContext()).runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        mTerminalView.append(getSpannable(text, type));
+                    }
+                });
+            }
         } else if(type == OUTPUT) {
             List<String> oldText = getLines(mTerminalView);
             List<Map.Entry<String, String>> wrappedOldText = splitInputOutput(oldText);
-- 
GitLab