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=f446e1ab7ccd9ca17922265188b450a7973b9658;hp=4202a84cc437d9f074ceaa2c42073038eb1ce483;hb=9b34f9a629ae2729e2ae4bb6e271811fd6173ac6;hpb=8b399301f8373f2e62712649af53d6c2b6c07182 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 4202a84c..f446e1ab 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 @@ -27,6 +27,7 @@ import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.LinearLayout; @@ -52,7 +53,9 @@ 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; import java.util.Observer; @@ -70,6 +73,7 @@ import androidx.viewpager.widget.ViewPager; public class MainActivity extends ProfileThemedActivity { private static final String STATE_CURRENT_PAGE = "current_page"; private static final String BUNDLE_SAVED_STATE = "bundle_savedState"; + public AccountSummaryFragment mAccountSummaryFragment; DrawerLayout drawer; private LinearLayout profileListContainer; private View profileListHeadArrow, profileListHeadMore, profileListHeadCancel; @@ -86,7 +90,6 @@ public class MainActivity extends ProfileThemedActivity { private boolean profileModificationEnabled = false; private boolean profileListExpanded = false; private ProfilesRecyclerViewAdapter mProfileListAdapter; - @Override protected void onStart() { super.onStart(); @@ -551,6 +554,70 @@ public class MainActivity extends ProfileThemedActivity { // FIXME disable rearranging } + public void onAccountSummaryRowViewClicked(View view) { + ViewGroup row = (ViewGroup) view.getParent(); + if (view.getId() == R.id.account_expander_container) { + Log.d("accounts", "Account expander clicked"); + LedgerAccount acc = (LedgerAccount) row.getTag(); + if (!acc.hasSubAccounts()) return; + + boolean wasExpanded = acc.isExpanded(); + + view.clearAnimation(); + ViewPropertyAnimator animator = view.animate(); + + acc.toggleExpanded(); + Data.profile.get().storeAccount(MLDB.getWritableDatabase(), acc); + + if (wasExpanded) { + Log.d("accounts", String.format("Collapsing account '%s'", acc.getName())); + view.setRotation(0); + animator.rotationBy(180); + + // 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; + } + count++; + } + else { + if (start != -1) { + 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); + } + + mAccountSummaryFragment.modelAdapter.notifyItemRangeRemoved(start, count); + } + } + else { + Log.d("accounts", String.format("Expanding account '%s'", acc.getName())); + view.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()); + } + } + } public class SectionsPagerAdapter extends FragmentPagerAdapter { @@ -563,7 +630,8 @@ public class MainActivity extends ProfileThemedActivity { Log.d("main", String.format("Switching to fragment %d", position)); switch (position) { case 0: - return new AccountSummaryFragment(); +// Log.d("flow", "Creating account summary fragment"); + return mAccountSummaryFragment = new AccountSummaryFragment(); case 1: return new TransactionListFragment(); default: @@ -577,5 +645,4 @@ public class MainActivity extends ProfileThemedActivity { return 2; } } - }