package net.fastfourier.something; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import com.android.volley.Response; import com.android.volley.VolleyError; import com.salvadordalvik.fastlibrary.alert.FastAlert; import com.salvadordalvik.fastlibrary.list.FastItem; import com.salvadordalvik.fastlibrary.list.SectionFastAdapter; import net.fastfourier.something.list.PrivateMessageFolderItem; import net.fastfourier.something.list.PrivateMessageItem; import net.fastfourier.something.request.PMDeleteRequest; import net.fastfourier.something.request.PrivateMessageListRequest; import java.util.ArrayList; /** * Created by matthewshepard on 2/7/14. */ public class PrivateMessageListFragment extends SomeFragment implements Response.ErrorListener, Response.Listener<PrivateMessageListRequest.PMListResult> { private static final int REQUEST_REPLY = 120; private ListView pmList; private SectionFastAdapter adapter; private int folderId = 0; public PrivateMessageListFragment() { super(R.layout.generic_listview, R.menu.pm_list); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); folderId = getActivity().getIntent().getIntExtra("pm_folder", 0); } @Override public void viewCreated(View frag, Bundle savedInstanceState) { pmList = (ListView) frag.findViewById(R.id.listview); adapter = new SectionFastAdapter(this, 2); pmList.setAdapter(adapter); pmList.setOnItemClickListener(adapter); registerForContextMenu(pmList); } @Override public void onResume() { super.onResume(); startRefreshIfStale(); } @Override public void refreshData(boolean pullToRefresh, boolean staleRefresh) { queueRequest(new PrivateMessageListRequest(folderId, false, this, this)); } @Override public void onResponse(PrivateMessageListRequest.PMListResult pmListResult) { adapter.replaceSection(0, pmListResult.folders); adapter.replaceSection(1, pmListResult.messages); Activity activity = getActivity(); if(activity instanceof PrivateMessageListActivity){ highlightPM(((PrivateMessageListActivity)activity).getSelectedPMId()); } } @Override public void onErrorResponse(VolleyError volleyError) { FastAlert.error(getActivity(), getView(), getSafeString(R.string.loading_failed)); } public void showFolder(int id) { folderId = id; ArrayList<FastItem> folders = adapter.getSectionItems(0); if(folders != null){ for(FastItem item : folders){ if(item instanceof PrivateMessageFolderItem){ ((PrivateMessageFolderItem) item).setSelected(item.getId() == id); } } } adapter.notifyDataSetChanged(); startRefresh(); } public void onPaneObscured() { } public void onPaneRevealed() { } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; FastItem item = adapter.getItem(info.position); if (item instanceof PrivateMessageItem) { getActivity().getMenuInflater().inflate(R.menu.pm_item, menu); } } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu_delete: AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); FastItem pm = adapter.getItem(info.position); if(pm != null){ queueRequest(new PMDeleteRequest(folderId, deleteListener, null, pm.getId())); return true; } } return super.onContextItemSelected(item); } public Response.Listener deleteListener = new Response.Listener() { @Override public void onResponse(Object response) { FastAlert.notice(PrivateMessageListFragment.this, R.string.pm_deleted); startRefresh(); } }; @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu_newpm: startActivityForResult( new Intent(getActivity(), ReplyActivity.class) .putExtra("pm_id", ReplyFragment.NEW_PM) .putExtra("reply_type", ReplyFragment.TYPE_PM), REQUEST_REPLY ); return true; case R.id.menu_refresh: startRefresh(); return true; } return super.onOptionsItemSelected(item); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_REPLY && resultCode > 0){ FastAlert.notice(this, R.string.reply_sent_pm); startRefresh(); } } public void highlightPM(int id) { for(FastItem item : adapter.getAllItems()){ if(item instanceof PrivateMessageItem){ ((PrivateMessageItem) item).setSelected(item.getId() == id); } } } @Override public CharSequence getTitle() { return getSafeString(R.string.private_messages); } }