package com.sabdroidex.fragments; import android.os.Bundle; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.Toast; import com.sabdroidex.R; import com.sabdroidex.adapters.HistoryAdapter; import com.sabdroidex.controllers.SABController; import com.sabdroidex.controllers.sabnzbd.SABnzbdController; import com.sabdroidex.data.JSONBased; import com.sabdroidex.data.sabnzbd.History; import com.sabdroidex.fragments.dialogs.sabnzbd.HistoryRemoveDialog; import com.sabdroidex.interfaces.UpdateableActivity; import com.sabdroidex.utils.Preferences; import com.sabdroidex.utils.SABHandler; public class HistoryFragment extends SABFragment { private static final String TAG = HistoryFragment.class.getCanonicalName(); private static History history; private HistoryAdapter historyAdapter; // Instantiating the Handler associated with the main thread. private final SABHandler messageHandler = new SABHandler() { @Override public void handleMessage(Message msg) { if (msg.what == SABnzbdController.MESSAGE.HISTORY.hashCode()) { try { history = (History) msg.obj; updateHistoryList(); } catch (Exception e) { Log.e(TAG, e.getLocalizedMessage() == null ? e.toString() : e.getLocalizedMessage()); } } if (msg.what == SABController.MESSAGE.UPDATE.hashCode()) { try { ((UpdateableActivity) getParentActivity()).updateState(false); if (msg.obj instanceof String && !"".equals(msg.obj)) { Toast.makeText(getParentActivity(), (String) msg.obj, Toast.LENGTH_LONG).show(); } } catch (Exception e) { Log.e(TAG, e.getLocalizedMessage() == null ? e.toString() : e.getLocalizedMessage()); } } } }; private void updateHistoryList() { /** * This might happens if a rotation occurs */ if (historyAdapter != null || history != null) { historyAdapter.setItems(history.getHistoryElements()); historyAdapter.notifyDataSetChanged(); } ((UpdateableActivity) getActivity()).updateLabels(history); ((UpdateableActivity) getActivity()).updateState(true); } /** * */ public HistoryFragment() {} /** * * @param historyRows */ public HistoryFragment(History historyRows) { history = historyRows; } @Override public int getTitle() { return R.string.tab_history; } /** * Refreshing the queue during startup or on user request. Asks to configure * if still not done */ public void manualRefreshHistory() { // First run setup if (!Preferences.isSet(Preferences.SABNZBD_URL)) { // The error dialog should be displayed by the QueueFragment return; } SABnzbdController.refreshHistory(messageHandler); } @Override public void onStart() { super.onStart(); messageHandler.setActivity(getActivity()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); historyAdapter = new HistoryAdapter(getActivity(), history.getHistoryElements()); LinearLayout historyView = (LinearLayout) inflater.inflate(R.layout.list, null); ListView historyList = (ListView) historyView.findViewById(R.id.elementList); historyView.removeAllViews(); historyList.setAdapter(new HistoryAdapter(getActivity(), history.getHistoryElements())); historyList.setOnItemClickListener(new ListItemClickListener()); manualRefreshHistory(); return historyList; } @Override public JSONBased getDataCache() { return history; } /** * This class handles long click on an item in the history list. It displays * a pop-up allowing the user to remove the element from the history list. * * @author Marc * */ private class ListItemClickListener implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { try { HistoryRemoveDialog historyRemoveDialog = new HistoryRemoveDialog(); HistoryRemoveDialog.setMessageHandler(messageHandler); HistoryRemoveDialog.setHistoryElement(history.getHistoryElements().get(position)); historyRemoveDialog.show(getActivity().getSupportFragmentManager(), "historyRemove"); } catch (Exception e) { Log.e(TAG, e.getLocalizedMessage()); } } } }