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
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
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
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
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
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
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
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
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
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
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
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
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
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