package com.architjn.materialicons.ui.fragments; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.os.CountDownTimer; import android.support.annotation.Nullable; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.architjn.materialicons.R; import com.architjn.materialicons.others.ScrollAwareFABBehavior; import com.architjn.materialicons.tasks.LoadAppsList; import com.architjn.materialicons.ui.HomeActivity; import com.pk.requestmanager.AppInfo; import com.pk.requestmanager.PkRequestManager; import java.util.List; /** * Created by architjn on 04/01/16. */ public class RequestFragment extends Fragment implements LoadAppsList.Callback { private RecyclerView rv; private PkRequestManager requestManager; private List<AppInfo> apps; private View mainView; private Context context; private RequestAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mainView = inflater.inflate(R.layout.activity_request, container, false); context = mainView.getContext(); rv = (RecyclerView) mainView.findViewById(R.id.req_rv); setActionBar((Toolbar) mainView.findViewById(R.id.toolbar_req)); if (Build.VERSION.SDK_INT >= 21) getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.primaryColorDark)); new LoadAppsList(context, this, requestManager).execute(); LinearLayoutManager layoutManager = new LinearLayoutManager(context); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); layoutManager.scrollToPosition(0); rv.setLayoutManager(layoutManager); rv.setHasFixedSize(true); Snackbar.make(mainView.findViewById(R.id.coordinating_req), "Loading apps may take some time..", Snackbar.LENGTH_LONG).show(); CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) mainView.findViewById(R.id.fab_rev).getLayoutParams(); p.setBehavior(new ScrollAwareFABBehavior(context)); mainView.findViewById(R.id.fab_rev).setLayoutParams(p); (mainView.findViewById(R.id.fab_rev)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { // Small workaround requestManager.setActivity(getActivity()); // Build and send the request in the background. requestManager.sendRequestAsync(); if (requestManager.getNumSelected() == 0) { Snackbar.make(mainView.findViewById(R.id.coordinating_req), "No apps selected!", Snackbar.LENGTH_LONG) .setAction("Select All", new View.OnClickListener() { @Override public void onClick(View v) { List<AppInfo> mAppList = apps; for (AppInfo mApp : mAppList) { mApp.setSelected(true); } adapter.notifyDataSetChanged(); } }).show(); } else { Snackbar.make(mainView.findViewById(R.id.coordinating_req), "Generating Mail..", Snackbar.LENGTH_LONG).show(); } } catch (NullPointerException e) { e.printStackTrace(); Snackbar.make(mainView.findViewById(R.id.coordinating_req), "Apps are loading wait for them..", Snackbar.LENGTH_LONG).show(); } } }); return mainView; } private void setActionBar(Toolbar toolbar) { HomeActivity activity = ((HomeActivity) getActivity()); activity.setSupportActionBar(toolbar); activity.updateToggleButton(toolbar); } @Override public void onListLoaded(List<AppInfo> apps, PkRequestManager requestManager) { this.requestManager = requestManager; this.apps = apps; (mainView.findViewById(R.id.progressBar_req)).setVisibility(View.GONE); adapter = new RequestAdapter(context, apps); rv.setAdapter(adapter); } public static class RequestAdapter extends RecyclerView.Adapter<RequestAdapter.SimpleItemViewHolder> { private final List<AppInfo> items; private Context context; public final static class SimpleItemViewHolder extends RecyclerView.ViewHolder { public TextView appName; public ImageView appIcon; public CheckBox checkBox; public View mainView; public SimpleItemViewHolder(View view) { super(view); appName = (TextView) view.findViewById(R.id.req_item_name); appIcon = (ImageView) view.findViewById(R.id.req_item_icon); checkBox = (CheckBox) view.findViewById(R.id.req_item_checkbox); mainView = view; } } public RequestAdapter(Context context, List<AppInfo> items) { this.context = context; this.items = items; } @Override public RequestAdapter.SimpleItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()). inflate(R.layout.req_list_item, parent, false); return new SimpleItemViewHolder(itemView); } @Override public void onBindViewHolder(final SimpleItemViewHolder holder, final int position) { holder.appName.setText(items.get(position).getName()); holder.appIcon.setImageDrawable(items.get(position).getImage()); holder.checkBox.setChecked(items.get(position).isSelected()); holder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addToList(position); } }); holder.mainView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addToList(position); } }); } private void addToList(int position) { AppInfo mApp = items.get(position); mApp.setSelected(!mApp.isSelected()); items.set(position, mApp); // Let the adapter know you selected something new CountDownTimer(400, 1000) { public void onTick(long millisUntilFinished) { } public void onFinish() { notifyDataSetChanged(); } }.start(); } @Override public int getItemCount() { return this.items.size(); } } }