Move some potentially sharable utility code from desktop's ClosedTrade
models to core's new ClosedTradeUtil.
The API's `gettrades --category=<open|closed|failed>` method will need
some of this logic on the server side, but the scope of this refactoring
is larger in the interest of a more complete refactor, and avoiding
duplication in the future.
In practice, presentation/display logic should be kept in UIs, but the core
api will need to duplicate a very small part of the code in DisplayUtils if
a very small part of this refactoring is not done. Instead of moving a tiny
bit of the volume formatting methods, all of them are moved to core.
We can cache an offer payload hash as soon as its `offerFeePaymentTxId`
is set. (The payload hash cannot be calculated until the object can
be transformed into a protobuf message, which requires a non-null
offerFeePaymentTxId.)
Another benefit is removal of the payload hash argument from the
`OfferBookListItem` constructor.
Changes include
- `OfferPayload` Added `transient byte[] hash` field + getter method
(where hash is calculated and cached).
- `OfferBookService` Removed `P2PDataStorage.ByteArray hashOfPayload`
parameter from `OfferBookChangedListener` listener methods
`onAdded` & `onRemoved`. (Hash is cached in `OfferPayload`.)
- `P2PDataStorage` Added null check to `ByteArray` class constructor.
- `OfferBook` Adjusted for change to `OfferBookChangedListener`.
Also removed redundant payload hash null checks.
- `TakeOfferDataModel` and `MarketAlerts` Adjusted for change to
`OfferBookChangedListener`.
- `OfferBookListItem` Removed overloaded constructor with
`@Nullable P2PDataStorage.ByteArray hashOfPayload` parameter.
(Field value is set from cached offer payload hash.)
- `OfferBookViewModelTest` and `OfferMaker` Adjusted test and test fixture:
do not attempt to create offer payloads without an `offerFeePaymentTxId`.
The new debug log statements included in this PR help trace add/remove
list item actions if problems are seen in the UI's OfferBook, after the
API 'editoffer' method is released.
They can and should be removed in a future PR if the released API feature
proves it did not introduce bugs into the UI.