/* * This program is part of the OpenLMIS logistics management information * system platform software. * * Copyright © 2015 ThoughtWorks, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. This program is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License for more details. You should * have received a copy of the GNU Affero General Public License along with * this program. If not, see http://www.gnu.org/licenses. For additional * information contact info@OpenLMIS.org */ package org.openlmis.core.view.fragment; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import com.google.inject.Inject; import org.openlmis.core.R; import org.openlmis.core.manager.SharedPreferenceMgr; import org.openlmis.core.presenter.Presenter; import org.openlmis.core.presenter.StockCardPresenter; import org.openlmis.core.utils.Constants; import org.openlmis.core.view.activity.StockMovementsWithLotActivity; import org.openlmis.core.view.adapter.StockCardListAdapter; import org.openlmis.core.view.holder.StockCardViewHolder; import org.openlmis.core.view.viewmodel.InventoryViewModel; import org.openlmis.core.view.widget.ProductsUpdateBanner; import java.util.ArrayList; import java.util.List; import roboguice.inject.InjectView; import static org.openlmis.core.presenter.StockCardPresenter.ArchiveStatus.Active; public class StockCardListFragment extends BaseFragment implements StockCardPresenter.StockCardListView, AdapterView.OnItemSelectedListener { @InjectView(R.id.sort_spinner) Spinner sortSpinner; @InjectView(R.id.tv_total) TextView tvTotal; @InjectView(R.id.products_list) RecyclerView stockCardRecycleView; @InjectView(R.id.product_update_banner) ProductsUpdateBanner productsUpdateBanner; @Inject StockCardPresenter presenter; @Inject SharedPreferenceMgr sharedPreferenceMgr; StockCardListAdapter mAdapter; private int currentPosition; @Override public Presenter initPresenter() { return presenter; } @Override public void onAttach(Activity activity) { super.onAttach(activity); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_stockcard_list, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initRecycleView(); initSortSpinner(); loadStockCards(); } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { currentPosition = position; switch (position) { case 0: mAdapter.sortByName(true); break; case 1: mAdapter.sortByName(false); break; case 2: mAdapter.sortBySOH(false); break; case 3: mAdapter.sortBySOH(true); break; default: } } @Override public void onNothingSelected(AdapterView<?> parent) { } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK && requestCode == Constants.REQUEST_FROM_STOCK_LIST_PAGE) { presenter.refreshStockCardViewModelsSOH(); productsUpdateBanner.refreshBannerText(); loadStockCards(); } } public void onSearch(String query) { mAdapter.filter(query); tvTotal.setText(getString(R.string.label_total, mAdapter.getItemCount())); } protected void createAdapter() { mAdapter = new StockCardListAdapter(new ArrayList<InventoryViewModel>(), onItemViewClickListener); } protected void loadStockCards() { presenter.loadStockCards(Active); } private void initRecycleView() { createAdapter(); stockCardRecycleView.setHasFixedSize(true); stockCardRecycleView.setLayoutManager(new LinearLayoutManager(getActivity())); stockCardRecycleView.setAdapter(mAdapter); } protected StockCardViewHolder.OnItemViewClickListener onItemViewClickListener = new StockCardViewHolder.OnItemViewClickListener() { @Override public void onItemViewClick(InventoryViewModel inventoryViewModel) { Intent intent = getStockMovementIntent(inventoryViewModel); startActivityForResult(intent, Constants.REQUEST_FROM_STOCK_LIST_PAGE); } }; protected Intent getStockMovementIntent(InventoryViewModel inventoryViewModel) { return StockMovementsWithLotActivity.getIntentToMe(getActivity(), inventoryViewModel, false); } private void initSortSpinner() { ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.sort_items_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sortSpinner.setAdapter(adapter); sortSpinner.setOnItemSelectedListener(this); } @Override public void refresh(List<InventoryViewModel> data) { mAdapter.refreshList(data); tvTotal.setText(getString(R.string.label_total, mAdapter.getItemCount())); onItemSelected(sortSpinner, null, currentPosition, 0L); } }