From 20c03b7a5eb152d42fbbe9ecbaae27530563b398 Mon Sep 17 00:00:00 2001 From: Damyan Ivanov Date: Wed, 16 Sep 2020 18:03:10 +0300 Subject: [PATCH] fix many lint errors/warnings --- .../async/CommitAccountsTaskParams.java | 28 -------- .../net/ktnx/mobileledger/async/DbOpItem.java | 6 +- .../async/RetrieveTransactionsTask.java | 11 +-- .../async/SendTransactionTask.java | 6 +- .../async/TransactionDateFinder.java | 4 +- .../mobileledger/json/v1_14/ParsedPrice.java | 4 +- .../json/v1_14/ParsedQuantity.java | 6 +- .../mobileledger/json/v1_15/ParsedPrice.java | 4 +- .../json/v1_15/ParsedQuantity.java | 6 +- .../net/ktnx/mobileledger/model/Currency.java | 6 +- .../mobileledger/model/LedgerAccount.java | 4 +- .../ktnx/mobileledger/model/LedgerAmount.java | 7 +- .../mobileledger/model/LedgerTransaction.java | 6 +- .../model/MobileLedgerProfile.java | 2 +- .../model/TransactionListItem.java | 2 +- .../ui/CrashReportDialogFragment.java | 70 +++++++------------ .../mobileledger/ui/DatePickerFragment.java | 2 +- .../net/ktnx/mobileledger/ui/HueRing.java | 6 +- .../ktnx/mobileledger/ui/HueRingDialog.java | 8 +-- .../net/ktnx/mobileledger/ui/MainModel.java | 6 +- .../mobileledger/ui/RecyclerItemListener.java | 33 ++++----- .../AccountSummaryAdapter.java | 27 ++++--- .../ui/activity/CrashReportingActivity.java | 45 ++++++------ .../ui/activity/NewTransactionItemHolder.java | 50 ++++++------- .../activity/NewTransactionItemsAdapter.java | 8 +-- .../ui/activity/NewTransactionModel.java | 39 +++++------ .../profiles/ProfilesRecyclerViewAdapter.java | 4 +- .../TransactionListAdapter.java | 12 ++-- .../TransactionLoaderStep.java | 4 +- .../TransactionRowHolder.java | 18 ++--- .../net/ktnx/mobileledger/utils/Colors.java | 4 +- .../net/ktnx/mobileledger/utils/Digest.java | 6 +- .../net/ktnx/mobileledger/utils/Globals.java | 4 +- .../net/ktnx/mobileledger/utils/Locker.java | 4 +- .../utils/ObservableAtomicInteger.java | 8 +-- .../mobileledger/utils/ObservableList.java | 42 ++++++----- .../mobileledger/utils/ObservableValue.java | 5 +- .../ktnx/mobileledger/utils/SimpleDate.java | 6 +- .../utils/UrlEncodedFormData.java | 4 +- .../app_icon.xml | 2 +- .../app_icon_bg.xml | 0 .../checkbox_star_black.xml | 2 +- .../checkbox_star_white.xml | 2 +- .../dashed_border_1dp.xml | 0 .../dashed_border_8dp.xml | 0 .../drop_shadow.xml | 2 +- .../expand_more_black_24dp.xml | 0 .../fade_down_white.xml | 0 .../ic_add_circle_white_24dp.xml | 0 .../ic_add_white_24dp.xml | 0 .../ic_assignment_black_24dp.xml | 0 .../ic_cancel_white_24dp.xml | 0 .../ic_check_white_24dp.xml | 0 .../ic_clear_accent_24dp.xml | 0 .../ic_comment_black_24dp.xml | 0 .../ic_comment_gray_24dp.xml | 0 .../ic_delete_white_24dp.xml | 0 .../ic_error_outline_black_24dp.xml | 0 .../ic_event_black_24dp.xml | 0 .../ic_event_gray_24dp.xml | 0 .../ic_event_note_black_24dp.xml | 0 .../ic_event_primary_24dp.xml | 0 .../ic_exit_to_app_black_24dp.xml | 0 .../ic_expand_less_black_24dp.xml | 0 .../ic_filter_list_black_24dp.xml | 0 .../ic_filter_list_white_24dp.xml | 0 .../ic_home_black_24dp.xml | 0 .../ic_info_black_24dp.xml | 0 .../ic_keyboard_arrow_down_black_24dp.xml | 0 .../ic_menu_manage.xml | 0 .../ic_menu_send.xml | 0 .../ic_menu_share.xml | 0 .../ic_mode_edit_black_24dp.xml | 0 .../ic_more_horiz_black_24dp.xml | 0 .../ic_notifications_black_24dp.xml | 0 .../ic_palette_black_24dp.xml | 0 .../ic_refresh_white_24dp.xml | 0 .../ic_save_white_24dp.xml | 0 .../ic_settings_black_24dp.xml | 0 .../ic_star_black_24dp.xml | 0 .../ic_star_border_black_24dp.xml | 0 .../ic_star_border_white_24dp.xml | 0 .../ic_star_white_24dp.xml | 0 .../ic_sync_black_24dp.xml | 0 .../ic_thick_check_white.xml | 0 .../ic_unfold_more_black_24dp.xml | 0 .../ic_view_list_black_24dp.xml | 0 .../list_divider.xml | 2 +- .../list_divider_inside_out.xml | 2 +- .../side_nav_bar.xml | 2 +- app/src/main/res/layout/profile_list.xml | 3 +- app/src/main/res/values/styles.xml | 1 + 92 files changed, 241 insertions(+), 294 deletions(-) delete mode 100644 app/src/main/java/net/ktnx/mobileledger/async/CommitAccountsTaskParams.java rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/app_icon.xml (99%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/app_icon_bg.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/checkbox_star_black.xml (95%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/checkbox_star_white.xml (95%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/dashed_border_1dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/dashed_border_8dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/drop_shadow.xml (95%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/expand_more_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/fade_down_white.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_add_circle_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_add_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_assignment_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_cancel_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_check_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_clear_accent_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_comment_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_comment_gray_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_delete_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_error_outline_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_event_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_event_gray_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_event_note_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_event_primary_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_exit_to_app_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_expand_less_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_filter_list_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_filter_list_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_home_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_info_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_keyboard_arrow_down_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_menu_manage.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_menu_send.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_menu_share.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_mode_edit_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_more_horiz_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_notifications_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_palette_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_refresh_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_save_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_settings_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_star_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_star_border_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_star_border_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_star_white_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_sync_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_thick_check_white.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_unfold_more_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/ic_view_list_black_24dp.xml (100%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/list_divider.xml (95%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/list_divider_inside_out.xml (95%) rename app/src/main/res/{drawable-anydpi-v21 => drawable-anydpi}/side_nav_bar.xml (94%) diff --git a/app/src/main/java/net/ktnx/mobileledger/async/CommitAccountsTaskParams.java b/app/src/main/java/net/ktnx/mobileledger/async/CommitAccountsTaskParams.java deleted file mode 100644 index 90728282..00000000 --- a/app/src/main/java/net/ktnx/mobileledger/async/CommitAccountsTaskParams.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2020 Damyan Ivanov. - * This file is part of MoLe. - * MoLe is free software: you can distribute it and/or modify it - * under the term of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your opinion), any later version. - * - * MoLe 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 terms for details. - * - * You should have received a copy of the GNU General Public License - * along with MoLe. If not, see . - */ - -package net.ktnx.mobileledger.async; - -import net.ktnx.mobileledger.model.LedgerAccount; -import net.ktnx.mobileledger.utils.ObservableList; - -public class CommitAccountsTaskParams { - ObservableList accountList; - public CommitAccountsTaskParams(ObservableList accountList, boolean showOnlyStarred) { - this.accountList = accountList; - } -} diff --git a/app/src/main/java/net/ktnx/mobileledger/async/DbOpItem.java b/app/src/main/java/net/ktnx/mobileledger/async/DbOpItem.java index b031dc64..2b0b61fd 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/DbOpItem.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/DbOpItem.java @@ -18,9 +18,9 @@ package net.ktnx.mobileledger.async; class DbOpItem { - String sql; - Object[] params; - Runnable onReady; + final String sql; + final Object[] params; + final Runnable onReady; public DbOpItem(String sql, Object[] params, Runnable onReady) { this.sql = sql; this.params = params; diff --git a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java index 71131a07..1d69fa29 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -74,12 +74,13 @@ public class RetrieveTransactionsTask extends private static final Pattern reDecimalPoint = Pattern.compile("\\.\\d\\d?$"); private static final Pattern reDecimalComma = Pattern.compile(",\\d\\d?$"); // %3A is '=' - private Pattern reAccountName = Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); - private Pattern reAccountValue = Pattern.compile( + private final Pattern reAccountName = + Pattern.compile("/register\\?q=inacct%3A([a-zA-Z0-9%]+)\""); + private final Pattern reAccountValue = Pattern.compile( "\\s*([-+]?[\\d.,]+)(?:\\s+(\\S+))?"); - private MainModel mainModel; - private MobileLedgerProfile profile; - private List prevAccounts; + private final MainModel mainModel; + private final MobileLedgerProfile profile; + private final List prevAccounts; private int expectedPostingsCount = -1; public RetrieveTransactionsTask(@NonNull MainModel mainModel, @NonNull MobileLedgerProfile profile, diff --git a/app/src/main/java/net/ktnx/mobileledger/async/SendTransactionTask.java b/app/src/main/java/net/ktnx/mobileledger/async/SendTransactionTask.java index 5bd55be4..9754a84e 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/SendTransactionTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/SendTransactionTask.java @@ -63,8 +63,8 @@ public class SendTransactionTask extends AsyncTask map = new SparseArray<>(); + private static final SparseArray map = new SparseArray<>(); static { for (API item : API.values()) { diff --git a/app/src/main/java/net/ktnx/mobileledger/async/TransactionDateFinder.java b/app/src/main/java/net/ktnx/mobileledger/async/TransactionDateFinder.java index e90a2ae3..6c261f68 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/TransactionDateFinder.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/TransactionDateFinder.java @@ -59,8 +59,8 @@ public class TransactionDateFinder extends AsyncTask= 0) { String integral = input.replace(".", ""); - decimalMantissa = Long.valueOf(integral); + decimalMantissa = Long.parseLong(integral); decimalPlaces = input.length() - pointPos - 1; } else { - decimalMantissa = Long.valueOf(input); + decimalMantissa = Long.parseLong(input); decimalPlaces = 0; } } diff --git a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedPrice.java b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedPrice.java index 409ed8b2..0b93e15f 100644 --- a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedPrice.java +++ b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedPrice.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -35,7 +35,7 @@ class ParsedPrice { public void setTag(String tag) { this.tag = tag; } - private class Contents { + private static class Contents { private ParsedPrice aprice; private ParsedQuantity aquantity; private String acommodity; diff --git a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java index 898d5974..f4096830 100644 --- a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java +++ b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -47,11 +47,11 @@ public class ParsedQuantity { int pointPos = input.indexOf('.'); if (pointPos >= 0) { String integral = input.replace(".", ""); - decimalMantissa = Long.valueOf(integral); + decimalMantissa = Long.parseLong(integral); decimalPlaces = input.length() - pointPos - 1; } else { - decimalMantissa = Long.valueOf(input); + decimalMantissa = Long.parseLong(input); decimalPlaces = 0; } } diff --git a/app/src/main/java/net/ktnx/mobileledger/model/Currency.java b/app/src/main/java/net/ktnx/mobileledger/model/Currency.java index 28e6d03e..f332f001 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/Currency.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/Currency.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -42,7 +42,7 @@ public class Currency { (oldItem.hasGap == newItem.hasGap); } }; - private int id; + private final int id; private String name; private Position position; private boolean hasGap; @@ -120,9 +120,7 @@ public class Currency { } public enum Position { before(-1), after(1), unknown(0), none(-2); - private int value; Position(int value) { - this.value = value; } static Position valueOf(int value) { switch (value) { diff --git a/app/src/main/java/net/ktnx/mobileledger/model/LedgerAccount.java b/app/src/main/java/net/ktnx/mobileledger/model/LedgerAccount.java index 92ce6c80..7fb38649 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/LedgerAccount.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/LedgerAccount.java @@ -30,12 +30,12 @@ public class LedgerAccount { private String name; private String shortName; private int level; - private LedgerAccount parent; + private final LedgerAccount parent; private boolean expanded; private List amounts; private boolean hasSubAccounts; private boolean amountsExpanded; - private WeakReference profileWeakReference; + private final WeakReference profileWeakReference; public LedgerAccount(MobileLedgerProfile profile, String name, @Nullable LedgerAccount parent) { this.profileWeakReference = new WeakReference<>(profile); diff --git a/app/src/main/java/net/ktnx/mobileledger/model/LedgerAmount.java b/app/src/main/java/net/ktnx/mobileledger/model/LedgerAmount.java index 3ecbc072..0a65e139 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/LedgerAmount.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/LedgerAmount.java @@ -22,11 +22,10 @@ import android.annotation.SuppressLint; import androidx.annotation.NonNull; public class LedgerAmount { - private String currency; - private float amount; + private final String currency; + private final float amount; - public - LedgerAmount(float amount, @NonNull String currency) { + public LedgerAmount(float amount, @NonNull String currency) { this.currency = currency; this.amount = amount; } diff --git a/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java b/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java index d42e5630..e566ca8f 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/LedgerTransaction.java @@ -52,12 +52,12 @@ public class LedgerTransaction { return res; return Float.compare(o1.getAmount(), o2.getAmount()); }; - private String profile; - private Integer id; + private final String profile; + private final Integer id; private SimpleDate date; private String description; private String comment; - private List accounts; + private final List accounts; private String dataHash; private boolean dataLoaded; public LedgerTransaction(Integer id, String dateString, String description) diff --git a/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java b/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java index e255176b..229e5348 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/MobileLedgerProfile.java @@ -566,7 +566,7 @@ public final class MobileLedgerProfile { public enum FutureDates { None(0), OneWeek(7), TwoWeeks(14), OneMonth(30), TwoMonths(60), ThreeMonths(90), SixMonths(180), OneYear(365), All(-1); - private static SparseArray map = new SparseArray<>(); + private static final SparseArray map = new SparseArray<>(); static { for (FutureDates item : FutureDates.values()) { diff --git a/app/src/main/java/net/ktnx/mobileledger/model/TransactionListItem.java b/app/src/main/java/net/ktnx/mobileledger/model/TransactionListItem.java index 0aaf763a..6f1ee9eb 100644 --- a/app/src/main/java/net/ktnx/mobileledger/model/TransactionListItem.java +++ b/app/src/main/java/net/ktnx/mobileledger/model/TransactionListItem.java @@ -23,7 +23,7 @@ import net.ktnx.mobileledger.App; import net.ktnx.mobileledger.utils.SimpleDate; public class TransactionListItem { - private Type type; + private final Type type; private SimpleDate date; private boolean monthShown; private LedgerTransaction transaction; diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/CrashReportDialogFragment.java b/app/src/main/java/net/ktnx/mobileledger/ui/CrashReportDialogFragment.java index fcb53193..0840a4b5 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/CrashReportDialogFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/CrashReportDialogFragment.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -19,7 +19,6 @@ package net.ktnx.mobileledger.ui; import android.app.AlertDialog; import android.app.Dialog; -import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; @@ -49,50 +48,33 @@ public class CrashReportDialogFragment extends DialogFragment { View view = inflater.inflate(R.layout.crash_dialog, null); ((TextView) view.findViewById(R.id.textCrashReport)).setText(mCrashReportText); repScroll = view.findViewById(R.id.scrollText); - builder.setTitle(R.string.crash_dialog_title).setView(view) - .setPositiveButton(R.string.btn_send_crash_report, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // still nothing - Intent email = new Intent(Intent.ACTION_SEND); - email.putExtra(Intent.EXTRA_EMAIL, - new String[]{Globals.developerEmail}); - email.putExtra(Intent.EXTRA_SUBJECT, "MoLe crash report"); - email.putExtra(Intent.EXTRA_TEXT, mCrashReportText); - email.setType("message/rfc822"); - startActivity(Intent.createChooser(email, - getResources().getString(R.string.send_crash_via))); - } - }) - .setNegativeButton(R.string.btn_not_now, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - CrashReportDialogFragment.this.getDialog().cancel(); - } - }) - .setNeutralButton(R.string.btn_show_report, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - } - }); + builder.setTitle(R.string.crash_dialog_title) + .setView(view) + .setPositiveButton(R.string.btn_send_crash_report, (dialog, which) -> { + // still nothing + Intent email = new Intent(Intent.ACTION_SEND); + email.putExtra(Intent.EXTRA_EMAIL, new String[]{Globals.developerEmail}); + email.putExtra(Intent.EXTRA_SUBJECT, "MoLe crash report"); + email.putExtra(Intent.EXTRA_TEXT, mCrashReportText); + email.setType("message/rfc822"); + startActivity(Intent.createChooser(email, + getResources().getString(R.string.send_crash_via))); + }) + .setNegativeButton(R.string.btn_not_now, + (dialog, which) -> CrashReportDialogFragment.this.getDialog() + .cancel()) + .setNeutralButton(R.string.btn_show_report, (dialog, which) -> { + }); AlertDialog dialog = builder.create(); - dialog.setOnShowListener(new DialogInterface.OnShowListener() { - @Override - public void onShow(DialogInterface dialogInterface) { - dialog.getButton(AlertDialog.BUTTON_NEUTRAL) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (repScroll != null) { - repScroll.setVisibility(View.VISIBLE); - v.setVisibility(View.GONE); - } - } - }); - } - }); + dialog.setOnShowListener(dialogInterface -> dialog.getButton(AlertDialog.BUTTON_NEUTRAL) + .setOnClickListener(v -> { + if (repScroll != null) { + repScroll.setVisibility( + View.VISIBLE); + v.setVisibility(View.GONE); + } + })); return dialog; } @Override diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java b/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java index 5e0fe82a..f5fe08cb 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java @@ -39,7 +39,7 @@ public class DatePickerFragment extends AppCompatDialogFragment static final Pattern reYMD = Pattern.compile("^\\s*(\\d+)\\d*/\\s*(\\d+)\\s*/\\s*(\\d+)\\s*$"); static final Pattern reMD = Pattern.compile("^\\s*(\\d+)\\s*/\\s*(\\d+)\\s*$"); static final Pattern reD = Pattern.compile("\\s*(\\d+)\\s*$"); - private Calendar presentDate = GregorianCalendar.getInstance(); + private final Calendar presentDate = GregorianCalendar.getInstance(); private DatePickedListener onDatePickedListener; private long minDate = 0; private long maxDate = Long.MAX_VALUE; diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java b/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java index 6e52dcff..71df5bb9 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -48,8 +48,8 @@ public class HueRing extends View { private float innerR; private float bandWidth; private float centerR; - private RectF centerRect = new RectF(); - private RectF ringRect = new RectF(); + private final RectF centerRect = new RectF(); + private final RectF ringRect = new RectF(); private int markerOverflow; private int markerStrokeWidth; public HueRing(Context context, @Nullable AttributeSet attrs) { diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/HueRingDialog.java b/app/src/main/java/net/ktnx/mobileledger/ui/HueRingDialog.java index 9dc63731..b10c1e02 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/HueRingDialog.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/HueRingDialog.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -21,14 +21,14 @@ import android.app.Dialog; import android.content.Context; import android.os.Bundle; +import androidx.annotation.NonNull; + import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.utils.Colors; -import androidx.annotation.NonNull; - public class HueRingDialog extends Dialog { private final int currentHue; - private int initialHue; + private final int initialHue; private HueRing hueRing; private HueSelectedListener listener; diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java b/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java index 9572ea0d..5bc2554c 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java @@ -65,7 +65,7 @@ public class MainModel extends ViewModel { private final MutableLiveData updateError = new MutableLiveData<>(); private MobileLedgerProfile profile; private List allAccounts = new ArrayList<>(); - private Map accountMap = new HashMap<>(); + private final Map accountMap = new HashMap<>(); private SimpleDate firstTransactionDate; private SimpleDate lastTransactionDate; transient private RetrieveTransactionsTask retrieveTransactionsTask; @@ -274,8 +274,8 @@ public class MainModel extends ViewModel { } static class AccountListLoader extends Thread { - private MobileLedgerProfile profile; - private MainModel model; + private final MobileLedgerProfile profile; + private final MainModel model; AccountListLoader(MobileLedgerProfile profile, MainModel model) { this.profile = profile; this.model = model; diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/RecyclerItemListener.java b/app/src/main/java/net/ktnx/mobileledger/ui/RecyclerItemListener.java index df366907..2a266b93 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/RecyclerItemListener.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/RecyclerItemListener.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -18,26 +18,19 @@ package net.ktnx.mobileledger.ui; import android.content.Context; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; -public class RecyclerItemListener implements OnItemTouchListener { - private RecyclerTouchListener listener; - private GestureDetector gd; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener; - public interface RecyclerTouchListener { - void onClickItem(View v, int position); - void onLongClickItem(View v, int position); - } +public class RecyclerItemListener implements OnItemTouchListener { + private final GestureDetector gd; public RecyclerItemListener(Context ctx, RecyclerView rv, RecyclerTouchListener listener) { - this.listener = listener; - this.gd = new GestureDetector( - ctx, new GestureDetector.SimpleOnGestureListener() { + this.gd = new GestureDetector(ctx, new GestureDetector.SimpleOnGestureListener() { @Override public void onLongPress(MotionEvent e) { View v = rv.findChildViewUnder(e.getX(), e.getY()); @@ -50,24 +43,26 @@ public class RecyclerItemListener implements OnItemTouchListener { listener.onClickItem(v, rv.getChildAdapterPosition(v)); return true; } - } - ); + }); } - @Override public boolean onInterceptTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent motionEvent) { View v = recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY()); return (v != null) && gd.onTouchEvent(motionEvent); } - @Override public void onTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent motionEvent) { } - @Override public void onRequestDisallowInterceptTouchEvent(boolean b) { } + + public interface RecyclerTouchListener { + void onClickItem(View v, int position); + + void onLongClickItem(View v, int position); + } } diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/account_summary/AccountSummaryAdapter.java b/app/src/main/java/net/ktnx/mobileledger/ui/account_summary/AccountSummaryAdapter.java index d50601ef..30025c28 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/account_summary/AccountSummaryAdapter.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/account_summary/AccountSummaryAdapter.java @@ -52,8 +52,8 @@ import static net.ktnx.mobileledger.utils.Logger.debug; public class AccountSummaryAdapter extends RecyclerView.Adapter { public static final int AMOUNT_LIMIT = 3; - private AsyncListDiffer listDiffer; - private MainModel model; + private final AsyncListDiffer listDiffer; + private final MainModel model; AccountSummaryAdapter(MainModel model) { this.model = model; @@ -93,11 +93,11 @@ public class AccountSummaryAdapter listDiffer.submitList(newList); } class LedgerRowHolder extends RecyclerView.ViewHolder { - TextView tvAccountName, tvAccountAmounts; - ConstraintLayout row; - View expanderContainer; - ImageView expander; - View accountExpanderContainer; + final TextView tvAccountName, tvAccountAmounts; + final ConstraintLayout row; + final View expanderContainer; + final ImageView expander; + final View accountExpanderContainer; LedgerAccount mAccount; public LedgerRowHolder(@NonNull View itemView) { super(itemView); @@ -178,14 +178,11 @@ public class AccountSummaryAdapter final String accountName = mAccount.getName(); builder.setTitle(accountName); builder.setItems(R.array.acc_ctx_menu, (dialog, which) -> { - switch (which) { - case 0: - // show transactions - activity.showAccountTransactions(accountName); - break; - default: - throw new RuntimeException( - String.format("Unknown menu item id (%d)", which)); + if (which == 0) {// show transactions + activity.showAccountTransactions(accountName); + } + else { + throw new RuntimeException(String.format("Unknown menu item id (%d)", which)); } dialog.dismiss(); }); diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/CrashReportingActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/CrashReportingActivity.java index 183a5e91..a134c892 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/CrashReportingActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/CrashReportingActivity.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -37,32 +37,29 @@ public abstract class CrashReportingActivity extends AppCompatActivity { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread t, Throwable e) { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); + Thread.setDefaultUncaughtExceptionHandler((t, e) -> { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); - try { - PackageInfo pi = getApplicationContext().getPackageManager() - .getPackageInfo(getPackageName(), 0); - pw.format("MoLe version: %s\n", pi.versionName); - } - catch (Exception oh) { - pw.print("Error getting package version:\n"); - oh.printStackTrace(pw); - pw.print("\n"); - } - pw.format("OS version: %s; API level %d\n\n", Build.VERSION.RELEASE, - Build.VERSION.SDK_INT); - e.printStackTrace(pw); + try { + PackageInfo pi = getApplicationContext().getPackageManager() + .getPackageInfo(getPackageName(), 0); + pw.format("MoLe version: %s\n", pi.versionName); + } + catch (Exception oh) { + pw.print("Error getting package version:\n"); + oh.printStackTrace(pw); + pw.print("\n"); + } + pw.format("OS version: %s; API level %d\n\n", Build.VERSION.RELEASE, + Build.VERSION.SDK_INT); + e.printStackTrace(pw); - Log.e(null, sw.toString()); + Log.e(null, sw.toString()); - CrashReportDialogFragment df = new CrashReportDialogFragment(); - df.setCrashReportText(sw.toString()); - df.show(getSupportFragmentManager(), "crash_report"); - } + CrashReportDialogFragment df = new CrashReportDialogFragment(); + df.setCrashReportText(sw.toString()); + df.show(getSupportFragmentManager(), "crash_report"); }); debug("crash", "Uncaught exception handler set"); } diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java index 64161a5c..21c0ce28 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemHolder.java @@ -65,33 +65,33 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder private final TextView tvCurrency; private final Observer showCommentsObserver; private final TextView tvTransactionComment; + private final TextView tvDate; + private final AutoCompleteTextView tvDescription; + private final TextView tvDummy; + private final AutoCompleteTextView tvAccount; + private final TextView tvComment; + private final EditText tvAmount; + private final ViewGroup lHead; + private final ViewGroup lAccount; + private final FrameLayout lPadding; + private final MobileLedgerProfile mProfile; + private final Observer dateObserver; + private final Observer descriptionObserver; + private final Observer transactionCommentObserver; + private final Observer hintObserver; + private final Observer focusedAccountObserver; + private final Observer accountCountObserver; + private final Observer editableObserver; + private final Observer currencyPositionObserver; + private final Observer currencyGapObserver; + private final Observer localeObserver; + private final Observer currencyObserver; + private final Observer showCurrencyObserver; + private final Observer commentObserver; + private final Observer amountValidityObserver; private String decimalSeparator; private NewTransactionModel.Item item; - private TextView tvDate; - private AutoCompleteTextView tvDescription; - private TextView tvDummy; - private AutoCompleteTextView tvAccount; - private TextView tvComment; - private EditText tvAmount; - private ViewGroup lHead; - private ViewGroup lAccount; - private FrameLayout lPadding; - private MobileLedgerProfile mProfile; private Date date; - private Observer dateObserver; - private Observer descriptionObserver; - private Observer transactionCommentObserver; - private Observer hintObserver; - private Observer focusedAccountObserver; - private Observer accountCountObserver; - private Observer editableObserver; - private Observer currencyPositionObserver; - private Observer currencyGapObserver; - private Observer localeObserver; - private Observer currencyObserver; - private Observer showCurrencyObserver; - private Observer commentObserver; - private Observer amountValidityObserver; private boolean inUpdate = false; private boolean syncingData = false; //TODO multiple amounts with different currencies per posting @@ -683,7 +683,7 @@ class NewTransactionItemHolder extends RecyclerView.ViewHolder final NewTransactionActivity activity = (NewTransactionActivity) tvDescription.getContext(); - if (!item.isOfType(ItemType.bottomFiller)) { + if (!item.isBottomFiller()) { item.observeEditableFlag(activity, editableObserver); item.getModel() .observeFocusedItem(activity, focusedAccountObserver); diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemsAdapter.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemsAdapter.java index 5118d2c6..55e02381 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemsAdapter.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionItemsAdapter.java @@ -53,9 +53,9 @@ import static net.ktnx.mobileledger.utils.Logger.debug; class NewTransactionItemsAdapter extends RecyclerView.Adapter implements DescriptionSelectedCallback { - private NewTransactionModel model; + private final NewTransactionModel model; private MobileLedgerProfile mProfile; - private ItemTouchHelper touchHelper; + private final ItemTouchHelper touchHelper; private RecyclerView recyclerView; private int checkHoldCounter = 0; NewTransactionItemsAdapter(NewTransactionModel viewModel, MobileLedgerProfile profile) { @@ -651,7 +651,7 @@ class NewTransactionItemsAdapter extends RecyclerView.Adapter hashMap = new HashMap<>(); + private final HashMap hashMap = new HashMap<>(); float get(String currencyName) { Float f = hashMap.get(currencyName); if (f == null) { @@ -672,7 +672,7 @@ class NewTransactionItemsAdapter extends RecyclerView.Adapter> hashMap = new HashMap<>(); + private final HashMap> hashMap = new HashMap<>(); @NonNull List getList(@Nullable String currencyName) { List list = hashMap.get(currencyName); diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionModel.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionModel.java index 535b8614..8660c215 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionModel.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/NewTransactionModel.java @@ -46,18 +46,18 @@ public class NewTransactionModel extends ViewModel { final ArrayList items = new ArrayList<>(); final MutableLiveData isSubmittable = new MutableLiveData<>(false); final MutableLiveData showComments = new MutableLiveData<>(true); - private final Item header = new Item(this, null, ""); + private final Item header = new Item(this, ""); private final Item trailer = new Item(this); private final MutableLiveData focusedItem = new MutableLiveData<>(0); private final MutableLiveData accountCount = new MutableLiveData<>(0); private final MutableLiveData simulateSave = new MutableLiveData<>(false); private final AtomicInteger busyCounter = new AtomicInteger(0); private final MutableLiveData busyFlag = new MutableLiveData<>(false); - private boolean observingDataProfile; - private Observer profileObserver = profile -> { + private final Observer profileObserver = profile -> { showCurrency.postValue(profile.getShowCommodityByDefault()); showComments.postValue(profile.getShowCommentsByDefault()); }; + private boolean observingDataProfile; void observeShowComments(LifecycleOwner owner, Observer observer) { showComments.observe(owner, observer); } @@ -227,27 +227,26 @@ public class NewTransactionModel extends ViewModel { static class Item { - private ItemType type; - private MutableLiveData date = new MutableLiveData<>(); - private MutableLiveData description = new MutableLiveData<>(); + private final ItemType type; + private final MutableLiveData date = new MutableLiveData<>(); + private final MutableLiveData description = new MutableLiveData<>(); + private final MutableLiveData amountHint = new MutableLiveData<>(null); + private final NewTransactionModel model; + private final MutableLiveData editable = new MutableLiveData<>(true); + private final MutableLiveData comment = new MutableLiveData<>(null); + private final MutableLiveData currency = new MutableLiveData<>(null); + private final MutableLiveData amountValid = new MutableLiveData<>(true); private LedgerTransactionAccount account; - private MutableLiveData amountHint = new MutableLiveData<>(null); - private NewTransactionModel model; - private MutableLiveData editable = new MutableLiveData<>(true); private FocusedElement focusedElement = FocusedElement.Account; - private MutableLiveData comment = new MutableLiveData<>(null); - private MutableLiveData currency = new MutableLiveData<>(null); - private MutableLiveData amountValid = new MutableLiveData<>(true); private boolean amountHintIsSet = false; Item(NewTransactionModel model) { this.model = model; type = ItemType.bottomFiller; editable.setValue(false); } - Item(NewTransactionModel model, SimpleDate date, String description) { + Item(NewTransactionModel model, String description) { this.model = model; this.type = ItemType.generalData; - this.date.setValue(date); this.description.setValue(description); this.editable.setValue(true); } @@ -272,14 +271,14 @@ public class NewTransactionModel extends ViewModel { return model; } void setEditable(boolean editable) { - ensureType(ItemType.generalData, ItemType.transactionRow); + ensureTypeIsGeneralDataOrTransactionRow(); this.editable.setValue(editable); } - private void ensureType(ItemType type1, ItemType type2) { - if ((type != type1) && (type != type2)) { + private void ensureTypeIsGeneralDataOrTransactionRow() { + if ((type != ItemType.generalData) && (type != ItemType.transactionRow)) { throw new RuntimeException( String.format("Actual type (%s) differs from wanted (%s or %s)", type, - type1, type2)); + ItemType.generalData, ItemType.transactionRow)); } } String getAmountHint() { @@ -446,8 +445,8 @@ public class NewTransactionModel extends ViewModel { void stopObservingCurrency(Observer observer) { currency.removeObserver(observer); } - boolean isOfType(ItemType type) { - return this.type == type; + boolean isBottomFiller() { + return this.type == ItemType.bottomFiller; } boolean isAmountHintSet() { return amountHintIsSet; diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfilesRecyclerViewAdapter.java b/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfilesRecyclerViewAdapter.java index 34b9064a..cef8d8fb 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfilesRecyclerViewAdapter.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfilesRecyclerViewAdapter.java @@ -51,13 +51,13 @@ import static net.ktnx.mobileledger.utils.Logger.debug; public class ProfilesRecyclerViewAdapter extends RecyclerView.Adapter { private static WeakReference instanceRef; + public final MutableLiveData editingProfiles = new MutableLiveData<>(false); private final View.OnClickListener mOnClickListener = view -> { MobileLedgerProfile profile = (MobileLedgerProfile) ((View) view.getParent()).getTag(); editProfile(view, profile); }; - public final MutableLiveData editingProfiles = new MutableLiveData<>(false); + private final ItemTouchHelper rearrangeHelper; private RecyclerView recyclerView; - private ItemTouchHelper rearrangeHelper; private boolean animationsEnabled = true; public ProfilesRecyclerViewAdapter() { instanceRef = new WeakReference<>(this); diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListAdapter.java b/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListAdapter.java index 6f13930a..492c6151 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListAdapter.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionListAdapter.java @@ -56,8 +56,8 @@ import java.util.Locale; import java.util.TimeZone; public class TransactionListAdapter extends RecyclerView.Adapter { - private MainModel model; - private AsyncListDiffer listDiffer; + private final MainModel model; + private final AsyncListDiffer listDiffer; public TransactionListAdapter(MainModel model) { super(); this.model = model; @@ -297,10 +297,10 @@ public class TransactionListAdapter extends RecyclerView.Adapter themeWatch = new MutableLiveData<>(0); private static final float blueLightness = 0.665f; private static final float yellowLightness = 0.350f; private static final int[][] EMPTY_STATES = new int[][]{new int[0]}; @@ -54,8 +55,7 @@ public class Colors { @ColorInt public static int tableRowDarkBG; public static int profileThemeId = -1; - public static MutableLiveData themeWatch = new MutableLiveData<>(0); - private static int[] themeIDs = + private static final int[] themeIDs = {R.style.AppTheme_000, R.style.AppTheme_005, R.style.AppTheme_010, R.style.AppTheme_015, R.style.AppTheme_020, R.style.AppTheme_025, R.style.AppTheme_030, R.style.AppTheme_035, R.style.AppTheme_040, R.style.AppTheme_045, R.style.AppTheme_050, R.style.AppTheme_055, diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/Digest.java b/app/src/main/java/net/ktnx/mobileledger/utils/Digest.java index c4a8b50a..cab5008a 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/Digest.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/Digest.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -82,8 +82,4 @@ public class Digest { public int getDigestLength() { return digest.getDigestLength(); } - @Override - public Object clone() throws CloneNotSupportedException { - return digest.clone(); - } } diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java b/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java index c6cc87a3..4103992b 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java @@ -45,8 +45,8 @@ public final class Globals { } }; public static String[] monthNames; - public static String developerEmail = "dam+mole-crash@ktnx.net"; - private static Pattern reLedgerDate = + public static final String developerEmail = "dam+mole-crash@ktnx.net"; + private static final Pattern reLedgerDate = Pattern.compile("^(?:(?:(\\d+)/)??(\\d\\d?)/)?(\\d\\d?)$"); public static void hideSoftKeyboard(Activity act) { // hide the keyboard diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/Locker.java b/app/src/main/java/net/ktnx/mobileledger/utils/Locker.java index 474ce83f..097fdd08 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/Locker.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/Locker.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -20,7 +20,7 @@ package net.ktnx.mobileledger.utils; import java.util.concurrent.locks.ReentrantReadWriteLock; public class Locker implements AutoCloseable { - private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public LockHolder lockForWriting() { ReentrantReadWriteLock.WriteLock wLock = lock.writeLock(); wLock.lock(); diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/ObservableAtomicInteger.java b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableAtomicInteger.java index d4900e0b..f804464c 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/ObservableAtomicInteger.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableAtomicInteger.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -19,15 +19,15 @@ package net.ktnx.mobileledger.utils; import android.os.Build; +import androidx.annotation.RequiresApi; + import java.util.Observable; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.IntBinaryOperator; import java.util.function.IntUnaryOperator; -import androidx.annotation.RequiresApi; - public class ObservableAtomicInteger extends Observable { - private AtomicInteger holder; + private final AtomicInteger holder; ObservableAtomicInteger() { super(); holder = new AtomicInteger(); diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/ObservableList.java b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableList.java index 363a8a1a..4ca3e695 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/ObservableList.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableList.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -19,6 +19,10 @@ package net.ktnx.mobileledger.utils; import android.os.Build; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; + import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -34,15 +38,11 @@ import java.util.function.Predicate; import java.util.function.UnaryOperator; import java.util.stream.Stream; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; - import static net.ktnx.mobileledger.utils.Logger.debug; public class ObservableList extends Observable implements List { private List list; - private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private int notificationBlocks = 0; private boolean notificationWasBlocked = false; public ObservableList(List list) { @@ -81,11 +81,14 @@ public class ObservableList extends Observable implements List { throw new RuntimeException("Iterators break encapsulation and ignore locking"); // return list.iterator(); } + @NotNull public Object[] toArray() { try (LockHolder lh = lockForReading()) { return list.toArray(); } } + @Override + @NotNull public T1[] toArray(@Nullable T1[] a) { try (LockHolder lh = lockForReading()) { return list.toArray(a); @@ -95,7 +98,8 @@ public class ObservableList extends Observable implements List { try (LockHolder lh = lockForWriting()) { boolean result = list.add(t); lh.downgrade(); - if (result) forceNotify(); + if (result) + forceNotify(); return result; } } @@ -234,40 +238,46 @@ public class ObservableList extends Observable implements List { @NotNull @RequiresApi(api = Build.VERSION_CODES.N) public Spliterator spliterator() { - if (!lock.isWriteLockedByCurrentThread()) throw new RuntimeException( - "Iterators break encapsulation and ignore locking. Write-lock first"); + if (!lock.isWriteLockedByCurrentThread()) + throw new RuntimeException( + "Iterators break encapsulation and ignore locking. Write-lock first"); return list.spliterator(); } @RequiresApi(api = Build.VERSION_CODES.N) - public boolean removeIf(Predicate filter) { + public boolean removeIf(@NotNull Predicate filter) { try (LockHolder lh = lockForWriting()) { boolean result = list.removeIf(filter); lh.downgrade(); - if (result) forceNotify(); + if (result) + forceNotify(); return result; } } + @NotNull @RequiresApi(api = Build.VERSION_CODES.N) public Stream stream() { if (!lock.isWriteLockedByCurrentThread()) throw new RuntimeException( "Iterators break encapsulation and ignore locking. Write-lock first"); return list.stream(); } + @NotNull @RequiresApi(api = Build.VERSION_CODES.N) public Stream parallelStream() { - if (!lock.isWriteLockedByCurrentThread()) throw new RuntimeException( - "Iterators break encapsulation and ignore locking. Write-lock first"); + if (!lock.isWriteLockedByCurrentThread()) + throw new RuntimeException( + "Iterators break encapsulation and ignore locking. Write-lock first"); return list.parallelStream(); } @RequiresApi(api = Build.VERSION_CODES.N) - public void forEach(Consumer action) { + public void forEach(@NotNull Consumer action) { try (LockHolder lh = lockForReading()) { list.forEach(action); } } public List getList() { - if (!lock.isWriteLockedByCurrentThread()) throw new RuntimeException( - "Direct list access breaks encapsulation and ignore locking. Write-lock first"); + if (!lock.isWriteLockedByCurrentThread()) + throw new RuntimeException( + "Direct list access breaks encapsulation and ignore locking. Write-lock first"); return list; } public void setList(List aList) { diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/ObservableValue.java b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableValue.java index d72b12e5..326be072 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/ObservableValue.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/ObservableValue.java @@ -57,7 +57,7 @@ public class ObservableValue { impl.setChanged(); impl.notifyObservers(); } - private class ObservableValueImpl extends Observable { + private static class ObservableValueImpl extends Observable { protected T value; public void setValue(T newValue) { setValue(newValue, true); @@ -66,7 +66,8 @@ public class ObservableValue { super.setChanged(); } private synchronized void setValue(T newValue, boolean notify) { - if ((newValue == null) && (value == null)) return; + if ((newValue == null) && (value == null)) + return; if ((newValue != null) && newValue.equals(value)) return; diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/SimpleDate.java b/app/src/main/java/net/ktnx/mobileledger/utils/SimpleDate.java index c8c3e054..51cf2532 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/SimpleDate.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/SimpleDate.java @@ -24,9 +24,9 @@ import java.util.Calendar; import java.util.Date; public class SimpleDate implements Comparable { - public int year; - public int month; - public int day; + public final int year; + public final int month; + public final int day; public SimpleDate(int y, int m, int d) { year = y; month = m; diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/UrlEncodedFormData.java b/app/src/main/java/net/ktnx/mobileledger/utils/UrlEncodedFormData.java index f010e4c1..40c104ee 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/UrlEncodedFormData.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/UrlEncodedFormData.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -26,7 +26,7 @@ import java.util.ArrayList; import java.util.List; public class UrlEncodedFormData { - private List> pairs; + private final List> pairs; public UrlEncodedFormData() { pairs = new ArrayList<>(); diff --git a/app/src/main/res/drawable-anydpi-v21/app_icon.xml b/app/src/main/res/drawable-anydpi/app_icon.xml similarity index 99% rename from app/src/main/res/drawable-anydpi-v21/app_icon.xml rename to app/src/main/res/drawable-anydpi/app_icon.xml index a696e766..9d08e3ec 100644 --- a/app/src/main/res/drawable-anydpi-v21/app_icon.xml +++ b/app/src/main/res/drawable-anydpi/app_icon.xml @@ -1,5 +1,5 @@ -- 2.39.2