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
+
+ - New icon
+ - Overhaul of interaction with the entry list
+ - Persistent notification while the vault is unlocked
+ - Language override option
+ - Support for importing from FreeOTP+
+ - Ability to toggle password visibility during unlock
+ - Support for deeplinking otpauth URIs
+
+Fixes
+
+ - Bad overall performance and high battery usage
+ - Codes with an uneven number of digits are displayed incorrectly
+ - Crash when entering a large value for OTP period
+
+
\ 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
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 4aef3e86..38dd1109 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Jun 10 14:39:47 CEST 2019
+#Sun Sep 01 21:12:20 CEST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip