package com.fastaccess.ui.modules.apps.folders.select; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.v4.widget.NestedScrollView; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import android.widget.ProgressBar; import com.fastaccess.R; import com.fastaccess.data.dao.AppsModel; import com.fastaccess.data.dao.FolderModel; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.Logger; import com.fastaccess.ui.adapter.SelectFolderAppsAdapter; import com.fastaccess.ui.base.BaseBottomSheetDialog; import com.fastaccess.ui.modules.apps.folders.create.CreateFolderMvp; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView; import com.mikhaellopez.circularfillableloaders.CircularFillableLoaders; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import butterknife.BindView; import icepick.State; /** * Created by Kosh on 11 Oct 2016, 10:24 PM */ public class SelectFolderAppsView extends BaseBottomSheetDialog implements SelectFolderAppsMvp.View { @State HashMap<String, AppsModel> selection = new LinkedHashMap<>(); private long folderId; @BindView(R.id.recycler) DynamicRecyclerView recycler; @BindView(R.id.empty_text) FontTextView emptyText; @BindView(R.id.empty) NestedScrollView empty; @BindView(R.id.progressBar) CircularFillableLoaders progressBar; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.topProgress) ProgressBar topProgress; @BindView(R.id.appbar) AppBarLayout appbar; private SelectFolderAppsAdapter adapter; private SelectFolderAppsPresenter presenter; private FolderModel folderModel; private CreateFolderMvp.OnNotifyFoldersAdapter callback; public static SelectFolderAppsView newInstance(long folderId) { SelectFolderAppsView view = new SelectFolderAppsView(); view.setArguments(Bundler.start().put("folderId", folderId).end()); return view; } @Override public void onAttach(Context context) { super.onAttach(context); if (getPresenter() != null && getParentFragment() instanceof CreateFolderMvp.OnNotifyFoldersAdapter) { callback = (CreateFolderMvp.OnNotifyFoldersAdapter) getParentFragment(); } else if (context instanceof CreateFolderMvp.OnNotifyFoldersAdapter) { callback = (CreateFolderMvp.OnNotifyFoldersAdapter) context; } else { throw new RuntimeException("Activity/Fragment must implement OnNotifyFoldersAdapter"); } } @Override public void onDetach() { super.onDetach(); } @Override protected int layoutRes() { return R.layout.select_folder_apps_layout; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); folderId = getArguments().getLong("folderId"); if (savedInstanceState == null) { List<AppsModel> apps = AppsModel.getApps(getFolderModel().getId()); if (!apps.isEmpty()) { for (AppsModel m : apps) { selection.put(m.getActivityInfoName(), m); } } } } @Override protected void onViewCreated(@NonNull View view) { toolbar.setTitle(R.string.select_apps); toolbar.setNavigationIcon(R.drawable.ic_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); toolbar.inflateMenu(R.menu.add_menu); toolbar.getMenu().findItem(R.id.add).setIcon(R.drawable.ic_done); toolbar.getMenu().findItem(R.id.selectAll).setVisible(false); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.add) { onAddApps(); } return false; } }); adapter = new SelectFolderAppsAdapter(new ArrayList<AppsModel>(), getPresenter(), selection); recycler.setEmptyView(empty); recycler.setAdapter(adapter); getLoaderManager().initLoader(2, null, getPresenter()); } @Override public void onStartLoading() { recycler.showProgress(progressBar); } @Override public void onAppsLoaded(@Nullable List<AppsModel> models) { recycler.hideProgress(progressBar); if (models == null) { adapter.clear(); dismiss(); return; } adapter.insertItems(models); Logger.e(models.size()); } @Override public void onLoaderReset() { if (recycler == null) return; recycler.hideProgress(progressBar); adapter.clear(); } @Override public void onRowClicked(@NonNull AppsModel model, int position) { adapter.select(model.getActivityInfoName(), position, !adapter.isSelected(model.getActivityInfoName())); } @NonNull private FolderModel getFolderModel() { if (folderModel == null) { folderModel = FolderModel.findById(FolderModel.class, folderId); } if (folderModel == null) { throw new NullPointerException("folderModel is null, make sure passing the right id"); } return folderModel; } private void onAddApps() { List<AppsModel> appsModels = adapter.getSelections(); AppsModel.deleteAllByFolder(getFolderModel()); if (appsModels != null && !appsModels.isEmpty()) { for (AppsModel app : appsModels) { app.setFolderId(getFolderModel().getId()); app.save(); } } callback.onNotifyChanges(); dismiss(); } public SelectFolderAppsPresenter getPresenter() { if (presenter == null) presenter = SelectFolderAppsPresenter.with(this); return presenter; } }