package com.fastaccess.ui.modules.apps.folders; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.content.Loader; import android.support.v4.widget.NestedScrollView; import android.view.View; import com.fastaccess.R; import com.fastaccess.data.dao.FolderModel; import com.fastaccess.data.dao.events.FolderEventModel; import com.fastaccess.data.dao.events.FragmentFolderEventModel; import com.fastaccess.helper.InputHelper; import com.fastaccess.ui.adapter.FoldersAdapter; import com.fastaccess.ui.base.BaseFragment; import com.fastaccess.ui.modules.apps.folders.create.CreateFolderView; import com.fastaccess.ui.modules.apps.folders.select.SelectFolderAppsView; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.dialog.MessageDialogView; import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView; import com.mikhaellopez.circularfillableloaders.CircularFillableLoaders; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; import butterknife.BindView; /** * Created by Kosh on 11 Oct 2016, 7:42 PM */ public class FoldersView extends BaseFragment<FoldersMvp.View, FoldersPresenter> implements FoldersMvp.View { public final static String TAG = "FoldersView"; @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; private FoldersPresenter presenter; private FoldersAdapter adapter; private Loader loader; public static FoldersView newInstance() { return new FoldersView(); } @Override public void onAttach(Context context) { super.onAttach(context); EventBus.getDefault().register(this); } @Override public void onDetach() { super.onDetach(); EventBus.getDefault().unregister(this); } @Override protected int fragmentLayout() { return R.layout.small_grid_list; } @NonNull @Override protected FoldersPresenter getPresenter() { if (presenter == null) { presenter = FoldersPresenter.with(this); } return presenter; } @Override protected void onFragmentCreated(View view, @Nullable Bundle savedInstanceState) { adapter = new FoldersAdapter(new ArrayList<FolderModel>(), getPresenter()); recycler.setEmptyView(empty); emptyText.setText(R.string.no_folders); recycler.setAdapter(adapter); loader = getLoaderManager().initLoader(1, null, getPresenter()); } @Override public void onStartLoading() { recycler.showProgress(progressBar); } @Override public void onFoldersLoaded(@Nullable List<FolderModel> models) { recycler.hideProgress(progressBar); if (models == null) adapter.clear(); else adapter.insertItems(models); } @Override public void onLoaderReset() { recycler.hideProgress(progressBar); adapter.clear(); } @Override public void onEditFolder(@NonNull FolderModel folder) { CreateFolderView.newInstance(folder.getId()).show(getChildFragmentManager(), "CreateFolderView"); } @Override public void onAddAppsToFolder(@NonNull FolderModel folder) { SelectFolderAppsView.newInstance(folder.getId()).show(getChildFragmentManager(), "SelectFolderAppsView"); } @Override public void onCreateNewFolder() { CreateFolderView.newInstance(-1).show(getChildFragmentManager(), "CreateFolderView"); } @Override public void onDeleteFolder(@NonNull FolderModel folder, int position) { MessageDialogView.newInstance(R.string.delete, R.string.delete_folder_confirm_msg, position) .show(getChildFragmentManager(), "MessageDialogView"); } @Override public void onFilter(@Nullable String text) { if (progressBar.isShown()) { return; } if (InputHelper.isEmpty(text)) { loader.onContentChanged(); } else { adapter.getFilter().filter(text); } } @Override public void onNotifyChanges() { if (loader != null) loader.onContentChanged(); EventBus.getDefault().post(new FolderEventModel()); } @Override public void onMessageDialogActionClicked(boolean isOk, int requestCode) { if (isOk) { FolderModel folderModel = adapter.getItem(requestCode); if (folderModel != null) { FolderModel.deleteFolder(folderModel); adapter.removeItem(folderModel); onNotifyChanges(); } } } @Override public void onDialogDismissed() {}//opt-out @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(@NonNull FragmentFolderEventModel model) { if (loader != null) loader.forceLoad(); } }