Android App

Kasse

Kiosk- und Gäste-Verwaltung




Change Log Kasse

  • Version 4.5.2

  • version bump

  • fix: don't suffix label strings with a colon

  • fix: title of Guest Picker

  • introduced S class for better string matching
    added title for better picker matching

  • introduced S class for better string matching

  • fix: display products with deprecated order did not work anymore if not in edit mode

  • fix: stock display not consistent between basket and product table

  • fix possible crash during BonPrinter dispose

  • fix: make TestMasterActivity invisible

  • updated changelog

  • code format
    optimized imports

  • refactor: registerPreparePositionalProducts and restore adapter state in BasicTillFragment

  • improved debug output by adding unique IDs to some classes

  • multi selecting products-to-edit now possible again

  • fix: don't allow copying or duplicating a placeholder

  • fix: write "folder" or "placeholder" instead of always "product"

  • fix: use allAtLeastOne() instead of all()

  • changelog fix

  • Version 4.5.1

  • version bump

  • changelog updated

  • code indentation fix

  • fix for d6febd9c2255df5ea9e52bc18af8a18d3dbdb112

  • fix: delete/insert columns/rows may get interfered with preparePositionalProducts and cause layout errors

  • code simplified: added withoutPreparePositionalProducts()

  • added test for delete/insert columns/rows

  • fix: opening the same till twice will stop clearing the basket of already paid products

  • implemented FieldDifferences for cleaner code

  • additional fields like price and stock are now searchable

  • basket content is now searchable

  • no need for a MenuProvider in SelectShopFragment or SelectTillFragment

  • changelog fixed

  • fix: deploy script may not detect current app version correctly

  • print version form changelog as suggested target version in deploy script

  • better readable summarize output for deploy script

  • Version 4.5.0

  • version bump

  • updated changelog

  • code format

  • adapter() can print debug message if no fitting one is registered

  • openFolder() now brings the dialog to the front

  • fix testPrintingBonsAndMarkingDeleted

  • prefix debug-printed bons with "PRINT >>"

  • added postSafeOnDispatcher()
    fix: calls on Dispatchers.IO did not use safe()

  • fix: testInitialAppStart

  • fix: testEditOneProductAllFields

  • fix: wrong progress
    fix: setting expansion to null branch never executed

  • code cleanup

  • getLocalData() now always returns the same empty-UID instance
    copy() now creates a new object with a unique ID

  • adapters are now registered in the MasterFragment instead of the MasterMenuProvider

  • ColoredArrayAdapter is now a TableViewAdapter

  • TableViewAdapterExport is now a feature of TableViewAdapter

  • version bump java toolchain to 17

  • code cleanup

  • adaptions for new context menu handling

  • import cleanup & code format

  • LogTag is now static to reduce memory and object creation overhead
    LogTag no longer has a UID, prefix or suffix
    Progress and DataRow objects now have their own UID

  • gradle version bump

  • fix UIBasketTest if animations are enabled

  • fix temporary overwrite of LogLevel

  • fix testCompanionProductInBasket

  • fix testDeleteProduct

  • faster adding of lots of prices in PriceListPicker

  • fix: don't allow deleting placeholder

  • small fix for testDuplicateProducts

  • ignore PERMISSION_DENIED for UIBasketEditTest tests

  • fix: if switched from normal till to edit mode, leftover placeholders from old database format will not be deleted and new positions not written back

  • after deleting a till, go back to Welcome screen

  • fix: on deleting a till, do not try to delete placeholders from the database

  • call onShow of generator dialog now directly from onDismiss

  • fixed testDuplicateProducts

  • fix: UIBasketEditTest now has better drag&drop handling

  • added testingDragDropOpenFolder

  • fix: don't list placeholders as Product.folderContent

  • isInFolder now ignores products on the exactly same position (like just created duplicates)

  • nextFreePosition() now correctly detects if it shall return the next position inside or outside of a folder

  • nextFreePosition() now uses the ViewModels product list instead of the adapter

  • dependency version bumps

  • removed obsolete StatefulNavigator and fixed dependency for navigation-fragment-ktx < 2.6.0

  • fix: clicking same folder twice didn't open the folder the second time

  • better tooltip texts for till fragment product buttons

  • using connectArrayList() instead of manually adding items

  • fix: MAX_COLUMNS_PER_ROW was wrong

  • show minimize or close icon in folder dialog

  • limit max columns per row in till

  • limit max products in a folder

  • code and debug log cleanup

  • cleanup, debug log

  • added placeholder in folders

  • reduce folder height only in edit-mode to half screen size

  • fix: crash in edit-as-table mode as pagerAdapter is not initialized

  • fix: hovering over folders did not work correctly as events may get processed twice

  • added zPos to ensureOneProductOfType

  • replace callOnHovering and callOnPositionChange fields with onDraggingFrequency
    added event field

  • import cleanup

  • code simplified

  • comment updated

  • fix: moving an item into a folder sometimes chose the wrong target folder

  • fix: drop before/after a product in a folder did not correctly position the indicator if product's view was larger then the default 192 dp

  • better detection of opening and closing folders on hovering over a product

  • fix: going into edit mode directly will miss placeholders => call preparePositionalProducts also after first sync

  • simplified onDelete() captures to use the already existing data from KasseViewModel

  • safety measure to make sure we only delete an empty folder

  • reduce max height of folders so dragging out of them, is still possible

  • fix: don't show "enter name to create product" if no empty tile has been selected

  • added/improved debug log

  • preparePositionalProducts() will now be triggered without delay and will be (temporarily) disabled during acceptDrop()

  • logging improved

  • code simplified

  • renamed Invocable start/stop to enable/disable and added docu

  • code simplified

  • fix: content of table views may not get updated in some fragments

  • fix: folder may not be opened in some cases

  • fix: icon of folder not drawn in folder dialog

  • changed product_invisible to also show "click to open folder"

  • fix: closing a folder and quickly opening a new one disposes the wrong RecyclerView

  • fix: animation will continue on wrong DataRow after rebinding a view

  • added payloads to bindView()

  • speed: faster updating of EstatesFragment table content

  • speed: only use one reservations FirebaseResults

  • fix: avoid permanent update of columns in estate overview

  • removed "reorder products" as it is bugged anyway (converts folder to 0Γé¼ products)

  • fix: click detections on folder dialog title no longer needed

  • fix: don't dispose folder content too eraly during hide animation

  • wait for hiding of layout editor

  • now second click is needed to open a folder's content during edit mode

  • update to latest PopupDialog change

  • replaced debug log with warn log

  • don't update invalid positions in the database during normal basket mode

  • fix: last row of product list was not setup during preparePositionalProducts

  • code format and added debug log

  • code simplified

  • fix: filling Till list may have moved all products to the first column -- call to preparePositionalProducts() was too early, before layoutManager is being set

  • don't needlessly refresh product list and basket content

  • update for latest changes to table filter

  • fix: clicking again on a product to edit will not select the product-to-edit correctly

  • fix: already open folder size and title is not updated correctly during title edit

  • fix: folder content not showing anymore

  • PopupDialog now directly sets background and elevation
    added style PopupTitle

  • removed unused .gitignore

  • TableViewAdapter now supports multiple attached views
    TableViewAdapter now waits for restore() call before attaching to view from init() call

  • connect() now automatically sets the pager's adapter

  • renamed LiveStats

  • fix: wrong tag name for BasketProductsTableViewAdapter

  • moved WelcomeFragment to CommonLib

  • added addMultiple() and removeMultiple()

  • expandHolder() now does the initialization of the sub adapter
    and makes sure the sub adapter has a suitable outer view assigned

  • simpler waitForTill()

  • fix: allow trigger() on result of all observe() and observeDelayed() overloads

  • Revert "no longer need to clear before setting new queries"

    This reverts commit 8925a8894186c9532abf00a6d5650e31a1d904f0.

  • fix: leftover debug code

  • code format

  • make sure we don't call preparePositionalProducts() too often

  • no longer need to clear before setting new queries

  • code cleanup

  • gradle version bump

  • Version 4.4.1

  • version bump

  • updated changelog

  • fix: In edit product as table mode, all products will be layed out in a single column

  • code format: introduced TVRow as main class of all data rows

  • Version 4.4.0

  • version bump

  • updated changelog

  • disable selection in SelectTillFragment

  • now using G1GC

  • fix: update product after multiple prices added to price list

  • code format

  • now automatically disposing PopupDialog and Picker on dismiss/hide

  • now avoiding App.activity for dspRegister

  • now avoiding App.activity for dspRegister

  • now avoiding App.activity for Progress.Active

  • sync() and add() now longer need a LifecycleOwner
    now trying to avoid App.activity as LifecycleOwner for sync/whenSynced/setQuery

  • all Observers are no longer attached to the Activity

  • AlwaysRunningLifecycleOwner is now a singleton as alwaysRunning property
    StatefulLifecycleObserverList.observe() and QueueingInvocable now use alwaysRunning as default

  • fix: place products that are out of bounds at the end of the valid products

  • code format

  • introduced onActivity call with result

  • typo fixed

  • code quality

  • fix: estates title fragment had no title and wrong fields for date/time picker

  • fix: transactions title fragment had no title for date/time picker

  • make sure title fragment stays right aligned of title text

  • code format: made all calls to registerGUIElement() cleaner

  • code cleanup

  • code cleanup

  • print refID as cell value on missing objects

  • moved preparePositionalProducts to BasicTillFragment
    added check for invalid Positions / deprecated product orders

  • test adaptions for recent IVV.invoke() and observe() changes

  • code cleanup: introduced TitleButtonMapper

  • print receipt parameter context in debug mode

  • removed delayed()
    only using one postSafe() now that directly runs on the main/UI thrwad via a Handler
    fix: postSafe() may cause endless repetitions of the executed block
    renamed postSafe() that uses repeatOnLifecycle to postSafeOnJob()

  • fix: endless recursion possible as toString() may refer to position again

  • added source to Observer to provide better debugging

  • code format

  • code format

  • fix missing " different" suffix to hints

  • show better stock details text if not all values are the same on multiple selected products

  • don't show boundary errors if not all values are the same on multiple selected products

  • fix: picker title was missing after content based update

  • fix: picker title was missing after content based update

  • fixed tests for newly added/modified layout IDs

  • can now use invoke also on null IVV's

  • added style for ScrollView to have a uniform layout
    added IDs to all fragment roots

  • removed unused files

  • added property title to Picker

  • reopen folder on click of folder even if the folder is already the product-to-edit

  • Update Gradle to 8.5.2

  • the table-edit view does not support folders yet, so the `openFolder` method is not used
    and can be removed.

  • fix: general error if no printers are available

  • don't allow empty select of product-to-edit
    fix: selecting a folder does not directly set the folder as product-to-edit

  • fix: endless progress on error during receipt generation

  • added applyButton()
    PopupDialog now respects manually set buttons in show() / updateSize() calls

  • added autoResizing property which defaults to false

  • code format

  • distinguish Modified now between ModifiedData, ModifiedExists and ModifiedSynced

  • fix: updating companion property to links property didn't work anymore - now also simplified

  • using own ChangeType class now

  • fix: wrong progress

  • code cleanup

  • added Invoker class
    invoke() calls are now operator

  • optimized imports

  • fix: less noise in debug log during global layout changes

  • fix: make sure we never show products from another till until new ones have been synced

  • using new drag&drop column and row changing support

  • disabled unsafe gradle configuration
    using dedicated gradle daemon

  • log typo fixed

  • don't export additional fields in Product if they are zero

  • further simplified code in acceptDrop()

  • duplicate/copy/paste now working again

  • don't list folders if they happen to be part of a folder-content (should never happen anyway)

  • ignore placeholder when checking for isInFolder

  • update open folder dialog on name/icon changes

  • code cleanup: simplified preparePositionalProducts(), now fewer calls to function needed

  • code cleanup: moved moveProductsInFolder() to Product class, simplified acceptDrop()

  • fix: don't mark existing entries without a name as placeholder / temp folder

  • using new nextFreePosition()

  • compile fix

  • dispose dynamic list when closing folder dialog

  • cached positionObject

  • adapted display of position in table edit mode

  • managing of temporary objects is now done completely in allProducts.onChange

  • introduced folderProduct variable to simplify code

  • added ProductType enum and isRegular properties

  • removed unused positionObjectInFolder

  • code simplified: using direct observe() and observeDelayed() calls whenever possible

  • using new positional layouts
    adaptions for ListIndex, MatchingIndex and ViewIndex

  • VarColumnGridLayoutManager now determines cell width based on adapters outerWidth

  • display special empty text if a folder is empty

  • adapter is now an IV
    can now set adapter even after dialog has already been shown

  • renamed itemWithID to itemWithUID

  • allow multiple rows in bindView() for data rows

  • typo fixed

  • in till edit replace the fragment title with the product-under-edit

  • simplified title setting

  • do reorderAllProducts modifications in one batch

  • fix: using wrong Progress instances for logging in some places

  • support translated versions of Progress title, and safe(), getClassName(), toNiceString(), toShortString() calls

  • code cleanup

  • added generic type of TableViewAdapter to BasicTillFragment

  • added options to insert and remove rows

  • fix deprecation warnings

  • changed order of parameters: always first LogTag, then Progress, then LifecycleOwner
    removed progress from attachedLifecycleOwner
    removed progress from StoredQuery
    progress continues for Firebase data change events triggered by a FirebaseDataBatch
    progress continues for ViewHolder Bind triggered by a delayedNotify

  • changed order of parameters: always first LogTag, then Progress, then LifecycleOwner

  • gradle version bump and removed kapt as it fails to compile

  • fix: don't go into edit mode directly after start

  • removed owner and progress from observe()
    added progress to remove() and trigger()
    made Lifecycle entry points safe

  • moved log functions from MyLog to LogLevel
    renamed logTag into lt
    reorganized imports

  • moved listener functions to Listener and using combined signatures

  • fixes for moval of DateAndTime functions

  • fixes for removal of ImmutableList

  • extracted all DateAndTime relevant functions from Utility

  • fix UIBasketEditTest missed ShopCounter

  • added testLogInExistingUser

  • fix testPuttingProductInBasket

  • extracted IV to separate file

  • fix: disable menu entries if no edit access rights

  • moved FragmentStateAdapterWithIcon to CommonLib
    FragmentStateAdapterWithIcon now supports fixed list of fragments and forwarding of back presses

  • restart App after user left the current shop

  • fix: auto navigate to previous till from WelcomeFragment was broken

  • force CallSuper on onInit() from TableViewAdapterFirebase

  • added kapt for dataBinding

  • dependencies version bump

  • small fix for Menu entries in WelcomeFragment

  • WelcomeFragment now uses a ViewPager2 instead of embedded fragments

  • update for latest changes to embedded fragments

  • removed obsolete testDisableStateSwitch

  • Added account deletion steps to website

  • Version 4.3.0

  • version bump

  • updated changelog

  • display a footer on the Recent Booking dialog

  • fix: don't try to save auto product ordering if user has no edit rights on a till

  • fix testCreatingOneEstateMultipleRooms

  • fix testBasketWithMultipleTills

  • fix running multiple tests in sequence that print bons

  • fix testPrintingBonsAndMarkingDeleted

  • using findExistingData() to reconstruct based on parceled refID

  • fix: removed some pause()

  • fix: need ShopCounter for some tests

  • fix: testCompanionProductInBasket wrong assumption in circular link results

  • added testDeleteTill()

  • more debug log

  • small compile fix

  • fix testInitialAppStart: getting shopID didn't work anymore 'Create a new shop' click may not have been recognized

  • update tests for latest changes to Tax selection

  • fix testLoginExistingUserAndJoinShop for latest modifications of TestingDatabaseSetup

  • fix: don't rely on database update message to show up

  • code simplified

  • fix: LinkedProducts DatabaseSetupParams cannot be created as default constructor is missing

  • removed unused gitlab file

  • fix: needs entry in AndroidManifest.xml to start TestMasterActivity

  • DatabaseSetup no longer needs fixed user IDs and commits database one collection at a time

  • moved RedirectUriReceiverActivity activity declaration to CommonLib

  • moved some dimens to CommonLib

  • split Test Utility file into several files and moved them to CommonLib embedded folder
    moved CommonLib specific tests to CommonLib embedded folder

  • no need for manual .CREATOR calls anymore

  • calling all CREATOR for getCollectionPath() now during App.onCreate

  • added misc/ files

  • cleaned up imports

  • Instant.formatString now uses DTFields instead of subParts and supports locales

  • code quality: using IV when possible
    avoiding var in data class
    IV now has isDefault property

  • fix: also allow editing of products in folders

  • fix: may get ConcurrentModificationException

  • code cleanup

  • fix: missed object names in Recent Booking dialog

  • fix: allow paste new only if exactly one selected

  • support edit context menu

  • fix: tax could not be edited

  • contextMenuID is now IV

  • changed signature of onEditInputPopup()

  • remove no longer needed code

  • don't export Booking and BookingSumup classes anymore

  • improved Backup dialog's text

  • renamed select to selectUID to avoid name clashes

  • fix: always use Array types now in Bundles

  • support enabled state change in testDateTimePickerInteractive()

  • gradle and library version bump

  • updated tests for seconds support

  • adaptions for latest Adapter changes

  • added tests for Bundle.saveToSharedPreferences
    added tests for Bundle.loadFromSharedPreferences

  • avoid name clashes with compareValues() from library

  • updated imports

  • adaptions for latest AbstractListPicker changes

  • TillRecentBookings is now an AbstractListEditor

  • updates for more logging

  • compile fix

  • added toString() implementations for all classes using logTag

  • fix: EditTillPagerAdapter returns same Fragment instances again after activity restart

  • TableViewAdapterFirebase now supports linking to DataEditFragment

  • TableViewAdapterFirebase now supports linking to DataEditFragment

  • gradle version bump

  • using reopenable sub context menu items

  • removed redundant context menu now that multi-selection editing is possible

  • adaptions for latest PopupDialog changes

  • sub popups of ReportGenerator are now restorable

  • stock and sumup warnings are now restorable

  • code simplified

  • bind whenSynced calls to the adapter's life-cycle

  • support reopening of dialogs for all table context menus now

  • code cleanup

  • Actions in TransactionsTableViewAdapter can now be reopened (print receipt, delete)

  • Delete cart information can now be be reopened (and title fixed)

  • also support dialog recreation for MasterMenuProvider's onMenuItemSelected

  • adaptions for latest changes to TableViewAdapterMenus

  • support reopening of EditCommentDialog

  • menuProvider variable is now IV

  • fix: context menu for Transactions fragment did not show up

  • code cleanup

  • ReceiptGenerator can now be reopened

  • introduced special setter for canBeReopenedFrom

  • support restore for CreateReservationFragment's date picker dialog

  • code simplified

  • updated MultiAddDialog to be a subclass of Picker and to support more configuration and save/restore

  • moved MultiAddDialog to CommonLib

  • date picker in Estates title can now be restored

  • layout save dialog can now be restored

  • code format

  • adaptions for restorable AbstractListPicker

  • adaptions for new IconSelect

  • Printer Queue from Printer Setup can now be restored

  • open product price selection dialogs are now restored

  • Guest till and Taxes edit are now restored

  • Export dialog is now restored

  • opened folders in edit mode are restored

  • HorizontalTilesDialog supports recreation

  • ReportGenerator now uses Picker and supports restoration

  • updated description for slider

  • updated style for DefSlider

  • using addOnChangeListenerSafe for RangeSlider

  • combined code for EditCommentDialog and now using a simple StringPicker internally

  • fix: general error after changing start month for estate overview

  • fix: setup() call did not have a valid till object

  • print an error if a till no longer exists

  • fix: after creating a new till and then going back from till's product edit mode, the expected till shall be the next fragment

  • removed no useless warning for only placeholders

  • fix: placeholder warning only on empty name (idependent of price)

  • always show option in nav bar to create new till if user is admin

  • fix: tests now also work if bontext got wrapped

  • fix: sent column was too small

  • fix: name column was too small

  • updated PrintDocumentGeneratorTest

  • added UIExportTest

  • special assertTrue for strings and added assertContains

  • added readFromClipboard()

  • support KasseActivityLauncher without database

  • support new Exporter in ReportGenerator

  • gradle version bump

  • added String.writeToClipboard and String.writeToTestStorage

  • updated testDocumentParser to reflect latest changes (no implicitly created Column tokens anymore)

  • updated testLoginExistingUserAndJoinShop to reflect latest changes

  • fix: may not set default layout if selected products had different layouts

  • combined strings with different access types for tills

  • can now export ProductsTableViewAdapter

  • better type specifications for AdditionalExport and default implementation for export()

  • call pay() now immediately before checking success (or timeout) from server to improve handling of payments on slow connections

  • fix: loading / storing layouts did not work correctly

  • typo fixed
    code simplified

  • using shorter string representations in some situations

  • fix: showing "No products" while still loading till

  • assertApplyCreateButton() now uses tryRepeat

  • fix navigateTo() with active animations

  • test fix: click whole view for products to avoid accidentally clicking the delete button

  • improved content description of products in tills

  • improved some debug logs

  • using IV and IVV on more possibilities
    providing logTag and valName to IV and IVV

  • fixed placeholder warning text

  • code cleanup

  • cleaned up xml file

  • added new testPrintingBonsAndMarkingDeleted

  • added new testTableViewAdapterToggleDeleted

  • clickInOptionsMenu() now supports subMenuTitle

  • updated imports

  • fix testTableViewAdapterFilterAndSelectDynamic for new sum display in footer

  • added new test testAdvancedBookingForMultipleGuests

  • GuestPicker now supports auto popup on search hit and creating new guests

  • no need for isVisible when checking table footer sum value

  • accept timeout parameter for several functions now

  • for match() with isDisplaying accept views that are only 1% visible

  • better error output for match() with index

  • fix: match() with index did not work if used multiple times

  • additional file for gradle latest version bump

  • use matchingSelected from the adapter instead of the selections feature

  • don't attach tillsAdapter until it is really needed

  • added footerMustBeDisplaying to checkNumberItemsInTable()

  • gradle and library version bump

  • code cleanup

  • using new summarizeRanged()

  • renamed setAdapter to internalSetAdapter

  • DataRow now has a link to the adapter it is being used in
    isDeleted and isSelectable are now IVV

  • update: now only summarize rows that have not been marked deleted

  • code cleanup

  • more stable footer check in checkNumberItemsInTable()

  • added parentIDs and isDisplaying and allowing siblingID without siblingText for match()

  • TillTitleFragment shows guest picker whenever a global search matches

  • only rebuild TillTitleFragment if needed

  • fix: keep bonCounter and till booking counter even if transaction cannot be stored in the database -- solves duplicate bon numbers

  • fix tests for database assertion errors because products have been reordered as they don't fit the current layout

  • can now update guest and reservation properties in the model without the need to reopen the Till fragment

  • CountingBoard now uses Picker class

  • onOK is now optional for show()

  • added support for recent search history

  • fix: need update of basket entries when stock values may have changed

  • fix for testTableViewAdapterWithoutFeatureMenus - handled wrong Exception in assertion

  • added more tests like testLinkedProducts, testStocks and testAdvanceBooking

  • assertChildText() now compares full text
    added assertChildTextContains()
    more flexible comparison in assertChildText()

  • added support for advanced booking

  • always show stock in basket and product list, if one is defined

  • code simplified

  • support directly setting Enum in setupDatabase()

  • added long option for clickProductChild()

  • simplified tests

  • reduceCountOfProduct() returns number of reduced products
    fix: reduceCountOfProduct() calls triggerLinks() only with number of really removed products

  • code variable renamed

  • version bump

  • changelog updated

  • fix for AtLeast and AtMost

  • added UIEstatesTest

  • missed an import

  • added more flexible comparison objects like AtLeast, AtMost, WithSize

  • can now compare objects with different fields based on their relative equality

  • added selectInMultiAddPicker()

  • testEditMultipleProducts now also tests editing a price of the price list

  • fixed small error in setup of testLoginExistingUserAndJoinShop

  • removed obsolete RememberNow

  • added selectInStringPicker()

  • removed pickIcon() in favor of selectInIconPicker()

  • renamed FQ to query
    added whereInShop()

  • using getValueIfSynced now only when really needed as object may be outside of the shop

  • fixed issues with rooms list updates in embedded editor

  • code simplified

  • fix: onCreateData() always tried to created nested rooms, even if no "Create" or "Apply" has been clicked

  • using deleteNestedFields() now

  • RegisteredGUIElement() for PopupListPickerFixBinding now takes care of embedding the view into the editor

  • update() now updates locally only if an object does not yet exist in the database
    added updateAndCreate()

  • MultiAddDialog now uses base values from NumberPricePicker
    fix: rounding errors possible in MultiAddDialog

  • typo fixed -- only mention name, not price for invisible placeholder

  • some compiler warnings fixed

  • libraries version bump

  • typo fixed

  • version bump

  • updated changelog

  • database comparison speed improved

  • fix: crash possible during test case execution

  • more tests adapted to new assertDatabase()

  • improved comparison output further

  • fix: matching did not work if multiple matches were with same number of minEqual

  • now showing a comparison of expected and actual directly on output of database content

  • directly working on dsList now
    renamed dsem to em

  • moved assertDatabase() now completed inside DatabaseSetup

  • updates tests for new assertDatabase()

  • fix: taking over an existing guest did not directly store the results and update the GUI

  • gradle version bump

  • fix: don't ask for overwrite confirmation when pasting a product in an empty tile

  • fix: may have lost updates of dataGuest before first assigning of an existing guest object

  • more debug output

  • fix: don't suggest assigning current guest to itself

  • fix UIDateTimePickerTests for time shifting problems

  • fix UIBasketEditTests for new delete confirmation dialog title

  • fix testTableViewAdapterColumnWidthTest for smaller screens

  • fix testTableViewAdapterWithoutFeatureMenus for new back-press behaviour

  • added own assert...() functions that can generate screenshots

  • added a tryRepeat to assertChildText()

  • added an additional click attempt to typeText()

  • don't output lists of TEMP_IDs for WhereEqualToOrWithID

  • better output of not matching timestamps

  • fix: may match one database result to multiple expected results in some cases

  • fix testTableViewAdapterSelectDynamic

  • fix tests: use pressBack() if failed to click a menu item

  • fix tests: need to scroll to the beginning otherwise clickItem won't work

  • added long click possibility

  • added UIDialogTest

  • fix for popup titles getting too huge
    removed showWithPreferredSize and instead added adapter property

  • removed unused resource files

  • adaptions for addOnGlobalLayoutListenerSafe

  • small fix for testInitialAppStart()

  • updated testDeleteUserInShop()
    added testDeleteAdminUser()
    added testDeleteShop()
    added testDeleteShopAndCreateNew()

  • try to match per refID first

  • fix: clickInOptionsMenu() now only tries to click on buttons that are enabled

  • close navigation bar again after assertUserLoggedIn()

  • put some test Logs to "e" and updated some "d" logs

  • gradle version bump

  • fix: dispose synced results that arenot needed any longer

  • now correctly customized deleteShop and deleteUser

  • added deleteShopWarning

  • debug output optimized

  • fix: also match Shop and ShopCounter by other fields than "shop"
    code optimized

  • now match the best-matching first, then go step-by-step down to the worst-matching
    don't list non-existing documents

  • better comparison output

  • added WhereShopIsOrWithID
    fix: also look for objects with expected IDs that are not part of the current shop

  • fix: log output line breaks

  • code cleanup: don't use var in a data class param

  • code fix

  • code cleanup

  • allow tClass for all exp...() functions

  • content parameter will now only be evaluated once userID is known

  • updated UIInitialLoginTest

  • added new user tests

  • need new ID for test user

  • code cleanup

  • added refClass parameter

  • added more parameters to DatabaseSetupParams: can now disable shop or icon creation
    can now set another user ID as part of shop or as admin
    fix: now makes sure the correct userID for newly created users is used in the database by first creating the user before committing objects
    made all setup steps sequential

  • added assertUserLoggedIn()

  • can now customize user mail and password via DatabaseSetupParams

  • added logoutUser()

  • better logging

  • changed TEST_USER_ID as old one has been deleted

  • renamed function

  • Actual and expected database content now printed a bit better

  • now creating and asserting database with a secondaryApp to not interfere with currently logged in user

  • no longer needed

  • using new prompt()

  • moved ic_admin to CommonLib

  • only try to click clickable buttons in clickInOptionsMenu()

  • added debug log

  • added clickNext()

  • fix: could not process RememberedValue inside a List

  • code cleanup

  • use mail as identifier if ID is unknown for a User object

  • better readable RememberedValue output
    better output of actual and expected database

  • updated tests for new assertDatabase()

  • fix: subject not changeable when subjectsToPayload is being used

  • typo fix in stock out error hint

  • fix: show placeholder warning if all selected are placeholder (normally only once can be selected anyway)

  • default for icon picker is now the current name text field content

  • better readable nice-string for Product

  • fix: error hint for stock-out edit field

  • renamed updateDataAndLayout to setDataFromLayout

  • code cleanup

  • added new testDeleteProduct, testMove...

  • added new assertDatabase() that compares whole database with expectation

  • added long click option to clickOn() and clickProduct()

  • added dragAndDrop support to RecyclerViewActions for test cases

  • fix: only continue creating/deleting sub elements if the main element update succeeded
    fix: also remove folder content if a folder is deleted
    fix: also remove temporary folder if only one product would be left inside
    fix: handling of placeholder during creation/duplication

  • fix: could not store description of prices as priceListCombined() didn't distinguish between same price with different description fields

  • setting new priceType also in table-edit-mode

  • fix: return a FOLDER type Position if looking for the next free FOLDER type Position

  • priceType is now stored in database so old content of price list and price range is not deleted after switching the priceType or selecting multiple products at once

  • renamed id price to price_fix and using a ScrollView

  • added registerGUIElement() for AbstractListEditor
    using new onClicked()

  • added allSame to updateGUIState parameter
    added valueSane parameter

  • set stockRefill always to current date when setStock() is called

  • added stock page tests to testEditOneProductAllFields() and testEditMultipleProducts()

  • added getProductField()
    testProductField() now is type-safe

  • typo fixed

  • fix: testEditMultipleProducts

  • fix: matchRecycler() shall only match visible recyclers

  • added more UIBasketEdit tests

  • TaxSelect now replaced by registerGUIElement() call

  • fix: pickIcon() sometimes could not click on matcher

  • code format

  • code renamed

  • priceTypesAdapter now also handled by registerGUIElement()

  • fix: clicking a single product in multi-select mode will now only select this one
    fix: changing the list of selected products will now also be reflected correctly in multi-select mode table

  • allow pickIcon with the predefined search text

  • fix: config warning in kts script (debuggable and profileable)

  • deploy lib before app in deploy script

  • libraries version bump

  • gradle version bump

  • typo fixed

  • fix: invalid price range error was not correctly applied

  • using new registerGUIElement() helper methods

  • adaptions for modified DataEditFragment
    allowing multiple products to be edited at once
    added positionObject to Product
    added canBeSame argument to Position.nextFree()

  • folderContent is now a dynamically created list

  • added isRegularProduct
    fix: some checks against isPlaceholder did not consider unnamed folders correctly

  • added DynamicListFB

  • using sequence now instead of iterator() to loop over JSONArray

  • fix: deposit return link should not be clickable if no product selected

  • use setAll with varargs

  • combined getIcon, getDrawableSize and getDrawable

  • fixed tests -- mainly testManualAddRemove()

  • fixed tests for latest changes
    made FirebaseDataTest tests more stable

  • added DynamicList as replacement for ArrayList in FirebaseData/FirebaseStruct
    removed direct FirebaseData val support

  • added "Reorder all products"

  • removed "Edit title" button, still available via main menu

  • no need for exact width

  • better readable position values, and added summarize method for positions

  • fix: general errors during formatting of detailed stock text

  • fix: reordering products from legacy to new format while going into till-edit mode directly without normal basket mode before, inserted a whole empty page before the actual products

  • fix: wrong icon for guest selection

  • fix: "only placeholders" may have been displayed in case the first element was a placeholder, but there were products beyond

  • fix: icons were missing in till and shop selection tables

  • fix: clicking on "shop does not yet have tills" only an error message occurred

  • fix: after coming back to Welcome screen, embedded login fragment may be missing

  • fix: content of till and shop selection not correctly displayed

  • fix: Welcome fragment again selected prev till even if just come back from it

  • version bump

  • shorter output of suppressed errors in tryBlock()

  • integrated time selection into arrival departure date picker

  • updated changelog

  • fix: Show Recent Bookings did no longer work

  • no longer using Calendar -- fixes timezone problems during testing

  • removed all remaining uses of Calendar class
    and cleaned imports

  • fix for typeText: should no longer freeze after typing text

  • fix for testSimpleReservationGuestTakeover

  • removed no longer needed code

  • using Instant only now for internal date/time and LocalDateTime only for user specific date/time

  • fix: Reservation shall initially refer to current day

  • using Long type for TimePickerSpinner

  • added new testLoginExistingUserAndJoinShop

  • added startGlobalSearch() and closeGlobalSearch() for tests

  • fix: adapters in WelcomeFragment were not registered for global searches

  • fix: use error_permission_denied_for_till also in cases we have placeholders (but still no access)

  • fix: empty tills may get an unnecessary placeholder

  • fixes for when a shop has just been created: got silent Access denied exceptions

  • fix testTableViewAdapterSearch: we now have one additional column

  • fix testTableViewAdapterSelect: all-selected button no longer enables itself

  • fix tests: prepareAdapter() shall save table changes

  • checkNumberItemsInTable() accepts invisible table in case expected count is 0

  • close keyboard after replaceEditText()

  • code cleanup

  • updates to pickIcon() and always using simulated search results now

  • no need to set width manually anymore

  • fix: general error possible if pause() gets called twice, or before resume() has finished

  • code simplified and comparing against outerWidth

  • code simplified

  • updates to bindView() and bindExpansion() calls

  • added strings error and warning to CommonLib

  • better log for clickInMenu()

  • using new auto format for nice string

  • fix: do not provide a new Progress for OK or Dismiss clicks in dialogs but instead continue the current one

  • clean up imports

  • using @Format... annotations now also for printing short and nice strings

  • code cleanup

  • missed a title in day picker

  • hide time in ReportGenerator if not for current day

  • fix: ReportGenerator did not take over newly selected date

  • code cleanup
    more debug log

  • added tests for ReportGenerator

  • fix for testBasketWithRandomProducts: missed expectedErrors

  • adaptions for changes in AbstractEditor

  • added selectInDateTimePicker()

  • adaptions for new FirebaseStruct

  • using Calendar quick fields from Utility whenever possible

  • using new toDetailedString() for all date/time types

  • adaptions for applyTextStyle changes

  • fix: contentDescription may get null and causes crashes

  • introduced general FragmentScrollingTableViewBinding

  • added testPrintingBonsCard

  • code simplified

  • fix: processPaymentResult has never been called, so printing bons and finishing card payment did not work

  • fix: testCompanionProductInBasket shall accept link errors

  • code simplified

  • added validInputMinCount and validInputMaxCount

  • removed unused data() and dataUID() from AbstractListEditor

  • moved all basket manipulating functions into the companion object

  • tests support subParts and ColumnHeaderFirebaseDataCollection
    adaptions for some tests to recent changes in picker

  • added FormatReason to formatValue() and parseValue()

  • fix: typeText() sometimes not working

  • removed duplicate log

  • can now display only subParts of a Date/Time format string

  • using tooltipText now parallel to contentDescription

  • code format

  • test adaptions to latest DateTimePicker changes

  • test adaptions to latest UITableViewAdapter changes

  • code format and quality

  • replaced all direct FirebaseData fields of any FirebaseData child with FirebaseReference fields

  • comment cleanup

  • reorganized imports

  • fix: editing cells of a Room didn't yet work

  • now longer passing Fragment around for Adapter, Picker, Editor, PaddedArrayAdapter instances
    showPopupMenu() now longer needs a context

  • using AbstractListEditor now for price editing

  • using AbstractListEditor now for room editing

  • fix: estates without any rooms (while they shouldn't exist in the first place) are not shown at all in the estates overview table

  • fix: typo for DateTimePicker title in print()

  • adaptions for BindReason in bindView()

  • using new general_error_.. strings

  • added TVBinding to generalize init()

  • bindView() now takes over width from VarColumnGridLayoutManager

  • using PriceListPicker now for displayPriceListSelection()

  • fix: endless recursion in onPrepareMenu() for EditTillTableMenuProvider

  • all observer data class now only have a disallow() instead of an allow var

  • now using a normal NumberPricePicker dialog

  • fix: embedded keyboard has not been initialized

  • better title for MultiAddDialog

  • fix: access denied errors if user is not in a shop yet

  • code cleanup

  • fix: entering a price selection value did not allow negative prices

  • PriceAndDescription now has mutable description field
    PriceListTableViewAdapter now uses assigned product dynamically

  • added forcePrintHierarchy()

  • code cleanup

  • added checks for unexpected errors to KasseActivityLauncher

  • testUsingTillWithDeprecatedOrder now fully implemented

  • sameTile() does not see UNDEFINED as equal to (0,0) position
    fix: nextFree() didn't use the first tile if there were any undefined positions

  • shorter toString for Position

  • more debug log

  • code cleanup

  • fix: openFolder() initialized the wrong adapter

  • better generic type declarations for AbstractListPicker

  • gradle version bump

  • using separate Progress instances now whenever possible
    using safe calls for (nearly) all top level invocations
    using IV now for all(most) properties that need a Progress in their setter
    App.str now uses toNiceString() for formatting FirebaseData and DataRow
    Dialogs no longer overwrite btnOk if not really necessary
    TableViewAdapter now has an init() function

  • reworked UIPickerTest -- added tests for nearly all useful combinations

  • introduced save() method to catch errors during Task Events

  • improved typeText() stability

  • fix: new product tiles changed ordering of products in test case

  • fix: default tax was not set for newly created products

  • fix: event from whenAllSynced will not be executed if Till is setup before fragment setup is finished => empty Till shown even if not empty / no edit products on empty tills

  • more debug log

  • using DatabaseSetupTestDataObjects from recent split

  • fix: for new expansionAdapter as List

  • fix: new product tiles changed ordering of products in test case

  • split UITableViewAdapterTest

  • replaceSpinner() waits a bit before trying to click on context popup

  • fix: checkNumberItemsInTable() now also works if poppping up of additional items takes some time

  • added clickInHeaderMenu()

  • added tests with TableViewAdapter feature disabling

  • can now expand in TestTableViewAdapter

  • test adaptions for action_multi_select now using the object's plural name

  • throw PerformException if trying to click invisible views on a RecyclerView child

  • adaptions for latest MasterMenuProvider changes

  • added timeoutMs parameter and actionTitleStr

  • fix: press back to close a potentially open menu may kill the app if the menu wasn't open

  • adaption for latest PopupMenu change

  • fix: PopupDialog may be too narrow in case of a title larger then the content of the dialog

  • fix: renamed obsolete packagingOptions name

  • added testTableViewAdapterSearch

  • code cleanup

  • Test-adapter now uses a context menu

  • tests updated for new
    action_multi_select

  • replaceEditText() also works with a

  • WelcomeFragment now supports MasterMenuProvider

  • MasterMenuProvider now supports multiple adapter

  • added testTableViewAdapterHugeAmountOfData

  • added assertMaxTime()

  • make sure debug build is profileable

  • added testTableViewAdapterColumnWidthTest

  • added assertEqualsAlmost() helper

  • fix: UITableViewAdapterTest had no outerView set

  • gradle version bump

  • fix: popup dialog title bar sometimes didn't use the whole width available

  • adaption for multiple expansion adapter commit

  • Revert "now creating ColumnsHeaders statically"

    This reverts commit acafdfc872f0a855f6eb673eb69312d1f898ca53.

  • fix: didn't dispose adapters that have been used in a Picker dialog

  • now creating ColumnsHeaders statically
    now using setWidthFillWeight inside onAttachingToAdapter()

  • adaptions to DynamicNavMenu

  • fix: "Fragment already added" when editing two tills in succession

  • fix: commit updates for companion -> links conversion to database

  • fix: respect placeholders when auto-placing products

  • fix: respect and reset order field when auto-placing products

  • fix: keep auto-placing of products in case of database update errors

  • fix: some fragments were not treated as top level destinations

  • now using DynamicNavMenu

  • code cleanup

  • code cleanup

  • now using embeddedFragment support

  • tests fixed

  • test fixed

  • now using Gradle Kotlin DSL

  • moved Kasse.kt from .ui package to top level

  • taking activity and model now directly from global App instance

  • fix: linked product change not reflected

  • added auto.. columns to product editing via table

  • removed obsolete tests

  • disabled a failing test

  • linksPicker only created on demand

  • fix: open folder dialog does not move when anchored folder moves

  • reduced argument count for PopupDialog()
    PopupDialog are now anchored whenever suitable

  • code simplified

  • go to folder product when clicking in title bar

  • fix: isInBounds shall never be true if the Position is INVALID

  • code cleanup

  • number of tiles is now determined per till for all users
    now Product position is only stored for current number of tiles

  • fix: crash possible if trying to get the activity from a no longer attached fragment => using App.instance now to get the activity

  • adaptions to now public dialog property in Picker

  • fix: removed unused only translated string

  • adaptions for new column width mechanism

  • also search for text in open folders

  • fix: never deselect product under edit

  • code cleanup

  • fix: may have selected a product in edit mode in both main list and open folder list at the same time

  • using expansion adapter for the folder so it automatically highlights searches

  • fix: don't reopen a closed folder on content update

  • don't use column support anymore for products

  • update for new dsp

  • update for latest Position changes

  • update for new FirebaseResults.remove

  • removed UInt in all functions

  • using new spanCount()

  • import cleanup

  • import cleanup

  • adaptions to updateArrayList() changes

  • added App.dsp to handle PreferenceManager without need for a context

  • highlight items half-side to show insertion position

  • only allow dropping over empty space if behind the last item

  • using different default icons for folders and placeholders

  • fix: don't reset whole layout manager on every change in products

  • fix: close folder if no longer part of adapter

  • speed up redisplay of adapter a bit

  • fix: may mix folder templates after moving a product from one to another

  • now drag&drop of all combinations of products, folders and placeholders is handled

  • code simplified
    extracted Position class
    added more Position helper functions

  • code update

  • add more empty tiles in edit mode

  • updated to newer AndroidStudio version

  • dependency version bump

  • updated to newer AndroidStudio version

  • enable dataBinding to avoid missing binding problems in AndroidStudio

  • adaptions to PopupDialog changes

  • adaptions to FirebaseDataBatch changes

  • adaptions to TableViewAdapterFirebase changes

  • can now place products freely in tiles of the till
    added Product.positions

  • can now have multiple linked products
    Product::companion replaced by Product::links

  • fix: consistent labeling of the companion edit button

  • code reformat

  • new testTableViewAdapterFilterAndSelectDynamic

  • extended testTableViewAdapterSelectDynamic

  • tests fixed for TableViewAdapterColumns

  • checkNumberItemsInTable() can now print exact number of items found

  • extracted TableViewAdapterColumns

  • allow checkNumberItemsInTable to skip sum test

  • possibly fix for freeze on replaceSpinner() as it waited too long for a root to appear

  • fix for testTableViewAdapterFilterDynamic

  • test fix for latest checkNumberItemsInTable() adaptions

  • fix: could not edit prices as due to duplicate UIDs

  • fix: crash possible due in un-parsable results from MultiAddDialog

  • order products in picker now same as in product list

  • test fix: now ordered same as in product list

  • small test environment fix

  • new tests added for sorting and filtering

  • adaption for tests with new createDataRows

  • fix: testTableViewAdapterFilterPercentage for percentage display

  • tests code updated

  • UITableViewAdapterTest now checks expected sum values of footer and supports dynamic add/remove of items

  • checkNumberItemsInTable now can check the item sum in the footer

  • added assertCheckbox

  • match index parameter now also supports multiple results across different parent views

  • added KasseActivityLauncher.rotateDevice

  • default matcher for clickChild() and clickItem() in tests

  • added "no tax" to "Set Tax" context menu

  • logTag now part of DataRow

  • extracted filtering and search to TableViewAdapterFiltering

  • gradle bump

  • extracted sorting to TableViewAdapterSorting

  • context-menu open functions have been replaced with Observers

  • TableViewAdapterMenus is now optional

  • renamed setSelectionsAllowed

  • onDragging... open functions have been replaced with Observers

  • renamed updateMenuState to updateStatus
    introduced abstract TableViewAdapterFeatures
    extracted expansion management to TableViewAdapterExpansion

  • code renaming
    avoid duplicate "data" property

  • adaptions for TableViewAdapterSelections

  • don't allow adding a new DataRow that has the same persistentID as an existing one
    renamed getPersistentID() function to uid property

  • safeNotifyItemChanged renamed
    TableViewAdapterSelections changes

  • fix: no Permission Denied if previously selected till was from another user/shop

  • made errorIfMissing to var

  • removed selectionVisible

  • extracted selections to TableViewAdapterSelections

  • code cleanup

  • extracted Drag&Drop to TableViewAdapterDragDrop

  • extracted menu support to TableViewAdapterMenus

  • fix: editing a PriceRow would always add a new one instead of editing the existing

  • removed useless function overloads

  • typo fixed

  • build fix: errors possible because of plugin version mismatch

  • FirebaseDataEditor and FirebaseDataPicker scrolling table view adaptions

  • test adaptions for TableViewAdapter quality improvements

  • adaptions for TableViewAdapter quality improvements

  • split TableViewAdapter.kt into separate files and moved to ui.table

  • fix: checkboxes were missing in multi select mode of product edit fragment

  • fix: use allItemCount instead of the default (visible)ItemCount

  • version bump

  • test fixed for latest icon picker changes

  • updated changelog

  • fix: TillFragment continuously tried to layout buttons even if already paused

  • fix: may have product from another till under edit if switching tills during edit mode

  • only reset queries if really needed on UserState changes

  • fix: "Edit as table" was only possible for admins, not for users with edit right

  • fixed testMultipleQueries()

  • fix: debugPrint() may stay silent in tests as only the Test Progress is set to Verbose
    fix: simulateSnapshotEvent may start the wrong query if two StoredQueries with an equal query exist

  • don't wait between clickOn and onData in replaceSpinner()

  • code cleanup

  • update to debugPrint() deprecation

  • update to new setQuery() behaviour

  • using setQuery() instead of addQuery() where list was empty before anyway

  • fix: may (again) see "Apply" and "Create" buttons from Welcome-User-Login fragment

  • moved leaveShop out to function

  • fix: missed ReplyInvite PayloadAction in context menu of messages

  • fix: allow seeing Incoming messages even if not part of a shop

  • fix: don't show "you need to create a till" if the user isn't yet part of a shop

  • fix: error message in "to" input field was not displaying the correct error text

  • fix: "to" names resolution didn't work for users that wrote to a shop and aren't part of the shop

  • code and docu cleanup

  • gradle version bump

  • typo fixed

  • fix: after returning from some Password Managers, the password field was no longer visible

  • providing Active instead of Progress in all functions of DataEditAction

  • added deploy notes to deploy_hosting

  • fix: deploy_hosting wrote tag and pushed always from app repository instead of lib repository

  • re-enabled firebase deploy

  • updated changelog

  • version bump

  • fix: updateGUI() called missed on var isEnabled

  • dependency version bump

  • only allow backup starting date if not in the future

  • added introText and introComponents and isEnabled

  • added new UIPickerTest

  • added index argument to match()

  • added typeText() and swipe() and clickOn() with coordinates

  • only print hierarchy and snapshot bitmap on last run of a tryRepeat

  • using new instant() and timestamp() helper

  • test fixes for within range allowing for null boundaries

  • combined match() for test cases

  • test adapted to picker okAllowed

  • test fixed

  • adapted tests to special texts for range picker on timestamps

  • fix: processPaymentResult() tried to change payment type to Card even if Paid by Cash

  • test fix for non US floating point format

  • adaptions for picker

  • fixed test

  • Picker changes

  • PopupDialog changes

  • added UITableViewAdapterTest

  • hopefully faster replaceSpinner()

  • typo fixed

  • code format

  • compile fix: wrong version of classpath dependency

  • moved selectInNumberPricePicker back to UITestUtility

  • support for test cases

  • adaptions to NumberPricePicker and NumberType changes
    MultiAddDialog code optimized

  • using precision for double column header

  • more log and docu for tryBlock()

  • clickOn() now scrolls to place before clicking
    clickInOptionsMenu() is now faster
    combined all other menu actions to clickInMenu()
    using clickOn() whenever possible
    matcher() no longer forces isDisplayed()

  • code cleanup

  • fix : always same text string used in database setup

  • typo fixed

  • fix for renamed function

  • introduced match() for all UITestUtility functions
    moved all product and basket specific functions to UIBasketTest

  • removed parseValue()

  • code reformat

  • adaption for TableView changes: bindView() moved up

  • fix: TestData fieldEnumList not yet supported

  • fix: better short and nice string for TestData

  • edited() no longer returns Boolean

  • small changes TestData:
    added testEnum field and shop field
    fixed invalid class String IDs
    simulateSnapshotListener is now static

  • editable can now be set per row

  • extracted Filter, FilterGUI to separate abstract classes

  • don't allow an edit, if no stockIn has been set

  • fix: infinity symbol not correctly displayed

  • fix: titles were missing on some Number inputs

  • added configurable warning threshold for low stock

  • fix: hint text was not visible

  • xml code cleanup

  • added stock management for products

  • added CashPay -- all payment processing (even by cash) now goes through Payment class

  • updated deploy_hosting -- print release-notes (plus copy to clipboard)

  • updated deploy_hosting -- make sure changelog.xml has been updated

  • updated changelog

  • version bump

  • fix for deploy_hosting

  • fix: tests need to wait in selectFromDataPicker()

  • improved testEditOneProductAllFields

  • compile fix: missed strings

  • fix: price list and ranges were no longer correctly displayed in the products card

  • fix: link symbol may be visible on "Add" holder

  • price edit fragment now shows error on invalid prices

  • deploy script now can do version bumps

  • Merge branch 'master' of https://gitlab.com/Oliver_de/kasse

  • improved testEditProducts

  • fixed testPrintingBons

  • deploy script now prepares release notes

  • version bump

  • added testEditProducts

  • updated changelog

  • docu updated

  • version bump

  • docu updated

  • code cleanup

  • added testCompanionProductInBasket

  • fix freeze: detect circular linked companions

  • updated docu

  • moved printer setup from till to preferences

  • added functions to firebase hosting

  • improved testShowingFirebaseDataEditor and marked as not a real test

  • typo in test log fixed

  • fix: using the collectAllOutstandingAutoProducts feature again for the same guest resulted in duplicate basket entries

  • setCountAndPriceInCart now has an optional absolute value (again)

  • reduceCountOfProduct now has a delta (again)

  • fix: don't add the same admin multiple times if "Create Shop" action is used multiple times

  • fixed: duplicate class name in text string

  • fix: don't add the same admin multiple times if "Make Admin" action is used multiple times

  • test code imports updated

  • testDynamicFilter adapted to source changes

  • testMultipleQueries adapted to source changes

  • test code compile adaptions

  • test code compile adaptions: using new App class

  • test code compile adaptions

  • fixed tests: need to use same LifecycleOwner again, so queries are considered equal

  • testSimpleQuery adapted to source changes

  • testManualAddRemove adapted to source changes

  • testAssignment adapted to source changes

  • testObserverReferenceCopiedOver adapted to source changes

  • logging in verbose during testing

  • fixed testCreateWriteDelete

  • avoid endless loop when nice-printing all fields

  • added parcelableChangeLog

  • also check if equalsFields() and difference() deliver the same result

  • code cleanup

  • code cleanup

  • test adaption for latest changes

  • only list deposit returns in filter edit for "Deposit Return" column

  • fix: don't use the same filters in grid product edit mode then in table product edit mode

  • added isDeposit and isDepositReturn

  • added isPlaceholder

  • using base picker implementation

  • code quality

  • fix: FieldDifference from and to were mixed up

  • all database modifications are now logged persistently

  • FieldDifference is now used in a Map

  • support "(+) New" in table edit mode

  • moved deviceId to MasterViewModel

  • adaptions to bindView()

  • validRange() and numberType() support current DataRow

  • using new ColumnHeaderEnum

  • onEditInputPopup() now has DataRow

  • use fixed string for order columns value

  • no summarize for price and order columns

  • using new prioSortOrder() to keep "Add" button always at last position

  • using new applyTo and getIcon for TableView cells

  • typo fixed

  • import compile fix

  • code quality improvement

  • fix in menu titles

  • updated gitignore

  • fix: jumping into changelog was off by about two lines

  • fix: use UTF-8 encoding also for changelog

  • code format

  • simplified menu bar and provide a simplified history

  • removed wrong meta tags from website

  • textColorResource is now a property

  • using global App instance now for resources like translation strings

  • version bump

  • adapted tests

  • show hint if a product in table edit mode is just a placeholder

  • expanding a product in table edit mode now shows price list and bon layout

  • added context menu actions to product table edit mode

  • better handling of invalid json code

  • can now edit the products icon in table edit mode

  • code cleanup

  • can now print reports

  • code updates in createZBonNow()

  • more debug log

  • using StatefulInvocable for callbacks

  • fix: ReportGenerator did not display z-bons correctly as number type was mixed between int and long

  • use new $ translation syntax for layouts

  • pass on progress from print()

  • Create Z-Report button moved to the title

  • translated bon queue context strings

  • can now edit products as table

  • EditTillProductsTableViewAdapter is now abstract
    moved TVEditProductRow to EditTillFragment

  • fix: wrong title for companion picker

  • dependencies version bump

  • provide test receipt for ReceiptGenerator layout editor

  • new ReceiptGenerator that uses DocumentGenerator and can print receipts

  • fix: race condition was possible during ready check

  • BonLayoutEditor can now be used in a more general way

  • always use white background for preview

  • fix: only add empty lines if not enough already exist

  • using new FormatMultiLine annotation

  • fixed crash on editing product bon layout

  • adaptions for Generator

  • check for IllegalStateException

  • retry printing if document is not yet ready

  • redraw preview if content has gone ready

  • layout parameters are now directly takn from a EscPosPrinter device

  • fix: missed strings

  • bon preview now respects paper width

  • added full barcode support

  • more tests

  • fix: missed button for feature_test printing

  • caching bitmaps in printer queue

  • using subListSafe

  • docu updated

  • can now print feature_test

  • updated tests for document split parsing

  • updated tests for new sub-parsing and new barcodes

  • removed wide and tall styles

  • use shown preview directly for print

  • short menu texts

  • version bump

  • updated test

  • don't show printer queue if no printer selected

  • changelog version bump

  • deploy doc updated

  • test case fixed

  • renamed companion product table header

  • don't show printing queue every second while connection to printer still lost

  • print only 5 test bons

  • can now reprint and delete queued printing jobs

  • can now open printer queue from setup fragment

  • fix: reprint as soon as printer is available again
    show error and pause warning in queue dialog

  • fix: on printer connection loss, wait for re-init before trying to reprint

  • can now use templates for bon layouts

  • fix: price selection list in edit mode was too small

  • no Apply button anymore in product edit as update is in realtime anyway

  • fix: displaying Bon setup resets selected device

  • adaptions to ArrayAdapter

  • fixed two problems with test page layout

  • provide characters-per-line to bon preview bitmaps

  • code cleanup

  • removed no longer used PageDelimiter class

  • added Transactions overview table

  • combined all columns handling for Products and Bookings

  • adaption for printing barcodes

  • Tax selection no longer at bottom of edit fragment

  • can now set companion products

  • fix: setCountInCart and increaseCountOfProduct only accept positive delta
    fix: clearInCart() may have removed too many companion objects

  • added a visual printer queue

  • stop active payment progress also on timeout

  • moved master Menu items to CommonLib and added Log Out item

  • typo fixed

  • after payment is done, always go back to showing basket

  • bonCounter larger in default bon layout

  • also list deleted bookings

  • fix: Bon Counter was the same for multiple same products in one transaction

  • fix: translate "Kopie" in second Bons

  • added LifeStats for BonPrinter

  • added simulation mode to BonPrinter

  • more test cases for Bon layout

  • test case fixed

  • fix: may add sub menu items multiple times

  • code cleanup

  • added multi select to Product Edit fragment

  • dependencies version bump

  • version bump

  • updated test files: may fail on Firebase rule as default values in Till instances are not set

  • updated test file

  • improved layout of Bon Printer Setup dialog

  • can now wait between bons for printers without auto-cut

  • can now edit the layout of individual bons
    can now set individual bon counts for products

  • added setFromProduct() and setFromModel()

  • only call doneWithPayment() on success or timeout of payment

  • more type safe Till Pager Adapter

  • product under edit is now stored as a Reference in the View-Model

  • using new format annotations

  • moved price_format and percentage_format strings to CommonLib

  • using new Utility methods

  • version bump

  • code quality:
    forward Process through all Invocable invocations
    MasterFragment makes basic methods final to avoid overwriting entry points
    make sure most Process instances are using translated strings
    correct naming scheme on Class<> properties
    FirebaseData Properties of type FirebaseDataReference don't need a setter on their base property anymore
    Print a MyLog.i on all new Process instances

  • some compiler warnings fixed

  • better empty text messages

  • fixed a lot of TextInputLayout styles
    fix: could not enter multi-line shop address

  • make paid counter right align

  • fix: Child counter not clickable on small screens

  • fix: Guest / Reservation basket empty after rotating device in till fragment

  • fix: overlapping text in basket on paid products when only reduced space available

  • version bump

  • library version bump

  • updated changelog

  • fix: possible General Error after creating a new shop

  • split large test into smaller ones

  • test reenabled

  • test updated

  • can now test edit fields more thoroughly
    better log output on database comparison
    better snapshot matcher in database comparison

  • use a ScrollView

  • consider all transactions whether paid or not in overview

  • only show transactions in basket if guest, reservation and till matches

  • collect outstanding auto products only for same guest

  • fix: duplicate "Guest" header caused conflicts with visibility property

  • fix: if no name already given when opening edit dialog, don't set a space into the name field

  • when taking over an existing guest, now directly use this guest and don't create a copy

  • check entered text for all input fields

  • code cleanup, moved whenAllSynced() out of collectAllOutstandingAutoProducts()

  • added Version History dialog

  • using underline() helper

  • version bump

  • updated tests for new spinner as AutoCompleteTextView and dialogs accepting with "Ok" button

  • now using AutoCompleteTextView as replacement for AppCompatSpinner

  • fix: previous bond printer stays selected if connection type changed

  • if no device selected in Bon Printer Setup, hide all other settings

  • fix: "give" value is not reset after "payed bar"

  • introduced IKasseFragment

  • introduced IMasterFragment

  • added more (default invisible) columns

  • auto stretch columns to fit remaining space

  • for estates with only one room, only print the estate name

  • dialogs and pickers now only accept their input if "OK" is clicked

  • fix: need to set shop of embedded Guest object

  • code cleanup

  • merged updateErrorStatesInLayout() into onUpdateGUIState()

  • updated test for getCollectionPath() overwrite

  • removed test for obsolete DynamicFilter

  • setting special getCollectionPath where needed

  • using new FirebaseQuery

  • added a progress active indicator to actions

  • adapted tests for use of QueueingInvocable

  • doc fix

  • fix: may have used wrong progress object in logs

  • now only using QueuedInvocable so no invokes outside of a lifecycle are lost anymore

  • gradle version bump

  • removed unused "padAlways"

  • fix: may crash on null SharedPref keys

  • all Spinner and their drop down lists now have a suitable minimal touch size

  • use PaddedArrayAdapter in product edit fragment

  • fix: endless asking for bluetooth permission if user clicks the permission away

  • (hopefully) fix: login action buttons sometimes still visible in menu after login

  • allow clicking on access right buttons only if user is admin

  • code cleanup

  • allow "accept join" only for admin and if users wants to (still) join this shop

  • fix: may show error message on trying to mark a message as read

  • show all tills of the shop in Welcome fragment

  • added (invisible) columns to admin table

  • fix: predefined Shop name may not be added to "To" field

  • fix: From may not be set to current user

  • print error messages if join shop / grant access can not be executed

  • allow join only if user wants to still join this shop

  • allow reply / accept only on Inbox
    allow delete on on Sent

  • print full timestamp on expanded message details

  • special text and icon for "Create" action on messages
    fix: "sent" timestamp was not set to now for messages that have been forwarded / replied

  • don't list all users without a shop, use an invite menu action instead

  • fix: missed xml adaption for new Create Message arguments

  • allow user edit / creation only if logged in / for admin

  • list transactions only if logged in

  • allow till and report creation only if logged in

  • allow reservation creation only if logged in

  • allow guest creation only if logged in

  • allow estate creation only for admin

  • allow edit till only for admin

  • fix: remove special "(+)" product after edit mode is closed => fixes wrong empty products warning message after coming back from edit mode

  • fix: dispose no longer needed queries from Update check

  • Create Message fragment now supports a list of predefined subjects

  • no footer in Welcome dialogs shop list

  • print error if transaction can no longer be modified

  • don't list products if view right is not given

  • don't allow editing taxes or guest till if not an admin

  • don't allow changing anything of the shop data if not an admin

  • now stopping all queries if user is not logged in in a shop

  • fix crash on resizing of a dialog with an adapter

  • using emptyViewNoItemsText now

  • version bump

  • tests: fix for recent code change

  • tests: longer wait for icon

  • tests: improved navigation

  • only print from the last 24 hours and limit to 50 in recent bookings

  • compiler warnings fixed

  • ReportGenerator can now export to CSV

  • fix: after activity was in background, the dialog may count too many entries for a x-bon

  • using showWithPreferredSize() from Dialog

  • backup store for payments now contains version number and has simpler file structure

  • using new general Export feature

  • PaddedArrayAdapter now supports connection to a SharedPreference value
    added PaddedArrayAdapterString

  • fix: missed a column title

  • using general expandToggle() function

  • added selectedValueSafe
    added PaddedArrayAdapterEnum

  • removed unused buttonTint

  • replaced ImageButton with MaterialButton so icons look gray if disabled

  • TableViewAdapter manages visibility of header and footer by itself

  • fix: slow interface after coming back to till when recent bookings have been shown before

  • flexible price can now be set to a negative price

  • simpler layout in landscape mode with a Flow
    fix: price sum view may get too small on small screens

  • Merge remote-tracking branch 'origin/master'

  • version bump

  • added new tests

  • use larger text for price-sum, give and back texts, moved price-sum between Receipt and Paid buttons

  • fix: missed some strings

  • added "Recent Bookings" dialog to till menu

  • added "Print Bon" menu to booking table

  • small compile fix

  • show Bugfix double bookings" menu entry only for admin

  • don't expand bookings below products any further

  • don't expand products below bookings any further

  • show setup fragment when clicking on Bon Printer related error messages

  • check for correct shop in ReceiptGenerator

  • fix: set Transaction.timestamp only when booking was successful and all to the same value

  • using new FilterUniqueByKey

  • fix: printer fails to connect after activity restart

  • dynamic filter now has ResultChange instance

  • added support for bon printer

  • code cleanup -- using setSelection() directly

  • no need for registerIconPicker() anymore

  • added askForBluetoothPermission() to KasseActivity for global access

  • make sure header's title of a popup dialog is fully visible

  • renamed addAll to avoid name clash

  • fix: missed some translation strings

  • allRooms list is now always initialized

  • also remove tax from all products when it is deleted

  • deletion should always be triggered by FirebaseData.delete(), not Batch.addDelete()

  • using new PaddedArrayAdapter

  • support deprecation warnings for Booking(Sumup) class in itself and Export

  • no need for resetPrice() call after successful payment

  • added "Edit taxes" to Shop Admin menu

  • dismiss keyboard if a dialog is closed by pressing Back or Apply

  • fixed type in code

  • preferredHeight() is now a function

  • fixed some header names and conversion factors

  • only use titleID if no title has been set manually

  • updated tests

  • added support for editing taxes

  • added contextMenuButtonClicked()
    no longer rely on contextMenuID() result to determine visibility of menu buttons

  • popup title can handle additional buttons

  • dependency version bump

  • version bump

  • moved TaxSelect to taxes package

  • fix: don't remove transaction if setting count temporary to 0 in basket

  • docu updated

  • version bump

  • allow selecting none in Guest Till title

  • fx: "Card pay" button stays disabled after adding a product

  • added setEmptyViewVisibility()

  • use TableView click()

  • show till title always on guest till

  • fix: Sumup extern callbacks are not processed if activity was closed in between due to low memory

  • typo fixed

  • don't call setCountAndPriceInCart if delta is 0

  • only process externally added products once all existing transactions are synced

  • missed strings for TillTitleFragment

  • don't print a duration time-span for empty Reservations

  • moved ic_dropdown to CommonLib

  • TillTitleFragment can now change between guests and reservations

  • simplified width check for long TitleFragments

  • using FirebaseReference for all fields in KasseViewModel

  • better handling if content is still loading

  • changed order in onResume()
    fix: previous basket not loaded correctly for reservations after activity restart

  • support setting absolute value in setCountAndPriceInCart()

  • tests updated

  • fix: make sure products are loaded before calling setCountAndPriceInCart()

  • delayed call updatePrice()

  • fix: in guest till already existing transactions were not visible

  • small test fixes

  • fix: Shop Management MenuProvider overwrites and hides menus from Edit Shop MenuProvider

  • calls to icon, title and titleFragment are now all in onResume

  • code cleanup

  • using time-range printing from formatString()

  • moved notesVisible option to general tab
    added icons to preference categories

  • remove product icon if not enough space in basket
    remove Receipt (and Reset) buttons if not enough space in landscape mode

  • remove product icon if not enough space in basket
    remove Receipt (and Reset) buttons if not enough space in landscape mode

  • moved priceSum out of cardOverview and converted it into a TextInputLayout

  • renamed back to btn_back

  • fix: missed mode name summary in "Additional Payment Mode" setting

  • fix: paymentMode_options is not translatable

  • product card width is now dynamic

  • replaced some const with dynamic dimensions

  • fix: layout problems in User Admin cells

  • added icon to default shop in Testing mode

  • adaptions for new Navigation Menu Header

  • fix: disable modifying estates if not admin

  • fix: call onPause, onStop, ... also on embedded fragment

  • some rework of DataEditFragment to handle dynamic actions

  • can now reopen Product edit fragments

  • using App.instance.activity now when fragment's activity may not be assigned anymore

  • udpates for DataEditFragment components

  • moved price sum out of overview frame and made it better readable

  • moved tab layout above the view pager

  • "give back" price better readable

  • no need for paddingTop hack anymore

  • more dimens resources

  • set price sum icon and label on same baseline

  • auto set width of Sumup buttons and make the fragment scrollable

  • better usable MultiAddDialog

  • test fixed for recent price selection adaptions

  • version bump

  • show price selection in multiple columns

  • fix: don't show "Add price" element in normal (non-edit) mode

  • fix: title of price selection was too narrow

  • wait longer, less iterations, less spam log output

  • now always show a price selection dialog if a product is clicked, only skip if the basket entry is incremented directly

  • fix: testBasketWithRandomProducts() failed sometimes

  • fix: clicking on center of a product in price selection did no longer work (only if lower bottom of row has been clicked)

  • fix: start queries in onResume() so they are valid again after app restart / rotation

  • fix: Transactions with invalid reservations assigned would cause endless database update runs

  • TableViewAdapter adaptions

  • TableViewAdapter now has onClick()

  • print log also for successful assertions

  • testBasketWithRandomProducts() now also compares ReportGenerator results

  • fix: ReportGenerator did not allow switching till and date, only one of both

  • fix: don't try to add invalid products like no longer existing companions

  • docu update

  • version bump

  • fix: onDelete() hook should not be used as Booking is only deleted during update350()

  • no need for a delay in onSuccess()

  • auto scroll down to bottom on new lines for import and export

  • export now runs without blocking the whole app and also backups obsolete data classes
    selecting a start date for backups is now optional

  • only check if an update is needed before asking for update, don't collect all data at once

  • version bump
    added missing icon

  • some updates to tests

  • show "all products invisible" warning only if products are available

  • updated libraries for InAppUpdate

  • auto scroll Basket on every add or modification

  • default is "SumupExternal" method

  • increased default WAIT_TIME to 15 seconds

  • added tryRepeat to replaceEditText()

  • PaymentType is now an enum
    Canceled transactions are now kept in history

  • display payment as ongoing in basket

  • fix: no conflict if reservation starts / ends on same day as a another one ends / starts

  • sort products by order

  • removed obsolete

  • compile fix

  • added back reservation connection to Transactions, together with Guest connection
    collecting paid / unpaid now works correctly for multiple reservations on same guest

  • added action to extend a reservation

  • different way to simulate offline mode

  • fix: equal product compare only worked if product still existed in database
    now keep reservation field in Transactions

  • better activity check

  • added cardPayCanceled()

  • fix for database setup

  • extracted collectAllOutstandingAutoProducts()

  • only create a new temporary transaction if one really needed

  • added testReservationExpansionAndPartialPayment

  • Transaction now points to Guest instead of Reservation

  • don't use global logTag

  • removed unused "model" argument

  • removed unused "rememberIfUnpaid" argument

  • fix: take over guest data did not work

  • directly ask to take over guest data as soon as a known name/mail/phone has been entered

  • fix: generateReport() still called too often

  • fix: should not call Assertion.fail() in a listener callback, must forward to main thread first

  • added testInitialAppStart

  • DatabaseSetup can now handle temp user accounts

  • added testBasketWithRandomProducts

  • no need to set "notesVisible"

  • tryRepeat() does not print full backtraces for every repeat now

  • fix: tax fields need an ID not a direct value

  • renamed methods that are scrollTo() so it's more clear that they need a view inside some ScrollArea
    simplified some imports

  • fix: don't call createReport() twice and make sure we are really finished collecting transactions

  • added indicator

  • fix: picking an icon together with a new shop didn't work

  • added testBasketWithMultipleTills

  • also testing card pay

  • added simulateRestart, configurable from SharedPreferences

  • using initActivePayment() now instead of relying on being already initialized
    fix: Card pay was not selectable from Main menu as long as the Card Pay Fragment was not selected

  • putting the Active in PaymentResult

  • simplified test code
    KasseActivityLauncher is now more flexible with runDifferently()
    navigateTo() tries to swipe up and down to find a fitting entry

  • code fix: wrong logTag imported

  • code clean

  • added simulated card payment

  • fix: payment method not initialized when processing card payment directly after activity restart

  • fix: user not logged in / shop not yet loaded when processing card payment directly after activity restart

  • added debug log

  • created new super class Payment with sub classes for internal and external SumUp

  • adapted Guest and Reservation creation to new dialog layout

  • fix: missed creation of User object for admin

  • only allow database update as admin

  • added testUpdatingDatabase350Random()

  • added AnyOf for Database assertion checks
    print whole Database query result on assertion check
    better logging
    longer timeouts for large databases

  • renamed repeat to tryRepeat

  • disabling animations now for tests

  • updated basket tests and made them more stable

  • Transactions are now directly created on the server as soon as a product is put into the basket
    Transactions now have all fields from a booking and can be queried with only one call
    Basket is now restored across devices
    Payments for Reservations can now be resumed later and only partially paid
    Listing bookings or products, creating receipts or z-bons is now much faster
    Removed Booking and BookingSumup from database

  • adaptions for FirebaseResults changes

  • also provide shop ID on query

  • each Transaction now has a markDeleted field

  • also transfer mail and phone number from guests to Sumup

  • print a dialog to switch to external Sumup if internal has failed

  • auto scroll down on new transactions in basket

  • can now open SumUp app in external SumUp mode

  • fix: wrong text on empty view

  • ordering by date booked / added now

  • fix: prefer given reservation instead of stored one

  • moved guest management directly below tills now

  • sorting already paid products BELOW new ones in the basket now

  • fix: may crash on call to niceString/shortString()

  • added new Sumup external mode
    moved Sumup relevant functions from Main menu to buttons in Sumup fragment

    BookingSumup is now obsolete
    Booking got fields from BookingSumup class and new valid() check
    better handling of canceled Sumup bookings
    Basket is now loaded during onResume()

  • comment for workflow

  • version bump

  • version bump

  • fix: can also run tests in german language

  • typo fixed

  • fix: wrong display of percentage in Paid column

  • fill all products in reservation till only once for all rows in the adapter

  • use all reservations instead of individual query for guest specific reservations

  • code simplification

  • fix: auto-filling products did not work if there was only one payment and this payment was a cancelled sumup pay

  • added menu entries for quick setting deposits

  • added deposit return link

  • code cleanup (use toBitmap)

  • better readable text (shorter)

  • ifSynced now returns error state if exception occurred

  • "exists" is now null if not yet determined

  • updating room assignment now directly on app start

  • only show number of nights in Reservation DatePicker

  • applying dates only after dialog is closed

  • better sorting of compact columns

  • version bump

  • saving the payments.csv to the DebugSnapShot

  • added column "Product-Count" to CSV export

  • added "In Shop?" column

  • added sub sorting

  • better handling of prefixes and suffixes for short and nice string
    using toShortString() now for Progress and a like
    added durationDays, durationNights and durationString to Reservation class

  • organize imports, reformat code

  • localized date ranges in Reservation column

  • fix: using UTC per default as timestamps are stored internally in UTC

  • version bump (only CommonLib changed)

  • version bump

  • fix: leftover q debug log

  • fix: title fragment did not switch to narrow version on small devices for screen dpi != 1.0

  • put person title, language, time selection and comment into an expandable area
    separate comment fields for guest and reservation
    combined arrival and departure picker
    embedded error labels into arrivalDeparture TextInputLayout

  • fix: crash possible with "Cannot assign to errorIfMissing"

  • listing already paid transactions now instead of vouchers for partial payments of reservations
    use priceSum directly as shown to the user when creating a transaction

  • reverted aa5e3efd95852677b655c84428f5991c255e011d "don't reset price on createView()"

  • fix: reset depositTarget and companion if the target product is deleted

  • version bump

  • fix: toggle admin button didn't work anymore

  • allow negative prices for products (again)

  • code simplification

  • print all transactions in expanded view

  • added depositReturn field to Product

  • all fields in Message can no longer be set to null

  • defaultTax in Till can no longer be set to null

  • reservation and printReceiptID in Model can no longer be set to null

  • companion Product can no longer be set to null

  • version bump

  • Tests can now simulate app restarts
    updated Tests

  • Reservations fragment now has a compact view with more information like Paid/Deposits

  • xml code format

  • added DefCheckBox style

  • don't print an error for missing BookingSumup

  • version bump

  • fix: DataPicker did not correctly switch between single and multi selection

  • fix: don't reset price on createView() as it may interfere with coming back from a failed Sumup booking

  • fix: update till list in Navigation Menu when user/shop/admin rights changes

  • gradle version bump

  • version bump

  • fix: don't reset recentProgress so we have better logging in Sumup response handling

  • fix: Sumup Callbacks not processed as Activity is not yet completely started when the callback occurs

  • version bump

  • fix: reservations in edit mode may show wrong conflict

  • now accept old reservations in edit mode (up to one year in the past)

  • fix: some Invocables may still be called in wrong states or on old fragments

    every Incovable now provides it's own reference to a LifecycleOwner and determines if it can be started or not
    every onCreateView() now must call super version from MasterFragment
    removed invokeIfStarted()

  • added an additional dontwarn to proguard

  • more test logging

  • fix: TestOffline in tests has always been executed

  • updated lib versions, added monitor lib

  • removed unused ExampleUnitTest

  • removed quick-debug logs

  • version bump

  • better readable unknown time constant

  • fix: top_tobottom_of reference in xml was wrong

  • quick fix: proguard crashes at app start

  • added proguard excludes for files not part of release build

  • version bump

  • StatefulNavigator is disabled for now

  • can now restore the most recent DataEdit content

  • directly update price-sum now (no delay anymore)

  • added tests for Guest/Reservation creation and Basket bar pay

  • speed up gradle building

  • fix: onCreateSetJoinRequest was not used as of inverted check

  • null FirebaseData reference fields are no longer allowed in FirebaseData objects (was same as empty refID anyway)

  • MyLog functions now directly control notice actions

  • added Day column to CSV export

  • added UI Basket Tests
    all test now run on new mytesting build type in a separate Testing database instance
    fix: Espresso tests cannot create screenshots

  • updated tests

  • fix: TestData:addSnapshotListener() did not work

  • removed useless syncAll()

  • don't show dialog if sync failed

  • small code changes

  • added timeout exception to whenSynced()
    added invokeIfStarted()
    removed onSynced from add...Query() and set...Query()

  • small code cleanups

  • fix: need to also create a ShopCounter when creating a new shop

  • PopupDialog now also uses observers

  • now also FirebaseDataBatch is lifecycle-aware and uses observers

  • moved unused Consts out of CommonLib

  • fix: missed call of onSuccess()

  • observers now all use StatefulInvocable
    WelcomeFragment now only refreshes the GUI when the current state really changed

  • adapted tests to recent changes

  • added FirebaseDataBatch
    replaced FirebaseData create/write(if)/commit with batch compatible versions
    added Progress.Active

  • gradle version bump

  • changelog now also available if german is selected on the website

  • updated doc about deploy steps

  • fix: smooth scrolling to links on different pages crashed javascript and did not open the link

  • hosting will now dynamically create all and deploy pages and the changelog

  • saving basket content now persistently for the current user

  • version bump

  • removed BLUETOOTH_PRIVILEGED and ACCESS_LOCATION_EXTRA_COMMANDS permissions

  • targetSDK is now 33 again

  • version bump

  • fix: AndroidManifest needed permissions without requiredFeature

  • don't rely on getting all permissions before starting SumUp pay

  • code update

  • removed duplicate string resources

  • version bump

  • asking for bluetooth permissions now before starting SumUp
    more logging for SumUp payment
    moved init phase of SumUp into SumupPay class

  • fix in strings: non-positional format

  • version bump

  • fix: showing till too eraly may crash because of missing lateinit

  • version bump

  • changed numbersVisible to notesVisible and updating directly in picker

  • make sure no data is entered in edit fields if no product is selected

  • auto close picker on select in single-select mode

  • show till selection for ReportGenerator when multiple are selected

  • small update to ReportGenerator number display

  • disable edit fields if no product selected

  • fix: may crash on missing lateinit

  • added hints and showing sum in tile for Counting Board
    can now change the selected till in ReportGenerator
    ReportGenerator now uses DateTime picker

  • use hint as title per default

  • code reformat

  • using show() for one-time picker

  • removed TillSelection as it's replaced by FirebaseDataPicker

  • added fix for duplicate bookings from app version 3.0.0

  • fix: may crash on copy() for Booking class

  • more details about users in User Admin Page

  • now recognizes failed sum up bookings

  • ifSynced() now uses a LifecycleOwner instead of the MasterActivity

  • shorter output of nice and short strings

  • add reservation to receipt

  • better receipt if a card payment failed

  • fix: a payment could overwrite other fields from future app versions in the ShopCounter object

  • removed TODO

  • CreateReservationFragment uses new DateTimePicker

  • added selectedItem argument to MyOnItemSelectedListener

  • DateTimePicker now supports ranges
    DateTimePicker follows constructor arguments from NumberPricePicker

  • version bump

  • fix: could not fill in auto-products if till wasn't already opened at least once before

  • fix: till may show wrong product list (from another till)

  • can now edit auto-products and set the reservation till

  • setting auto-products for reservations now also works if user modified the basket, or guest already part a part of the bill

  • put allRooms into view model and using till from view model

  • typo fixed

  • NumberPricePicker now supports (user defined) NumberType

  • fix: this kind of check is no longer possible

  • fix: use shopCounter from view model

  • fix: crash possible as userSetTaxID is initialized too late

  • code reorganized

  • reduced lifecycles of all queries, if possible
    added docu to global results objects

  • queries are now synced automatically after creation

  • fix: missed icon and string

  • only export bookings that are not marked deleted

  • added option to change tax

  • request the shopID when using dynamic queries for transactions

  • removed AppCompatActivity.viewLifecycleOwner()

  • only error_permission_denied_for_till and error_no_products_editor if till is synced

  • removed useless casts

  • Merge remote-tracking branch 'origin/master'

    # Conflicts:
    # app/build.gradle

  • version bump

  • version bump

  • now respect markDeleted for bookings when collecting transactions

  • fix: cope with new transaction count for booking overview

  • fix: cope with new transaction count for recipe generator

  • fix: clear old bookings on update

  • fix: possible crash on getting device ID on first till show

  • version bump

  • now creating Transaction objects already in the basket
    moved count and priceInCart from Product to Transaction
    Transaction can now contain more than 1 product

  • can now switch one day forward/backward

  • more docu, log and code update

  • code fix for new PopupDialog

  • no need for setter in dataGuest

  • combined code

  • user dialogs LifecycleOwner

  • code adaptions

  • fix: guest data not loaded when editing Reservation

  • now using repeatOnLifecycle() instead of Looper
    fix: TillFragment may crash after rotation if a booking was done shortly before rotating

  • version bump

  • introducing ViewModel now for persistent data

  • version bump

  • MonthAndYearPicker moved to CommonLib as DateTimePicker

  • adaptions for updated TableView filtering

  • fix: duplicate resource in app and lib

  • MonthAndYearPicker moved to CommonLib as DateTimePicker

  • CurrencyEdit moved to CommonLib as NumberPricePicker

  • using UInt now when appropriate

  • fix: compile fix for notice() change

  • added "accept join request" to context menu

  • mixed up icons

  • version bump

  • added x-bon and z-bon reports
    showCountingBoard() moved to ReportGenerator

  • fix: typo in AndroidManifest

  • max allowed value is now configurable

  • compile fix: missed two "val" in last timezone patch

  • fix: export only refID in CSV

  • added more global navigations

  • fix: gender correct translation

  • fix: Daylight saving time may interfere with entered dates and end-of-day time
    fix: missed refresh on bookingDayTo SharedPeference change
    using new calendarNow()

  • added counting board

  • replaced (and extended) euro symbols (all Public Domain from freesvg.org (notes) or publicdomainvectors.org (coins))

  • fix: marking message as unread did not fit current Firebase rules

  • pager now is transparent background and always at the bottom

  • can now search for taxes (by value and name)

  • version bump

  • fix: SumUp API needs target API 31

  • print special error message if there are no estates

  • moved sumup API code out of the sumUp fragment to the activity / the till fragment

  • fix: need to create Guest when creating a new reservation
    fix: need to set shop for new Guest data objects

  • added SumUp actions to Till Menu

  • fix: SumUp pay button was not enabled on showing fragment for the first time
    fix: progress bar for Sumup payment was not stopped

  • clicking on give /b back / sum labels now switches the pager
    changed icons accordingly

  • version bump

  • libs updated

  • added menu to till and till edit fragments

  • fix: list of shops is empty if no user logged in already during app start

  • show an intro in till create fragment if this is the first one

  • no longer auto switch to till edit after creation but to the till itself

  • fix: fragment title no set correctly as opened too soon

  • auto create default taxes for a new shop

  • disable tax edit as long as we don't have a dialog for it

  • make sure new product is directly selected

  • code clean

  • Reservation creation dialog now directly accepts guest details
    Reservation creation dialog now has better arrival/departure selection
    combined logic of Guest and Reservation creation dialogs
    list of allGuests now handled by activity

  • can now show empty-message if all products are invisible placeholders

  • fix: all items shortly visible on on showing for the first time

  • fix: going back to Welcome just shows "Wait for login" state
    fix: "Create till" button was also visible for normal users
    code reorganized

  • fix: empty visible shop list if user has no shop assigned

  • fix: endless progress if ShopsSelection is empty
    better error message if no visible shops

  • added showIconPicker()
    fix: icon not set on newData() objects

  • now only need to type the shop's name to confirm deletion

  • now directly go to till-edit after creating a new one

  • fix: create and deleting of shop did not work

  • fix: print error message when shop deletion failed

  • now also delete shop in the batch
    more debug output

  • docu updated

  • version bump

  • import cleanup

  • fix: wrong name of autofocus feature, and made all this features optional

  • version bump

  • init visibleTills and show tableview only when really needed

  • support forwarding back press

  • allow go back to Welcome after till select

  • initialize till adapter only when needed

  • fix: list_intro, list_explanation and scrolling_table_view were not correctly aligned

  • using EmptyFragment for initial layout settings

  • fix: removed duplicate resources

  • migrated LoginFragment into CreateUserFragment

  • better messages on empty views

  • fix: progress circle may be shown endlessly

  • fix: don't continue with events once the adapter is detached

  • adaption for DataEditFragment title changes

  • replaced png icon with webp

  • using new notice() for new messages info

  • code clean

  • fix: sync was never set to done as filters source query was reset during updateView

  • using new includes for TableViews

  • fix: missed result handling from SumUp API

  • Welcome fragment now has embedded Login fragment

  • adaptions for CommonLib 1.2.0

  • use new app icon for Navigation Header

  • moved give and back fields out of KeyboardFragment

  • fixed test compile errors

  • cleaned up dependencies

  • modifications for new Settings fragment

  • replaced launcher icon

  • added hosting and store directories

  • typo fixed

  • adaptions for new clipboard support

  • adaptions for new IconSelect

  • version bump

  • fix: not updating correctly on till changes

  • fix: width may be too small

  • only show viewable tills

  • only show viewable tills

  • invisible create till per default

  • updated doc

  • added user check before asking

  • updated doc and removed Invite action

  • version bump

  • fix: always show current user name in layout "From"

  • using type safe format now for message payload

  • allow shop and right editing only for admin users

  • reduce mesage length to LENGTH_LONG

  • version bump to 2.3.2

  • fix: locale identifier

  • depend on layout for guest error check

  • sort estate list

  • fix: room list was not refreshed

  • having global allEstates and allReservations now

  • fix: replace \n with actual new-lines in comment

  • fix: show 0% as fixed constant while (still) not having paid calculation

  • show a reservation on all rooms if assignment run has not yet completed

  • startUpdateRoomAssignment() is now a static and processes all estates

  • nicer output of conflicts

  • fix: updating guest names may lose already entered guests

  • New Guest button now has name of first unknown pre-entered

  • CreateReservationFragment now supports direct entering of received website formular text

  • CreateGuestFragment now supports direct entering of received website formular text

  • make sure we display only date / time depending on context

  • version bump

  • fix: proguard update missing

  • version bump

  • plugins version bump

  • cleanup

  • fix: TillSelection dialog was way too small and did not show icons

  • fix for PopupDialog redisplay feature

  • fix: endless recursion of column width calculation

  • removed unused resources

  • fix: wrong provider authority

  • adaptions for new context menu system

  • adaption for new context menu system

  • moved build directory outside of sources

  • setting data for DataEditFragment now in onViewCreated() and don't automatically sync anymore

  • implemented CommonLib

  • changed two log entries from i to d

  • renamed KasseFragment -> MasterFragment
    renamed KasseMenuProvider -> MasterMenuProvider

  • added not yet used removeUnusedImages()

  • removed unused DOWNLOAD_WITHOUT_NOTIFICATION permission

  • small code cleanup

  • fix: remove widthID from constructor arguments

  • added TODO

  • small code rename

  • small style cleanup

  • width of column headers is now calculated automatically

  • added comparison in alphanumeric natural order

  • version bump

  • added german translations

  • fix: wrong format type

  • fix: only allow editing description of expanded price

  • fix: icon picker preview had incorrect aspect ratio
    icon picker preview now has transparent background

  • fix: pasting an icon did not except icons that had been edited

  • version bump

  • using newer gradle plugin version

  • removed unused second androidx.core:core-ktx implementation

  • fix: was not possible anymore to type digits when current value is 0

  • fix: no need to rely on fragment resources when formatting display values

  • added description to prices in a price list

  • fix for adding a digit to negative numbers

  • using StatefulInvocables now for TableViewAdapter listeners
    added progress argument to more TableViewAdapter functions

  • added Estate editor

  • added getClassPluralName()

  • using MultiAddDialog in price selection

  • added MultiAddDialog

  • fix: called wrong version of super delete which may result in StackOverflow

  • onLayoutExpansion() will now be called after setting checkedView and menuView

  • fix: calling notify... functions does not work while computing layout -- we call a delayed DataSetChanged now instead

  • better separated arguments for applyTo()

  • code reformat

  • Logs can now be copied and shared, also added "Load more" and "Clear"

  • added filteredOrSelected

  • updated setting for transcriptMode

  • now using fastscroll from l4digital

  • added summary argument to formatValue()

  • fix: saved images may loose transparency

  • FirebaseIcon's content now is unique, so removed set() and added createAndUpload()

  • version bump

  • removed unused code

  • fix: icon search progress may still be running after closing dialog

  • stopping icon search when dialog is closed

  • added message when copying icon to clipboard
    added message when pasting invalid icon URL from clipboard
    closing dialog when pasting valid icon URL from clipboard

  • also do a root layout for placeholder cells

  • fix: all pending addOnFinishedTypingListener() must be invoked before the data is replaced otherwise we lose quickly entered text

  • fix: avoid downloading an icon twice if ongoing download takes a bit longer

  • show placeholders as empty in Edit view

  • moved updateViewDelayed code to registerUpdateViewDelayed()

  • version bump

  • only writing fields that really have changed now
    renamed writeModify and writeModifyIf to write and writeIf

  • moved reorderAllProducts() to EditTillProductsTableViewAdapter
    fixes: trying to reorder even if user does not have editor rights

  • version bump

  • fix: possible wrong cast in removeColumns()

  • more translated error messages

  • added declared but yet unused onContextMenuListener

  • code update: renamed generic types and parameters to be more consistent

  • code cleanup: added possibly alternative approach for getting primary fragment

  • code cleanup: added core-ktx:+

  • code cleanup: fixed unchecked cast warnings

  • added more type safety to all TableViewAdapter classes
    ColumnHeaders are now directly part of one TableViewAdapter
    fix: ColumnHeaders may be attached to old adapters from already detached fragments which can result in crashes

  • support for singleton fragments that will be reused (have only one instance on the navigation backstack)

  • if icon is in legacy format (has URL as UID) open this URL in IconSelect dialog

  • fix for API 26

  • more debug log about reading icons

  • version bump to 2.2.0

  • gradle version bump

  • added pluginManagement: repositories to settings.gradle

  • fix if onBindViewHolder() is called before fragment is attached

  • fix: may navigate to users till twice from Welcome screen

  • possible crash fixed

  • possible crash fixed

  • all Invocables log entries are now verbose only

  • code cleanup

  • implemented own StatefulNavigator so frames are no longer destroyed but just hidden when navigating away from them

  • use new applyTo() whenever possible so search highlighting works

  • fix: don't print "0x" for 0 count

  • code update: use isVisible whenever possible

  • don't filter for search results in basket list

  • fix: clear search on detachh

  • migrated updateCellsTextView() to ColumnHeader.applyTo()

  • fix: exception possible if calling updateView() before user object has been synced (and shop is set)

  • fix: exception possible if calling updateView() before user object has been synced (and shop is set)

  • fix: exception possible if calling updateEmptyView() during init phase of a fragment

  • fix: Welcome fragment pushed again on backstack after display rotation
    fix: navigation logic if user data is not yet created has been fixed

  • fix: cannot navigate to the same fragment twice (if it's already on backstack)

  • layout fix for backup export in landscape

  • layout fix for backup export

  • using onExpand() for click detection

  • removed unused imports

  • added pxCeiled()

  • fixed to preferred width/height calculation

  • docu fix

  • layout fixes to date range dialog

  • layout fixes to price select dialog

  • better looking Till selection dialog

  • layout fix for comment edit

  • fix: crash because of wrong placeholder format

  • fix: progress for setting product count didn't fill in placeholders

  • better price list selection with preselected default and click feedback

  • code reformat

  • introduced dpi() and px() Utility functions

  • layout fix for month year edit on small screens in landscape

  • layout fix for data range edit

  • layout fix for till selection

  • use new Utility function for View measuring

  • fix for preferredHeight

  • removed unused string

  • added preferredWidth and preferredHeight to PopupDialog
    added progress to PopupDialog

  • fix: after user log-in, the shop and tills were not correctly refreshed
    fix: Welcome fragment now only loads a previously selected till if it still exists and is part of the shop and once the user is logged in

  • version bump

  • lots of plugins updated

  • gradle plugin update

  • small style fix

  • fix: close button looked ugly

  • code reformat

  • renamed empty fragment

  • introduced PopupDialog class to handle all PopupWindow
    simplified ConfirmationDialog

  • minSdk reduced to 26 (from 29)

  • compile fix

  • updated kotlin version

  • fixed typo in parameter doc

  • fixed unnecessary casts and null checks

  • fixed strings and typos

  • added TODO

  • fix: may crash if listener is started when activity is already destroyed (fixed yet?)

  • fix: MyLog.d instead of MyLog.w

  • added proguard files to debug build, too

  • updated targetSdk to 33

  • version bump

  • disabled enableJetifier as per suggestion

  • calling onItemSelected before onUserItemSelected in MyOnItemSelectedListener

  • optimized title fragments for smaller screen width

  • comment updated

  • typo fixed

  • can now expand Log entries

  • Log can now directly jump to an entry
    Snackbar now shows a short version of the message string
    MyLog now stores the stacktrace of a Warning or Error

  • fix: newline not correctly replaced in CSV quoted string

  • added expand() and scrollTo() with PIDs

  • better error messages with translations for all .w and .e
    if locally stored icon can now be decoded try online icon
    cleanup of code in IconAdapter
    added handling of file opening errors

  • fix: crash on restore app state as default constructor is missing

  • updated gradle

  • version bump to 2.0.4

  • version bump to 2.0.3

  • allow \n in csv quoted string

  • fix ProGuard problems on release code

  • catch ReflectiveOperationException

  • more debug output on FieldSpec

  • removed unused marginBottom

  • added Log fragment

  • add docu about deploying

  • fix: crash for fragments with title fragments during screen rotation
    add title fragments in onStart() not in onCreate() and destroy them in onStop()

  • added column filtering

  • progress now must never be null

  • added progress for all MyLog invocations

  • fix: splitQuoted now correctly removes quotation marks

  • added App and Strings class for global context

  • TableViewAdapter supports disabling of user sort

  • fix: using 0 as resource did not work as expected

  • fix: missed last item in splitQuoted()

  • prefix instanceUID with an "x"

  • comment updated

  • shorter logTag

  • always use webp format
    keep icons in app private cache dir

  • fix: keep cursor position

  • fix: allow setting name to be empty again fort placeholder items

  • fix: no DelayedInvocable as it will reset the object to a previous state

  • FirebaseIcon is now stored in webp instead of png on newer Android
    FirebaseIcons are now unique based on their UID
    IconAdapter does not save all search results locally
    IconAdapter now handles downloading of images
    fix bug: FirebaseIcon now supports transparency again

  • auto apply reordering now when ordering fails a sanity check

  • fix: set empty first

  • fix: ordering was wrong when adding a new product

  • store translatable class names for FirebaseData classes now in the companion

  • updated german translation
    updated some english translation / fixed typos

  • better readable output of toNiceString()
    added toShortString()

  • added auto-applied products

  • compile fix for new PriceTypes enum

  • countAdults and countChildren are now float

  • added ExcludeIfZero

  • comments updated

  • replaced priceType int with enum

  • extracted basketSet()

  • a bit more logging

  • can now edit payments in a special till connected to a reservation

  • selected till is now provided by NavArgs

  • added some TODOs

  • put transactions till and date range selection into title bar

  • text size suited for title bar

  • use delayed update on SharedPreferences change

  • fix: make sure PaddedArrayAdapter is never filled with null strings

  • added new Utility functions for date&time

  • added title fragment to select starting month in Estate table

  • added support for title fragments

  • renamed removeColumn to removeColumns

  • move table's left position to the beginning of the cell

  • sub tables are now left aligned
    can offset sub tables now

  • can now click on single reservations to only expand those

  • fix: updateAndTrigger() did never trigger as observer was not initialized before trying to invoke

  • added expansion

  • now draws guest names
    can be styled (color and dimensions)
    supports click listener

  • compile fix

  • code rename of argument

  • removed coloring of guests column

  • added main and context menu for estates

  • removed useless context menu entry

  • conflicts now are collected based on day-level
    removed visualShift

  • combined allNonExcludedFields into allFields
    toDetailedString now even prints private fields

  • allow null refID in [] and containsKey

  • added Timestamp.toInstant()

  • code: inlined instanceUID

  • code: replaced let with also

  • sendMail() supports multiple recipients now

  • distinguish between wanted and assigned room
    added conflict check for Estate reservations
    Estate overview is now searchable for guest name and month

  • added context menu for Reservations

  • fix: typo

  • fix: estates or rooms with same name could confuse the edit/create dialog

  • directly set the cell's width, not only for the embedded TextView
    fixes: if data rows don't have a divider, there width doesn't fit to the header

  • code clean: use title as the super implementation does

  • code clean: all consts private

  • fix: wrong context menu

  • fix: wrong init for Paint

  • added EstatesFragment

  • added progress indicator to TableViewAdapter

  • rooms are now longer String but got their own type Room

  • added onChanged()

  • added invokeImmediately

  • better logging for sync and whenSynced

  • fix: ifSynced() doesn't retry all the time if there was an exception

  • ifSynced() now uses a StatefulInvocable
    TableViewAdapter now supports ifSynced in getValue directly

  • compile fix

  • use end of day if no departure has been already set

  • use current time if none has been already set

  • only update data if the adapter is already loaded

  • fix: could not set hours > 12 PM

  • added Timestamp.isEmpty()

  • fix: Message subject was not editable

  • layout: better looking Create Reservation Fragment

  • layout: text size was wrong on some spinner

  • layout: fix for not overrideable margins

  • layout: added padding to (spinner) dropdown list entries

  • better error message

  • removed unused files

  • layout: no need for tint for ic_link

  • layout: added DefTextError style

  • layout: added ImageIcon style and dimen/icon_size

  • layout: fix address wan't multiline

  • layout: keep space occupied by error messages

  • fix: duplicate preference key "developer"

  • added split-string option for Guest and User dialogs

  • compilation fix

  • mnoved title before first name in dialog

  • better detailed output of Timestamp and double

  • changed order of context menu items

  • added First Name and Last Name columns

  • added CreateReservationFragment

  • Utility now has containsAny and splitQuoted and textUntrimmed
    renamed setCalendarToPicker() to setPicker()

  • renamed setDataFromLayout to setDataFromLayoutNow

  • DataEditFragment now allows multiple calls to internalChange

  • added ArrayAdapter.getItemOrNull() and Instant.toTimestamp()
    code cleanup

  • code cleanup

  • don't update too often on user/shop changes

  • DataEditFragment now restores current data on restart
    MessagesFragment needs extra subjectIsFixed argument so after restart subject is still editable

  • fix: crash possible if after rotation fragment is created before activity is fully initialized

  • writing snapshot now directly into the json file
    more information in the json file

  • added Debug Snapshot feature
    can now print multi-line entries in CSV

  • introduced MyLog
    added logging settings to Settings page
    can now log to File

  • cleanup too verbose logging
    updated logging in many places
    inline results from getInstanceUID()

  • fix: need to set registration for sync state to be enabled

  • fix: update sync state on setting exception

  • fix: Log entry could not show column titles as they have not yet been loaded

  • updating finishedLoading now based on sync observer so later added queries are also taken into account
    finishedLoading listener now also triggers on true->false transition

  • replaced assertion with an error message

  • added TODO comment and small compile fix

  • added Logging

  • moved bookings up to TransactionsFragment

  • fix: missed a sync() for allUsersNoShop collection

  • replaced allQueriesSynced with allQueriesDataSynced that checks for dataSynced instead
    added connectSyncObserver()
    added setEmptyQuery()
    added exception property

  • updateView() is now part of KasseFragment and called automatically on user and shop changes

  • added comment

  • call onDestroy() before setting removed, otherwise it will never be called

  • TableViewAdapter now expects a Fragment instead of an Activity as argument
    TableViewAdapter can now store/restore its state by itself

  • added Progress indicator to TableViewAdapter

  • Progress indicator shows current progress title(s) as tooltip

  • updateMenuState() is now called always if finishedLoading gets true
    fix: finishedLoading is now also set after new queries have been added to a connected results instance

  • now search is stored on activity restart

  • connectOnSearchRequested() is done automatically

  • code cleanup: combined updateFooterView() and updateHeaderView() into bindView()
    bindView() now always sets correct width and visibility

  • TableViewAdapter now correctly stores visibility of columns

  • moved DataRow outside of TableViewAdapter

  • fix: all selected if first item was selected after activity restore

  • fix: dirty fix for too small sub table width

  • fix: may crash on invalid query if no bookings have been exported

  • more tests for access rights

  • use writeModifyIf

  • fix: if admin right have changed, display may have been wrong

  • fix: if access right could not be toggled, display may have been wrong

  • added toggle access rights tests

  • added clickChild() for multiple children with same ID

  • fix: row update is missing on admin right changes

  • can now add actions if a DataRow is added/removed

  • fixed linebreaks in doku

  • added admin toggle tests

  • added constants for user names

  • added expansion of users to show details

  • more log and make sure we add to allUsers

  • added first EditUserTest

  • added updateDataAndLayout()
    data.shop will be set automatically if data is PartOfShop

  • added UIAdminEditShopTest.kt

  • setDataFromLayout() now only sets data if no error in layout
    updateErrorStatesFromData() renamed to updateErrorStatesInLayout()

  • Using the ColoredArrayAdapter now also creates Log entries

  • ExportFragment.kt now has defaults for its arguments

  • ImportFragment.kt now has a delete option

  • updated tests and improved stability

  • don't call Modified again if a connected results passes the filter (we have been already called from the source)

  • set resultsAvailable to true before adding new SnapShot results so notifyLocalDataChanged() is called only once

  • only call notifyLocalDataChanged() on running queries

  • don't call notifyLocalDataChanged() twice if added / removed from a query

  • added ignoreNotifications() and followNotifications()

  • only invoke notification once and not three times for data change, exists change and syncSucceeded change

  • test case compile fix

  • moved import and backup into own fragments

  • also call onSuccess() if no modification

  • fix: use a public visible field with private setter so writeToParcel/JSON works correctly

  • using DefText style

  • added import function

  • first implementation of SelectFileFragment (not fully done yet)

  • fix: set exists status on successful sync of an object

  • handle invalid Timestamp values when reading/assigning

  • assignFromJSON() can now also be used on an existing object

  • now only public fields are used for reading/writing/assigning/copying

  • updates to Logging
    writeModifyIf() success listener has prevData as parameter

  • made TillSelection dialog wider

  • added interface PartOfShop

  • added TableViewAdapterFirebase, the normal TableViewAdapter does not need Firebase data any more

  • fix: listeners may exist twice if activity is resumed -- moved from onStart() to onCreate()

  • code cleanup

  • store all known mail addresses

  • implemented observeAndTrigger()

  • fix: crash possible if FirebaseAuth send a token-changed event after activity has been stopped

  • fix: checked current instead of clicked till for access rights

  • update user list also on till permission changes

  • revert modifications if a write() fails

  • Progress() accepts a title and needs manual start() now

  • saving selectedTills on screen rotation

  • fix: check for exist instead of non-empty name

  • fix: resetPrice() on till change will also trigger on display rotation and is not needed anymore anyway

  • fix: only allow reseting price if all products have been loaded

  • fix: only allow saving payment if all products have been loded

  • added synced property to FirebaseResults

  • fix: lateinit property binding has not been initialized

  • moved adding columns out of the init block

  • added connectArrayList()

  • implemented ReservationsFragment

  • the ColumnHeader is now responsible for fetching the cell's data
    added TVSimpleExpansionRow and TVSubTableExpansionRow
    sortedColumn is no longer just an index
    added Utility: TextView.setDrawables

  • extracted ColumnHeader

  • added expanded reservations to GuestsTableViewAdapter

  • fix: if expanded sub tables need more width than available, they will be truncated

  • fix: guests list is of type Guest not User

  • fixed bug in layout

  • renamed adapter tags to be more unique

  • implemented GuestsFragment

  • extracted sendMail()

  • cleaned up all TextInputLayout

  • added isValidMail()

  • fix: assignFromFieldsMap() may crash on unexpected argument types in map (like Double instead of Long)

  • typo fixed

  • clode dialog only if shop deletion was successful

  • can now delete tills

  • provide an edit button in product editing for till edit

  • fix: string declaration in xml

  • fix for deletion: commit before deletion and provide shop ID when collecting tills

  • switch to password field if logging in a known user

  • fix: show response only after Apply has been clicked

  • using auto complete for mail address

  • removed unused xml code

  • changed order of text input fields

  • removed old singin method

  • fix: code error in first line: package missing

  • added isDeletePossible()

  • fix: need to inform observers if "exists" field changes

  • added password reset button and user deletion to CreateUserFragment

  • replaced SignInIntent with own LoginFragment

  • doc updated

  • added onButtonClicked()

  • added title and icon to CreateUserFragment

  • admin can now create / edit user accounts
    users can now change their profile data

  • code cleanup

  • show hint about placeholder not in red but secondary color

  • more debug info

  • enabling group divider on all menus

  • using global allTills list now and updating user list if needed

  • color name of own user in table

  • better inputType and autofillHints for EditText

  • FirebaseData now supports modification of the collection for create/write/delete
    removed useless create() overwrites just for isEmpty() checks

  • DataEditFragment now supports more behaviour modification

  • fix: missed name and admin columns
    don't show footer

  • simplified access modifications
    mark access to tills as all enabled for admins

  • removed Leave Shop from general menu
    replaced kickUser() with a call to leaveShop()

  • removed New Till menu from Shop Admin page

  • fix: don't try to create/write/delete empty data

  • disable product edit if no product is selected

  • code cleanup

  • fix: icons in ImageButtons were not centered and had a tint if set directly as icon (instead of drawable)

  • added support for MaterialButton

  • fix: fun needs to be public

  • better empty till message and suggest creating products if edit access rights are given

  • fix: if no products, BarPayed button was initially enabled

  • fixed typo

  • fix: notifyLocalDataChanged() if write() cannot be called so data modifications are reflected to the GUI
    added debug Log

  • using iconPadding now for ImageButtons
    added ImageButtonPreview

  • xml code cleanup

  • fix: accept users previous selected till only if it still exists

  • WelcomeFragment now better handles missing user/shop/till

  • write better message on empty till list

  • fix: don't write modifications until data is created

  • reordered Navigation bar entries

  • added new Progress class that uses Activity's lifecycle and combines progress steps

  • code cleanup

  • added info about no tills and a create button to the Navigation Menu

  • ConfirmationDialog can now show "OK" dialog

  • fix: update till edit buttons visibilty on (possible) admin status changes

  • code cleanup

  • added exists property tp FirebaseData

  • a local-data object is now the default for FirebaseReference

  • show '' if refID is empty

  • don't shop user selection if there is no shop
    don't shop users able to be invited if no admin

  • better empty message if there is no shop / no tills

  • assert that all accesses to FirebaseResults come from the same thread

  • fix: cache resolved names to avoid endless queries on permission problems

  • forward Exception in DataSyncedObserver

  • fix: noUserLoggedIn not called if ap was started directly without a user

  • fix: check for allowEdit on Menu Edit button click

  • fix: load allShops only if a user is signed in
    fix: clear all global queries if no user is signed in

  • fix: if no user in Welcome, the login is now really displayed

  • text in Welcome now is font_size_huge

  • better access checks

  • added an additional instanceUID

  • Leave Shop now working again

  • fix: take over to and subject (and other fields) from args

  • added stable UIDs for all debugable instances of objects

  • code cleanup

  • fix: need to OR combine message check in admin mode

  • fix: multiselect and cancel multiselect were both visible

  • identical title and action

  • fix: create() needs a UID not an empty data object

  • fix: crash possible if Lifecycle stopped before addOnFinishedTypingListener() is triggered

  • fix: lint error because Util.autoId() was not accessible

  • integrated ShopsFragment into WelcomeFragment

  • always use Welcome Screen if user. shop or till is missing

  • code cleanup

  • removed obsolete labelFor

  • Fragments can now set title and icon individually

  • Fragments can now set title and icon individually, per default icon comes from master_nav

  • added Till.isAllowed...() functions

  • snapshot listener now forwards the exception (if any)

  • process 40 items in one snapshot update per default

  • code cleanup

  • added header to till selection

  • updated Tests for json

  • fixed issues with writing json

  • added backup feature

  • TillSelection now supports date range

  • removed duplicate action_settings

  • added JSON writing and reading of FirebaseData
    now inheriting creators from FirebaseDataCreator instead of Parcelable.Creator
    now using toFieldsMap() and assignFromFieldsMap() whenever possible

  • adapter is optional in KasseMenuProvider

  • hide products with empty name and price

  • fix: missed a commit for price -> price_format

  • some code cleanup

  • removed obsolete file

  • small layout fix

  • fix: crash with invalid data on Paste click

  • updated ShopsFragment

  • now using TestMasterActivity to avoid problems with animated progress during Test Cases
    fix some Test issues

  • fix: missed a space after the word "Cashier:" in main menu

  • fix: missed commit for TableViewAdapter changes

  • fix: missed commit for new FirebaseIcon

  • fix: missed commit for TextInputLayout replacement

  • TableViewAdapter now supports empty text display and handles finishedLoading and menu states by itself

  • using TextInputLayout whenever possible
    renamed string ID price to price_format and tax to tax_format
    CurrencyEdit now uses TextInputLayout instead of TextView

  • added logTagName() to Utility

  • added new class FirebaseIcon
    added new Icon Editor Fragment

  • don't show price sum in edit mode

  • now uses shop holder in ShopsFragment

  • removed unused old files

  • first working version completely based on one Activity and FirebaseData / FirebaseResults and full LifeCycle awarness

  • first new version completely based on one Activity and FirebaseData / FirebaseResults and full LifeCycle awarness

  • fix: wrong menu items were visible directly after start of activity

  • fix: createShop() did not work correctly according to current Firebase Rules

  • fix: didn't list product icons, and may crash if there are no tills

  • fix: detect user change correctly w/o need to restart activity

  • code cleanup

  • fix: need finish() instead of onBackPressed() to avoid some crashes

  • fix: menu state not correctly updated sometimes

  • added support for idling resources check
    using

  • added first Guest Management version

  • typo fixed

  • set refID only if create() succeeded

  • fix: don't write sync fields to database

  • fix: missed commit

  • removed colon from message prefix strings

  • moved picker extension functions to Utility

  • make sure adapter never gets null

  • createSortableData can now return a list of items for one Data object

  • set debug and release flags like shrinkResources and minifyEnabled

  • added some tests

  • introduced FirebaseData and FirebaseResults

  • fix: remove product from edit frames when closing edit mode

  • show better error message if no product is selected

  • fix: empty line between each exported product

  • using logTag now for Log's tag name

  • added dependencies for instrumentation tests

  • can now create a new shop

  • fix: progress bar endlessly displayed if no shop

  • "New till" only visible if user has a shop already

  • code cleanup

  • added Administration Activity

  • fix: fixed typo and moved to updateStates()

  • fix: missed string

  • also change foreground color on checked elements

  • fix: icons are now better centered

  • fix: missed ImageButtonSmall style

  • made message payload more detailed and added reply_invite

  • TillSelection's supports a comment, takes user directly from activity and its anchor is now optional

  • support adding multiple queries

  • extracted search logic into IncludeSearch

  • removed debug output

  • fix: rows contained cells from wrong adapter -- need to give adapter at function call instead of storing as property

  • Merge remote-tracking branch 'origin/master'

    # Conflicts:
    # app/src/main/java/com/hoffmann/kasse/BookingActivity.kt
    # app/src/main/java/com/hoffmann/kasse/MessagesActivity.kt
    # app/src/main/java/com/hoffmann/kasse/TableViewAdapter.kt

  • table rows are now dynamically created based on holder_table_cell
    table row expansions can now be user defined views

  • fixed: removed need of external API
    added initHolder()

  • header, footer and data rows can now have user defined layouts and bindings

  • header, footer and data rows can now have user defined layouts and bindings

  • can add and remove columns now

  • fix: is user is admin, on first checkUser() call admin messages where not read from database

  • small code change

  • all Firebase data classes are now Parcelable

  • changed initUserMap callback

  • missed code adaption for previous commit

  • missed method in commit

  • typo fixed

  • userMap and shopMap now have getter methods and an add method

  • using template now for KasseActivity in KasseFragment

  • fix: don't sum up bookings marked as deleted

  • fix: only try write() if refID assigned

  • fix: Add button was missing after activity restoring

  • fix: only add user to access list if not already present

  • version bump to 1.2

  • view, use, edit rights are now correctly used
    can now explicitly ask for use and edit rights for a till
    ConfirmationDialog now supports more parameters
    typo fixed

  • type fixed

  • now using isSelectable insteadof !isDeleted
    fix: select() may add different object instance

  • renamed selected to selectedFiltered
    ISortableData is now a class

  • don't leak class instance to ColumnHeaders anymore

  • ignore .aab files

  • typo fixed

  • fix: no footer for Messages

  • fix: small layout fixes

  • added english translation as default language and moved previous strings file to values-de

  • release 1.1

  • added default values to settings

  • added version number and build date to settings

  • mark unread messages instead of stroking out read messages

  • user will now be informed if he has a new message (only on activity start)

  • messages can now be searched

  • messages can now be deleted

  • added shop field to Transaction

  • added some comments

  • fix: missed resource

  • added error messages to text edit fields

  • auto add current shop and user to the maps

  • fix: back button didn't move user back from activity

  • enabled Google Play Integrity API

  • admins can now grant access to a till and let users join the shop via MessagesActivity.kt

  • can now ask for access to a till

  • comment for extended payload

  • can now mark message as being read
    show more details on expanded message

  • added messages actions to Main and Bookings and ShopSelection

  • renamed Postausgang -> Gesendet

  • crash fix

  • trying to fix crash if activity no longer valid

  • using bodyHint for join request

  • setting prefilled body for reply and forward

  • using TextInputLayout now
    added DefEdit style

  • fix: reset user's till if he is not in any shop

  • added Messages Activity

  • moved userMap to KasseActivity

  • added subject to Message

  • always sending callback now in setQueryDataSource()

  • fix: wrong icon for settings

  • renamed preference to avoid conflicts

  • moved constants out to Utility

  • using CoordinatorLayout now

  • extracted RangedBooking and SoldProduct

  • set logo

  • small code cleanups

  • fix: wait for usercheck to finish in onStart()

  • layout fix, no need for newline characters

  • TableViewAdapter now supports Firebase Query as data source

  • fix: file for previous gradle update

  • fix: missed string

  • added shop selection

  • gradle update

  • removed unused files

  • using MaterialTextVIew and tools:text now everywhere

  • fix: undo button looked too huge

  • cleanup in dimens and some layout optimizations
    supports disabled textColor for TextView now

  • KasseActivity now also holds current shop

  • showID is now directly derived from current User
    KasseActivity is now a real class and holds current user and till objects

  • showID is now directly derived from current User
    KasseActivity is now a real class

  • bind context menu to menu button

  • code cleanup

  • preparations for initial test release

  • DateRangePicker now supports selecting a day span
    DateRangePicker now extracted to separate file

  • day time change has now been moved to preferences

  • cleanup unused imports

  • default number of booking days is now remembered

  • show context menu to hide/show columns on TableViewAdapter
    use tag to save state for TableViewAdapter

  • progress bar and more button only if there is more on icon select

  • display checkbox as grayed out if disabled

  • added progress indicator

  • added right alignment to some columns and added till column

  • added possibility for up to ten columns and flexible alignment

  • renamed some column headers and resized the columns

  • columns are now defined in a companion object next to the table row objects
    columns can now be set invisible

  • count is now the last column

  • simplified code, no need to manually create a drawable from resource

  • fix: header and foot er are horizontally a bit too large

  • now every column can have an icon

  • fix: header and footer were to huge in vertical size

  • fix: switch to icon edit page only if no edit page is selected

  • fix: possible crash after product has been removed

  • show refID in price edit

  • fix unnecessary calls to save...() without user interaction

  • image buttons now have no border

  • changed menu icon to the usual 3-dot

  • redueced to one layout file and added a horizontal scroll view

  • fix: don't set headder checked state if not attached and don't rely on the state of the checkbox for allSelected

  • show sum of selected rows in footer

  • can now search for comments also in RangedBooking

  • removed temporary logs

  • reduced default font size to the default 14sp

  • better layout for smaller displays

  • renamed settings layout to be consistent

  • fix: pay button could have been disabled after rotation change if userCheck takes too long

  • SumupFragment now decides for itself is payment is allowed

  • fix: need to take over values on fragment recreation

  • fix possible crash after product has been removed

  • simplify layout margin definitions

  • dynamically resize product card widths to better fit available space

  • fix: till-edit instead of basket fragment shown after back from edit mode if orientation changed happened during edit mode

  • no need to store basketContent separately on saveState

  • put priceString() into Product class

  • better understandable fields for MainEventData

  • no actions on onNothingSelected()

  • compile fix: missed Transaction::write()

  • finally fixes page swapping: keep all pages in two viewers and toggle between those two depending on edit mode

  • sort directly without delay

  • added search auto complete

  • use fixed position for Footer

  • added search function to Booking View

  • store state on adapter refresh

  • small code cleanup
    no longer provide menu on long click

  • delayed sorting for faster feedback

  • added icons for Bookings and Transactions

  • footer now always displays sums, not only for selected
    some code combined

  • may fix table footer not visible

  • use getPersistentIO() for equal() checks

  • Multi Select action moved from context to main menu

  • fix: TableViewAdapter needlessly refreshes item on selection toggle

  • fix: TableViewAdapter loses menu-mode and select-mode on reorientation

  • BookingActivity now supports editing comments

  • SoldProduct now only uses transaction's comments
    SoldProduct now has a resetCache function

  • small code rework

  • fix: a save() call was possible during loading of a product
    fix: copy of icon did not copy whiteThreshold
    some code rewrite on copy/paste

  • use primaryTextColor for icons

  • using ContextCompat now for icons

  • can now switch between single item menu and multi selection mode

  • fix: sub table bookings did not get refreshed on deletion state change

  • show menu also on long click

  • can now restore deleted bookings and Viewer marks them as disabled

  • can now delete bookings

  • no selection for sub items
    fix: context menu may focus on wrong item on sub items

  • ReceiptGenerator can now use prefilled data
    BookingActivity now again supports generating receipts

  • added multi select to till selection

  • fix: selected tills not visually shown after orientation change

  • extracted TillSelection

  • simplified callbacks of ImageCache

  • fix of MainActivity for new ImageCache

  • switch to edit product tab on click on a product

  • stepwidth of whitethreshold is fixed to 0.1

  • using properties now in IconSelect whenever possible

  • new version of ImageCache that fixes sig11 crashes

  • fix: restore now works correctly on TableViewer

  • fix: Tills are not Parcelable -- just use refID to name

  • fix: Export button was not enabled for Booking view type

  • fix: didn't update date and time views if no till was selected
    fix: word "at" must belong to time selection

  • fix: don't cary over milliseconds in date selection

  • better layout of Booking in portrait mode

  • fix: don't call updateView() until a till is selected
    restore states on screen rotation

  • fixed reference to missing ID

  • added Booking reference ID as new column

  • can now start Booking Activity directly

  • can now expand TableView items and export bookings and products

  • fix: converting "," in csv file strings did not work

  • layout fix: title of popups could have been truncated

  • removed all Logs from ImageCache

  • using R.string.tax now everywhere

  • Booking View now uses newly created TableView class
    Booking View is sortable and can sum up prices and counts
    TODO export no longer working
    TODO orientation change no longer preserves data in Booking

  • moved showException and showError to Utility

  • till's default tax is noiw sused for new products

  • extracted TaxSelect
    can now modify till's name, icon and default tax

  • using AppCompatSpinner now

  • extracted icon selection into an include

  • code cleanup

  • string format fixes

  • layout fixes

  • Merge branch 'master' of https://gitlab.com/Oliver_de/kasse

  • Update .gitlab-ci.yml file

  • show error message if no till selected

  • show error message if access to till is denied

  • fix: crash possible if booking has been deleted before it is printed

  • fix: allow price lists with only 2 elements

  • fix: search for new icons after source change did not work

  • code cleanup

  • fix: wrong tab may be visible despite the correct one being selected

  • fix cursor jumps to beginning if text ends with space

  • fix could not enter list prices any more

  • fix wrong listener

  • comment cleanup

  • code shortcut

  • Price list and range can now be used

  • disable editors if no product is selected

  • clear product under edit on deletion

  • simplified notification calls

  • only update price list if needed

  • only search for icons if the tab is visible

  • fix: text is set again on saveProduct() which resets cursor to the beginning
    fix: Product name empty error is displayed after product change

  • highlight "Delete" in red if hovered over with a product

  • fix: reset selected product on edit exit

  • delete a product by dragging it to "Delete"

  • renamed EditListFragment

  • hold to start moving products

  • adding new products now also works with ViewPager fragments

  • gradle upgrade

  • color fix for dark mode

  • now added tax selection to price edit

  • price edit is now completely working (also with price lists)

  • fixes for price edit

  • layout fix for Price List

  • code cleanup

  • compile fix

  • edit products now in ViewPager (partially implemented)

  • store edit mode on orientation change

  • code cleanup

  • using MainEventData object for MainEventListener

  • reset images before fetching new ones

  • added historyEmpty check

  • code simplified

  • changed text of price sum

  • added missing build files

  • juse shop icon for app icon if available

  • removed ConfigViewModel

  • display message if basket is empty

  • using ViewPager2 now to switch between basket and keyboard
    using event system now for most modifications/updates

  • max two lines of text in booking and transactions cards

  • added export function to BookingActivity
    BookingActivity can now show&switch current till
    export timestamp as string formatted text field

  • made + and - buttons smaller

  • fix: 0 count companion was kept in basket if count of parent product was set 0 in popup dialog

  • show companion products below their parents in the basket

  • visual display of products with companions

  • fix: overlapping text in Confirmation Dialog

  • fix: missing Confirmation Dialog resource for portrait mode

  • fix: missing constant

  • allow payment even if total price is 0 as long as basket is not empty

  • print errors on invalid sumup conditions

  • only return products with count>0 on allProducts()

  • fix: possible crash on main activity switch to other activity

  • better looking copy button

  • compiler warnings fixed

  • Merge remote-tracking branch 'origin/master'

  • added companion support

  • Update .gitlab-ci.yml file

  • notes are larger in keyboard buttons

  • added selection state current till

  • added state_pressed for buttons and cards

  • only allow E-Mail as login type

  • added icon copy button

  • now using Preferences for shop and till selection

  • better looking till holder

  • reset recent receipt on till change

  • ca now change till

  • now keeping the Booking object of the last transaction so always the correct receipt will be printed on "Recent Receipt"

  • replaced debug log naming

  • set order for new items so that they are always at the end

  • show confirmation dialog on critical actions

  • fix: update basket on product change and deletion

  • small layout fix

  • keep basket entry as long as count edit is open

  • Send Mail is now a floating button

  • can set title and popup location

  • don't reset price on showing keyboard

  • Undo key now replaces "00" instead of "-"

  • now using Int as Cent instead of Double for all prices
    correctly rounding net sums now

  • more debug output

  • prepared receipt upload to firestore

  • clicking on count in basket shows edit popup

  • CurrencyEdit now has better looking keyboard popup

  • CurrencyEdit allow for plain number input

  • showing prices in product list

  • added basket

  • buttons are now outlined

  • removed unused drawing

  • fix: wrong color in night mode
    better undo symbol

  • removed obsolete layout

  • also save transaction device in CSV

  • using styles for Buttons and Texts
    put main buttons in extra layout

  • layout fix: tax select at same position as white threshold slider

  • delete temp images on start

  • added comment to Booking

  • added device name to Booking

  • added device name to Booking

  • Close buttons in popups now look like normal back buttons

  • fix: SumUp network error because of invalid characters in addAdditionalInfo
    now using real shop and till name for SumUp title

  • code reformat

  • store Booking activity state on rotation

  • better error logging

  • removed unused code

  • added possibility to send mails
    all strings in receipts are not translatable

  • extracted savePayment to SavePayments.kt
    added counter to bookings
    cleaned up ReceiptGenerator.kt
    scaling bitmaps for receipts

  • updated libraries

  • some code cleanup

  • ReceiptGenerator now creates recipes with all details needed, and auto adjusts size of the receipt

  • ImageCache now works with onSuccess function

  • added tax

  • using set() instead of update()

  • removed unused Parcelable

  • only allow printing recipe if last payment is not too far in the past

  • better login theme

  • more sumup API features implemented

  • card pay is now even enabled if a give value has been entered

  • using special icon in edit if no icon has been selected

  • using ConstraintLayout to fix icon select recycler sizes

  • added back/close buttons and titles to all dialogs
    till selection is now also a dialog

  • hide "New" button during drag&drop

  • code cleanup

  • added own view holder for till selection

  • fix: reordering with up/down swipe did not work

  • added logout from sumup to menu

  • added till dropdown to action bar
    create() updates a document if refID is already set
    using string template now instead of fixed price format string
    removing local persistent cache on user change

  • only refreh needed items

  • calculation of column number in products grid now works correctly

  • now also portrait mode always shows keybaord correctly

  • added Settings dialog

  • keyboard is now permanently visible

  • fix: only allow reorder in edit mode

  • introduced KasseActivity
    first version of ReceiptGenerator (only basic listing of products)

  • replaced application icon

  • reordering products is now finally working

  • more and better icons

  • fix: in edit mode don't show product count reduce button

  • added booking activity

  • larger popup dialog

  • moved shopID and tillID to ConfigViewModel
    better interaction with SumUp
    storing more details about SumUp payment now

  • special portrait layout

  • fix: losing item counts on activity restore

  • started implementing receipt

  • small layout fixes
    close keyboard on popup close
    write images in transparent form

  • don't search for icon before the icon list is visible

  • show count and remove button in products RecyclerView
    removed CartAdapter.kt
    keyboard is now on the right side
    using Material buttons now

  • check user rights and adapt GUI
    fixed some bugs in product edit popup

  • menu bar items are mixed/lower case

  • removed unused files

  • keep content on orientation change

  • changed to ConstraintLayout to fix layout problems

  • moved FirstFragment.kt into MainActivity.kt

  • added card payment via SumUp API

  • code cleanup

  • edit dialog now also uses currency edit

  • added currency edit

  • removed more button

  • fix: IconAdapter fixItem handling didn't work correctly anymore
    fix: whiteThreshold now always respected by ImageCache

  • different layout for editing in landscape and portrait
    added direct input of icon URL

  • fix: wrong collection name

  • can select image source now

  • using buttons with image plus text now

  • added tills for product collections
    added icon selection for products
    added access rights in firestore
    changed layout to have shopping card below price summary

  • fix: touch interpreted as multiple clicks

  • reenabled writing transactions to CSV file

  • code cleanup

  • added drag&drop for reordering

  • current shopping cart now is a RecyclerView
    store transactions in firestore
    better way to decide number of columns (not yet perfectly working)

  • initial




Change Log CommonLib

  • Version 5.2.2

  • version bump

  • fix: compact DataRows could no longer distinguish clicks on different textview

  • fix: title of MultiAddDialog was not updated correctly

  • better wait for search results logic in selectInIconPicker

  • imports fixed

  • tryRepeat now takes into account the execution time of the block

  • added getNumberItemsInTable()
    checkNumberItemsInTable() now uses new function and prints exact have and expected values

  • selectFromDataPicker now ensures the click has really worked and closed the dialog

  • better difference printing on failed assertEquals for strings

  • introduced S class for better string matching
    added title for better picker matching

  • added parentChildText to match()

  • fix possible crash during PopupDialog.toString

  • fix for e970dbddcd95c181188698b648c46d024a02320f: Assertion failure if remove() removes all items

  • removed match() overload function

  • fix: extended eb170d55141345a8863ab3a9cd3b9168b1fbe6ce

  • test: increase the length limit of the logged exception message

  • test: also print hint for PAUSE_ON_ERRORS when pause() is called

  • fix: testNumberPickerNegativeCounterDecimal and testNumberPickerPercentage to run on devices with lng other then US

  • fix: prevent duplicate context menu items needs to compare itemID / text directly as MenuItem.equals seems to be unreliable

  • code cleanup

  • removed logging GC memory diff as it's already printed to console

  • improved logging in IV.set() and IV.forceUpdate()

  • searchViewText is now an IV
    simplified global search logic

  • fix: typo in log message

  • fix: default theme mode of -1 collated with MODE_NIGHT_FOLLOW_SYSTEM

  • moved search view implementation to MasterActivity so it doesn't need to be recreated on every new fragment
    fix: If a fragment has sub fragments, the search view may not forward to the correct adapter(s) anymore
    fix: forwardSearch and forwardHighlight did not work correctly
    default of forwardSearch is now false

  • fix: expansions didn't work anymore
    speed: only inflate expansion views if really needed

  • fix: may not display correct summary in the footer if not in multi-select mode

  • added matchingSelectedOrExpanded

  • removed duplicate log

  • code format
    optimized imports

  • fix: possible crash during app init

  • improved logging: no unneeded space

  • code simplified

  • refactor: improved logging

  • refactor: changed logging level from debug to verbose for lifecycle events

  • improved debug output by adding unique IDs to some classes

  • removed obsolete isSingleton

  • newUID() returns a hex string now

  • added MenuItem.toDetailedString

  • fix: don't try to update already disposed sub-adapters

  • fix: removed resize handler scroll on border as it didn't work correctly

  • fix: resize handler was never hidden again if not used at least once

  • speed: sufficient to call updateHeaderAndFooter() instead a full updateAll() on selectionChanged()

  • added embedMenu() and some code optimization

  • better detailed string for FirebaseData instances

  • fix: use allAtLeastOne() instead of all()

  • added getPrefixName()

  • fix: functions like update() did not detect modifications to fields of type FirebaseReference or DynamicList as FieldContent did not deep copy them

  • introduced additional fields to FieldSpecs to avoid accesses to lower level baseProp and simplify code

  • code simplified

  • code cleanup

  • fix: invoke click() also after clicks on cell's root

  • code simplified

  • Version 5.2.1

  • version bump

  • added takeSnapshot() and compareSnapshot()

  • code simplified
    fixed possible ConcurrentModificationExceptions in updateInstances() and updateLiveStats()

  • code warning fix

  • code cleanup

  • added getView()

  • click on a field in LiveStats view can now follow it's reference

  • fix: item-count not properly updated if position changed of an item if positional layout

  • added dragAndDropSimulation()

  • simplified code

  • added testManipulateResultsObjects

  • simulateSnapshotListener now also works for TestResults object

  • reduced number of calls in waitForIdle()

  • removed leftover LogTag.q call

  • fix: don't remember Progress for "safe() call inside another safe() call" detection if check itself has been disabled and use it only on debug mode

  • fix: don't remember Progress for "safe() call inside another safe() call" detection if check itself has been disabled

  • fix: Progress not passed on for some recursive calls between Activity and Fragment

  • added toString readOnlyView-Map

  • let StoredQuery implement LiveStatsInstance

  • implemented FieldDifferences for cleaner code

  • added readOnlyView() for Map

  • print warnings if sealed objects have been modified

  • added onUpdateInstance()
    added docu

  • code format

  • fix: may get General Exception when filtering inside a table with positional layouts as getItemCount() suddenly changes it's value during filtering

  • bring PopupDialog to front also on click on the dialog's background

  • Version 5.2.0

  • version bump

  • improved tryRepeat() and fixed wrong waiting time if not multiple of 1000ms

  • debug output cleanup

  • code cleanup

  • adapter() can print debug message if no fitting one is registered

  • make sure the empty-view is always displayed below the header

  • removed (no longer needed?) auto setting adapter based on attach state changes

  • removed (no longer needed?) expansionView's minimumWidth adaption to the subAdapter

  • showFilterGUI() now brings the dialog to the front

  • code cleanup

  • added PAUSE_ON_ERRORS

  • added postSafeOnDispatcher()
    fix: calls on Dispatchers.IO did not use safe()

  • adapted test environment for recent LogTag and adapter registration changes

  • context menu is now flat again in case only one item has been clicked (no multi-selection mode)

  • fix: disposing a PopupDialog while App is already closing may cause an exception

  • ApplyAction in CreateUserFragment now uses copyFields()

  • fix: selectOnly() did not work if all-selected mode was enabled

  • fix: deselectAll() may just toggle previously selected items in case all items had been selected just before the call

  • TVGenericRow can extend TVRowBinding directly

  • ignore onRestoreInstanceState() calls if not yet initialized

  • fix: after adding an already contained item, all following items in the same add() call will be ignored

  • fix: duplicate log

  • fix: calling showFilterGUI() without an active filter will enable a pass-all filter

  • fix: sorting icons by name does not make sense and may interfere with test cases

  • fix: "more" call for icon search did not use the search query

  • code cleanup

  • getLocalData() now always returns the same empty-UID instance
    copy() now creates a new object with a unique ID

  • speed: removed isFieldZero() as it most of the times needlessly creates a temporary FieldSpecs
    accessing all field properties now via KProperty.get instead of Field.get
    zeroCheck in toFieldsMap() now is a simple Boolean

  • contentEquals() and fieldToString() now accept Map compatible representation of the field's value

  • speed: no need to create local data object in processNextResults() for debug format

  • added differenceTo()
    assignFromFieldsMap() now is more generous for accepted input types

  • adapters are now registered in the MasterFragment instead of the MasterMenuProvider

  • ColoredArrayAdapter is now a TableViewAdapter

  • TableViewAdapterExport is now a feature of TableViewAdapter

  • fix: missed myprofiling target

  • version bump java toolchain to 17

  • code cleanup

  • new context menu handling:
    - multi-select items are no longer part of the master menu
    - all kind of TableView context menus are started with one general showContextMenu()
    - each feature is responsible for adding menu items

  • replaced setPassAllFilter with a more general setFilter

  • speed improvement: validMatchingSelected no longer needs to filter all matching items

  • implemented readOnlyView() to ensure compile-time errors when trying to add/delete items

  • import cleanup & code format

  • LogTag is now static to reduce memory and object creation overhead
    LogTag no longer has a UID, prefix or suffix
    Progress and DataRow objects now have their own UID

  • can now display the size of objects during Debug Live View

  • saveToSharedPreferences() now also stored the type of an array

  • "safe() call inside another safe() call" now configurable during build time

  • memory optimization: only init ArrayList if needed

  • code cleanup

  • updateWidthConstraints() only if attached

  • fix for already disposed warning

  • compile fix

  • gradle version bump

  • more docu

  • added LiveStatsInstance to some classes

  • added FieldContent to avoid the need to copy whole FirebaseData objects just to remember current field values

  • renamed allCopyableFields to allPublicFields and added derivations like allCopyablePublicValidFields
    moved field specific functions to FieldSpecs

  • Debug Live View's GUI is now lighter
    Debug Live View now supports showing class instances and their fields

  • improved logging

  • print full stack if called outside of safe

  • also update rows in case of ModifiedExists

  • trigger updateAll only if width has changed from outer-view and update of empty-view only if heigth has changed from the header

  • improved logging

  • added canClick to click() and clickChild()

  • fix temporary overwrite of LogLevel

  • okAllowed() is now an open function
    fix: first selection in picker did not update allowed-state and may therefore be ignored

  • fix for BundleAndSharedPreferencesTest

  • fix: assignFields would not assign to ExcludeIfZero annotated fields if the old value is 0

  • added safety guard against exiting app while batch commit is still ongoing

  • code format

  • create() / delete() will be ignored if exists already is true / false

  • exists will now be set immediately before create() / delete() executes and will be taken back on errors
    fix: race condition when updates for an object come from server while deletion command is still ongoing (not yet committed)

  • now also setting commitOngoing for creation/deletion operations
    fix: removing onBefore/... if the batch step has been removed again from the queue

  • better debug log

  • fix: take over new data content into GUI, for example after a paste action

  • fix: mention that clear() may not result in an empty list and remove assertions

  • fix: use a safe call during error-retry

  • call onYes and onNo now directly from onDismiss

  • added safety guard against exiting app quickly after closing a dialog

  • fix: actual dispose based on disposeOnDismiss of dialog was missing

  • fix: call showHideAnimation() after invokeOnDismiss() as mentioned in doc

  • docu fixed

  • removed now obsolete waiting for opened folders

  • added testingDragDropAutoScroll

  • removed obsolete StatefulNavigator and fixed dependency for navigation-fragment-ktx < 2.6.0

  • fix disposing a TableViewAdapterFiltering reset the current global search text

  • fix layout bug: title text width and button positioning not correct

  • using connectArrayList() instead of manually adding items

  • code cleanup: introduced CAL and RL
    connectArrayList() can now detect updates of the lists' data directly

  • fix: content of expanded table views may not get updated

  • code and debug log cleanup

  • don't call animation updates if no change to background

  • fix: expansion adapter may get disposed during drag&drop (disposing protection didn't work anymore)

  • fix: missed some safeNotifyItemsChanged for target

  • replace callOnHovering and callOnPositionChange fields with onDraggingFrequency
    added event field

  • added butIf()

  • code simplified: storing lastOnDragging now directly
    update target holder after processDragEnded

  • code simplified

  • fixed docu

  • added docu and renamed arguments of FieldDifference

  • compile fix: missing imports

  • make sure onBefore during addUpdate() also works if differences-map has been cleared after the call

  • fix: added safety measure to avoid database overwrites with old data while changes have not yet been commited

  • use topParent directly and don't cache it

  • allow scrolling on all RecyclerViews, not only those attached to the top adapter

  • added itemAtPosition()

  • added widthMaxSize and heightMaxSize
    fix: matchConstraintPercentHeight was initialized with widthSize

  • added docu

  • code simplified

  • docu fixed

  • fix: add() may call safeNotifyItemsInserted() twice if not in positionalLayout

  • fix: remove() may call safeNotifyItemsRemoved() twice if not in positionalLayout

  • renamed Invocable start/stop to enable/disable and added docu

  • removed redundant code

  • added docu

  • code simplified

  • more safety measure against endless dragScrollingHandler

  • code cleanup

  • only one dragScrollingHandler now on top adapter managing all attached views

  • added callOnHovering

  • code and docu cleanup

  • added safety measure to avoid endless run of dragScrollingHandler's runnable

  • fixed docu

  • better code to scroll on view boundaries: also scrolls on hovering and increases scrolling speed gradually

  • code simplified

  • debug optimized and code reformat

  • code speed optimized

  • fix: content of table views may not get updated in some fragments

  • fix: missed strings for 240860f1af6fedf53835adca5c9aec744c718eb5

  • added cancel()

  • added viewHolderRecycled() and failedToRecycleView()

  • added payloads to bindView()

  • introduced TVHeaderFooter
    moved functions only belonging to header and footer resp. DataRow down from TableViewHolder resp.TVRow

  • moved assignFromParcel up to FirebaseStruct

  • code cleanup

  • fix: TitleButtonMapper has not been disposed

  • avoid overlapping dialogs if possible

  • set elevation only once during show() and avoid duplicate setting of background

  • fix: duplicate call to autoResizing

  • fix: spaces shall not be trimmed from string filter text field

  • fix tests for filtering via dialogs
    added siblingChildText and docu for match()

  • fix tests for filtering via dialogs

  • fix: dispose of fadeAnimator missing

  • fix: remove() did not send safeNotifyItemsRemoved if all have been removed (as cntBeforeRemove was wrong)

  • TableViewHolder now shows previously used index+DataRow for debug toString

  • onClick events can now disallow expansion

  • added replaceColumns

  • added blockUpdate and unblockUpdate

  • added onDismissed

  • implemented new FadeAnimator

  • moving a dialog without faded background (no dismissOnOutsideTouch) now does not fade the background during drag&drop

  • click on a dialog's title now brings the dialog to the front

  • dialog can now be moved with a simple click
    moving a dialog now correctly adapts touch position
    and avoid moving outside of screen area

  • removed unused file

  • update docu

  • fixed debug typo

  • fix: need updateEmptyView call first before determining minimal width

  • attachedViews are now set based on preferredWidth

  • import cleanup

  • code reformated

  • print stacktrace on catched MyHorizontalScrollView errors

  • using dialogs now to configure table filter

  • reformated code

  • popup_background uses dimension for corner size
    popup_background_title now has a padding

  • PopupDialog now directly sets background and elevation
    added style PopupTitle

  • fix: onActivity() passes thru errors occurred during safe call

  • added onError to safe()

  • assertTrue() and assertFalse() now support null arguments

  • fix testTableViewAdapterFilterDouble

  • fix: ignore PERMISSION_DENIED

  • fix and simplify testListPickerDynamic: setting autoResizing to true

  • using onActivityProgress

  • fix UIDialogTest: ignore PERMISSION_DENIED

  • no auto-run for testDateTimePickerInteractive

  • fix testDynamicFilter (and testWhenSyncedOn_AddA_AddB_DoneB_SetA_DoneA)

  • fix testCreateWriteDelete

  • fix tests: ignore PERMISSION_DENIED

  • added property for testing "force_24_hour"

  • on remove() call onChange only if something has been removed

  • code format: rename

  • removed unused .gitignore

  • Filter GUIs are now added to a ScrollView

  • Filter GUIs now have a card border
    all GUI parts of Filters are now centered vertically

  • pulled initHolder up to TableViewHolder

  • pulled expansionRoot up to TableViewHolder

  • removed unused layout property

  • fix: TVTestSimpleRow needs to be TVRowBinding

  • fix testMultipleQueries(): no modified call on newly addd any more

  • fix testSimpleQuery(): no modified call on newly addd any more

  • code cleanup

  • cleaned up code by creating OnChangeCallInvestigator()

  • updated simulateSnapshotEvent() to better fit the original

  • fix for d0fe0bbf4accfee6071e98d283547ef33efe1e4c

  • code format

  • order of setting all-selected and selected-set during onRestoreInstanceState() changed

  • allSelectedSetTrue() docu fixed

  • selectAllUnselectable() docu fixed

  • selectReallyAll() simplified

  • selectAll() shall not alter currently invisible items

  • deselectAll() shall keep currently invisible items selected

  • moved selectedSet update to allSelectedSetFalse()

  • adding a new item to all-selected shall also select it

  • testTableViewAdapterFilterAndSelect() adapted

  • fix: an now unselectable item during all-selected did not trigger selectionChanged

  • fix: items no longer matching may not re-enable all-selected

  • all-selected will now be set to true again once conditions are met again (clearer behavior this way)

  • cleaner log output

  • speed: call updateStatus() for all features only when we have any rows

  • leave decision for all-selected to the TableViewAdapter

  • on finished loading now check if all-selected can be set to true

  • fixed docu

  • added allowEmptyUID to selectUID() and selectOnlyUIDs()

  • shorter output of debug map() function

  • removed onFinishedLoading in favor of finishedLoading.onChanged

  • fix: wrong index for safeNotifyItemsInserted on newly matching items after a change

  • fix: prepareAdapter() in UITableViewAdapterTestFilter waits for user login

  • use findViewHolderForLAYOUTPosition

  • added docu

  • only log "Minimal width needed for filter" if > 0

  • code simplified

  • fix: don't call LiveStats.inc if blocked

  • fix: remove outerView change listener on detach

  • fix: wrong data argument for informFeatures(Detaching) call

  • updateAll() now handles calculating preferred and minimum width
    updateAll() and updateHeaderAndFooter() are now executed directly without delay
    removed updateInProgress

  • compile fix: missed import

  • TableViewAdapter now supports multiple attached views
    TableViewAdapter now waits for restore() call before attaching to view from init() call

  • added dispose()

  • removed useless safe() call

  • connect() now automatically sets the pager's adapter

  • renamed LiveStats

  • renamed LiveStats
    LiveStats now uses a TableView for display
    don't use LiveStats on blocked TableViewAdapters
    Progress supports blocked

  • now have correct animations when resorting the table

  • fix: resizeGUI() animation always starts at 0

  • replaced selectionChangedIgnore() with delayUpdates()

  • mark internal functions deprecated

  • removeColumns() now by default removes all columns (and uses reverse order)

  • fix: TestMasterFragment needs a MasterMenuProvider

  • onAttachedToRecyclerView and onDetachedFromRecyclerView do not need a safe() call

  • fix: onMinimumWidthChanged has never been invoked

  • better detection of min possible width of empty view

  • only execute delayed jobs if no changes within 300ms

  • fix: widthPreferred must respect widthMin and widthMax also in Fill mode

  • code simplified

  • re-enabled "safe() call inside another safe() call" detection but only for Verbose mode

  • speed: Progress.titleTranslated only evaluated when needed

  • speed: TVRowBinding classes now inflate expansion only when needed

  • only print log in createCells() on cell changes

  • cache findViewById(R.id.cell_text) for faster cell drawing

  • removed unused bindingView and creatingCells tracking

  • safe(simple=true) now is faster

  • print shorter LogTag class names

  • ignore selectUID() and selectOnlyUIDs() calls with empty UID

  • better debug log for columns printing

  • compile fix for d0fe0bbf4accfee6071e98d283547ef33efe1e4c

  • avoid needless Progress() creation during onBindViewHolder and onCreateViewHolder

  • removed leftover code and reformated some code
    updated some doc

  • moved WelcomeFragment to CommonLib

  • added addMultiple() and removeMultiple()

  • expandHolder() now does the initialization of the sub adapter
    and makes sure the sub adapter has a suitable outer view assigned

  • TVBinding is now an open class

  • assertInput() now tries a few times before giving up

  • test code fix

  • quality improved:
    wait for available shop before filling table
    bail out if menuProvider or columns not available
    code simplified

  • added onUserChange to MasterActivity

  • fix: allow trigger() on result of all observe() and observeDelayed() overloads

  • fix: UITableViewAdapterTest may not get the correct table / footer

  • match() now translates isVisible with a user-defined Matcher for visibility

  • default implementation for toNiceString() based on position

  • fix: dispose() did not call onDetachedFromRecyclerView() as disposed was already true

  • more debug log

  • code cleanup

  • only collect LifeStats if developer mode is enabled
    better continuous collection of samples for 10s and 1m

  • code optimized

  • use alternating colors for DebugLiveView

  • fix / adaptions for revert commits

  • Revert "addQuery(), setQuery(), addDynamicFilter() and setDynamicFilter() now only add query with same parameters only once"

    This reverts commit 05b9ca31115faf62f2640028a37944ab47b182a0.

  • Revert "fix: take over owner of new StoredQuery when setQuery() has been used for an identical query"

    This reverts commit f8aec52d97e28bb09b6b3d6eba724ba40c8ba9c9.

  • fix: dspRegister() lost it's listener during GC run

  • fix: take over owner of new StoredQuery when setQuery() has been used for an identical query

  • code cleanup

  • addQuery(), setQuery(), addDynamicFilter() and setDynamicFilter() now only add query with same parameters only once

  • fix: in whenSynced() if state is Empty also invoke onSynced once state changes to Synced

  • doc fixes

  • speed: state is now a property

  • Revert "version bump"

    This reverts commit 0f6d15f29154a9baa821af205d698dbfadb09a7f.

  • version bump

  • code cleanup: removed unused workQueue property

  • code speed: using unmodifiableList and unmodifiableSet now in FirebaseResults

  • code format: introduced TVRow as main class of all data rows

  • code simplified: removed unused "source" parameter

  • Version 5.1.0

  • version bump

  • fix in selectFromDataPicker: wait until list is displayed completely

  • fix: clear old registeredGUIElements on destroy

  • code format

  • now automatically disposing PopupDialog and Picker on dismiss/hide

  • settings disposed flag now before dispose() is done running
    calling onDispose() now after most of dispose() has done running
    some detach... TableViewAdapter methods can be called after dispose()

  • now disposing attached adapter on disposal of PopupDialog

  • stop processing SnapshotListener results if owner's lifecycle is destroyed

  • code format

  • now avoiding App.activity for dspRegister

  • now avoiding App.activity for Progress.Active

  • code simplified: now directly checking lifecycle state

  • sync() and add() now longer need a LifecycleOwner
    now trying to avoid App.activity as LifecycleOwner for sync/whenSynced/setQuery

  • all listeners are no longer attached to the Activity but now default to alwaysRunning

  • all Observers are no longer attached to the Activity

  • all Firestore Listener like addOnSuccessListener() and addOnFailureListener() are no longer attached to the Activity

  • AlwaysRunningLifecycleOwner is now a singleton as alwaysRunning property
    StatefulLifecycleObserverList.observe() and QueueingInvocable now use alwaysRunning as default

  • layout of debug toString() for Position and Active changed

  • fix: remove LayoutChangeListener for the header on dispose

  • code format

  • introduced onActivity call with result
    fix: calls that use observers must be onActivity

  • don't block onDataChanged notifications anymore on addSnapshotListener() -- not necessary

  • typo fixed

  • code quality

  • added Reset Preferences and Clear Logs to Settings

  • fix: Picker could cause General Exception as doInit() calls updateGUI() too early

  • make sure title fragment stays right aligned of title text

  • changed icon of clear filter

  • code format: made all calls to registerGUIElement() cleaner

  • fix: registerGUIElement() for a MultiAutoCompleteTextView did not call saveData() on changes

  • saveData now calls onUpdateData before onCreateData
    docu fixed
    code improved

  • fix: if a FirebaseData change involves the object's label it may have to be resorted in the PaddedArrayAdapter

  • code cleanup

  • better toString() for Progress and Active

  • prefix progress during logging with its UID for better tracking

  • most logging on Invocables now back to verbose mode

  • property synced now is true even if data is confirmed to not exist in the Firestore
    fix: endless Active progresses as whenSynced never finishes on non-existing objects

  • fix: ignore "Cannot check version" update errors as they are expected

  • fix: tests no longer marked as failed if an exception is thrown

  • test adaptions for recent IVV.invoke() and observe() changes

  • code cleanup: introduced TitleButtonMapper

  • fix: FirebaseIcon could no longer be printed in PrintDocumentGenerator if it was mapped inside a FirebaseReference

  • fix: support FirebaseReference in ParamContext

  • fix: embedded images did crash the PrintDocumentGenerator since commit 78ba8bf82b48be89264c8bd026b117d98d440eb5

  • fix: never allow bitmaps to get width/height 0

  • fix: unregister disposed dialog

  • removed delayed()
    only using one postSafe() now that directly runs on the main/UI thrwad via a Handler
    fix: postSafe() may cause endless repetitions of the executed block
    renamed postSafe() that uses repeatOnLifecycle to postSafeOnJob()

  • removed unused updateEmptyView() call

  • removed unused code

  • code simplified

  • added source to Observer to provide better debugging

  • fix: reattach a TableViewAdapter if the previously attached view gets reattached to a window

  • fix: registeredGUIElements must not be disposed before onDestroy() is called

  • fix: ObserverLifecycle must not go down to DESTROYED but only to CREATED under normal circumstances

  • added assertNotDisposed to StatefulLifecycleObserverList

  • added assertNotDisposed to TableViewAdapter
    TableViewAdapter.dispose() now also cancels all jobs
    TableViewAdapterFeatures.dispsoe() now do better cleanups

  • added dispose and assertNotDisposed to PopupDialog
    added assertNotDisposed to Picker

  • added assertNotDisposed to FirebaseResults
    faster clearing of list on FirebaseResults.dispose()

  • using forEachSafe now instead of ArrayList(...)

  • code format

  • fix: make sure we still call to super also in case an exception occurred

  • added allSame property

  • fix: picker title was missing after content based update

  • can now use invoke also on null IVV's

  • fixed tests for newly added/modified layout IDs

  • added style for ScrollView to have a uniform layout
    added IDs to all fragment roots

  • fix: back button was still visible in embedded fragments

  • added property title to Picker

  • fix: AbstractListEditor in embedded mode could no longer set title buttons

  • fix: cannot detect anchor position correctly if inside a ScrollView

  • more debug
    simplified code

  • fix: during simulated drag&drop wait for folders to be closed

  • log improved

  • code refactor: extracted setup and teardown logic in TestingScenario

  • assertDatabase() actual function is now delayed until tear down

  • avoid possible IndexOutOfBoundsException

  • fix: if an expansion is denied, don't forward it to linkedDataEditFragments

  • added applyButton()
    PopupDialog now respects manually set buttons in show() / updateSize() calls

  • code cleanup, doc updated

  • test compile fix

  • Reapplied: "fix: adapter content not visible if last drawCell was while scaleX/Y was 0"

  • second call to show() is now forwarded to updateSize()

  • removed no longer needed show() call

  • added autoResizing property which defaults to false

  • code format

  • Revert "reduce number of updateSize() calls by calling delayed"

    This reverts commit 7276f93132689bd03966c7f27fb3306364020e43.

  • Revert "fix: adapter content not visible if last drawCell was while scaleX/Y was 0"

    This reverts commit 5270bb565d2e032e175d6f06d639934055b10327.

  • distinguish Modified now between ModifiedData, ModifiedExists and ModifiedSynced
    using Invoker.block now

  • reduce number of updateSize() calls by calling delayed

  • fix: verbose error output if a child is not a descent of masterLayout

  • fix: adapter content not visible if last drawCell was while scaleX/Y was 0

  • make saveState -- not responsible verbose

  • code format

  • show() now only shows if not yet visible
    added updateSize()

  • fix: downloadFromURL needs a safe()

  • added sliceSafe
    fix: crash possible if print() called outside of safe() with a small stacktrace

  • call notifyDataChanged during local-only update() only if there is a difference

  • added block() to Invoker

  • fix: crash possible in ObserverLifecycle() if called while App is not / no longer initialized

  • fix: icon adapter could no longer search for icons as FirebaseData can not be created in background thread

  • added caller to postSafe() calls

  • using own ChangeType class now

  • fix: for latest changes

  • code cleanup

  • only use notifyItemsAllChanged() for positionalLayout changes

  • removed handling of positional layout in safeNotify... calls

  • code optimized

  • added Invoker class
    invoke() calls are now operator

  • optimized imports

  • fix: dispose picker and their adapter if DataEditFragment is destroyed => fixes slow App after switching a lot of fragments because background adapters are still being updated

  • fix: detach adapter if attached view is detahced from it's window => fixes slow App after switching a lot of fragments because background adapters are still being updated

  • fix: less noise in debug log during global layout changes

  • fix: on update() calls for local FirebaseData, still call notifyDataChanged()

  • added support for inserting/removing rows/columns via drag&drop

  • added findChildViewNearest()

  • added log message to pause()

  • import cleanup

  • simplified onDataChanged observers

  • fix: dialog dismiss used wrong progress

  • print stack trace on icon search error

  • don't try to delete non-existing data in onDeleteData()
    updated doc

  • removed unused code

  • removed unnecessary "new" from some strings to improve clarity and conciseness.

  • removed too verbose debug log

  • nicer printing of DataRows in TableViewAdapterFirebase

  • fix: change notifications for positional layouts were wrong

  • code cleanup: make sure adapter setter is private

  • fix: wrong LifecycleOwner

  • code simplified: using direct observe() and observeDelayed() calls whenever possible

  • fix: wrong progress for drag listener

  • removed logging from setOnDragListener()

  • added ListenerRegistration interface to ObserverListenerReg

  • code optimized

  • better preferredWidth calculation in case a VarColumnGridLayoutManager with fixCellWidth is used.

  • added ignoreItemChange()

  • fix: don't dispose expansion adapters in setExpansionAdapter() that are still part of the list
    ExpansionAdapterChanged now has useful data object

  • fix: don't cancel drag&drop if source adapter is disposed while dragging and correctly support drag&drop over expanded adapters

  • added positional layouts with DataRow.position
    introduced ListIndex, MatchingIndex and ViewIndex
    added index to bindView() and onClick()

  • allow user formatting in debugPrint()

  • fix: don't continue to show dialog if dismiss() is being called immediately after show()

  • VarColumnGridLayoutManager now determines cell width based on adapters outerWidth

  • fix: if there are multiple adapters in a fragment, they overwrite their saved-instance-state

  • fix: possible endless show() chains

  • q() debug logs are now suffixed with "XXXXXXXXXX" again

  • applyCheckedAndMenuView() now supports specifying the main row to display

  • added parentAdapter

  • code optimized, more debug log

  • fix: widthNoColumns() did not return correct width if number of items was less then spanCount of one row

  • adapter is now an IV
    can now set adapter even after dialog has already been shown

  • renamed itemWithID to itemWithUID

  • allow multiple rows in bindView() for data rows

  • fix: wrong format string for setOnTouchListenerSafe

  • better labeling of title in DataEditFragment

  • added idString for better naming of Views and MenuItems in debug log

  • simplified title setting
    also title now automatically updates

  • make overrides final that are not meant to be overwritten again

  • fix: crashes in processing workManager result not caught by safe()

  • updated doc

  • fix: endless recursion possible while printing debug log for lifecycleOwner

  • fix: using wrong Progress instances for logging in some places

  • support translated versions of Progress title, and safe(), getClassName(), toNiceString(), toShortString() calls

  • fix: forwarding of data links didn't work anymore => could not edit products in folders

  • better debug log

  • fix: drag&drop was no longer working as function result was not passed on

  • changed order of parameters: always first LogTag, then Progress, then LifecycleOwner
    removed progress from attachedLifecycleOwner
    removed progress from StoredQuery
    progress continues for Firebase data change events triggered by a FirebaseDataBatch
    progress continues for ViewHolder Bind triggered by a delayedNotify

  • changed order of parameters: always first LogTag, then Progress, then LifecycleOwner

  • code cleanup

  • don't print empty Progress on simple/initial set calls

  • removed owner and progress from observe()
    added progress to remove() and trigger()
    made Lifecycle entry points safe

  • renamed safeReturn() to safe() and removed old Unit-return safe() functions

  • moved log functions from MyLog to LogLevel
    renamed logTag into lt
    reorganized imports

  • removed unused functions again

  • moved listener functions to Listener and using combined signatures

  • fixes for removal of ImmutableList

  • extracted all DateAndTime relevant functions from Utility

  • compile fix

  • removed asImmutableList

  • additional commit for moving IV

  • updated imports

  • updated TODOs

  • re-apply mail after rotation changed

  • extracted IV to separate file

  • fix: sorting always returned true

  • fix: changes to the shop's name or icon were not reflected on the Navigation Bar header

  • back press now closes any open dialogs first

  • improved code for onBackPressed()
    fix: make sure onBackPressed() is correctly forwarded also in cases there is only one fragment on the back stack

  • fix: may cause general exceptions while not attached

  • moved FragmentStateAdapterWithIcon to CommonLib
    FragmentStateAdapterWithIcon now supports fixed list of fragments and forwarding of back presses

  • EmptyFragment now derives from MasterFragment

  • fix: don't show a multi-select button for pickers that use single-select mode

  • code cleanup

  • compile fix

  • put cell edit menu entries in a sub menu now

  • better debug log

  • force CallSuper on onInit() from TableViewAdapterFirebase

  • dependencies version bump

  • removed embedded fragments as they had too many unexpected side effects (replace with ViewPager2)

  • fix: removed embedded fragments are now also removed from supportFragmentManager => fixes old main menu entries may still be visible

  • MasterFragment now catches all transition states in a similar way
    MasterFragment now forwards all events to embedded fragments
    MasterFragment now removes embedded fragments during onDestroy instead of onStop

  • create docu about state transitions

  • added onViewStateRestored() and onDestroyView()
    removed onRestoreInstanceState()

  • added "State-Change" progress plus logging for better overview of fragment transitions

  • making observer state-change log verbose

  • fix: restoring previous data edit content did not work anymore

  • fix: trim spaces (per default) on user entered text

  • compile fix: recursive check problem

  • Version 5.0.0

  • version bump

  • support reopening of Number and Data picker in DataEditFragment

  • fix: PasteNewAction should only be executable if exactly one item has been selected

  • fix: don't replace GUI content from data if a picker dialog is currently open

  • log improved

  • improved addOnFinishedTypingListener() with hideText

  • fix: don't print passwords to log

  • added hideText parameter to addOnFinishedTypingListener()

  • check for enabled state before doing a click action

  • better log output

  • added debug log

  • code cleanup

  • made FirebaseData companion functions more type-safe
    added more docu
    removed getExistingOrLocalData

  • warning fix: made logTag final

  • added findExistingData()

  • added maxBatchSize

  • fix: selectInIconPicker did not respect having no current icon

  • fix: don't show empty introText line

  • no longer display log warnings to the user

  • better output of database comparison

  • better debug log

  • code simplified

  • debug log optimized

  • toString optimized

  • fix: onDataChanged is expected to also be called on sync state changes => fixes empty list of tills directly after user login

  • fix: ConcurrentModificationException possible in Progress if called from another thread

  • more debug log

  • added "disableAutoFill" to SharedPreference

  • clickOn() now supports re-click after accidental long-clicks

  • mark forcePrintHierarchy() as deprecated to avoid accidental use

  • fix: selectInIconPicker() needed adaptions for latest changes

  • mark pause() as deprecated

  • removed unused gitignore file

  • ignore login if user-mail is empty

  • ignore commiting empty refIDs

  • fix: clashes paths for database setup if they are coming from DatabaseSetup and DatabaseSetupParams

  • moved tests to CommonLib

  • DatabaseSetup no longer needs fixed user IDs and commits database one collection at a time

  • BundleAndSharedPreferencesTest does not need an activity

  • fix: added handling of empty defined resource IDs from MasterActivity

  • moved RedirectUriReceiverActivity activity declaration to CommonLib

  • TestMasterActivity now functioning
    added TestMasterFragment to TestMasterActivity

  • moved some dimens to CommonLib

  • split Test Utility file into several files and moved them to CommonLib embedded folder
    moved CommonLib specific tests to CommonLib embedded folder

  • no need for manual .CREATOR calls anymore

  • docu typo fixed

  • calling all CREATOR for getCollectionPath() now during App.onCreate

  • fix: Instant.formatString displays time zone twice
    code optimized for Instant.formatString

  • Instant.formatString now uses DTFields instead of subParts and supports locales

  • fix: doSet from IV has not been used anymore

  • added IVSet and Set.contains... methods

  • App.str() supports locales

  • fix: merge conflict

  • Merge remote-tracking branch 'origin/master'

    # Conflicts:
    # library/src/main/java/com/hoffmann/commonlib/Invocables.kt
    # library/src/main/java/com/hoffmann/commonlib/ui/PopupDialog.kt

  • code quality: using IV when possible
    avoiding var in data class
    IV now has isDefault property

  • DataFragment linking can now be forwarded to expansion adapters

  • updated docu

  • fix: may get ConcurrentModificationException

  • fix: setting selectedMulti or selectedSingle to the same value as it already is did not update multiSelect to true or false

  • fix: edit context entry click may accidentally change the filter of the column instead

  • fix: don't add same editable columns twice

  • added onInformFeatures

  • fix: forwardSelectionVisible checked for wrong flag

  • added TVAction.ExpansionAdapterChanged

  • can now add additional columns only for edit context menu

  • display edit entries in context menu for all editable columns

  • ifAllSame() now works on Iterable

  • contextMenuID is now IV

  • changed signature of onEditInputPopup()

  • fix: make allSelected setter private

  • setting selectedMulti to all items will now enable the all-selected button
    renamed select to selectUID to avoid name clashes
    added selectOnlyUIDs()

  • fix: always use Array types now in Bundles

  • support enabled state change

  • gradle and library version bump

  • added resize parameter for updateGUI()

  • added support for manually typing seconds

  • added support for seconds

  • storing all data now in Bundles
    can now save instance-state also if no tag applied to the adapter

  • added Bundle.saveToSharedPreferences
    added Bundle.loadFromSharedPreferences

  • avoid name clashes with compareValues() from library

  • code simplified

  • fix: restoring filter for ColumnHeaderFirebaseData and ColumnHeaderFirebaseDataCollection did not work

  • fix: if empty-view warning was visible, filters could not be clicked on anymore

  • updated imports

  • more toString()

  • simplified stored state data

  • AbstractListPicker and AbstractListEditor now store their adapter states

  • with allowDeleting disabled, a normal menu button can now be used instead

  • fix: contextSubMenu wasn't inflated with contextMenuID so it only worked if a DataRow specific context menu was displayed before

  • more logging

  • show data edit menu in context menu for linked DataEditFragments

  • fix: call updateMenuState after executed a DataEditAction

  • fix: remove any old listener first before calling registerOnListChange

  • more debug log

  • fix: missed onAttached call during onResume

  • added toString() implementations for all classes using logTag

  • TableViewAdapterFirebase now supports linking to DataEditFragment

  • docu fixed

  • each Feature has its own logTag now and a toString() implementation

  • added onAttached observer

  • added onFeatureListChanged

  • multi-selection is now also possible if no contextMenuID has been set

  • fix: Crash possible in PasteNewAction
    fix: PasteOverwriteAction always accepted all clipboard content

  • fix: clear context menu before adding new items

  • code cleanup

  • docu fixed

  • better debug log

  • better toString

  • better toString

  • Can now correctly restore a PopupDialog that has a Picker attached
    Can now restore Pickers that are part of other Pickers
    Picker got pickerID
    Dialog got dialogID
    MasterActivity.dialogs now holds all dialogs, whether visible or not, and only as WeakReference

  • small code optimizations

  • support setCanBeReopenedFrom for MasterActivity

  • fix: wait for restore calls until Activity binding is done completely

  • code simplified

  • return dialog from show()

  • better logging

  • also support dialog recreation for MasterMenuProvider's onMenuItemSelected

  • allow dialogToReopen to be called asynchronously

  • code optimized

  • small code optimization

  • small code optimization

  • added toString to PopupDialog

  • support reopening of ConfirmationDialog

  • fix: also reopen context menus when rows do not yet exist at the time onRestoreInstanceState is being called

  • removed useless log

  • fix: don't save and reopen dialogs during clear() calls

  • fix: don't call onRestoreInstanceState twice in case adapter and menuProvider are already setup during onCreateView
    fix: call onRestoreInstanceState also for adapters that are added later to an existing MasterMenuProvider

  • menuProvider variable is now IV

  • also provide previous state Bundle when re-opening context menu dialogs

  • now supporting reopening of context menu dialogs of TableViewAdapter

  • introduced special setter for canBeReopenedFrom

  • fix: make sure inHistoryState is always reset

  • fix: make sure we are initialized when connect() is called

  • fix: take over selected icon immediatly to avoid attaching it to a wrong product if user changed product-to-edit quickly

  • updated MultiAddDialog to be a subclass of Picker and to support more configuration and save/restore

  • moved MultiAddDialog to CommonLib

  • code and debug log optimized

  • provide class name in DataEditFragment's dataNiceString

  • can now recreate dialogs attached to title fragments, too

  • improved IconEdit to allow threshold and intensity setting and to support restorable dialog
    improved IconSelect to show clipboard content directly in result list and to support restorable dialog

  • now support restorable dialogs and pickers for several default picker implementations

  • fix: only call updateGUI() in case we already have been initialized => selectedSingle() now is not reset immediatly again

  • BackgroundImageView now uses primaryColorDisabled style

  • updated style for DefSlider

  • added addOnChangeListenerSafe for Slider and RangeSlider

  • only print debug log if min width really changed

  • updated doc

  • setMin/MaxLayoutWidth/Height now return their previous value

  • fix: crashes possible for ColoredArrayAdapter as it had not been adapted to the new holder_spinner_item layout

  • fix: prioSortOrder and lowestSortOrder were only applied if a column-based sorting has been enabled additionally

  • implemented restorable dialogs

  • fix - new attempt for Date picker day layouts too narrow

  • update docu

  • fix: duplicate requestLayout calls

  • fix: Date picker day layouts too narrow

  • fix: if an object got removed, set exists() to false

  • updated doc

  • better debug log

  • fix: text-empty message was never clickable

  • fix: text-empty message was not visible for full and vertical table styles

  • make dynamicNavMenus public

  • fix: fixed-text columns did not consider attached Drawables
    added widthFixedDrawables

  • code cleanup

  • provide examples for advanced CSV settings

  • fix: compare selected against allSelectableItemCount instead of allItemCount

  • support HTML print and (HTML and PDF) table generation
    combine Share and Mail to App

  • fix: make a measureRun before isReady check

  • added parameter for barcode to feature list

  • optimized code

  • added printToHTML

  • better debug log

  • fix crashes after reducing number of visible items due to global search

  • more debug log

  • fix for test cases that have no Activity

  • updated testDocumentParser to reflect latest changes (no implicitly created Column tokens anymore)

  • fix: show active progresses as done after catching a general error

  • capture possible crashes during onLayoutChildren like when reducing item count due to searches

  • added allSelectableItemCount

  • added TextInputLayout.setText()

  • better type specifications for AdditionalExport and default implementation for export()

  • can now long click on a selection check-box to open an advanced menu

  • added toggleAll and selectAllUnselectable

  • fix: DataEditMenuProvider did not provide the correct menu item if a sub menu has been clicked

  • fix: don't show advanced settings per default

  • fix: column selection table was not visible

  • more (and optimized) debug log

  • fix: PaddedArrayAdapter may ignore add and remove calls if a filter is active

  • can now set PrinterSize parameters individually

  • can now add Document manually to PrintDocumentGenerator

  • fix: exportTitle shall return String and not IV

  • added FormatReason.Exporting

  • typo fixed
    code simplified

  • added support to right align drop down items text

  • code cleanup

  • using shorter string representations in some situations

  • fix: too verbose printing of DynamicList

  • support printing date ranges where one boundary (or both) is unset

  • code simplified

  • fix: table may be too small to contain the filter GUI

  • Empty Text View now correctly wrapped and positioned

  • fix: column title could be too narrow if both filter and sort icons are displayed

  • animate() now uses a Progress object

  • improved some debug logs

  • using IV and IVV on more possibilities
    providing logTag and valName to IV and IVV

  • Can now send debug snapshot directly from settings

  • fix: contentDescription for context sub menu button has not been set

  • AbstractListPicker now supports allowCreateNew

  • invocables now support nullable type as argument

  • code simplified

  • now using menu item for header context menu instead of altPrefix
    fix: click on header no longer triggers TextInputLayout in dropdown_menu endIconMode

  • code cleanup

  • fix: isSelected() returns true for unselected items in select-all mode

  • fix: searchTyped() called twice if search suggestion has been selected from dropdown box

  • matchingSelected no longer contains unselectable items even in selectAll mode

  • updated docu

  • code optimized

  • gradle and library version bump

  • updated docu

  • added summarizeRanged()

  • renamed setAdapter to internalSetAdapter

  • DataRow now has a link to the adapter it is being used in
    isDeleted and isSelectable are now IVV

  • now only summarize rows that have not been marked deleted
    updated docu

  • code cleanup

  • more docu

  • make Picker init() public

  • call updateView() after onResume() call instead of before

  • onOK is now optional for show()

  • fix: removing Filtering or Menu support may not have hidden the search icon

  • fix: calling setSearchQuery() with empty text may not have cleared the filter

  • added support for recent search history

  • disable search button now when there is no adapter capable of filtering

  • added drawableColorResource property

  • plugins version bump

  • Version 4.1.1

  • version bump

  • added levenshtein() and levenshteinRelative()

  • zipWithFill() now supports filling first and second lists

  • renamed FQ to query
    added whereInShop()

  • code simplified

  • added deleteNestedFields()
    added docu for deepCopyNestedFields

  • AbstractListEditor and AbstractListPicker now correctly update their content on updateGUI() calls

  • RegisteredGUIElement() for PopupListPickerFixBinding now takes care of embedding the view into the editor

  • update() now updates locally only if an object does not yet exist in the database
    added updateAndCreate()

  • better docu for exists property

  • fix: actualHeight may use too much space

  • make base public

  • some compiler warnings fixed

  • libraries version bump

  • Version 4.1.0

  • version bump

  • informFeatures log output now verbose

  • fix: if called from tests without Activity, use AlwaysRunningLifecycleOwner

  • made setLayoutFromData public (again)

  • DefEditLayout now has a predefined minimum size

  • fix: registerGUIElement() for editable auto-complete fields did not trigger a saveData() on direct edits from the user

  • fix: onPasteOverwriteData() missed actual assigning from clipboard in case a new object has to be created

  • fix: lateinit json was not initialized in PasteOverwriteAction -- second approach

  • more detailed docu

  • fix: lateinit json was not initialized in PasteOverwriteAction

  • fix: valueSane() needs a recent call of updateGUIState()

  • fix: dismissOnClick did only work on first invocation of an AbstractListPicker

  • must now press back twice to exit app

  • more docu for isLessThen and isSameAs

  • better toString() for DataRowFB

  • fix: removing a filter when all items are selected shall not selected newly visible items

  • filter width can now be changed dynamically based on user selection

  • PopupDialog now updates its size when preferredWidthChanged()

  • changes in Fill-type columns now also call preferredWidthChanged()

  • fix: setting / changing empty_view must also call preferredWidthChanged()

  • data() and dataCrete() now public
    ListPickerRow allows setting of uid

  • better debug log for lifecycleOwner() return value

  • fix: isShowing will now be true also during fade in animation

  • added debug log to ObserverLifecycle

  • fix: consider margins when calculating needed dialog size

  • fix: dismiss clicks during hiding animations did not get passed to dialogs beyond the current one

  • made dialog a bit larger

  • it is now possible to enter negative values in enter-as-notes mode (50Euro will be replaced by "-")

  • code simplified
    fix: in enter-as-notes mode, history has not been filled, so no undo was possible

  • fix: return defColumns for columns if there is none explicitly set

  • only invoke addOnLayoutChangeListenerSafe if there really is a change

  • better debug output

  • added minimumWidth()
    Fill-width columns now use their content when returning preferred width
    fix: Fill-width columns not correctly consider remaining space as they calculated their own minimum width as already occupied

  • fix for popup titles getting too huge
    removed showWithPreferredSize and instead added adapter property

  • fix: reopening a dialog that was in hiding animation did nothing
    fix: old GlobalLayoutListener where not destroyed
    fix: title width may get too huge
    better calculating width if title is larger then content
    better calculating height if content is embedded in a ScrollView

  • more log for animations
    fix: Don't call End on a canceled animation

  • addOnGlobalLayoutListenerSafe() now works on View and has more detailed debug output

  • added coerceInSafe()

  • added val ident

  • changed some logs to be verbose

  • fix: closing open navigation menu captured all back presses

  • fix: empty line before details if only enterText given

  • can now only delete a user if it's really the currently logged in one (should always be the case anyway)

  • delete shop warning is now customizable

  • code optimized

  • using whole dataList (but should be the same as just data anyway)

  • using default lifecycle

  • fix: committed for every entry of datalist

  • updates to deleting user while part of shop / admin of shop
    onCreateNewUser() can now be processed delayed

  • now closing open navigation menu on back press

  • removed duplicate log

  • delete takes precedence over a create or update for the same ID
    no two create or delete for the same ID

  • fix: debug print of field differences for primitive types like int, long, bool showed the old value twice instead of old and new

  • added enterText()

  • split processing batches into separate parts now if more then 300 entries

  • fix: now correctly deleting user object if user account is being deleted

  • fix: also show logout button if editing current user

  • fix: don't reset entered password on setDataFromLayout()

  • added createChangeLog parameter

  • fix: only allow Apply if email and password have been entered

  • show logout as button if room

  • fix: CreateUserFragment never showed as !login

  • better intro text for CreateUserFragment

  • typo fixed

  • code simplified
    added prompt()

  • changed "Logout" button in Navigation Bar to "Logout / Edit"

  • added ic_admin icon

  • fix: Create New User may not correctly set name and mail
    removed fallback creating of User as it may interfere with normal creation

  • fix: make sure setDataFromLayout() is called after user clicked "Next"

  • setLayoutFromDataNow() no longer needed here

  • fix: may use wrong hint on error messages

  • fix: check data exist for != true instead of == false

  • imports updated

  • fix: name field was always visible
    fix: enabled state was not correctly applied to name and mail fields

  • fix: missed valueSane parameter

  • fix: correctly remove entered mail on back press

  • updated function scopes

  • now setting enabled state of edit-views also during updateGUIState()

  • more debug log

  • renamed updateDataAndLayout to setDataFromLayout
    calling setLayoutFromData from onViewCreated now

  • allow duplicating not yet created objects and don't auto create source objects

  • more debug log

  • fix: updateGUIState after onViewCreated

  • make sure we always have an entry in dataList, even if none explicitly set

  • added allSame to updateGUIState parameter
    added valueSane parameter
    added registerGUIElement() for AbstractListEditor

  • fix: expandedToRestore now also works on items after they have been made visible because of modification
    more debug log

  • internalChange now uses a counter
    updateGUI now uses a try finally block

  • added onClicked()

  • added onUserChanged()

  • code simplified

  • allow paste new only if exactly none or one data objects are being edited

  • added docu

  • fix: Duplicate and Paste New didn't switch to the newly created data objects

  • fix: RegisteredGUIElement.setDataFromLayout() has been called too often after user set a new value once

  • added general shops icon

  • fix: show() shall not reset position if the user moved a dialog

  • fix: error in ArrayAdapter if mOriginalValues contains less items then mObjects

  • more debug output

  • compiler error fix: toString() does not work on null reference

  • docu fixed and code format

  • fix: use dataNiceString for progress text

  • added selectOnly()

  • compiler warning fixed

  • better debug log for RegisteredGUIElement

  • more debug log for addOnFinishedTypingListener

  • fix: pending listeners for EditText was never invoked
    added onBeforeListChanged

  • better debug log for invoking pending listeners

  • registerGUIElement for TextInputLayout now forwards to registerGUIElement for EditText

  • removed unused targetSdk from lib kts script
    added user defined versionName to lib kts script

  • libraries version bump

  • fix: Icon Picker did not initially start searching

  • added registerGUIElement() helper methods
    rename isValuesSane to checkIfValuesSane
    added observers to PaddedArrayAdapter

  • DataEditFragment can now edit multiple items at once
    - now uses a list of type T for editing
    - now have two paste versions: paste new and paste overwrite
    - changed semantic of return values from onUpdateData and onCreateData
    - predefined actions can be easily customized with onCopyData, onPasteNewData, ...
    - added deepCopyNestedFields
    - added dataNiceString
    - more debug log
    - more docu

  • added forwardSelectionVisibleToExpansionAdapter

  • added toString() with a short summary

  • added functions forEachSafeIndexed, allSame and ifAllSame

  • added DynamicListFB

  • using sequence now instead of iterator() to loop over JSONArray

  • using sequence now instead of iterator() to loop over JSONArray

  • using RuntimeException now so we have a "caused by"

  • added more docu

  • fix: assignFromFieldsMap() did not work with JSONArray as source

  • fix: writeToJSON() did not correctly resolve fields with lists

  • added additionalModifications to saveData()

  • allow setAll with varargs

  • combined getIcon, getDrawableSize and getDrawable

  • added simulateSyncWithoutUserLoggedIn

  • suppress UNCHECKED_CAST as can only be the correct type here

  • allow using getExistingIcon() without as shop (during test runs)

  • added equals() toString() and logging

  • fix: DynamicList.size always returned 0

  • toDetailedString() simplified

  • import removed

  • added DynamicList as replacement for ArrayList in FirebaseData/FirebaseStruct
    removed direct FirebaseData val support

  • docu updated

  • consider icons when using dynamic column width

  • fix: column resize handler was on wrong position

  • code simplified

  • register listeners only as long as drag&drop is active

  • fix: dragging of non-modal dialogs did not work

  • fix: querying for Iterable values like with whereIn() caused Serialization errors

  • fix: don't overwrite title and icon from an embedded fragment

  • code simplified

  • added hideCell()

  • init() now does not indirectly invoke restore()

  • updateAll() now also calls preferredWidthChanged()

  • code simplified

  • clear() now only calles onListChanged etc. if there were items before

  • typo in docu fixed

  • suppress deprecation in cases the call is intended

  • better debug message

  • fix: wrong timestamps for Log entries after reading back from CSV

  • fix: duplicate elements error in Log view

  • fix: error messages about missing header may not have been correct
    updated code

  • fix: toView() did not draw images without an imageSize set

  • fix: missed position argument

  • setDrawable() allows null argument

  • Version 4.0.0

  • version bump

  • allow title for setOnDragListenerSafe()

  • fix: missed some string translations

  • fix: enableAdapterMenu() did not work

  • code optimized

  • fix: also resize rows that have a negative width

  • fix: also resize rows that have a negative width

  • code simplified, more debug output

  • fix: wrong offset when converting LocalDateTime to Instant

  • removed all remaining uses of Calendar class

  • fix: wrong timezone may be displayed in formatString()

  • warn about missing cells during bindView()

  • removed debug code

  • allow up to -50 years in date range check

  • removed unused imports

  • fix for 30cc9f6d63bf3dcf8ae916213a105bc4d5265fa7: width shall only be set in case of fixed or WRAP_CONTENT

  • using Instant only now for internal date/time and LocalDateTime only for user specific date/time

  • use SafeLinearLayoutManager to avoid crashes due to RecyclerView bug: IndexOutOfBounds when number of visible items gets reduced during refresh (for example because of filtering)

  • ignore sync and ifSynced calls while no user is logged in

  • more debug logging

  • fix: searchTyped() uses forEachSafe

  • ignore duplicate calls to addAdapter()

  • fix: setEmptyViewVisibility() did never set clickListener

  • fix: onUserChangeObserved was not called if only shop sync status changed

  • rewritten onUserChangeObserved()
    fix: allUsers must also be set up for LoginUserAndShopButNotSynced

  • fix: may crash during notifyDataCreated() because of concurrent modifications

  • added LoginUserAndShopButNotSynced for cases when a shop has just been created

  • always show preselected icon

  • setting width also for rows in LinearLayoutManager

  • using simpler layouts than ConstraintLayout for speed reasons wherever possible in holders -- cannot use in table layouts as cell width would not be applied correctly anymore

  • Revert "using simpler layouts than ConstraintLayout for speed reasons wherever possible in holders and table layouts"

    This reverts commit 4e3c914ed478afc6a9eaad60be6fbfa8c87d211e.

  • storing cells now as Views instead of ViewBinding
    no longer providing whole list of cells and columns to each bindView() and bindExpansion() call

  • using simpler layouts than ConstraintLayout for speed reasons wherever possible in holders and table layouts

  • fix: OnGlobalLayoutListener() may make an old dialog visible again

  • added isSet for Collection

  • added strings error and warning

  • fix: wrong contentDescription for multiSelectItem

  • fix: do not provide a new Progress for OK or Dismiss clicks in dialogs but instead continue the current one

  • using @Format... annotations now also for printing short and nice strings

  • expandHolder() supports call without a sub adapter

  • introduced FirebaseStruct
    FirebaseData now supports lists of FirebaseStruct

  • ColumnHeaderTimestamp uses defZone for displaying time

  • sentinel to avoid onCreate() being called twice

  • don't print a visible Progress start log for MyLog.q()

  • make sure the text fits to valueForDisplay as soon as connect() has been called

  • added date_time_picker_popup for access during testing
    code format

  • setLayoutFromDataNow will no longer be able to trigger another setLayoutFromDataNow while

  • fix: toCalendar may resolve in wrong timezone

  • fix: isSameAs() may not work if affected by daylight saving times

  • using Calendar quick fields from Utility whenever possible

  • better readable toDetailedString() for Timestamp and alike

  • using Calendar quick fields from Utility whenever possible

  • If two or more instances have the same tag, they will now share all properties saved under this tag

  • added docu for dspRegister

  • added toDetailedString() for all date/time types
    more debug log in DateTimePicker

  • hide instead of disable items not allowed in current context
    remove "Show hidden columns" from the list to make it lighter

  • fix: changing visibility or width of a column wasn't saved persistently

  • fix: handle summarizing of values that may contain unSet values

  • fix: title parameter in PopupDialog has not been used

  • removed anchor, dialogWidth and dialogHeight parameter in favor of explicit calls in doInit()

  • fix: ifZero and ifNotSet did not accept null returns

  • fix: toFixString did not accept NaN

  • code cleanup

  • fix: return value of onDoneNumberPricePicker after overwritten in sub classes did no longer accept null

  • fix: wrong resource ID in title may cause UnknownFormatConversionException

  • fix: applyTextStyle could not overwrite STRIKE_THRU_TEXT_FLAG flag as it was set afterwards

  • typo fix: ein/eine

  • code simplified and wrong progress fixed

  • added allowUnset to NumberPricePicker

  • fix: dismiss clicks in Editor do not apply the data as they should as Editor is always live

  • fix: btnOK may be set to disabled if okAllowed is false, even if btnOK is overwritten, for example in Editor

  • added isSet and unSet

  • fix: contentDescription may get null and causes crashes

  • applying user to App.model now only if a change has been indeed detected

  • using LoginUserAndShop now also if shop is assigned but existence not yet confirmed

  • code cleanup

  • added onCreateNewUser()

  • fix: now using verifyBeforeUpdateEmail instead of obsolete updateEmail

  • fix: now checking for existing mail addresses by creating a temporary account and deleting it again, instead of obsolete fetchSignInMethodsForEmail

  • introduced general FragmentScrollingTableViewBinding

  • more debug log

  • fix: use forEachSafe in onClear()

  • added validInputMinCount and validInputMaxCount

  • removed unused data() and dataUID() from AbstractListEditor and provide default implemenations of onMultiAdd, onDelete and onClear

  • fix: matches() did not compare FirebaseReference correctly
    fixes products may ba added as multiple entries in basket

  • better toString in FirebaseReference

  • docu typo fixed

  • added type_data_collection

  • made some logs verbose

  • fix: select() shall never set allSelected automatically

  • FirebaseDataCollectionFilter can now highlight partial matches

  • fix: DateTimePicker now hadles time zones

  • formatSubParts is now a setable property
    ColumnHeaderTimestamp allows setting subParts
    added isLessThen for Timestamps and alike to Utility

  • ColumnHeaderFirebaseData allows selecting multiple values for filtering

  • using clearFilter() whenever possible
    fix: pass empty set to onChanged() if editing a cell instead of a filter

  • added FormatReason to formatValue() and parseValue()
    added compareValues() for D type

  • removed unused code

  • can now display only subParts of a Date/Time format string

  • using tooltipText now parallel to contentDescription

  • code format and quality

  • fix: IV fields shall always be val not var

  • replaced all direct FirebaseData fields of any FirebaseData child with FirebaseReference fields

  • made fClass non-null

  • reorganized imports

  • now longer passing Fragment around for Adapter, Picker, Editor, PaddedArrayAdapter instances
    showPopupMenu() now longer needs a context

  • added observe() that uses AlwaysRunningLifecycle

  • extracted PopupDialogLifecycle into ObserverLifecycle

  • code cleanup

  • fix : list was not completely visible

  • FirebaseDataEditor inherits from AbstractListEditor now

  • code cleanup

  • made searchTextColumnsList private

  • fix in registerClickListener: assigned listener to wrong view

  • added onContextMenuButtonClicked

  • added can...() methods

  • generalized embedded to be any kind of View, especially from popup_list_picker_fix.xml as alternative to popup_list_picker.xml

  • added BindReason to bindView()
    removed contextMenuButtonClicked from TableViewHolder
    added ColumnHeader.registerClickListener()

  • added general_error_.. strings

  • added TVBinding to generalize init()

  • changed validInput to checkValidInput

  • created AbstractListPicker

  • fix: layoutParams can be null in some cases even if compiler misses a warning

  • bindView() now takes over width from VarColumnGridLayoutManager

  • docu fixed

  • more debug log

  • init adapter only in doInit() if not already done

  • call updateGUI() after changes to selection (mode)

  • all observer data class now only have a disallow() instead of an allow var

  • all observer data class now only have a disallow() instead of an allow var

  • fix: notesVisible not correctly initialized
    removed unused pickerTypeConnection

  • fix: initially displayed value was wrong in NumberPricePicker

  • fix: releaseCells() did not actually remove the cells

  • fix: concurrent modifications possible in progress indicator update

  • more debug log

  • fix: don't call onReferenceChanged if setting same FirebaseReference again => fixes infinite refreshes if user is not in a shop yet

  • fix: crashes possible in OnFinishedTypingListenerRegistration if no hint set for TextView

  • adaption for latest ListPicker changes

  • code cleanup

  • more debug log
    typo fixed in select docu

  • split onNewLog into onWarning and onError to make clear that only these types are used

  • fix: call onHide() *after* onShow() so in show() the registration of onShow() will not be removed again before it has been called

  • better generic type declarations for AbstractListPicker
    fix: setting selectedMulti or selectedSingle before calling show() now caches the calls

  • fix: don't try to auto-set the shop on new objects if the App is not yet initialized (normally only during database setup before a test case)

  • fix: changing the column's title will now adapt the width if it is too small now

  • set invisible Fill columns to minimal width

  • using separate Progress instances now whenever possible
    using safe calls for (nearly) all top level invocations
    using IV now for all(most) properties that need a Progress in their setter
    App.str now uses toNiceString() for formatting FirebaseData and DataRow
    Dialogs no longer overwrite btnOk if not really necessary
    intern functions now have a Deprecated warning
    added new AbstractListPicker class to combine all table based pickers
    TableViewAdapter now has an init() function

  • auto set shop during object creation if FirebaseData is PartOfShop

  • introduced save() method to catch errors during Task Events

  • added docu

  • added calendarViewBegin and calendarViewEnd access for testing

  • introduced save() method to catch errors during Task Events

  • fix: set all days, nights and months to 0 on invalid range

  • make fClass public as it's needed for type checking

  • debug log typo

  • more debug log
    fix: negative (invalid) ranges may result in number days == 1 instead of 0

  • fix: setting numberDays may result in wrong values if elements like year were invisible

  • minDate and maxDate only use their visible components now
    also validInput() now checks only the visible components

  • layout fixes for DateTimePicker: using Flow now for the number... fields
    also make sure number... fields never go to negative values

  • fix: use MATCH_PARENT when adding introComponents

  • updated calendar and timstamp() helper functions to allow single arguments and removed unused versions

  • fix: return zeroed values for *all* fields that are not being used now

  • fix: after ren-enabling Menu support , both selection and menu icons may be visible on the DataRow

  • fix: after ren-enabling Menu support or creating an adapter after onCreateMenu, the menu buttons have not been added

  • added more logging

  • code simplified: added informFeatures

  • compile fix

  • fix: refresh after removing columns feature

  • fix: refresh after removing selection feature

  • fix: call init() *after* adding the new feature
    fix: call dispose() *before* removing a feature
    added disposed() *after* removing a feature

  • fix: cells have not been removed / unbound after a column has been removed
    added removeCell()
    cellList access is now private

  • code cleanup

  • fix: disable its filter if a column is removed

  • moved preferredWidthChanged to TableViewAdapter

  • code cleanup

  • fix: all update() in all cases when setting contextMenuID

  • docu updated

  • multi select and share options now contain the localized plural name so they can be distinguished

  • moved search action to the MasterMenuProvider

  • fix: disable selections may call onSelectedChanged one last time

  • fix: disable filtering may still show filter context menu entries and highlight matches

  • fix: FeatureChanged was called *before* the feature has actually been enabled

  • minimal width of a column now respects the sort symbol's size next to the title

  • preferredWidth now respects emptyView's text if there is any, and respects a minimal width for Fill columns

  • better debug output on widthPreferred and heightPreferred

  • added compound_drawable_size

  • fix: PopupDialog may be too narrow in case of a title larger then the content of the dialog

  • fix: clicking on background of a PopupDialog closed the dialog

  • MasterMenuProvider now supports multiple adapter
    no longer have a fixed multi-select item
    the context menu is now visible only after clicking multi-select

  • code simplified

  • print updateStatus log as verbose

  • huge speedup of filtering large lists

  • speed: doing reverse after filtering and only as a View

  • allow removing tag and progress based logs again

  • removed reallyVisible

  • now caching all cell width's of a dynamic row for faster width determination

  • fix: resize handler icon may be drawn at same position then sorting icon

  • cells now use all vertically available space inside their column

  • added updateInProgress and layoutInProgress

  • fallback for outerWidth() now is the masterLayout's width

  • the user can now open the context menu by long clicking on a row
    cell / header now correctly change color during touch
    contextMenuButtonClicked() now provides the clicked column

  • fix: In DateTimePicker the "to" label was not correctly positioned in some cases

  • fix: popup dialog title bar sometimes didn't use the whole width available

  • PopupDialog can keep its position if it has just been resized to avoid jumping around on the screen

  • using OutlinedBox style for Spinner now

  • PaddedArrayAdapter now makes sure the TextInputLayout is always large enough to show it's content unwrapped

  • renamed "set Min/Max Width/Height" to "setLayout Min/Max Width/Height" avoid name clashes

  • code format: using items as Iterable now

  • code format

  • detect visible display size changes and reposition the dialog (for example after toggling keyboard)

  • added move() with fill argument

  • fix: didn't call Modified in unfiltered lists

  • added id prefix_layout

  • added move()

  • log updated

  • removed makeWidthValid(), widthMin instead directly respects header title length

  • added swap()

  • Revert "now creating ColumnsHeaders statically"

    This reverts commit 3ba8c653049eb1a55020bbc79c96bb390e2d7673.

  • fix: dismissOnClick did not accept the clicked value
    dismissOnClick is now true per default

  • allow multiple expansionAdapter

  • added update() with parameters progress and keepOnError

  • fix: drag&drop target highlighting did not work on normal TVRow with holder_table_row

  • code format

  • typo fixed

  • fix: may show an old already closed dialog again if preferred width of attached adapter changes

  • fix: didn't dispose adapters that have been used in a Picker dialog

  • now creating ColumnsHeaders statically
    now using setWidthFillWeight inside onAttachingToAdapter()

  • added noError() and docu typo fixed

  • action-view can now also be a TextView

  • fix: StringPicker not correctly initialized

  • added support for RangeSlider with prefixed label and enter-on-click support

  • allow DataRow with an auto generated, always unique UID

  • fix: saveData() does not store the most recent change under App.dsp when preserving content of new data objects

  • registerOnUserChange now returns a ListenerRegistration

  • added DynamicNavMenu

  • added onShowColumnHeaderContextMenu and onClickedColumnHeaderContextMenu so user defined items can be added

  • addColumn, addColumns and removeColumn now have suitable return values

  • fix: don't overwrite default types of the ..View() return values in DefTVHolder

  • allow ArrayList of Enum

  • make instanceUID globally visible

  • code simplified
    docu clarifications

  • code simplified

  • added embeddedFragment support

  • fix: Version Dialog may crash if no current fragment when trying to open it

  • gave all popup xml a unique ID to better distinguish them in test cases

  • now using Gradle Kotlin DSL

  • taking activity and model now directly from global App instance:
    avoids crashes in calls from detached fragments
    simplifies arguments of a lot of functions

  • fix: for latest picker changes

  • fix: anchor's position not correctly determined if inside a scrolling area

  • reduced argument count for PopupDialog()
    PopupDialog are now anchored whenever suitable

  • fix: crash possible if trying to get the activity from a no longer attached fragment => using App.instance now to get the activity

  • allow setting alignment for Dialogs

  • make dialog property in Picker public

  • show resizing menu item for all columns if at least one allows resizing

  • compiler warnings fixed

  • doc updated

  • better detection if new width can be applied or not

  • added debug log on bindView calls

  • code speed improved

  • fix: setMinWidth and setMaxWidth fallback was wrong

  • only update header during column resizing so it's faster

  • code simplified

  • increased wait time for hiding of handlers to 10 seconds

  • code simplified

  • added Progress.elapsed

  • new column width mechanism which is way faster and allows free user resizing

  • using margin_small instead of fixed dp

  • added sumOfFloat

  • code simplified

  • added forwardHighlightToExpansionAdapter and forwardSearchToExpansionAdapter

  • code simplified

  • compile fix

  • added SearchTextChanged
    added HighlightChanged

  • added data argument to updateStatus

  • removed verbose debug stuff

  • added disposeExpansionAdapterOnChange

  • fix: additional crash possibilities in SimpleItemAnimator

  • fix: crash possible in coerceIn() if dialog size is larger then screen size

  • added searchTextColumns

  • fix for cell dimension calculation in tables without columns

  • fix for fast scroll in tables without columns

  • compiler warning fixed

  • removed UInt in all functions

  • better debug log

  • code cleanup

  • added more debug log
    added spanCount() and rowWidth()

  • code cleanup

  • using fade transition now for navigation

  • typo fixed

  • updateArrayList() now only updates objects via modifyDataRows() if they are really modified

  • added App.dsp to handle PreferenceManager without need for a context

  • animate opening and closing of dialogs

  • code: property renamed

  • sending coordinates relative to Recycler in case we are hovering over empty space

  • added rowCount() and rowHeight(), extracted from preferredHeight()

  • compile fix for "no context anymore on App.Color and App.drawable"

  • code syntax cleanup

  • added hoverLocation

  • no context anymore on App.Color and App.drawable

  • animate changing of green color on valid background during drag&drop

  • fix: crash possible in PopupDialog if contained window no longer has a parent

  • VarColumnGridLayoutManager.fixSpanCount is now a var

  • animate() now uses system default of 300 ms

  • added animateColors()

  • during drag&drop hovering over the border of a table now scrolls the view

  • catch more IllegalArgumentExceptions during animations and print them to debug log

  • fix: correct available space is without the AppBar, so use master-layout instead of root

  • added user param and made sure onDraggingDone always uses the same position as the last onDragging

  • fix: log output is not correctly formatted in AndroidStudio if tag is too long

  • typo fixed

  • don't print fast occurring Progress like drawing of table rows except in verbose mode

  • using primary light color for pressed state

  • using green light color for valid drag targets

  • added isHoveringOver and droppingAllowed
    added callOnPositionChange and x, y coordinates in OnDragging
    combined all observer arguments to OnDragging
    simplified code

  • allow dropping over empty space

  • center popup to the side of the anchor instead of to the edges

  • dependency version bump

  • updated to newer AndroidStudio version

  • enable dataBinding to avoid missing binding problems in AndroidStudio

  • fix: remove() on an item on which a property regarding the sort order has just changed, may not be able to remove the item

  • fix: redisplaying PopupWindow may not update dialog size

  • fix: redisplaying PopupWindow may use outdated preferredWidth and preferredHeight

  • added back connectArrayList with auto updates from FirebaseData

  • DragDrop now supports dragging to other views and no longer uses ItemTouchHelper

  • added viewForID() and viewForRow()

  • code cleanup

  • SizeU can convert toSize and has identical toString

  • respect GridLayoutManager when calculating preferred width

  • widthFixed is public

  • PopupDialog no longer uses PopupWindow but directly adds the View to the root view so drag&drop operations work in and out of dialog views.

  • added dismissOnOutsideTouch property, to make dismiss optional

  • titleBinding property is now public

  • PopupDialog titles can now have an icon

  • updated docu

  • using a better distinguishable color for popup backgrounds

  • added countAtLeast and countAtMost

  • connectArrayList now uses string key to distinguish multiple lists

  • added TVAction Attached and Detaching

  • added infix without

  • fix: crash possible in delayed() call if fragment is dispatched until event is fired

  • fix: also stop onStateChange listener when removing OnChange listener

  • added onClear

  • VarColumnGridLayoutManager now has either fixed span-count or fixed cell-width

  • added App.float for float dimensional resources

  • removed obsolete elementSize preference

  • connectArrayList() can handle multiple FirebaseData as source now

  • compile fix for new keeponError parameter

  • fix: onNext is now also a one-time observer

  • fix: stopping and resuming via onBefore() from multiple observers in a commit will cause AssertionException assert(!triedCommit)

  • simplified code

  • debug string of FirebaseData now adds toShortString

  • update() now has parameter keepOnError

  • fix: may crash on notifyDataSetChanged() if even after a short delay computing layout of RecyclerView hasn't finished

  • applyCheckedAndMenuView() can now set the background for expanded cells / drag targets
    changed color for activated state in card_background that is used for drag&drop target highlighting

  • fix: a canceled drag&drop now always invoked onDraggingCanceled

  • added fromPosition and toPosition to drag&drop callbacks

  • fix: changed() now also finds items in list after a property that influences sort order has been changed

  • Duplicate action now better handles unavailable Create action

  • Paste action now directly uses assignFromJSON() on a newly cloned object and then assignes it with setData()

  • isValuesSane() now is called *after* updateDataAndLayout()
    added onCreateData() => create() call to saveData()
    udpated docu

  • code cleanup

  • added allButSameLast()

  • updated docu
    subListSafe() correctly returns this if whole list is asked for

  • added update() call with prevData parameter

  • getLocalData() now sets exists field to false

  • updated docu

  • updated docu

  • added remove() with simpler default arguments

  • fix: missed "DefText" style for intro_text

  • added resort()
    make sure data in FirebaseDataEditor is always correctly sorted

  • debug log updated

  • docu updated

  • set adapter before calling onAttachingToAdapter()

  • added ColumnHeaderFirebaseDataCollection

  • debug log typo fixed

  • added "sorted" property

  • added between infix operation

  • extracted TableViewAdapterColumns

  • more detailed debug logging

  • added Boolean.map for easier debug logging

  • make sure all individually selected are cleared when selecting all

  • fix for deselecting during select-all mode did not always disable select-all

  • code cleanup

  • debug log updated

  • clearSearchAndFilter() makes sure it always calls search("")

  • updated docu

  • saveInstanceState() and restoreInstanceState() are now globally callable

  • call safeNotifyItemsAllChanged after filter changed to update all highlights

  • call updateHeaderAndFooter after clear()

  • code update: renamed variables

  • fix: during remove() call safeNotifyItemsRemoved() only when item was visible

  • ImmutableList toString now prints it's original list's content

  • added allAtLeastOne

  • updated docu

  • call clearSearchAndFilter after filter feature has been disposed

  • call safeNotifyItemsAllChanged after menu feature has been added

  • better handling of selections and allSelected state when filtering at the same time
    calling updateHeaderAndFooter after row add/remove/change

  • invoking feature functions now with a generic features list
    TableViewAdapterFeatures functions are now just open instead of all abstract
    global updateStatus now got a TVAction parameter
    row specfific updateStatus now got a nowMatching parameter

  • moved default init of features to the bottom after all fields have been initialized

  • onMenuItemSelected uses only itemID as parameter now

  • fix: update header and footer after sorting module has been disabled

  • code format

  • more debug log

  • fix: compareItem must never return 0 for two different DataRows

  • fix: crash on dispose of TableViewAdapterExpansion

  • better debug log

  • DataRow now has a instanceUID and uses the logTag for toString

  • make countResults int

  • docu typo fix

  • extracted filtering and search to TableViewAdapterFiltering
    docu fixed

  • use ImmutableList accesses whenever possible and create them only once

  • extracted sorting to TableViewAdapterSorting
    optimized add() and changed()
    added TableViewAdapterFeatures.restore

  • context-menu open functions have been replaced with Observers

  • TableViewAdapterMenus is now optional

  • renamed setSelectionsAllowed

  • fix: Exception raised if changed() called on a sorted list with an item that was not part of the list

  • fix: onItemMove returns false if item not moved

  • onDragging... open functions have been replaced with Observers

  • docu update

  • renamed parameter

  • renamed updateMenuState to updateStatus
    introduced abstract TableViewAdapterFeatures
    extracted expansion management to TableViewAdapterExpansion

  • FilterUniqueByKey has it's results field now private and supports onConnectedChanged

  • code cleanup

  • don't allow adding a new DataRow that has the same persistentID as an existing one
    renamed getPersistentID() function to uid property

  • removed allowMultiSelect => selectionsVisible now replaces semantic of allowMultiSelect
    removed selectableSet => now directly looking at isSelectable
    removed updateMenuState => TableViewAdapterMenus now handles them

  • make errorIfMissing to var

  • only call checkStartStopSearchFilter if needed
    use specific updates instead of notifyDataSetChanged

  • no preferredWidthChanged call in updateEmptyView

  • remove selectionVisible

  • removed visibleItemCount, added allPreviousItemsSeenAgain

  • extracted selections to TableViewAdapterSelections

  • renamed release -> dispose

  • small code fix

  • using new ImmutableList

  • fix: setAllowDragging() did nothing

  • extracted menu support to TableViewAdapterMenus

  • extracted Drag&Drop to TableViewAdapterDragDrop

  • code cleanup

  • build fix: errors possible because of plugin version mismatch

  • allow FirebaseDataEditor and FirebaseDataPicker to be used with all kinds of scrolling table view layouts

  • FirebaseResults.countResults only counts newly added items, not modifications etc.

  • fix: a leftover checkbox was straying around in DateTimePicker in landscape mode

  • fix: missed super call in FirebaseDataEditor and ListPicker bindView -- items were not visible in picker

  • don't allow columns to get smaller then margin_huge

  • added process argument to setEmptyViewVisibility

  • fix: layout problems with empty-table-hint TextView

  • changed() will no longer add items that are not part but just ignore them now

  • fix: did not call changed anymore in connectResults: Modified

  • fix: selection now only possible selectionVisible is true

  • added lots of docu and code quality improvements:
    TVRow now supports an expansionRoot and has bindExpansion()
    DataRow now has a fixed toString() but instead now has toNiceString()
    added DataRowFB with automatic overwrite of getPersistentID and toNiceString
    split createDataRows into modifyDataRows and removeDataRows
    ColumnHeaderString now uses onInitStringPicker
    added ColumnHeaderNumberType

  • split TableViewAdapter.kt into separate files and moved to ui.table

  • make sure widthFitStretch is not set from outside

  • fix: crash possible when rotation device in Log fragment

  • fix: sometimes incorrect width or height for a GUI filter (second)

  • fix: incorrect animation start for closing a GUI filter

  • fix: sometimes incorrect width or height for a GUI filter

  • avoid calling updateFilter() during updateView()

  • preferredWidth() does not need an attachedView

  • added outerWidth property

  • doc typo fixed

  • extracted applyCheckedAndMenuView so it's accessible from TableViewHolder

  • speed: faster update of Log list

  • speed: faster update when adding huge amounts of new rows

  • doc typo fixed

  • allSelected is now a directly evaluated property

  • coed cleanup: use visibleItemCount instead of itemCount for more clearance

  • added allItemCount, visibleItemCount and selectedItemCount to help distinguish different perspectives
    fix: use allItemCount instead of the default (visible)ItemCount

  • docu updated

  • Version 3.3.5

  • version bump

  • docu updated

  • only reset queries if really needed on UserState changes

  • fix error message on icons that are not linked to an URL

  • allow to deselect icons in the IconAdapter

  • fix: searching for icons didn't work anymore simulated_icon_search_result, even if empty

  • made sure parameter combinations for StoredQuery are valid during construction

  • code cleanup

  • fix: debugPrint() may stay silent in tests as only the Test Progress is set to Verbose

  • added docu

  • code cleanup

  • if setQuery() has been used, keep old items in the FirebaseResults list as long as the new one hasn't synced, so now avoids removing and adding again the same items if the new query returns (partly) the same items as the old queries.

  • fix: internAddPartOfQuery() was not called if a FirebaseResults added the same item again from a second query

  • make debugPrint() and q() deprecated to avoid accidental leftover calls

  • removed leftover debugPrint() call

  • added menuProvider to IMasterFragment

  • typo fixed

  • added faster forEachSafe() for Collections

  • more debug log

  • fix: onSavingInstance() wasn't called anymore as overwriting onStop() does not work any longer, we now suggest an AlwaysRunningLifecycleOwner -- bug since 8145bcdf448ab2a737915b8260a5946b32fe06a3

  • fix: search did not work anymore => moved search logic directly into TableViewAdapter

  • fix: could not locally cache icons that had a very long refID

  • fix: AutoComplete boxes did not work anymore because of wrong PaddedArrayAdapter filtering

  • try to use the login name of the user if no User object exists in the database

  • code and docu cleanup

  • fix: after returning from some Password Managers, the MenuProvider will no longer be visible as fragment seems to be unattached.

  • fix: after returning from some Password Managers, the password field was no longer visible

  • renamed active to isActive

  • providing Active instead of Progress in all functions of DataEditAction

  • better logging

  • Version 3.3.4

  • version bump

  • dependency version bump

  • reduced max width of Filter GUI

  • added docu

  • more debug log

  • fix: picker opened dialog directly after setting rangeSelection evne if visible was false

  • fix: misaligned "to" label

  • added introText and introComponents and isEnabled

  • fix: auto set TYPE_TEXT_FLAG_MULTI_LINE if maxLines is > 1

  • added helper functions to create Instant and Timestamp with a fixed date

  • added docu

  • added docu

  • fix: always show year selection as user will not be able to change the year otherwise

  • fix: setting endDate or rangeSelection after dialog is shown will not leave enough space for end date / time selection

  • only allow setting hour or minute if elementHour / elementMinute is true
    can now set anyDateFieldsVisible, allDateFieldsVisible, timeFieldsVisible
    setting endDate to null disables rangeSelection
    numberDays and daysMonthSelected only has an effect if rangeSelection is enabled

  • allowing null boundaries in RangeFilter

  • special texts for range picker on timestamps

  • PopupDialog: added okAllowed
    Picker: added validInput
    Pickers now disable the OK button on invalid input
    pickers now directly store their data in the binding's input

  • crash fix: in showWithPreferredSize if additionalViews is empty

  • renamed updateTextView => updateGUI
    removed acceptInput, onShow, onHide, onOK functions in favor of observables
    added more docu
    StringPicker now takes over input without delay

  • added docu

  • code optimization

  • allow negative prices in default range

  • code format

  • more docu

  • allow RangeFilter to be unset independent from type set

  • code format

  • support for test cases

  • typo fixed

  • NumberPricePicker now uses long format
    NumberPricePicker.base is now private
    NumberType now allows defining boundaries in their native type
    allowing separate min and max values
    added docu
    TableViewAdapter columns headers now each have their own onEditInputPopup()

  • code format

  • fix: IsNotWithin had no translation string

  • fix: use label parameter when inserting a new selection in a PaddedArrayAdapter

  • can now set a user defined precision to display Double columns

  • fix: boundary checks for IsWithin and IsNotWithin filters didn't work correctly

  • fix: wrong text in filter progress strings

  • filters got toString() implementations

  • fix: endless loop possible between updateView() and createView()

  • moved empty text view below the header

  • fix: boolean filter GUI did not work correctly

  • fix: generateFilter() did not correctly generate an unset boolean filter

  • fix: generateFilter() did not correctly generate an unset enum filter

  • fix: crash possible in enum filter

  • format double per default with up to 8 digits

  • code cleanup
    added setSelectionVisible

  • code fixed

  • more docu

  • mark internal FirebaseData companion functions as deprecated now and renamed some to make them clearer

  • typo fixed

  • removed parseValue() and instead added initForInputPopup() that only needs to be implemented in sub classes that actually use it

  • added actualHeight

  • Header and footer are now completely responsible for their own layout

  • don't store user sort from ListPicker

  • don't sort enum list choices

  • range filter now has type selection dropdown

  • editable can now be set per row

  • extracted Filter, FilterGUI to separate abstract classes
    added more documentation
    filter GUI is now directly connected to filter being active

  • NumberPricePicker's title must now be set

  • updated docu

  • text empty fields are now top aligned

  • fix: hint text was not visible

  • version bump

  • fix: FirebaseDataPicker's table was not responsive sometimes

  • fix: FirebaseDataPicker did not invoke onOK() on dismissOnClick

  • added errorIf() and hasError() to TableViewAdapter

  • added simulated_icon_search_result

  • Version 3.3.2

  • version bump

  • dismiss on click per default in single select mode

  • always setting baseProp now in FieldSpecs
    assignFromFieldsMap() will only print exception for unreadbale fields if they are part of the input map
    fix: crash when picking item

  • Version 3.3.1

  • version bump

  • added setLogLevel() to temporary overwrite the log level

  • can now set user-defined actions in preferences (Settings)

  • add Int +/- UInt operators

  • fix: sometimes an object in a dynamic filter triggers a modification if a field has changed, and sometimes not => keeping partOfQuery in insertion ordered list

  • code rename

  • code quality

  • docu updated

  • better logging

  • fix: crash possible in onDestroy()

  • more verbose logging

  • FirebaseDataBatch now has creating ChangeLog optional

  • fix: assignFromFieldsMap must also restore @Exclude fields

  • make sure we set a correct shop in ChangeLog objects even when there is no shop yet
    fix: detailed list did not contain entries for Changelog batch entries

  • fix: equalFields failed if ignoreExcludedFields was true

  • fix: FirebaseData objects with a map were not comparable

  • fix: FirebaseData objects with a map were not parcelable

  • code format

  • docu fix

  • compile fix

  • printing menu title on progress
    changed order of onMenuItemSelected() calls: now first MasterMenuProvider then adapter menu, then generic actions

  • loading older log entries no working correctly

  • debug log when replacing a query

  • added countResults

  • put item from allowEmptySelect always on top
    return correct value from allowEmptySelect

  • accept filter in empty FirebaseData columns

  • layout fix for simple and spinner filter

  • added base picker implementation for ColumnHeaderFirebaseData

  • code quality

  • ColumnHeader is now filtering by string as default

  • added internGetAnyData()

  • code quality

  • FieldDifference prints data in Nice rather then Detailed format

  • fix: FieldDifference from and to were mixed up

  • support Map as data type for FirebaseData

  • all database modifications are now logged persistently

  • FieldDifference is now used in a Map

  • added deviceId to MasterViewModel

  • if targetSize is 0 in setDrawable / setDrawables, now use the icon_size as default, keeping aspect ratio

  • bindView() now is responsible for setting checkedView and menuView

  • validRange() and numberType() support current DataRow

  • better class cast checks

  • added ColumnHeaderEnum
    added ListPicker

  • onEditInputPopup() now has DataRow

  • cells can now overwrite getDrawable() and getIcon(), .. instead of just fetchIcon()
    added new applyTo() functions

  • added prioSortOrder() and lowestSortOrder()

  • added IconPosition enum and TextView.setDrawable
    fix: imageSize property keeps aspect ratio of drawable

  • fix: drawable and color resources did not respect current theme correctly

  • textColorResource is now a property

  • better padding for underline

  • editable cells are now underlined

  • underline() now uses a layer-list

  • added App.drawable

  • fix: scrolling an editable table no longer triggers a cell edit

  • using global App instance now for resources like translation strings

  • Version 3.3.0

  • version bump

  • better handling of invalid json code

  • creating unmodified icons is now optional in IconSelect

  • added type checks to onEditInputPopup()

  • support clicking on an icon in column edit mode

  • added safeCast() fun

  • fix for ifZero() return values

  • TextView.setDrawables() now has targetSize option

  • FirebaseIcon.toView() now uses icon_size resource and has onDone callback

  • GenericRow supports querying int as long and float as double and vice versa

  • ParamContext now supports GenericRow

  • added support for translated-strings via $123 or ($123 x y)

  • fix: unattached PositionalToken that were encapsulated in FormatTokens were not correctly moved to new columns

  • fix: ParamContext may not have been set correctly on children that had their own already assigned

  • more debug log for evaluate()

  • better debug log: printing context used for tokens

  • added chLong

  • better debug log

  • fix: missed layout for SimpleFilter

  • fix: intro text had unwanted prefix "Processing"

  • added ColumnHeaderFirebaseData

  • print an error message if picker is not bound to a dialog or embedded view

  • dependencies version bump

  • owner can be optional in StoredQuery

  • correctly print complex lines (like multiple images) on Esc/Pos

  • code simplified

  • fix: document delimiter '---' not working anymore

  • added functions sameFirst() and sameLast()

  • made a lot of functions internal and added public children property and delete() function

  • added docu

  • fix: had two new-lines when printing empty lines

  • can now print the whole list of generated documents with one call

  • better use of the different states

  • fix: don't print a red border around empty images

  • fix: also print lines with only empty columns

  • added ParamContext.remove()

  • added FormatMultiLine annotation

  • getExistingIcon() returns the same icon again when the same URL is used in the same shop

  • drawing SoftWrap in debug with Blue color

  • code clean

  • drawing background colors in Document.draw() now
    more debug drawing

  • can now set background colors

  • code and docu updates

  • assert correct states
    make sure we reset state before measuring again

  • new function addAndGet

  • updated feature_test

  • fix: check if token is still assigned to a parent before calling onReadyChanged

  • unattached PositionalTokens on a Line are now added to a new left-aligned Column

  • toEscPos() now uses the paint to determine the correct style and can handle wrapped columns

  • added measured property and copyInToOutList is now open

  • added column and line properties

  • fix: remove alpha from images when printing to Esc/Pos

  • fix: don't vertically center Line and Column objects

  • more logging

  • better conditional formatting in feature page

  • fix: need to evaluate before using a Param via toPlainString/toEscPos

  • put Column and Line always at top positions below Line and Document during expansion

  • allow ParamContext as sub of a ParamContext

  • ConditionalFormat now a class of TempToken

  • code change: ParamExpansion as sub class of TempToken

  • Merge remote-tracking branch 'origin/master'

  • supporting line wraps in Param values

  • added toPlainString

  • added toPlainString

  • interpret ".0" in ParamContext as using the default, and ".1" ans using the length/number digits

  • updated Feature Page for expansion

  • debug print Param's value only if evaluated

  • Columns must be directly part of a Line

  • ParamExpansion will now be parsed and directly processed as a TempToken

  • introduced FlowToken

  • docu updated

  • introduced goParentOf()
    don't copy over FormatTokens into a new document

  • added printToPDF()

  • fix: don't onReadyChanged endlessly on empty images

  • don't measure any children in Document's measure function, instead rely on default measure method

  • set height of PositionalTokens to at least the height of their largest child

  • measure tokens children *before* preparing next line of a line-wrap

  • moved measureChildren() and alike into LineData
    LineData is not the only needed parameter for measure() functions
    Line now also detects nested columns

  • ParamContext.add() functions can be chained

  • can now set progress-based log-level

  • also make "refID" available in the ParamContext of an object

  • better error message

  • fix: images in Param could not be printed

  • onCacheReady can be private

  • added support for Image token

  • don't allow concurrent measure, draw or print runs

  • fix: barcode could not be printed to EscPos if text-type was set to None

  • added forEachSafe

  • div by zero checks

  • added checkReady()

  • code simplified

  • takes layout parameters now directly from a EscPosPrinter device
    made text-size and padding const

  • barcode width calculation now working correctly

  • added full barcode support

  • code cleanup

  • moved sub fun measureChildren() into Token.measureWithLineWrap()

  • code cleanup

  • print new-line before document

  • reduced logging to v

  • allow format styles spanning over lines and columns
    distinguish between flowing, non drawable FormatToken and PositionalToken
    using explicit inList and outList for token's children

  • fix: Debug menu entries may be visible even without debug-mode

  • added feature_test

  • avoid !! null suppression

  • fix: draw white text really on inverted background

  • only print position as int precision in toString()

  • allow flat toString() without children tree

  • fix: correctly set parent for children of ParamExpansion

  • measure() now correctly handles all kind of line wrapping (hard/soft/in nested classes/...)

  • added requireParent

  • added subListSafe()

  • code cleanup

  • only allow latin letters

  • ParamExpansion now also works with part of lists or single items

  • can reduce/increase logging based on a specific logTag

  • fix: reduce range of allowed symbols for barcode parameters

  • added ParamExpansion and Image
    moved evaluate() to ParamContext

  • added copy() to Token

  • more flexible handling of token children
    context can now be set per token

  • docu updated

  • more simple debug output and better handling of document property

  • fix: --- delimiter created empty lines on new document

  • code clean

  • changed barcode format to (|123|format)

  • can now combine tokens in sub-parsing like in (%param) or (|123|)

  • changed color format to (#arrggbb ...)

  • added SoftWrap with /n

  • removed wide and tall styles

  • Version 3.2.0

  • version bump

  • code cleanup

  • new method getOr()

  • DataActions now support sub menus

  • added removeAllOf() and append()

  • fix: ArrayAdapter's filter may interfere with clear() method

  • font sizes now correctly fit to the printing result
    long texts are now correctly wrapped to next line

  • measure run now completely handles lay-outing the tokens
    can now draw debug rectangles for measure run
    support characters-per-line

  • removed no longer used PageDelimiter class

  • fix: substringSafe() can now handle empty string correctly

  • made FilterUniqueByKey better extendable

  • added QR code support

  • compile fix: missed an icon

  • added support for printing barcodes

  • print current value of a Param in debug string

  • fix: print "[L]\n" instead of "\n" for empty lines

  • allow grayed out background for toBitmap()

  • make sure only the correct children classes can be added

  • return multiple parsed documents in a list

  • after a network timeout, reduce wait time for all following actions and display an offline warning icon

  • added basic items like Settings, Log Out and Log to the master menu

  • cleaned up properties and added more docu
    fix: Multi Select button when all visible items are non-selectable, but filtered items would be selectable was always selected and Selection-Menu was clickable

  • fix: Filter column not visible anymore if all filtered out

  • better readable timestamp in debug string output

  • speed: faster handling of FirebaseData objects by precaching all FieldSpecs

  • compile fix: had unresolved dependency (not yet checked in)

  • fix: in Bons with condensed strings like "%a/%b" some single characters like "/" may not be printed

  • fix: crash when parcelling an objects with a FirebaseData reference

  • dependencies version bump

  • added Debug Live View

  • Version 3.1.0

  • version bump

  • fix: missed PrintDocumentGenerator class in checkin

  • provide global print() command

  • typo fixed

  • compiler invalid auto-import fixed

  • added asMap() with support for format annotations

  • support Long type on GenericRow

  • moved price_format and percentage_format strings to CommonLib

  • MyLog.q messages now print without deprecated Progress() ctor

  • PaddedArrayAdapterCount can now be used without a pluralResourceID

  • can now fill Double formatted values with prefixed 0s

  • added more Utility methods

  • code cleanup

  • Version 3.0.0

  • version bump

  • code quality:
    forward Process through all Invocable invocations
    MasterFragment makes basic methods final to avoid overwriting entry points
    make sure most Process instances are using translated strings
    correct naming scheme on Class<> properties
    FirebaseData Properties of type FirebaseDataReference don't need a setter on their base property anymore
    Print a MyLog.i on all new Process instances

  • code cleanup

  • some compiler warnings fixed

  • search option only for fragments that have a TableView

  • Share menu entry is now always the last one in the menu

  • better empty text messages
    better names for objects in export dialog

  • fix: Debug Snapshot menu was no longer available

  • code cleanup

  • fixed a lot of TextInputLayout styles

  • renamed class

  • fix: crash possible when items are loaded after dialog / fragment is dismissed

  • added common style for RecyclerView
    fix: basket items could be too wide (+/- buttons outside of the screen)

  • code cleanup on set_Min/Max_Width/Height () helper

  • fix: DatePicker calendar view is cut off at last row of dates

  • fix: crash possible when opening till

  • version bump

  • library version bump

  • fix: General error -- updateFooter() now called directly without a delayed block

  • errorIf() now also checks for entered text length

  • onUpdateGUIState() is now called before setDataFromLayoutNow() so it can rely on up-to-date GUI

  • setSelection() will now delay selection if requested value does not yet exist

  • added hasError() and noError() for FirebaseIcon and CheckBox

  • fix: FirebaseQuery whereNotEqualTo did not work as expected

  • using exception flag now also in FirebaseIcon

  • fix: don't show action buttons for already detached fragment (mostly User Login)

  • added Version History dialog
    developer settings now always visible

  • added underline() helper

  • Version 2.7.0

  • version bump

  • better width calculation for Share dialog

  • better log output for GenericRow

  • provide suitable toString function for adapter objects to simplify PaddedArrayAdapter

  • provide progress indicator while uploading selected icon

  • simplified code: padding now directly part of xml

  • support more shortcuts from Strings class to resources

  • better fitting first day when printing a date range on same month

  • allow additonalViews in showWithPreferredSize()

  • don't ask for permissions again within less then a second

  • getFragment() can return IMasterFragment

  • only predefine 14 nights in selection

  • fix: selecting number days is off by one

  • show "1 Month 0 Days" instead of "0 Month 30/31 Days"

  • now using AutoCompleteTextView as replacement for AppCompatSpinner

  • fix: title does not always fit into the dialog

  • introduced IMasterFragment

  • columns can now be auto stretched to fit remaining space

  • fix: relocate dialog based on its anchor if size is changed

  • dialogs and pickers now only accept their input if "OK" is clicked

  • don't show "never" when only time is printed

  • Confirmation dialog now has Cancel button left to avoid accidental click

  • code cleanup

  • wrong error message text fixed

  • removed unused debug log

  • merged updateErrorStatesInLayout() into onUpdateGUIState()
    allow setting special getCollectionPath()

  • directly add new objects to their FirebaseResults on commit() when a create() call is on the batch

  • added FirebaseQuery that provides type safety and makes sure field names are proper
    removed DynamicQuery type from FirebaseResults

  • added a progress active indicator to actions
    ConfirmationDialog supports onNo callback

  • call updateGUIState before canExecute

  • only apply mail if it was given as argument (instead of auto restore for example)

  • fix: if user change detected correctly stop all queries / syncs

  • now only using QueuedInvocable so no invokes outside of a lifecycle are lost anymore

  • removed unused "padAlways"

  • fix: don't save SharedPref if no key given

  • all Spinner and their drop down lists now have a suitable minimal touch size
    added new style DefSpinner

  • fix: don't allow multiple permission check calls at the same time

  • fix: missed an icon in previous "LogOut" action commit

  • integrated remaining ArrayAdapter stuff from Utility to PaddedArrayAdapter
    fix: a user click called onItemSelected twice

  • compile fix

  • fix: possible ConcurrentModification crash if selectionChanged() is called inside a View's measurement run

  • do a updateDataAndLayout() run always before trying to execute an action if the user clicked on a menu item

  • call updateMenuState() after onUpdateGUIState() so menu state can depend on global GUI state

  • removed needless update call

  • go directly to edit fields if editing an known user

  • compile fix

  • print confirmation after password reset has been sent

  • fix: "show password" toggle did not update the GUI state correctly

  • code cleanup

  • fix: wrong title on user edit

  • better debug log

  • better readable hint if no user logged in

  • added "Logout" action

  • don't use the exception title as short message as it may not be suited for the user

  • more debug log

  • all Action objects now allow overwriting of title, icon, color, ...

  • added valueOfLabel()

  • added isAllowedRestoreSaveData()

  • now stopping all queries if user is not logged in in a shop

  • fix: remove() did nothing if sq argument was null

  • fix crash on resizing of a dialog with an adapter

  • added emptyViewNoItemsText to easily switch text for tables without any items

  • print as short string mail field if no name is given

  • formatString() now detects empty date values and prints "never"

  • Version 2.6.1

  • version bump

  • added Timestamp.reduceToDays()

  • added GenericTableViewAdapter to print data that is not part of an adapter

  • disable PDF option until its implemented

  • only allow starting export if at least one row exists and source adapter is finished loading

  • toNiceString() can now print without prefixClassName

  • fix: crash possible on created debug snapshot

  • added showWithPreferredSize() to Dialog

  • added general Export feature

  • fix: crash possible if no icon selected for a MaterialButton

  • PaddedArrayAdapter now supports connection to a SharedPreference value
    added PaddedArrayAdapterString

  • speed: don't call ifSynced() on an empty FirebaseData object

  • setting title now directly when ColumnHeader is initialized, so title is available even when no adapter is attached

  • can now set visible property also when not attached to an adapter

  • added expandToggle() function

  • added selectedValueSafe
    added PaddedArrayAdapterEnum

  • code cleanup

  • replaced ImageButton with MaterialButton so icons look gray if disabled

  • added selectAll()

  • fix: possible crash if opening header context menu on an unsortable TableView

  • TableViewAdapter manages visibility of header and footer by itself

  • fix: wrong icon for multi-select mode in Popups

  • small layout fixes in title bar

  • cleaned up styles.xml

  • collect queued Firebase results faster

  • wait 10 seconds (instead of 3) for a network timeout warning

  • don't continue showing Active progress after timeout of a commit

  • fix: progress indicator may not be visible again after a notice has been displayed in place of the window title

  • more debug log

  • fix: missed icon in commit

  • Version 2.6.0

  • version bump

  • added DefEditPriceHuge, other prices are normal

  • PopupDialog now supports multi-selection mode for embedded TableViewAdapter

  • showPopupMenu() also provides the MenuInflater

  • TableViewAdapter supports multiple menu instances now
    new icon for cancel multi selection

  • added workaround-fix for "Tmp detached view should be removed from RecyclerView before it can be recycled"

  • added new class FilterUniqueByKey

  • allow sorting in FirebaseDataPicker

  • fix: allowSorting was not respected in header context menu

  • dynamic filter now gets a ResultChange instance to better decide if the filter matches

  • always show space for at least 5 items in picker

  • more debug output

  • fix: preferredHeight() now also works on empty tables

  • smoother update of PopupDialog's dimensions

  • fix: userSelected / itemSelect not called if a new value is added with setSelection at the exact same position as the current one

  • AUTO_ID_ALPHABET now public

  • added byUser argument for setSelection()

  • have a global askForPermission() now

  • fix: only call promptUser() if a user-prompt has been added and not removed again

  • make sure header's title of a popup dialog is fully visible

  • added withDot() to NumberTypes

  • added PaddedArrayAdapterFloat

  • logTag uses full class name for internal classes, if no simple name is available

  • added toString for SortOrder

  • don't notifyDataCreated() if the delete fails because it already is deleted

  • deletion should always be triggered by FirebaseData.delete(), not Batch.addDelete()

  • added new PaddedArrayAdapter that supports adding additional values by the user

  • added widthMin for Culumn Width calculation

  • fix possible endless recursion in LifecycleEventDispatcher.remove()

  • dismiss keyboard if a dialog is closed by pressing Back or Apply

  • added setting inputType and autofillHints for embedded string editor

  • extended limit() function

  • code cleanup

  • fix: missing a string entry

  • keep header if no items are visible due to filtering

  • more logging

  • delete icon is now red color

  • only use titleID if no title has been set manually

  • preferredWidth() and preferredHeight() is now a function

  • no more inplace editing of table cells, now we always use a PopupDialog as it has less complications
    added StringPicker

  • added FirebaseDataEditor

  • added contextMenuButtonClicked()
    no longer rely on contextMenuID() result to determine visibility of menu buttons

  • fix: may crash when opening camera if activity gets recycled too soon

  • fix: may crash on old images that have an invalid refID

  • popup title can handle additional buttons

  • dependency version bump

  • Version 2.5.1

  • version bump

  • Show prompt for update to new version no more often then once every hour

  • Version 2.5.0

  • version bump

  • added setEmptyViewVisibility()

  • center title text

  • code cleanup

  • make sure the title fits into the dialog

  • don't allow unselect on single-select mode

  • more padding in Nav Bar header

  • removed Apply button from DateTimePicker and fixed position of Today button

  • moved ic_dropdown to CommonLib

  • LogTitleFragment now uses getFragment() call instead of a WeakReference

  • more logging in create() call

  • make sure results are synced when added to an adapter

  • DataEditMenuProvider is now open

  • only add MenuProvider once

  • fix: endless update loop in DataEditFragment possible -- no longer send notifyDataChanged if differences map is empty

  • fix: wrong title / icon after activity restart on some fragments
    calls to icon, title and titleFragment are now all in onResume
    removed onShowFragment, onHideFragment and viewJustCreated as no longer needed (we have no persistent fragments anymore)

  • added time-range printing to formatString()

  • fix: don't set setTitleAndIcon if coming from an embedded fragment

  • added new style "DefEditLayoutCompact"

  • check "theme" property only on activity start

  • moved notesVisible option to general tab
    added icons to preference categories

  • language can now be changed independent from system default

  • typo fixed

  • fix: nav bar header cut off on top

  • fix: missed a vector image

  • reduced margin sizes

  • fix for swapped dpi and pixels in calculation
    added more docu

  • added General settings with Theme mode and Element Size selection

  • now have app, shop and user name in Navigation Menu Header
    Settings user User-Login are now directly reachable from Navigation Menu Header
    colors for Navigation Menu Header adapt to dark mode

  • fix: isSingle() check didn't work

  • sync the user's shop (again) after every user sync (LoginUserButNotSynced and LoginUserButNoShop)

  • close edit fragment after clicking "Apply"

  • fix: don't show create action on login of existing user

  • fix: make sure pending typing-listeners are handled before an action relying on the data is executed

  • sync the shop after user logged in

  • compile fix

  • logging

  • compile fix

  • fix: only provide state LoginUserAndShop if shop is already created on the server, otherwise queries depending on the shop will fail

  • more details about navigate() function

  • moved apply button to the title / main menu
    some rework of DataEditFragment to handle dynamic actions

  • green color if "add" icon

  • new helper functions added

  • also expand delayed after an expand request if another expand has happened in between

  • always start update() call when requested even if not changed locally

  • fix: only return true for hasError() if element is also visible

  • fix: wrong color for icon

  • added App.instance.activity

  • DataEditFragment reworked:
    supports Copy, Paste, Duplicate
    no longer has Create/Delete button

  • added userTag to Progress

  • no need for paddingTop hack anymore

  • more dimens resources

  • fix: entering a digit at "-0.00" removes the negative marker

  • code reformat

  • Version 2.4.2

  • version bump

  • respect topMargin and bottomMargin for preferredHeight

  • respect GridLayoutManager for preferredHeight

  • directly calculate spanCount on init

  • added externally invokable click() method

  • update for update manager (again)

  • fix: FirebaseDataPicker does not accept clicks sometimes

  • TableViewAdapter's TableHeader now has drawCell()

  • TableViewAdapter now has faster item handling on huge lists
    some renames of properties

  • code cleanup

  • added onClick()

  • auto scroll if new log entry appears

  • better error message on resource exhausted

  • better readable red and green on dark mode

  • Version 2.4.1

  • version bump

  • print slow network warnings no often then once every 10 minutes

  • fix: if batch is empty (for example because an update has no modifications), onSuccess (and onSuccessOrTimeout and onNext) was never called

  • added optionalCheckBox flag to DateTimePicker

  • Version 2.4.0

  • version bump

  • updated InAppUpdate
    more debug log

  • close Icon Select and Icon Edit as soon as an icon has been accepted

  • fix: Icon Edit didn't show image if already cached before dialog is opened

  • added notifyDataCreated() and notifyDataRemoved()

    fast removing deleted entries from all synced FirebaseResults

    fast adding newly created entries to all synced FirebaseResults that match
    (not yet fully implemented, needs replacement of Query operators)

  • support Enum as field type for FirebaseData (internally stored as ordinal int)

  • removed unused ignoredCounter

  • removed simulationNetworkSpeed as it is not working as expected

  • update for better activity check in test cases

  • code simplified

  • make logTag protected

  • more debug log

  • can now set a separate visual indicator for a Progress

  • more debug log

  • fix: picking the same icon that has already been used in another shop could cause conflicts when storing

  • fix: picking an icon together with a new shop didn't work

  • fix for rare cases where a user exists in the authentication but not in the firestore database

  • lifecycle changes no longer change the started counter but instead call invokeAllowedChanged()

  • code fix: wrong logTag imported

  • added stop() to ListenerRegistration

  • added userState property

  • fix: only call setData() once

  • added hasActiveProgresses

  • fix: don't try to write onCacheReady to database

  • setting exist to false for getLocalData() and getNewData()

  • doc update

  • print detailed versions of items in debugPrint()

  • fix: only remove items if not still part of another query

  • fix: queries may be seen as identical if they have same query fields but different whenEqual arguments

  • log differences for update batch calls

  • added autoScrollToAddedItem

  • debug log if getting a fragment fails

  • added onUncaughtException callback

  • more debug log

  • now always re-adding queries even if identical, may fix: sudden unsync problems

  • fix: missed a newline in log of commits

  • Version 2.3.8

  • version bump

  • added toDrawable() with automatic resizing

  • ifSynced now returns error state if exception occurred

  • "exists" is now null if not yet determined

  • DateTimePicker now supports calendar mode, number of nights and has an "Apply" button

  • Version 2.3.7

  • version bump

  • can now save additional files to the DebugSnapShot

  • added sub sorting
    sort, filter, and width are now stored persistently

  • better handling of prefixes and suffixes for short and nice string
    using toShortString() now for Progress and a like

  • organize imports, reformat code

  • fix: using UTC per default as timestamps are stored internally in UTC

  • Version 2.3.6

  • version bump

  • added fallback if a user logs it who hasn't a User object assigned in the database

  • re-invoke user-check and setting all initial syncs after activity restarts
    fixes: sync goes offline after rotating device, new changes not displayed correctly

  • fix: make sure notice() updates are called on UI thread

  • fix: when creating user don't fill field lastAppVersion as rule-set may not allow setting it immediately

  • Version 2.3.5

  • version bump

  • added debug log to MasterMenuProvider

  • fix: duplicate onShopFragment() calls which may lead to duplicate main menus

  • fix: show date and endDate in textInputLayout for rangeSelection mode

  • added pivot position for rotate transformations

  • fix: crash possible with "Cannot assign to errorIfMissing"

  • typo fixed

  • fix: addQuery() ignores assing query with same parameters but different LifecycleOwner, so queries may no longer be synced when they should be synced

  • better debug output of Firebase queries

  • start an update directly after downloading

  • print (cur/max) in expanded log details

  • fix: when reading from CSV msgShort, cur and max were lost

  • simplified code in print()

  • can now limit number of lines in a cell

  • Version 2.3.4

  • version bump

  • fix: show title fragment to right of title text and blend out both for notices

  • fix: setting negative number on short click if keyNeg is only "-" and not ". -"

  • added saveToSharedPreferences() and restoreFromSharedPreferences()

  • fix: endless recursion possible if a field of a FirebaseData object had a reference to an object with the same FirebaseData class

  • Version 2.3.3

  • version bump

  • code cleanup

  • fix: wrong default for notesVisible Preference

  • xml code format

  • added DefCheckBox style

  • don't limit cell content to 2 lines

  • added errorIfMissing

  • only store previous edit if not commited

  • reducing calls to setData() during DataEditFragment init phase

  • Version 2.3.2

  • version bump

  • fix: DataPicker did not correctly switch between single and multi selection

  • fix: PopupDialog title not set initially

  • notice action button now only shows an icon

  • when opening a DataEdit after successfully creating/deleting the contained data, don't show the previous data
    added onDataDeleted()

  • Version 2.3.1

  • version bump

  • call updateView() in onResume instead of onStart()
    call onShowFragment() always in onStart()
    fix: some Invocables could not be triggered as the fragment was in Created state when they are being called

  • better logging for FirebaseResults

  • added FirebaseResults state ResultsAvailable

  • better debug otuput for QueueingInvocable

  • more useful short version of error messages

  • added In-App-Update

  • Version 2.3.0

  • version bump

  • fix: some Invocables may still be called in wrong states or on old fragments

    every Incovable now provides it's own reference to a LifecycleOwner and determines if it can be started or not
    every onCreateView() now must call super version from MasterFragment
    removed invokeIfStarted()

  • show first message and filter by message type when clicking notice icon in navigation menu header

  • fix: onHideFragment never called, so title shows old fragments

  • updated lib versions

  • removed quick-debug logs

  • Version 2.2.1

  • version bump

  • fix: allow null when reading FirebaseData objects in toFieldsMap() but convert to empty string

  • Version 2.2.0

  • version bump

  • don't allow restoring layout already, when finishedLoading is set to true

  • StatefulNavigator is disabled for now

  • can now restore the most recent DataEdit content

  • don't start a commit if the batch is empty

  • always call notifyDataChanged() in SnapshotListener even if exists and synced flags don't change

  • don't call onUpdate() if there are no modifications at all

  • null FirebaseData reference fields are no longer allowed in FirebaseData objects (was same as empty refID anyway)

  • added simulationNetworkSpeed

  • fix: possible crash because of endless calls to PopupDialogLifecycle()

  • fix: onHide() has never been called when picker used via show()

  • fix: for MyLog adaptions

  • navigation to Log with a LE as argument now filters the log

  • Notice is now shown in the title bar instead of a dialog
    MyLog functions now directly control notice actions and all support lazy arguments

  • animate() can now work on float, too and supports configurable duration

  • added saveCSVStr for timestamps with dayChangeTime

  • update() now writes all data fields

  • fix: need to call updateDataAndLayout() before apply()

  • fix: need to call updateDataAndLayout() even if conditions for a data.update() call are not given
    renamed onWriteData() to onUpdateData()

  • all test now run on new mytesting build type

  • fix: close dialog after syncing icon

  • added NoRefIDException

  • fix: some observers were not called because they were never brought to Started state
    fix: whenSynced() may never invokes callback if refID is empty or server does not respond
    fix: whenAllSynced never invokes callback if only manually added items or when queries are added/removed while waiting for sync
    added timeout exception to whenSynced()
    added invokeIfStarted()
    removed onSynced from add...Query() and set...Query()

  • small code cleanups

  • more details for general Firebase error

  • removed CountingIdlingResourceSingleton

  • added toString() for Active
    added debug log if Active is running for a long time

  • LifecycleOwner is enough for addOnTimeoutListener()

  • fix: store null'ed FirebaseDataReference values as null insteadof empty string in the fields-map

  • small code update

  • PopupDialog now also uses observers

  • now also FirebaseDataBatch is lifecycle-aware and uses observers
    removed updateIf()

  • removed unused constants

  • showProgressIndicatorCounter now is UInt

  • renamed finishedLoadingUpdate to connectedResultStateChange and considers finishedLoading now in all FirebaseResults States except Unsynced

  • DynamicFilter is now considered Synced (resultsAvailable), if the connected filter is in Synced or OnlyManual state

  • observers now all use StatefulInvocable
    FirebaseDataPicker also uses visible and show() concept

  • added FirebaseDataBatch
    replaced FirebaseData create/write(if)/commit with batch compatible versions
    can now add special callback for timeouts
    can now retry failed commit operations
    added Progress.Active
    resultsAvailable will now only be set after all data is processed from a sync

  • gradle version bump

  • added changelog link and updated links to website

  • fix: time values were wrong if not in UTC timezone

  • fix: fixed column width too small

  • Version 2.1.2

  • version bump

  • fix: password error icon hides "show password" toggle button

  • more debug output
    small code updates

  • fixed typo

  • fix in strings: non-positional format

  • Version 2.1.1

  • version bump

  • NumberPicker now starts with "0" when typing first digit after going visible
    changed numbersVisible to notesVisible and updating directly in picker

  • NumberPicker now supports "," key and better display of empty negatives or 0s after dot

  • getLocalData() now always returns a new object with empty fields

  • all money images now have same dimension

  • all money images now have same dimension

  • can now change dialog title

  • show current value in title

  • use hint as title per default

  • added show() for one-time picker

  • FirebaseDataPicker's adapter can now be extended

  • ifSynced() now uses a LifecycleOwner instead of the MasterActivity

  • better output of niceString and shortString

  • added selectedItem argument to MyOnItemSelectedListener

  • small code update

  • small code update

  • DateTimePicker now supports ranges
    DateTimePicker follows constructor arguments from NumberPricePicker

  • Version 2.1.0

  • version bump

  • small fix

  • invoke onDetached observers on release()

  • can now disable multiSelect in FirebaseDataPicker

  • added FirebaseDataPicker

  • NumberPricePicker now supports (user defined) NumberType

  • fix: ExcludeIfZero fields could not be written back to zero

  • added docu

  • setEmptyQuery() is not really useful

  • queries are now synced automatically after creation

  • now using one query for 10 IDs in worker queue

  • can now request the shopID when using dynamic queries

  • removed onlyManuallyAddedItems

  • removed AppCompatActivity.viewLifecycleOwner()

  • use StillLoading also if user is not yet synced

  • more docu

  • Version 2.0.2

  • version bump

  • also print seconds in CSV

  • removed non-progress setter from user model object

  • added syncEmpty() and syncAll, so lists with only manually added items can also be synced

  • code reformat

  • has now its own LifecycleOwner
    supports multiple dismiss listener

  • can now use a LifecycleOwner instead of an activity

  • updated log

  • updated log

  • fix: resultsAvailable was no longer set to true

  • updated logging

  • don't set progress if already set

  • can never be null

  • logging updated

  • only recalculating on width change

  • now also logging progress current and max

  • also check for admin status but no longer for fields like mail, lastLogin, ...

    keep allUsers after user change

  • resultsAvailable is now only set after the first list of incoming items is already processed (added)

  • set...Query no longer resets the query that will be added if it already is part of the results list

  • better logging

  • reduced duplicate logging and combined code

  • small code change

  • set default printToMyLog=true

  • now using repeatOnLifecycle() instead of Looper
    fix: TillFragment may crash after rotation if a booking was done shortly before rotating

  • print error on missing icon select initialization

  • faster display of icon select on slow connection - don't wait for icon sync

  • Version 2.0.1

  • version bump

  • ArrayIndexOutOfBoundsException fix for empty table in showRowContextMenu()

  • Version 2.0.0

  • version bump

  • introducing ViewModel now for persistent data

  • now also filter state is persistent over activity restart

  • fix: if onRestoreInstanceState() is called after items are already populated again, selection and expansion will not be restored

  • expansion based sub tables are now release()d from all their listeners when another expansion takes place

  • fix: height calculation just used the plain ViewHolder, but bindView() and onLayoutExpansion() may change the visible elements and therefore the size of the holder

  • Version 1.5.0

  • version bump

  • line break in empty_tableview_all_filtered

  • MyLog.q() now uses the msg directly

  • TableViewer now has
    - picker support for some column data types
    - updated EmptyView if no filter match
    - reduced width of filter widget to screen width
    - quick filter in header context menu

  • added NumberPricePicker (previous CurrencyEdit in Kasse)

  • added DateTimePicker

  • added set Min/max Width/Height functions

  • TableViewer now has
    - column specific conext menu
    - column specific filtering
    - animated show/hide of columns

  • added a context menu to table headers to set sort, filter, show/hide and user-defined width

  • added showPopupMenu() that fixes:
    - icons now shown on some popup menus
    - disabled title and icons not grayed out

  • fix for creating additional users as admin that automatically are part of the shop

  • using UInt now when appropriate

  • fix: Android does not directly support disabled text look for MenuItems

  • some code reformat

  • more details when a create/write/delete fails

  • fix: entered mail not used on new user creation

  • using better hint for new password field on user creation

  • using buildstring for faster (and nicer) message creation in MyLog.print()

  • using empty string instead of null when mapping FirebaseData with a null reference

  • notice calls are not always written to MyLog addittionally (as they may come from a MyLog call)

  • can now additionally set a (non translated) details string for w and e messages

  • Version 1.4.2

  • version bump

  • added exception handler

  • compile fix: missed import

  • added some more dimensions for TextInputEditText

  • fix: Daylight saving time may interfere with entered dates and end-of-day time

  • small code change

  • added lastLogin and lastAppVersion to User

  • added UncaughtExceptionHandler

  • code simplified

  • Version 1.4.1

  • version bump

  • fix: reentering the app after calling SumUp API may crash on assertions

  • fix: store exception so for example ifSynced() only tries to fetch data on error once

  • fix: SumUp needs older Play Services

  • lib updated

  • Merge remote-tracking branch 'origin/master'

  • Version 1.4.0

  • version bump

  • libs updated

  • no warning on observer not in list

  • fix: icon select dialog won't show it initial-icon is empty

  • fix: missed edit after pausing a DataEdit fragment like switching to another fragment directly after typing in abn edit field

  • fix: missed string

  • consider a resultListener wuthout queries also as finished loading

  • will now call updateEmptyView() also if NotEmpty

  • added showIconPicker()

  • compile fix: missed strings

  • show notice dialogs on top now so they are not hidden by any open keyboard

  • fix: must delete user object in user's app context

  • can now delete user also during login
    also show intro text on login
    removed userExists

  • added horizontal_divider

  • add error text if confirmation string is wrong

  • fix: default log output shall include Info

  • added q() for quick debug output on Info level

  • fix: Settings fragment sometimes has a transparent background

  • added hasError()

  • added repeat password field and visibility toggle

  • Version 1.3.0

  • version bump

  • fix: need to stop and restart progress indicator on detach/attach

  • support back press for going back to mail address

  • allow null args

  • added EmptyFragment for initial layout settings

  • migrated LoginFragment into CreateUserFragment

  • better messages on empty views

  • fix: don't continue with events once the adapter is detached

  • better logTag for ColumnHeader

  • only updating data row now once the edit text has lost focus

  • added overwriteable onNotifyResultsChanged

  • now setting DataEditFragment title automatically based on data existence
    fix: may crash on rotation in DataEditFragment because title is set too early

  • code clean

  • use the sorted column for fast scroll section text

  • changed some debug v to d

  • fix for possible crash if no width space is available

  • added more includes for TableViews depending on needed scroll bars

  • added include_full_table_view for TableViews without the need for a vertical scroll view around

  • added TwoDScrollView for both scrolling and zooming

  • fix: accidentally checked in test code

  • fix: endless recursion in Warning/Error notice possible

  • added option force showing of progress indicator

  • german translation fixed

  • print errors on failed create, update or delete

  • implemented Notice Dialog as replacement for snack bar

  • Version 1.2.0

  • version bump

  • added setTextColorResource()

  • added caller argument to e() function

  • compile fix

  • fix: don't update the DataRow that is currently under edit, or at least restore cursor position if update needs to be done

  • only calling onUserChangeObserved() if there really is a change

  • removed unused intro textbox from LoginFragment

  • fix: compareAlphanumeric() may throw compareAlphanumeric when comparing strings containing huge number sequences

  • code cleanup
    modified some log outputs

  • combined to...String() into formatString()

  • cleaned up

  • cleaned up dependencies

  • rework of settings fragment: added legal part

  • navbar app icon is now quadratic

  • clearing no longer used images

  • paste now warns about using external URLs
    added copy and capture button
    added MainActivity clipboard support and showInfo() with ID

  • added ImageCapture

  • removed support for direct URL as refID icons

  • FirebaseIcon is now a FirebaseData
    FirebaseIcon is now only cached/uploaded if not temporary

  • only show last 30 characters of refID in logTag

  • added Image.toBitmap()

  • now using Pixabay and Google Image Search to search for images

  • can now reduce image size on the fly while downloading

  • better debug output of image properties

  • fix: some mail addresses for auto complete listed twice

  • added debug message

  • make room for at least one row

  • reduce mesage length to LENGTH_LONG

  • make sure Log time value is a time-string only

  • DataEditFragment now again sets the shop of the data

  • ColumnHeaderTimestamp now uses date only or time only display depending on content

  • toLocalDateTime() now supports user pattern

  • allow null for setPicker argument

  • fix: allUsers was never filled

  • added calculatePreferredWidth()

  • if PopupDialog.show() is called again, it will now redisplay

  • code cleanup

  • code cleanup

  • fix: don't show content specific actions on empty lists

  • adaptions for new context menu system

  • beforeOpenContextMenu() now also triggered from main menu

  • compile fix

  • the context menu for DataRows can now be integrated into the main menu to be applied to all (selected) items
    TableViewAdapterFirebase now needs the TClass because of getItemLocalizedPluralName()
    contextMenuItemClicked() now supports multiple rows on one click

  • added String.truncate() function

  • removed sendMail() variant with single "to"

  • posting delayed callbacks via RecyclerView's post() now
    added safeNotifyDataSetChanged()

  • added new FixHorizontalScrollView to avoid crashes while refreshing after changes in an embedded EditText

  • removed useless group for tableview basic menu

  • put master menu items in own group with low order

  • catch exception in readNextLogs() when fragment is hidden

  • better log output in writeIf()

  • code cleanup

  • crash fix if popup is already closed

  • createAndUpload() now executed callback before finishing upload

  • allow huger images (up to 10 MB)

  • allow getMenuID() to return 0

  • force super call and debug output intent in onCreate

  • moved build directory outside of sources

  • use Calendar.clear() instead of setting milliseconds to 0

  • setting data for DataEditFragment now in onViewCreated() and don't automatically sync anymore

  • some code rework for width determination
    sub tables in expansions are now correctly layed-out if they change their column widths
    table rows are correctly redrawn if they change their column widths

  • catching IllegalArgumentException on Timestamp ctor

  • made cells editable based on new ColumnHeader editable property

  • set text of cell and (calculate span) only if it changed its content

  • added attached() and detached() callbacks to TableViewHolder

  • added bindingView check

  • added ColumnHeaderDoubleCounter

  • code cleanup

  • updated gitignore

  • added getNavigationViewHeaderImage()

  • MasterActivity handles more common stuff
    added Shop
    added Settings
    fix navigation graph
    fix missing version name
    fix missing margin_small
    fix missing colors, styles and drawables
    fix missing side_nav_bar

  • initial commit after extracting from Kasse project