package com.jparkie.aizoban.views.fragments; import android.content.Context; import android.graphics.PorterDuff; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; import com.jparkie.aizoban.R; import com.jparkie.aizoban.presenters.NavigationPresenter; import com.jparkie.aizoban.presenters.NavigationPresenterImpl; import com.jparkie.aizoban.presenters.mapper.NavigationMapper; import com.jparkie.aizoban.views.NavigationView; public class NavigationFragment extends Fragment implements NavigationView, NavigationMapper { public static final String TAG = NavigationFragment.class.getSimpleName(); public static final String POSITION_ARGUMENT_KEY = TAG + ":" + "PositionArgumentKey"; private NavigationPresenter mNavigationPresenter; private ListView mListView; private View mHeaderView; private ImageView mThumbnailImageView; private TextView mSourceTextView; public static NavigationFragment newInstance(int initialPosition) { NavigationFragment newInstance = new NavigationFragment(); Bundle arguments = new Bundle(); arguments.putInt(POSITION_ARGUMENT_KEY, initialPosition); newInstance.setArguments(arguments); return newInstance; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNavigationPresenter = new NavigationPresenterImpl(this, this); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View menuView = inflater.inflate(R.layout.fragment_navigation, container, false); mListView = (ListView) menuView.findViewById(R.id.listView); mHeaderView = inflater.inflate(R.layout.header_navigation, null); mThumbnailImageView = (ImageView)mHeaderView.findViewById(R.id.thumbnailImageView); mSourceTextView = (TextView)mHeaderView.findViewById(R.id.sourceTextView); return menuView; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { mNavigationPresenter.restoreState(savedInstanceState); } else { mNavigationPresenter.handleInitialArguments(getArguments()); } mNavigationPresenter.initializeViews(); mNavigationPresenter.initializeNavigationFromResources(); } @Override public void onDestroyView() { super.onDestroyView(); mNavigationPresenter.destroyAllSubscriptions(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mNavigationPresenter.saveState(outState); } // NavigationView: @Override public void initializeAbsListView() { if (mListView != null) { if (mHeaderView != null) { mListView.addHeaderView(mHeaderView, null, false); } mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int actualPosition = position - mListView.getHeaderViewsCount(); mNavigationPresenter.onNavigationItemClick(actualPosition); } }); } } @Override public void scrollToTop() { // Do Nothing. } @Override public void initializeSourceTextView(String source) { if (mSourceTextView != null) { mSourceTextView.setText(source.toUpperCase()); } } @Override public void setThumbnail(String url) { if (mThumbnailImageView != null) { mThumbnailImageView.setScaleType(ImageView.ScaleType.CENTER); Glide.with(getActivity()) .load(url) .animate(android.R.anim.fade_in) .into(new GlideDrawableImageViewTarget(mThumbnailImageView) { @Override public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> animation) { super.onResourceReady(resource, animation); mThumbnailImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); mThumbnailImageView.setColorFilter(getResources().getColor(R.color.accentPinkA200), PorterDuff.Mode.MULTIPLY); } } ); } } @Override public void highlightPosition(int position) { if (mListView != null) { mListView.setItemChecked(position + mListView.getHeaderViewsCount(), true); } } @Override public Context getContext() { return getActivity(); } // NavigationMapper: @Override public void registerAdapter(BaseAdapter adapter) { if (mListView != null) { mListView.setAdapter(adapter); } } }