diff --git a/app/build.gradle b/app/build.gradle index a82339e4..381c17d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,11 +70,15 @@ dependencies { implementation "com.github.topjohnwu.libsu:io:${libsuVersion}" implementation 'com.github.bumptech.glide:annotations:4.9.0' implementation 'com.github.bumptech.glide:glide:4.9.0' - implementation ("com.github.bumptech.glide:recyclerview-integration:4.9.0") { + implementation "com.mikepenz:iconics-core:3.2.5" + implementation 'com.mikepenz:material-design-iconic-typeface:2.2.0.5@aar' + implementation 'de.psdev.licensesdialog:licensesdialog:2.1.0' + implementation("com.github.bumptech.glide:recyclerview-integration:4.9.0") { transitive = false } annotationProcessor 'androidx.annotation:annotation:1.1.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.4.2' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2' -} + +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aa59239e..13a03b32 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,9 @@ android:theme="@style/AppTheme.NoActionBar" tools:ignore="GoogleAppIndexingWarning" tools:replace="android:theme"> + @@ -26,12 +29,15 @@ android:launchMode="singleTask"> + + + diff --git a/app/src/main/assets/changelog.html b/app/src/main/assets/changelog.html new file mode 100644 index 00000000..d4bde8e1 --- /dev/null +++ b/app/src/main/assets/changelog.html @@ -0,0 +1,45 @@ + + + + + +
+

Version 1.0

+

New

+ +

Fixes

+ + \ No newline at end of file diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/AboutActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/AboutActivity.java new file mode 100644 index 00000000..f217ed0f --- /dev/null +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/AboutActivity.java @@ -0,0 +1,121 @@ +package com.beemdevelopment.aegis.ui; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import com.beemdevelopment.aegis.Preferences; +import com.beemdevelopment.aegis.R; +import com.beemdevelopment.aegis.Theme; +import com.beemdevelopment.aegis.helpers.ThemeHelper; +import com.beemdevelopment.aegis.ui.glide.GlideLicense; +import com.mikepenz.iconics.Iconics; +import com.mikepenz.iconics.context.IconicsLayoutInflater2; +import com.mikepenz.material_design_iconic_typeface_library.MaterialDesignIconic; + +import androidx.core.view.LayoutInflaterCompat; + +import de.psdev.licensesdialog.LicenseResolver; +import de.psdev.licensesdialog.LicensesDialog; +import de.psdev.licensesdialog.licenses.License; + +public class AboutActivity extends AegisActivity { + + private static String GITHUB = "https://github.com/beemdevelopment/Aegis"; + private static String WEBSITE_ALEXANDER = "https://alexbakker.me"; + private static String GITHUB_MICHAEL = "https://github.com/michaelschattgen"; + + private static String MAIL_BEEMDEVELOPMENT = "beemdevelopment@gmail.com"; + private static String WEBSITE_BEEMDEVELOPMENT = "https://beem.dev/"; + private static String PLAYSTORE_BEEMDEVELOPMENT = "https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + LayoutInflaterCompat.setFactory2(getLayoutInflater(), new IconicsLayoutInflater2(getDelegate())); + + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_about); + + Iconics.init(getApplicationContext()); + Iconics.registerFont(new MaterialDesignIconic()); + + View btnLicenses = findViewById(R.id.btn_licenses); + btnLicenses.setOnClickListener(v -> showLicenseDialog()); + + TextView appVersion = findViewById(R.id.app_version); + appVersion.setText(getCurrentVersion()); + + View btnGithub = findViewById(R.id.btn_github); + btnGithub.setOnClickListener(v -> openUrl(GITHUB)); + + View btnAlexander = findViewById(R.id.btn_alexander); + btnAlexander.setOnClickListener(v -> openUrl(WEBSITE_ALEXANDER)); + + View btnMichael = findViewById(R.id.btn_michael); + btnMichael.setOnClickListener(v -> openUrl(GITHUB_MICHAEL)); + + View btnMail = findViewById(R.id.btn_email); + btnMail.setOnClickListener(v -> openMail(MAIL_BEEMDEVELOPMENT)); + + View btnWebsite = findViewById(R.id.btn_website); + btnWebsite.setOnClickListener(v -> openUrl(WEBSITE_BEEMDEVELOPMENT)); + + View btnRate = findViewById(R.id.btn_rate); + btnRate.setOnClickListener(v -> openUrl(PLAYSTORE_BEEMDEVELOPMENT )); + + View btnChangelog = findViewById(R.id.btn_changelog); + btnChangelog.setOnClickListener(v -> { + ChangelogDialog.create().setTheme(getCurrentTheme()).show(getSupportFragmentManager(), "CHANGELOG_DIALOG"); + }); + } + + private String getCurrentVersion() { + try { + return getPackageManager().getPackageInfo(getPackageName(), 0).versionName; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return "Unknown version"; + } + + private void openUrl(String url) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW); + browserIntent.setData(Uri.parse(url)); + browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + startActivity(browserIntent); + } + + private void openMail(String mailaddress) { + Intent mailIntent = new Intent(Intent.ACTION_SENDTO); + mailIntent.setData(Uri.parse("mailto:" + mailaddress)); + mailIntent.putExtra(Intent.EXTRA_EMAIL, mailaddress); + mailIntent.putExtra(Intent.EXTRA_SUBJECT, R.string.app_name_full); + + startActivity(Intent.createChooser(mailIntent, this.getString(R.string.email))); + } + + private void showLicenseDialog() { + String stylesheet = getString(R.string.custom_notices_format_style); + int backgroundColorResource = getCurrentTheme() == Theme.AMOLED ? R.attr.cardBackgroundFocused : R.attr.cardBackground; + String backgroundColor = String.format("%06X", (0xFFFFFF & ThemeHelper.getThemeColor(backgroundColorResource, getTheme()))); + String textColor = String.format("%06X", (0xFFFFFF & ThemeHelper.getThemeColor(R.attr.primaryText, getTheme()))); + String licenseColor = String.format("%06X", (0xFFFFFF & ThemeHelper.getThemeColor(R.attr.cardBackgroundFocused, getTheme()))); + + stylesheet = String.format(stylesheet, backgroundColor, textColor, licenseColor); + + LicenseResolver.registerLicense(new GlideLicense()); + new LicensesDialog.Builder(this) + .setNotices(R.raw.notices) + .setTitle(R.string.licenses) + .setNoticesCssStyle(stylesheet) + .setIncludeOwnLicense(true) + .build() + .show(); + } +} diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java index e355e6ca..21ff7898 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java @@ -22,6 +22,7 @@ import java.util.Locale; public abstract class AegisActivity extends AppCompatActivity implements AegisApplication.LockListener { private boolean _resumed; private AegisApplication _app; + private Theme _currentTheme; @Override protected void onCreate(Bundle savedInstanceState) { @@ -89,6 +90,8 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp } protected void setPreferredTheme(Theme theme) { + _currentTheme = theme; + switch (theme) { case LIGHT: setTheme(R.style.AppTheme); @@ -136,4 +139,8 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp } } } + + protected Theme getCurrentTheme() { + return _currentTheme; + } } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/ChangelogDialog.java b/app/src/main/java/com/beemdevelopment/aegis/ui/ChangelogDialog.java new file mode 100644 index 00000000..51aa7c0b --- /dev/null +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/ChangelogDialog.java @@ -0,0 +1,90 @@ +package com.beemdevelopment.aegis.ui; + +import android.annotation.SuppressLint; +import android.app.Dialog; +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.graphics.Color; +import android.os.Bundle; +import android.view.InflateException; +import android.view.LayoutInflater; +import android.view.View; +import android.webkit.WebView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; + +import com.beemdevelopment.aegis.R; +import com.beemdevelopment.aegis.Theme; +import com.beemdevelopment.aegis.helpers.ThemeHelper; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; + +public class ChangelogDialog extends DialogFragment { + private Theme _themeStyle; + + public static ChangelogDialog create() { + return new ChangelogDialog(); + } + + @SuppressLint("InflateParams") + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final View customView; + try { + customView = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_web_view, null); + } catch (InflateException e) { + e.printStackTrace(); + return new AlertDialog.Builder(getActivity()) + .setTitle(android.R.string.dialog_alert_title) + .setMessage(getString(R.string.webview_error)) + .setPositiveButton(android.R.string.ok, null) + .show(); + } + AlertDialog dialog = new AlertDialog.Builder(getActivity()) + .setTitle("Changelog") + .setView(customView) + .setPositiveButton(android.R.string.ok, null) + .show(); + + final WebView webView = customView.findViewById(R.id.web_view); + StringBuilder buf = new StringBuilder(); + + try (InputStream html = getActivity().getAssets().open("changelog.html")) { + BufferedReader in = new BufferedReader(new InputStreamReader(html, "UTF-8")); + String str; + while ((str = in.readLine()) != null) + buf.append(str); + + in.close(); + String changelog = buf.toString(); + changelog = replaceStylesheet(changelog); + webView.loadData(changelog, "text/html", "UTF-8"); + } catch (IOException e) { + webView.loadData("

Unable to load

" + e.getLocalizedMessage() + "

", "text/html", "UTF-8"); + } + return dialog; + } + + private String replaceStylesheet(String changelog) { + int backgroundColorResource = _themeStyle == Theme.AMOLED ? R.attr.cardBackgroundFocused : R.attr.cardBackground; + String backgroundColor = String.format("%06X", (0xFFFFFF & ThemeHelper.getThemeColor(backgroundColorResource, getContext().getTheme()))); + String textColor = String.format("%06X", (0xFFFFFF & ThemeHelper.getThemeColor(R.attr.primaryText, getContext().getTheme()))); + + return String.format(changelog, backgroundColor, textColor); + } + + public ChangelogDialog setTheme(Theme theme) { + _themeStyle = theme; + + return this; + } +} + diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java index 739779bc..8dd5b043 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -45,6 +45,7 @@ import com.google.zxing.RGBLuminanceSource; import com.google.zxing.Reader; import com.google.zxing.Result; import com.google.zxing.common.HybridBinarizer; +import com.mikepenz.iconics.context.IconicsContextWrapper; import java.io.IOException; import java.io.InputStream; @@ -88,6 +89,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + _app = (AegisApplication) getApplication(); _db = _app.getDatabaseManager(); _loaded = false; @@ -496,6 +498,11 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene _entryListView.removeEntry(oldEntry); } + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(IconicsContextWrapper.wrap(newBase)); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { _menu = menu; @@ -542,10 +549,16 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.action_settings: + case R.id.action_settings: { Intent intent = new Intent(this, PreferencesActivity.class); startActivityForResult(intent, CODE_PREFERENCES); return true; + } + case R.id.action_about: { + Intent intent = new Intent(this, AboutActivity.class); + startActivity(intent); + return true; + } case R.id.action_lock: _app.lock(); return true; diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/glide/GlideLicense.java b/app/src/main/java/com/beemdevelopment/aegis/ui/glide/GlideLicense.java new file mode 100644 index 00000000..ad301d27 --- /dev/null +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/glide/GlideLicense.java @@ -0,0 +1,34 @@ +package com.beemdevelopment.aegis.ui.glide; + +import android.content.Context; + +import com.beemdevelopment.aegis.R; + +import de.psdev.licensesdialog.licenses.License; + +public class GlideLicense extends License { + @Override + public String getName() { + return "Glide License"; + } + + @Override + public String readSummaryTextFromResources(Context context) { + return getContent(context, R.raw.glide_license); + } + + @Override + public String readFullTextFromResources(Context context) { + return getContent(context, R.raw.glide_license); + } + + @Override + public String getVersion() { + return null; + } + + @Override + public String getUrl() { + return "https://github.com/bumptech/glide/blob/master/LICENSE"; + } +} diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml new file mode 100644 index 00000000..8bba8729 --- /dev/null +++ b/app/src/main/res/layout/activity_about.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/content_about.xml b/app/src/main/res/layout/content_about.xml new file mode 100644 index 00000000..707958a4 --- /dev/null +++ b/app/src/main/res/layout/content_about.xml @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_web_view.xml b/app/src/main/res/layout/dialog_web_view.xml new file mode 100644 index 00000000..ef50622d --- /dev/null +++ b/app/src/main/res/layout/dialog_web_view.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 230a30bc..5b87d8a3 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -63,4 +63,9 @@ android:orderInCategory="100" android:title="@string/action_settings" app:showAsAction="never" /> + diff --git a/app/src/main/res/raw/glide_license.txt b/app/src/main/res/raw/glide_license.txt new file mode 100644 index 00000000..441c3743 --- /dev/null +++ b/app/src/main/res/raw/glide_license.txt @@ -0,0 +1,94 @@ +License for everything not in third_party and not otherwise marked: + +Copyright 2014 Google, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE, INC. OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the +authors and should not be interpreted as representing official policies, either expressed +or implied, of Google, Inc. +--------------------------------------------------------------------------------------------- +License for third_party/disklrucache: + +Copyright 2012 Jake Wharton +Copyright 2011 The Android Open Source Project + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--------------------------------------------------------------------------------------------- +License for third_party/gif_decoder: + +Copyright (c) 2013 Xcellent Creations, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +--------------------------------------------------------------------------------------------- +License for third_party/gif_encoder/AnimatedGifEncoder.java and +third_party/gif_encoder/LZWEncoder.java: + +No copyright asserted on the source code of this class. May be used for any +purpose, however, refer to the Unisys LZW patent for restrictions on use of +the associated LZWEncoder class. Please forward any corrections to +kweiner@fmsware.com. + +----------------------------------------------------------------------------- +License for third_party/gif_encoder/NeuQuant.java + +Copyright (c) 1994 Anthony Dekker + +NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See +"Kohonen neural networks for optimal colour quantization" in "Network: +Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of +the algorithm. + +Any party obtaining a copy of these files from the author, directly or +indirectly, is granted, free of charge, a full and unrestricted irrevocable, +world-wide, paid up, royalty-free, nonexclusive right and license to deal in +this software and documentation files (the "Software"), including without +limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons who +receive copies from any such party to do so, with the only requirement being +that this copyright notice remain intact. \ No newline at end of file diff --git a/app/src/main/res/raw/notices.xml b/app/src/main/res/raw/notices.xml new file mode 100644 index 00000000..368572fd --- /dev/null +++ b/app/src/main/res/raw/notices.xml @@ -0,0 +1,79 @@ + + + + TextDrawable + https://github.com/amulyakhare/TextDrawable + Copyright (C) 2014 Amulya Khare + MIT License + + + Preferencex + https://github.com/takisoft/preferencex-android + + Apache Software License 2.0 + + + FloatingActionButton + https://github.com/futuresimple/android-floating-action-button + Copyright 2014 Jerzy Chalupski + Apache Software License 2.0 + + + AppIntro + https://github.com/AppIntro/AppIntro + + Apache Software License 2.0 + + + Krop + https://github.com/avito-tech/krop + Copyright (c) 2017 Avito Technology + MIT License + + + Spongycastle + https://github.com/rtyley/spongycastle/ + Copyright (c) 2000-2017 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org) + Apache Software License 2.0 + + + Swirl + https://github.com/mattprecious/swirl + Copyright 2016 Matthew Precious + Apache Software License 2.0 + + + CircleImageView + https://github.com/hdodenhof/CircleImageView + Copyright 2014 - 2019 Henning Dodenhof + Apache Software License 2.0 + + + Barcodescanner + https://github.com/dm77/barcodescanner + Copyright (c) 2014 Dushyanth Maguluru + Apache Software License 2.0 + + + libsu + https://github.com/topjohnwu/libsu + Apache Software License 2.0 + + + Glide + https://github.com/bumptech/glide + Glide License + + + Iconics + https://github.com/mikepenz/Android-Iconics + + Apache Software License 2.0 + + + Android Support Libraries + http://developer.android.com/tools/support-library/index.html + Copyright (C) 2016 The Android Open Source Project + Apache Software License 2.0 + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cc70a5cf..c12cd4e3 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,6 +9,7 @@ #FF5252 #212121 #757575 + #757575 #8e8e8e #ffffff #efefefb @@ -31,7 +32,7 @@ #0d47a1 #ffffff - #424242 + #363636 #6B6B6B #1B1B1B #ffffff diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 812cb7be..d8f30a1b 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,4 +3,5 @@ 16dp 16dp 16dp + 48dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b9a8eb7a..d0652adf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,7 +2,9 @@ Aegis Aegis Authenticator AegisDev + Beem Development Settings + About Import Delete Restore default icon @@ -171,6 +173,38 @@ Lock status Aegis can create a persistent notification to notify you when the vault is locked Vault is unlocked. Tap here to lock. + About + Version + Changelog + What\'s new + GitHub + Source code, issues and information + Licenses + Licenses of the libraries Aegis uses + Alexander Bakker + Netherlands + Michael SchÃĪttgen + Write an email + Visit our website + Support + Rate + Support us by leaving a review in the Google Play Store + This device doesn\'t support web view, which is necessary to view the change log. It is missing a system component. + Email + + + body { + background-color: #%1$s; + color: #%2$s; + font-family: sans-serif; + overflow-wrap: break-word; + } + pre { + background-color: #%3$s; + padding: 1em; + white-space: pre-wrap; + } + There are no codes to be shown. Start adding entries by tapping the plus sign in the bottom right corner No entries found diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 12c278f4..8a06c9bc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -17,8 +17,9 @@ true - + + + + + + + + + + + + + + + + +