diff --git a/README.md b/README.md index 39138f47..e3cb9774 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,9 @@ Don't worry, I will still continue to develop andOTP it will just slow down from * Requires minimal permissions - Camera access for QR code scanning - Storage access for import and export of the database - * Encrypted storage + * Encrypted storage with two backends: + - Android KeyStore + - Password / PIN * Multiple backup options: - Plain-text - Password-protected @@ -76,12 +78,16 @@ So make sure you have a **current backup** before switching! - [XDA thread](https://forum.xda-developers.com/android/apps-games/app-andotp-android-otp-authenticator-t3636993) (please keep off-topic to a minimum) - Telegram group [@andOTP](https://t.me/andOTP) (also check out the read-only announcement channel for important updates: [@andOTP_Broadcast](https://t.me/andOTP_Broadcast)) +#### Developers: + + * [Jakob Nixdorf](https://github.com/flocke) + * [Richy HBM](https://github.com/RichyHBM) + #### Contributors: * [Carlos Melero](https://github.com/carmebar) ([view contributions](https://github.com/andOTP/andOTP/commits/master?author=carmebar)) * [SuperVirus](https://github.com/SuperVirus) ([view contributions](https://github.com/andOTP/andOTP/commits/master?author=SuperVirus)) - * [RichyHBM](https://github.com/RichyHBM) ([view contributions](https://github.com/andOTP/andOTP/commits/master?author=RichyHBM)) - + * [DanielWeigl](https://github.com/DanielWeigl) ([view contributions](https://github.com/andOTP/andOTP/commits/master?author=DanielWeigl)) #### Translators: diff --git a/app/src/androidTest/java/org/shadowice/flocke/andotp/ApplicationTest.java b/app/src/androidTest/java/org/shadowice/flocke/andotp/ApplicationTest.java index 3c2577b0..07398d2c 100644 --- a/app/src/androidTest/java/org/shadowice/flocke/andotp/ApplicationTest.java +++ b/app/src/androidTest/java/org/shadowice/flocke/andotp/ApplicationTest.java @@ -176,7 +176,7 @@ public class ApplicationTest extends ApplicationTestCase { new File(context.getFilesDir() + "/" + Constants.FILENAME_DATABASE).delete(); new File(context.getFilesDir() + "/" + Constants.FILENAME_ENCRYPTED_KEY).delete(); - SecretKey encryptionKey = KeyStoreHelper.loadEncryptionKeyFromKeyStore(context); + SecretKey encryptionKey = KeyStoreHelper.loadEncryptionKeyFromKeyStore(context, false); ArrayList b = DatabaseHelper.loadDatabase(context, encryptionKey); assertEquals(0, b.size()); diff --git a/app/src/androidTest/java/org/shadowice/flocke/andotp/Utilities/ToolsTest.java b/app/src/androidTest/java/org/shadowice/flocke/andotp/Utilities/ToolsTest.java new file mode 100644 index 00000000..355e15c9 --- /dev/null +++ b/app/src/androidTest/java/org/shadowice/flocke/andotp/Utilities/ToolsTest.java @@ -0,0 +1,18 @@ +package org.shadowice.flocke.andotp.Utilities; + +import junit.framework.TestCase; + +public class ToolsTest extends TestCase { + public void testFormatToken() throws Exception { + assertEquals("123 456", Tools.formatToken("123456", 3)); + assertEquals("12 34 56", Tools.formatToken("123456", 2)); + assertEquals("123456", Tools.formatToken("123456", 0)); + assertEquals("123456", Tools.formatToken("123456", 10)); + assertEquals("1 234 567", Tools.formatToken("1234567", 3)); + assertEquals("1ab 234 567", Tools.formatToken("1ab234567", 3)); + assertEquals("123", Tools.formatToken("123", 3)); + assertEquals("1 234", Tools.formatToken("1234", 3)); + assertEquals("1", Tools.formatToken("1", 3)); + assertEquals("", Tools.formatToken("", 3)); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/AboutActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/AboutActivity.java index 5f7c4009..fa5e198b 100644 --- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/AboutActivity.java +++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/AboutActivity.java @@ -49,10 +49,13 @@ public class AboutActivity extends BaseActivity { private static final String MIT_URI = GITHUB_URI + "/blob/master/LICENSE.txt"; private static final String AUTHOR1_GITHUB = "https://github.com/flocke"; - private static final String AUTHOR1_PAYPAL = "https://paypal.me/flocke000"; + private static final String AUTHOR1_EXTRA = "https://paypal.me/flocke000"; - private static final String AUTHOR2_GITHUB = "https://github.com/0xbb"; - private static final String AUTHOR2_APP = AUTHOR2_GITHUB + "/otp-authenticator"; + private static final String AUTHOR2_GITHUB = "https://github.com/richyhbm"; + private static final String AUTHOR2_EXTRA = "bitcoin:1KyLwnxXR577gYUtwRMSMhkpsJVoK2bTLN"; + + private static final String AUTHOR_ORIGINAL_GITHUB = "https://github.com/0xbb"; + private static final String AUTHOR_ORIGINAL_EXTRA = AUTHOR_ORIGINAL_GITHUB + "/otp-authenticator"; private static final String CONTRIBUTORS_URI = GITHUB_URI + "/blob/master/README.md#contributors"; private static final String TRANSLATORS_URI = GITHUB_URI + "/blob/master/README.md#translators"; @@ -62,7 +65,7 @@ public class AboutActivity extends BaseActivity { static final int[] imageResources = { R.id.aboutImgVersion, R.id.aboutImgLicense, R.id.aboutImgChangelog, R.id.aboutImgSource, - R.id.aboutImgOpenSource, R.id.aboutImgAuthor1, R.id.aboutImgAuthor2, R.id.aboutImgContributors, + R.id.aboutImgOpenSource, R.id.aboutImgAuthor1, R.id.aboutImgAuthorOriginal, R.id.aboutImgContributors, R.id.aboutImgTranslators, R.id.aboutImgBugs, R.id.aboutImgTranslate }; @@ -164,7 +167,7 @@ public class AboutActivity extends BaseActivity { }); TextView author1GitHub = v.findViewById(R.id.about_author1_github); - TextView author1Paypal = v.findViewById(R.id.about_author1_paypal); + TextView author1Paypal = v.findViewById(R.id.about_author1_extra); author1GitHub.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -174,22 +177,38 @@ public class AboutActivity extends BaseActivity { author1Paypal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - openURI(AUTHOR1_PAYPAL); + openURI(AUTHOR1_EXTRA); } }); + TextView author2GitHub = v.findViewById(R.id.about_author2_github); - TextView author2App = v.findViewById(R.id.about_author2_app); + TextView author2Paypal = v.findViewById(R.id.about_author2_extra); author2GitHub.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openURI(AUTHOR2_GITHUB); } }); - author2App.setOnClickListener(new View.OnClickListener() { + author2Paypal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - openURI(AUTHOR2_APP); + openURI(AUTHOR2_EXTRA); + } + }); + + TextView authorOriginalGitHub = v.findViewById(R.id.about_author_original_github); + TextView authorOriginalApp = v.findViewById(R.id.about_author_original_extra); + authorOriginalGitHub.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + openURI(AUTHOR_ORIGINAL_GITHUB); + } + }); + authorOriginalApp.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + openURI(AUTHOR_ORIGINAL_EXTRA); } }); diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java index 353b8693..ca8ce8a5 100644 --- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java +++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java @@ -82,7 +82,6 @@ public class MainActivity extends BaseActivity private EntriesCardAdapter adapter; private FloatingActionMenu floatingActionMenu; - private SearchView searchView; private MenuItem sortMenu; private SimpleItemTouchHelperCallback touchHelperCallback; @@ -248,19 +247,6 @@ public class MainActivity extends BaseActivity adapter = new EntriesCardAdapter(this, tagsDrawerAdapter); recList.setAdapter(adapter); - recList.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - - if (dy > 0) { - floatingActionMenu.hide(); - } else { - if (searchView == null || searchView.isIconified()) - floatingActionMenu.show(); - } - } - }); touchHelperCallback = new SimpleItemTouchHelperCallback(adapter); ItemTouchHelper touchHelper = new ItemTouchHelper(touchHelperCallback); @@ -354,7 +340,7 @@ public class MainActivity extends BaseActivity public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { if (key.equals(getString(R.string.settings_key_label_size)) || key.equals(getString(R.string.settings_key_label_scroll)) || - key.equals(getString(R.string.settings_key_thumbnail_visible)) || + key.equals(getString(R.string.settings_key_split_group_size)) || key.equals(getString(R.string.settings_key_thumbnail_size))) { adapter.notifyDataSetChanged(); } else if (key.equals(getString(R.string.settings_key_tap_to_reveal)) || @@ -462,7 +448,7 @@ public class MainActivity extends BaseActivity } MenuItem searchItem = menu.findItem(R.id.menu_search); - searchView = (SearchView) searchItem.getActionView(); + SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java index 0dbea350..4ab70968 100644 --- a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java +++ b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java @@ -22,40 +22,55 @@ public class EntryThumbnail { Apple(R.drawable.thumb_apple), ArenaNet(R.drawable.thumb_arenanet), BattleNet(R.drawable.thumb_battlenet), + Binance(R.drawable.thumb_binance), BitBucket(R.drawable.thumb_bitbucket), Bitcoin(R.drawable.thumb_bitcoin), Bitstamp(R.mipmap.thumb_bitstamp, AssetType.Bitmap), + Bittrex(R.drawable.thumb_bittrex), Bitwarden(R.mipmap.thumb_bitwarden, AssetType.Bitmap), + BlockchainInfo(R.drawable.thumb_blockchain_info), Cloudflare(R.drawable.thumb_cloudflare), Coinbase(R.drawable.thumb_coinbase), CozyCloud(R.drawable.thumb_cozycloud), DigitalOcean(R.drawable.thumb_digital_ocean), Discord(R.drawable.thumb_discord), Dropbox(R.drawable.thumb_dropbox), + Email(R.drawable.thumb_email), Facebook(R.drawable.thumb_facebook), Git(R.drawable.thumb_git), + Gitea(R.drawable.thumb_gitea), Github(R.drawable.thumb_github), Gitlab(R.drawable.thumb_gitlab), + GoDaddy(R.drawable.thumb_godaddy), Google(R.drawable.thumb_google), - HurricaneElectric(R.mipmap.thumb_hurricane_electric, AssetType.Bitmap), + HackerOne(R.drawable.thumb_hackerone), + HurricaneElectric(R.drawable.thumb_hurricane_electric), + Iconomi(R.drawable.thumb_iconomi), IFTTT(R.drawable.thumb_ifttt), Itchio(R.drawable.thumb_itchio), Kickstarter(R.drawable.thumb_kickstarter), + Kucoin(R.drawable.thumb_kucoin), LastPass(R.drawable.thumb_lastpass), + Liqui(R.drawable.thumb_liqui), Mailgun(R.drawable.thumb_mailgun), Mastodon(R.drawable.thumb_mastodon), Microsoft(R.drawable.thumb_microsoft), + Mixer(R.drawable.thumb_mixer), NextCloud(R.drawable.thumb_nextcloud), + Nintendo(R.drawable.thumb_nintendo), Origin(R.drawable.thumb_origin), Patreon(R.drawable.thumb_patreon), PayPal(R.drawable.thumb_paypal), ProtonMail(R.drawable.thumb_protonmail), RSS(R.drawable.thumb_rss), + Seafile(R.mipmap.thumb_seafile, AssetType.Bitmap), Skrill(R.drawable.thumb_skrill), Slack(R.drawable.thumb_slack), Steam(R.drawable.thumb_steam), Stripe(R.drawable.thumb_stripe), + Synology(R.drawable.thumb_synology), TeamViewer(R.drawable.thumb_teamviewer), + Tumblr(R.drawable.thumb_tumblr), Twitch(R.drawable.thumb_twitch), Twitter(R.drawable.thumb_twitter), Ubisoft(R.drawable.thumb_ubisoft), @@ -84,24 +99,25 @@ public class EntryThumbnail { } public static Bitmap getThumbnailGraphic(Context context, String label, int size, EntryThumbnails thumbnail) { - if(thumbnail == EntryThumbnails.Default) { + if (thumbnail == EntryThumbnails.Default && size > 0) { LetterBitmap letterBitmap = new LetterBitmap(context); return letterBitmap.getLetterTile(label, label, size, size); - } + } else if (thumbnail != EntryThumbnails.Default) { - try { - if(thumbnail.getAssetType() == AssetType.Vector) { - Drawable drawable = context.getResources().getDrawable(thumbnail.getResource()); - Bitmap bitmap = Bitmap.createBitmap(drawable.getMinimumWidth(), drawable.getMinimumHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); - drawable.draw(canvas); - return bitmap; - } else { - return BitmapFactory.decodeResource(context.getResources(), thumbnail.getResource()); + try { + if (thumbnail.getAssetType() == AssetType.Vector) { + Drawable drawable = context.getResources().getDrawable(thumbnail.getResource()); + Bitmap bitmap = Bitmap.createBitmap(drawable.getMinimumWidth(), drawable.getMinimumHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + drawable.draw(canvas); + return bitmap; + } else { + return BitmapFactory.decodeResource(context.getResources(), thumbnail.getResource()); + } + } catch (Exception e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); } return BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher_round); diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java index dea55a86..bf688367 100644 --- a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java +++ b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java @@ -406,7 +406,7 @@ public class Settings { } public boolean getThumbnailVisible() { - return getBoolean(R.string.settings_key_thumbnail_visible, true); + return getThumbnailSize() > 0; } public int getThumbnailSize() { @@ -419,6 +419,13 @@ public class Settings { } } + public int getTokenSplitGroupSize() { + // the setting is of type "String", because ListPreference does not support integer arrays for its entryValues + return Integer.valueOf( + getString(R.string.settings_key_split_group_size, R.string.settings_default_split_group_size) + ); + } + public boolean getScreenshotsEnabled() { return getBoolean(R.string.settings_key_enable_screenshot, false); } diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Tools.java b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Tools.java index faefd08e..198327fe 100644 --- a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Tools.java +++ b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Tools.java @@ -80,4 +80,18 @@ public class Tools { return Resources.getSystem().getConfiguration().locale; } } + + public static String formatToken(String s, int chunkSize) { + if (chunkSize ==0 || s == null) + return s; + + StringBuilder ret = new StringBuilder(""); + int index = s.length(); + while (index > 0) { + ret.insert(0, s.substring(Math.max(index - chunkSize, 0), index)); + ret.insert(0, " "); + index = index - chunkSize; + } + return ret.toString().trim(); + } } diff --git a/app/src/main/java/org/shadowice/flocke/andotp/View/EntriesCardAdapter.java b/app/src/main/java/org/shadowice/flocke/andotp/View/EntriesCardAdapter.java index a04c308c..8a530cb4 100644 --- a/app/src/main/java/org/shadowice/flocke/andotp/View/EntriesCardAdapter.java +++ b/app/src/main/java/org/shadowice/flocke/andotp/View/EntriesCardAdapter.java @@ -185,7 +185,9 @@ public class EntriesCardAdapter extends RecyclerView.Adapter } entryViewHolder.setLabelSize(settings.getLabelSize()); - entryViewHolder.setThumbnailSize(settings.getThumbnailSize()); + if(settings.getThumbnailVisible()) { + entryViewHolder.setThumbnailSize(settings.getThumbnailSize()); + } entryViewHolder.setLabelScroll(settings.getScrollLabel()); } diff --git a/app/src/main/java/org/shadowice/flocke/andotp/View/EntryViewHolder.java b/app/src/main/java/org/shadowice/flocke/andotp/View/EntryViewHolder.java index 1638dc6d..e054b399 100644 --- a/app/src/main/java/org/shadowice/flocke/andotp/View/EntryViewHolder.java +++ b/app/src/main/java/org/shadowice/flocke/andotp/View/EntryViewHolder.java @@ -100,7 +100,7 @@ public class EntryViewHolder extends RecyclerView.ViewHolder @Override public void onClick(View view) { if (callback != null) - callback.onCopyButtonClicked(value.getText().toString(), getAdapterPosition()); + callback.onCopyButtonClicked(value.getTag().toString(), getAdapterPosition()); } }); @@ -109,9 +109,12 @@ public class EntryViewHolder extends RecyclerView.ViewHolder public void updateValues(String label, String token, List tags, EntryThumbnail.EntryThumbnails thumbnail, boolean isVisible) { Settings settings = new Settings(context); + final String tokenFormatted = Tools.formatToken(token, settings.getTokenSplitGroupSize()); this.label.setText(label); - value.setText(token); + value.setText(tokenFormatted); + // save the unformatted token to the tag of this TextView for copy/paste + value.setTag(token); StringBuilder stringBuilder = new StringBuilder(); for(int i = 0; i < tags.size(); i++) { @@ -131,7 +134,9 @@ public class EntryViewHolder extends RecyclerView.ViewHolder thumbnailImg.setVisibility(settings.getThumbnailVisible() ? View.VISIBLE : View.GONE); int thumbnailSize = settings.getThumbnailSize(); - thumbnailImg.setImageBitmap(EntryThumbnail.getThumbnailGraphic(context, label, thumbnailSize, thumbnail)); + if(settings.getThumbnailVisible()) { + thumbnailImg.setImageBitmap(EntryThumbnail.getThumbnailGraphic(context, label, thumbnailSize, thumbnail)); + } if (this.tapToReveal) { if (isVisible) { diff --git a/app/src/main/res/drawable/thumb_binance.xml b/app/src/main/res/drawable/thumb_binance.xml new file mode 100644 index 00000000..1a3d04dd --- /dev/null +++ b/app/src/main/res/drawable/thumb_binance.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/drawable/thumb_bitcoin.xml b/app/src/main/res/drawable/thumb_bitcoin.xml index 7f00dac6..c3b8f706 100644 --- a/app/src/main/res/drawable/thumb_bitcoin.xml +++ b/app/src/main/res/drawable/thumb_bitcoin.xml @@ -1,22 +1,11 @@ - - - - - + android:pathData="M252.17,158.95C235.07,227.56 165.56,269.27 97.05,252.17C28.44,235.06 -13.27,165.55 3.83,97.05C20.94,28.44 90.35,-13.27 158.96,3.83C227.47,20.84 269.27,90.35 252.17,158.95L252.17,158.95L252.17,158.95Z" + android:fillColor="#e87b18" /> diff --git a/app/src/main/res/drawable/thumb_bittrex.xml b/app/src/main/res/drawable/thumb_bittrex.xml new file mode 100644 index 00000000..90774fba --- /dev/null +++ b/app/src/main/res/drawable/thumb_bittrex.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/thumb_blockchain_info.xml b/app/src/main/res/drawable/thumb_blockchain_info.xml new file mode 100644 index 00000000..a5a3199a --- /dev/null +++ b/app/src/main/res/drawable/thumb_blockchain_info.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/thumb_dropbox.xml b/app/src/main/res/drawable/thumb_dropbox.xml index 12031fa7..8754b98b 100644 --- a/app/src/main/res/drawable/thumb_dropbox.xml +++ b/app/src/main/res/drawable/thumb_dropbox.xml @@ -1,9 +1,21 @@ + android:width="235dp" + android:height="200dp" + android:viewportWidth="235.45" + android:viewportHeight="200.0"> + android:fillColor="#007EE5" + android:pathData="M58.86,0l-58.86,37.5l58.86,37.5l58.87,-37.5l-58.87,-37.5z"/> + + + + diff --git a/app/src/main/res/drawable/thumb_email.xml b/app/src/main/res/drawable/thumb_email.xml new file mode 100644 index 00000000..f7b5ee76 --- /dev/null +++ b/app/src/main/res/drawable/thumb_email.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/thumb_gitea.xml b/app/src/main/res/drawable/thumb_gitea.xml new file mode 100644 index 00000000..e8ea5dd4 --- /dev/null +++ b/app/src/main/res/drawable/thumb_gitea.xml @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/thumb_godaddy.xml b/app/src/main/res/drawable/thumb_godaddy.xml new file mode 100644 index 00000000..88619f4d --- /dev/null +++ b/app/src/main/res/drawable/thumb_godaddy.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/thumb_hackerone.xml b/app/src/main/res/drawable/thumb_hackerone.xml new file mode 100644 index 00000000..9a290cb7 --- /dev/null +++ b/app/src/main/res/drawable/thumb_hackerone.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/thumb_hurricane_electric.xml b/app/src/main/res/drawable/thumb_hurricane_electric.xml new file mode 100644 index 00000000..1b30b472 --- /dev/null +++ b/app/src/main/res/drawable/thumb_hurricane_electric.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/drawable/thumb_iconomi.xml b/app/src/main/res/drawable/thumb_iconomi.xml new file mode 100644 index 00000000..812fc7f8 --- /dev/null +++ b/app/src/main/res/drawable/thumb_iconomi.xml @@ -0,0 +1,30 @@ + + + + + + diff --git a/app/src/main/res/drawable/thumb_kucoin.xml b/app/src/main/res/drawable/thumb_kucoin.xml new file mode 100644 index 00000000..dddfff6d --- /dev/null +++ b/app/src/main/res/drawable/thumb_kucoin.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/thumb_liqui.xml b/app/src/main/res/drawable/thumb_liqui.xml new file mode 100644 index 00000000..90e8124a --- /dev/null +++ b/app/src/main/res/drawable/thumb_liqui.xml @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/thumb_mixer.xml b/app/src/main/res/drawable/thumb_mixer.xml new file mode 100644 index 00000000..a9baaab8 --- /dev/null +++ b/app/src/main/res/drawable/thumb_mixer.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/thumb_nintendo.xml b/app/src/main/res/drawable/thumb_nintendo.xml new file mode 100644 index 00000000..772ceec1 --- /dev/null +++ b/app/src/main/res/drawable/thumb_nintendo.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/thumb_origin.xml b/app/src/main/res/drawable/thumb_origin.xml index 1bf8eceb..06eb5a36 100644 --- a/app/src/main/res/drawable/thumb_origin.xml +++ b/app/src/main/res/drawable/thumb_origin.xml @@ -1,20 +1,9 @@ - - - - - + android:pathData="M127.62,2.37C128.32,4.18 127.11,5.82 126.11,7.22C119.09,17.18 113.57,28.31 111.36,40.28C110.5,42.74 110.69,44.57 111.36,44.77C125,43.58 140.37,43.71 153.8,46.58C178.22,51.5 201.05,63.86 218.59,81.52C236.08,99.01 248.36,121.67 253.33,145.91C258.84,172.16 255.76,200.09 244.74,224.54C221.38,274.46 182.01,316.68 133.82,343.45C132.27,344.17 130.03,344.2 128.97,342.65C127.71,341.03 128.23,338.73 129.47,337.25C135.97,328.19 140.51,317.76 142.97,306.89C143.45,304.64 144.09,302.35 143.9,300.03C143.1,299 141.79,299.31 140.67,299.35C117.29,301.69 93.22,297.51 72.09,287.18C49.45,276.27 30.24,258.45 17.54,236.77C5.78,216.84 -0.41,193.62 0.02,170.46C0.1,149.2 5.9,128.12 16.11,109.51C39.89,63.86 77.22,25.35 122.28,0.46C124.17,-0.59 126.97,0.19 127.62,2.37L127.62,2.37ZM120.97,122.44C107.06,124.31 94.23,132.48 86.44,144.12C81.16,152.12 77.97,161.61 78.03,171.23C77.64,184.11 82.77,197.02 91.67,206.3C99.45,214.67 110.25,220.13 121.58,221.59C133.12,223.11 145.16,220.41 154.93,214.07C164.86,207.77 172.42,197.82 175.81,186.55C182.16,166.98 174.54,144.06 157.97,131.97C147.56,124.05 133.91,120.54 120.97,122.44L120.97,122.44L120.97,122.44Z" + android:fillColor="#e0431d" /> diff --git a/app/src/main/res/drawable/thumb_rss.xml b/app/src/main/res/drawable/thumb_rss.xml index be5ad629..936fe24a 100644 --- a/app/src/main/res/drawable/thumb_rss.xml +++ b/app/src/main/res/drawable/thumb_rss.xml @@ -1,33 +1,15 @@ - + - - - - - - - - - - + android:pathData="M57,10L199,10A47,47 0,0 1,246 57L246,199A47,47 0,0 1,199 246L57,246A47,47 0,0 1,10 199L10,57A47,47 0,0 1,57 10z" + android:fillColor="#FFFB9E3A"/> diff --git a/app/src/main/res/drawable/thumb_skrill.xml b/app/src/main/res/drawable/thumb_skrill.xml index c77ffe2c..78b67b47 100644 --- a/app/src/main/res/drawable/thumb_skrill.xml +++ b/app/src/main/res/drawable/thumb_skrill.xml @@ -1,23 +1,9 @@ - - - - - + android:fillColor="#50104c" /> diff --git a/app/src/main/res/drawable/thumb_synology.xml b/app/src/main/res/drawable/thumb_synology.xml new file mode 100644 index 00000000..60be62d3 --- /dev/null +++ b/app/src/main/res/drawable/thumb_synology.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/thumb_teamviewer.xml b/app/src/main/res/drawable/thumb_teamviewer.xml index dee79585..5cfafde6 100644 --- a/app/src/main/res/drawable/thumb_teamviewer.xml +++ b/app/src/main/res/drawable/thumb_teamviewer.xml @@ -1,19 +1,7 @@ + android:viewportWidth="1024.2" android:width="256dp" xmlns:android="http://schemas.android.com/apk/res/android"> - - - - - - - - - + android:pathData="M56.2,52.7h914.8v914.8h-914.8z"/> + diff --git a/app/src/main/res/drawable/thumb_tumblr.xml b/app/src/main/res/drawable/thumb_tumblr.xml new file mode 100644 index 00000000..3c83483d --- /dev/null +++ b/app/src/main/res/drawable/thumb_tumblr.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/layout/content_about.xml b/app/src/main/res/layout/content_about.xml index 35d1d7ab..68b91334 100644 --- a/app/src/main/res/layout/content_about.xml +++ b/app/src/main/res/layout/content_about.xml @@ -22,23 +22,21 @@ + android:padding="@dimen/activity_margin_small" + android:gravity="center_vertical" + android:orientation="horizontal" > + + - - + android:layout_height="wrap_content" + android:background="?android:attr/selectableItemBackground"> - + - + @@ -293,7 +288,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" - android:text="@string/about_label_main_author"/> + android:text="@string/about_label_main_developer"/> - + + android:text="@string/about_label_developer"/> + + + + + + + + + + + + + + + + + + + + + + + android:layout_alignParentStart="true" + android:paddingBottom="@dimen/fab_recyclerview_padding" + android:clipToPadding="false" /> diff --git a/app/src/main/res/mipmap-xhdpi/thumb_hurricane_electric.png b/app/src/main/res/mipmap-xhdpi/thumb_hurricane_electric.png deleted file mode 100644 index cdf74fdc..00000000 Binary files a/app/src/main/res/mipmap-xhdpi/thumb_hurricane_electric.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/thumb_seafile.png b/app/src/main/res/mipmap-xhdpi/thumb_seafile.png new file mode 100644 index 00000000..d578a9d8 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/thumb_seafile.png differ diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index f1075f83..ccb74986 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -28,4 +28,6 @@ 8dp 16dp 16dp + + 84dp diff --git a/app/src/main/res/values/settings.xml b/app/src/main/res/values/settings.xml index 50541580..dd9cfce0 100644 --- a/app/src/main/res/values/settings.xml +++ b/app/src/main/res/values/settings.xml @@ -20,8 +20,8 @@ pref_theme pref_label_size_sp pref_label_scroll - pref_thumbnail_visible pref_thumbnail_size + pref_split_group_size pref_backup_ask pref_backup_directory @@ -52,6 +52,7 @@ light 18 46dp + 3 @@ -97,12 +98,19 @@ + 0dp 32dp 46dp 64dp 96dp + + 0 + 2 + 3 + + @string/settings_lang_sys_default English diff --git a/app/src/main/res/values/strings_about.xml b/app/src/main/res/values/strings_about.xml index 6a9ee62f..a2b87654 100644 --- a/app/src/main/res/values/strings_about.xml +++ b/app/src/main/res/values/strings_about.xml @@ -2,9 +2,7 @@ About - - An open-source two-factor authentication App for Android 4.4+. - + Open source two-factor authentication for Android Changelog @@ -17,14 +15,17 @@ Authors - Main author + Main developer + Developer Author of the original app Original App + Website Github Donate Jakob Nixdorf - Bruno Bierbaumer + Bruno Bierbaumer + Richy HBM Contributors Translators diff --git a/app/src/main/res/values/strings_settings.xml b/app/src/main/res/values/strings_settings.xml index d3dff15c..9e999a13 100644 --- a/app/src/main/res/values/strings_settings.xml +++ b/app/src/main/res/values/strings_settings.xml @@ -20,8 +20,8 @@ Theme Label font size Scroll label - Show thumbnails Thumbnail size + Split Token with space Ask for filename Backup directory @@ -133,12 +133,19 @@ + Hidden Small Default Medium Large + + Don\'t split + After two characters + After three characters + + System default diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index fcd6f485..45b9bdbd 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -76,11 +76,6 @@ android:summary="@string/settings_desc_label_scroll" android:defaultValue="false" /> - - + +