Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
T
Terminal user interface- command line
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Arjun Sundaram
Terminal user interface- command line
Commits
d11fd557
Commit
d11fd557
authored
9 years ago
by
Francesco Andreuzzi
Browse files
Options
Downloads
Patches
Plain Diff
fixed some bugs
parent
6a4971b2
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
app/src/main/java/ohi/andre/consolelauncher/UIManager.java
+111
-94
111 additions, 94 deletions
app/src/main/java/ohi/andre/consolelauncher/UIManager.java
with
111 additions
and
94 deletions
app/src/main/java/ohi/andre/consolelauncher/UIManager.java
+
111
−
94
View file @
d11fd557
...
@@ -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
Terminal
Adapt
er
mTerminalAdapter
;
private
Terminal
Manag
er
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
Terminal
Adapt
er
(
terminalView
,
inputView
,
prefixView
,
submitView
,
skinManager
,
getHint
(
prefsMgr
),
mTerminalAdapter
=
new
Terminal
Manag
er
(
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
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment