package com.mygeopay.wallet.ui; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.ResourceCursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.TextView; import com.mygeopay.core.coins.CoinType; import com.mygeopay.wallet.Configuration; import com.mygeopay.wallet.Constants; import com.mygeopay.wallet.ExchangeHistoryProvider; import com.mygeopay.wallet.ExchangeHistoryProvider.ExchangeEntry; import com.mygeopay.wallet.R; import com.mygeopay.wallet.WalletApplication; import com.mygeopay.wallet.ui.widget.AddressView; import com.mygeopay.wallet.ui.widget.Amount; import com.mygeopay.wallet.util.Fonts; import org.bitcoinj.core.Coin; import javax.annotation.CheckForNull; /** * @author John L. Jegutanis */ public final class ExchangeHistoryFragment extends ListFragment { private Activity activity; private WalletApplication application; private Configuration config; private com.mygeopay.core.wallet.Wallet wallet; private Uri contentUri; private LoaderManager loaderManager; private ExchangeEntryAdapter adapter; private String query = null; private Coin balance = null; @CheckForNull private String defaultCurrency = null; private static final int ID_EXCHANGES_LOADER = 0; private CoinType type; @Override public void onAttach(final Activity activity) { super.onAttach(activity); this.activity = activity; this.application = (WalletApplication) activity.getApplication(); this.wallet = application.getWallet(); this.loaderManager = getLoaderManager(); } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); contentUri = ExchangeHistoryProvider.contentUri(application.getPackageName()); adapter = new ExchangeEntryAdapter(activity); setListAdapter(adapter); loaderManager.initLoader(ID_EXCHANGES_LOADER, null, exchangesLoaderCallbacks); } @Override public void onDestroy() { loaderManager.destroyLoader(ID_EXCHANGES_LOADER); super.onDestroy(); } @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_exchange_history, container, false); } @Override public void setEmptyText(final CharSequence text) { if (getView() != null) { final TextView emptyView = (TextView) getView().findViewById(android.R.id.empty); emptyView.setText(text); } } @Override public void onListItemClick(final ListView l, final View v, final int position, final long id) { final Cursor cursor = (Cursor) adapter.getItem(position); final ExchangeEntry entry = ExchangeHistoryProvider.getExchangeEntry(cursor); Intent intent = new Intent(getActivity(), TradeStatusActivity.class); intent.putExtra(Constants.ARG_EXCHANGE_ENTRY, entry); startActivity(intent); } private final LoaderCallbacks<Cursor> exchangesLoaderCallbacks = new LoaderCallbacks<Cursor>() { @Override public Loader<Cursor> onCreateLoader(final int id, final Bundle args) { return new CursorLoader(activity, contentUri, null, null, null, ExchangeHistoryProvider.KEY_ROWID + " DESC"); } @Override public void onLoadFinished(final Loader<Cursor> loader, final Cursor data) { adapter.swapCursor(data); setEmptyText(getString(R.string.exchange_history_empty)); } @Override public void onLoaderReset(final Loader<Cursor> loader) {} }; private final class ExchangeEntryAdapter extends ResourceCursorAdapter { private ExchangeEntryAdapter(final Context context) { super(context, R.layout.exchange_status_row, null, true); } @Override public void bindView(final View view, final Context context, final Cursor cursor) { final ExchangeEntry entry = ExchangeHistoryProvider.getExchangeEntry(cursor); final View okIcon = view.findViewById(R.id.exchange_status_ok_icon); final View errorIcon = view.findViewById(R.id.exchange_status_error_icon); Fonts.setTypeface(okIcon, Fonts.Font.COINOMI_FONT_ICONS); Fonts.setTypeface(errorIcon, Fonts.Font.COINOMI_FONT_ICONS); Fonts.setTypeface(view.findViewById(R.id.exchange_arrow), Fonts.Font.COINOMI_FONT_ICONS); final View progress = view.findViewById(R.id.exchange_status_progress); final TextView statusText = (TextView) view.findViewById(R.id.exchange_status_text); final View values = view.findViewById(R.id.exchange_values); final Amount deposit = (Amount) view.findViewById(R.id.exchange_deposit); final Amount withdraw = (Amount) view.findViewById(R.id.exchange_withdraw); final AddressView addressView = (AddressView) view.findViewById(R.id.withdraw_address); switch (entry.status) { case ExchangeEntry.STATUS_INITIAL: okIcon.setVisibility(View.GONE); errorIcon.setVisibility(View.GONE); progress.setVisibility(View.VISIBLE); statusText.setVisibility(View.VISIBLE); statusText.setText(R.string.trade_status_waiting_deposit); values.setVisibility(View.GONE); addressView.setVisibility(View.GONE); break; case ExchangeEntry.STATUS_PROCESSING: okIcon.setVisibility(View.GONE); errorIcon.setVisibility(View.GONE); progress.setVisibility(View.VISIBLE); statusText.setVisibility(View.VISIBLE); statusText.setText(R.string.trade_status_waiting_trade); values.setVisibility(View.GONE); addressView.setVisibility(View.GONE); break; case ExchangeEntry.STATUS_COMPLETE: okIcon.setVisibility(View.VISIBLE); errorIcon.setVisibility(View.GONE); progress.setVisibility(View.GONE); statusText.setVisibility(View.GONE); values.setVisibility(View.VISIBLE); deposit.setAmount(entry.depositAmount.toPlainString()); deposit.setSymbol(entry.depositAmount.type.getSymbol()); withdraw.setAmount(entry.withdrawAmount.toPlainString()); withdraw.setSymbol(entry.withdrawAmount.type.getSymbol()); addressView.setVisibility(View.VISIBLE); addressView.setAddressAndLabel(entry.withdrawAddress); break; case ExchangeEntry.STATUS_FAILED: okIcon.setVisibility(View.GONE); errorIcon.setVisibility(View.VISIBLE); progress.setVisibility(View.GONE); statusText.setVisibility(View.VISIBLE); statusText.setText(R.string.trade_status_failed); values.setVisibility(View.GONE); addressView.setVisibility(View.GONE); } } } }