private void invalidateAccountViews(View itemView, int currentIndex, int selectedIndex) { if (itemView == null) { for (int i = 0; i < mAccountsFrame.getChildCount() - 1; i++) { invalidateAccountViews(mAccountsFrame.getChildAt(i), i, selectedIndex); } } else { TextView title = (TextView) itemView.findViewById(R.id.title); ImageView icon = (ImageView) itemView.findViewById(R.id.icon); Account acc = mAccounts.get(currentIndex); switch (acc.type()) { default: icon.setImageResource(R.drawable.ic_folder); break; case Account.TYPE_GOOGLE_DRIVE: icon.setImageResource(R.drawable.ic_drive); break; case Account.TYPE_DROPBOX: icon.setImageResource(R.drawable.ic_dropbox); break; } boolean activated = currentIndex == selectedIndex; itemView.setActivated(activated); icon.getDrawable() .mutate() .setColorFilter(activated ? mSelectedColor : mRegularColor, PorterDuff.Mode.SRC_ATOP); itemView.setTag(currentIndex); title.setText(acc.name()); title.setTextColor(activated ? mSelectedColor : mRegularColor); } }
public void reloadAccounts() { if (getActivity() == null) return; mAccounts = new ArrayList<>(); View addAccountFrame = mAccountsFrame.findViewById(R.id.addAccountFrame); mAccountsFrame.removeAllViews(); mAccountsFrame.addView(addAccountFrame); int mCurrent = Account.getActive(getActivity()); if (mCurrent == -1) { Account acc = AccountProvider.add(getActivity(), null, Account.TYPE_LOCAL); mAccounts.add(acc); Account.setActive(getActivity(), acc); mCurrent = acc.id(); } final int fCurrent = mCurrent; Account.getAll( getActivity(), new Account.AccountsCallback() { @Override public void onAccounts(Account[] accounts) { if (accounts == null || !isAdded()) return; for (int i = 0; i < accounts.length; i++) { Account a = accounts[i]; mAccounts.add(a); boolean selected = a.id() == fCurrent; mAccountsFrame.addView(getAccountView(i, selected ? i : -1, mAccountsFrame), i); if (selected) getAlbums(a); } mAccountsFrame.requestLayout(); mAccountsFrame.invalidate(); } }); }
public void getAlbums(Account account) { if (account != null) mCurrentAccount = account; mAdapter.clear(); mAdapter.add(new NavDrawerAdapter.Entry(AlbumEntry.ALBUM_OVERVIEW, false, false)); // TODO clear activity back stack to remove back stack of old account? mCurrentAccount.getAlbums( MediaAdapter.SortMode.NAME_DESC, MediaAdapter.FileFilterMode.ALL, new Account.AlbumCallback() { @Override public void onAlbums(AlbumEntry[] albums) { for (AlbumEntry a : albums) mAdapter.add(new NavDrawerAdapter.Entry(a.data(), false, false)); if (mCurrentAccount.hasIncludedFolders()) { getIncludedFolders(albums); } else mAdapter.notifyDataSetChangedAndSort(); } @Override public void onError(Exception e) { if (getActivity() == null) return; Utils.showErrorDialog(getActivity(), e); } }); }
private void getIncludedFolders(AlbumEntry[] preAlbums) { mCurrentAccount.getIncludedFolders( preAlbums, new Account.AlbumCallback() { @Override public void onAlbums(AlbumEntry[] albums) { for (AlbumEntry a : albums) mAdapter.update(new NavDrawerAdapter.Entry(a.data(), false, true)); mAdapter.add(new NavDrawerAdapter.Entry("", true, false)); mAdapter.notifyDataSetChangedAndSort(); } @Override public void onError(Exception e) { if (getActivity() == null) return; Utils.showErrorDialog(getActivity(), e); } }); }