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

5.3e

parent 359267bc
No related branches found
No related tags found
No related merge requests found
Showing
with 457 additions and 438 deletions
...@@ -9,8 +9,8 @@ android { ...@@ -9,8 +9,8 @@ android {
minSdkVersion 8 minSdkVersion 8
targetSdkVersion 23 targetSdkVersion 23
versionCode 90 versionCode 91
versionName "5.3b" versionName "5.3e"
} }
buildTypes { buildTypes {
......
...@@ -117,7 +117,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable { ...@@ -117,7 +117,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
@Override @Override
public void onOutput(String output) { public void onOutput(String output) {
try { try {
ui.setOutput(output); ui.setOutput(output, true);
} catch (NullPointerException e) { } catch (NullPointerException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -199,7 +199,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable { ...@@ -199,7 +199,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
} }
NotificationManager.create(); NotificationManager.create();
boolean notifications = NotificationManager.get(boolean.class, NotificationManager.Options.enabled); boolean notifications = XMLPrefsManager.get(boolean.class, NotificationManager.Options.enabled);
if(notifications) { if(notifications) {
LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, new IntentFilter("Msg")); LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, new IntentFilter("Msg"));
if(!Tuils.hasNotificationAccess(this)) { if(!Tuils.hasNotificationAccess(this)) {
...@@ -366,7 +366,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable { ...@@ -366,7 +366,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
MainPack info = main.getMainPack(); MainPack info = main.getMainPack();
main.onCommand(info.lastCommand, null); main.onCommand(info.lastCommand, null);
} else { } else {
ui.setOutput(getString(R.string.output_nopermissions)); ui.setOutput(getString(R.string.output_nopermissions), false);
main.sendPermissionNotGrantedWarning(); main.sendPermissionNotGrantedWarning();
} }
break; break;
...@@ -385,7 +385,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable { ...@@ -385,7 +385,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
break; break;
case COMMAND_SUGGESTION_REQUEST_PERMISSION: case COMMAND_SUGGESTION_REQUEST_PERMISSION:
if (grantResults.length == 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) { if (grantResults.length == 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
ui.setOutput(getString(R.string.output_nopermissions)); ui.setOutput(getString(R.string.output_nopermissions), false);
} }
break; break;
} }
...@@ -403,14 +403,12 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable { ...@@ -403,14 +403,12 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
// Log.e("andre", "received");
String pack = intent.getStringExtra("package"); String pack = intent.getStringExtra("package");
String title = intent.getStringExtra("title"); String title = intent.getStringExtra("title");
String text = intent.getStringExtra("text"); String text = intent.getStringExtra("text");
if(ui != null) { if(ui != null) {
ui.setOutput(pack + ": " + (title == null ? Tuils.EMPTYSTRING : title + (text == null ? Tuils.EMPTYSTRING : " --- ")) + (text == null ? Tuils.EMPTYSTRING : text), intent.getIntExtra("color", Color.RED)); ui.setOutput(pack + ": " + (title == null ? Tuils.EMPTYSTRING : title + (text == null ? Tuils.EMPTYSTRING : " --- ")) + (text == null ? Tuils.EMPTYSTRING : text), intent.getIntExtra("color", Color.RED), false);
} }
} }
}; };
......
...@@ -8,6 +8,8 @@ import android.os.Handler; ...@@ -8,6 +8,8 @@ import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.util.Log; import android.util.Log;
import java.util.Arrays;
import ohi.andre.consolelauncher.commands.Command; import ohi.andre.consolelauncher.commands.Command;
import ohi.andre.consolelauncher.commands.CommandGroup; import ohi.andre.consolelauncher.commands.CommandGroup;
import ohi.andre.consolelauncher.commands.CommandTuils; import ohi.andre.consolelauncher.commands.CommandTuils;
...@@ -98,6 +100,7 @@ public class MainManager { ...@@ -98,6 +100,7 @@ public class MainManager {
private Thread thread; private Thread thread;
private boolean busy = false; private boolean busy = false;
private boolean ctrlced = false;
private void busy() { private void busy() {
busy = true; busy = true;
...@@ -148,10 +151,12 @@ public class MainManager { ...@@ -148,10 +151,12 @@ public class MainManager {
// command manager // command manager
public void onCommand(String input, String alias) { public void onCommand(String input, String alias) {
if(busy) { if(busy) {
if(input.equalsIgnoreCase("ctrlc")) { if(input.equalsIgnoreCase("ctrlc")) {
thread.interrupt(); thread.interrupt();
ctrlced = true;
notBusy(); notBusy();
return; return;
} }
...@@ -239,15 +244,6 @@ public class MainManager { ...@@ -239,15 +244,6 @@ public class MainManager {
// this is the last trigger, it has to say "command not found" // this is the last trigger, it has to say "command not found"
// boolean su = false;
// if (CommandTuils.isSuCommand(input)) {
// su = true;
// input = input.substring(3);
// if (input.startsWith(ShellUtils.COMMAND_SU_ADD + Tuils.SPACE)) {
// input = input.substring(3);
// }
// }
final String cmd = input; final String cmd = input;
final boolean useSU = false; final boolean useSU = false;
...@@ -262,13 +258,18 @@ public class MainManager { ...@@ -262,13 +258,18 @@ public class MainManager {
ShellUtils.CommandResult result = ShellUtils.execCommand(new String[] {cmd}, useSU, mainPack.currentDirectory.getAbsolutePath(), out); ShellUtils.CommandResult result = ShellUtils.execCommand(new String[] {cmd}, useSU, mainPack.currentDirectory.getAbsolutePath(), out);
if(Thread.interrupted()) return; if(Thread.interrupted()) return;
if(ctrlced) {
ctrlced = false;
return;
}
if (result == null || result.result == COMMAND_NOTFOUND || result.result == -1) { if (result == null || result.result == COMMAND_NOTFOUND || result.result == -1) {
out.onOutput(mContext.getString(R.string.output_commandnotfound)); out.onOutput(mContext.getString(R.string.output_commandnotfound));
} else { } else {
String output = result.toString(); String output = result.toString();
if(output != null) { if(output != null) {
output = output.trim(); output = output.trim();
if(output.length() == 0 ) { if(output.length() == 0 && result.result > 0) {
output = mainPack.res.getString(R.string.output_commandexitvalue) + Tuils.SPACE + result.result; output = mainPack.res.getString(R.string.output_commandexitvalue) + Tuils.SPACE + result.result;
} }
} }
...@@ -336,7 +337,7 @@ public class MainManager { ...@@ -336,7 +337,7 @@ public class MainManager {
String output = command.exec(mContext.getResources(), info); String output = command.exec(mContext.getResources(), info);
if(Thread.interrupted()) return; if(Thread.interrupted()) return;
if(output != null) { if(output != null && !ctrlced) {
out.onOutput(output); out.onOutput(output);
} }
} }
......
...@@ -112,38 +112,38 @@ public class UIManager implements OnTouchListener { ...@@ -112,38 +112,38 @@ public class UIManager implements OnTouchListener {
return; return;
} }
if(st == s.length() - 1 && b == 0 && c == 1 && s.subSequence(st, s.length()).toString().equals(Tuils.SPACE)) { // if(st == s.length() - 1 && b == 0 && c == 1 && s.subSequence(st, s.length()).toString().equals(Tuils.SPACE) && !navigatingWithSpace) {
nOfSpace++; // nOfSpace++;
originalText = s.toString(); // originalText = s.toString();
} else { // } else if(!navigatingWithSpace) {
nOfSpace = -1; // nOfSpace = -1;
originalText = null; // originalText = null;
navigatingWithSpace = false; // navigatingWithSpace = false;
} // }
//
if(nOfSpace == suggestionsView.getChildCount() + 1) { // if(nOfSpace == suggestionsView.getChildCount() + 1) {
nOfSpace = -2; // nOfSpace = -2;
navigatingWithSpace = false; // navigatingWithSpace = false;
} // }
//
if(nOfSpace >= 0) { // if(nOfSpace >= 0) {
if(nOfSpace == 1 && suggestionsView.getChildCount() == 1) { // if(nOfSpace == 1 && suggestionsView.getChildCount() == 1) {
nOfSpace = -1; // nOfSpace = -1;
originalText = null; // originalText = null;
navigatingWithSpace = false; // navigatingWithSpace = false;
} else { // } else {
for(int count = 0; count < suggestionsView.getChildCount(); count++) { // for(int count = 0; count < suggestionsView.getChildCount(); count++) {
SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) suggestionsView.getChildAt(count).getTag(R.id.suggestion_id); // SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) suggestionsView.getChildAt(count).getTag(R.id.suggestion_id);
if(originalText.trim().endsWith(suggestion.text)) { // if(originalText.trim().endsWith(suggestion.text)) {
nOfSpace = -1; // nOfSpace = -1;
originalText = null; // originalText = null;
navigatingWithSpace = false; // navigatingWithSpace = false;
break; // break;
} // }
if(count == suggestionsView.getChildCount() - 1) return; // if(count == suggestionsView.getChildCount() - 1) return;
} // }
} // }
} // }
String text = s.toString(); String text = s.toString();
int lastSpace = text.lastIndexOf(Tuils.SPACE); int lastSpace = text.lastIndexOf(Tuils.SPACE);
...@@ -156,53 +156,53 @@ public class UIManager implements OnTouchListener { ...@@ -156,53 +156,53 @@ public class UIManager implements OnTouchListener {
@Override @Override
public void afterTextChanged(Editable s) { public void afterTextChanged(Editable s) {
if(nOfSpace == -2) { // if(nOfSpace == -2) {
s.replace(0,s.length(),originalText); // s.replace(0,s.length(),originalText);
originalText = null; // originalText = null;
return; // return;
}
if(nOfSpace > 0 && s.length() > 0 && call) {
if(nOfSpace == 1) {
call = false;
s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
call = true;
}
navigatingWithSpace = true;
call = false;
s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
call = true;
// int count = suggestionsView.getChildCount();
int index = nOfSpace - 1;
// if(nOfSpace <= count) {
// index = nOfSpace - 1;
// } // }
// else { //
// index = nOfSpace % (count + 1) - 1; // if(nOfSpace > 0 && s.length() > 0 && call) {
// if(nOfSpace == 1) {
// call = false;
// s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
// call = true;
// }
//
// navigatingWithSpace = true;
//
// call = false;
// s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
// call = true;
//
//// int count = suggestionsView.getChildCount();
// int index = nOfSpace - 1;
//// if(nOfSpace <= count) {
//// index = nOfSpace - 1;
//// }
//// else {
//// index = nOfSpace % (count + 1) - 1;
//// }
//
// call = false;
// if(index != -1) {
// View view = suggestionsView.getChildAt(index);
// SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) view.getTag(R.id.suggestion_id);
//
// String text = suggestion.getText() + Tuils.SPACE;
//
// if(originalText.length() < s.length() && suggestion.type == SuggestionsManager.Suggestion.TYPE_PERMANENT) {
// s.replace(originalText.length(), s.length(), text);
// } else {
// s.replace(0, s.length(), text);
// }
// } else {
// Log.e("andre", "4");
// s.replace(0, s.length(), originalText);
// navigatingWithSpace = false;
// }
// call = true;
// } // }
call = false;
if(index != -1) {
View view = suggestionsView.getChildAt(index);
SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) view.getTag(R.id.suggestion_id);
String text = suggestion.getText() + Tuils.SPACE;
if(originalText.length() < s.length() && suggestion.type == SuggestionsManager.Suggestion.TYPE_PERMANENT) {
s.replace(originalText.length(), s.length(), text);
} else {
s.replace(0, s.length(), text);
}
} else {
s.replace(0, s.length(), originalText);
navigatingWithSpace = false;
}
call = true;
}
} }
}; };
...@@ -518,12 +518,12 @@ public class UIManager implements OnTouchListener { ...@@ -518,12 +518,12 @@ public class UIManager implements OnTouchListener {
mTerminalAdapter.setDefaultHint(); mTerminalAdapter.setDefaultHint();
} }
public void setOutput(String string) { public void setOutput(String string, boolean fromUser) {
mTerminalAdapter.setOutput(string); mTerminalAdapter.setOutput(string, fromUser);
} }
public void setOutput(String s, int color) { public void setOutput(String s, int color, boolean fromUser) {
mTerminalAdapter.setOutput(s, color); mTerminalAdapter.setOutput(s, color, fromUser);
} }
public void disableSuggestions() { public void disableSuggestions() {
......
package ohi.andre.consolelauncher.commands; package ohi.andre.consolelauncher.commands;
import android.content.res.Resources; import android.content.res.Resources;
import android.util.Log;
import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.specific.ParamCommand; import ohi.andre.consolelauncher.commands.specific.ParamCommand;
...@@ -17,6 +18,9 @@ public class Command { ...@@ -17,6 +18,9 @@ public class Command {
public String exec(Resources resources, ExecutePack info) throws Exception { public String exec(Resources resources, ExecutePack info) throws Exception {
info.set(mArgs); info.set(mArgs);
if(cmd instanceof ParamCommand && mArgs != null && (mArgs.length == 0 || ((ParamCommand) cmd).argsForParam((String) mArgs[0]) == null)) {
return info.context.getString(R.string.output_invalid_param) + Tuils.SPACE + mArgs[0];
}
if (indexNotFound != -1) { if (indexNotFound != -1) {
return cmd.onArgNotFound(info, indexNotFound); return cmd.onArgNotFound(info, indexNotFound);
} }
...@@ -25,9 +29,6 @@ public class Command { ...@@ -25,9 +29,6 @@ public class Command {
((ParamCommand) cmd).argsForParam((String) mArgs[0]).length + 1 > nArgs)) { ((ParamCommand) cmd).argsForParam((String) mArgs[0]).length + 1 > nArgs)) {
return cmd.onNotArgEnough(info, nArgs); return cmd.onNotArgEnough(info, nArgs);
} }
if(cmd instanceof ParamCommand && ((ParamCommand) cmd).argsForParam((String) mArgs[0]) == null) {
return info.context.getString(R.string.output_invalid_param) + Tuils.SPACE + mArgs[0];
}
if (cmd.maxArgs() != CommandAbstraction.UNDEFINIED && nArgs > cmd.maxArgs()) { if (cmd.maxArgs() != CommandAbstraction.UNDEFINIED && nArgs > cmd.maxArgs()) {
return resources.getString(R.string.output_toomanyargs); return resources.getString(R.string.output_toomanyargs);
} }
......
...@@ -2,7 +2,6 @@ package ohi.andre.consolelauncher.commands; ...@@ -2,7 +2,6 @@ package ohi.andre.consolelauncher.commands;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.graphics.Color; import android.graphics.Color;
import android.util.Log;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -217,32 +216,10 @@ public class CommandTuils { ...@@ -217,32 +216,10 @@ public class CommandTuils {
return null; return null;
} }
List<String> strings = new ArrayList<>(); String[] strings = input.split(Tuils.SPACE + "+");
List<String> arg = new ArrayList<>(Arrays.asList(strings));
char[] chars = input.toCharArray(); return new ArgInfo(arg, null, true, arg.size());
String arg = "";
int index;
for (index = 0; index < chars.length; index++) {
char c = chars[index];
if (c == ' ') {
if (arg.length() > 0) {
strings.add(arg);
arg = "";
continue;
} else {
// prevent double space
continue;
}
}
arg = arg.concat(c + Tuils.EMPTYSTRING);
}
if (arg.length() > 0)
strings.add(arg);
return new ArgInfo(strings, input.substring(index), true, strings.size());
} }
private static ArgInfo command(String string, CommandGroup active) { private static ArgInfo command(String string, CommandGroup active) {
...@@ -267,7 +244,7 @@ public class CommandTuils { ...@@ -267,7 +244,7 @@ public class CommandTuils {
while (count-- >= 0) while (count-- >= 0)
strings.remove(0); strings.remove(0);
String residual = Tuils.toPlanString(strings, " "); String residual = Tuils.toPlanString(strings, Tuils.SPACE);
return new ArgInfo(info.file, residual, true, 1); return new ArgInfo(info.file, residual, true, 1);
} }
......
package ohi.andre.consolelauncher.commands.main.raw; package ohi.andre.consolelauncher.commands.main.raw;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.CommandAbstraction; import ohi.andre.consolelauncher.commands.CommandAbstraction;
import ohi.andre.consolelauncher.commands.ExecutePack; import ohi.andre.consolelauncher.commands.ExecutePack;
import ohi.andre.consolelauncher.commands.main.MainPack; import ohi.andre.consolelauncher.commands.main.MainPack;
import ohi.andre.consolelauncher.commands.specific.ParamCommand;
import ohi.andre.consolelauncher.managers.AliasManager;
import ohi.andre.consolelauncher.managers.XMLPrefsManager;
import ohi.andre.consolelauncher.tuils.Tuils;
/** /**
* Created by andre on 15/11/15. * Created by andre on 15/11/15.
*/ */
public class alias implements CommandAbstraction { public class alias extends ParamCommand {
private enum Param implements ohi.andre.consolelauncher.commands.main.Param {
add {
@Override @Override
public String exec(ExecutePack pack) { public String exec(ExecutePack pack) {
MainPack info = (MainPack) pack; ArrayList<String> args = pack.get(ArrayList.class, 1);
if (info.aliasManager.getNum() > 0) if(args.size() < 2) return pack.context.getString(R.string.output_lessarg);
return info.aliasManager.printAliases(); return ((MainPack) pack).aliasManager.add(args.remove(0), Tuils.toPlanString(args, Tuils.SPACE));
else
return info.res.getString(helpRes());
} }
@Override @Override
public int helpRes() { public int[] args() {
return R.string.help_aliases; return new int[] {CommandAbstraction.TEXTLIST};
}
},
remove {
@Override
public String exec(ExecutePack pack) {
ArrayList<String> args = pack.get(ArrayList.class, 1);
if(args.size() < 1) return pack.context.getString(R.string.output_lessarg);
if(((MainPack) pack).aliasManager.remove(args.get(0))) return null;
else return pack.context.getString(R.string.output_aliasnotfound) + Tuils.SPACE + args.get(0);
} }
@Override @Override
public int minArgs() { public int[] args() {
return 0; return new int[] {CommandAbstraction.TEXTLIST};
}
},
file {
@Override
public String exec(ExecutePack pack) {
pack.context.startActivity(Tuils.openFile(new File(Tuils.getFolder(), AliasManager.PATH)));
return null;
} }
@Override @Override
public int maxArgs() { public int[] args() {
return 0; return new int[0];
}
},
ls {
@Override
public String exec(ExecutePack pack) {
return ((MainPack) pack).aliasManager.printAliases();
} }
@Override @Override
public int[] argType() { public int[] args() {
return new int[0]; return new int[0];
} }
};
static Param get(String p) {
p = p.toLowerCase();
Param[] ps = values();
for (Param p1 : ps)
if (p.endsWith(p1.label()))
return p1;
return null;
}
static String[] labels() {
Param[] ps = values();
String[] ss = new String[ps.length];
for (int count = 0; count < ps.length; count++) {
ss[count] = ps[count].label();
}
return ss;
}
@Override
public String label() {
return Tuils.MINUS + name();
}
}
@Override
public String[] params() {
return Param.labels();
}
@Override
protected ohi.andre.consolelauncher.commands.main.Param paramForString(String param) {
return Param.get(param);
}
@Override
protected String doThings(ExecutePack pack) {
return null;
}
@Override
public int helpRes() {
return R.string.help_aliases;
}
@Override
public int minArgs() {
return 1;
}
@Override
public int maxArgs() {
return CommandAbstraction.UNDEFINIED;
}
@Override @Override
public int priority() { public int priority() {
...@@ -46,7 +135,7 @@ public class alias implements CommandAbstraction { ...@@ -46,7 +135,7 @@ public class alias implements CommandAbstraction {
@Override @Override
public String onNotArgEnough(ExecutePack info, int nArgs) { public String onNotArgEnough(ExecutePack info, int nArgs) {
return null; return ((MainPack) info).aliasManager.printAliases();
} }
@Override @Override
......
...@@ -4,6 +4,8 @@ import android.content.Context; ...@@ -4,6 +4,8 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import java.io.File;
import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.CommandAbstraction; import ohi.andre.consolelauncher.commands.CommandAbstraction;
import ohi.andre.consolelauncher.commands.ExecutePack; import ohi.andre.consolelauncher.commands.ExecutePack;
...@@ -87,6 +89,18 @@ public class apps extends ParamCommand { ...@@ -87,6 +89,18 @@ public class apps extends ParamCommand {
Intent intent = ((MainPack) pack).appsManager.getIntent(pack.get(String.class, 1)); Intent intent = ((MainPack) pack).appsManager.getIntent(pack.get(String.class, 1));
pack.context.startActivity(intent); pack.context.startActivity(intent);
return null;
}
},
file {
@Override
public int[] args() {
return new int[0];
}
@Override
public String exec(ExecutePack pack) {
pack.context.startActivity(Tuils.openFile(new File(Tuils.getFolder(), AppsManager.PATH)));
return null; return null;
} }
}; };
......
package ohi.andre.consolelauncher.commands.main.raw; package ohi.andre.consolelauncher.commands.main.raw;
import android.util.Log;
import java.io.File; import java.io.File;
import java.util.Arrays;
import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.CommandAbstraction; import ohi.andre.consolelauncher.commands.CommandAbstraction;
import ohi.andre.consolelauncher.commands.ExecutePack; import ohi.andre.consolelauncher.commands.ExecutePack;
import ohi.andre.consolelauncher.commands.main.Param;
import ohi.andre.consolelauncher.commands.specific.ParamCommand; import ohi.andre.consolelauncher.commands.specific.ParamCommand;
import ohi.andre.consolelauncher.managers.XMLPrefsManager; import ohi.andre.consolelauncher.managers.XMLPrefsManager;
import ohi.andre.consolelauncher.tuils.Tuils; import ohi.andre.consolelauncher.tuils.Tuils;
...@@ -39,8 +41,8 @@ public class config extends ParamCommand { ...@@ -39,8 +41,8 @@ public class config extends ParamCommand {
@Override @Override
public String exec(ExecutePack pack) { public String exec(ExecutePack pack) {
File file = pack.get(File.class, 1); File file = new File(Tuils.getFolder(), pack.get(String.class, 1));
Tuils.openFile(file); pack.context.startActivity(Tuils.openFile(file));
return null; return null;
} }
}; };
...@@ -48,9 +50,7 @@ public class config extends ParamCommand { ...@@ -48,9 +50,7 @@ public class config extends ParamCommand {
static Param get(String p) { static Param get(String p) {
p = p.toLowerCase(); p = p.toLowerCase();
Param[] ps = values(); Param[] ps = values();
for (Param p1 : ps) for (Param p1 : ps) if (p.endsWith(p1.label())) return p1;
if (p.endsWith(p1.label()))
return p1;
return null; return null;
} }
...@@ -108,7 +108,6 @@ public class config extends ParamCommand { ...@@ -108,7 +108,6 @@ public class config extends ParamCommand {
@Override @Override
public String onArgNotFound(ExecutePack pack, int indexNotFound) { public String onArgNotFound(ExecutePack pack, int indexNotFound) {
if(indexNotFound == 0) return pack.context.getString(R.string.output_invalid_param);
return pack.context.getString(R.string.output_invalidarg); return pack.context.getString(R.string.output_invalidarg);
} }
......
package ohi.andre.consolelauncher.commands.main.raw;
import android.app.Activity;
import android.content.SharedPreferences;
import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.CommandAbstraction;
import ohi.andre.consolelauncher.commands.ExecutePack;
import ohi.andre.consolelauncher.commands.main.MainPack;
import ohi.andre.consolelauncher.tuils.Tuils;
/**
* Created by francescoandreuzzi on 04/03/2017.
*/
public class hideapp implements CommandAbstraction {
@Override
public String exec(ExecutePack pack) throws Exception {
String app = pack.get(String.class, 0);
hideApp((MainPack) pack, app);
return null;
}
@Override
public int minArgs() {
return 1;
}
@Override
public int maxArgs() {
return 1;
}
@Override
public int[] argType() {
return new int[] {CommandAbstraction.VISIBLE_PACKAGE};
}
@Override
public int priority() {
return 2;
}
@Override
public int helpRes() {
return R.string.help_appshide;
}
@Override
public String onArgNotFound(ExecutePack pack, int index) {
MainPack info = (MainPack) pack;
return info.res.getString(R.string.output_appnotfound);
}
@Override
public String onNotArgEnough(ExecutePack pack, int nArgs) {
MainPack info = (MainPack) pack;
return info.res.getString(helpRes());
}
private String hideApp(MainPack info, String app) {
SharedPreferences.Editor editor = ((Activity) info.context).getPreferences(0).edit();
String result = info.appsManager.hideApp(app);
if (result != null) {
editor.commit();
return result + Tuils.SPACE + info.res.getString(R.string.output_hideapp);
} else
return info.res.getString(R.string.output_appnotfound);
}
}
package ohi.andre.consolelauncher.commands.main.raw; package ohi.andre.consolelauncher.commands.main.raw;
import java.io.File;
import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.Command;
import ohi.andre.consolelauncher.commands.CommandAbstraction; import ohi.andre.consolelauncher.commands.CommandAbstraction;
import ohi.andre.consolelauncher.commands.ExecutePack; import ohi.andre.consolelauncher.commands.ExecutePack;
import ohi.andre.consolelauncher.commands.main.MainPack; import ohi.andre.consolelauncher.commands.main.MainPack;
...@@ -15,10 +18,6 @@ import ohi.andre.consolelauncher.tuils.Tuils; ...@@ -15,10 +18,6 @@ import ohi.andre.consolelauncher.tuils.Tuils;
public class notifications extends ParamCommand { public class notifications extends ParamCommand {
private final String INCLUDE_PARAM = "-inc";
private final String EXCLUDE_PARAM = "-exc";
private final String COLOR_PARAM = "-clr";
private enum Param implements ohi.andre.consolelauncher.commands.main.Param { private enum Param implements ohi.andre.consolelauncher.commands.main.Param {
inc { inc {
...@@ -59,6 +58,42 @@ public class notifications extends ParamCommand { ...@@ -59,6 +58,42 @@ public class notifications extends ParamCommand {
public int[] args() { public int[] args() {
return new int[] {CommandAbstraction.COLOR, CommandAbstraction.VISIBLE_PACKAGE}; return new int[] {CommandAbstraction.COLOR, CommandAbstraction.VISIBLE_PACKAGE};
} }
},
title_regex {
@Override
public String exec(ExecutePack pack) {
NotificationManager.excludeRegex(pack.get(String.class, 1), "title");
return null;
}
@Override
public int[] args() {
return new int[] {CommandAbstraction.PLAIN_TEXT};
}
},
text_regex {
@Override
public String exec(ExecutePack pack) {
NotificationManager.excludeRegex(pack.get(String.class, 1), "text");
return null;
}
@Override
public int[] args() {
return new int[] {CommandAbstraction.PLAIN_TEXT};
}
},
file {
@Override
public int[] args() {
return new int[0];
}
@Override
public String exec(ExecutePack pack) {
pack.context.startActivity(Tuils.openFile(new File(Tuils.getFolder(), NotificationManager.PATH)));
return null;
}
}; };
static Param get(String p) { static Param get(String p) {
...@@ -104,7 +139,7 @@ public class notifications extends ParamCommand { ...@@ -104,7 +139,7 @@ public class notifications extends ParamCommand {
@Override @Override
public int minArgs() { public int minArgs() {
return 2; return 0;
} }
@Override @Override
......
package ohi.andre.consolelauncher.commands.main.raw;
import android.app.Activity;
import android.content.SharedPreferences;
import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.CommandAbstraction;
import ohi.andre.consolelauncher.commands.ExecutePack;
import ohi.andre.consolelauncher.commands.main.MainPack;
import ohi.andre.consolelauncher.tuils.Tuils;
/**
* Created by francescoandreuzzi on 04/03/2017.
*/
public class unhideapp implements CommandAbstraction {
@Override
public String exec(ExecutePack pack) throws Exception {
String app = pack.get(String.class, 0);
unHideApp((MainPack) pack, app);
return null;
}
@Override
public int minArgs() {
return 1;
}
@Override
public int maxArgs() {
return 1;
}
@Override
public int[] argType() {
return new int[] {CommandAbstraction.HIDDEN_PACKAGE};
}
@Override
public int priority() {
return 2;
}
@Override
public int helpRes() {
return R.string.help_appsunhide;
}
@Override
public String onArgNotFound(ExecutePack pack, int index) {
MainPack info = (MainPack) pack;
return info.res.getString(R.string.output_appnotfound);
}
@Override
public String onNotArgEnough(ExecutePack pack, int nArgs) {
MainPack info = (MainPack) pack;
return info.res.getString(helpRes());
}
private String unHideApp(MainPack info, String app) {
SharedPreferences.Editor editor = ((Activity) info.context).getPreferences(0).edit();
String result = info.appsManager.unhideApp(app);
if (result != null) {
editor.commit();
return result + Tuils.SPACE + info.res.getString(R.string.output_unhideapp);
} else
return info.res.getString(R.string.output_appnotfound);
}
}
...@@ -6,6 +6,7 @@ import ohi.andre.consolelauncher.R; ...@@ -6,6 +6,7 @@ import ohi.andre.consolelauncher.R;
import ohi.andre.consolelauncher.commands.CommandAbstraction; import ohi.andre.consolelauncher.commands.CommandAbstraction;
import ohi.andre.consolelauncher.commands.ExecutePack; import ohi.andre.consolelauncher.commands.ExecutePack;
import ohi.andre.consolelauncher.commands.main.Param; import ohi.andre.consolelauncher.commands.main.Param;
import ohi.andre.consolelauncher.tuils.Tuils;
/** /**
* Created by francescoandreuzzi on 01/05/2017. * Created by francescoandreuzzi on 01/05/2017.
...@@ -23,11 +24,11 @@ public abstract class ParamCommand implements CommandAbstraction { ...@@ -23,11 +24,11 @@ public abstract class ParamCommand implements CommandAbstraction {
String o = doThings(pack); String o = doThings(pack);
if(o != null) return o; if(o != null) return o;
try { Param param = paramForString(pack.get(String.class, 0));
return paramForString(pack.get(String.class, 0)).exec(pack); if(param == null) {
} catch (NullPointerException e) { return pack.context.getString(R.string.output_invalid_param) + Tuils.SPACE + pack.get(String.class, 0);
return pack.context.getString(R.string.output_invalid_param);
} }
return param.exec(pack);
} }
public final int[] argsForParam(String param) { public final int[] argsForParam(String param) {
......
...@@ -10,6 +10,7 @@ import android.os.Bundle; ...@@ -10,6 +10,7 @@ import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.InputType; import android.text.InputType;
import android.text.method.ScrollingMovementMethod; import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
...@@ -61,6 +62,8 @@ public class TuixtActivity extends Activity { ...@@ -61,6 +62,8 @@ public class TuixtActivity extends Activity {
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Log.e("andre", "0");
final Typeface lucidaConsole = Typeface.createFromAsset(getAssets(), "lucida_console.ttf"); final Typeface lucidaConsole = Typeface.createFromAsset(getAssets(), "lucida_console.ttf");
final LinearLayout rootView = new LinearLayout(this); final LinearLayout rootView = new LinearLayout(this);
...@@ -73,6 +76,7 @@ public class TuixtActivity extends Activity { ...@@ -73,6 +76,7 @@ public class TuixtActivity extends Activity {
path = file.getAbsolutePath(); path = file.getAbsolutePath();
} }
Log.e("andre", "1");
final File file = new File(path); final File file = new File(path);
CommandGroup group = new CommandGroup(this, "ohi.andre.consolelauncher.commands.tuixt.raw"); CommandGroup group = new CommandGroup(this, "ohi.andre.consolelauncher.commands.tuixt.raw");
...@@ -87,6 +91,8 @@ public class TuixtActivity extends Activity { ...@@ -87,6 +91,8 @@ public class TuixtActivity extends Activity {
} }
} }
Log.e("andre", "2");
if (!skinManager.useSystemWp) { if (!skinManager.useSystemWp) {
rootView.setBackgroundColor(skinManager.bgColor); rootView.setBackgroundColor(skinManager.bgColor);
} else { } else {
...@@ -106,6 +112,8 @@ public class TuixtActivity extends Activity { ...@@ -106,6 +112,8 @@ public class TuixtActivity extends Activity {
TextView prefixView = (TextView) inputOutputView.findViewById(R.id.prefix_view); TextView prefixView = (TextView) inputOutputView.findViewById(R.id.prefix_view);
Log.e("andre", "3");
ImageButton submitView = (ImageButton) inputOutputView.findViewById(R.id.submit_tv); ImageButton submitView = (ImageButton) inputOutputView.findViewById(R.id.submit_tv);
boolean showSubmit = skinManager.showSubmit; boolean showSubmit = skinManager.showSubmit;
if (!showSubmit) { if (!showSubmit) {
...@@ -124,6 +132,7 @@ public class TuixtActivity extends Activity { ...@@ -124,6 +132,7 @@ public class TuixtActivity extends Activity {
prefixView.setTextSize(skinManager.getTextSize()); prefixView.setTextSize(skinManager.getTextSize());
prefixView.setText(prefix); prefixView.setText(prefix);
Log.e("andre", "4");
if (submitView != null) { if (submitView != null) {
submitView.setColorFilter(skinManager.inputColor); submitView.setColorFilter(skinManager.inputColor);
...@@ -150,6 +159,8 @@ public class TuixtActivity extends Activity { ...@@ -150,6 +159,8 @@ public class TuixtActivity extends Activity {
} }
}); });
Log.e("andre", "5");
outputView.setTypeface(skinManager.systemFont ? Typeface.DEFAULT : lucidaConsole); outputView.setTypeface(skinManager.systemFont ? Typeface.DEFAULT : lucidaConsole);
outputView.setTextSize(skinManager.getTextSize()); outputView.setTextSize(skinManager.getTextSize());
outputView.setTextColor(skinManager.outputColor); outputView.setTextColor(skinManager.outputColor);
...@@ -187,6 +198,8 @@ public class TuixtActivity extends Activity { ...@@ -187,6 +198,8 @@ public class TuixtActivity extends Activity {
setContentView(rootView); setContentView(rootView);
Log.e("andre", "6");
// //
// //
// end setup part, now start // end setup part, now start
...@@ -220,6 +233,7 @@ public class TuixtActivity extends Activity { ...@@ -220,6 +233,7 @@ public class TuixtActivity extends Activity {
} }
}); });
} catch (Exception e) { } catch (Exception e) {
Log.e("andre", "", e);
intent.putExtra(ERROR_KEY, e.toString()); intent.putExtra(ERROR_KEY, e.toString());
setResult(1, intent); setResult(1, intent);
finish(); finish();
...@@ -237,6 +251,8 @@ public class TuixtActivity extends Activity { ...@@ -237,6 +251,8 @@ public class TuixtActivity extends Activity {
inputView.setText("help"); inputView.setText("help");
inputView.setSelection(inputView.getText().length()); inputView.setSelection(inputView.getText().length());
} }
Log.e("andre", "7");
} }
@Override @Override
......
...@@ -6,6 +6,7 @@ import org.w3c.dom.Node; ...@@ -6,6 +6,7 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
...@@ -16,11 +17,12 @@ import ohi.andre.consolelauncher.tuils.Tuils; ...@@ -16,11 +17,12 @@ import ohi.andre.consolelauncher.tuils.Tuils;
import ohi.andre.consolelauncher.tuils.interfaces.Reloadable; import ohi.andre.consolelauncher.tuils.interfaces.Reloadable;
import static ohi.andre.consolelauncher.managers.XMLPrefsManager.resetFile; import static ohi.andre.consolelauncher.managers.XMLPrefsManager.resetFile;
import static ohi.andre.consolelauncher.managers.XMLPrefsManager.set;
public class AliasManager implements Reloadable { public class AliasManager implements Reloadable {
private final String NAME = "ALIAS"; public static final String NAME = "ALIAS";
private final String PATH = "alias.xml"; public static final String PATH = "alias.xml";
private final String VALUE_ATTRIBUTE = "value"; private final String VALUE_ATTRIBUTE = "value";
...@@ -41,10 +43,6 @@ public class AliasManager implements Reloadable { ...@@ -41,10 +43,6 @@ public class AliasManager implements Reloadable {
return output.trim(); return output.trim();
} }
public int getNum() {
return alias.size();
}
public String getAlias(String s) { public String getAlias(String s) {
XMLPrefsManager.XMLPrefsEntry entry = alias.get(s); XMLPrefsManager.XMLPrefsEntry entry = alias.get(s);
if(entry != null) return entry.value; if(entry != null) return entry.value;
...@@ -98,4 +96,20 @@ public class AliasManager implements Reloadable { ...@@ -98,4 +96,20 @@ public class AliasManager implements Reloadable {
alias.add(nn, node.getAttributes().getNamedItem(VALUE_ATTRIBUTE).getNodeValue()); alias.add(nn, node.getAttributes().getNamedItem(VALUE_ATTRIBUTE).getNodeValue());
} }
} }
public String add(String name, String value) {
return set(new File(Tuils.getFolder(), PATH), NAME, name, new String[] {VALUE_ATTRIBUTE}, new String[] {value});
}
public boolean remove(String name) {
return XMLPrefsManager.removeNode(new File(Tuils.getFolder(), PATH), NAME, name);
}
public List<String> getAliases() {
List<String> labels = new ArrayList<>();
if(alias == null) return labels;
for(int count = 0; count < alias.size(); count++) labels.add(alias.at(count).key);
return labels;
}
} }
...@@ -66,6 +66,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -66,6 +66,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
private SharedPreferences preferences; private SharedPreferences preferences;
private SharedPreferences.Editor editor; private SharedPreferences.Editor editor;
private static XMLPrefsManager.XmlPrefsElement instance = null;
public enum Options implements XMLPrefsManager.XMLPrefsSave { public enum Options implements XMLPrefsManager.XMLPrefsSave {
default_app_n1 { default_app_n1 {
...@@ -108,8 +110,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -108,8 +110,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
} }
@Override @Override
public XMLPrefsManager.XMLPrefsRoot parent() { public XMLPrefsManager.XmlPrefsElement parent() {
return null; return instance;
} }
@Override @Override
...@@ -141,6 +143,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -141,6 +143,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
}; };
public AppsManager(Context context, Outputable outputable) { public AppsManager(Context context, Outputable outputable) {
instance = this;
this.context = context; this.context = context;
this.outputable = outputable; this.outputable = outputable;
......
...@@ -242,52 +242,30 @@ public class TerminalManager { ...@@ -242,52 +242,30 @@ public class TerminalManager {
return true; return true;
} }
public void setOutput(String output) { public void setOutput(String output, boolean fromUser) {
if (output == null) { setOutput(output, -1, OUTPUT, fromUser);
return;
}
output = output.trim();
if(output.equals(Tuils.EMPTYSTRING)) {
return;
} }
if(output.equals(clear.CLEAR)) { public void setOutput(String output, int color, boolean fromUser) {
clear(); setOutput(output, color, -1, fromUser);
return;
} }
writeToView(output, OUTPUT); public void setOutput(String output, int color, int type, boolean fromUser) {
if (output == null) return;
for(Messager messager : messagers) {
if(cmds != 0 && cmds % messager.n == 0) {
writeToView(messager.message, OUTPUT);
}
}
}
public void setOutput(String output, int color) {
if (output == null) {
return;
}
output = output.trim(); output = output.trim();
if(output.equals(Tuils.EMPTYSTRING)) { if(output.equals(Tuils.EMPTYSTRING)) return;
return;
}
if(output.equals(clear.CLEAR)) { if(output.equals(clear.CLEAR)) {
clear(); clear();
return; return;
} }
writeToView(color, output); if(color == -1) writeToView(output, type);
else writeToView(color, output);
for(Messager messager : messagers) { if(fromUser)
if(cmds != 0 && cmds % messager.n == 0) { for (Messager messager : messagers) if (cmds != 0 && cmds % messager.n == 0) writeToView(messager.message, OUTPUT);
writeToView(messager.message, OUTPUT);
}
}
} }
public void onBackPressed() { public void onBackPressed() {
......
...@@ -395,7 +395,7 @@ public class XMLPrefsManager { ...@@ -395,7 +395,7 @@ public class XMLPrefsManager {
show_alias_content { show_alias_content {
@Override @Override
public String defaultValue() { public String defaultValue() {
return "true"; return "false";
} }
}, },
show_launch_history { show_launch_history {
...@@ -465,8 +465,6 @@ public class XMLPrefsManager { ...@@ -465,8 +465,6 @@ public class XMLPrefsManager {
public List<XMLPrefsSave> copy; public List<XMLPrefsSave> copy;
XMLPrefsRoot(String path, XMLPrefsSave[] en) { XMLPrefsRoot(String path, XMLPrefsSave[] en) {
Log.e("andre", Arrays.toString(en));
this.path = path; this.path = path;
this.values = new XMLPrefsList(); this.values = new XMLPrefsList();
...@@ -520,10 +518,16 @@ public class XMLPrefsManager { ...@@ -520,10 +518,16 @@ public class XMLPrefsManager {
} }
public XMLPrefsEntry get(Object o) { public XMLPrefsEntry get(Object o) {
if(o instanceof Integer) return at((Integer) o);
for(XMLPrefsEntry e : list) if(e.equals(o)) return e; for(XMLPrefsEntry e : list) if(e.equals(o)) return e;
return null; return null;
} }
public XMLPrefsEntry at(int index) {
return list.get(index);
}
public int size() { public int size() {
return list.size(); return list.size();
} }
...@@ -655,14 +659,14 @@ public class XMLPrefsManager { ...@@ -655,14 +659,14 @@ public class XMLPrefsManager {
} catch (Exception e) {} } catch (Exception e) {}
} }
public static void set(File file, String rootName, String elementName, String[] attributeNames, String[] attributeValues) { public static String set(File file, String rootName, String elementName, String[] attributeNames, String[] attributeValues) {
String[][] values = new String[1][attributeValues.length]; String[][] values = new String[1][attributeValues.length];
values[0] = attributeValues; values[0] = attributeValues;
setMany(file, rootName, new String[] {elementName}, attributeNames, values); return setMany(file, rootName, new String[] {elementName}, attributeNames, values);
} }
public static void setMany(File file, String rootName, String elementNames[], String[] attributeNames, String[][] attributeValues) { public static String setMany(File file, String rootName, String elementNames[], String[] attributeNames, String[][] attributeValues) {
try { try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); DocumentBuilder builder = factory.newDocumentBuilder();
...@@ -671,7 +675,7 @@ public class XMLPrefsManager { ...@@ -671,7 +675,7 @@ public class XMLPrefsManager {
try { try {
d = builder.parse(file); d = builder.parse(file);
} catch (Exception e) { } catch (Exception e) {
return; return e.toString();
} }
Element root = (Element) d.getElementsByTagName(rootName).item(0); Element root = (Element) d.getElementsByTagName(rootName).item(0);
...@@ -687,7 +691,7 @@ public class XMLPrefsManager { ...@@ -687,7 +691,7 @@ public class XMLPrefsManager {
for(int c = 0; c < attributeNames.length; c++) e.setAttribute(attributeNames[c], attributeValues[index][c]); for(int c = 0; c < attributeNames.length; c++) e.setAttribute(attributeNames[c], attributeValues[index][c]);
writeTo(d, file); writeTo(d, file);
return; return null;
} }
} }
...@@ -699,10 +703,42 @@ public class XMLPrefsManager { ...@@ -699,10 +703,42 @@ public class XMLPrefsManager {
} }
writeTo(d, file); writeTo(d, file);
} catch (Exception e) {
return e.toString();
}
return null;
}
public static boolean removeNode(File file, String rootName, String nodeName) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document d;
try {
d = builder.parse(file);
} catch (Exception e) {
return false;
}
Element root = (Element) d.getElementsByTagName(rootName).item(0);
NodeList nodes = root.getElementsByTagName("*");
for(int count = 0; count < nodes.getLength(); count++) {
Node node = nodes.item(count);
if(node.getNodeName().equalsIgnoreCase(nodeName)) {
root.removeChild(node);
writeTo(d, file);
return true;
}
}
} catch (Exception e) {} } catch (Exception e) {}
return false;
} }
public static String[] getAttrValues(File file, String rootName, String elementName, String[] attrNames) { public static String[] getAttrValues(File file, String rootName, String nodeName, String[] attrNames) {
try { try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); DocumentBuilder builder = factory.newDocumentBuilder();
...@@ -720,7 +756,7 @@ public class XMLPrefsManager { ...@@ -720,7 +756,7 @@ public class XMLPrefsManager {
for(int count = 0; count < nodes.getLength(); count++) { for(int count = 0; count < nodes.getLength(); count++) {
Node node = nodes.item(count); Node node = nodes.item(count);
if(node.getNodeName().equals(elementName)) { if(node.getNodeName().equals(nodeName)) {
Element e = (Element) node; Element e = (Element) node;
String[] values = new String[attrNames.length]; String[] values = new String[attrNames.length];
......
...@@ -3,6 +3,7 @@ package ohi.andre.consolelauncher.managers.notifications; ...@@ -3,6 +3,7 @@ package ohi.andre.consolelauncher.managers.notifications;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.graphics.Color; import android.graphics.Color;
import android.os.Build; import android.os.Build;
import android.util.Log;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
...@@ -17,6 +18,8 @@ import java.util.Collections; ...@@ -17,6 +18,8 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
...@@ -41,10 +44,17 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -41,10 +44,17 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
private static final String COLOR_ATTRIBUTE = "color"; private static final String COLOR_ATTRIBUTE = "color";
private static final String ENABLED_ATTRIBUTE = "enabled"; private static final String ENABLED_ATTRIBUTE = "enabled";
private static final String ON_ATTRIBUTE = "on";
private static final String REGEX_NODE = "regex";
public static final String PATH = "notifications.xml"; public static final String PATH = "notifications.xml";
private static final String NAME = "NOTIFICATIONS"; private static final String NAME = "NOTIFICATIONS";
private static XMLPrefsManager.XmlPrefsElement instance = null;
public static boolean default_app_state;
public enum Options implements XMLPrefsManager.XMLPrefsSave { public enum Options implements XMLPrefsManager.XMLPrefsSave {
enabled { enabled {
...@@ -53,6 +63,12 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -53,6 +63,12 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
return "true"; return "true";
} }
}, },
default_app_state {
@Override
public String defaultValue() {
return "true";
}
},
default_color { default_color {
@Override @Override
public String defaultValue() { public String defaultValue() {
...@@ -61,8 +77,8 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -61,8 +77,8 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
}; };
@Override @Override
public XMLPrefsManager.XMLPrefsRoot parent() { public XMLPrefsManager.XmlPrefsElement parent() {
return null; return instance;
} }
@Override @Override
...@@ -86,27 +102,32 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -86,27 +102,32 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
set(new File(Tuils.getFolder(), PATH), NAME, save.label(), new String[] {VALUE_ATTRIBUTE}, new String[] {value}); set(new File(Tuils.getFolder(), PATH), NAME, save.label(), new String[] {VALUE_ATTRIBUTE}, new String[] {value});
} }
private static File folder;
private static XMLPrefsManager.XMLPrefsList values; private static XMLPrefsManager.XMLPrefsList values;
private static Map<String, Integer> colors; private static List<NotificatedApp> apps;
private static List<Pattern> titleRegexs;
private static List<Pattern> textRegexs;
private static boolean created = false; private static boolean created = false;
private NotificationManager() {} private NotificationManager() {}
public static void create() { public static void create() {
instance = new NotificationManager();
default_app_state = XMLPrefsManager.get(boolean.class, Options.default_app_state);
if(created) return; if(created) return;
created = true; created = true;
folder = Tuils.getFolder(); apps = new ArrayList<>();
textRegexs = new ArrayList<>();
colors = new HashMap<>(); titleRegexs = new ArrayList<>();
values = new XMLPrefsManager.XMLPrefsList(); values = new XMLPrefsManager.XMLPrefsList();
try { try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File(folder, PATH); File file = new File(Tuils.getFolder(), PATH);
if(!file.exists() && !file.createNewFile()) return; if(!file.exists() && !file.createNewFile()) return;
Document d; Document d;
...@@ -141,19 +162,33 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -141,19 +162,33 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
break; break;
} }
} }
} else if(nn.equals(REGEX_NODE)) {
if(node.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element) node;
String regex = e.hasAttribute(REGEX_NODE) ? e.getAttribute(REGEX_NODE) : null;
if(regex == null) continue;
String on = e.hasAttribute(ON_ATTRIBUTE) ? e.getAttribute(ON_ATTRIBUTE) : null;
if(on == null || on.equals("text") || !on.equals("title")) textRegexs.add(Pattern.compile(regex));
else titleRegexs.add(Pattern.compile(regex));
}
} else { } else {
if(node.getNodeType() == Node.ELEMENT_NODE) { if(node.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element) node; Element e = (Element) node;
NotificatedApp app;
boolean enabled = !e.hasAttribute(ENABLED_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(ENABLED_ATTRIBUTE)); boolean enabled = !e.hasAttribute(ENABLED_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(ENABLED_ATTRIBUTE));
if(enabled) {
int color = e.hasAttribute(COLOR_ATTRIBUTE) ? Color.parseColor(e.getAttribute(COLOR_ATTRIBUTE)) : getColor(Options.default_color); int color = -1;
colors.put(nn, color); if(enabled)
} color = e.hasAttribute(COLOR_ATTRIBUTE) ? Color.parseColor(e.getAttribute(COLOR_ATTRIBUTE)) : XMLPrefsManager.getColor(Options.default_color);
app = new NotificatedApp(nn, color, enabled);
apps.add(app);
} }
} }
} }
if(enums.size() == 0) return; if(enums.size() == 0) return;
for(XMLPrefsManager.XMLPrefsSave s : enums) { for(XMLPrefsManager.XMLPrefsSave s : enums) {
...@@ -172,6 +207,18 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -172,6 +207,18 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
notificationsChangeFor(new ArrayList<>(Collections.singletonList(app))); notificationsChangeFor(new ArrayList<>(Collections.singletonList(app)));
} }
public static boolean textMatches(String text) {
if(text == null || text.length() == 0) return false;
for(Pattern p : textRegexs) if (p.matcher(text).matches()) return true;
return false;
}
public static boolean titleMatches(String text) {
if(text == null || text.length() == 0) return false;
for(Pattern p : titleRegexs) if (p.matcher(text).matches()) return true;
return false;
}
public static void notificationsChangeFor(List<NotificatedApp> apps) { public static void notificationsChangeFor(List<NotificatedApp> apps) {
String[] names = new String[apps.size()]; String[] names = new String[apps.size()];
final String[] attrNames = {ENABLED_ATTRIBUTE, COLOR_ATTRIBUTE}; final String[] attrNames = {ENABLED_ATTRIBUTE, COLOR_ATTRIBUTE};
...@@ -184,78 +231,21 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -184,78 +231,21 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
values[count][1] = app.color + Tuils.EMPTYSTRING; values[count][1] = app.color + Tuils.EMPTYSTRING;
} }
setMany(new File(folder, PATH), NAME, names, attrNames, values); setMany(new File(Tuils.getFolder(), PATH), NAME, names, attrNames, values);
} }
public static NotificatedApp getAppState(String pkg) { public static void excludeRegex(String regex, String on) {
try { XMLPrefsManager.set(new File(Tuils.getFolder(), PATH), NAME, REGEX_NODE, new String[] {ON_ATTRIBUTE, VALUE_ATTRIBUTE}, new String[] {on, regex});
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File(folder, PATH);
Document d;
try {
d = builder.parse(file);
} catch (Exception e) {
FileOutputStream stream = new FileOutputStream(file);
stream.write(XML_DEFAULT.getBytes());
stream.flush();
stream.close();
d = builder.parse(file);
}
Element root = (Element) d.getElementsByTagName(NAME).item(0);
NodeList nodes = root.getElementsByTagName("*");
for (int count = 0; count < nodes.getLength(); count++) {
Node node = nodes.item(count);
if(!pkg.equals(node.getNodeName())) continue;
Element e = (Element) node;
boolean enabled = !e.hasAttribute(ENABLED_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(ENABLED_ATTRIBUTE));
int color = e.hasAttribute(COLOR_ATTRIBUTE) ? Color.parseColor(e.getAttribute(COLOR_ATTRIBUTE)) : getColor(Options.default_color);
return new NotificatedApp(pkg, color, enabled);
}
} catch (Exception e) {
return null;
}
// default!!!
return new NotificatedApp(pkg, getColor(Options.default_color), true);
}
public static <T> T get(Class<T> c, XMLPrefsManager.XMLPrefsSave prefsSave) {
if(prefsSave != null) {
try {
return (T) transform(values.get(prefsSave).value, c);
} catch (Exception e) {
return (T) transform(prefsSave.defaultValue(), c);
}
}
return null;
} }
public static int getColor(XMLPrefsManager.XMLPrefsSave prefsSave) { public static int apps() {
if(prefsSave != null) { return apps.size();
try {
return (int) transform(values.get(prefsSave).value, Color.class);
} catch (Exception e) {
String def = prefsSave.defaultValue();
if(def == null || def.length() == 0) {
return -1;
}
return (int) transform(def, Color.class);
}
}
return 0;
} }
public static int colorsLength() { public static NotificatedApp getAppState(String pkg) {
return colors.size(); int index = apps.indexOf(pkg);
if(index == -1) return null;
return apps.get(index);
} }
public static class NotificatedApp { public static class NotificatedApp {
...@@ -276,6 +266,7 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement { ...@@ -276,6 +266,7 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if(obj instanceof NotificatedApp) return pkg.equals(((NotificatedApp) obj).pkg); if(obj instanceof NotificatedApp) return pkg.equals(((NotificatedApp) obj).pkg);
if(obj instanceof String) return pkg.equals(obj);
return this == obj; return this == obj;
} }
} }
......
...@@ -48,7 +48,7 @@ public class NotificationService extends NotificationListenerService { ...@@ -48,7 +48,7 @@ public class NotificationService extends NotificationListenerService {
NotificationManager.create(); NotificationManager.create();
if(NotificationManager.colorsLength() == 0) { if(NotificationManager.apps() == 0) {
// some nice apps // some nice apps
NotificationManager.notificationsChangeFor(new ArrayList<>(Arrays.asList( NotificationManager.notificationsChangeFor(new ArrayList<>(Arrays.asList(
new NotificatedApp("com.whatsapp", Color.parseColor("#25D366"), true), new NotificatedApp("com.whatsapp", Color.parseColor("#25D366"), true),
...@@ -94,8 +94,12 @@ public class NotificationService extends NotificationListenerService { ...@@ -94,8 +94,12 @@ public class NotificationService extends NotificationListenerService {
} }
String pack = sbn.getPackageName(); String pack = sbn.getPackageName();
NotificatedApp nApp = NotificationManager.getAppState(pack); NotificatedApp nApp = NotificationManager.getAppState(pack);
if(nApp == null || !nApp.enabled) { if( (nApp != null && !nApp.enabled)) {
return;
}
if(nApp == null && !NotificationManager.default_app_state) {
return; return;
} }
...@@ -117,6 +121,8 @@ public class NotificationService extends NotificationListenerService { ...@@ -117,6 +121,8 @@ public class NotificationService extends NotificationListenerService {
title = titleSequence.toString(); title = titleSequence.toString();
} }
if(NotificationManager.textMatches(text) || NotificationManager.titleMatches(title)) return;
Intent msgrcv = new Intent("Msg"); Intent msgrcv = new Intent("Msg");
msgrcv.putExtra("package", pack); msgrcv.putExtra("package", pack);
msgrcv.putExtra("title", title); msgrcv.putExtra("title", title);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment