/* * Copyright (C) 2015 Arles. All rights reserved. * <p/> * 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 * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * 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.arles.swissmanager.ui.fragment; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.ActionMode; import android.view.GestureDetector; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.ImageButton; import com.arles.swissmanager.R; import com.arles.swissmanager.tournament.Player; import com.arles.swissmanager.ui.activity.NewPlayerActivity; import com.arles.swissmanager.ui.adapter.PlayersAdapter; import com.arles.swissmanager.ui.presenter.PlayerTabPresenter; import com.arles.swissmanager.utils.DividerItemDecoration; import com.arles.swissmanager.utils.ExtendedRecyclerView; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import butterknife.InjectView; import butterknife.OnClick; /** * Created by Admin on 06.07.2015. */ public class PlayerTabFragment extends BaseFragment implements PlayerTabPresenter.IView, FragmentParentClickListener, ActionMode.Callback, RecyclerView.OnItemTouchListener { private static final int REQUEST_CODE_START_ACTIVITY = 16; @InjectView(android.R.id.list) ExtendedRecyclerView mRecyclerView; @InjectView(R.id.fab_add) ImageButton mFloatingButton; @Inject PlayerTabPresenter mPresenter; private PlayersAdapter mAdapter; private ActionMode mActionMode; private GestureDetector mGestureDetector; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mPresenter.setView(this); mPresenter.initializeViewComponent(); } @Override protected int getFragmentLayout() { return R.layout.tab_player; } @Override public void setViewComponent() { setRecyclerView(); } @Override public List<Integer> getSelectedInActionModeItemPositions() { return mAdapter.getSelectedItems(); } @OnClick(R.id.fab_add) public void onFloatingButtonClick() { //mPresenter.launchActivity(REQUEST_CODE_START_ACTIVITY); Intent intent = new Intent(getActivity().getApplicationContext(), NewPlayerActivity.class); startActivityForResult(intent, REQUEST_CODE_START_ACTIVITY); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_CODE_START_ACTIVITY) { if(resultCode == Activity.RESULT_OK) { mPresenter.parseActivityResult(data); } } } @Override public void onResume() { super.onResume(); mAdapter.setData(mPresenter.getPlayerList()); } @Override public void onPause() { super.onPause(); mPresenter.setPlayerList(mAdapter.getData()); } private void setRecyclerView() { mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext())); mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext())); mRecyclerView.setHasFixedSize(true); mRecyclerView.addOnItemTouchListener(this); mRecyclerView.setEmptyView(getView().findViewById(android.R.id.empty)); mAdapter = new PlayersAdapter(new ArrayList<Player>()); mAdapter.setData(mPresenter.getPlayerList()); mRecyclerView.setAdapter(mAdapter); mGestureDetector = new GestureDetector(getActivity(), new RecyclerViewGestureListener()); } @Override public void onRefresh() { mAdapter.setData(mPresenter.getPlayerList()); } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.getMenuInflater().inflate(R.menu.menu_main_action_mode, menu); mFloatingButton.setVisibility(View.GONE); getActivity().findViewById(R.id.tabs).setVisibility(View.GONE); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.menu_delete: mPresenter.remove(); mActionMode.finish(); return true; default: return false; } } @Override public void onDestroyActionMode(ActionMode mode) { mActionMode = null; mAdapter.clearSelection(); mFloatingButton.setVisibility(View.VISIBLE); getActivity().findViewById(R.id.tabs).setVisibility(View.VISIBLE); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetector.onTouchEvent(e); return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { } private void toggleItem(int id) { mAdapter.toggleSelection(id); String title = getString(R.string.selected_count, mAdapter.getSelectedItemCount()); mActionMode.setTitle(title); } public void onRecyclerItemTap(View view, int position) { if (mActionMode != null) { toggleItem(position); return; } else { mPresenter.onPlayerItemClick(position); } // really tap } private class RecyclerViewGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onSingleTapConfirmed(MotionEvent e) { View view = mRecyclerView.findChildViewUnder(e.getX(), e.getY()); if(view != null) { int position = mRecyclerView.getChildPosition(view); onRecyclerItemTap(view, position); } return super.onSingleTapConfirmed(e); } @Override public void onLongPress(MotionEvent e) { View view = mRecyclerView.findChildViewUnder(e.getX(), e.getY()); if (mActionMode == null) { mActionMode = getActivity().startActionMode(PlayerTabFragment.this); toggleItem(mRecyclerView.getChildPosition(view)); super.onLongPress(e); } } } }