From 60395106e5ec0905054ce10f6bf1bdcbfa3ef763 Mon Sep 17 00:00:00 2001 From: Vlad Mihalachi Date: Sun, 15 Mar 2015 09:26:28 +0100 Subject: [PATCH] Version 1.16: Accessory View and Black theme Accessory View and Black theme --- app-pro/build.gradle | 4 +- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 1 - .../java/com/maskyn/fileeditor/AdsHelper.java | 12 +- build/intermediates/dex-cache/cache.xml | 377 +++++++----------- build/intermediates/model_data.bin | Bin 648130 -> 625409 bytes .../turboeditor/activity/MainActivity.java | 42 +- .../dialogfragment/EncodingDialog.java | 1 + .../dialogfragment/ThemeDialog.java | 81 ++++ .../preferences/PreferenceHelper.java | 20 +- .../preferences/SettingsFragment.java | 44 +- .../turboeditor/texteditor/Patterns.java | 23 +- .../turboeditor/util/AccessoryView.java | 123 ++++++ .../turboeditor/util/ProCheckUtils.java | 4 +- .../turboeditor/util/ThemeUtils.java | 15 +- .../src/main/res/layout/activity_home.xml | 21 +- .../src/main/res/layout/dialog_theme_list.xml | 33 ++ .../src/main/res/layout/fragment_settings.xml | 35 +- .../sharedCode/src/main/res/raw/changelog.xml | 10 +- .../sharedCode/src/main/res/values/ids.xml | 2 +- .../src/main/res/values/strings.xml | 3 + 21 files changed, 536 insertions(+), 319 deletions(-) create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/ThemeDialog.java create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/AccessoryView.java create mode 100644 libraries/sharedCode/src/main/res/layout/dialog_theme_list.xml diff --git a/app-pro/build.gradle b/app-pro/build.gradle index 0a81e4c..3689ac2 100644 --- a/app-pro/build.gradle +++ b/app-pro/build.gradle @@ -27,8 +27,8 @@ android { applicationId "com.maskyn.fileeditorpro" minSdkVersion 11 targetSdkVersion 22 - versionCode 39 - versionName "1.15.1" + versionCode 41 + versionName "1.16" } compileOptions { diff --git a/app/build.gradle b/app/build.gradle index c4331c6..25c84fd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,8 +46,8 @@ android { applicationId "com.maskyn.fileeditor" minSdkVersion 11 targetSdkVersion 22 - versionCode 39 - versionName "1.15.1" + versionCode 41 + versionName "1.16" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 43f4755..dff57c8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,6 @@ - + + + - - - + + + - + sha1="5365d91f442ac54c37a5ae3ebbcd82d9f43835e9"> + - + revision="22.0.0" + sha1="1014d409d1af641616ca7a2b3fda549cf559d605"> + - + sha1="591d72211acc0b909b79c840e0b3ed9a0982d807"> + + + + - + sha1="66cee5a65742fef58c1dcdc0b892042f7bb1530b"> + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + sha1="905075e6c80f206bbe6cf1e809d2caa69f420c76"> + + + + + + + - + sha1="b5b92f469d515a13d778900f6d50c03d12f35504"> + + + + + + + + + + + + + + + + + + + - + sha1="74a89f0f8b56d9f11d70b8d8134cf4109f4797dc"> + - + sha1="4e86306289ace4aa0cfec44a05ed2b410d36989d"> + - + sha1="0a4af6a85230b990eb8690b696d2db9247338611"> + - - - - + sha1="d84409890828e07d344a3b9b1da545dba9897b51"> + + + + diff --git a/build/intermediates/model_data.bin b/build/intermediates/model_data.bin index 6036517976f6b6a9b520eb3b1476f633d85d0a98..6d8559d4df7f04ff93e2c5059cfebdd295a6d409 100644 GIT binary patch delta 11860 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 firstVisibleIndex && cursorPos <= lastVisibleIndex; + if (mantainCursorPos) firstVisibleIndex = cursorPos; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EncodingDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EncodingDialog.java index ee7d769..31e20cb 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EncodingDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EncodingDialog.java @@ -49,6 +49,7 @@ public class EncodingDialog extends DialogFragment implements AdapterView.OnItem Constants.CHARSET_ISO_2022_CN, Constants.CHARSET_ISO_2022_JP, Constants.CHARSET_ISO_2022_KR, + "ISO-8859-2", Constants.CHARSET_ISO_8859_5, Constants.CHARSET_ISO_8859_7, Constants.CHARSET_ISO_8859_8, diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/ThemeDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/ThemeDialog.java new file mode 100644 index 0000000..9434c5a --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/ThemeDialog.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2014 Vlad Mihalachi + * + * This file is part of Turbo Editor. + * + * Turbo Editor is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Turbo Editor is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package sharedcode.turboeditor.dialogfragment; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +import sharedcode.turboeditor.R; +import sharedcode.turboeditor.preferences.PreferenceHelper; + +public class ThemeDialog extends DialogFragment implements AdapterView.OnItemClickListener { + + private ListView list; + + public static ThemeDialog newInstance() { + final ThemeDialog f = new ThemeDialog(); + return f; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + + final View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_theme_list, null); + list = (ListView) view.findViewById(android.R.id.list); + + String[] themes = { + getString(R.string.theme_dark), getString(R.string.light_theme), getString(R.string.theme_black) + }; + + list.setAdapter(new ArrayAdapter<>(getActivity(), R.layout.item_single_choice, themes)); + list.setOnItemClickListener(this); + + int currentTheme = PreferenceHelper.getTheme(getActivity()); + + for (int i = 0; i < themes.length; i++) { + if (i == currentTheme) + list.setItemChecked(i, true); + } + + return new AlertDialog.Builder(getActivity()) + .setView(view) + .create(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + DialogListener target = (DialogListener) getTargetFragment(); + if (target == null) { + target = (DialogListener) getActivity(); + } + target.onThemeSelected(position); + this.dismiss(); + } + + public interface DialogListener { + void onThemeSelected(int result); + } +} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/PreferenceHelper.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/PreferenceHelper.java index ca0aaa7..529a11b 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/PreferenceHelper.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/PreferenceHelper.java @@ -57,8 +57,20 @@ public final class PreferenceHelper { return getPrefs(context).getBoolean("editor_wrap_content", true); } + public static int getTheme(Context context) { + return getPrefs(context).getInt("theme", 0); + } + + public static boolean getDarkTheme(Context context) { + return getPrefs(context).getInt("theme", 0) == 0; + } + public static boolean getLightTheme(Context context) { - return getPrefs(context).getBoolean("light_theme", false); + return getPrefs(context).getInt("theme", 0) == 1; + } + + public static boolean getBlackTheme(Context context) { + return getPrefs(context).getInt("theme", 0) == 2; } public static boolean getSuggestionActive(Context context) { @@ -158,8 +170,8 @@ public final class PreferenceHelper { getEditor(context).putBoolean("has_donated", value).commit(); } - public static void setLightTheme(Context context, boolean value) { - getEditor(context).putBoolean("light_theme", value).commit(); + public static void setTheme(Context context, int value) { + getEditor(context).putInt("theme", value).commit(); } public static void setSuggestionsActive(Context context, boolean value) { @@ -179,7 +191,7 @@ public final class PreferenceHelper { } public static void setSendErrorReport(Context context, boolean value) { - getEditor(context).putBoolean("ignore_back_button", value).commit(); + getEditor(context).putBoolean("send_error_reports", value).commit(); } public static void setEncoding(Context context, String value) { diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/SettingsFragment.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/SettingsFragment.java index e17666f..15bfd09 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/SettingsFragment.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/SettingsFragment.java @@ -20,6 +20,8 @@ package sharedcode.turboeditor.preferences; import android.app.Fragment; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.support.v7.widget.SwitchCompat; import android.view.LayoutInflater; @@ -32,9 +34,11 @@ import sharedcode.turboeditor.R; import sharedcode.turboeditor.activity.MainActivity; import sharedcode.turboeditor.dialogfragment.EncodingDialog; import sharedcode.turboeditor.dialogfragment.NumberPickerDialog; +import sharedcode.turboeditor.dialogfragment.ThemeDialog; +import sharedcode.turboeditor.util.ProCheckUtils; import sharedcode.turboeditor.util.ViewUtils; -public class SettingsFragment extends Fragment implements NumberPickerDialog.INumberPickerDialog, EncodingDialog.DialogListener { +public class SettingsFragment extends Fragment implements NumberPickerDialog.INumberPickerDialog, EncodingDialog.DialogListener, ThemeDialog.DialogListener { // Editor Variables private boolean sLineNumbers; @@ -43,7 +47,6 @@ public class SettingsFragment extends Fragment implements NumberPickerDialog.INu private boolean sUseMonospace; private boolean sReadOnly; - private boolean sLightTheme; private boolean sSuggestions; private boolean sAutoSave; private boolean sIgnoreBackButton; @@ -59,7 +62,6 @@ public class SettingsFragment extends Fragment implements NumberPickerDialog.INu sLineNumbers = PreferenceHelper.getLineNumbers(getActivity()); sReadOnly = PreferenceHelper.getReadOnly(getActivity()); - sLightTheme = PreferenceHelper.getLightTheme(getActivity()); sSuggestions = PreferenceHelper.getSuggestionActive(getActivity()); sAutoSave = PreferenceHelper.getAutoSave(getActivity()); sIgnoreBackButton = PreferenceHelper.getIgnoreBackButton(getActivity()); @@ -73,7 +75,7 @@ public class SettingsFragment extends Fragment implements NumberPickerDialog.INu // Our custom layout final View rootView = inflater.inflate(R.layout.fragment_settings, container, false); final SwitchCompat swLineNumbers, swSyntax, swWrapContent, swMonospace, swReadOnly; - final SwitchCompat swLightTheme, swSuggestions, swAutoSave, swIgnoreBackButton, swSplitText, swErrorReports; + final SwitchCompat swSuggestions, swAutoSave, swIgnoreBackButton, swSplitText, swErrorReports; swLineNumbers = (SwitchCompat) rootView.findViewById(R.id.switch_line_numbers); swSyntax = (SwitchCompat) rootView.findViewById(R.id.switch_syntax); @@ -81,7 +83,6 @@ public class SettingsFragment extends Fragment implements NumberPickerDialog.INu swMonospace = (SwitchCompat) rootView.findViewById(R.id.switch_monospace); swReadOnly = (SwitchCompat) rootView.findViewById(R.id.switch_read_only); - swLightTheme = (SwitchCompat) rootView.findViewById(R.id.switch_light_theme); swSuggestions = (SwitchCompat) rootView.findViewById(R.id.switch_suggestions_active); swAutoSave = (SwitchCompat) rootView.findViewById(R.id.switch_auto_save); swIgnoreBackButton = (SwitchCompat) rootView.findViewById(R.id.switch_ignore_backbutton); @@ -94,17 +95,31 @@ public class SettingsFragment extends Fragment implements NumberPickerDialog.INu swMonospace.setChecked(sUseMonospace); swReadOnly.setChecked(sReadOnly); - swLightTheme.setChecked(sLightTheme); swSuggestions.setChecked(sSuggestions); swAutoSave.setChecked(sAutoSave); swIgnoreBackButton.setChecked(sIgnoreBackButton); swSplitText.setChecked(sSplitText); swErrorReports.setChecked(sErrorReports); - TextView fontSizeView, encodingView, donateView, extraOptionsView; + TextView fontSizeView, encodingView, extraOptionsView, themeView, goPro; + goPro = (TextView) rootView.findViewById(R.id.drawer_button_go_pro); fontSizeView = (TextView) rootView.findViewById(R.id.drawer_button_font_size); encodingView = (TextView) rootView.findViewById(R.id.drawer_button_encoding); extraOptionsView = (TextView) rootView.findViewById(R.id.drawer_button_extra_options); + themeView = (TextView) rootView.findViewById(R.id.drawer_button_theme); + + ViewUtils.setVisible(goPro, !ProCheckUtils.isPro(getActivity())); + goPro.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final String appPackageName = "com.maskyn.fileeditorpro"; + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); + } catch (android.content.ActivityNotFoundException anfe) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); + } + } + }); swLineNumbers.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override @@ -183,11 +198,12 @@ public class SettingsFragment extends Fragment implements NumberPickerDialog.INu } }); - swLightTheme.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + themeView.setOnClickListener(new View.OnClickListener() { @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - PreferenceHelper.setLightTheme(getActivity(), isChecked); - ((MainActivity) getActivity()).aPreferenceValueWasChanged(PreferenceChangeType.THEME_CHANGE); + public void onClick(View v) { + ThemeDialog dialogFrag = ThemeDialog.newInstance(); + dialogFrag.setTargetFragment(SettingsFragment.this, 0); + dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); } }); @@ -242,4 +258,10 @@ public class SettingsFragment extends Fragment implements NumberPickerDialog.INu PreferenceHelper.setEncoding(getActivity(), result); ((MainActivity) getActivity()).aPreferenceValueWasChanged(PreferenceChangeType.ENCODING); } + + @Override + public void onThemeSelected(int result) { + PreferenceHelper.setTheme(getActivity(), result); + ((MainActivity) getActivity()).aPreferenceValueWasChanged(PreferenceChangeType.THEME_CHANGE); + } } diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/Patterns.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/Patterns.java index cca92e6..71ffed3 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/Patterns.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/Patterns.java @@ -55,17 +55,20 @@ public class Patterns { "(!|,|\\(|\\)|\\+|\\-|\\*|<|>|=|\\.|\\?|;|\\{|\\}|\\[|\\]|\\|)"); public static final Pattern NUMBERS_OR_SYMBOLS = Pattern.compile(NUMBERS.pattern()+"|"+SYMBOLS.pattern()); public static final Pattern GENERAL_KEYWORDS = Pattern.compile( - "\\b(alignas|alignof|and|and_eq|asm|auto|bitand|bitorbool|break|case|catch|char|" - + "char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype" - + "|default|delete|do|double|dynamic_cast|echo|else|enum|explicit|export|extern|" - + "false|float|for|friend|function|goto|if|inline|int|mutable|namespace|new|noexcept|" - + "not|not_eq|null|nullptr|operator|or|or_eq|private|protected|public|register|" - + "reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast" - + "|struct|switch|template|this|thread_local|throw|true|try|typedef|typeid|typename|undefined" - + "|union|unsigned|using|var|virtual|void|volatile|wchar_t|while|xor|xor_eq|)\\b", Pattern.CASE_INSENSITIVE); + "(?<=\\b)((alignas)|(alignof)|(and)|(and_eq)|(asm)|(auto)|(bitand)|(bitorbool)|(break)|(case)|(catch)|(char)|(" + + "char16_t)|(char32_t)|(class)|(compl)|(const)|(constexpr)|(const_cast)|(continue)|(decltype" + + ")|(default)|(delete)|(do)|(double)|(dynamic_cast)|(echo)|(else)|(enum)|(explicit)|(export)|(extern)|(" + + "false)|(float)|(for)|(friend)|(function)|(goto)|(if)|(inline)|(int)|(mutable)|(namespace)|(new)|(noexcept)|(" + + "not)|(not_eq)|(null)|(nullptr)|(operator)|(or)|(or_eq)|(private)|(protected)|(public)|(register)|(" + + "reinterpret_cast)|(return)|(short)|(signed)|(sizeof)|(static)|(static_assert)|(static_cast" + + ")|(struct)|(switch)|(template)|(this)|(thread_local)|(throw)|(true)|(try)|(typedef)|(typeid)|(typename)|(undefined" + + ")|(union)|(unsigned)|(using)|(var)|(virtual)|(void)|(volatile)|(wchar_t)|(while)|(xor)|(xor_eq))(?=\\b)", Pattern.CASE_INSENSITIVE); public static final Pattern PY_KEYWORDS = Pattern.compile( - "\\b(int|float|long|complex|str|unicode|list|tuple|bytearray|buffer|xrange|set|frozenset|dict|bool)|(True|False|None|self|NotImplemented|Ellipsis|__debug__|__file__)|(and|del|from|not|while|as|elif|global|or|with|assert|else|if|pass|yield|break|except|import|print|class|exec|in|raise|continue|finally|is|return|def|for|lambda|try)|(ArithmeticError|AssertionError|AttributeError|BaseException|DeprecationWarning|EnvironmentError|EOFError|Exception|FloatingPointError|FutureWarning|GeneratorExit|IOError|ImportError|ImportWarning|IndexError|KeyError|KeyboardInterrupt|LookupError|MemoryError|NameError|NotImplementedError|OSError|OverflowError|PendingDeprecationWarning|ReferenceError|RuntimeError|RuntimeWarning|StandardError|StopIteration|SyntaxError|SyntaxWarning|SystemError|SystemExit|TypeError|UnboundLocalError|UserWarning|UnicodeError|UnicodeWarning|UnicodeEncodeError|UnicodeDecodeError|UnicodeTranslateError|ValueError|Warning|WindowsError|ZeroDivisionError)\\b", Pattern.CASE_INSENSITIVE); + "(?<=\\b)((int)|(float)|(long)|(complex)|(str)|(unicode)|(list)|(tuple)|(bytearray)|(buffer)|(xrange)|(set)|(frozenset)|(dict)|(bool)" + + "|(True)|(False)|(None)|(self)|(NotImplemented)|(Ellipsis)|(__debug__)|(__file__)" + + "|(and)|(del)|(from)|(not)|(while)|(as)|(elif)|(global)|(or)|(with)|(assert)|(else)|(if)|(pass)|(yield)|(break)|(except)|(import)|(print)|(class)|(exec)|(in)|(raise)|(continue)|(finally)|(is)|(return)|(def)|(for)|(lambda)|(try)" + + "|(ArithmeticError)|(AssertionError)|(AttributeError)|(BaseException)|(DeprecationWarning)|(EnvironmentError)|(EOFError)|(Exception)|(FloatingPointError)|(FutureWarning)|(GeneratorExit)|(IOError)|(ImportError)|(ImportWarning)|(IndexError)|(KeyError)|(KeyboardInterrupt)|(LookupError)|(MemoryError)|(NameError)|(NotImplementedError)|(OSError)|(OverflowError)|(PendingDeprecationWarning)|(ReferenceError)|(RuntimeError)|(RuntimeWarning)|(StandardError)|(StopIteration)|(SyntaxError)|(SyntaxWarning)|(SystemError)|(SystemExit)|(TypeError)|(UnboundLocalError)|(UserWarning)|(UnicodeError)|(UnicodeWarning)|(UnicodeEncodeError)|(UnicodeDecodeError)|(UnicodeTranslateError)|(ValueError)|(Warning)|(WindowsError)|(ZeroDivisionError))(?=\\b)", Pattern.CASE_INSENSITIVE); public static final Pattern LUA_KEYWORDS = Pattern.compile( "@[A-Za-z0-9_\\.]*|\\b(local|global|boolean|number|userdata)\\b|\\b(true|false|nil)\\b|\\b(return|then|while|and|break|do|else|elseif|end|for|function|if|in|not|or|repeat|until|thread|table)\\b" + @@ -82,7 +85,7 @@ public class Patterns { public static final Pattern GENERAL_COMMENTS_NO_SLASH = Pattern.compile( "/\\*(?:.|[\\n\\r])*?\\*/|#.*"); public static final Pattern SQL_KEYWORDS = Pattern.compile( - "\\b(ADD|EXCEPT|PERCENT|ALL|EXEC|PLAN|ALTER|EXECUTE|PRECISION|AND|EXISTS|PRIMARY|ANY|EXIT|PRINT|AS|FETCH|PROC|ASC|FILE|PROCEDURE|AUTHORIZATION|FILLFACTOR|PUBLIC|BACKUP|FOR|RAISERROR|BEGIN|FOREIGN|READ|BETWEEN|FREETEXT|READTEXT|BREAK|FREETEXTTABLE|RECONFIGURE|BROWSE|FROM|REFERENCES|BULK|FULL|REPLICATION|BY|FUNCTION|RESTORE|CASCADE|GOTO|RESTRICT|CASE|GRANT|RETURN|CHECK|GROUP|REVOKE|CHECKPOINT|HAVING|RIGHT|CLOSE|HOLDLOCK|ROLLBACK|CLUSTERED|IDENTITY|ROWCOUNT|COALESCE|IDENTITY_INSERT|ROWGUIDCOL|COLLATE|IDENTITYCOL|RULE|COLUMN|IF|SAVE|COMMIT|IN|SCHEMA|COMPUTE|INDEX|SELECT|CONSTRAINT|INNER|SESSION_USER|CONTAINS|INSERT|SET|CONTAINSTABLE|INTERSECT|SETUSER|CONTINUE|INTO|SHUTDOWN|CONVERT|IS|SOME|CREATE|JOIN|STATISTICS|CROSS|KEY|SYSTEM_USER|CURRENT|KILL|TABLE|CURRENT_DATE|LEFT|TEXTSIZE|CURRENT_TIME|LIKE|THEN|CURRENT_TIMESTAMP|LINENO|TO|CURRENT_USER|LOAD|TOP|CURSOR|NATIONAL|TRAN|DATABASE|NOCHECK|TRANSACTION|DBCC|NONCLUSTERED|TRIGGER|DEALLOCATE|NOT|TRUNCATE|DECLARE|NULL|TSEQUAL|DEFAULT|NULLIF|UNION|DELETE|OF|UNIQUE|DENY|OFF|UPDATE|DESC|OFFSETS|UPDATETEXT|DISK|ON|USE|DISTINCT|OPEN|USER|DISTRIBUTED|OPENDATASOURCE|VALUES|DOUBLE|OPENQUERY|VARYING|DROP|OPENROWSET|VIEW|DUMMY|OPENXML|WAITFOR|DUMP|OPTION|WHEN|ELSE|OR|WHERE|END|ORDER|WHILE|ERRLVL|OUTER|WITH|ESCAPE|OVER|WRITETEXT)\\b", Pattern.CASE_INSENSITIVE); + "(?<=\\b)((ADD)|(EXCEPT)|(PERCENT)|(ALL)|(EXEC)|(PLAN)|(ALTER)|(EXECUTE)|(PRECISION)|(AND)|(EXISTS)|(PRIMARY)|(ANY)|(EXIT)|(PRINT)|(AS)|(FETCH)|(PROC)|(ASC)|(FILE)|(PROCEDURE)|(AUTHORIZATION)|(FILLFACTOR)|(PUBLIC)|(BACKUP)|(FOR)|(RAISERROR)|(BEGIN)|(FOREIGN)|(READ)|(BETWEEN)|(FREETEXT)|(READTEXT)|(BREAK)|(FREETEXTTABLE)|(RECONFIGURE)|(BROWSE)|(FROM)|(REFERENCES)|(BULK)|(FULL)|(REPLICATION)|(BY)|(FUNCTION)|(RESTORE)|(CASCADE)|(GOTO)|(RESTRICT)|(CASE)|(GRANT)|(RETURN)|(CHECK)|(GROUP)|(REVOKE)|(CHECKPOINT)|(HAVING)|(RIGHT)|(CLOSE)|(HOLDLOCK)|(ROLLBACK)|(CLUSTERED)|(IDENTITY)|(ROWCOUNT)|(COALESCE)|(IDENTITY_INSERT)|(ROWGUIDCOL)|(COLLATE)|(IDENTITYCOL)|(RULE)|(COLUMN)|(IF)|(SAVE)|(COMMIT)|(IN)|(SCHEMA)|(COMPUTE)|(INDEX)|(SELECT)|(CONSTRAINT)|(INNER)|(SESSION_USER)|(CONTAINS)|(INSERT)|(SET)|(CONTAINSTABLE)|(INTERSECT)|(SETUSER)|(CONTINUE)|(INTO)|(SHUTDOWN)|(CONVERT)|(IS)|(SOME)|(CREATE)|(JOIN)|(STATISTICS)|(CROSS)|(KEY)|(SYSTEM_USER)|(CURRENT)|(KILL)|(TABLE)|(CURRENT_DATE)|(LEFT)|(TEXTSIZE)|(CURRENT_TIME)|(LIKE)|(THEN)|(CURRENT_TIMESTAMP)|(LINENO)|(TO)|(CURRENT_USER)|(LOAD)|(TOP)|(CURSOR)|(NATIONAL)|(TRAN)|(DATABASE)|(NOCHECK)|(TRANSACTION)|(DBCC)|(NONCLUSTERED)|(TRIGGER)|(DEALLOCATE)|(NOT)|(TRUNCATE)|(DECLARE)|(NULL)|(TSEQUAL)|(DEFAULT)|(NULLIF)|(UNION)|(DELETE)|(OF)|(UNIQUE)|(DENY)|(OFF)|(UPDATE)|(DESC)|(OFFSETS)|(UPDATETEXT)|(DISK)|(ON)|(USE)|(DISTINCT)|(OPEN)|(USER)|(DISTRIBUTED)|(OPENDATASOURCE)|(VALUES)|(DOUBLE)|(OPENQUERY)|(VARYING)|(DROP)|(OPENROWSET)|(VIEW)|(DUMMY)|(OPENXML)|(WAITFOR)|(DUMP)|(OPTION)|(WHEN)|(ELSE)|(OR)|(WHERE)|(END)|(ORDER)|(WHILE)|(ERRLVL)|(OUTER)|(WITH)|(ESCAPE)|(OVER)|(WRITETEXT))(?=\\b)", Pattern.CASE_INSENSITIVE); public static final Pattern LINK = android.util.Patterns.WEB_URL; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/AccessoryView.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/AccessoryView.java new file mode 100644 index 0000000..05e8f54 --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/AccessoryView.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2014 Vlad Mihalachi + * + * This file is part of Turbo Editor. + * + * Turbo Editor is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Turbo Editor is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package sharedcode.turboeditor.util; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; + +import sharedcode.turboeditor.R; +import sharedcode.turboeditor.preferences.PreferenceHelper; + +/** + * Created by mac on 15/02/15. + */ +public class AccessoryView extends LinearLayout { + + public IAccessoryView iAccessoryView; + private TypedValue outValue; + + public AccessoryView(Context context) { + super(context); + init(); + } + + public AccessoryView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public AccessoryView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + setOrientation(HORIZONTAL); + createView(); + } + + public void setInterface(IAccessoryView iBreadcrumb) { + this.iAccessoryView = iBreadcrumb; + } + + + public void createView() { + removeAllViews(); + + // If we're running on Honeycomb or newer, then we can use the Theme's + // selectableItemBackground to ensure that the View has a pressed state + outValue = new TypedValue(); + getContext().getTheme().resolveAttribute(R.attr.selectableItemBackgroundBorderless, outValue, true); + + String[] characters = { + "<", ">", "!", "/", ".", ";", "=", "\"", "{", "}", "[", "]", "(", ")", "&", "|", "#", "*", "+", "-", ":", "%", ",", "_", "@", "?", "^", "'", + }; + + for (int i = 0; i < characters.length; i++) + addAButton(characters[i]); + + updateTextColors(); + } + + private void addAButton(final String text) { + int dimension = (int) PixelDipConverter.convertDpToPixel(50, getContext()); + //int padding = (int) PixelDipConverter.convertDpToPixel(10, getContext()); + final Button name = new Button(getContext()); + + name.setLayoutParams(new LinearLayout.LayoutParams(dimension, dimension)); + + + name.setGravity(Gravity.CENTER); + + name.setText(text); + name.setTextSize(15); + name.setAllCaps(true); + + //name.setPadding(padding, padding, padding, padding); + + name.setClickable(true); + + name.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + iAccessoryView.onButtonAccessoryViewClicked(text); + } + }); + + name.setBackgroundResource(outValue.resourceId); + addView(name); + } + + public void updateTextColors() { + boolean isLightTheme = PreferenceHelper.getLightTheme(getContext()); + for (int i = 0; i < getChildCount(); i++) { + ((Button) getChildAt(i)).setTextColor(isLightTheme ? getResources().getColor(android.R.color.background_dark) : getResources().getColor(android.R.color.white)); + } + } + + public interface IAccessoryView { + public void onButtonAccessoryViewClicked(String text); + } +} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ProCheckUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ProCheckUtils.java index a7a1268..593ad23 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ProCheckUtils.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ProCheckUtils.java @@ -25,11 +25,11 @@ public class ProCheckUtils { public static boolean isPro(Context context, boolean includeDonations) { // happy new year - return true; + return context.getPackageName().equals("com.maskyn.fileeditorpro"); /* if (Build.FOR_AMAZON) return true; - else if (context.getPackageName().equals("com.maskyn.fileeditorpro")) + else if () return true; else if (includeDonations && PreferenceHelper.hasDonated(context)) return true; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ThemeUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ThemeUtils.java index d36899d..adb7771 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ThemeUtils.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ThemeUtils.java @@ -35,21 +35,16 @@ public class ThemeUtils { } } - public static void setPreferenceTheme(Activity activity){ - boolean light = PreferenceHelper.getLightTheme(activity); - if (light) { - activity.setTheme(R.style.PreferenceLight); - } else { - activity.setTheme(R.style.PreferenceDark); - } - } - public static void setWindowsBackground(Activity activity) { boolean whiteTheme = PreferenceHelper.getLightTheme(activity); + boolean darkTheme = PreferenceHelper.getDarkTheme(activity); + boolean blackTheme = PreferenceHelper.getBlackTheme(activity); if (whiteTheme) { activity.getWindow().setBackgroundDrawableResource(R.color.window_background_light); - } else { + } else if (darkTheme) { activity.getWindow().setBackgroundDrawableResource(R.color.window_background); + } else { + activity.getWindow().setBackgroundDrawableResource(android.R.color.black); } } } diff --git a/libraries/sharedCode/src/main/res/layout/activity_home.xml b/libraries/sharedCode/src/main/res/layout/activity_home.xml index d2a6573..6d71c6b 100644 --- a/libraries/sharedCode/src/main/res/layout/activity_home.xml +++ b/libraries/sharedCode/src/main/res/layout/activity_home.xml @@ -58,7 +58,8 @@ android:scrollbars="vertical" android:fillViewport="true" android:id="@id/vertical_scroll" - android:background="@null"> + android:background="@null" + android:layout_marginBottom="50dp"> - + @@ -99,11 +100,23 @@ android:layout_width="72dp" android:layout_height="72dp" android:layout_gravity="bottom|right" - android:layout_marginBottom="16dp" + android:layout_marginBottom="66dp" android:layout_marginRight="100dp" android:layout_marginEnd="90dp" android:visibility="invisible"/> + + + + diff --git a/libraries/sharedCode/src/main/res/layout/dialog_theme_list.xml b/libraries/sharedCode/src/main/res/layout/dialog_theme_list.xml new file mode 100644 index 0000000..d6b6733 --- /dev/null +++ b/libraries/sharedCode/src/main/res/layout/dialog_theme_list.xml @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/libraries/sharedCode/src/main/res/layout/fragment_settings.xml b/libraries/sharedCode/src/main/res/layout/fragment_settings.xml index a152708..103c76b 100644 --- a/libraries/sharedCode/src/main/res/layout/fragment_settings.xml +++ b/libraries/sharedCode/src/main/res/layout/fragment_settings.xml @@ -32,6 +32,21 @@ android:orientation="vertical" > + + @@ -147,18 +161,19 @@ android:visibility="gone" android:orientation="vertical"> - - + + Happy PI day! + Added the Accessory View (now you can input more easily special symbols!) + Added a Black theme! + Added ISO-8859-2 encoding + Bug fixes + + + It is a "beta" release, feel free to send you feedback on github.com! Added Save As! (and rename option) Added Replace All! diff --git a/libraries/sharedCode/src/main/res/values/ids.xml b/libraries/sharedCode/src/main/res/values/ids.xml index de50092..f1f7281 100644 --- a/libraries/sharedCode/src/main/res/values/ids.xml +++ b/libraries/sharedCode/src/main/res/values/ids.xml @@ -76,7 +76,6 @@ - @@ -86,6 +85,7 @@ + diff --git a/libraries/sharedCode/src/main/res/values/strings.xml b/libraries/sharedCode/src/main/res/values/strings.xml index 11ca75a..b3f91c2 100644 --- a/libraries/sharedCode/src/main/res/values/strings.xml +++ b/libraries/sharedCode/src/main/res/values/strings.xml @@ -75,4 +75,7 @@ New file Delete current file Replace all + Theme + Dark theme + Black theme