import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import net.ktnx.mobileledger.R;
import net.ktnx.mobileledger.async.RetrieveTransactionsTask;
+import net.ktnx.mobileledger.async.TransactionAccumulator;
import net.ktnx.mobileledger.databinding.ActivityMainBinding;
import net.ktnx.mobileledger.db.DB;
import net.ktnx.mobileledger.db.Option;
import net.ktnx.mobileledger.db.Profile;
+import net.ktnx.mobileledger.db.TransactionWithAccounts;
import net.ktnx.mobileledger.model.Data;
+import net.ktnx.mobileledger.model.LedgerTransaction;
import net.ktnx.mobileledger.ui.FabManager;
import net.ktnx.mobileledger.ui.MainModel;
import net.ktnx.mobileledger.ui.account_summary.AccountSummaryFragment;
* */
public class MainActivity extends ProfileThemedActivity implements FabManager.FabHandler {
+ public static final String TAG = "main-act";
public static final String STATE_CURRENT_PAGE = "current_page";
public static final String BUNDLE_SAVED_STATE = "bundle_savedState";
public static final String STATE_ACC_FILTER = "account_filter";
protected void onStart() {
super.onStart();
- Logger.debug("MainActivity", "onStart()");
+ Logger.debug(TAG, "onStart()");
b.mainPager.setCurrentItem(mCurrentPage, false);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
- Logger.debug("MainActivity", "onCreate()/entry");
+ Logger.debug(TAG, "onCreate()/entry");
super.onCreate(savedInstanceState);
- Logger.debug("MainActivity", "onCreate()/after super");
+ Logger.debug(TAG, "onCreate()/after super");
b = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(b.getRoot());
markDrawerItemCurrent(R.id.nav_latest_transactions);
break;
default:
- Log.e("MainActivity",
- String.format("Unexpected page index %d", position));
+ Log.e(TAG, String.format("Unexpected page index %d", position));
}
super.onPageSelected(position);
createShortcuts(newList);
Profile currentProfile = Data.getProfile();
- if (currentProfile == null || !newList.contains(currentProfile)) {
+ boolean currentProfilePresent = false;
+ if (currentProfile != null) {
+ for (Profile p : newList) {
+ if (p.getId() == currentProfile.getId()) {
+ currentProfilePresent = true;
+ break;
+ }
+ }
+ }
+ if (!currentProfilePresent) {
Logger.debug(TAG, "Switching profile because the current is no longer available");
Data.setCurrentProfile(newList.get(0));
}
return;
}
- mainModel.stopTransactionsRetrieval();
+ mainModel.getAccountFilter()
+ .observe(this, accFilter -> {
+ Logger.debug(TAG, "account filter changed, reloading transactions");
+// mainModel.scheduleTransactionListReload();
+ LiveData<List<TransactionWithAccounts>> transactions =
+ new MutableLiveData<>(new ArrayList<TransactionWithAccounts>());
+ if (profile != null) {
+ if (accFilter == null || accFilter.isEmpty()) {
+ transactions = DB.get()
+ .getTransactionDAO()
+ .getAllWithAccounts(profile.getId());
+ }
+ else {
+ transactions = DB.get()
+ .getTransactionDAO()
+ .getAllWithAccountsFiltered(profile.getId(),
+ accFilter);
+ }
+ }
+
+ transactions.observe(this, list -> {
+ TransactionAccumulator accumulator = new TransactionAccumulator(accFilter);
+
+ for (TransactionWithAccounts tr : list)
+ accumulator.put(new LedgerTransaction(tr));
+
+ accumulator.publishResults(mainModel);
+ });
+ });
+ mainModel.stopTransactionsRetrieval();
mainModel.clearTransactions();
-
- if (haveProfile) {
- Logger.debug("transactions", "requesting list reload");
- mainModel.scheduleTransactionListReload();
- }
}
private void profileThemeChanged() {
// un-hook all observed LiveData
Data.lastUpdateAccountCount.removeObservers(this);
Data.lastUpdateDate.removeObservers(this);
- Logger.debug("MainActivity", "profileThemeChanged(): recreating activity");
+ Logger.debug(TAG, "profileThemeChanged(): recreating activity");
recreate();
}
public void fabNewTransactionClicked(View view) {
mBackMeansToAccountList = false;
}
else {
- Logger.debug("fragments", String.format(Locale.ENGLISH, "manager stack: %d",
+ Logger.debug(TAG, String.format(Locale.ENGLISH, "manager stack: %d",
getSupportFragmentManager().getBackStackEntryCount()));
super.onBackPressed();
}
}
public void onStopTransactionRefreshClick(View view) {
- Logger.debug("interactive", "Cancelling transactions refresh");
+ Logger.debug(TAG, "Cancelling transactions refresh");
mainModel.stopTransactionsRetrieval();
b.transactionListCancelDownload.setEnabled(false);
}
if (progress == null ||
progress.getState() == RetrieveTransactionsTask.ProgressState.FINISHED)
{
- Logger.debug("progress", "Done");
+ Logger.debug(TAG, "progress: Done");
b.transactionProgressLayout.setVisibility(View.GONE);
mainModel.transactionRetrievalDone();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(error);
builder.setPositiveButton(R.string.btn_profile_options, (dialog, which) -> {
- Logger.debug("error", "will start profile editor");
+ Logger.debug(TAG, "will start profile editor");
ProfileDetailActivity.start(this, profile);
});
builder.create()
if (progress.isIndeterminate() || (progress.getTotal() <= 0)) {
b.transactionListProgressBar.setIndeterminate(true);
- Logger.debug("progress", "indeterminate");
+ Logger.debug(TAG, "progress: indeterminate");
}
else {
if (b.transactionListProgressBar.isIndeterminate()) {
b.transactionListProgressBar.setIndeterminate(false);
}
-// Logger.debug("progress",
-// String.format(Locale.US, "%d/%d", progress.getProgress(), progress.getTotal
+// Logger.debug(TAG,
+// String.format(Locale.US, "progress: %d/%d", progress.getProgress(),
+// progress.getTotal
// ()));
b.transactionListProgressBar.setMax(progress.getTotal());
// for some reason animation doesn't work - no progress is shown (stick at 0)
@NotNull
@Override
public Fragment createFragment(int position) {
- Logger.debug("main",
- String.format(Locale.ENGLISH, "Switching to fragment %d", position));
+ Logger.debug(TAG, String.format(Locale.ENGLISH, "Switching to fragment %d", position));
switch (position) {
case 0:
-// debug("flow", "Creating account summary fragment");
+// debug(TAG, "Creating account summary fragment");
return new AccountSummaryFragment();
case 1:
return new TransactionListFragment();