Java tutorial
/* * Copyright (C) 2016 Mkhytar Mkhoian * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.justplay1.shoppist.features.goods; import android.graphics.drawable.NinePatchDrawable; import android.os.Build; import android.os.Bundle; import android.os.Parcelable; import android.support.annotation.Nullable; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; import android.support.v4.util.Pair; import android.view.View; import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.decoration.ItemShadowDecorator; import com.h6ah4i.android.widget.advrecyclerview.expandable.RecyclerViewExpandableItemManager; import com.justplay1.shoppist.R; import com.justplay1.shoppist.di.components.GoodsComponent; import com.justplay1.shoppist.models.HeaderViewModel; import com.justplay1.shoppist.models.ProductViewModel; import com.justplay1.shoppist.features.goods.add.AddGoodsDialogFragment; import com.justplay1.shoppist.features.units.add.AddUnitsDialogFragment; import com.justplay1.shoppist.features.category.select.SelectCategoryDialogFragment; import com.justplay1.shoppist.features.units.select.SelectUnitDialogFragment; import com.justplay1.shoppist.shared.base.fragments.BaseExpandableListFragment; import com.justplay1.shoppist.shared.widget.recyclerview.ShoppistRecyclerView; import com.justplay1.shoppist.shared.widget.recyclerview.holders.BaseItemHolder; import java.util.List; import javax.inject.Inject; /** * Created by Mkhytar Mkhoian. */ public class GoodsFragment extends BaseExpandableListFragment<ProductViewModel, GoodsAdapter> implements ShoppistRecyclerView.OnItemClickListener<BaseItemHolder>, View.OnClickListener, GoodsView { @Inject GoodsPresenter presenter; public static GoodsFragment newInstance() { Bundle args = new Bundle(); GoodsFragment fragment = new GoodsFragment(); fragment.setArguments(args); return fragment; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); presenter.attachView(this); presenter.attachRouter((GoodsRouter) getActivity()); } @Override public void onDestroyView() { super.onDestroyView(); presenter.detachView(); presenter.detachRouter(); } @Override protected void injectDependencies() { super.injectDependencies(); getInjector(GoodsComponent.class).inject(this); } @Override protected void initAdapter() { adapter = new GoodsAdapter(getContext(), actionModeInteractionListener, recyclerView, preferences); adapter.setClickListener(this); } protected void initRecyclerView(View view, Bundle savedInstanceState) { super.initRecyclerView(view, savedInstanceState); final Parcelable eimSavedState = (savedInstanceState != null) ? savedInstanceState.getParcelable(SAVED_STATE_EXPANDABLE_ITEM_MANAGER) : null; recyclerViewExpandableItemManager = new RecyclerViewExpandableItemManager(eimSavedState); wrappedAdapter = recyclerViewExpandableItemManager.createWrappedAdapter(adapter); // wrap for expanding final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator(); animator.setSupportsChangeAnimations(false); recyclerView.setAdapter(wrappedAdapter); // requires *wrapped* adapter recyclerView.setItemAnimator(animator); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { recyclerView.addItemDecoration(new ItemShadowDecorator( (NinePatchDrawable) ContextCompat.getDrawable(getContext(), R.drawable.material_shadow_z1))); } recyclerViewExpandableItemManager.attachRecyclerView(recyclerView); } @Override protected int getLayoutId() { return R.layout.fragment_list_with_button; } @Override public boolean onItemLongClick(BaseItemHolder holder, int position, long id) { holder.toggle(); return true; } public boolean isEditButtonEnable() { boolean editFlag = true; if (adapter.getCheckedItemsCount() != 1) { editFlag = false; } return editFlag; } public boolean isCheckAllButtonEnable() { return !adapter.isAllItemsChecked(); } public void onChangeCategoryClick() { presenter.onChangeCategoryClick(adapter.getCheckedItems()); } public void onChangeUnitClick() { presenter.onChangeUnitClick(adapter.getCheckedItems()); } public void onCheckAllItemsClick() { adapter.checkAllItems(); } public void onUnCheckAllItemsClick() { adapter.unCheckAllItems(); } public void onDeleteCheckedItemsClick() { deleteItems(getString(R.string.delete_the_goods), () -> adapter.deleteCheckedView(deleteItems -> presenter.deleteItems(deleteItems))); } @Override public void onItemClick(BaseItemHolder holder, int position, long id) { presenter.onListItemClick(adapter.getChildItem(holder.groupPosition, holder.childPosition)); } @Override public void onClick(View v) { presenter.onAddButtonClick(); } @Override public void showChangeCategoryDialog(final List<ProductViewModel> editProducts) { FragmentManager fm = getFragmentManager(); final SelectCategoryDialogFragment dialog = SelectCategoryDialogFragment.newInstance(); dialog.setCompleteListener((category, isUpdate) -> presenter.changeCategory(category, editProducts)); dialog.show(fm, AddUnitsDialogFragment.class.getName()); } @Override public void showChangeUnitDialog(final List<ProductViewModel> editProducts) { FragmentManager fm = getFragmentManager(); final SelectUnitDialogFragment dialog = SelectUnitDialogFragment.newInstance(); dialog.setCompleteListener((unit, isUpdate) -> presenter.changeUnit(unit, editProducts)); dialog.show(fm, AddUnitsDialogFragment.class.getName()); } @Override public void showEditGoodsDialog(final ProductViewModel editProduct) { FragmentManager fm = getFragmentManager(); AddGoodsDialogFragment dialog = AddGoodsDialogFragment.newInstance(editProduct); dialog.show(fm, AddUnitsDialogFragment.class.getName()); } @Override public void showData(List<Pair<HeaderViewModel, List<ProductViewModel>>> data) { adapter.setData(data); adapter.notifyDataSetChanged(); recyclerViewExpandableItemManager.expandAll(); } @Override public void showLoading() { emptyView.showProgressBar(); } @Override public void hideLoading() { emptyView.hideProgressBar(); } public void onExpandAllClick() { recyclerViewExpandableItemManager.expandAll(); } public void onCollapseAllClick() { recyclerViewExpandableItemManager.collapseAll(); } public void onSortByNameClick() { presenter.onSortByNameClick(adapter.getItems()); } public void onSortByTimeCreatedClick() { presenter.onSortByTimeCreatedClick(adapter.getItems()); } public void onSortByCategoryClick() { presenter.onSortByCategoryClick(adapter.getItems()); } public void onSearchClick() { presenter.onSearchClick(); } }