]> git.ktnx.net Git - mobile-ledger.git/log
mobile-ledger.git
3 years agoprovide a common routine for running something on the main thread
Damyan Ivanov [Sat, 24 Apr 2021 17:08:38 +0000 (17:08 +0000)]
provide a common routine for running something on the main thread

3 years agosave profile's order when editing a profile
Damyan Ivanov [Sat, 24 Apr 2021 17:02:06 +0000 (17:02 +0000)]
save profile's order when editing a profile

3 years agoavoid switching current profile when profiles are rearranged
Damyan Ivanov [Sat, 24 Apr 2021 16:17:10 +0000 (16:17 +0000)]
avoid switching current profile when profiles are rearranged

on rearrange the object instances change so the equality check needs to
be done on IDs, not object instances

3 years agofully employ room for loading transactions off DB
Damyan Ivanov [Fri, 23 Apr 2021 21:36:04 +0000 (00:36 +0300)]
fully employ room for loading transactions off DB

3 years agodebug refinements
Damyan Ivanov [Fri, 23 Apr 2021 20:33:05 +0000 (23:33 +0300)]
debug refinements

3 years agodo not force transaction list reload upon main activity start
Damyan Ivanov [Fri, 23 Apr 2021 20:32:43 +0000 (23:32 +0300)]
do not force transaction list reload upon main activity start

instead, let the account filter observer trigger it (account filter live
data is initialized with a value)

this drops the reloading upon profile change, but profile changes
restart the activity anyway, as do theme changes

also, more precise reaction on account filter changes in the fragment --
no need to reload transactions there now that the main activity does it

3 years agoMainActivity's logging using a TAG
Damyan Ivanov [Fri, 23 Apr 2021 20:25:56 +0000 (23:25 +0300)]
MainActivity's logging using a TAG

3 years agoData.profile doesn't need to be an inert MutableLiveData
Damyan Ivanov [Fri, 23 Apr 2021 20:24:02 +0000 (23:24 +0300)]
Data.profile doesn't need to be an inert MutableLiveData

the normal MutableLiveData doesn't fire if not given an initial value

3 years agouse a constant to indicate profile ID of no real profile
Damyan Ivanov [Fri, 23 Apr 2021 20:21:39 +0000 (23:21 +0300)]
use a constant to indicate profile ID of no real profile

3 years agoasync variant for loading all transactions
Damyan Ivanov [Fri, 23 Apr 2021 19:29:02 +0000 (22:29 +0300)]
async variant for loading all transactions

3 years agoTransactionAccumulator needs not keep a reference to the main model
Damyan Ivanov [Fri, 23 Apr 2021 19:25:58 +0000 (22:25 +0300)]
TransactionAccumulator needs not keep a reference to the main model

3 years agoasking UpdateTransactionsTask to load a null profile is fine
Damyan Ivanov [Fri, 23 Apr 2021 19:14:52 +0000 (22:14 +0300)]
asking UpdateTransactionsTask to load a null profile is fine

it would load an empty transaction list

3 years agospeculatively update last update date while the transactions are stored
Damyan Ivanov [Fri, 23 Apr 2021 15:34:24 +0000 (15:34 +0000)]
speculatively update last update date while the transactions are stored

this a white lie, because the displayed list is the new one, retrieved
at the given time

this fixes the previous attempt

3 years agoRevert "speculatively update last update date before the transactions are stored"
Damyan Ivanov [Fri, 23 Apr 2021 15:30:01 +0000 (15:30 +0000)]
Revert "speculatively update last update date before the transactions are stored"

This reverts commit bae2aa9e

the code in question is run every time the transaction list is filtered
or updated. when the transaction list is updated it is OK to lie a bit,
but when the list is just filtered the timestamp of the data does not
change

3 years agospeculatively update last update date before the transactions are stored
Damyan Ivanov [Fri, 23 Apr 2021 05:09:41 +0000 (05:09 +0000)]
speculatively update last update date before the transactions are stored

this a white lie, because the displayed list is the new one, retrieved
at the given time

3 years agofurther optimize transaction storage by comparing dataHash field
Damyan Ivanov [Fri, 23 Apr 2021 05:07:26 +0000 (05:07 +0000)]
further optimize transaction storage by comparing dataHash field

if the dataHash field of the transaction that needs storage matches one
from the database (retrieved by profile id and ledger id), then simply
update the generation of the transaction in the database (and its
accounts)

since this is the common case (refreshing transaction list -- most of
the transactions are expected to be unchanged) this saves big time

3 years agoput all the annotated abstract DAO methods in the beginning
Damyan Ivanov [Fri, 23 Apr 2021 04:59:53 +0000 (04:59 +0000)]
put all the annotated abstract DAO methods in the beginning

3 years agoinline the storeAccountsAndTransactions method
Damyan Ivanov [Fri, 23 Apr 2021 04:56:14 +0000 (04:56 +0000)]
inline the storeAccountsAndTransactions method

it is a bit silly to have run() that only calls one method

3 years agofix storing transaction accounts (bad typo)
Damyan Ivanov [Thu, 22 Apr 2021 21:10:46 +0000 (00:10 +0300)]
fix storing transaction accounts (bad typo)

this is the fastest storage approach, next thing to try -- compare
existing records with the new-to-be and avoid the db update alltogether
if they are the same

3 years agoadditional transaction deletion methods
Damyan Ivanov [Thu, 22 Apr 2021 21:09:25 +0000 (00:09 +0300)]
additional transaction deletion methods

3 years agofix copying ensuring currency is not null
Damyan Ivanov [Thu, 22 Apr 2021 21:08:45 +0000 (00:08 +0300)]
fix copying ensuring currency is not null

3 years agorename method to better reflect what it does
Damyan Ivanov [Thu, 22 Apr 2021 21:08:20 +0000 (00:08 +0300)]
rename method to better reflect what it does

3 years agofix field/accessor type mismatch
Damyan Ivanov [Thu, 22 Apr 2021 20:44:49 +0000 (23:44 +0300)]
fix field/accessor type mismatch

3 years agoselects from joined tables need explicit column list :(
Damyan Ivanov [Thu, 22 Apr 2021 20:44:28 +0000 (23:44 +0300)]
selects from joined tables need explicit column list :(

3 years agospeed up transaction storage a bit
Damyan Ivanov [Thu, 22 Apr 2021 20:43:55 +0000 (23:43 +0300)]
speed up transaction storage a bit

by updating existing records in-place. sqlite's insert or replace
statement tries insert, and when that fails because of unique/primary
key violation *removes* the existing record together with any child
records and then retries the insert. it is almost like deleting all the
transactions and inserting them again, but with a failed insert before
that

3 years ago(commented) facility for debugging Room's SQL queries
Damyan Ivanov [Thu, 22 Apr 2021 20:37:15 +0000 (23:37 +0300)]
(commented) facility for debugging Room's SQL queries

available in room 2.3.0

3 years agoimplement stable IDs for the transaction list
Damyan Ivanov [Thu, 22 Apr 2021 04:39:09 +0000 (04:39 +0000)]
implement stable IDs for the transaction list

3 years agofix ordering of filtered transaction items
Damyan Ivanov [Thu, 22 Apr 2021 04:28:31 +0000 (04:28 +0000)]
fix ordering of filtered transaction items

ledger_id matches the order at which the transactions are stored in
the ledger

3 years agofix comparison of transaction date delimiter contents
Damyan Ivanov [Thu, 22 Apr 2021 04:24:44 +0000 (04:24 +0000)]
fix comparison of transaction date delimiter contents

it is possible that a delimiter that showed the month name no longer
does and vice versa

3 years agoadd some profiling on acount/transaction list storage
Damyan Ivanov [Thu, 22 Apr 2021 04:22:37 +0000 (04:22 +0000)]
add some profiling on acount/transaction list storage

3 years agoBaseDAO: async operation variants without callbacks
Damyan Ivanov [Thu, 22 Apr 2021 04:19:42 +0000 (04:19 +0000)]
BaseDAO: async operation variants without callbacks

3 years agouse plain 'long' for Currency.id
Damyan Ivanov [Thu, 22 Apr 2021 04:14:08 +0000 (04:14 +0000)]
use plain 'long' for Currency.id

also make it mutable, like in the rest of the entity classes

3 years agodrop MobileLedgerDatabase, move initComplete to DB
Damyan Ivanov [Wed, 21 Apr 2021 20:09:28 +0000 (23:09 +0300)]
drop MobileLedgerDatabase, move initComplete to DB

3 years agosplash: show forced delay before starting the main activity in debug
Damyan Ivanov [Wed, 21 Apr 2021 20:03:50 +0000 (23:03 +0300)]
splash: show forced delay before starting the main activity in debug

we may want to do something useful with this time - preload profile
data?

3 years agoconvert DatabaseInitTask to a lightweight thread
Damyan Ivanov [Wed, 21 Apr 2021 20:03:06 +0000 (23:03 +0300)]
convert DatabaseInitTask to a lightweight thread

looks much cleaner

3 years agodrop remnants of gradual transaction data loading, and last non-Room SQL
Damyan Ivanov [Wed, 21 Apr 2021 19:44:14 +0000 (22:44 +0300)]
drop remnants of gradual transaction data loading, and last non-Room SQL

3 years agopreload transaction list page, making transition smoother
Damyan Ivanov [Wed, 21 Apr 2021 19:34:48 +0000 (22:34 +0300)]
preload transaction list page, making transition smoother

3 years agofix updates of last transaction update text
Damyan Ivanov [Wed, 21 Apr 2021 19:29:09 +0000 (22:29 +0300)]
fix updates of last transaction update text

3 years agorework transaction list with proper view holders and no background load
Damyan Ivanov [Wed, 21 Apr 2021 19:22:20 +0000 (22:22 +0300)]
rework transaction list with proper view holders and no background load

all the data is already available in the transaction list loaded from
the database (asynchronously)

also, fix a glitch where a visible item's matching account row is not
coloured when the list is filtered by account name (because the
underlying item is the same)

3 years agofix finding the earliest transaction by date
Damyan Ivanov [Tue, 20 Apr 2021 21:01:31 +0000 (00:01 +0300)]
fix finding the earliest transaction by date

3 years agorewrite update of transaction list from DB with Room
Damyan Ivanov [Tue, 20 Apr 2021 20:37:14 +0000 (23:37 +0300)]
rewrite update of transaction list from DB with Room

3 years agodrop unused async db queue classes
Damyan Ivanov [Tue, 20 Apr 2021 19:57:56 +0000 (22:57 +0300)]
drop unused async db queue classes

3 years agodrop now unused MLDB class along with its async db routines
Damyan Ivanov [Tue, 20 Apr 2021 19:55:04 +0000 (22:55 +0300)]
drop now unused MLDB class along with its async db routines

3 years agowipe retrieval progress when transaction retrieval is stopped
Damyan Ivanov [Tue, 20 Apr 2021 19:46:46 +0000 (22:46 +0300)]
wipe retrieval progress when transaction retrieval is stopped

fixes a glitch when a retrieval error suggests changing profile
configuration, and from there the profile is deleted and activity
restarted because of the change of the active profile. the new activity
instance observes the retrieval result and gets the error and reports it
erroneously

3 years agointerpret only json-parsing exceptions as API mismatch
Damyan Ivanov [Tue, 20 Apr 2021 19:44:12 +0000 (22:44 +0300)]
interpret only json-parsing exceptions as API mismatch

all others, like no Internet, bad host name etc should be reported as
usual

3 years agowhen deleting the currently active profile, switch to the first profile
Damyan Ivanov [Mon, 19 Apr 2021 20:07:17 +0000 (23:07 +0300)]
when deleting the currently active profile, switch to the first profile

3 years agofix exception handling while trying different API versions
Damyan Ivanov [Sun, 18 Apr 2021 20:07:35 +0000 (23:07 +0300)]
fix exception handling while trying different API versions

3 years agofix profile deletion / data wipe
Damyan Ivanov [Sun, 18 Apr 2021 11:49:53 +0000 (14:49 +0300)]
fix profile deletion / data wipe

do not keep a reference to the profile being edited, instead query it
by the ID now stored in the model

one thing doesn't work yet - reaction to deletion of the current profile

3 years agofix passing profile ID to ProfileDetailActivity
Damyan Ivanov [Sun, 18 Apr 2021 10:56:54 +0000 (13:56 +0300)]
fix passing profile ID to ProfileDetailActivity

3 years agoadd a pre-release build variant
Damyan Ivanov [Sun, 18 Apr 2021 10:53:05 +0000 (10:53 +0000)]
add a pre-release build variant

to be used as debug aid when initial install needs to be tested, but
keeping the data in the debug-variant ap

3 years agomake use of getBindingAdapter and save a field
Damyan Ivanov [Sun, 18 Apr 2021 10:51:54 +0000 (13:51 +0300)]
make use of getBindingAdapter and save a field

3 years agobump library dependencies
Damyan Ivanov [Sun, 18 Apr 2021 10:43:24 +0000 (13:43 +0300)]
bump library dependencies

RecycleView 1.2.0 deprecated getAdapterPosition, replace with
getBindingAdapterPosition -- no concat adapters are used

3 years agofix creation of a new profile after Room-y of Profile adoption
Damyan Ivanov [Sun, 18 Apr 2021 09:42:54 +0000 (12:42 +0300)]
fix creation of a new profile after Room-y of Profile adoption

3 years agofix template editor layout
Damyan Ivanov [Sun, 18 Apr 2021 09:41:28 +0000 (12:41 +0300)]
fix template editor layout

due to a glitch in the view chains on some devices the layout was
broken

noise: renaming of IDs

3 years agoconstant TAG
Damyan Ivanov [Thu, 15 Apr 2021 20:09:57 +0000 (20:09 +0000)]
constant TAG

3 years agodebug--
Damyan Ivanov [Thu, 15 Apr 2021 20:09:34 +0000 (20:09 +0000)]
debug--

3 years agoRoom-based profile management
Damyan Ivanov [Thu, 15 Apr 2021 20:07:38 +0000 (20:07 +0000)]
Room-based profile management

MobileLedgerProfile is gone, Room spreads gradually

3 years agoequality check for Profile
Damyan Ivanov [Thu, 15 Apr 2021 18:47:33 +0000 (18:47 +0000)]
equality check for Profile

3 years agoRoom-based profile wipe
Damyan Ivanov [Thu, 15 Apr 2021 18:46:05 +0000 (18:46 +0000)]
Room-based profile wipe

used only in debug builds as before

3 years agodummy migration method
Damyan Ivanov [Thu, 15 Apr 2021 18:39:34 +0000 (18:39 +0000)]
dummy migration method

it appeared useful at a point, but later the fix was another

still, it may be handy in the future

3 years agoDefault template name given at save time
Damyan Ivanov [Thu, 15 Apr 2021 05:59:03 +0000 (05:59 +0000)]
Default template name given at save time

gets in the way when put in the details

3 years agoasynchronous profile initialisation
Damyan Ivanov [Sun, 11 Apr 2021 20:44:52 +0000 (20:44 +0000)]
asynchronous profile initialisation

the problem here was that the startup profile is read from the DB,
synchronously, and all DB operations need to happen via Room off the
main thread

since at activity startup only the theme is needed, that, and the startup
profile ID can be stored in the android preferences. actual loading of
profile and further data can be done after the theme is setup, in the
background, via Room

3 years agomore Room adoption - accounts@100%, some profiles/transactions
Damyan Ivanov [Sat, 10 Apr 2021 09:35:15 +0000 (12:35 +0300)]
more Room adoption - accounts@100%, some profiles/transactions

3 years agoimplement incremental changes in account list adapter
Damyan Ivanov [Sun, 4 Apr 2021 15:16:50 +0000 (18:16 +0300)]
implement incremental changes in account list adapter

avoids unnecessary viewHolder replacement

expansion/collapse are much nicer now

3 years agoadopt Room for displaying account lists
Damyan Ivanov [Sun, 4 Apr 2021 09:27:21 +0000 (12:27 +0300)]
adopt Room for displaying account lists

3 years agogeneration is long
Damyan Ivanov [Sun, 4 Apr 2021 09:22:42 +0000 (12:22 +0300)]
generation is long

3 years agoaccount_id → accountId
Damyan Ivanov [Sun, 4 Apr 2021 09:21:51 +0000 (12:21 +0300)]
account_id → accountId

3 years agospecialized sub-classes of AccountListItem
Damyan Ivanov [Fri, 26 Mar 2021 17:19:28 +0000 (19:19 +0200)]
specialized sub-classes of AccountListItem

3 years agodebug--
Damyan Ivanov [Fri, 26 Mar 2021 16:54:29 +0000 (18:54 +0200)]
debug--

3 years agofix SQL when cleaning obsolete transaction/accounts
Damyan Ivanov [Fri, 26 Mar 2021 16:54:20 +0000 (18:54 +0200)]
fix SQL when cleaning obsolete transaction/accounts

3 years agominor optimization in getting next generation
Damyan Ivanov [Fri, 26 Mar 2021 16:53:58 +0000 (18:53 +0200)]
minor optimization in getting next generation

3 years agofix SQL when filtering transaction list by account name
Damyan Ivanov [Thu, 25 Mar 2021 21:38:54 +0000 (23:38 +0200)]
fix SQL when filtering transaction list by account name

3 years agofix transaction account storage SQL
Damyan Ivanov [Thu, 25 Mar 2021 21:34:56 +0000 (23:34 +0200)]
fix transaction account storage SQL

3 years agowhitespace
Damyan Ivanov [Thu, 25 Mar 2021 21:34:42 +0000 (23:34 +0200)]
whitespace

3 years agofix db migration to surrogate IDs (final step)
Damyan Ivanov [Thu, 25 Mar 2021 21:34:31 +0000 (23:34 +0200)]
fix db migration to surrogate IDs (final step)

the cleanest approach is to create all new tables, move the data, and
then drop/rename them, followed by index creation

fixes a problem with transaction_accounts being empty because the
profiles table was dropped

requires foreign_keys pragma (set outside transaction control) so that
the declare foreign keys to the new tables get renamed with the tables

3 years agomore fall-outs after transition to surrogate IDs
Damyan Ivanov [Wed, 24 Mar 2021 18:53:05 +0000 (20:53 +0200)]
more fall-outs after transition to surrogate IDs

3 years agofix migration of transaction_accounts (attempt #N)
Damyan Ivanov [Mon, 22 Mar 2021 05:54:11 +0000 (07:54 +0200)]
fix migration of transaction_accounts (attempt #N)

3 years agoanother step towards surrogate ID db objects
Damyan Ivanov [Mon, 22 Mar 2021 05:41:42 +0000 (07:41 +0200)]
another step towards surrogate ID db objects

profile → profile_id in more places
transactions.id is globally unique; ledger-supplied ID
(profile-specific) is in transactions.ledger_id

3 years agoanother step towards surrogate ID db objects
Damyan Ivanov [Sun, 21 Mar 2021 20:20:31 +0000 (22:20 +0200)]
another step towards surrogate ID db objects

rename profile's uuid column to catch (and remove) all its usages
use default theme id for the initial theme id

3 years agomigrate to surrogate IDs for all database objects
Damyan Ivanov [Thu, 18 Mar 2021 17:09:34 +0000 (19:09 +0200)]
migrate to surrogate IDs for all database objects

along with foreign keys etc

3 years agodrop unused create_db.sql
Damyan Ivanov [Thu, 11 Mar 2021 16:55:27 +0000 (18:55 +0200)]
drop unused create_db.sql

3 years agoreplace custom autocompletion adapter hooking with specialised adapters
Damyan Ivanov [Thu, 11 Mar 2021 15:01:09 +0000 (17:01 +0200)]
replace custom autocompletion adapter hooking with specialised adapters

... which use Room

3 years agoprepare release of v0.17.1 (39) v0.17.1
Damyan Ivanov [Wed, 24 Mar 2021 19:43:10 +0000 (19:43 +0000)]
prepare release of v0.17.1 (39)

3 years agofix db migration from v0.16.0 (profile data)
Damyan Ivanov [Wed, 24 Mar 2021 19:09:20 +0000 (21:09 +0200)]
fix db migration from v0.16.0 (profile data)

3 years agoupdate features in full description v0.17.0
Damyan Ivanov [Thu, 11 Mar 2021 11:27:17 +0000 (11:27 +0000)]
update features in full description

3 years agoprepare v0.17.0 (38) for release
Damyan Ivanov [Thu, 11 Mar 2021 08:47:33 +0000 (08:47 +0000)]
prepare v0.17.0 (38) for release

3 years agominimize flicker when applying templated transaction too
Damyan Ivanov [Thu, 11 Mar 2021 07:48:43 +0000 (07:48 +0000)]
minimize flicker when applying templated transaction too

3 years agosmooth items replacement when old transaction is loaded and upon reset
Damyan Ivanov [Thu, 11 Mar 2021 06:52:11 +0000 (08:52 +0200)]
smooth items replacement when old transaction is loaded and upon reset

3 years agomake transaction header row always have Id of 0
Damyan Ivanov [Thu, 11 Mar 2021 06:23:45 +0000 (08:23 +0200)]
make transaction header row always have Id of 0

there's onle one header, and having a stable Id avoids visual flicker
when the list is updated

3 years agofix flicker introduced with unique item Id
Damyan Ivanov [Tue, 9 Mar 2021 20:18:56 +0000 (22:18 +0200)]
fix flicker introduced with unique item Id

when items get unique id every time, resetting the model causes new
IDs to be assigned, making the adapter consider old items gone and new
items added. this sounds OK, but the visual effect is that everything
disappears and then reappears, causing flicker.

3 years agosplit new transaction item holder in two
Damyan Ivanov [Tue, 9 Mar 2021 20:11:29 +0000 (22:11 +0200)]
split new transaction item holder in two

one for the header row, another for the account rows

3 years agoclean up unused resources
Damyan Ivanov [Mon, 8 Mar 2021 20:55:53 +0000 (22:55 +0200)]
clean up unused resources

3 years agoТранзакция → Движение навсякъде
Damyan Ivanov [Mon, 8 Mar 2021 20:37:35 +0000 (22:37 +0200)]
Транзакция → Движение навсякъде

3 years agotemplate details delete icon needs to be white
Damyan Ivanov [Mon, 8 Mar 2021 20:03:36 +0000 (22:03 +0200)]
template details delete icon needs to be white

it is shown in the action bar

3 years agominor optimization: avoid constructing empty string object
Damyan Ivanov [Sun, 7 Mar 2021 10:01:35 +0000 (12:01 +0200)]
minor optimization: avoid constructing empty string object

3 years agoreplace TextUtils.equals() usage with Misc.equalStrings()
Damyan Ivanov [Sun, 7 Mar 2021 10:00:45 +0000 (12:00 +0200)]
replace TextUtils.equals() usage with Misc.equalStrings()

equalStrings() considers null to be equal to the empty string

3 years agoimprovements in debug messages
Damyan Ivanov [Sun, 7 Mar 2021 09:43:46 +0000 (11:43 +0200)]
improvements in debug messages

3 years agonote focused item changed when item is moved
Damyan Ivanov [Sun, 7 Mar 2021 09:43:16 +0000 (11:43 +0200)]
note focused item changed when item is moved

3 years agoavoid dataSync when updating entered amount format on losing focus
Damyan Ivanov [Sun, 7 Mar 2021 09:42:50 +0000 (11:42 +0200)]
avoid dataSync when updating entered amount format on losing focus

no back-end data is changed, only the formatted text in the UI

3 years agoalways work with a clone of the live list when checking transaction
Damyan Ivanov [Sun, 7 Mar 2021 09:40:43 +0000 (11:40 +0200)]
always work with a clone of the live list when checking transaction

shortcuts bite back. the codes makes several lists with items from the
checked list and this may mess with the "get-copy-modify-set" actions
when some item in the working list needs to be changed

instead, make a clone (new list, cloned items; except if the input list
is not the live one, i.e. it is a working copy already) and freely
modify its items directly

if the "always clone" approach gets slow, this whole process may be
moved to a thread

also, note focus has moved when a item above the focused item is removed