private Observer<String> hintObserver;
private Observer<Integer> focusedAccountObserver;
private Observer<Integer> accountCountObserver;
+ private Observer<Boolean> editableObserver;
private boolean inUpdate = false;
private boolean syncingData = false;
NewTransactionItemHolder(@NonNull View itemView, NewTransactionItemsAdapter adapter) {
syncingData = false;
}
};
+ editableObserver = this::setEditable;
focusedAccountObserver = index -> {
if ((index != null) && index.equals(getAdapterPosition())) {
switch (item.getType()) {
else tvAmount.setImeOptions(EditorInfo.IME_ACTION_NEXT);
};
}
+ private void setEditable(Boolean editable) {
+ tvDate.setEnabled(editable);
+ tvDescription.setEnabled(editable);
+ tvAccount.setEnabled(editable);
+ tvAmount.setEnabled(editable);
+ }
private void beginUpdates() {
if (inUpdate) throw new RuntimeException("Already in update mode");
inUpdate = true;
this.item.stopObservingDate(dateObserver);
this.item.stopObservingDescription(descriptionObserver);
this.item.stopObservingAmountHint(hintObserver);
+ this.item.stopObservingEditableFlag(editableObserver);
this.item.getModel()
.stopObservingFocusedItem(focusedAccountObserver);
this.item.getModel()
lHead.setVisibility(View.VISIBLE);
lAccount.setVisibility(View.GONE);
lPadding.setVisibility(View.GONE);
+ setEditable(true);
break;
case transactionRow:
LedgerTransactionAccount acc = item.getAccount();
lHead.setVisibility(View.GONE);
lAccount.setVisibility(View.VISIBLE);
lPadding.setVisibility(View.GONE);
+ setEditable(true);
break;
case bottomFiller:
lHead.setVisibility(View.GONE);
lAccount.setVisibility(View.GONE);
lPadding.setVisibility(View.VISIBLE);
+ setEditable(false);
break;
}
item.observeDate(activity, dateObserver);
item.observeDescription(activity, descriptionObserver);
item.observeAmountHint(activity, hintObserver);
+ item.observeEditableFlag(activity, editableObserver);
item.getModel()
.observeFocusedItem(activity, focusedAccountObserver);
item.getModel()
import androidx.annotation.NonNull;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModel;
import net.ktnx.mobileledger.model.LedgerTransactionAccount;
private LedgerTransactionAccount account;
private MutableLiveData<String> amountHint = new MutableLiveData<>();
private NewTransactionModel model;
- private boolean editable = true;
+ private MutableLiveData<Boolean> editable = new MutableLiveData<>(true);
public Item(NewTransactionModel model) {
this.model = model;
type = ItemType.bottomFiller;
+ editable.setValue(false);
}
public Item(NewTransactionModel model, Date date, String description) {
this.model = model;
this.type = ItemType.generalData;
this.date.setValue(date);
this.description.setValue(description);
+ this.editable.setValue(true);
}
public Item(NewTransactionModel model, LedgerTransactionAccount account) {
this.model = model;
this.type = ItemType.transactionRow;
this.account = account;
+ this.editable.setValue(true);
}
public NewTransactionModel getModel() {
return model;
}
public boolean isEditable() {
ensureType(ItemType.transactionRow);
- return editable;
+ return this.editable.getValue();
}
public void setEditable(boolean editable) {
ensureType(ItemType.transactionRow);
- this.editable = editable;
+ this.editable.setValue(editable);
}
public String getAmountHint() {
ensureType(ItemType.transactionRow);
return String.valueOf(myDay);
}
+ public void observeEditableFlag(NewTransactionActivity activity,
+ Observer<Boolean> observer) {
+ editable.observe(activity, observer);
+ }
+ public void stopObservingEditableFlag(Observer<Boolean> observer) {
+ editable.removeObserver(observer);
+ }
}
}