X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Factivity%2FMainActivity.java;h=0f668cee32379af896fc0293dfa47c1826f431e8;hp=bccdb972fe1e5d5f23fc43e6a435e286e5c3b99f;hb=83cac114e375728080194fb09758b49c50a8119b;hpb=a64a1104191672d6bd017e9f833974cbdd852023 diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java index bccdb972..0f668cee 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java @@ -38,6 +38,7 @@ import android.widget.Toast; import com.google.android.material.floatingactionbutton.FloatingActionButton; import net.ktnx.mobileledger.R; +import net.ktnx.mobileledger.async.DbOpQueue; import net.ktnx.mobileledger.async.RefreshDescriptionsTask; import net.ktnx.mobileledger.async.RetrieveTransactionsTask; import net.ktnx.mobileledger.model.Data; @@ -53,7 +54,6 @@ import net.ktnx.mobileledger.utils.MLDB; import java.lang.ref.WeakReference; import java.text.DateFormat; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Observable; @@ -166,6 +166,12 @@ public class MainActivity extends ProfileThemedActivity { } }); }); + Data.profiles.addObserver((o, arg) -> { + findViewById(R.id.nav_profile_list).setMinimumHeight( + (int) (getResources().getDimension(R.dimen.thumb_row_height) * + Data.profiles.size())); + mProfileListAdapter.notifyDataSetChanged(); + }); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, @@ -317,7 +323,7 @@ public class MainActivity extends ProfileThemedActivity { profile = MobileLedgerProfile.loadAllFromDB(profileUUID); - if (Data.profiles.getList().isEmpty()) { + if (Data.profiles.isEmpty()) { findViewById(R.id.no_profiles_layout).setVisibility(View.VISIBLE); findViewById(R.id.pager_layout).setVisibility(View.GONE); return; @@ -571,7 +577,9 @@ public class MainActivity extends ProfileThemedActivity { ViewPropertyAnimator animator = arrow.animate(); acc.toggleExpanded(); - Data.profile.get().storeAccount(MLDB.getWritableDatabase(), acc); + DbOpQueue.add("update accounts set expanded=? where name=? and profile=?", + new Object[]{acc.isExpanded(), acc.getName(), Data.profile.get().getUuid() + }); if (wasExpanded) { Log.d("accounts", String.format("Collapsing account '%s'", acc.getName())); @@ -580,46 +588,49 @@ public class MainActivity extends ProfileThemedActivity { // removing all child accounts from the view int start = -1, count = 0; - int i = 0; - final ArrayList accountList = Data.accounts.get(); - for (LedgerAccount a : accountList) { - if (acc.isParentOf(a)) { - if (start == -1) { - start = i; + for (int i = 0; i < Data.accounts.size(); i++) { + if (acc.isParentOf(Data.accounts.get(i))) { +// Log.d("accounts", String.format("Found a child '%s' at position %d", +// Data.accounts.get(i).getName(), i)); + if (start == -1) { + start = i; + } + count++; } - count++; - } - else { - if (start != -1) { - break; + else { + if (start != -1) { +// Log.d("accounts", +// String.format("Found a non-child '%s' at position %d", +// Data.accounts.get(i).getName(), i)); + break; + } } } - i++; - } - if (start != -1) { - for (int j = 0; j < count; j++) { - Log.d("accounts", String.format("Removing item %d: %s", start + j, - accountList.get(start).getName())); - accountList.remove(start); - } + if (start != -1) { + for (int j = 0; j < count; j++) { +// Log.d("accounts", String.format("Removing item %d: %s", start + j, +// Data.accounts.get(start).getName())); + Data.accounts.removeQuietly(start); + } - mAccountSummaryFragment.modelAdapter.notifyItemRangeRemoved(start, count); + mAccountSummaryFragment.modelAdapter + .notifyItemRangeRemoved(start, count); } } else { Log.d("accounts", String.format("Expanding account '%s'", acc.getName())); arrow.setRotation(180); animator.rotationBy(-180); - ArrayList accounts = Data.accounts.get(); List children = Data.profile.get().loadVisibleChildAccountsOf(acc); - int parentPos = accounts.indexOf(acc); - if (parentPos == -1) throw new RuntimeException( - "Can't find index of clicked account " + acc.getName()); - accounts.addAll(parentPos + 1, children); - mAccountSummaryFragment.modelAdapter - .notifyItemRangeInserted(parentPos + 1, children.size()); + int parentPos = Data.accounts.indexOf(acc); + if (parentPos != -1) { + // may have disappeared in a concurrent refresh operation + Data.accounts.addAllQuietly(parentPos + 1, children); + mAccountSummaryFragment.modelAdapter + .notifyItemRangeInserted(parentPos + 1, children.size()); + } } break; case R.id.account_row_acc_amounts: