From 614274c7d681c1840e6a5171a0acbed646dbcacd Mon Sep 17 00:00:00 2001 From: Vlad Mihalachi Date: Thu, 30 Oct 2014 20:17:33 +0100 Subject: [PATCH] Happy Halloween! --- app-pro/build.gradle | 4 +- app-pro/src/main/AndroidManifest.xml | 2 +- .../maskyn/fileeditorpro/HomeActivity.java | 6 +- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 2 +- .../com/maskyn/fileeditor/HomeActivity.java | 4 +- build/intermediates/dex-cache/cache.xml | 278 +++------ build/intermediates/model_data.bin | Bin 479943 -> 476143 bytes libraries/sharedCode/build.gradle | 8 +- .../sharedCode/src/main/AndroidManifest.xml | 2 +- .../activity/LicensesActivity.java | 77 --- ...aseHomeActivity.java => MainActivity.java} | 581 +++++++----------- .../activity/SelectFileActivity.java | 12 +- .../{activity => application}/MyApp.java | 2 +- .../AboutDialog.java | 4 +- .../ChangelogDialog.java | 3 +- .../EditTextDialog.java | 2 +- .../EncodingDialog.java | 2 +- .../FileInfoDialog.java | 2 +- .../FindTextDialog.java | 2 +- .../NewFileDetailsDialog.java | 5 +- .../NumberPickerDialog.java} | 22 +- .../SaveFileDialog.java | 5 +- .../preferences/PreferenceHelper.java | 2 +- .../preferences/SettingsFragment.java | 59 +- .../turboeditor/task/SaveFileTask.java | 17 +- .../turboeditor/texteditor/LineUtils.java | 11 +- .../turboeditor/texteditor/PageSystem.java | 33 +- .../turboeditor/texteditor/Patterns.java | 10 +- .../sharedcode/turboeditor/util/Build.java | 1 + .../sharedcode/turboeditor/util/Device.java | 1 + .../turboeditor/util/MimeTypes.java | 3 + .../turboeditor/util/ToastUtils.java | 1 + .../turboeditor/util/ViewUtils.java | 1 + .../util/systemui/SystemUiHelper.java | 290 +++++++++ .../util/systemui/SystemUiHelperImplHC.java | 94 +++ .../util/systemui/SystemUiHelperImplICS.java | 60 ++ .../util/systemui/SystemUiHelperImplJB.java | 93 +++ .../util/systemui/SystemUiHelperImplKK.java | 53 ++ .../turboeditor/views/DialogHelper.java | 7 +- .../main/res/drawable-hdpi/ic_launcher.png | Bin 5581 -> 5585 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 3165 -> 3175 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 8096 -> 8135 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 14079 -> 14070 bytes .../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 20927 bytes .../src/main/res/layout/activity_home.xml | 3 +- .../sharedCode/src/main/res/layout/dialog.xml | 20 +- .../res/layout/dialog_fragment_edittext.xml | 2 +- .../res/layout/dialog_fragment_find_text.xml | 6 +- .../src/main/res/layout/dialog_skeleton.xml | 20 +- .../src/main/res/layout/donation_iab_item.xml | 20 +- .../src/main/res/layout/fragment_settings.xml | 2 +- .../src/main/res/layout/item_drawer_list.xml | 1 + .../src/main/res/menu/fragment_editor.xml | 38 +- .../sharedCode/src/main/res/raw/changelog.xml | 5 + .../src/main/res/values-af-rZA/strings.xml | 3 +- .../res/values-af-rZA/strings_dialogs.xml | 4 +- .../res/values-af-rZA/strings_donation.xml | 4 +- .../src/main/res/values-ar-rSA/strings.xml | 3 +- .../res/values-ar-rSA/strings_dialogs.xml | 4 +- .../res/values-ar-rSA/strings_donation.xml | 4 +- .../src/main/res/values-az-rAZ/strings.xml | 3 +- .../res/values-az-rAZ/strings_dialogs.xml | 4 +- .../res/values-az-rAZ/strings_donation.xml | 4 +- .../src/main/res/values-be-rBY/strings.xml | 3 +- .../res/values-be-rBY/strings_dialogs.xml | 4 +- .../res/values-be-rBY/strings_donation.xml | 4 +- .../src/main/res/values-bg-rBG/strings.xml | 3 +- .../res/values-bg-rBG/strings_dialogs.xml | 4 +- .../res/values-bg-rBG/strings_donation.xml | 4 +- .../src/main/res/values-ca-rES/strings.xml | 3 +- .../res/values-ca-rES/strings_dialogs.xml | 4 +- .../res/values-ca-rES/strings_donation.xml | 4 +- .../src/main/res/values-cs-rCZ/strings.xml | 3 +- .../res/values-cs-rCZ/strings_dialogs.xml | 4 +- .../res/values-cs-rCZ/strings_donation.xml | 4 +- .../src/main/res/values-da-rDK/strings.xml | 3 +- .../res/values-da-rDK/strings_dialogs.xml | 4 +- .../res/values-da-rDK/strings_donation.xml | 4 +- .../src/main/res/values-de-rDE/strings.xml | 3 +- .../res/values-de-rDE/strings_dialogs.xml | 4 +- .../res/values-de-rDE/strings_donation.xml | 4 +- .../src/main/res/values-el-rGR/strings.xml | 3 +- .../res/values-el-rGR/strings_dialogs.xml | 4 +- .../res/values-el-rGR/strings_donation.xml | 4 +- .../src/main/res/values-es-rES/strings.xml | 3 +- .../res/values-es-rES/strings_dialogs.xml | 4 +- .../res/values-es-rES/strings_donation.xml | 4 +- .../src/main/res/values-fi-rFI/strings.xml | 3 +- .../res/values-fi-rFI/strings_dialogs.xml | 4 +- .../res/values-fi-rFI/strings_donation.xml | 4 +- .../src/main/res/values-fil-rPH/strings.xml | 3 +- .../res/values-fil-rPH/strings_dialogs.xml | 4 +- .../res/values-fil-rPH/strings_donation.xml | 4 +- .../src/main/res/values-fr-rFR/strings.xml | 3 +- .../res/values-fr-rFR/strings_dialogs.xml | 4 +- .../res/values-fr-rFR/strings_donation.xml | 4 +- .../src/main/res/values-gl-rES/strings.xml | 3 +- .../res/values-gl-rES/strings_dialogs.xml | 4 +- .../res/values-gl-rES/strings_donation.xml | 4 +- .../src/main/res/values-hi-rIN/strings.xml | 3 +- .../res/values-hi-rIN/strings_dialogs.xml | 4 +- .../res/values-hi-rIN/strings_donation.xml | 4 +- .../src/main/res/values-hr-rHR/strings.xml | 3 +- .../res/values-hr-rHR/strings_dialogs.xml | 4 +- .../res/values-hr-rHR/strings_donation.xml | 4 +- .../src/main/res/values-hu-rHU/strings.xml | 3 +- .../res/values-hu-rHU/strings_dialogs.xml | 4 +- .../res/values-hu-rHU/strings_donation.xml | 4 +- .../src/main/res/values-hy-rAM/strings.xml | 3 +- .../res/values-hy-rAM/strings_dialogs.xml | 4 +- .../res/values-hy-rAM/strings_donation.xml | 4 +- .../src/main/res/values-in-rID/strings.xml | 3 +- .../res/values-in-rID/strings_dialogs.xml | 4 +- .../res/values-in-rID/strings_donation.xml | 4 +- .../src/main/res/values-it-rIT/strings.xml | 3 +- .../res/values-it-rIT/strings_dialogs.xml | 4 +- .../res/values-it-rIT/strings_donation.xml | 4 +- .../src/main/res/values-iw-rIL/strings.xml | 3 +- .../res/values-iw-rIL/strings_dialogs.xml | 4 +- .../res/values-iw-rIL/strings_donation.xml | 4 +- .../src/main/res/values-ja-rJP/strings.xml | 3 +- .../res/values-ja-rJP/strings_dialogs.xml | 4 +- .../res/values-ja-rJP/strings_donation.xml | 4 +- .../src/main/res/values-ko-rKR/strings.xml | 3 +- .../res/values-ko-rKR/strings_dialogs.xml | 4 +- .../res/values-ko-rKR/strings_donation.xml | 4 +- .../src/main/res/values-lb-rLU/strings.xml | 3 +- .../res/values-lb-rLU/strings_dialogs.xml | 4 +- .../res/values-lb-rLU/strings_donation.xml | 4 +- .../src/main/res/values-mk-rMK/strings.xml | 3 +- .../res/values-mk-rMK/strings_dialogs.xml | 4 +- .../res/values-mk-rMK/strings_donation.xml | 4 +- .../src/main/res/values-mn-rMN/strings.xml | 3 +- .../res/values-mn-rMN/strings_dialogs.xml | 4 +- .../res/values-mn-rMN/strings_donation.xml | 4 +- .../src/main/res/values-mt-rMT/strings.xml | 3 +- .../res/values-mt-rMT/strings_dialogs.xml | 4 +- .../res/values-mt-rMT/strings_donation.xml | 4 +- .../src/main/res/values-nl-rNL/strings.xml | 3 +- .../res/values-nl-rNL/strings_dialogs.xml | 4 +- .../res/values-nl-rNL/strings_donation.xml | 4 +- .../src/main/res/values-no-rNO/strings.xml | 3 +- .../res/values-no-rNO/strings_dialogs.xml | 4 +- .../res/values-no-rNO/strings_donation.xml | 4 +- .../src/main/res/values-pl-rPL/strings.xml | 3 +- .../res/values-pl-rPL/strings_dialogs.xml | 4 +- .../res/values-pl-rPL/strings_donation.xml | 4 +- .../src/main/res/values-pt-rBR/strings.xml | 3 +- .../res/values-pt-rBR/strings_dialogs.xml | 4 +- .../res/values-pt-rBR/strings_donation.xml | 4 +- .../src/main/res/values-pt-rPT/strings.xml | 3 +- .../res/values-pt-rPT/strings_dialogs.xml | 4 +- .../res/values-pt-rPT/strings_donation.xml | 4 +- .../src/main/res/values-ro-rRO/strings.xml | 3 +- .../res/values-ro-rRO/strings_dialogs.xml | 4 +- .../res/values-ro-rRO/strings_donation.xml | 4 +- .../src/main/res/values-ru-rRU/strings.xml | 3 +- .../res/values-ru-rRU/strings_dialogs.xml | 4 +- .../res/values-ru-rRU/strings_donation.xml | 4 +- .../src/main/res/values-sl-rSI/strings.xml | 3 +- .../res/values-sl-rSI/strings_dialogs.xml | 4 +- .../res/values-sl-rSI/strings_donation.xml | 4 +- .../src/main/res/values-sq-rAL/strings.xml | 3 +- .../res/values-sq-rAL/strings_dialogs.xml | 4 +- .../res/values-sq-rAL/strings_donation.xml | 4 +- .../src/main/res/values-sr-rSP/strings.xml | 3 +- .../res/values-sr-rSP/strings_dialogs.xml | 4 +- .../res/values-sr-rSP/strings_donation.xml | 4 +- .../src/main/res/values-sv-rSE/strings.xml | 3 +- .../res/values-sv-rSE/strings_dialogs.xml | 4 +- .../res/values-sv-rSE/strings_donation.xml | 4 +- .../src/main/res/values-tr-rTR/strings.xml | 3 +- .../res/values-tr-rTR/strings_dialogs.xml | 4 +- .../res/values-tr-rTR/strings_donation.xml | 4 +- .../src/main/res/values-uk-rUA/strings.xml | 3 +- .../res/values-uk-rUA/strings_dialogs.xml | 4 +- .../res/values-uk-rUA/strings_donation.xml | 4 +- .../src/main/res/values-vi-rVN/strings.xml | 3 +- .../res/values-vi-rVN/strings_dialogs.xml | 4 +- .../res/values-vi-rVN/strings_donation.xml | 4 +- .../src/main/res/values-vls-rBE/strings.xml | 3 +- .../res/values-vls-rBE/strings_dialogs.xml | 4 +- .../res/values-vls-rBE/strings_donation.xml | 4 +- .../src/main/res/values-zh-rCN/strings.xml | 3 +- .../res/values-zh-rCN/strings_dialogs.xml | 4 +- .../res/values-zh-rCN/strings_donation.xml | 4 +- .../src/main/res/values-zh-rTW/strings.xml | 3 +- .../res/values-zh-rTW/strings_dialogs.xml | 4 +- .../res/values-zh-rTW/strings_donation.xml | 4 +- .../sharedCode/src/main/res/values/ids.xml | 3 +- .../src/main/res/values/integers.xml | 1 + .../src/main/res/values/strings.xml | 1 - .../src/main/res/values/strings_dialogs.xml | 3 +- 194 files changed, 1468 insertions(+), 917 deletions(-) delete mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/LicensesActivity.java rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/{BaseHomeActivity.java => MainActivity.java} (79%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{activity => application}/MyApp.java (96%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/AboutDialog.java (97%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/ChangelogDialog.java (98%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/EditTextDialog.java (98%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/EncodingDialog.java (98%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/FileInfoDialog.java (98%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/FindTextDialog.java (99%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/NewFileDetailsDialog.java (92%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment/SeekbarDialog.java => dialogfragment/NumberPickerDialog.java} (82%) rename libraries/sharedCode/src/main/java/sharedcode/turboeditor/{fragment => dialogfragment}/SaveFileDialog.java (95%) create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelper.java create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplHC.java create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplICS.java create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplJB.java create mode 100644 libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplKK.java create mode 100644 libraries/sharedCode/src/main/res/drawable-xxxhdpi/ic_launcher.png diff --git a/app-pro/build.gradle b/app-pro/build.gradle index 6f97557..9e4bc0f 100644 --- a/app-pro/build.gradle +++ b/app-pro/build.gradle @@ -27,8 +27,8 @@ android { applicationId "com.maskyn.fileeditorpro" minSdkVersion 11 targetSdkVersion 21 - versionCode 31 - versionName "1.12" + versionCode 32 + versionName "1.13.1" } compileOptions { diff --git a/app-pro/src/main/AndroidManifest.xml b/app-pro/src/main/AndroidManifest.xml index 507dbf5..5d385cf 100644 --- a/app-pro/src/main/AndroidManifest.xml +++ b/app-pro/src/main/AndroidManifest.xml @@ -39,7 +39,7 @@ android:hardwareAccelerated="true" android:largeHeap="true" android:supportsRtl="true" - android:name="sharedcode.turboeditor.activity.MyApp" + android:name="sharedcode.turboeditor.application.MyApp" > diff --git a/app-pro/src/main/java/com/maskyn/fileeditorpro/HomeActivity.java b/app-pro/src/main/java/com/maskyn/fileeditorpro/HomeActivity.java index b4ba013..6a80ed7 100644 --- a/app-pro/src/main/java/com/maskyn/fileeditorpro/HomeActivity.java +++ b/app-pro/src/main/java/com/maskyn/fileeditorpro/HomeActivity.java @@ -19,11 +19,9 @@ package com.maskyn.fileeditorpro; -import android.os.Bundle; +import sharedcode.turboeditor.activity.MainActivity; -import sharedcode.turboeditor.activity.BaseHomeActivity; - -public class HomeActivity extends BaseHomeActivity { +public class HomeActivity extends MainActivity { @Override public void displayInterstitial() { diff --git a/app/build.gradle b/app/build.gradle index 60a3fe9..f8db86e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,8 +46,8 @@ android { applicationId "com.maskyn.fileeditor" minSdkVersion 11 targetSdkVersion 21 - versionCode 31 - versionName "1.13" + versionCode 32 + versionName "1.13.1" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 085d282..2eef55b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,7 +43,7 @@ android:hardwareAccelerated="true" android:largeHeap="true" android:supportsRtl="true" - android:name="sharedcode.turboeditor.activity.MyApp" + android:name="sharedcode.turboeditor.application.MyApp" > diff --git a/app/src/main/java/com/maskyn/fileeditor/HomeActivity.java b/app/src/main/java/com/maskyn/fileeditor/HomeActivity.java index 2808b8e..660f3d6 100644 --- a/app/src/main/java/com/maskyn/fileeditor/HomeActivity.java +++ b/app/src/main/java/com/maskyn/fileeditor/HomeActivity.java @@ -24,11 +24,11 @@ import android.os.Bundle; import com.crashlytics.android.Crashlytics; import io.fabric.sdk.android.Fabric; -import sharedcode.turboeditor.activity.BaseHomeActivity; +import sharedcode.turboeditor.activity.MainActivity; import sharedcode.turboeditor.preferences.PreferenceHelper; import sharedcode.turboeditor.util.ProCheckUtils; -public class HomeActivity extends BaseHomeActivity { +public class HomeActivity extends MainActivity { private AdsHelper adsHelper; diff --git a/build/intermediates/dex-cache/cache.xml b/build/intermediates/dex-cache/cache.xml index 9dbb40e..23af93d 100644 --- a/build/intermediates/dex-cache/cache.xml +++ b/build/intermediates/dex-cache/cache.xml @@ -12,19 +12,7 @@ jar="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\app\build\intermediates\exploded-aar\turbo-editor.libraries\sharedCode\unspecified\classes.jar" jumboMode="false" revision="21.0.2" - sha1="4291d7fc866f70dc187c66c7063f806100c4d879"/> - - + sha1="f54c5ec0937fc814350e44db6c20f6eaf0b7e0c7"/> - + - - + revision="21.0.2" + sha1="686344a780033e4ba22b926cd225f8d4941247e6"/> + + + + + sha1="991591ff9dbe9e472a47cf66fe6c120f89a68eaa"/> + + + - + + - + + - - - - - - - - - - - - - - - - - - - - - - - + sha1="f54c5ec0937fc814350e44db6c20f6eaf0b7e0c7"/> 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. */ + + apply plugin: 'com.android.library' android { @@ -60,9 +62,9 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':libraries:RootCommands') compile project(':libraries:FloatingActionButton') - compile('de.greenrobot:eventbus:2.2.1') { - exclude module: 'support-v4' - } + //compile('de.greenrobot:eventbus:2.2.1') { + // exclude module: 'support-v4' + // } // compile 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3' compile 'org.apache.commons:commons-lang3:3.1' compile files('libs/juniversalchardet-1.0.3.jar') diff --git a/libraries/sharedCode/src/main/AndroidManifest.xml b/libraries/sharedCode/src/main/AndroidManifest.xml index e2adce2..ee4199c 100644 --- a/libraries/sharedCode/src/main/AndroidManifest.xml +++ b/libraries/sharedCode/src/main/AndroidManifest.xml @@ -16,7 +16,7 @@ ~ ~ You should have received a copy of the GNU General Public License ~ along with this program. If not, see . ---> + --> diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/LicensesActivity.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/LicensesActivity.java deleted file mode 100644 index 6685495..0000000 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/LicensesActivity.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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.activity; - -import android.app.Activity; -import android.app.FragmentManager; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import sharedcode.turboeditor.R; -import sharedcode.turboeditor.util.ThemeUtils; - -public class LicensesActivity extends Activity implements AdapterView.OnItemClickListener { - - - @Override - protected void onCreate(Bundle savedInstanceState) { - ThemeUtils.setTheme(this); - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_licenses); - ListView listView = (ListView) findViewById(android.R.id.list); - listView.setOnItemClickListener(this); - ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.open_source_libs)); - listView.setAdapter(adapter); - } - - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - String openSourceLib = ((TextView) view.findViewById(android.R.id.text1)).getText().toString(); - Intent browserIntent = null; - switch (openSourceLib) { - case "ChangeLog Library": - browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/gabrielemariotti/changeloglib?source=c#license")); - break; - case "EventBus": - browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/greenrobot/EventBus?source=c#license")); - break; - case "commons-io": - browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://commons.apache.org/proper/commons-io/")); - break; - case "RootCommands": - browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/dschuermann/superuser-commands")); - break; - case "Floating Action Button": - browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/makovkastar/FloatingActionButton")); - break; - } - if (browserIntent != null) { - startActivity(browserIntent); - } - } -} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/BaseHomeActivity.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MainActivity.java similarity index 79% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/BaseHomeActivity.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MainActivity.java index 9c5ba5b..3a3f10e 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/BaseHomeActivity.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MainActivity.java @@ -34,6 +34,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.ActionBarActivity; @@ -78,15 +79,14 @@ import java.util.LinkedList; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.greenrobot.event.EventBus; import sharedcode.turboeditor.R; import sharedcode.turboeditor.adapter.AdapterDrawer; -import sharedcode.turboeditor.fragment.ChangelogDialog; -import sharedcode.turboeditor.fragment.FileInfoDialog; -import sharedcode.turboeditor.fragment.FindTextDialog; -import sharedcode.turboeditor.fragment.NewFileDetailsDialog; -import sharedcode.turboeditor.fragment.SaveFileDialog; -import sharedcode.turboeditor.fragment.SeekbarDialog; +import sharedcode.turboeditor.dialogfragment.ChangelogDialog; +import sharedcode.turboeditor.dialogfragment.FileInfoDialog; +import sharedcode.turboeditor.dialogfragment.FindTextDialog; +import sharedcode.turboeditor.dialogfragment.NewFileDetailsDialog; +import sharedcode.turboeditor.dialogfragment.NumberPickerDialog; +import sharedcode.turboeditor.dialogfragment.SaveFileDialog; import sharedcode.turboeditor.preferences.PreferenceHelper; import sharedcode.turboeditor.task.SaveFileTask; import sharedcode.turboeditor.texteditor.EditTextPadding; @@ -101,6 +101,7 @@ import sharedcode.turboeditor.util.AnimationUtils; import sharedcode.turboeditor.util.AppInfoHelper; import sharedcode.turboeditor.util.EventBusEvents; import sharedcode.turboeditor.util.MimeTypes; +import sharedcode.turboeditor.util.ProCheckUtils; import sharedcode.turboeditor.util.ThemeUtils; import sharedcode.turboeditor.views.CustomDrawerLayout; import sharedcode.turboeditor.views.DialogHelper; @@ -116,17 +117,17 @@ import static sharedcode.turboeditor.util.EventBusEvents.APreferenceValueWasChan import static sharedcode.turboeditor.util.EventBusEvents.APreferenceValueWasChanged.Type.THEME_CHANGE; import static sharedcode.turboeditor.util.EventBusEvents.APreferenceValueWasChanged.Type.WRAP_CONTENT; -public abstract class BaseHomeActivity extends ActionBarActivity implements FindTextDialog +public abstract class MainActivity extends ActionBarActivity implements FindTextDialog .SearchDialogInterface, GoodScrollView.ScrollInterface, PageSystem.PageSystemInterface, - PageSystemButtons.PageButtonsInterface, SeekbarDialog.ISeekbarDialog, SaveFileDialog.ISaveDialog, + PageSystemButtons.PageButtonsInterface, NumberPickerDialog.INumberPickerDialog, SaveFileDialog.ISaveDialog, AdapterView.OnItemClickListener, AdapterDrawer.Callbacks{ //region VARIABLES - static final int + private static final int ID_SELECT_ALL = android.R.id.selectAll; - static final int ID_CUT = android.R.id.cut; - static final int ID_COPY = android.R.id.copy; - static final int ID_PASTE = android.R.id.paste; + private static final int ID_CUT = android.R.id.cut; + private static final int ID_COPY = android.R.id.copy; + private static final int ID_PASTE = android.R.id.paste; private static final int SELECT_FILE_CODE = 121; private static final int KITKAT_OPEN_REQUEST_CODE = 41; private static final int SYNTAX_DELAY_MILLIS_SHORT = 250; @@ -134,49 +135,49 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find private static final int ID_UNDO = R.id.im_undo; private static final int ID_REDO = R.id.im_redo; private static final int CHARS_TO_COLOR = 2500; - private final Handler updateHandler = new Handler(); - private final Runnable colorRunnable_duringEditing = + private static final Handler updateHandler = new Handler(); + private static final Runnable colorRunnable_duringEditing = new Runnable() { @Override public void run() { mEditor.replaceTextKeepCursor(null, true); } }; - private final Runnable colorRunnable_duringScroll = + private static final Runnable colorRunnable_duringScroll = new Runnable() { @Override public void run() { mEditor.replaceTextKeepCursor(null, false); } }; - boolean fileOpened = false; + private static boolean fileOpened = false; + private static String fileExtension; /* * This class provides a handy way to tie together the functionality of * {@link DrawerLayout} and the framework ActionBar to implement the recommended * design for navigation drawers. */ - private ActionBarDrawerToggle mDrawerToggle; + private static ActionBarDrawerToggle mDrawerToggle; /* * The Drawer Layout */ - private CustomDrawerLayout mDrawerLayout; - private GoodScrollView verticalScroll; - private String sFilePath = ""; - private Editor mEditor; - private HorizontalScrollView horizontalScroll; + private static CustomDrawerLayout mDrawerLayout; + private static GoodScrollView verticalScroll; + private static String sFilePath = ""; + private static Editor mEditor; + private static HorizontalScrollView horizontalScroll; private boolean searchingText; - private SearchResult searchResult; - private PageSystem pageSystem; - private PageSystemButtons pageSystemButtons; - private String currentEncoding = "UTF-8"; - private Toolbar toolbar; + private static SearchResult searchResult; + private static PageSystem pageSystem; + private static PageSystemButtons pageSystemButtons; + private static String currentEncoding = "UTF-8"; + private static Toolbar toolbar; /* Navigation Drawer */ - private AdapterDrawer arrayAdapter; - private LinkedList files; - private ListView listView; + private static AdapterDrawer arrayAdapter; + private static LinkedList files; //endregion //region Activity facts @@ -219,8 +220,6 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find @Override public void onResume() { super.onResume(); - // Register the Event Bus for events - EventBus.getDefault().registerSticky(this); // Refresh the list view refreshList(); } @@ -234,8 +233,6 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find @Override public void onPause() { super.onPause(); - // Unregister the Event Bus - EventBus.getDefault().unregister(this); if (PreferenceHelper.getAutoSave(getBaseContext()) && mEditor.canSaveFile()) { saveTheFile(); @@ -313,7 +310,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find // Set the default title getSupportActionBar().setTitle(getString(R.string.nome_app_turbo_editor)); - EventBus.getDefault().post(new EventBusEvents.ClosedAFile()); + onEvent(new EventBusEvents.ClosedAFile()); mDrawerLayout.openDrawer(Gravity.START); mDrawerLayout.closeDrawer(Gravity.END); @@ -344,7 +341,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find if (!TextUtils.isEmpty(path)) { File file = new File(path); if (file.isFile() && file.exists()) { - EventBus.getDefault().postSticky(new EventBusEvents.NewFileToOpen(new File + onEvent(new EventBusEvents.NewFileToOpen(new File (path))); } } @@ -357,7 +354,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find // Path of the file selected String filePath = files.get(position).getAbsolutePath(); // Send the event that a file was selected - EventBus.getDefault().post(new EventBusEvents.NewFileToOpen(new File(filePath))); + onEvent(new EventBusEvents.NewFileToOpen(new File(filePath))); } //endregion @@ -408,7 +405,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find imRedo.setVisible(false); } - MenuItem item = (MenuItem) menu.findItem(R.id.im_share); + MenuItem item = menu.findItem(R.id.im_share); ShareActionProvider shareAction = (ShareActionProvider) MenuItemCompat .getActionProvider(item); File f = new File(sFilePath); @@ -419,6 +416,11 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find shareAction.setShareIntent(shareIntent); } + MenuItem imDonate = menu.findItem(R.id.im_donate); + if (imDonate != null) + if (ProCheckUtils.isPro(this, false)) + imDonate.setVisible(false); + return true; } @@ -433,14 +435,14 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find saveTheFile(); } else if (i == R.id.im_undo) { - this.mEditor.onTextContextMenuItem(ID_UNDO); + mEditor.onTextContextMenuItem(ID_UNDO); } else if (i == R.id.im_redo) { - this.mEditor.onTextContextMenuItem(ID_REDO); + mEditor.onTextContextMenuItem(ID_REDO); } else if (i == R.id.im_search) { - FindTextDialog dialogFrag = FindTextDialog.newInstance(mEditor.getText().toString()); - dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); + FindTextDialog.newInstance(mEditor.getText().toString()).show(getFragmentManager() + .beginTransaction(), "dialog"); } else if (i == R.id.im_cancel) { searchingText = false; invalidateOptionsMenu(); @@ -457,12 +459,10 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } else if (i == R.id.im_goto_line) { int min = mEditor.getLineUtils().firstReadLine(); int max = mEditor.getLineUtils().lastReadLine(); - SeekbarDialog dialogFrag = SeekbarDialog.newInstance - (SeekbarDialog.Actions.GoToLine, min, min, max); - - dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); + NumberPickerDialog.newInstance + (NumberPickerDialog.Actions.GoToLine, min, min, max).show(getFragmentManager().beginTransaction(), "dialog"); } else if (i == R.id.im_view_it_on_browser) { - Intent browserIntent = null; + Intent browserIntent; try { browserIntent = new Intent(Intent.ACTION_VIEW); browserIntent.setDataAndType(Uri.fromFile(new File(sFilePath)), "text/*"); @@ -472,16 +472,18 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } } else if (i == R.id.im_info) { - FileInfoDialog dialogFrag = FileInfoDialog.newInstance(sFilePath); + FileInfoDialog.newInstance(sFilePath).show(getFragmentManager().beginTransaction(), "dialog"); + } - dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); + else if (i == R.id.im_donate) { + DialogHelper.showDonateDialog(this); } return super.onOptionsItemSelected(item); } //endregion // region OTHER THINGS - public void replaceText() { + void replaceText() { int start = searchResult.foundIndex.get(searchResult.index); int end = start + searchResult.textLength; mEditor.setText(mEditor.getText().replace(start, end, searchResult.textToReplace)); @@ -495,7 +497,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find previousResult(); } - public void nextResult() { + void nextResult() { if (searchResult.index == mEditor.getLineCount() - 1) // last result of page { return; @@ -521,6 +523,8 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } }); + mEditor.setFocusable(true); + mEditor.requestFocus(); mEditor.setSelection(searchResult.foundIndex.get(searchResult.index), searchResult.foundIndex.get(searchResult.index) + searchResult.textLength); } @@ -528,7 +532,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find invalidateOptionsMenu(); } - public void previousResult() { + void previousResult() { if (searchResult.index == 0) return; if (searchResult.index > 0) { @@ -559,12 +563,11 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find private void saveTheFile() { File file = new File(sFilePath); if (!file.getName().isEmpty()) - new SaveFileTask(getBaseContext(), sFilePath, pageSystem.getAllText(mEditor.getText() + new SaveFileTask(this, sFilePath, pageSystem.getAllText(mEditor.getText() .toString()), currentEncoding).execute(); else { - NewFileDetailsDialog dialogFrag = NewFileDetailsDialog.newInstance - (pageSystem.getAllText(mEditor.getText().toString()), currentEncoding); - dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); + NewFileDetailsDialog.newInstance + (pageSystem.getAllText(mEditor.getText().toString()), currentEncoding).show(getFragmentManager().beginTransaction(), "dialog"); } } @@ -605,7 +608,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find mDrawerLayout.setDrawerListener(mDrawerToggle); //mDrawerLayout.setFocusableInTouchMode(false); - listView = (ListView) findViewById(android.R.id.list); + ListView listView = (ListView) findViewById(android.R.id.list); listView.setEmptyView(findViewById(android.R.id.empty)); files = new LinkedList<>(); arrayAdapter = new AdapterDrawer(this, files, this); @@ -619,15 +622,15 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find horizontalScroll = (HorizontalScrollView) findViewById(R.id.horizontal_scroll); mEditor = (Editor) findViewById(R.id.editor); - if (PreferenceHelper.getWrapContent(getBaseContext())) { + //mEditor.setLayerType(View.LAYER_TYPE_NONE, null); + + if (PreferenceHelper.getWrapContent(this)) { horizontalScroll.removeView(mEditor); verticalScroll.removeView(horizontalScroll); verticalScroll.addView(mEditor); - } else { - // else show what is in the xml file fragment_editor.xml- } - if (PreferenceHelper.getReadOnly(getBaseContext())) { + if (PreferenceHelper.getReadOnly(this)) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); } else { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED); @@ -635,9 +638,9 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find verticalScroll.setScrollInterface(this); - pageSystem = new PageSystem(getBaseContext(), this, ""); + pageSystem = new PageSystem(this, this, "", null); - pageSystemButtons = new PageSystemButtons(getBaseContext(), this, + pageSystemButtons = new PageSystemButtons(this, this, (FloatingActionButton) findViewById(R.id.fabPrev), (FloatingActionButton) findViewById(R.id.fabNext)); } @@ -688,7 +691,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find || Intent.ACTION_PICK.equals(action) && type != null) { // Post event - EventBus.getDefault().postSticky(new EventBusEvents.NewFileToOpen(new File(intent + onEvent(new EventBusEvents.NewFileToOpen(new File(intent .getData().getPath()))); } else if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { @@ -726,8 +729,8 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find inputManager.hideSoftInputFromWindow(windowToken, hideType); } - public void updateTextSyntax() { - if (!PreferenceHelper.getSyntaxHighlight(getBaseContext()) || mEditor.hasSelection() || + void updateTextSyntax() { + if (!PreferenceHelper.getSyntaxHighlight(this) || mEditor.hasSelection() || updateHandler == null || colorRunnable_duringEditing == null) return; @@ -780,7 +783,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find //endregion //region EVENTBUS - public void onEvent(final EventBusEvents.NewFileToOpen event) { + void onEvent(final EventBusEvents.NewFileToOpen event) { if (fileOpened && mEditor.canSaveFile()) { SaveFileDialog.newInstance(sFilePath, pageSystem.getAllText(mEditor @@ -802,7 +805,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find super.onPreExecute(); // Close the drawer mDrawerLayout.closeDrawer(Gravity.START); - progressDialog = new ProgressDialog(BaseHomeActivity.this); + progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setMessage(getString(R.string.please_wait)); progressDialog.show(); @@ -811,40 +814,42 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find @Override protected Void doInBackground(Void... params) { try { - boolean isRoot = false; - if (!file.exists() || !file.isFile()) { fileText = event.getFileText(); return null; } + file = file.getCanonicalFile(); + sFilePath = file.getAbsolutePath(); + fileExtension = FilenameUtils.getExtension(sFilePath).toLowerCase(); + + boolean isRoot; + if (!file.canRead()) { - Shell shell = null; + Shell shell; shell = Shell.startRootShell(); Toolbox tb = new Toolbox(shell); isRoot = tb.isRootAccessGiven(); + + if (isRoot) { + File tempFile = new File(getFilesDir(), "temp.root.file"); + if (!tempFile.exists()) + tempFile.createNewFile(); + tb.copyFile(event.getFile().getAbsolutePath(), + tempFile.getAbsolutePath(), false, false); + file = new File(tempFile.getAbsolutePath()); + } } - if (isRoot) { - File tempFile = new File(getFilesDir(), "temp.root.file"); - if (!tempFile.exists()) - tempFile.createNewFile(); - Shell shell = Shell.startRootShell(); - Toolbox tb = new Toolbox(shell); - tb.copyFile(event.getFile().getAbsolutePath(), - tempFile.getAbsolutePath(), false, false); - file = new File(tempFile.getAbsolutePath()); - } - - boolean autoencoding = PreferenceHelper.getAutoEncoding(BaseHomeActivity.this); + boolean autoencoding = PreferenceHelper.getAutoEncoding(MainActivity.this); if (autoencoding) { encoding = FileUtils.getDetectedEncoding(file); if (encoding.isEmpty()) { - encoding = PreferenceHelper.getEncoding(BaseHomeActivity.this); + encoding = PreferenceHelper.getEncoding(MainActivity.this); } } else { - encoding = PreferenceHelper.getEncoding(BaseHomeActivity.this); + encoding = PreferenceHelper.getEncoding(MainActivity.this); } fileText = org.apache.commons.io.FileUtils.readFileToString(file, encoding); @@ -868,15 +873,14 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find progressDialog.hide(); if (!message.isEmpty()) { - Toast.makeText(BaseHomeActivity.this, message, Toast.LENGTH_LONG).show(); - EventBus.getDefault().post(new EventBusEvents.CannotOpenAFile()); + Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); + onEvent(new EventBusEvents.CannotOpenAFile()); } else { - sFilePath = event.getFile().getAbsolutePath(); - pageSystem = new PageSystem(getBaseContext(), BaseHomeActivity.this, fileText); + pageSystem = new PageSystem(MainActivity.this, MainActivity.this, fileText, new File(sFilePath)); currentEncoding = encoding; - EventBus.getDefault().post(new EventBusEvents.AFileIsSelected(sFilePath)); + onEvent(new EventBusEvents.AFileIsSelected(sFilePath)); showTextEditor(); @@ -893,13 +897,13 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } }.execute(); - - EventBus.getDefault().removeStickyEvent(event); - } public void onEvent(EventBusEvents.SavedAFile event) { + sFilePath = event.getPath(); + fileExtension = FilenameUtils.getExtension(sFilePath).toLowerCase(); + mEditor.clearHistory(); mEditor.fileSaved(); invalidateOptionsMenu(); @@ -910,22 +914,6 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find e.printStackTrace(); } - /*// Get intent, action and MIME type - final Intent intent = getIntent(); - final String action = intent.getAction(); - final String type = intent.getType(); - - if (Intent.ACTION_VIEW.equals(action) - || Intent.ACTION_EDIT.equals(action) - || Intent.ACTION_PICK.equals(action) - && type != null) { - //This Activity was called by startActivityForResult - final Intent returnIntent = new Intent(); - setResult(Activity.RESULT_OK, returnIntent); - // finish the activity - finish(); - }*/ - refreshList(event.getPath(), true, false); arrayAdapter.selectView(event.getPath()); @@ -938,7 +926,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find * * @param event The event called */ - public void onEvent(EventBusEvents.CannotOpenAFile event) { + void onEvent(EventBusEvents.CannotOpenAFile event) { // mDrawerLayout.openDrawer(Gravity.LEFT); // @@ -956,7 +944,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } if (event.hasType(WRAP_CONTENT)) { - if (PreferenceHelper.getWrapContent(getBaseContext())) { + if (PreferenceHelper.getWrapContent(this)) { horizontalScroll.removeView(mEditor); verticalScroll.removeView(horizontalScroll); verticalScroll.addView(mEditor); @@ -969,31 +957,31 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find mEditor.disableTextChangedListener(); mEditor.replaceTextKeepCursor(null, true); mEditor.enableTextChangedListener(); - if (PreferenceHelper.getLineNumbers(getBaseContext())) { - mEditor.setPadding(EditTextPadding.getPaddingWithLineNumbers(getBaseContext(), - PreferenceHelper.getFontSize(getBaseContext())), - EditTextPadding.getPaddingTop(getBaseContext()), 0, 0); + if (PreferenceHelper.getLineNumbers(this)) { + mEditor.setPadding(EditTextPadding.getPaddingWithLineNumbers(this, + PreferenceHelper.getFontSize(this)), + EditTextPadding.getPaddingTop(this), 0, 0); } else { - mEditor.setPadding(EditTextPadding.getPaddingWithoutLineNumbers(getBaseContext()) - , EditTextPadding.getPaddingTop(getBaseContext()), 0, 0); + mEditor.setPadding(EditTextPadding.getPaddingWithoutLineNumbers(this) + , EditTextPadding.getPaddingTop(this), 0, 0); } } else if (event.hasType(SYNTAX)) { mEditor.disableTextChangedListener(); mEditor.replaceTextKeepCursor(null, true); mEditor.enableTextChangedListener(); } else if (event.hasType(MONOSPACE)) { - if (PreferenceHelper.getUseMonospace(getBaseContext())) - this.mEditor.setTypeface(Typeface.MONOSPACE); + if (PreferenceHelper.getUseMonospace(this)) + mEditor.setTypeface(Typeface.MONOSPACE); else - this.mEditor.setTypeface(Typeface.DEFAULT); + mEditor.setTypeface(Typeface.DEFAULT); } else if (event.hasType(THEME_CHANGE)) { - if (PreferenceHelper.getLightTheme(getBaseContext())) { + if (PreferenceHelper.getLightTheme(this)) { mEditor.setTextColor(getResources().getColor(R.color.textColorInverted)); } else { mEditor.setTextColor(getResources().getColor(R.color.textColor)); } } else if (event.hasType(TEXT_SUGGESTIONS) || event.hasType(READ_ONLY)) { - if (PreferenceHelper.getReadOnly(getBaseContext())) { + if (PreferenceHelper.getReadOnly(this)) { getWindow().setSoftInputMode(WindowManager.LayoutParams .SOFT_INPUT_STATE_ALWAYS_HIDDEN); mEditor.setReadOnly(true); @@ -1001,7 +989,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find getWindow().setSoftInputMode(WindowManager.LayoutParams .SOFT_INPUT_STATE_UNSPECIFIED); mEditor.setReadOnly(false); - if (PreferenceHelper.getSuggestionActive(getBaseContext())) { + if (PreferenceHelper.getSuggestionActive(this)) { mEditor.setInputType(InputType.TYPE_CLASS_TEXT | InputType .TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE); } else { @@ -1012,33 +1000,33 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } } // sometimes it becomes monospace after setting the input type - if (PreferenceHelper.getUseMonospace(getBaseContext())) - this.mEditor.setTypeface(Typeface.MONOSPACE); + if (PreferenceHelper.getUseMonospace(this)) + mEditor.setTypeface(Typeface.MONOSPACE); else - this.mEditor.setTypeface(Typeface.DEFAULT); + mEditor.setTypeface(Typeface.DEFAULT); } else if (event.hasType(FONT_SIZE)) { - if (PreferenceHelper.getLineNumbers(getBaseContext())) { - mEditor.setPadding(EditTextPadding.getPaddingWithLineNumbers(getBaseContext(), - PreferenceHelper.getFontSize(getBaseContext())), - EditTextPadding.getPaddingTop(getBaseContext()), 0, 0); + if (PreferenceHelper.getLineNumbers(this)) { + mEditor.setPadding(EditTextPadding.getPaddingWithLineNumbers(this, + PreferenceHelper.getFontSize(this)), + EditTextPadding.getPaddingTop(this), 0, 0); } else { - mEditor.setPadding(EditTextPadding.getPaddingWithoutLineNumbers(getBaseContext()) - , EditTextPadding.getPaddingTop(getBaseContext()), 0, 0); + mEditor.setPadding(EditTextPadding.getPaddingWithoutLineNumbers(this) + , EditTextPadding.getPaddingTop(this), 0, 0); } - this.mEditor.setTextSize(PreferenceHelper.getFontSize(getBaseContext())); + mEditor.setTextSize(PreferenceHelper.getFontSize(this)); } else if (event.hasType(ENCODING)) { String oldEncoding, newEncoding; oldEncoding = currentEncoding; - newEncoding = PreferenceHelper.getEncoding(getBaseContext()); + newEncoding = PreferenceHelper.getEncoding(this); try { - final byte[] oldText = this.mEditor.getText().toString().getBytes(oldEncoding); + final byte[] oldText = mEditor.getText().toString().getBytes(oldEncoding); mEditor.disableTextChangedListener(); mEditor.replaceTextKeepCursor(new String(oldText, newEncoding), true); mEditor.enableTextChangedListener(); currentEncoding = newEncoding; } catch (UnsupportedEncodingException ignored) { try { - final byte[] oldText = this.mEditor.getText().toString().getBytes(oldEncoding); + final byte[] oldText = mEditor.getText().toString().getBytes(oldEncoding); mEditor.disableTextChangedListener(); mEditor.replaceTextKeepCursor(new String(oldText, "UTF-8"), true); mEditor.enableTextChangedListener(); @@ -1048,20 +1036,18 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } } - public void onEvent(EventBusEvents.AFileIsSelected event) { + void onEvent(EventBusEvents.AFileIsSelected event) { arrayAdapter.selectView(event.getPath()); - - EventBus.getDefault().removeStickyEvent(event); } - public void onEvent(EventBusEvents.ClosedAFile event) { + void onEvent(EventBusEvents.ClosedAFile event) { arrayAdapter.selectView(""); } //endregion //region Calls from the layout public void OpenFile(View view) { - Intent subActivity = new Intent(BaseHomeActivity.this, SelectFileActivity.class); + Intent subActivity = new Intent(MainActivity.this, SelectFileActivity.class); subActivity.putExtra("action", SelectFileActivity.Actions.SelectFile); AnimationUtils.startActivityWithScale(this, subActivity, true, SELECT_FILE_CODE, view); } @@ -1096,9 +1082,9 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } }, 200); - if (PreferenceHelper.getPageSystemButtonsPopupShown(getBaseContext()) == false) { - PreferenceHelper.setPageSystemButtonsPopupShown(getBaseContext(), true); - Toast.makeText(getBaseContext(), getString(R.string.long_click_for_more_options), + if (!PreferenceHelper.getPageSystemButtonsPopupShown(this)) { + PreferenceHelper.setPageSystemButtonsPopupShown(this, true); + Toast.makeText(this, getString(R.string.long_click_for_more_options), Toast.LENGTH_LONG).show(); } } @@ -1118,9 +1104,9 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } }, 200); - if (PreferenceHelper.getPageSystemButtonsPopupShown(getBaseContext()) == false) { - PreferenceHelper.setPageSystemButtonsPopupShown(getBaseContext(), true); - Toast.makeText(getBaseContext(), getString(R.string.long_click_for_more_options), + if (!PreferenceHelper.getPageSystemButtonsPopupShown(this)) { + PreferenceHelper.setPageSystemButtonsPopupShown(this, true); + Toast.makeText(this, getString(R.string.long_click_for_more_options), Toast.LENGTH_LONG).show(); } } @@ -1129,10 +1115,8 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find public void pageSystemButtonLongClicked() { int maxPages = pageSystem.getMaxPage(); int currentPage = pageSystem.getCurrentPage(); - SeekbarDialog dialogFrag = SeekbarDialog.newInstance - (SeekbarDialog.Actions.SelectPage, 0, currentPage, maxPages); - - dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); + NumberPickerDialog.newInstance + (NumberPickerDialog.Actions.SelectPage, 0, currentPage, maxPages).show(getFragmentManager().beginTransaction(), "dialog"); } @Override @@ -1147,7 +1131,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find @Override public void onSearchDone(SearchResult searchResult) { - this.searchResult = searchResult; + MainActivity.searchResult = searchResult; searchingText = true; invalidateOptionsMenu(); @@ -1183,7 +1167,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find public void onScrollChanged(int l, int t, int oldl, int oldt) { pageSystemButtons.updateVisibility(Math.abs(t) > 10); - if (!PreferenceHelper.getSyntaxHighlight(getBaseContext()) || (mEditor.hasSelection() && + if (!PreferenceHelper.getSyntaxHighlight(this) || (mEditor.hasSelection() && !searchingText) || updateHandler == null || colorRunnable_duringScroll == null) return; @@ -1193,8 +1177,8 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } @Override - public void onSeekbarDialogDismissed(SeekbarDialog.Actions action, int value) { - if (action == SeekbarDialog.Actions.SelectPage) { + public void onNumberPickerDialogDismissed(NumberPickerDialog.Actions action, int value) { + if (action == NumberPickerDialog.Actions.SelectPage) { pageSystem.savePage(mEditor.getText().toString()); pageSystem.goToPage(value); mEditor.disableTextChangedListener(); @@ -1208,7 +1192,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } }, 200); - } else if (action == SeekbarDialog.Actions.GoToLine) { + } else if (action == NumberPickerDialog.Actions.GoToLine) { int fakeLine = mEditor.getLineUtils().fakeLineFromRealLine(value); final int y = mEditor.getLineUtils().getYAtLine(verticalScroll, @@ -1226,7 +1210,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find @Override public void userDoesntWantToSave(boolean openNewFile, String pathOfNewFile) { - mEditor.canSaveFile = false; + Editor.canSaveFile = false; if(openNewFile) onEvent(new EventBusEvents.NewFileToOpen(new File(pathOfNewFile))); else @@ -1237,13 +1221,14 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find public void CancelItem(int position, boolean andCloseOpenedFile) { refreshList(files.get(position).getAbsolutePath(), false, true); if (andCloseOpenedFile) - EventBus.getDefault().post(new EventBusEvents.CannotOpenAFile()); + onEvent(new EventBusEvents.CannotOpenAFile()); } //endregion public static class Editor extends EditText { - private final TextPaint mPaintNumbers = new TextPaint(); + //region VARIABLES + private static final TextPaint mPaintNumbers = new TextPaint(); /** * The edit history. */ @@ -1257,11 +1242,13 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find * Disconnect this undo/redo from the text * view. */ - private boolean enabledChangeListener; - //region VARIABLES - private int lineCount, realLine, startingLine; - private LineUtils lineUtils; - private boolean modified; + private static boolean enabledChangeListener; + private static int paddingTop; + private static int numbersWidth; + private static int lineHeight; + + private static int lineCount, realLine, startingLine; + private static LineUtils lineUtils; /** * Is undo/redo being performed? This member * signals if an undo/redo operation is @@ -1269,52 +1256,42 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find * text during undo/redo are not recorded * because it would mess up the undo history. */ - private boolean mIsUndoOrRedo; - private Matcher m; - private boolean mShowUndo, mShowRedo; - private boolean canSaveFile; - private KeyListener keyListener; - private int firstVisibleIndex, firstColoredIndex; - private int deviceHeight; + private static boolean mIsUndoOrRedo; + private static Matcher m; + private static boolean mShowUndo, mShowRedo; + private static boolean canSaveFile; + private static KeyListener keyListener; + private static int firstVisibleIndex, firstColoredIndex; + private static int deviceHeight; + private static int editorHeight; + private static boolean[] hasNewLineArray; + private static int[] realLines; + private static boolean wrapContent; + private static int lastLine; + private static int firstLine; + private static CharSequence textToHighlight; + private static int lastVisibleIndex; + private static int i; //endregion //region CONSTRUCTOR public Editor(final Context context, AttributeSet attrs) { super(context, attrs); + + //setLayerType(View.LAYER_TYPE_NONE, null); + mEditHistory = new EditHistory(); mChangeListener = new EditTextChangeListener(); lineUtils = new LineUtils(); deviceHeight = getResources().getDisplayMetrics().heightPixels; - this.mPaintNumbers.setAntiAlias(true); - this.mPaintNumbers.setDither(false); - this.mPaintNumbers.setTextAlign(Paint.Align.RIGHT); + paddingTop = EditTextPadding.getPaddingTop(getContext()); - // Syntax editor - /*setFilters(new InputFilter[]{ - new InputFilter() { - @Override - public CharSequence filter( - CharSequence source, - int start, - int end, - Spanned dest, - int dstart, - int dend) { - if (modified) { - return autoIndent( - source, - start, - end, - dest, - dstart, - dend); - } - - return source; - } - }});*/ + mPaintNumbers.setAntiAlias(true); + mPaintNumbers.setDither(false); + mPaintNumbers.setTextAlign(Paint.Align.RIGHT); + mPaintNumbers.setColor(getResources().getColor(R.color.file_text)); if (PreferenceHelper.getLightTheme(getContext())) { setTextColor(getResources().getColor(R.color.textColorInverted)); @@ -1357,7 +1334,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find @Override public void onClick(View v) { if (!PreferenceHelper.getReadOnly(getContext())) { - ((BaseHomeActivity) getContext()).verticalScroll.tempDisableListener(1000); + verticalScroll.tempDisableListener(1000); ((InputMethodManager) getContext().getSystemService(Context .INPUT_METHOD_SERVICE)) .showSoftInput(Editor.this, InputMethodManager.SHOW_IMPLICIT); @@ -1369,7 +1346,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus && !PreferenceHelper.getReadOnly(getContext())) { - ((BaseHomeActivity) getContext()).verticalScroll.tempDisableListener(1000); + verticalScroll.tempDisableListener(1000); ((InputMethodManager) getContext().getSystemService(Context .INPUT_METHOD_SERVICE)) .showSoftInput(Editor.this, InputMethodManager.SHOW_IMPLICIT); @@ -1382,81 +1359,6 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find resetVariables(); } - /*private CharSequence autoIndent( - CharSequence source, - int start, - int end, - Spanned dest, - int dstart, - int dend) { - if (end - start != 1 || - start >= source.length() || - source.charAt(start) != '\n' || - dstart >= dest.length()) { - return source; - } - - int istart = dstart; - int iend; - String indent = ""; - - // skip end of line if cursor is at the end of a line - if (dest.charAt(istart) == '\n') { - --istart; - } - - // indent next line if this one isn't terminated - if (istart > -1) { - // skip white space - for (; istart > -1; --istart) { - char c = dest.charAt(istart); - - if (c != ' ' && - c != '\t') { - break; - } - } - - if (istart > -1) { - char c = dest.charAt(istart); - - if (c != ';' && - c != '\n') { - indent = "\t"; - } - } - } - - // find start of previous line - for (; istart > -1; --istart) { - if (dest.charAt(istart) == '\n') { - break; - } - } - - // cursor is in the first line - if (istart < 0) { - return source; - } - - // span over previous indent - for (iend = ++istart; - iend < dend; - ++iend) { - char c = dest.charAt(iend); - - if (c != ' ' && - c != '\t') { - break; - } - } - - // copy white space of previous lines and append new indent - return "\n" + dest.subSequence( - istart, - iend) + indent; - }*/ - public void setReadOnly(boolean value) { if (value) { keyListener = getKeyListener(); @@ -1472,40 +1374,34 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find public void setTextSize(float size) { super.setTextSize(size); final float scale = getContext().getResources().getDisplayMetrics().density; - this.mPaintNumbers.setTextSize((int) (size * scale * 0.65f)); + mPaintNumbers.setTextSize((int) (size * scale * 0.65f)); + numbersWidth = (int) (EditTextPadding.getPaddingWithLineNumbers(getContext(), + PreferenceHelper.getFontSize(getContext())) * 0.8); + lineHeight = getLineHeight(); } - @Override - public void setTextColor(int color) { - super.setTextColor(color); - //this.mPaintNumbers.setColor(getTextColors().getDefaultColor()); - this.mPaintNumbers.setColor(getResources().getColor(R.color.file_text)); - } @Override - public void onDraw(final Canvas canvas) { + public void onDraw(@NonNull final Canvas canvas) { + + if (lineCount != getLineCount() || startingLine != pageSystem.getStartingLine()) { + startingLine = pageSystem.getStartingLine(); + lineCount = getLineCount(); + lineUtils.updateHasNewLineArray(pageSystem + .getStartingLine(), lineCount, getLayout(), getText().toString()); + + hasNewLineArray = lineUtils.getToCountLinesArray(); + realLines = lineUtils.getRealLines(); + + } + + editorHeight = getHeight(); + firstLine = lineUtils.getFirstVisibleLine(verticalScroll, editorHeight, lineCount); + lastLine = lineUtils.getLastVisibleLine(verticalScroll, editorHeight, lineCount, deviceHeight); if (PreferenceHelper.getLineNumbers(getContext())) { - if (lineCount != getLineCount() || startingLine != ((BaseHomeActivity) getContext - ()).pageSystem.getStartingLine()) { - startingLine = ((BaseHomeActivity) getContext()).pageSystem.getStartingLine(); - lineCount = getLineCount(); - - lineUtils.updateHasNewLineArray(((BaseHomeActivity) getContext()).pageSystem - .getStartingLine(), lineCount, getLayout(), getText().toString()); - } - - int editorHeight = getHeight(); - int i = lineUtils.getFirstVisibleLine(((BaseHomeActivity) getContext()) - .verticalScroll, editorHeight, lineCount); - int lastLine = lineUtils.getLastVisibleLine(((BaseHomeActivity) getContext()) - .verticalScroll, editorHeight, lineCount, deviceHeight); - boolean[] hasNewLineArray = lineUtils.getToCountLinesArray(); - int[] realLines = lineUtils.getRealLines(); - boolean wrapContent = PreferenceHelper.getWrapContent(getContext()); - int numbersWidth = (int) (EditTextPadding.getPaddingWithLineNumbers(getContext(), - PreferenceHelper.getFontSize(getContext())) * 0.8); - int paddingTop = EditTextPadding.getPaddingTop(getContext()); + wrapContent = PreferenceHelper.getWrapContent(getContext()); + i = firstLine; while (i < lastLine) { // if last line we count it anyway @@ -1518,15 +1414,14 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find realLine = realLines[i]; canvas.drawText(String.valueOf(realLine), - numbersWidth, // they all center aligned - paddingTop + getLineHeight() * (i + 1), + numbersWidth, // they are all center aligned + paddingTop + lineHeight * (i + 1), mPaintNumbers); } i++; } } - super.onDraw(canvas); } @@ -1536,7 +1431,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find //region Other @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { + public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { if (event.isCtrlPressed()) { switch (keyCode) { @@ -1557,7 +1452,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find return onTextContextMenuItem(ID_REDO); } case KeyEvent.KEYCODE_S: - ((BaseHomeActivity) getContext()).saveTheFile(); + ((MainActivity) getContext()).saveTheFile(); return true; default: return super.onKeyDown(keyCode, event); @@ -1579,7 +1474,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { + public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) { if (event.isCtrlPressed()) { switch (keyCode) { case KeyEvent.KEYCODE_A: @@ -1712,7 +1607,6 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find lineCount = 0; realLine = 0; startingLine = 0; - modified = true; mIsUndoOrRedo = false; mShowUndo = false; mShowRedo = false; @@ -1741,7 +1635,6 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find cursorPosEnd = getSelectionEnd(); } disableTextChangedListener(); - modified = false; if (PreferenceHelper.getSyntaxHighlight(getContext())) setText(highlight(textToUpdate == null ? getEditableText() : Editable.Factory @@ -1749,7 +1642,6 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find else setText(textToUpdate == null ? getText().toString() : textToUpdate); - modified = true; enableTextChangedListener(); if (mantainCursorPos) @@ -1772,26 +1664,22 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find } public CharSequence highlight(Editable editable, boolean newText) { - final String fileExtension = FilenameUtils.getExtension(((BaseHomeActivity) - getContext()).sFilePath).toLowerCase(); editable.clearSpans(); if (editable.length() == 0) { return editable; } - int end; - int height = getHeight(); + editorHeight = getHeight(); - if (newText == false && height > 0) { - firstVisibleIndex = getLayout().getLineStart(getLineUtils().getFirstVisibleLine(( - (BaseHomeActivity) getContext()).verticalScroll, height, getLineCount())); - end = getLayout().getLineStart(getLineUtils().getLastVisibleLine(( - (BaseHomeActivity) getContext()).verticalScroll, height, getLineCount(), - deviceHeight)); + if (!newText && editorHeight > 0) { + firstLine = lineUtils.getFirstVisibleLine(verticalScroll, editorHeight, lineCount); + lastLine = lineUtils.getLastVisibleLine(verticalScroll, editorHeight, lineCount, deviceHeight); + firstVisibleIndex = getLayout().getLineStart(firstLine); + lastVisibleIndex = getLayout().getLineStart(lastLine); } else { firstVisibleIndex = 0; - end = CHARS_TO_COLOR; + lastVisibleIndex = CHARS_TO_COLOR; } firstColoredIndex = firstVisibleIndex - (CHARS_TO_COLOR / 5); @@ -1799,13 +1687,13 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find // normalize if (firstColoredIndex < 0) firstColoredIndex = 0; - if (end > editable.length()) - end = editable.length(); - if (firstColoredIndex > end) - firstColoredIndex = end; + if (lastVisibleIndex > editable.length()) + lastVisibleIndex = editable.length(); + if (firstColoredIndex > lastVisibleIndex) + firstColoredIndex = lastVisibleIndex; - CharSequence textToHighlight = editable.subSequence(firstColoredIndex, end); + textToHighlight = editable.subSequence(firstColoredIndex, lastVisibleIndex); if (fileExtension.contains("htm") || fileExtension.contains("xml")) { @@ -1821,14 +1709,18 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find color(Patterns.SYMBOLS, editable, textToHighlight, firstColoredIndex); color(Patterns.GENERAL_COMMENTS, editable, textToHighlight, firstColoredIndex); } else if (Arrays.asList(MimeTypes.MIME_CODE).contains(fileExtension)) { - if (fileExtension.equals("lua")) - color(Patterns.LUA_KEYWORDS, editable, textToHighlight, firstColoredIndex); - else if (fileExtension.equals("py")) - color(Patterns.PY_KEYWORDS, editable, textToHighlight, firstColoredIndex); - else - color(Patterns.GENERAL_KEYWORDS, editable, textToHighlight, firstColoredIndex); - color(Patterns.NUMBERS, editable, textToHighlight, firstColoredIndex); - color(Patterns.SYMBOLS, editable, textToHighlight, firstColoredIndex); + switch (fileExtension) { + case "lua": + color(Patterns.LUA_KEYWORDS, editable, textToHighlight, firstColoredIndex); + break; + case "py": + color(Patterns.PY_KEYWORDS, editable, textToHighlight, firstColoredIndex); + break; + default: + color(Patterns.GENERAL_KEYWORDS, editable, textToHighlight, firstColoredIndex); + break; + } + color(Patterns.NUMBERS_OR_SYMBOLS, editable, textToHighlight, firstColoredIndex); color(Patterns.GENERAL_STRINGS, editable, textToHighlight, firstColoredIndex); color(Patterns.GENERAL_COMMENTS, editable, textToHighlight, firstColoredIndex); if (fileExtension.equals("php")) @@ -1838,19 +1730,18 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find color(Patterns.GENERAL_STRINGS, editable, textToHighlight, firstColoredIndex); color(Patterns.SQL_KEYWORDS, editable, textToHighlight, firstColoredIndex); } else { - if (!fileExtension.contains("md")) + if (!(Arrays.asList(MimeTypes.MIME_MARKDOWN).contains(fileExtension))) color(Patterns.GENERAL_KEYWORDS, editable, textToHighlight, firstColoredIndex); - color(Patterns.NUMBERS, editable, textToHighlight, firstColoredIndex); - color(Patterns.SYMBOLS, editable, textToHighlight, firstColoredIndex); + color(Patterns.NUMBERS_OR_SYMBOLS, editable, textToHighlight, firstColoredIndex); color(Patterns.GENERAL_STRINGS, editable, textToHighlight, firstColoredIndex); if (fileExtension.equals("prop") || fileExtension.contains("conf") || - fileExtension.contains("md")) + (Arrays.asList(MimeTypes.MIME_MARKDOWN).contains(fileExtension))) color(Patterns.GENERAL_COMMENTS_NO_SLASH, editable, textToHighlight, firstColoredIndex); else color(Patterns.GENERAL_COMMENTS, editable, textToHighlight, firstColoredIndex); - if (fileExtension.contains("md")) + if ((Arrays.asList(MimeTypes.MIME_MARKDOWN).contains(fileExtension))) color(Patterns.LINK, editable, textToHighlight, firstColoredIndex); } @@ -1894,7 +1785,7 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find color = getResources().getColor(R.color.syntax_comment); } else if (pattern.equals(Patterns.GENERAL_STRINGS)) { color = getResources().getColor(R.color.syntax_string); - } else if (pattern.equals(Patterns.NUMBERS) || pattern.equals(Patterns.SYMBOLS)) { + } else if (pattern.equals(Patterns.NUMBERS) || pattern.equals(Patterns.SYMBOLS) || pattern.equals(Patterns.NUMBERS_OR_SYMBOLS)) { color = getResources().getColor(R.color.syntax_number); } else if (pattern.equals(Patterns.PHP_VARIABLES)) { color = getResources().getColor(R.color.syntax_variable); @@ -2072,10 +1963,10 @@ public abstract class BaseHomeActivity extends ActionBarActivity implements Find if (showUndo != mShowUndo || showRedo != mShowRedo) { mShowUndo = showUndo; mShowRedo = showRedo; - ((BaseHomeActivity) getContext()).invalidateOptionsMenu(); + ((MainActivity) getContext()).invalidateOptionsMenu(); } - ((BaseHomeActivity) getContext()).updateTextSyntax(); + ((MainActivity) getContext()).updateTextSyntax(); } } diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java index adcbd62..3aeb5b5 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/SelectFileActivity.java @@ -55,7 +55,7 @@ import java.util.concurrent.TimeoutException; import sharedcode.turboeditor.R; import sharedcode.turboeditor.adapter.AdapterDetailedList; -import sharedcode.turboeditor.fragment.EditTextDialog; +import sharedcode.turboeditor.dialogfragment.EditTextDialog; import sharedcode.turboeditor.preferences.PreferenceHelper; import sharedcode.turboeditor.root.RootUtils; import sharedcode.turboeditor.util.AlphanumComparator; @@ -105,15 +105,12 @@ public class SelectFileActivity extends ActionBarActivity implements SearchView. popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - final EditTextDialog dialogFrag; int i = item.getItemId(); if (i == R.id.im_new_file) { - dialogFrag = EditTextDialog.newInstance(EditTextDialog.Actions.NewFile); - dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); + EditTextDialog.newInstance(EditTextDialog.Actions.NewFile).show(getFragmentManager().beginTransaction(), "dialog"); return true; } else if (i == R.id.im_new_folder) { - dialogFrag = EditTextDialog.newInstance(EditTextDialog.Actions.NewFolder); - dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); + EditTextDialog.newInstance(EditTextDialog.Actions.NewFolder).show(getFragmentManager().beginTransaction(), "dialog"); return true; } else { return false; @@ -368,7 +365,8 @@ public class SelectFileActivity extends ActionBarActivity implements SearchView. AdapterDetailedList mAdapter = new AdapterDetailedList(getBaseContext(), names, isRoot); listView.setAdapter(mAdapter); filter = mAdapter.getFilter(); - } else if (exceptionMessage != null) { + } + if (exceptionMessage != null) { Toast.makeText(SelectFileActivity.this, exceptionMessage, Toast.LENGTH_SHORT).show(); } invalidateOptionsMenu(); diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MyApp.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/application/MyApp.java similarity index 96% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MyApp.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/application/MyApp.java index 45f36b8..1c84e71 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/activity/MyApp.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/application/MyApp.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.activity; +package sharedcode.turboeditor.application; import android.app.Application; import android.view.ViewConfiguration; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/AboutDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/AboutDialog.java similarity index 97% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/AboutDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/AboutDialog.java index 64747b1..be60049 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/AboutDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/AboutDialog.java @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; + +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; @@ -28,7 +29,6 @@ import android.content.res.Resources; import android.os.Bundle; import android.text.Html; import android.view.View; -import android.widget.Toast; import sharedcode.turboeditor.R; import sharedcode.turboeditor.views.DialogHelper; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/ChangelogDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/ChangelogDialog.java similarity index 98% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/ChangelogDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/ChangelogDialog.java index 3c6dbe2..2d2818a 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/ChangelogDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/ChangelogDialog.java @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; + +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EditTextDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EditTextDialog.java similarity index 98% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EditTextDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EditTextDialog.java index fe337fe..50a2a8d 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EditTextDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EditTextDialog.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EncodingDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EncodingDialog.java similarity index 98% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EncodingDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EncodingDialog.java index 3a0bb46..b89b3e7 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/EncodingDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/EncodingDialog.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/FileInfoDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/FileInfoDialog.java similarity index 98% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/FileInfoDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/FileInfoDialog.java index abbf52c..aad6ecf 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/FileInfoDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/FileInfoDialog.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/FindTextDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/FindTextDialog.java similarity index 99% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/FindTextDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/FindTextDialog.java index 22b7947..bdf1f7b 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/FindTextDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/FindTextDialog.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/NewFileDetailsDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/NewFileDetailsDialog.java similarity index 92% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/NewFileDetailsDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/NewFileDetailsDialog.java index 2fd01a1..d1f7fdb 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/NewFileDetailsDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/NewFileDetailsDialog.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; @@ -31,6 +31,7 @@ import android.widget.EditText; import java.io.File; import sharedcode.turboeditor.R; +import sharedcode.turboeditor.activity.MainActivity; import sharedcode.turboeditor.preferences.PreferenceHelper; import sharedcode.turboeditor.task.SaveFileTask; import sharedcode.turboeditor.views.DialogHelper; @@ -75,7 +76,7 @@ public class NewFileDetailsDialog extends DialogFragment { public void onClick(DialogInterface dialog, int which) { if (!mName.getText().toString().isEmpty() && !mFolder.getText().toString().isEmpty()) { File file = new File(mFolder.getText().toString(), mName.getText().toString()); - new SaveFileTask(getActivity(), file.getPath(), getArguments().getString("fileText"), getArguments().getString("fileEncoding")).execute(); + new SaveFileTask((MainActivity) getActivity(), file.getPath(), getArguments().getString("fileText"), getArguments().getString("fileEncoding")).execute(); PreferenceHelper.setWorkingFolder(getActivity(), file.getParent()); } } diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/SeekbarDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/NumberPickerDialog.java similarity index 82% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/SeekbarDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/NumberPickerDialog.java index da41492..8368647 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/SeekbarDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/NumberPickerDialog.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; @@ -31,16 +31,16 @@ import sharedcode.turboeditor.R; import sharedcode.turboeditor.views.DialogHelper; // ... -public class SeekbarDialog extends DialogFragment { +public class NumberPickerDialog extends DialogFragment { private NumberPicker mSeekBar; - public static SeekbarDialog newInstance(final Actions action) { - return SeekbarDialog.newInstance(action, 0, 50, 100); + public static NumberPickerDialog newInstance(final Actions action) { + return NumberPickerDialog.newInstance(action, 0, 50, 100); } - public static SeekbarDialog newInstance(final Actions action, final int min, final int current, final int max) { - final SeekbarDialog f = new SeekbarDialog(); + public static NumberPickerDialog newInstance(final Actions action, final int min, final int current, final int max) { + final NumberPickerDialog f = new NumberPickerDialog(); final Bundle args = new Bundle(); args.putSerializable("action", action); args.putInt("min", min); @@ -102,11 +102,11 @@ public class SeekbarDialog extends DialogFragment { } void returnData() { - ISeekbarDialog target = (ISeekbarDialog) getTargetFragment(); + INumberPickerDialog target = (INumberPickerDialog) getTargetFragment(); if (target == null) { - target = (ISeekbarDialog) getActivity(); + target = (INumberPickerDialog) getActivity(); } - target.onSeekbarDialogDismissed( + target.onNumberPickerDialogDismissed( (Actions) getArguments().getSerializable("action"), mSeekBar.getValue() ); @@ -117,7 +117,7 @@ public class SeekbarDialog extends DialogFragment { FontSize, SelectPage, GoToLine } - public interface ISeekbarDialog { - void onSeekbarDialogDismissed(Actions action, int value); + public interface INumberPickerDialog { + void onNumberPickerDialogDismissed(Actions action, int value); } } \ No newline at end of file diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/SaveFileDialog.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/SaveFileDialog.java similarity index 95% rename from libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/SaveFileDialog.java rename to libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/SaveFileDialog.java index 3f4149a..9a4acab 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/fragment/SaveFileDialog.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/dialogfragment/SaveFileDialog.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package sharedcode.turboeditor.fragment; +package sharedcode.turboeditor.dialogfragment; import android.app.AlertDialog; import android.app.Dialog; @@ -31,6 +31,7 @@ import org.apache.commons.io.FilenameUtils; import java.io.File; import sharedcode.turboeditor.R; +import sharedcode.turboeditor.activity.MainActivity; import sharedcode.turboeditor.task.SaveFileTask; import sharedcode.turboeditor.views.DialogHelper; @@ -75,7 +76,7 @@ public class SaveFileDialog extends DialogFragment { @Override public void onClick(DialogInterface dialog, int which) { if (!fileName.isEmpty()) - new SaveFileTask(getActivity(), filePath, text, + new SaveFileTask((MainActivity) getActivity(), filePath, text, encoding).execute(); else { NewFileDetailsDialog dialogFrag = 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 084f3be..408e575 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/PreferenceHelper.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/PreferenceHelper.java @@ -155,7 +155,7 @@ public final class PreferenceHelper { } public static void setHasDonated(Context context, boolean value) { - getEditor(context).putBoolean("has_donated", value); + getEditor(context).putBoolean("has_donated", value).commit(); } public static void setLightTheme(Context context, boolean 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 3bb26f4..8a51d4c 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/SettingsFragment.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/preferences/SettingsFragment.java @@ -28,10 +28,10 @@ import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.TextView; -import de.greenrobot.event.EventBus; import sharedcode.turboeditor.R; -import sharedcode.turboeditor.fragment.EncodingDialog; -import sharedcode.turboeditor.fragment.SeekbarDialog; +import sharedcode.turboeditor.activity.MainActivity; +import sharedcode.turboeditor.dialogfragment.EncodingDialog; +import sharedcode.turboeditor.dialogfragment.NumberPickerDialog; import sharedcode.turboeditor.util.ProCheckUtils; import sharedcode.turboeditor.util.ViewUtils; import sharedcode.turboeditor.views.DialogHelper; @@ -47,7 +47,7 @@ import static sharedcode.turboeditor.util.EventBusEvents.APreferenceValueWasChan import static sharedcode.turboeditor.util.EventBusEvents.APreferenceValueWasChanged.Type.THEME_CHANGE; import static sharedcode.turboeditor.util.EventBusEvents.APreferenceValueWasChanged.Type.WRAP_CONTENT; -public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbarDialog, EncodingDialog.DialogListener { +public class SettingsFragment extends Fragment implements NumberPickerDialog.INumberPickerDialog, EncodingDialog.DialogListener { // Editor Variables private boolean sLineNumbers; @@ -127,7 +127,7 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { PreferenceHelper.setLineNumbers(getActivity(), isChecked); - EventBus.getDefault().post(new APreferenceValueWasChanged(LINE_NUMERS)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(LINE_NUMERS)); } }); @@ -136,7 +136,7 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { sColorSyntax = isChecked; PreferenceHelper.setSyntaxHighlight(getActivity(), isChecked); - EventBus.getDefault().post(new APreferenceValueWasChanged(SYNTAX)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(SYNTAX)); } }); @@ -145,7 +145,7 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { PreferenceHelper.setWrapContent(getActivity(), isChecked); - EventBus.getDefault().post(new APreferenceValueWasChanged(WRAP_CONTENT)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(WRAP_CONTENT)); } }); @@ -154,7 +154,7 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { sUseMonospace = isChecked; PreferenceHelper.setUseMonospace(getActivity(), isChecked); - EventBus.getDefault().post(new APreferenceValueWasChanged(MONOSPACE)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(MONOSPACE)); } }); @@ -163,7 +163,7 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { PreferenceHelper.setReadOnly(getActivity(), isChecked); - EventBus.getDefault().post(new APreferenceValueWasChanged(READ_ONLY)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(READ_ONLY)); } }); @@ -174,7 +174,8 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar int fontCurrent = //(int) (mEditor.getTextSize() / scaledDensity); //fontMax / 2; PreferenceHelper.getFontSize(getActivity()); - SeekbarDialog dialogFrag = SeekbarDialog.newInstance(SeekbarDialog.Actions + NumberPickerDialog dialogFrag = NumberPickerDialog.newInstance(NumberPickerDialog + .Actions .FontSize, 1, fontCurrent, fontMax); dialogFrag.setTargetFragment(SettingsFragment.this, 0); dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); @@ -210,7 +211,7 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { PreferenceHelper.setLightTheme(getActivity(), isChecked); - EventBus.getDefault().post(new APreferenceValueWasChanged(THEME_CHANGE)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(THEME_CHANGE)); } }); @@ -218,7 +219,35 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { PreferenceHelper.setSuggestionsActive(getActivity(), isChecked); - EventBus.getDefault().post(new APreferenceValueWasChanged(TEXT_SUGGESTIONS)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(TEXT_SUGGESTIONS)); + } + }); + + swAutoSave.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + PreferenceHelper.setAutoSave(getActivity(), isChecked); + } + }); + + swIgnoreBackButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + PreferenceHelper.setIgnoreBackButton(getActivity(), isChecked); + } + }); + + swSplitText.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + PreferenceHelper.setSplitText(getActivity(), isChecked); + } + }); + + swErrorReports.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + PreferenceHelper.setSendErrorReport(getActivity(), isChecked); } }); @@ -226,15 +255,15 @@ public class SettingsFragment extends Fragment implements SeekbarDialog.ISeekbar } @Override - public void onSeekbarDialogDismissed(SeekbarDialog.Actions action, int value) { + public void onNumberPickerDialogDismissed(NumberPickerDialog.Actions action, int value) { PreferenceHelper.setFontSize(getActivity(), value); - EventBus.getDefault().post(new APreferenceValueWasChanged(FONT_SIZE)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(FONT_SIZE)); } @Override public void onEncodingSelected(String result) { PreferenceHelper.setEncoding(getActivity(), result); - EventBus.getDefault().post(new APreferenceValueWasChanged(ENCODING)); + ((MainActivity) getActivity()).onEvent(new APreferenceValueWasChanged(ENCODING)); } } diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/task/SaveFileTask.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/task/SaveFileTask.java index bc4d5a0..cc6284d 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/task/SaveFileTask.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/task/SaveFileTask.java @@ -19,7 +19,6 @@ package sharedcode.turboeditor.task; -import android.content.Context; import android.os.AsyncTask; import android.widget.Toast; @@ -30,14 +29,14 @@ import java.io.File; import java.io.IOException; import java.util.concurrent.TimeoutException; -import de.greenrobot.event.EventBus; import sharedcode.turboeditor.R; +import sharedcode.turboeditor.activity.MainActivity; import sharedcode.turboeditor.root.RootUtils; import sharedcode.turboeditor.util.EventBusEvents; public class SaveFileTask extends AsyncTask { - private final Context context; + private final MainActivity activity; private final String filePath; private final String text; private final String encoding; @@ -45,8 +44,8 @@ public class SaveFileTask extends AsyncTask { private String message; private String positiveMessage; - public SaveFileTask(Context context, String filePath, String text, String encoding) { - this.context = context; + public SaveFileTask(MainActivity activity, String filePath, String text, String encoding) { + this.activity = activity; this.filePath = filePath; this.text = text; this.encoding = encoding; @@ -56,7 +55,7 @@ public class SaveFileTask extends AsyncTask { protected void onPreExecute() { super.onPreExecute(); file = new File(filePath); - positiveMessage = String.format(context.getString(R.string.file_saved_with_success), file.getName()); + positiveMessage = String.format(activity.getString(R.string.file_saved_with_success), file.getName()); } /** @@ -85,7 +84,7 @@ public class SaveFileTask extends AsyncTask { } } - RootUtils.writeFile(context, file.getAbsolutePath(), text, encoding, isRoot); + RootUtils.writeFile(activity, file.getAbsolutePath(), text, encoding, isRoot); message = positiveMessage; } catch (Exception e) { @@ -100,8 +99,8 @@ public class SaveFileTask extends AsyncTask { @Override protected void onPostExecute(final Void aVoid) { super.onPostExecute(aVoid); - Toast.makeText(context, message, Toast.LENGTH_LONG).show(); + Toast.makeText(activity, message, Toast.LENGTH_LONG).show(); if (message.equals(positiveMessage)) - EventBus.getDefault().post(new EventBusEvents.SavedAFile(filePath)); + activity.onEvent(new EventBusEvents.SavedAFile(filePath)); } } \ No newline at end of file diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/LineUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/LineUtils.java index 080b42b..3ca24ab 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/LineUtils.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/LineUtils.java @@ -34,17 +34,17 @@ public class LineUtils { return realLines; } - public int getYAtLine(ScrollView scrollView, int lineCount, int line) { + public static int getYAtLine(ScrollView scrollView, int lineCount, int line) { return scrollView.getChildAt(0).getHeight() / lineCount * line; } - public int getFirstVisibleLine(ScrollView scrollView, int childHeight, int lineCount) throws ArithmeticException { + public static int getFirstVisibleLine(ScrollView scrollView, int childHeight, int lineCount) throws ArithmeticException { int line = (scrollView.getScrollY() * lineCount) / childHeight; if (line < 0) line = 0; return line; } - public int getLastVisibleLine(ScrollView scrollView, int childHeight, int lineCount, int deviceHeight) { + public static int getLastVisibleLine(ScrollView scrollView, int childHeight, int lineCount, int deviceHeight) { int line = ((scrollView.getScrollY() + deviceHeight) * lineCount) / childHeight; if (line > lineCount) line = lineCount; return line; @@ -61,7 +61,8 @@ public class LineUtils { // for every line on the edittext for (i = 0; i < lineCount; i++) { // check if this line contains "\n" - hasNewLineArray[i] = text.substring(layout.getLineStart(i), layout.getLineEnd(i)).endsWith("\n"); + //hasNewLineArray[i] = text.substring(layout.getLineStart(i), layout.getLineEnd(i)).endsWith("\n"); + hasNewLineArray[i] = text.charAt(layout.getLineEnd(i) - 1) == '\n'; // if true if (hasNewLineArray[i]) { int j = i - 1; @@ -91,7 +92,7 @@ public class LineUtils { * @param layout * @return */ - public int getLineFromIndex(int index, int lineCount, Layout layout) { + public static int getLineFromIndex(int index, int lineCount, Layout layout) { int line; int currentIndex = 0; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/PageSystem.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/PageSystem.java index 22a3f32..f0f5299 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/PageSystem.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/PageSystem.java @@ -20,7 +20,11 @@ package sharedcode.turboeditor.texteditor; import android.content.Context; +import android.support.annotation.Nullable; +import org.apache.commons.io.FileUtils; + +import java.io.File; import java.util.LinkedList; import java.util.List; @@ -33,23 +37,32 @@ public class PageSystem { private int currentPage = 0; private PageSystemInterface pageSystemInterface; - public PageSystem(Context context, PageSystemInterface pageSystemInterface, String text) { + public PageSystem(Context context, PageSystemInterface pageSystemInterface, String text, @Nullable File file) { + + final int charForPage = 15000; + final int MAX_KBs_WITHOUT_PAGE_SYSTEM = 50; + this.pageSystemInterface = pageSystemInterface; pages = new LinkedList<>(); + final boolean doWithoutPageSystem; + if(file != null) + doWithoutPageSystem = FileUtils.sizeOf(file) < MAX_KBs_WITHOUT_PAGE_SYSTEM * FileUtils.ONE_KB; + else + doWithoutPageSystem = false; + int i = 0; - int charForPage = 15000; - int maxLenghtInOnePage = 30000; int to; - int indexOfReturn; - int textLenght = text.length(); + int nextIndexOfReturn; + final int textLength = text.length(); boolean pageSystemEnabled = PreferenceHelper.getSplitText(context); - if (pageSystemEnabled && textLenght > maxLenghtInOnePage) { - while (i < textLenght && pageSystemEnabled) { + + if (pageSystemEnabled && !doWithoutPageSystem) { + while (i < textLength) { to = i + charForPage; - indexOfReturn = text.indexOf("\n", to); - if (indexOfReturn > to) to = indexOfReturn; - if (to > text.length()) to = text.length(); + nextIndexOfReturn = text.indexOf("\n", to); + if (nextIndexOfReturn > to) to = nextIndexOfReturn; + //if (to > text.length()) to = text.length(); pages.add(text.substring(i, to)); i = to + 1; } 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 9c2b630..59b0462 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/Patterns.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/texteditor/Patterns.java @@ -50,11 +50,12 @@ public class Patterns { ":[ \t](.+?);"); public static final Pattern NUMBERS = Pattern.compile( - "\\b(\\d*[.]?\\d+)\\b"); - public static final Pattern CSS_NUMBERS = Pattern.compile( - "/^auto$|^[+-]?[0-9]+\\.?([0-9]+)?(px|em|ex|%|in|cm|mm|pt|pc)?$/ig"); + "(\\b(\\d*[.]?\\d+)\\b)"); + //public static final Pattern CSS_NUMBERS = Pattern.compile( + // "/^auto$|^[+-]?[0-9]+\\.?([0-9]+)?(px|em|ex|%|in|cm|mm|pt|pc)?$/ig"); public static final Pattern SYMBOLS = Pattern.compile( "(!|,|\\(|\\)|\\+|\\-|\\*|<|>|=|\\.|\\?|;|\\{|\\}|\\[|\\])"); + 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" @@ -78,7 +79,8 @@ public class Patterns { // Comments public static final Pattern XML_COMMENTS = Pattern.compile("(?s)"); public static final Pattern GENERAL_COMMENTS = Pattern.compile( - "/\\*(?:.|[\\n\\r])*?\\*/|//.*|#.*"); + "/\\*(?:.|[\\n\\r])*?\\*/|(? // public static final Pattern GENERAL_COMMENTS_NO_SLASH = Pattern.compile( "/\\*(?:.|[\\n\\r])*?\\*/|#.*"); public static final Pattern SQL_KEYWORDS = Pattern.compile( diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Build.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Build.java index c656ccc..5710f29 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Build.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Build.java @@ -16,6 +16,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + package sharedcode.turboeditor.util; import sharedcode.turboeditor.BuildConfig; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Device.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Device.java index ca464f6..3be1c54 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Device.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/Device.java @@ -16,6 +16,7 @@ * 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.os.Build; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/MimeTypes.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/MimeTypes.java index 4b1ba61..bba14c1 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/MimeTypes.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/MimeTypes.java @@ -51,4 +51,7 @@ public class MimeTypes { public static final String[] MIME_SQL = { "sql", "mdf", "ndf", "ldf" }; + public static final String[] MIME_MARKDOWN = { + "md", "mdown", "markdown", + }; } diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ToastUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ToastUtils.java index ff6a5bb..a146e01 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ToastUtils.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ToastUtils.java @@ -16,6 +16,7 @@ * 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; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ViewUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ViewUtils.java index 8459586..4a69252 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ViewUtils.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/ViewUtils.java @@ -16,6 +16,7 @@ * 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.graphics.Matrix; diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelper.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelper.java new file mode 100644 index 0000000..dd5e419 --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelper.java @@ -0,0 +1,290 @@ +/* + * 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.systemui; + +import android.app.Activity; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.view.WindowManager; + +/** + * Helper for controlling the visibility of the System UI across the various API levels. To use + * this API, instantiate an instance of this class with the required level. The level specifies the + * extent to which the System UI's visibility is changed when you call {@link #hide()} + * or {@link #toggle()}. + */ +public final class SystemUiHelper { + + /** + * In this level, the helper will toggle low profile mode. + */ + public static final int LEVEL_LOW_PROFILE = 0; + + /** + * In this level, the helper will toggle the visibility of the status bar. + * If there is a navigation bar, it will toggle low profile mode. + */ + public static final int LEVEL_HIDE_STATUS_BAR = 1; + + /** + * In this level, the helper will toggle the visibility of the navigation bar + * (if present and if possible) and status bar. In cases where the navigation + * bar is present but cannot be hidden, it will toggle low profile mode. + */ + public static final int LEVEL_LEAN_BACK = 2; + + /** + * In this level, the helper will toggle the visibility of the navigation bar + * (if present and if possible) and status bar, in an immersive mode. This means that the app + * will continue to receive all touch events. The user can reveal the system bars with an + * inward swipe along the region where the system bars normally appear. + * + *

The {@link #FLAG_IMMERSIVE_STICKY} flag can be used to control how the system bars are + * displayed. + */ + public static final int LEVEL_IMMERSIVE = 3; + + /** + * When this flag is set, the + * {@link android.view.WindowManager.LayoutParams#FLAG_LAYOUT_IN_SCREEN} + * flag will be set on older devices, making the status bar "float" on top + * of the activity layout. This is most useful when there are no controls at + * the top of the activity layout. + *

+ * This flag isn't used on newer devices because the action + * bar, the most important structural element of an Android app, should + * be visible and not obscured by the system UI. + */ + public static final int FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES = 0x1; + + /** + * Used with {@link #LEVEL_IMMERSIVE}. When this flag is set, an inward swipe in the system + * bars areas will cause the system bars to temporarily appear in a semi-transparent state, + * but no flags are cleared, and your system UI visibility change listeners are not triggered. + * The bars automatically hide again after a short delay, or if the user interacts with the + * middle of the screen. + */ + public static final int FLAG_IMMERSIVE_STICKY = 0x2; + + private static final String LOG_TAG = SystemUiHelper.class.getSimpleName(); + + private final SystemUiHelperImpl mImpl; + + private final Handler mHandler; + private final Runnable mHideRunnable; + + /** + * Construct a new SystemUiHelper. + * + * @param activity The Activity who's system UI should be changed + * @param level The level of hiding. Should be either {@link #LEVEL_LOW_PROFILE}, + * {@link #LEVEL_HIDE_STATUS_BAR}, {@link #LEVEL_LEAN_BACK} or + * {@link #LEVEL_IMMERSIVE} + * @param flags Additional options. See {@link #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES} and + * {@link #FLAG_IMMERSIVE_STICKY} + */ + public SystemUiHelper(Activity activity, int level, int flags) { + this(activity, level, flags, null); + } + + /** + * Construct a new SystemUiHelper. + * + * @param activity The Activity who's system UI should be changed + * @param level The level of hiding. Should be either {@link #LEVEL_LOW_PROFILE}, + * {@link #LEVEL_HIDE_STATUS_BAR}, {@link #LEVEL_LEAN_BACK} or + * {@link #LEVEL_IMMERSIVE} + * @param flags Additional options. See {@link #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES} and + * {@link #FLAG_IMMERSIVE_STICKY} + * @param listener A listener which is called when the system visibility is changed + */ + public SystemUiHelper(Activity activity, int level, int flags, + OnVisibilityChangeListener listener) { + + mHandler = new Handler(Looper.getMainLooper()); + mHideRunnable = new HideRunnable(); + + // Create impl + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + mImpl = new SystemUiHelperImplKK(activity, level, flags, listener); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + mImpl = new SystemUiHelperImplJB(activity, level, flags, listener); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + mImpl = new SystemUiHelperImplICS(activity, level, flags, listener); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + mImpl = new SystemUiHelperImplHC(activity, level, flags, listener); + } else { + mImpl = new SystemUiHelperImplBase(activity, level, flags, listener); + } + } + + /** + * @return true if the system UI is currently showing. What this means depends on the mode this + * {@link android.example.android.systemuivis.SystemUiHelper} was instantiated with. + */ + public boolean isShowing() { + return mImpl.isShowing(); + } + + /** + * Show the system UI. What this means depends on the mode this {@link android.example.android.systemuivis.SystemUiHelper} was + * instantiated with. + * + *

Any currently queued delayed hide requests will be removed. + */ + public void show() { + // Ensure that any currently queued hide calls are removed + removeQueuedRunnables(); + + mImpl.show(); + } + + /** + * Hide the system UI. What this means depends on the mode this {@link android.example.android.systemuivis.SystemUiHelper} was + * instantiated with. + * + *

Any currently queued delayed hide requests will be removed. + */ + public void hide() { + // Ensure that any currently queued hide calls are removed + removeQueuedRunnables(); + + mImpl.hide(); + } + + /** + * Request that the system UI is hidden after a delay. + * + *

Any currently queued delayed hide requests will be removed. + * + * @param delayMillis The delay (in milliseconds) until the Runnable + * will be executed. + */ + public void delayHide(long delayMillis) { + // Ensure that any currently queued hide calls are removed + removeQueuedRunnables(); + + mHandler.postDelayed(mHideRunnable, delayMillis); + } + + /** + * Toggle whether the system UI is displayed. + */ + public void toggle() { + if (mImpl.isShowing()) { + mImpl.hide(); + } else { + mImpl.show(); + } + } + + private void removeQueuedRunnables() { + // Ensure that any currently queued hide calls are removed + mHandler.removeCallbacks(mHideRunnable); + } + + /** + * A callback interface used to listen for system UI visibility changes. + */ + public interface OnVisibilityChangeListener { + /** + * Called when the system UI visibility has changed. + * + * @param visible True if the system UI is visible. + */ + public void onVisibilityChange(boolean visible); + } + + static abstract class SystemUiHelperImpl { + + final Activity mActivity; + final int mLevel; + final int mFlags; + final OnVisibilityChangeListener mOnVisibilityChangeListener; + + boolean mIsShowing = true; + + SystemUiHelperImpl(Activity activity, int level, int flags, + OnVisibilityChangeListener onVisibilityChangeListener) { + mActivity = activity; + mLevel = level; + mFlags = flags; + mOnVisibilityChangeListener = onVisibilityChangeListener; + } + + abstract void show(); + abstract void hide(); + + boolean isShowing() { + return mIsShowing; + } + + void setIsShowing(boolean isShowing) { + mIsShowing = isShowing; + + if (mOnVisibilityChangeListener != null) { + mOnVisibilityChangeListener.onVisibilityChange(mIsShowing); + } + } + } + + /** + * Base implementation. Used on API level 10 and below. + */ + static class SystemUiHelperImplBase extends SystemUiHelperImpl { + + SystemUiHelperImplBase(Activity activity, int level, int flags, + OnVisibilityChangeListener onVisibilityChangeListener) { + super(activity, level, flags, onVisibilityChangeListener); + + if ((mFlags & SystemUiHelper.FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES) != 0) { + mActivity.getWindow().addFlags( + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + } + + @Override + void show() { + if (mLevel > SystemUiHelper.LEVEL_LOW_PROFILE) { + mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + setIsShowing(true); + } + } + + @Override + void hide() { + if (mLevel > SystemUiHelper.LEVEL_LOW_PROFILE) { + mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + setIsShowing(false); + } + } + } + + private class HideRunnable implements Runnable { + @Override + public void run() { + hide(); + } + } + +} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplHC.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplHC.java new file mode 100644 index 0000000..431f6d8 --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplHC.java @@ -0,0 +1,94 @@ +/* + * 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.systemui; + +import android.app.Activity; +import android.support.v7.app.ActionBar; +import android.support.v7.app.ActionBarActivity; +import android.view.View; +import android.view.WindowManager; + +class SystemUiHelperImplHC extends SystemUiHelper.SystemUiHelperImpl + implements View.OnSystemUiVisibilityChangeListener { + + final View mDecorView; + + SystemUiHelperImplHC(Activity activity, int level, int flags, + SystemUiHelper.OnVisibilityChangeListener onVisibilityChangeListener) { + super(activity, level, flags, onVisibilityChangeListener); + + mDecorView = activity.getWindow().getDecorView(); + mDecorView.setOnSystemUiVisibilityChangeListener(this); + } + + + @Override + void show() { + mDecorView.setSystemUiVisibility(createShowFlags()); + } + + @Override + void hide() { + mDecorView.setSystemUiVisibility(createHideFlags()); + } + + @Override + public final void onSystemUiVisibilityChange(int visibility) { + if ((visibility & createTestFlags()) != 0) { + onSystemUiHidden(); + } else { + onSystemUiShown(); + } + } + + protected void onSystemUiShown() { + ActionBar ab = ((ActionBarActivity) mActivity).getSupportActionBar(); + if (ab != null) { + ab.show(); + } + + mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + + setIsShowing(true); + } + + protected void onSystemUiHidden() { + ActionBar ab = ((ActionBarActivity) mActivity).getSupportActionBar(); + if (ab != null) { + ab.hide(); + } + + mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + + setIsShowing(false); + } + + protected int createShowFlags() { + return View.STATUS_BAR_VISIBLE; + } + + protected int createHideFlags() { + return View.STATUS_BAR_HIDDEN; + } + + protected int createTestFlags() { + return View.STATUS_BAR_HIDDEN; + } + } \ No newline at end of file diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplICS.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplICS.java new file mode 100644 index 0000000..11d5829 --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplICS.java @@ -0,0 +1,60 @@ +/* + * 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.systemui; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.os.Build; +import android.view.View; + +@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) +class SystemUiHelperImplICS extends SystemUiHelperImplHC { + + SystemUiHelperImplICS(Activity activity, int level, int flags, + SystemUiHelper.OnVisibilityChangeListener onVisibilityChangeListener) { + super(activity, level, flags, onVisibilityChangeListener); + } + + @Override + protected int createShowFlags() { + return View.SYSTEM_UI_FLAG_VISIBLE; + } + + @Override + protected int createTestFlags() { + if (mLevel >= SystemUiHelper.LEVEL_LEAN_BACK) { + // Intentionally override test flags. + return View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + } + + return View.SYSTEM_UI_FLAG_LOW_PROFILE; + } + + @Override + protected int createHideFlags() { + int flag = View.SYSTEM_UI_FLAG_LOW_PROFILE; + + if (mLevel >= SystemUiHelper.LEVEL_LEAN_BACK) { + flag |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + } + + return flag; + } +} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplJB.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplJB.java new file mode 100644 index 0000000..f19e7c7 --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplJB.java @@ -0,0 +1,93 @@ +/* + * 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.systemui; + +import android.annotation.TargetApi; +import android.app.ActionBar; +import android.app.Activity; +import android.os.Build; +import android.view.View; + +@TargetApi(Build.VERSION_CODES.JELLY_BEAN) +class SystemUiHelperImplJB extends SystemUiHelperImplICS { + + SystemUiHelperImplJB(Activity activity, int level, int flags, + SystemUiHelper.OnVisibilityChangeListener onVisibilityChangeListener) { + super(activity, level, flags, onVisibilityChangeListener); + } + + @Override + protected int createShowFlags() { + int flag = super.createShowFlags(); + + if (mLevel >= SystemUiHelper.LEVEL_HIDE_STATUS_BAR) { + flag |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; + + if (mLevel >= SystemUiHelper.LEVEL_LEAN_BACK) { + flag |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; + } + } + + return flag; + } + + @Override + protected int createHideFlags() { + int flag = super.createHideFlags(); + + if (mLevel >= SystemUiHelper.LEVEL_HIDE_STATUS_BAR) { + flag |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_FULLSCREEN; + + if (mLevel >= SystemUiHelper.LEVEL_LEAN_BACK) { + flag |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; + } + } + + return flag; + } + + @Override + protected void onSystemUiShown() { + if (mLevel == SystemUiHelper.LEVEL_LOW_PROFILE) { + // Manually show the action bar when in low profile mode. + ActionBar ab = mActivity.getActionBar(); + if (ab != null) { + ab.show(); + } + } + + setIsShowing(false); + } + + @Override + protected void onSystemUiHidden() { + if (mLevel == SystemUiHelper.LEVEL_LOW_PROFILE) { + // Manually hide the action bar when in low profile mode. + ActionBar ab = mActivity.getActionBar(); + if (ab != null) { + ab.hide(); + } + } + + setIsShowing(true); + } +} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplKK.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplKK.java new file mode 100644 index 0000000..988fc46 --- /dev/null +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/systemui/SystemUiHelperImplKK.java @@ -0,0 +1,53 @@ +/* + * 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.systemui; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.os.Build; +import android.view.View; + +@TargetApi(Build.VERSION_CODES.KITKAT) +class SystemUiHelperImplKK extends SystemUiHelperImplJB { + + SystemUiHelperImplKK(Activity activity, int level, int flags, + SystemUiHelper.OnVisibilityChangeListener onVisibilityChangeListener) { + super(activity, level, flags, onVisibilityChangeListener); + } + + @Override + protected int createHideFlags() { + int flag = super.createHideFlags(); + + if (mLevel == SystemUiHelper.LEVEL_IMMERSIVE) { + // If the client requested immersive mode, and we're on Android 4.4 + // or later, add relevant flags. Applying HIDE_NAVIGATION without + // IMMERSIVE prevents the activity from accepting all touch events, + // so we only do this on Android 4.4 and later (where IMMERSIVE is + // present). + flag |= ((mFlags & SystemUiHelper.FLAG_IMMERSIVE_STICKY) != 0) + ? View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + : View.SYSTEM_UI_FLAG_IMMERSIVE; + } + + return flag; + } + +} diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/views/DialogHelper.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/views/DialogHelper.java index 5e1dac3..19e2ee0 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/views/DialogHelper.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/views/DialogHelper.java @@ -16,11 +16,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package sharedcode.turboeditor.views; -/** - * Created by Artem on 28.01.14. - */ +package sharedcode.turboeditor.views; import android.app.Activity; import android.app.AlertDialog; @@ -41,7 +38,7 @@ import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import sharedcode.turboeditor.R; -import sharedcode.turboeditor.fragment.AboutDialog; +import sharedcode.turboeditor.dialogfragment.AboutDialog; import sharedcode.turboeditor.iab.DonationFragment; /** diff --git a/libraries/sharedCode/src/main/res/drawable-hdpi/ic_launcher.png b/libraries/sharedCode/src/main/res/drawable-hdpi/ic_launcher.png index 9b5ae957539af950b231f5255bf5f25c8975ff92..12af7150537ab415f4675195cb568de7ddcb55a6 100644 GIT binary patch literal 5585 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 IM6N<$g1ZnFod5s; delta 3160 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 literal 8096 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 Zx~gHGJ+(+X3Y@%Cm>60bwCZ^w{sU1IDIWj; diff --git a/libraries/sharedCode/src/main/res/drawable-xxhdpi/ic_launcher.png b/libraries/sharedCode/src/main/res/drawable-xxhdpi/ic_launcher.png index c109e8a6f75c483421ba251ac976d8452b83f241..b2b9a1eeee5104e23c94e4a8742ce0977cdd7794 100644 GIT binary patch literal 14070 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 literal 14079 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 OLt8^ny;;>h?*9PLX{b2)7r0p(QgK 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 O02u0>KU<<>8}dJq + + android:textSize="12sp" + android:inputType="textNoSuggestions|textFilter|textVisiblePassword"/> + android:textSize="12sp" + android:inputType="textNoSuggestions|textFilter"/> diff --git a/libraries/sharedCode/src/main/res/layout/dialog_skeleton.xml b/libraries/sharedCode/src/main/res/layout/dialog_skeleton.xml index da926c7..8d8d130 100644 --- a/libraries/sharedCode/src/main/res/layout/dialog_skeleton.xml +++ b/libraries/sharedCode/src/main/res/layout/dialog_skeleton.xml @@ -1,20 +1,20 @@ + - + android:title="@string/donation_action" + /> diff --git a/libraries/sharedCode/src/main/res/raw/changelog.xml b/libraries/sharedCode/src/main/res/raw/changelog.xml index acfef20..158acb8 100644 --- a/libraries/sharedCode/src/main/res/raw/changelog.xml +++ b/libraries/sharedCode/src/main/res/raw/changelog.xml @@ -20,6 +20,11 @@ + + Happy Halloween! + Manly bug fixes + + Turbo Editor is a free and open source app. Now you can show your appreciation and support development by donating :) New visual changes to make the app more "Material" diff --git a/libraries/sharedCode/src/main/res/values-af-rZA/strings.xml b/libraries/sharedCode/src/main/res/values-af-rZA/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-af-rZA/strings.xml +++ b/libraries/sharedCode/src/main/res/values-af-rZA/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-af-rZA/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-af-rZA/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-af-rZA/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-af-rZA/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-af-rZA/strings_donation.xml b/libraries/sharedCode/src/main/res/values-af-rZA/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-af-rZA/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-af-rZA/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-ar-rSA/strings.xml b/libraries/sharedCode/src/main/res/values-ar-rSA/strings.xml index 99f2529..1b4f268 100644 --- a/libraries/sharedCode/src/main/res/values-ar-rSA/strings.xml +++ b/libraries/sharedCode/src/main/res/values-ar-rSA/strings.xml @@ -1,5 +1,4 @@ - + + استخدم مسافة موحدة diff --git a/libraries/sharedCode/src/main/res/values-ar-rSA/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-ar-rSA/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-ar-rSA/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-ar-rSA/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-ar-rSA/strings_donation.xml b/libraries/sharedCode/src/main/res/values-ar-rSA/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-ar-rSA/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-ar-rSA/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-az-rAZ/strings.xml b/libraries/sharedCode/src/main/res/values-az-rAZ/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-az-rAZ/strings.xml +++ b/libraries/sharedCode/src/main/res/values-az-rAZ/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-az-rAZ/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-az-rAZ/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-az-rAZ/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-az-rAZ/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-az-rAZ/strings_donation.xml b/libraries/sharedCode/src/main/res/values-az-rAZ/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-az-rAZ/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-az-rAZ/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-be-rBY/strings.xml b/libraries/sharedCode/src/main/res/values-be-rBY/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-be-rBY/strings.xml +++ b/libraries/sharedCode/src/main/res/values-be-rBY/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-be-rBY/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-be-rBY/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-be-rBY/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-be-rBY/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-be-rBY/strings_donation.xml b/libraries/sharedCode/src/main/res/values-be-rBY/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-be-rBY/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-be-rBY/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-bg-rBG/strings.xml b/libraries/sharedCode/src/main/res/values-bg-rBG/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-bg-rBG/strings.xml +++ b/libraries/sharedCode/src/main/res/values-bg-rBG/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-bg-rBG/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-bg-rBG/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-bg-rBG/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-bg-rBG/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-bg-rBG/strings_donation.xml b/libraries/sharedCode/src/main/res/values-bg-rBG/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-bg-rBG/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-bg-rBG/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-ca-rES/strings.xml b/libraries/sharedCode/src/main/res/values-ca-rES/strings.xml index 63bd647..d400f21 100644 --- a/libraries/sharedCode/src/main/res/values-ca-rES/strings.xml +++ b/libraries/sharedCode/src/main/res/values-ca-rES/strings.xml @@ -1,5 +1,4 @@ - + + Usar monospace diff --git a/libraries/sharedCode/src/main/res/values-ca-rES/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-ca-rES/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-ca-rES/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-ca-rES/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-ca-rES/strings_donation.xml b/libraries/sharedCode/src/main/res/values-ca-rES/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-ca-rES/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-ca-rES/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-cs-rCZ/strings.xml b/libraries/sharedCode/src/main/res/values-cs-rCZ/strings.xml index 75dc356..fef8d8c 100644 --- a/libraries/sharedCode/src/main/res/values-cs-rCZ/strings.xml +++ b/libraries/sharedCode/src/main/res/values-cs-rCZ/strings.xml @@ -1,5 +1,4 @@ - + + Použít neproporcionální diff --git a/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_donation.xml b/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_donation.xml index 4baefaf..bfe1f76 100644 --- a/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-cs-rCZ/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Podpořit Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-da-rDK/strings.xml b/libraries/sharedCode/src/main/res/values-da-rDK/strings.xml index a321c57..d5369e9 100644 --- a/libraries/sharedCode/src/main/res/values-da-rDK/strings.xml +++ b/libraries/sharedCode/src/main/res/values-da-rDK/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-da-rDK/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-da-rDK/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-da-rDK/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-da-rDK/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-da-rDK/strings_donation.xml b/libraries/sharedCode/src/main/res/values-da-rDK/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-da-rDK/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-da-rDK/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-de-rDE/strings.xml b/libraries/sharedCode/src/main/res/values-de-rDE/strings.xml index 5e325f7..d828496 100644 --- a/libraries/sharedCode/src/main/res/values-de-rDE/strings.xml +++ b/libraries/sharedCode/src/main/res/values-de-rDE/strings.xml @@ -1,5 +1,4 @@ - + + Verwenden Sie Monospace diff --git a/libraries/sharedCode/src/main/res/values-de-rDE/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-de-rDE/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-de-rDE/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-de-rDE/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-de-rDE/strings_donation.xml b/libraries/sharedCode/src/main/res/values-de-rDE/strings_donation.xml index f5bd552..16ae564 100644 --- a/libraries/sharedCode/src/main/res/values-de-rDE/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-de-rDE/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Spenden Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-el-rGR/strings.xml b/libraries/sharedCode/src/main/res/values-el-rGR/strings.xml index eb5e330..1fbf7c8 100644 --- a/libraries/sharedCode/src/main/res/values-el-rGR/strings.xml +++ b/libraries/sharedCode/src/main/res/values-el-rGR/strings.xml @@ -1,5 +1,4 @@ - + + Χρήση monospace γραμματοσειράς diff --git a/libraries/sharedCode/src/main/res/values-el-rGR/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-el-rGR/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-el-rGR/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-el-rGR/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-el-rGR/strings_donation.xml b/libraries/sharedCode/src/main/res/values-el-rGR/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-el-rGR/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-el-rGR/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-es-rES/strings.xml b/libraries/sharedCode/src/main/res/values-es-rES/strings.xml index 643c0bb..46d0014 100644 --- a/libraries/sharedCode/src/main/res/values-es-rES/strings.xml +++ b/libraries/sharedCode/src/main/res/values-es-rES/strings.xml @@ -1,5 +1,4 @@ - + + Usar monoespacio diff --git a/libraries/sharedCode/src/main/res/values-es-rES/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-es-rES/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-es-rES/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-es-rES/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-es-rES/strings_donation.xml b/libraries/sharedCode/src/main/res/values-es-rES/strings_donation.xml index 17ef599..84343fe 100644 --- a/libraries/sharedCode/src/main/res/values-es-rES/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-es-rES/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donar Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-fi-rFI/strings.xml b/libraries/sharedCode/src/main/res/values-fi-rFI/strings.xml index fbb5d27..1e0b26c 100644 --- a/libraries/sharedCode/src/main/res/values-fi-rFI/strings.xml +++ b/libraries/sharedCode/src/main/res/values-fi-rFI/strings.xml @@ -1,5 +1,4 @@ - + + Käytä tasalevyistä fonttia diff --git a/libraries/sharedCode/src/main/res/values-fi-rFI/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-fi-rFI/strings_dialogs.xml index e8ce99d..1bb4a28 100644 --- a/libraries/sharedCode/src/main/res/values-fi-rFI/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-fi-rFI/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Sulje Tietoja diff --git a/libraries/sharedCode/src/main/res/values-fi-rFI/strings_donation.xml b/libraries/sharedCode/src/main/res/values-fi-rFI/strings_donation.xml index ea9cee6..d488e4d 100644 --- a/libraries/sharedCode/src/main/res/values-fi-rFI/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-fi-rFI/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Lahjoita Lahjoita kehittäjälle diff --git a/libraries/sharedCode/src/main/res/values-fil-rPH/strings.xml b/libraries/sharedCode/src/main/res/values-fil-rPH/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-fil-rPH/strings.xml +++ b/libraries/sharedCode/src/main/res/values-fil-rPH/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-fil-rPH/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-fil-rPH/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-fil-rPH/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-fil-rPH/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-fil-rPH/strings_donation.xml b/libraries/sharedCode/src/main/res/values-fil-rPH/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-fil-rPH/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-fil-rPH/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-fr-rFR/strings.xml b/libraries/sharedCode/src/main/res/values-fr-rFR/strings.xml index 50cf2d7..7d564a6 100644 --- a/libraries/sharedCode/src/main/res/values-fr-rFR/strings.xml +++ b/libraries/sharedCode/src/main/res/values-fr-rFR/strings.xml @@ -1,5 +1,4 @@ - + + Utiliser une police de largeur fixe diff --git a/libraries/sharedCode/src/main/res/values-fr-rFR/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-fr-rFR/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-fr-rFR/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-fr-rFR/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-fr-rFR/strings_donation.xml b/libraries/sharedCode/src/main/res/values-fr-rFR/strings_donation.xml index a078209..b0da9f5 100644 --- a/libraries/sharedCode/src/main/res/values-fr-rFR/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-fr-rFR/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Faire un don Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-gl-rES/strings.xml b/libraries/sharedCode/src/main/res/values-gl-rES/strings.xml index c4512fb..9673923 100644 --- a/libraries/sharedCode/src/main/res/values-gl-rES/strings.xml +++ b/libraries/sharedCode/src/main/res/values-gl-rES/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-gl-rES/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-gl-rES/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-gl-rES/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-gl-rES/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-gl-rES/strings_donation.xml b/libraries/sharedCode/src/main/res/values-gl-rES/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-gl-rES/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-gl-rES/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-hi-rIN/strings.xml b/libraries/sharedCode/src/main/res/values-hi-rIN/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-hi-rIN/strings.xml +++ b/libraries/sharedCode/src/main/res/values-hi-rIN/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-hi-rIN/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-hi-rIN/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-hi-rIN/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-hi-rIN/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-hi-rIN/strings_donation.xml b/libraries/sharedCode/src/main/res/values-hi-rIN/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-hi-rIN/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-hi-rIN/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-hr-rHR/strings.xml b/libraries/sharedCode/src/main/res/values-hr-rHR/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-hr-rHR/strings.xml +++ b/libraries/sharedCode/src/main/res/values-hr-rHR/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-hr-rHR/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-hr-rHR/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-hr-rHR/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-hr-rHR/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-hr-rHR/strings_donation.xml b/libraries/sharedCode/src/main/res/values-hr-rHR/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-hr-rHR/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-hr-rHR/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-hu-rHU/strings.xml b/libraries/sharedCode/src/main/res/values-hu-rHU/strings.xml index 1d5ce96..04be3a4 100644 --- a/libraries/sharedCode/src/main/res/values-hu-rHU/strings.xml +++ b/libraries/sharedCode/src/main/res/values-hu-rHU/strings.xml @@ -1,5 +1,4 @@ - + + Fix szélességű betűk használata diff --git a/libraries/sharedCode/src/main/res/values-hu-rHU/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-hu-rHU/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-hu-rHU/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-hu-rHU/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-hu-rHU/strings_donation.xml b/libraries/sharedCode/src/main/res/values-hu-rHU/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-hu-rHU/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-hu-rHU/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-hy-rAM/strings.xml b/libraries/sharedCode/src/main/res/values-hy-rAM/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-hy-rAM/strings.xml +++ b/libraries/sharedCode/src/main/res/values-hy-rAM/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-hy-rAM/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-hy-rAM/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-hy-rAM/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-hy-rAM/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-hy-rAM/strings_donation.xml b/libraries/sharedCode/src/main/res/values-hy-rAM/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-hy-rAM/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-hy-rAM/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-in-rID/strings.xml b/libraries/sharedCode/src/main/res/values-in-rID/strings.xml index d4f7cbb..c68fe5a 100644 --- a/libraries/sharedCode/src/main/res/values-in-rID/strings.xml +++ b/libraries/sharedCode/src/main/res/values-in-rID/strings.xml @@ -1,5 +1,4 @@ - + + Gunakan monospace diff --git a/libraries/sharedCode/src/main/res/values-in-rID/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-in-rID/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-in-rID/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-in-rID/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-in-rID/strings_donation.xml b/libraries/sharedCode/src/main/res/values-in-rID/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-in-rID/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-in-rID/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-it-rIT/strings.xml b/libraries/sharedCode/src/main/res/values-it-rIT/strings.xml index 6cfda83..9859ab7 100644 --- a/libraries/sharedCode/src/main/res/values-it-rIT/strings.xml +++ b/libraries/sharedCode/src/main/res/values-it-rIT/strings.xml @@ -1,5 +1,4 @@ - + + Monospace diff --git a/libraries/sharedCode/src/main/res/values-it-rIT/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-it-rIT/strings_dialogs.xml index 7ab3748..4e245cf 100644 --- a/libraries/sharedCode/src/main/res/values-it-rIT/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-it-rIT/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Chiudi Informazioni diff --git a/libraries/sharedCode/src/main/res/values-it-rIT/strings_donation.xml b/libraries/sharedCode/src/main/res/values-it-rIT/strings_donation.xml index 9ed36e1..2715cd7 100644 --- a/libraries/sharedCode/src/main/res/values-it-rIT/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-it-rIT/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Dona Fai una donazione allo sviluppatore diff --git a/libraries/sharedCode/src/main/res/values-iw-rIL/strings.xml b/libraries/sharedCode/src/main/res/values-iw-rIL/strings.xml index 88be70b..fadb371 100644 --- a/libraries/sharedCode/src/main/res/values-iw-rIL/strings.xml +++ b/libraries/sharedCode/src/main/res/values-iw-rIL/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-iw-rIL/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-iw-rIL/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-iw-rIL/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-iw-rIL/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-iw-rIL/strings_donation.xml b/libraries/sharedCode/src/main/res/values-iw-rIL/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-iw-rIL/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-iw-rIL/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-ja-rJP/strings.xml b/libraries/sharedCode/src/main/res/values-ja-rJP/strings.xml index aca60de..ed72f6d 100644 --- a/libraries/sharedCode/src/main/res/values-ja-rJP/strings.xml +++ b/libraries/sharedCode/src/main/res/values-ja-rJP/strings.xml @@ -1,5 +1,4 @@ - + + モノスペースを使用 diff --git a/libraries/sharedCode/src/main/res/values-ja-rJP/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-ja-rJP/strings_dialogs.xml index 8a5366f..f8866ff 100644 --- a/libraries/sharedCode/src/main/res/values-ja-rJP/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-ja-rJP/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + 閉じる アプリについて diff --git a/libraries/sharedCode/src/main/res/values-ja-rJP/strings_donation.xml b/libraries/sharedCode/src/main/res/values-ja-rJP/strings_donation.xml index ef59c68..5171330 100644 --- a/libraries/sharedCode/src/main/res/values-ja-rJP/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-ja-rJP/strings_donation.xml @@ -1,5 +1,4 @@ - + + + 寄付 開発者に寄付 diff --git a/libraries/sharedCode/src/main/res/values-ko-rKR/strings.xml b/libraries/sharedCode/src/main/res/values-ko-rKR/strings.xml index 76c7f13..2376bbd 100644 --- a/libraries/sharedCode/src/main/res/values-ko-rKR/strings.xml +++ b/libraries/sharedCode/src/main/res/values-ko-rKR/strings.xml @@ -1,5 +1,4 @@ - + + 고정 폭 사용 diff --git a/libraries/sharedCode/src/main/res/values-ko-rKR/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-ko-rKR/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-ko-rKR/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-ko-rKR/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-ko-rKR/strings_donation.xml b/libraries/sharedCode/src/main/res/values-ko-rKR/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-ko-rKR/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-ko-rKR/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-lb-rLU/strings.xml b/libraries/sharedCode/src/main/res/values-lb-rLU/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-lb-rLU/strings.xml +++ b/libraries/sharedCode/src/main/res/values-lb-rLU/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-lb-rLU/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-lb-rLU/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-lb-rLU/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-lb-rLU/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-lb-rLU/strings_donation.xml b/libraries/sharedCode/src/main/res/values-lb-rLU/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-lb-rLU/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-lb-rLU/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-mk-rMK/strings.xml b/libraries/sharedCode/src/main/res/values-mk-rMK/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-mk-rMK/strings.xml +++ b/libraries/sharedCode/src/main/res/values-mk-rMK/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-mk-rMK/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-mk-rMK/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-mk-rMK/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-mk-rMK/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-mk-rMK/strings_donation.xml b/libraries/sharedCode/src/main/res/values-mk-rMK/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-mk-rMK/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-mk-rMK/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-mn-rMN/strings.xml b/libraries/sharedCode/src/main/res/values-mn-rMN/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-mn-rMN/strings.xml +++ b/libraries/sharedCode/src/main/res/values-mn-rMN/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-mn-rMN/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-mn-rMN/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-mn-rMN/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-mn-rMN/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-mn-rMN/strings_donation.xml b/libraries/sharedCode/src/main/res/values-mn-rMN/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-mn-rMN/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-mn-rMN/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-mt-rMT/strings.xml b/libraries/sharedCode/src/main/res/values-mt-rMT/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-mt-rMT/strings.xml +++ b/libraries/sharedCode/src/main/res/values-mt-rMT/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-mt-rMT/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-mt-rMT/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-mt-rMT/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-mt-rMT/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-mt-rMT/strings_donation.xml b/libraries/sharedCode/src/main/res/values-mt-rMT/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-mt-rMT/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-mt-rMT/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-nl-rNL/strings.xml b/libraries/sharedCode/src/main/res/values-nl-rNL/strings.xml index 096cc3e..41ad902 100644 --- a/libraries/sharedCode/src/main/res/values-nl-rNL/strings.xml +++ b/libraries/sharedCode/src/main/res/values-nl-rNL/strings.xml @@ -1,5 +1,4 @@ - + + Gebruik monospace diff --git a/libraries/sharedCode/src/main/res/values-nl-rNL/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-nl-rNL/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-nl-rNL/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-nl-rNL/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-nl-rNL/strings_donation.xml b/libraries/sharedCode/src/main/res/values-nl-rNL/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-nl-rNL/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-nl-rNL/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-no-rNO/strings.xml b/libraries/sharedCode/src/main/res/values-no-rNO/strings.xml index 1cc84ac..c95ee5e 100644 --- a/libraries/sharedCode/src/main/res/values-no-rNO/strings.xml +++ b/libraries/sharedCode/src/main/res/values-no-rNO/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-no-rNO/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-no-rNO/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-no-rNO/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-no-rNO/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-no-rNO/strings_donation.xml b/libraries/sharedCode/src/main/res/values-no-rNO/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-no-rNO/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-no-rNO/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-pl-rPL/strings.xml b/libraries/sharedCode/src/main/res/values-pl-rPL/strings.xml index f9be2d0..eda2f07 100644 --- a/libraries/sharedCode/src/main/res/values-pl-rPL/strings.xml +++ b/libraries/sharedCode/src/main/res/values-pl-rPL/strings.xml @@ -1,5 +1,4 @@ - + + Użyj stałej szerokości diff --git a/libraries/sharedCode/src/main/res/values-pl-rPL/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-pl-rPL/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-pl-rPL/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-pl-rPL/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-pl-rPL/strings_donation.xml b/libraries/sharedCode/src/main/res/values-pl-rPL/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-pl-rPL/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-pl-rPL/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-pt-rBR/strings.xml b/libraries/sharedCode/src/main/res/values-pt-rBR/strings.xml index 0e19838..d35fb7a 100644 --- a/libraries/sharedCode/src/main/res/values-pt-rBR/strings.xml +++ b/libraries/sharedCode/src/main/res/values-pt-rBR/strings.xml @@ -1,5 +1,4 @@ - + + Usar mono-espaço diff --git a/libraries/sharedCode/src/main/res/values-pt-rBR/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-pt-rBR/strings_dialogs.xml index 288ca15..7ab680a 100644 --- a/libraries/sharedCode/src/main/res/values-pt-rBR/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-pt-rBR/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Fechar Sobre diff --git a/libraries/sharedCode/src/main/res/values-pt-rBR/strings_donation.xml b/libraries/sharedCode/src/main/res/values-pt-rBR/strings_donation.xml index 12edaf2..a10dca7 100644 --- a/libraries/sharedCode/src/main/res/values-pt-rBR/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-pt-rBR/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Faça uma doação Doar para o desenvolvedor diff --git a/libraries/sharedCode/src/main/res/values-pt-rPT/strings.xml b/libraries/sharedCode/src/main/res/values-pt-rPT/strings.xml index c9303ab..188338b 100644 --- a/libraries/sharedCode/src/main/res/values-pt-rPT/strings.xml +++ b/libraries/sharedCode/src/main/res/values-pt-rPT/strings.xml @@ -1,5 +1,4 @@ - + + Usar mono-espaço diff --git a/libraries/sharedCode/src/main/res/values-pt-rPT/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-pt-rPT/strings_dialogs.xml index c1df8e5..ec32847 100644 --- a/libraries/sharedCode/src/main/res/values-pt-rPT/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-pt-rPT/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Fechar Sobre diff --git a/libraries/sharedCode/src/main/res/values-pt-rPT/strings_donation.xml b/libraries/sharedCode/src/main/res/values-pt-rPT/strings_donation.xml index 225a648..71f84d4 100644 --- a/libraries/sharedCode/src/main/res/values-pt-rPT/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-pt-rPT/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donativos Efetuar donativo diff --git a/libraries/sharedCode/src/main/res/values-ro-rRO/strings.xml b/libraries/sharedCode/src/main/res/values-ro-rRO/strings.xml index 18bb8ac..8a493c8 100644 --- a/libraries/sharedCode/src/main/res/values-ro-rRO/strings.xml +++ b/libraries/sharedCode/src/main/res/values-ro-rRO/strings.xml @@ -1,5 +1,4 @@ - + + Utilizează monospaţiu diff --git a/libraries/sharedCode/src/main/res/values-ro-rRO/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-ro-rRO/strings_dialogs.xml index 487b796..f396291 100644 --- a/libraries/sharedCode/src/main/res/values-ro-rRO/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-ro-rRO/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Închide Despre diff --git a/libraries/sharedCode/src/main/res/values-ro-rRO/strings_donation.xml b/libraries/sharedCode/src/main/res/values-ro-rRO/strings_donation.xml index ba3c96e..6fe2f15 100644 --- a/libraries/sharedCode/src/main/res/values-ro-rRO/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-ro-rRO/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donează Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-ru-rRU/strings.xml b/libraries/sharedCode/src/main/res/values-ru-rRU/strings.xml index a37465b..49466e8 100644 --- a/libraries/sharedCode/src/main/res/values-ru-rRU/strings.xml +++ b/libraries/sharedCode/src/main/res/values-ru-rRU/strings.xml @@ -1,5 +1,4 @@ - + + Моноширинный шрифт diff --git a/libraries/sharedCode/src/main/res/values-ru-rRU/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-ru-rRU/strings_dialogs.xml index 751f735..83c40d5 100644 --- a/libraries/sharedCode/src/main/res/values-ru-rRU/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-ru-rRU/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Закрыть О программе diff --git a/libraries/sharedCode/src/main/res/values-ru-rRU/strings_donation.xml b/libraries/sharedCode/src/main/res/values-ru-rRU/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-ru-rRU/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-ru-rRU/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-sl-rSI/strings.xml b/libraries/sharedCode/src/main/res/values-sl-rSI/strings.xml index 26da45c..bbb660a 100644 --- a/libraries/sharedCode/src/main/res/values-sl-rSI/strings.xml +++ b/libraries/sharedCode/src/main/res/values-sl-rSI/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-sl-rSI/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-sl-rSI/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-sl-rSI/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-sl-rSI/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-sl-rSI/strings_donation.xml b/libraries/sharedCode/src/main/res/values-sl-rSI/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-sl-rSI/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-sl-rSI/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-sq-rAL/strings.xml b/libraries/sharedCode/src/main/res/values-sq-rAL/strings.xml index ed26d53..5d52fd2 100644 --- a/libraries/sharedCode/src/main/res/values-sq-rAL/strings.xml +++ b/libraries/sharedCode/src/main/res/values-sq-rAL/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-sq-rAL/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-sq-rAL/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-sq-rAL/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-sq-rAL/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-sq-rAL/strings_donation.xml b/libraries/sharedCode/src/main/res/values-sq-rAL/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-sq-rAL/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-sq-rAL/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-sr-rSP/strings.xml b/libraries/sharedCode/src/main/res/values-sr-rSP/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-sr-rSP/strings.xml +++ b/libraries/sharedCode/src/main/res/values-sr-rSP/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-sr-rSP/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-sr-rSP/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-sr-rSP/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-sr-rSP/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-sr-rSP/strings_donation.xml b/libraries/sharedCode/src/main/res/values-sr-rSP/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-sr-rSP/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-sr-rSP/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-sv-rSE/strings.xml b/libraries/sharedCode/src/main/res/values-sv-rSE/strings.xml index bfcb5d9..bc3caba 100644 --- a/libraries/sharedCode/src/main/res/values-sv-rSE/strings.xml +++ b/libraries/sharedCode/src/main/res/values-sv-rSE/strings.xml @@ -1,5 +1,4 @@ - + + Använd monospace diff --git a/libraries/sharedCode/src/main/res/values-sv-rSE/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-sv-rSE/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-sv-rSE/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-sv-rSE/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-sv-rSE/strings_donation.xml b/libraries/sharedCode/src/main/res/values-sv-rSE/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-sv-rSE/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-sv-rSE/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-tr-rTR/strings.xml b/libraries/sharedCode/src/main/res/values-tr-rTR/strings.xml index 6d32407..b50c397 100644 --- a/libraries/sharedCode/src/main/res/values-tr-rTR/strings.xml +++ b/libraries/sharedCode/src/main/res/values-tr-rTR/strings.xml @@ -1,5 +1,4 @@ - + + Sabit genişlikli yazı tipi kullan diff --git a/libraries/sharedCode/src/main/res/values-tr-rTR/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-tr-rTR/strings_dialogs.xml index a90ae36..b4ecd0c 100644 --- a/libraries/sharedCode/src/main/res/values-tr-rTR/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-tr-rTR/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Kapat Hakkında diff --git a/libraries/sharedCode/src/main/res/values-tr-rTR/strings_donation.xml b/libraries/sharedCode/src/main/res/values-tr-rTR/strings_donation.xml index d6e4c1f..f719c74 100644 --- a/libraries/sharedCode/src/main/res/values-tr-rTR/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-tr-rTR/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Bağış yap Geliştiriciye bağış yap diff --git a/libraries/sharedCode/src/main/res/values-uk-rUA/strings.xml b/libraries/sharedCode/src/main/res/values-uk-rUA/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-uk-rUA/strings.xml +++ b/libraries/sharedCode/src/main/res/values-uk-rUA/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-uk-rUA/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-uk-rUA/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-uk-rUA/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-uk-rUA/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-uk-rUA/strings_donation.xml b/libraries/sharedCode/src/main/res/values-uk-rUA/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-uk-rUA/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-uk-rUA/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-vi-rVN/strings.xml b/libraries/sharedCode/src/main/res/values-vi-rVN/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-vi-rVN/strings.xml +++ b/libraries/sharedCode/src/main/res/values-vi-rVN/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-vi-rVN/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-vi-rVN/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-vi-rVN/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-vi-rVN/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-vi-rVN/strings_donation.xml b/libraries/sharedCode/src/main/res/values-vi-rVN/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-vi-rVN/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-vi-rVN/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-vls-rBE/strings.xml b/libraries/sharedCode/src/main/res/values-vls-rBE/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-vls-rBE/strings.xml +++ b/libraries/sharedCode/src/main/res/values-vls-rBE/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-vls-rBE/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-vls-rBE/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-vls-rBE/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-vls-rBE/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-vls-rBE/strings_donation.xml b/libraries/sharedCode/src/main/res/values-vls-rBE/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-vls-rBE/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-vls-rBE/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-zh-rCN/strings.xml b/libraries/sharedCode/src/main/res/values-zh-rCN/strings.xml index 4afee70..c9452c4 100644 --- a/libraries/sharedCode/src/main/res/values-zh-rCN/strings.xml +++ b/libraries/sharedCode/src/main/res/values-zh-rCN/strings.xml @@ -1,5 +1,4 @@ - + + 使用等宽字体 diff --git a/libraries/sharedCode/src/main/res/values-zh-rCN/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-zh-rCN/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-zh-rCN/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-zh-rCN/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-zh-rCN/strings_donation.xml b/libraries/sharedCode/src/main/res/values-zh-rCN/strings_donation.xml index 16cbc5e..4316e9b 100644 --- a/libraries/sharedCode/src/main/res/values-zh-rCN/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-zh-rCN/strings_donation.xml @@ -1,5 +1,4 @@ - + + + 捐赠 Donate to developer diff --git a/libraries/sharedCode/src/main/res/values-zh-rTW/strings.xml b/libraries/sharedCode/src/main/res/values-zh-rTW/strings.xml index ba3c203..3cb52a0 100644 --- a/libraries/sharedCode/src/main/res/values-zh-rTW/strings.xml +++ b/libraries/sharedCode/src/main/res/values-zh-rTW/strings.xml @@ -1,5 +1,4 @@ - + + Use monospace diff --git a/libraries/sharedCode/src/main/res/values-zh-rTW/strings_dialogs.xml b/libraries/sharedCode/src/main/res/values-zh-rTW/strings_dialogs.xml index af29a59..09836d2 100644 --- a/libraries/sharedCode/src/main/res/values-zh-rTW/strings_dialogs.xml +++ b/libraries/sharedCode/src/main/res/values-zh-rTW/strings_dialogs.xml @@ -1,5 +1,4 @@ - + + + Close About diff --git a/libraries/sharedCode/src/main/res/values-zh-rTW/strings_donation.xml b/libraries/sharedCode/src/main/res/values-zh-rTW/strings_donation.xml index 9b2bcc8..2913ac3 100644 --- a/libraries/sharedCode/src/main/res/values-zh-rTW/strings_donation.xml +++ b/libraries/sharedCode/src/main/res/values-zh-rTW/strings_donation.xml @@ -1,5 +1,4 @@ - + + + Donate Donate to developer diff --git a/libraries/sharedCode/src/main/res/values/ids.xml b/libraries/sharedCode/src/main/res/values/ids.xml index ad55774..8f0858f 100644 --- a/libraries/sharedCode/src/main/res/values/ids.xml +++ b/libraries/sharedCode/src/main/res/values/ids.xml @@ -1,4 +1,5 @@ + diff --git a/libraries/sharedCode/src/main/res/values/integers.xml b/libraries/sharedCode/src/main/res/values/integers.xml index 2ae83d1..2789c9a 100644 --- a/libraries/sharedCode/src/main/res/values/integers.xml +++ b/libraries/sharedCode/src/main/res/values/integers.xml @@ -1,4 +1,5 @@ +