package com.gojira.ui; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.design.widget.Snackbar; 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.ImageView; import android.widget.TextView; import com.devspark.progressfragment.ProgressFragment; import com.gojira.R; import com.gojira.app.GojiraApp; import com.gojira.data.api.JiraService; import com.gojira.data.model.Project; import com.gojira.util.DataRecyclerAdapter; import com.squareup.picasso.Picasso; import java.util.List; import javax.inject.Inject; import butterknife.ButterKnife; import butterknife.InjectView; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; import timber.log.Timber; /** * @author Stratos Theodorou * @version 1.0 * @since 15/05/2015 */ public class ProjectListFragment extends ProgressFragment implements Callback<List<Project>> { @Inject JiraService mService; @InjectView(R.id.recycler) RecyclerView mRecycler; ProjectRecyclerAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onAttach(Activity activity) { super.onAttach(activity); GojiraApp.get(activity).getGraph().inject(this); mAdapter = new ProjectRecyclerAdapter(getActivity()); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setContentView(R.layout.fragment_project_list); ButterKnife.inject(this, getContentView()); setEmptyText(getString(R.string.list_projects_empty)); mRecycler.setLayoutManager(new LinearLayoutManager(getActivity())); mRecycler.setAdapter(mAdapter); setContentShown(!mAdapter.isEmpty()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mService.projects(this); } @Override public void success(List<Project> projects, Response response) { Timber.d("Received %s projects.", projects.size()); mAdapter.setData(projects); setContentShown(true); } @Override public void failure(RetrofitError error) { Timber.w(error, "Could not get projects."); Snackbar.make(getContentView(), R.string.list_projects_error, Snackbar.LENGTH_LONG).show(); setContentShown(true); } static class ProjectRecyclerAdapter extends DataRecyclerAdapter<Project, ProjectRecyclerAdapter.ViewHolder> { @Inject Picasso picasso; ProjectRecyclerAdapter(Context context) { GojiraApp.get(context).getGraph().inject(this); } @Override public ProjectRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int position) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_project, parent, false); return new ProjectRecyclerAdapter.ViewHolder(view); } @Override public void onBindViewHolder(ProjectRecyclerAdapter.ViewHolder holder, int position) { Project project = getItem(position); holder.text.setText(project.name); picasso.load(project.avatarUrls.large).into(holder.icon); } class ViewHolder extends RecyclerView.ViewHolder { @InjectView(R.id.icon) ImageView icon; @InjectView(R.id.text) TextView text; public ViewHolder(View view) { super(view); ButterKnife.inject(this, view); } } } }