diff --git a/app/build.gradle b/app/build.gradle index 44f482f50ae2887ac9fba69e6f2a7f2c8668ff57..dca622af51331c7cc079bf3e3f1d48db67600f60 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "ohi.andre.consolelauncher" minSdkVersion 8 targetSdkVersion 25 - versionCode 82 - versionName "4.11" + versionCode 83 + versionName "4.12" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 06e1caa4b00b3d2c22430fa7c2260bf6d7c4fefc..dc8d290b1f259d90ea0c894718b352693de02d08 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -109,7 +109,7 @@ <provider android:name="android.support.v4.content.FileProvider" - android:authorities="${applicationId}.provider" + android:authorities="ohi.andre.consolelauncher.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data diff --git a/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java b/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java index e7b83b99c3e8be042c10b3a09cfcd438dc8d0190..f42c58cd640883be5039a1befd966c271e833b4a 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java +++ b/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java @@ -37,7 +37,7 @@ public class LauncherActivity extends Activity implements Reloadable { private final int FILEUPDATE_DELAY = 300; public static final int COMMAND_REQUEST_PERMISSION = 10; - public static final int STORAGE_PERMISSION = 11; + public static final int STARTING_PERMISSION = 11; public static final int COMMAND_SUGGESTION_REQUEST_PERMISSION = 12; private final String FIRSTACCESS_KEY = "firstAccess"; @@ -100,16 +100,6 @@ public class LauncherActivity extends Activity implements Reloadable { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - SharedPreferences preferences = getPreferences(0); - boolean firstAccess = preferences.getBoolean(FIRSTACCESS_KEY, true); - if (firstAccess) { - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(FIRSTACCESS_KEY, false); - editor.commit(); - - Tuils.showTutorial(this); - } - if (isFinishing()) { return; } @@ -118,7 +108,8 @@ public class LauncherActivity extends Activity implements Reloadable { if (!(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { - ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, LauncherActivity.STORAGE_PERMISSION); + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, + LauncherActivity.STARTING_PERMISSION); return; } } @@ -127,6 +118,17 @@ public class LauncherActivity extends Activity implements Reloadable { } private void finishOnCreate() { + + SharedPreferences preferences = getPreferences(0); + boolean firstAccess = preferences.getBoolean(FIRSTACCESS_KEY, true); + if (firstAccess) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(FIRSTACCESS_KEY, false); + editor.commit(); + + Tuils.showTutorial(this); + } + File tuiFolder = getFolder(); Resources res = getResources(); starterIntent = getIntent(); @@ -199,6 +201,8 @@ public class LauncherActivity extends Activity implements Reloadable { protected void onStart() { super.onStart(); + overridePendingTransition(0,0); + if (ui != null && openKeyboardOnStart) { ui.onStart(); } @@ -289,13 +293,18 @@ public class LauncherActivity extends Activity implements Reloadable { ui.setOutput(getString(R.string.output_nopermissions)); } break; - case STORAGE_PERMISSION: - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - finishOnCreate(); - } else { - Toast.makeText(this, R.string.permissions_toast, Toast.LENGTH_LONG).show(); - finish(); + case STARTING_PERMISSION: + int count = 0; + while(count < permissions.length && count < grantResults.length) { + if( (permissions[count].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE) || permissions[count].equals(Manifest.permission.READ_EXTERNAL_STORAGE)) + && grantResults[count] == PackageManager.PERMISSION_DENIED) { + Toast.makeText(this, R.string.permissions_toast, Toast.LENGTH_LONG).show(); + finish(); + return; + } + count++; } + finishOnCreate(); break; case COMMAND_SUGGESTION_REQUEST_PERMISSION: if (grantResults.length == 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) { diff --git a/app/src/main/java/ohi/andre/consolelauncher/MainManager.java b/app/src/main/java/ohi/andre/consolelauncher/MainManager.java index b74c2691898c18485c3c5b3792c4aa2eedbef54b..d29db175d074607d2028067a44f6e07f4fa2b187 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/MainManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/MainManager.java @@ -4,6 +4,7 @@ import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.util.Log; import java.util.ArrayList; import java.util.List; @@ -43,9 +44,9 @@ public class MainManager { private final int LAST_COMMANDS_SIZE = 20; private CmdTrigger[] triggers = new CmdTrigger[]{ - new AppTrigger(), new AliasTrigger(), new TuiCommandTrigger(), + new AppTrigger(), // keep this as last trigger new SystemCommandTrigger() }; @@ -154,8 +155,10 @@ public class MainManager { @Override public boolean trigger(ExecInfo info, Outputable out, String input) { String alias = info.aliasManager.getAlias(input); - if (alias == null) + if (alias == null) { return false; + } + Log.e("andre", alias); info.executer.exec(alias); diff --git a/app/src/main/java/ohi/andre/consolelauncher/UIManager.java b/app/src/main/java/ohi/andre/consolelauncher/UIManager.java index 220df25ff591d050b80e60d32b77b156f6819f22..c84c141af5da6d3e15d32925403ab37d9f08f948 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/UIManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/UIManager.java @@ -466,6 +466,7 @@ public class UIManager implements OnTouchListener { private void openKeyboard() { mTerminalAdapter.requestInputFocus(); imm.showSoftInput(mTerminalAdapter.getInputView(), InputMethodManager.SHOW_IMPLICIT); + mTerminalAdapter.scrollToEnd(); } private void closeKeyboard() { @@ -500,7 +501,7 @@ public class UIManager implements OnTouchListener { // update ram public void updateRamDetails() { - ram.setText("RAM: " + Tuils.ramDetails(activityManager, memory)); + ram.setText("free ram: " + Tuils.ramDetails(activityManager, memory)); } public void focusTerminal() { 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 3d9b4244d77a89dcac5ea67897633f61118c3a82..4372265b0f2fdf3a5bd622a5515309fc604964ea 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java +++ b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java @@ -1,6 +1,7 @@ package ohi.andre.consolelauncher.commands; import android.annotation.SuppressLint; +import android.util.Log; import java.io.File; import java.util.ArrayList; @@ -129,6 +130,10 @@ public class CommandTuils { } private static ArgInfo textList(String input) { + if (input == null) { + return null; + } + List<String> strings = new ArrayList<>(); char[] chars = input.toCharArray(); diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandsPreferences.java b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandsPreferences.java new file mode 100644 index 0000000000000000000000000000000000000000..2d1d859e19c10cc2d317efad7685b554339f044b --- /dev/null +++ b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandsPreferences.java @@ -0,0 +1,41 @@ +package ohi.andre.consolelauncher.commands; + +import java.util.HashMap; + +import ohi.andre.consolelauncher.managers.PreferencesManager; + +/** + * Created by francescoandreuzzi on 06/01/2017. + */ + +public class CommandsPreferences { + + public static final int DEFAULT_PARAM = 10; + + private HashMap<String, Preference> preferenceHashMap; + + public CommandsPreferences(PreferencesManager preferencesManager) { + preferenceHashMap = new HashMap<>(); + +// search + Preference searchP = new Preference(); + searchP.add(preferencesManager.getValue(PreferencesManager.DEFAULT_SEARCH), DEFAULT_PARAM); + preferenceHashMap.put("search", searchP); + } + + public Preference forCommand(String cmd) { + return preferenceHashMap.get(cmd); + } + + public class Preference { + HashMap<Integer, String> prefs = new HashMap<>(); + + public void add(String pref, int id) { + prefs.put(id, pref); + } + + public String get(int id) { + return prefs.get(id); + } + } +} diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java b/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java index a8bb78398f805339bfb8da4bae37f21b607f5755..49e834c2a44375e47f14d9b40ccf080fa692b88d 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java +++ b/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java @@ -74,6 +74,8 @@ public class ExecInfo { // reload field public Reloadable reloadable; + public CommandsPreferences cmdPrefs; + // execute a command public CommandExecuter executer; // current set of args @@ -103,6 +105,8 @@ public class ExecInfo { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1) initFlash(context); + this.cmdPrefs = new CommandsPreferences(prefsMgr); + this.player = p; this.contacts = c; diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java index 1465bd1025f7f155ebff299dfb22a45ef217a0b4..38e00b1d754c6f1472f31533f12a2a560f464a09 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java +++ b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java @@ -1,32 +1,51 @@ package ohi.andre.consolelauncher.commands.raw; import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.commands.CommandAbstraction; import ohi.andre.consolelauncher.commands.ExecInfo; import ohi.andre.consolelauncher.managers.AppsManager; +import ohi.andre.consolelauncher.tuils.Tuils; public class apps implements CommandAbstraction { private final String HIDE_PARAM = "-h"; private final String UNHIDE_PARAM = "-uh"; private final String SHOWHIDDEN_PARAM = "-sh"; + private final String PLAYSTORE_PARAM = "-ps"; + private final String SETTINGS_PARAM = "-st"; + private final String FORCE_PARAM = "-f"; @Override public String exec(ExecInfo info) { String param = info.get(String.class, 0); String app = info.get(String.class, 1); - if (app == null) + if (app == null) { return info.res.getString(helpRes()); + } - if (param.equals(HIDE_PARAM)) + if (param.equals(HIDE_PARAM)) { return hideApp(info, app); - else if (param.equals(UNHIDE_PARAM)) + } else if (param.equals(UNHIDE_PARAM)) { return unHideApp(info, app); - else + } else if (param.equals(PLAYSTORE_PARAM)) { + openPlaystore(info.context, app); + return info.context.getString(R.string.output_showplaystore) + Tuils.SPACE + app; + } else if (param.equals(SETTINGS_PARAM)) { + openSettings(info.context, app); + return info.context.getString(R.string.output_showsettings) + Tuils.SPACE + app; + } else if (param.equals(FORCE_PARAM)) { + Intent intent = info.appsManager.getIntent(app); + info.context.startActivity(intent); + return info.context.getString(R.string.starting_app) + Tuils.SPACE + app; + } else { return info.res.getString(helpRes()); + } } private String hideApp(ExecInfo info, String app) { @@ -34,7 +53,7 @@ public class apps implements CommandAbstraction { String result = info.appsManager.hideApp(app); if (result != null) { editor.commit(); - return result + " " + info.res.getString(R.string.output_hideapp); + return result + Tuils.SPACE + info.res.getString(R.string.output_hideapp); } else return info.res.getString(R.string.output_appnotfound); } @@ -44,7 +63,7 @@ public class apps implements CommandAbstraction { String result = info.appsManager.unhideApp(app); if (result != null) { editor.commit(); - return result + " " + info.res.getString(R.string.output_unhideapp); + return result + Tuils.SPACE + info.res.getString(R.string.output_unhideapp); } else return info.res.getString(R.string.output_appnotfound); } @@ -53,6 +72,18 @@ public class apps implements CommandAbstraction { return info.appsManager.printApps(AppsManager.HIDDEN_APPS); } + private void openSettings(Context context, String packageName) { + Tuils.openSettingsPage(context, packageName); + } + + private void openPlaystore(Context context, String packageName) { + try { + context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName))); + } catch (Exception e) { + context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName))); + } + } + @Override public int helpRes() { return R.string.help_apps; @@ -83,7 +114,10 @@ public class apps implements CommandAbstraction { return new String[]{ HIDE_PARAM, UNHIDE_PARAM, - SHOWHIDDEN_PARAM + SHOWHIDDEN_PARAM, + SETTINGS_PARAM, + PLAYSTORE_PARAM, + FORCE_PARAM }; } diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java index bcb6d60a14c23adad7dae3aea7564cffb027cdbf..7d5082693a0f30a77dcdf500c17a03bbdbb34ad9 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java +++ b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java @@ -5,6 +5,7 @@ import android.app.Activity; import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.commands.CommandAbstraction; import ohi.andre.consolelauncher.commands.ExecInfo; +import ohi.andre.consolelauncher.managers.ContactManager; import ohi.andre.consolelauncher.managers.PreferencesManager; public class refresh implements CommandAbstraction { @@ -14,6 +15,8 @@ public class refresh implements CommandAbstraction { info.appsManager.fill(((Activity) info.context).getPreferences(0)); info.preferencesManager.refresh(PreferencesManager.ALIAS); info.aliasManager.reload(); + info.player.refresh(info.context); + info.contacts = new ContactManager(info.context); return info.res.getString(R.string.output_refresh); } diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java index 4ddbf4dd22ccbb93faca643ac86544d9e4e51935..05036c262b48f5cf6309be375b01b901bd864e37 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java +++ b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java @@ -12,6 +12,7 @@ import java.util.List; import ohi.andre.comparestring.Compare; import ohi.andre.consolelauncher.R; import ohi.andre.consolelauncher.commands.CommandAbstraction; +import ohi.andre.consolelauncher.commands.CommandsPreferences; import ohi.andre.consolelauncher.commands.ExecInfo; import ohi.andre.consolelauncher.managers.FileManager; import ohi.andre.consolelauncher.tuils.Tuils; @@ -33,10 +34,18 @@ public class search implements CommandAbstraction { @Override public String exec(ExecInfo info) { - String param = info.get(String.class, 0); List<String> args = info.get(ArrayList.class, 1); - if (args == null) { - return info.res.getString(R.string.output_nothing_found); + + String param = info.get(String.class, 0); + if(param == null) { + return info.context.getString(R.string.output_nothing_found); + } + if(!param.startsWith("-")) { + if(args == null) { + args = new ArrayList<>(); + } + args.add(0,param); + param = info.cmdPrefs.forCommand("search").get(CommandsPreferences.DEFAULT_PARAM); } switch (param) { @@ -51,7 +60,7 @@ public class search implements CommandAbstraction { case URL_PARAM: return url(args.get(0), info.context, info.res); default: - return info.res.getString(R.string.output_invalid_param); + return info.res.getString(R.string.output_invalid_param) + Tuils.SPACE + param; } } diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java index 024cbbf08ce2f2db1e53fcd53ecc493808ca05dd..17ff38cd6c13352565b9d7e646408aeb7dde7491 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java @@ -42,10 +42,6 @@ public class AliasManager implements Reloadable { return alias.get(s); } - public Set<String> getAliass() { - return alias.keySet(); - } - @Override public void reload() { alias = new HashMap<>(); diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java index dcf1d532881d9cca4e1093acc5470899ae0e0dc2..c663e266ad5bba98da138db06afc8e8ea537ecf0 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java @@ -14,6 +14,7 @@ import android.os.Build; import android.util.Log; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -154,9 +155,12 @@ public class AppsManager { } public String findPackage(String name) { - List<AppInfo> allApps = new ArrayList<>(appsHolder.getApps()); - allApps.addAll(hiddenApps); - return findPackage(allApps, null, name); + List<AppInfo> apps = appsHolder.getApps(); + if(apps != null) { + apps.addAll(hiddenApps); + return findPackage(apps, null, name); + } + return null; } public String findPackage(List<AppInfo> appList, List<String> labels, String name) { @@ -478,9 +482,8 @@ public class AppsManager { continue Second; } - if (!info.equals(info2) && info.publicLabel.equals(info2.publicLabel)) { - list.set(count, new AppInfo(info2.packageName, getNewLabel(info2.publicLabel, info2.packageName), - info2.launchedTimes)); + if (info.publicLabel.toLowerCase().replace(Tuils.SPACE, Tuils.EMPTYSTRING).equals(info2.publicLabel.replace(Tuils.SPACE, Tuils.EMPTYSTRING))) { + list.set(count, new AppInfo(info2.packageName, getNewLabel(info2.publicLabel, info2.packageName), info2.launchedTimes)); } } } diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java index 9aae09f6227a4d15320903ed51b15b05747d81ac..b1e642f1f9f29983426101e83577115d89c0c053 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java @@ -37,14 +37,15 @@ public class ContactManager { } Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); - while (phones != null && phones.moveToNext()) { - String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); - String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); + if (phones != null) { + while (phones.moveToNext()) { + String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); + String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); - contacts.put(name, phoneNumber); - } - if (phones != null) + contacts.put(name, phoneNumber); + } phones.close(); + } return contacts; } diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java index 91d92b217461335642e4254660f6ad40ec8507de..ea9a2348739ed021564091d77c462355b7ca7f48 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java @@ -30,6 +30,9 @@ public class MusicManager implements OnCompletionListener { private int currentSongIndex = 0; private File currentSong = null; + private boolean fromMediastore; + File songsFolder; + private Outputable outputable; // headset broadcast @@ -50,13 +53,15 @@ public class MusicManager implements OnCompletionListener { c.registerReceiver(headsetReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); boolean randomActive = Boolean.parseBoolean(preferencesManager.getValue(PreferencesManager.PLAY_RANDOM)); - - if(Boolean.parseBoolean(preferencesManager.getValue(PreferencesManager.FROM_MEDIASTORE))) { - files = Tuils.getMediastoreSongs(c); + fromMediastore = Boolean.parseBoolean(preferencesManager.getValue(PreferencesManager.FROM_MEDIASTORE)); + if(fromMediastore) { + songsFolder = null; } else { - files = Tuils.getSongsInFolder(new File(preferencesManager.getValue(PreferencesManager.SONGSFOLDER))); + songsFolder = new File(preferencesManager.getValue(PreferencesManager.SONGSFOLDER)); } + refresh(c); + if(randomActive && files != null) { Collections.shuffle(files); } @@ -88,8 +93,9 @@ public class MusicManager implements OnCompletionListener { public List<String> getNames() { List<String> names = new ArrayList<>(); - for (File file : files) + for (File file : files) { names.add(file.getName()); + } Collections.sort(names); @@ -188,6 +194,15 @@ public class MusicManager implements OnCompletionListener { " (" + (100 * position / total) + "%)"; } + public void refresh(Context c) { + if(fromMediastore) { + files = Tuils.getMediastoreSongs(c); + } else { + files = Tuils.getSongsInFolder(songsFolder); + } + + } + @Override public void onCompletion(MediaPlayer mp) { outputable.onOutput(next()); diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java index 8edda30a0bb570af6f68799eadf8723be7a149be..27355d8d86b1ea51e48143c68eb13b7ff7ef1be5 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java +++ b/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java @@ -63,6 +63,8 @@ public class PreferencesManager { public static final String COMPARESTRING_APPS = "compareStringForApps"; public static final String SHOW_DONATE_MESSAGE = "showDonationMessage"; + public static final String DEFAULT_SEARCH = "defaultSearch"; + public static final String ALIAS_FILENAME = "alias.txt"; public static final int ALIAS = 11; 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 4cbb9771fd56548bad3902b65d988e06ab1d20c9..62ed4c6060a2ffbfcef4437395b8a67122bcfe51 100755 --- a/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java +++ b/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java @@ -7,6 +7,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.MemoryInfo; import android.app.admin.DevicePolicyManager; +import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; @@ -19,6 +20,7 @@ import android.provider.MediaStore; import android.provider.Settings; import android.support.v4.content.FileProvider; import android.text.TextUtils; +import android.util.Log; import android.util.Patterns; import android.widget.Toast; @@ -76,7 +78,10 @@ public class Tuils { for (File file : files) { if (file.isDirectory()) { - songs.addAll(getSongsInFolder(file)); + List<File> s = getSongsInFolder(file); + if(s != null) { + songs.addAll(s); + } } else if (containsExtension(MusicManager.MUSIC_EXTENSIONS, file.getName())) { songs.add(file); @@ -92,13 +97,12 @@ public class Tuils { } @TargetApi(Build.VERSION_CODES.GINGERBREAD) - public static void openSettingsPage(Activity c, String toast) { + public static void openSettingsPage(Context c, String packageName) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - Uri uri = Uri.fromParts("package", c.getPackageName(), null); + Uri uri = Uri.fromParts("package", packageName, null); intent.setData(uri); c.startActivity(intent); - Toast.makeText(c, toast, Toast.LENGTH_LONG).show(); } public static void requestAdmin(Activity a, ComponentName component, String label) { @@ -300,6 +304,9 @@ public class Tuils { } public static boolean isAlpha(String s) { + if(s == null) { + return false; + } char[] chars = s.toCharArray(); for (char c : chars) @@ -310,6 +317,9 @@ public class Tuils { } public static boolean isNumber(String s) { + if(s == null) { + return false; + } char[] chars = s.toCharArray(); for (char c : chars) { @@ -346,145 +356,52 @@ public class Tuils { for (Account a : accs) if (email.matcher(a.name).matches()) return a.name; - } catch (Exception e) { + } catch (SecurityException e) { return null; } return null; } public static Intent openFile(Context context, File url) { - Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", url); - Intent intent = new Intent(Intent.ACTION_VIEW); - if (url.toString().contains(".doc") || url.toString().contains(".docx")) { - // Word document - intent.setDataAndType(uri, "application/msword"); - } else if (url.toString().contains(".apk")) { - // apk - intent.setDataAndType(uri, - "application/vnd.android.package-archive"); - } else if (url.toString().contains(".pdf")) { - // PDF file - intent.setDataAndType(uri, "application/pdf"); - } else if (url.toString().contains(".ppt") - || url.toString().contains(".pptx")) { - // Powerpoint file - intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); - } else if (url.toString().contains(".xls") - || url.toString().contains(".xlsx")) { - // Excel file - intent.setDataAndType(uri, "application/vnd.ms-excel"); - } else if (url.toString().contains(".zip") - || url.toString().contains(".rar")) { - // ZIP Files - intent.setDataAndType(uri, "application/zip"); - } else if (url.toString().contains(".rtf")) { - // RTF file - intent.setDataAndType(uri, "application/rtf"); - } else if (url.toString().contains(".wav") - || url.toString().contains(".mp3")) { - // WAV audio file - intent.setDataAndType(uri, "audio/x-wav"); - } else if (url.toString().contains(".gif")) { - // GIF file - intent.setDataAndType(uri, "image/gif"); - } else if (url.toString().contains(".jpg") - || url.toString().contains(".jpeg") - || url.toString().contains(".png")) { - // JPG file - intent.setDataAndType(uri, "image/jpeg"); - } else if (url.toString().contains(".txt")) { - // Text file - intent.setDataAndType(uri, "text/plain"); - } else if (url.toString().contains(".3gp") - || url.toString().contains(".mpg") - || url.toString().contains(".mpeg") - || url.toString().contains(".mpe") - || url.toString().contains(".mp4") - || url.toString().contains(".avi")) { - // Video files - intent.setDataAndType(uri, "video/*"); - } else { - intent.setDataAndType(uri, "*/*"); - } + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + Uri uri = FileProvider.getUriForFile(context, "ohi.andre.consolelauncher.provider", url); + intent.setDataAndType(uri, context.getContentResolver().getType(uri)); + return intent; } public static Intent shareFile(Context c, File url) { - Uri uri = FileProvider.getUriForFile(c, BuildConfig.APPLICATION_ID + ".provider", url); - - Intent intent = new Intent(Intent.ACTION_VIEW); - - if (url.toString().contains(".doc") || url.toString().contains(".docx")) { - // Word document - intent.setDataAndType(uri, "application/msword"); - } else if (url.toString().contains(".apk")) { - // apk - intent.setDataAndType(uri, - "application/vnd.android.package-archive"); - } else if (url.toString().contains(".pdf")) { - // PDF file - intent.setDataAndType(uri, "application/pdf"); - } else if (url.toString().contains(".ppt") - || url.toString().contains(".pptx")) { - // Powerpoint file - intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); - } else if (url.toString().contains(".xls") - || url.toString().contains(".xlsx")) { - // Excel file - intent.setDataAndType(uri, "application/vnd.ms-excel"); - } else if (url.toString().contains(".zip") - || url.toString().contains(".rar")) { - // ZIP Files - intent.setDataAndType(uri, "application/zip"); - } else if (url.toString().contains(".rtf")) { - // RTF file - intent.setDataAndType(uri, "application/rtf"); - } else if (url.toString().contains(".wav") - || url.toString().contains(".mp3")) { - // WAV audio file - intent.setDataAndType(uri, "audio/x-wav"); - } else if (url.toString().contains(".gif")) { - // GIF file - intent.setDataAndType(uri, "image/gif"); - } else if (url.toString().contains(".jpg") - || url.toString().contains(".jpeg") - || url.toString().contains(".png")) { - // JPG file - intent.setDataAndType(uri, "image/jpeg"); - } else if (url.toString().contains(".txt")) { - // Text file - intent.setDataAndType(uri, "text/plain"); - } else if (url.toString().contains(".3gp") - || url.toString().contains(".mpg") - || url.toString().contains(".mpeg") - || url.toString().contains(".mpe") - || url.toString().contains(".mp4") - || url.toString().contains(".avi")) { - // Video files - intent.setDataAndType(uri, "video/*"); - } else { - intent.setDataAndType(uri, "*/*"); - } + Intent intent = new Intent(Intent.ACTION_SEND); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(Intent.EXTRA_STREAM, uri); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - return intent; + Uri uri = FileProvider.getUriForFile(c, "ohi.andre.consolelauncher.provider", url); + intent.setDataAndType(uri, c.getContentResolver().getType(uri)); + + return intent; } public static String getInternalDirectoryPath() { - return Environment.getExternalStorageDirectory().getAbsolutePath(); + File f = Environment.getExternalStorageDirectory(); + if(f != null) { + return f.getAbsolutePath(); + } + return null; } public static File getTuiFolder() { - return new File(Tuils.getInternalDirectoryPath(), TUI_FOLDER); + String internalDir = Tuils.getInternalDirectoryPath(); + if(internalDir == null) { + return null; + } + return new File(internalDir, TUI_FOLDER); } public static List<File> getMediastoreSongs(Context activity) { @@ -498,22 +415,18 @@ public class Tuils { Cursor cur = cr.query(uri, null, selection, null, sortOrder); int count = 0; - if(cur != null) - { + if(cur != null) { count = cur.getCount(); - - if(count > 0) - { - while(cur.moveToNext()) - { + if(count > 0) { + while(cur.moveToNext()) { String data = cur.getString(cur.getColumnIndex(MediaStore.Audio.Media.DATA)); paths.add(new File(data)); } } - } - cur.close(); + cur.close(); + } return paths; } diff --git a/app/src/main/res/raw/settings.txt b/app/src/main/res/raw/settings.txt index 1b72c360c9410fdffc063b11743ea85edc514917..fc8cfc27979e07f1ba8fc67ce4b8ca4627fa0241 100755 --- a/app/src/main/res/raw/settings.txt +++ b/app/src/main/res/raw/settings.txt @@ -50,3 +50,6 @@ showSuggestions=true enableEnterInPhysicalKeyboard=false compareStringForApps=false showDonationMessage=true + +// commands +defaultSearch=-g diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fdddff0f0196d52999d4ab0cf772d366fe279847..d0c1c734e8d3dfcb96bee5868ee4bcfb60268483 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,15 +6,17 @@ <string name="separator_text_su">$</string> <string name="su">T-UI got SU permission</string> <string name="nosu">Your device isn\'t rooted</string> - <string name="permissions_toast">You have to grant Storage permission at least</string> + <string name="permissions_toast">You have to grant Storage permission</string> <string name="version_label">Version:</string> - <string name="rate_donate_text">\nDo you like T-UI? Rate T-UI on Play Store (command: >>rate) or offer me a coffee (command: >>donate).\n\nYou can disable this message with >>tuisettings</string> + <string name="rate_donate_text">\nDo you like my work? Rate on Play Store (command: >>rate) or offer me a coffee (command: >>donate). Thank you for using T-UI.\n\nYou can disable this message in >>tuisettings</string> <!-- app mgr --> <string name="output_appnotfound">Application not found</string> <string name="output_hideapp">state: hidden</string> <string name="output_unhideapp">state: shown</string> + <string name="output_showplaystore">Play Store page:</string> + <string name="output_showsettings">Settings:</string> <!-- label --> <string name="share_label">Share</string> @@ -92,7 +94,7 @@ \n(Francesco Andreuzzi) - CompareString \nApache commons-io </string> - <string name="output_refresh">Refreshed: apps and alias</string> + <string name="output_refresh">Refresh: apps, alias, music, contacts</string> <string name="output_rate">Thank you!</string> <string name="output_lookfortutorial">Looking for Tutorial</string> @@ -102,11 +104,15 @@ <string name="help_aliases">Print alias that are currently saved in \"sdcard\"/t-ui/alias.txt</string> <string name="help_aliasfile">Open alias.txt</string> <string name="help_apps">Manage your apps - \nUsage apps [option] [app name] + \n\nUsage: + \napps [option] [app name] \n\n[option] can be: \n-h [app name] -> hide the app \n-uh [app name] -> unhide the app \n-sh -> show hidden apps + \n-ps [app name] -> show Google Play Store page for this app + \n-st [app name] -> show Settings details for this app + \n-f [app name] -> force t-ui to open this app \nno option -> list your apps \n\nExample: \napps -h whatsapp @@ -119,7 +125,8 @@ </string> <string name="help_contacts">Print your contacts</string> <string name="help_cp">Copy one or more files to a folder - \nUsage: [su] cp [files] [folder] + \nUsage: + \n[su] cp [files] [folder] \n\nExample: \nsu cp fool.txt fool2.png myFolder \ncp myFile.txt myFolder @@ -128,18 +135,21 @@ <string name="help_donate">Donate something to the developer</string> <string name="help_flash">Toggle the flashlight</string> <string name="help_help">Print a list of available commands at this moment, or informations about a command - \nUsage: help command + \nUsage: + \nhelp [command] \n\nExample: \nhelp search </string> <string name="help_mv">Move one or more files to a folder - \nUsage: [su] mv [files] [folder] + \nUsage: + \n[su] mv [files] [folder] \n\nsu mv fool.txt fool2.png myFolder \nmv fool.txt myFolder </string> <string name="help_next">Play the next track in the queue</string> <string name="help_listen">Play a specific track - \nUsage: listen trackname + \nUsage: + \nlisten trackname \n\nExample: \nplay back in black \n\n(The track has to be located in your Music Folder) @@ -152,13 +162,15 @@ </string> <string name="help_restart">Restart t-ui and load modified values</string> <string name="help_rm">Remove a file: - \nUsage: [su] rm [files] + \nUsage: + \n[su] rm [files] \n\nExample: \n\nsu rm fool.txt fool2.png \nrm Downloads/fool.txt </string> <string name="help_search">Search something somewhere - \nUsage: search [option] something + \nUsage: + \nsearch [option] something \n\n[option] can be: \n-g -> (Google Search) \n-p -> (Google Play Store) @@ -168,7 +180,8 @@ \nsearch -p T-UI </string> <string name="help_share">Share a file - \nUsage: share pathToFile + \nUsage: + \nshare pathToFile \n\nExample: \nshare fool.jpg </string> @@ -181,7 +194,8 @@ <string name="help_tuisettings">Open t-ui settings file</string> <string name="help_tutorial">Go to T-UI tutorial page</string> <string name="help_uninstall">Uninstall an application - \nUsage: uninstall appName OR packageName + \nUsage: + \nuninstall appName OR packageName \n\nExample: \nuninstall dropbox </string> @@ -189,17 +203,20 @@ <!-- linux --> <string name="help_cd">Change the current directory - \nUsage: cd path + \nUsage: + \ncd [path] \n\nExample: \ncd /storage/sdcard1/DCIM </string> <string name="help_open">Open a file with the default application - \nUsage: open pathToFile + \nUsage: + \nopen [pathToFile] \n\nExample: \nopen docs/fool.txt </string> <string name="help_ls">Print a list of the files in a directory - \nUsage: ls directory + \nUsage: + \nls [directory] \n\nExample: \nls Downloads </string>