Skip to content
Snippets Groups Projects
Commit d11fd557 authored by Francesco Andreuzzi's avatar Francesco Andreuzzi
Browse files

fixed some bugs

parent 6a4971b2
No related branches found
No related tags found
No related merge requests found
...@@ -5,7 +5,6 @@ import android.app.ActivityManager; ...@@ -5,7 +5,6 @@ import android.app.ActivityManager;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
...@@ -22,17 +21,20 @@ import android.view.ViewGroup; ...@@ -22,17 +21,20 @@ import android.view.ViewGroup;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.EditText; import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import java.io.File; import java.io.File;
import java.lang.reflect.Field;
import ohi.andre.consolelauncher.commands.ExecInfo; import ohi.andre.consolelauncher.commands.ExecInfo;
import ohi.andre.consolelauncher.managers.PreferencesManager; import ohi.andre.consolelauncher.managers.PreferencesManager;
import ohi.andre.consolelauncher.managers.SkinManager; import ohi.andre.consolelauncher.managers.SkinManager;
import ohi.andre.consolelauncher.managers.SuggestionsManager; import ohi.andre.consolelauncher.managers.SuggestionsManager;
import ohi.andre.consolelauncher.tuils.TerminalAdapter; import ohi.andre.consolelauncher.managers.TerminalManager;
import ohi.andre.consolelauncher.tuils.SuggestionRunnable;
import ohi.andre.consolelauncher.tuils.Tuils; import ohi.andre.consolelauncher.tuils.Tuils;
import ohi.andre.consolelauncher.tuils.interfaces.CommandExecuter; import ohi.andre.consolelauncher.tuils.interfaces.CommandExecuter;
import ohi.andre.consolelauncher.tuils.interfaces.OnNewInputListener; import ohi.andre.consolelauncher.tuils.interfaces.OnNewInputListener;
...@@ -45,7 +47,6 @@ public class UIManager implements OnTouchListener { ...@@ -45,7 +47,6 @@ public class UIManager implements OnTouchListener {
public Handler handler; public Handler handler;
protected Context mContext; protected Context mContext;
protected LinearLayout suggestionsView;
private SkinManager skinManager; private SkinManager skinManager;
...@@ -56,7 +57,7 @@ public class UIManager implements OnTouchListener { ...@@ -56,7 +57,7 @@ public class UIManager implements OnTouchListener {
private InputMethodManager imm; private InputMethodManager imm;
private CommandExecuter trigger; private CommandExecuter trigger;
private TerminalAdapter mTerminalAdapter; private TerminalManager mTerminalAdapter;
private int lastMeasuredHeight; private int lastMeasuredHeight;
...@@ -74,9 +75,18 @@ public class UIManager implements OnTouchListener { ...@@ -74,9 +75,18 @@ public class UIManager implements OnTouchListener {
} }
}; };
private LinearLayout suggestionsView;
private SuggestionViewDecorer suggestionViewDecorer; private SuggestionViewDecorer suggestionViewDecorer;
private LinearLayout.LayoutParams suggestionViewParams; private LinearLayout.LayoutParams suggestionViewParams;
private Thread lastSuggestionThread; private Thread lastSuggestionThread;
private SuggestionRunnable suggestionRunnable;
private Handler activityHandler;
private Runnable removeAllSuggestions = new Runnable() {
@Override
public void run() {
suggestionsView.removeAllViews();
}
};
protected TextWatcher textWatcher = new TextWatcher() { protected TextWatcher textWatcher = new TextWatcher() {
...@@ -89,10 +99,6 @@ public class UIManager implements OnTouchListener { ...@@ -89,10 +99,6 @@ public class UIManager implements OnTouchListener {
if (suggestionsView == null) if (suggestionsView == null)
return; return;
if (lastSuggestionThread != null && lastSuggestionThread.isAlive()) {
lastSuggestionThread.interrupt();
}
String text = s.toString(); String text = s.toString();
int lastSpace = text.lastIndexOf(Tuils.SPACE); int lastSpace = text.lastIndexOf(Tuils.SPACE);
...@@ -115,7 +121,7 @@ public class UIManager implements OnTouchListener { ...@@ -115,7 +121,7 @@ public class UIManager implements OnTouchListener {
String inputText = mTerminalAdapter.getInput(); String inputText = mTerminalAdapter.getInput();
int lastSpace = inputText.lastIndexOf(" "); int lastSpace = inputText.lastIndexOf(Tuils.SPACE);
String lastWord = inputText.substring(lastSpace != -1 ? lastSpace + 1 : 0); String lastWord = inputText.substring(lastSpace != -1 ? lastSpace + 1 : 0);
String before = inputText.substring(0, lastSpace + 1); String before = inputText.substring(0, lastSpace + 1);
...@@ -135,7 +141,7 @@ public class UIManager implements OnTouchListener { ...@@ -135,7 +141,7 @@ public class UIManager implements OnTouchListener {
} }
mTerminalAdapter.setInput(builder.toString()); mTerminalAdapter.setInput(builder.toString());
if (executeOnSuggestionClick && Tuils.arrayContains(SuggestionsManager.Suggestion.TAP_TO_EXECUTE_TYPES, v.getId())) { if (executeOnSuggestionClick && v.getId() == SuggestionsManager.Suggestion.EXEC_ON_CLICK) {
mTerminalAdapter.simulateEnter(); mTerminalAdapter.simulateEnter();
} else { } else {
mTerminalAdapter.focusInputEnd(); mTerminalAdapter.focusInputEnd();
...@@ -143,8 +149,100 @@ public class UIManager implements OnTouchListener { ...@@ -143,8 +149,100 @@ public class UIManager implements OnTouchListener {
} }
}; };
private void requestSuggestion(final String before, final String lastWord) {
if (suggestionViewParams == null) {
suggestionViewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
suggestionViewParams.setMargins(SkinManager.SUGGESTION_MARGIN, 0, SkinManager.SUGGESTION_MARGIN, 0);
suggestionViewParams.gravity = Gravity.CENTER_VERTICAL;
}
if(suggestionRunnable == null) {
suggestionRunnable = new SuggestionRunnable(skinManager, suggestionsView, suggestionViewParams, (HorizontalScrollView) suggestionsView.getParent());
}
if(activityHandler == null) {
Field field;
try {
field = mContext.getClass().getSuperclass().getDeclaredField("mHandler");
field.setAccessible(true);
activityHandler = (Handler) field.get(mContext);
}
catch (Exception e) {}
}
if (lastSuggestionThread != null) {
lastSuggestionThread.interrupt();
suggestionRunnable.interrupt();
if(activityHandler != null) {
activityHandler.removeCallbacks(suggestionRunnable);
}
}
lastSuggestionThread = new Thread() {
@Override
public void run() {
super.run();
final SuggestionsManager.Suggestion[] suggestions = SuggestionsManager.getSuggestions(info, before, lastWord);
if(suggestions.length == 0) {
((Activity) mContext).runOnUiThread(removeAllSuggestions);
return;
}
if (Thread.interrupted()) {
suggestionRunnable.interrupt();
return;
}
final TextView[] existingViews = new TextView[suggestionsView.getChildCount()];
for (int count = 0; count < existingViews.length; count++) {
existingViews[count] = (TextView) suggestionsView.getChildAt(count);
}
if (Thread.interrupted()) {
suggestionRunnable.interrupt();
return;
}
int n = suggestions.length - existingViews.length;
TextView[] toAdd = null;
TextView[] toRecycle = null;
if (n == 0) {
toRecycle = existingViews;
toAdd = null;
} else if (n > 0) {
toRecycle = existingViews;
toAdd = new TextView[n];
for (int count = 0; count < toAdd.length; count++) {
toAdd[count] = suggestionViewDecorer.getSuggestionView(mContext);
}
} else if (n < 0) {
toAdd = null;
toRecycle = new TextView[suggestions.length];
System.arraycopy(existingViews, 0, toRecycle, 0, toRecycle.length);
}
if (Thread.interrupted()) {
suggestionRunnable.interrupt();
return;
}
suggestionRunnable.setN(n);
suggestionRunnable.setSuggestions(suggestions);
suggestionRunnable.setToAdd(toAdd);
suggestionRunnable.setToRecycle(toRecycle);
suggestionRunnable.reset();
((Activity) mContext).runOnUiThread(suggestionRunnable);
}
};
lastSuggestionThread.start();
}
protected UIManager(ExecInfo info, Context context, final ViewGroup rootView, final CommandExecuter tri, DevicePolicyManager mgr, ComponentName name, protected UIManager(ExecInfo info, Context context, final ViewGroup rootView, final CommandExecuter tri, DevicePolicyManager mgr, ComponentName name,
PreferencesManager prefsMgr, Resources resources) { PreferencesManager prefsMgr) {
rootView.setOnTouchListener(this); rootView.setOnTouchListener(this);
...@@ -257,7 +355,7 @@ public class UIManager implements OnTouchListener { ...@@ -257,7 +355,7 @@ public class UIManager implements OnTouchListener {
} else } else
initDetector(); initDetector();
mTerminalAdapter = new TerminalAdapter(terminalView, inputView, prefixView, submitView, skinManager, getHint(prefsMgr), mTerminalAdapter = new TerminalManager(terminalView, inputView, prefixView, submitView, skinManager, getHint(prefsMgr),
Boolean.parseBoolean(prefsMgr.getValue(PreferencesManager.ENTER_PHYSICAL_KEYBOARD))); Boolean.parseBoolean(prefsMgr.getValue(PreferencesManager.ENTER_PHYSICAL_KEYBOARD)));
mTerminalAdapter.setInputListener(new OnNewInputListener() { mTerminalAdapter.setInputListener(new OnNewInputListener() {
@Override @Override
...@@ -292,87 +390,6 @@ public class UIManager implements OnTouchListener { ...@@ -292,87 +390,6 @@ public class UIManager implements OnTouchListener {
}); });
} }
// call this to trigger a suggestion change
private void requestSuggestion(final String before, final String lastWord) {
if (suggestionViewParams == null) {
suggestionViewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
suggestionViewParams.setMargins(SkinManager.SUGGESTION_MARGIN, 0, SkinManager.SUGGESTION_MARGIN, 0);
suggestionViewParams.gravity = Gravity.CENTER_VERTICAL;
}
lastSuggestionThread = new Thread() {
@Override
public void run() {
super.run();
final SuggestionsManager.Suggestion[] suggestions = SuggestionsManager.getSuggestions(info, before, lastWord);
if (Thread.interrupted())
return;
final TextView[] recycledViews = new TextView[suggestionsView.getChildCount()];
for (int count = 0; count < recycledViews.length; count++) {
recycledViews[count] = (TextView) suggestionsView.getChildAt(count);
}
if (Thread.interrupted())
return;
final int n = suggestions.length - recycledViews.length;
final TextView[] toAdd;
final TextView[] toRecycle;
if (n == 0) {
toRecycle = recycledViews;
toAdd = null;
} else if (n > 0) {
toRecycle = recycledViews;
toAdd = new TextView[n];
for (int count = 0; count < toAdd.length; count++) {
toAdd[count] = suggestionViewDecorer.getSuggestionView(mContext);
}
} else if (n < 0) {
toAdd = null;
toRecycle = new TextView[suggestions.length];
System.arraycopy(recycledViews, 0, toRecycle, 0, toRecycle.length);
} else {
return;
}
if (Thread.interrupted())
return;
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
if (n < 0) {
for (int count = toRecycle.length; count < suggestionsView.getChildCount(); count++) {
suggestionsView.removeViewAt(count);
}
}
for (int count = 0; count < suggestions.length; count++) {
String s = suggestions[count].text;
if (count < toRecycle.length) {
toRecycle[count].setId(suggestions[count].id);
toRecycle[count].setBackgroundDrawable(null);
toRecycle[count].setBackgroundDrawable(skinManager.getSuggestionBg(suggestions[count].id));
toRecycle[count].setText(s);
} else if (toAdd != null && count < toAdd.length) {
toAdd[count].setText(s);
toAdd[count].setId(suggestions[count].id);
toAdd[count].setBackgroundDrawable(skinManager.getSuggestionBg(suggestions[count].id));
suggestionsView.addView(toAdd[count], suggestionViewParams);
}
}
}
});
}
};
lastSuggestionThread.start();
}
private void openKeyboard() { private void openKeyboard() {
mTerminalAdapter.requestInputFocus(); mTerminalAdapter.requestInputFocus();
imm.showSoftInput(mTerminalAdapter.getInputView(), InputMethodManager.SHOW_IMPLICIT); imm.showSoftInput(mTerminalAdapter.getInputView(), InputMethodManager.SHOW_IMPLICIT);
...@@ -389,7 +406,7 @@ public class UIManager implements OnTouchListener { ...@@ -389,7 +406,7 @@ public class UIManager implements OnTouchListener {
// accessor for input // accessor for input
public void setInput(String s) { public void setInput(String s) {
if (s == null || s.length() == 0) if (s == null)
return; return;
mTerminalAdapter.setInput(s); mTerminalAdapter.setInput(s);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment