package com.jahirfiquitiva.paperboard.fragments;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
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.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.jahirfiquitiva.dashboardsample.R;
import com.melnykov.fab.FloatingActionButton;
import com.pkmmte.requestmanager.AppInfo;
import com.pkmmte.requestmanager.PkRequestManager;
import com.pkmmte.requestmanager.RequestSettings;
import java.util.LinkedList;
import java.util.List;
/**
* Created by Jahir on 28/02/2015.
*/
public class Request extends Fragment {
// Request Manager
private PkRequestManager mRequestManager;
// App List
private List<AppInfo> mApps = new LinkedList<AppInfo>();
// List & Adapter
private ListView mList;
private ListAdapter mAdapter;
private ProgressBar mProgress;
private View mButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.section_icon_request, null);
showNewAdviceDialog();
mList = (ListView) root.findViewById(R.id.appList);
mList.setVisibility(View.GONE);
mAdapter = new ListAdapter(getActivity(), mApps);
mList.setAdapter(mAdapter);
mProgress = (ProgressBar) root.findViewById(R.id.progress);
mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
AppInfo mApp = mApps.get(position);
mApp.setSelected(!mApp.isSelected());
mApps.set(position, mApp);
mAdapter.notifyDataSetChanged();
}
});
FloatingActionButton fab = (FloatingActionButton) root.findViewById(R.id.send_btn);
fab.attachToListView(mList);
mButton = root.findViewById(R.id.send_btn);
mButton.setVisibility(View.GONE);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRequestManager.setActivity(getActivity());
if (mRequestManager.getNumSelected() < 1) {
mRequestManager.sendRequest(true, false);
} else {
mRequestManager.sendRequestAsync();
}
Toast.makeText(getActivity(), getString(R.string.building_request), Toast.LENGTH_LONG).show();
}
});
new GrabApplicationsTask().execute();
return root;
}
private void showNewAdviceDialog() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
if (!prefs.getBoolean("dontshowagain", false)) {
new MaterialDialog.Builder(getActivity())
.title(R.string.advice)
.content(R.string.request_advice)
.positiveText(R.string.close)
.neutralText(R.string.dontshow)
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
PreferenceManager.getDefaultSharedPreferences(getActivity())
.edit().putBoolean("dontshowagain", false).commit();
}
@Override
public void onNeutral(MaterialDialog dialog) {
PreferenceManager.getDefaultSharedPreferences(getActivity())
.edit().putBoolean("dontshowagain", true).commit();
}
}).show();
}
}
private class GrabApplicationsTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
try {
mRequestManager = PkRequestManager.getInstance(getActivity());
mRequestManager.setDebugging(true);
mRequestManager.setSettings(new RequestSettings.Builder()
.addEmailAddress(getResources().getString(R.string.email_id))
.emailSubject(getResources().getString(R.string.email_request_subject))
.emailPrecontent(getResources().getString(R.string.request_precontent))
.saveLocation(Environment.getExternalStorageDirectory().getAbsolutePath() + getString(R.string.request_save_location))
.build());
mRequestManager.loadAppsIfEmpty();
mApps.addAll(mRequestManager.getApps());
} catch (Exception ex) {
}
return "";
}
@Override
protected void onPostExecute(String result) {
if (mAdapter != null) {
mAdapter.notifyDataSetChanged();
}
if (mList != null) {
mList.setVisibility(View.VISIBLE);
}
if (mButton != null) {
mButton.setVisibility(View.VISIBLE);
}
if (mProgress != null) {
mProgress.setVisibility(View.GONE);
}
}
}
private class ListAdapter extends BaseAdapter {
private Context mContext;
private List<AppInfo> mApps;
public ListAdapter(Context context, List<AppInfo> apps) {
this.mContext = context;
this.mApps = apps;
}
@Override
public int getCount() {
return mApps.size();
}
@Override
public AppInfo getItem(int position) {
return mApps.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
AppInfo mApp = mApps.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.request_item, null);
holder = new ViewHolder();
holder.imgIcon = (ImageView) convertView.findViewById(R.id.imgIcon);
holder.txtName = (TextView) convertView.findViewById(R.id.txtName);
holder.chkSelected = (CheckBox) convertView.findViewById(R.id.chkSelected);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(mApp.getName());
holder.imgIcon.setImageDrawable(mApp.getImage());
holder.chkSelected.setChecked(mApp.isSelected());
return convertView;
}
private class ViewHolder {
public ImageView imgIcon;
public TextView txtName;
public CheckBox chkSelected;
}
}
}