/* * * * Copyright 2014 http://Bither.net * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * */ package net.bither; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.TextView; import net.bither.bitherj.BitherjSettings; import net.bither.bitherj.api.http.BitherUrl; import net.bither.bitherj.core.Address; import net.bither.bitherj.core.AddressManager; import net.bither.bitherj.utils.Utils; import net.bither.fragment.cold.ColdAddressFragment; import net.bither.fragment.hot.HotAddressFragment; import net.bither.preference.AppSharedPreference; import net.bither.runnable.ThreadNeedService; import net.bither.service.BlockchainService; import net.bither.ui.base.DropdownMessage; import net.bither.ui.base.OverScrollableListView; import net.bither.ui.base.SwipeRightFragmentActivity; import net.bither.ui.base.dialog.DialogAddressAlias; import net.bither.ui.base.dialog.DialogConfirmTask; import net.bither.ui.base.dialog.DialogProgress; import net.bither.ui.base.dialog.DialogWithActions; import net.bither.ui.base.listener.IBackClickListener; import net.bither.util.StringUtil; import net.bither.util.ThreadUtil; import net.bither.util.UIUtil; import net.bither.util.WalletUtils; import java.util.ArrayList; import java.util.List; import java.util.Locale; /** * Created by songchenwen on 14-11-3. */ public class TrashCanActivity extends SwipeRightFragmentActivity { private OverScrollableListView lv; private TextView tvEmpty; private ArrayList<Address> addresses; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_trash_can); addresses = new ArrayList<Address>(); initView(); refresh(); } private void refresh() { addresses.clear(); addresses.addAll(AddressManager.getInstance().getTrashAddresses()); adapter.notifyDataSetChanged(); if (addresses.size() > 0) { tvEmpty.setVisibility(View.GONE); } else { tvEmpty.setVisibility(View.VISIBLE); } } private void initView() { findViewById(R.id.ibtn_back).setOnClickListener(new IBackClickListener()); lv = (OverScrollableListView) findViewById(R.id.lv); tvEmpty = (TextView) findViewById(R.id.tv_empty); lv.setAdapter(adapter); } private BaseAdapter adapter = new BaseAdapter() { private LayoutInflater inflater; private DialogProgress dp; @Override public int getCount() { return addresses.size(); } @Override public Address getItem(int position) { return addresses.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder h; if (convertView == null) { if (inflater == null) { inflater = LayoutInflater.from(TrashCanActivity.this); } convertView = inflater.inflate(R.layout.list_item_trash_can, null); h = new ViewHolder(convertView); } else { h = (ViewHolder) convertView.getTag(); } Address address = getItem(position); h.tv.setText(WalletUtils.formatHash(address.getAddress(), 4, 12)); h.flAddress.setOnClickListener(new CopyClick(address.getAddress())); h.ibtnViewOnNet.setOnClickListener(new ViewOnNetClick(address, h)); if (AppSharedPreference.getInstance().getAppMode() == BitherjSettings.AppMode.HOT) { h.ibtnViewOnNet.setVisibility(View.VISIBLE); } else { h.ibtnViewOnNet.setVisibility(View.GONE); } h.ibtnRestore.setOnClickListener(new RestoreClick(address)); h.btnAlias.setOnClickListener(new AliasClick(address, h)); h.onAddressAliasChanged(address, address.getAlias()); return convertView; } class ViewHolder implements DialogAddressAlias.DialogAddressAliasDelegate { TextView tv; FrameLayout flAddress; ImageButton ibtnViewOnNet; ImageButton ibtnRestore; Button btnAlias; public ViewHolder(View v) { tv = (TextView) v.findViewById(R.id.tv_address); flAddress = (FrameLayout) v.findViewById(R.id.fl_address); ibtnViewOnNet = (ImageButton) v.findViewById(R.id.ibtn_view_on_net); ibtnRestore = (ImageButton) v.findViewById(R.id.ibtn_restore); btnAlias = (Button) v.findViewById(R.id.btn_address_alias); v.setTag(this); } @Override public void onAddressAliasChanged(Address address, String alias) { if (!Utils.isEmpty(alias)) { btnAlias.setText(alias); btnAlias.setVisibility(View.VISIBLE); } else { btnAlias.setText(""); btnAlias.setVisibility(View.GONE); } } } class AliasClick implements View.OnClickListener { private Address address; private DialogAddressAlias.DialogAddressAliasDelegate delegate; public AliasClick(Address address, DialogAddressAlias.DialogAddressAliasDelegate delegate) { this.address = address; this.delegate = delegate; } @Override public void onClick(View v) { new DialogAddressAlias(v.getContext(), address, delegate).show(); } } class CopyClick implements View.OnClickListener { private String address; public CopyClick(String address) { this.address = address; } @Override public void onClick(View v) { StringUtil.copyString(address); DropdownMessage.showDropdownMessage(TrashCanActivity.this, R.string.copy_address_success); } } class ViewOnNetClick implements View.OnClickListener { private Address address; private DialogAddressAlias.DialogAddressAliasDelegate delegate; ViewOnNetClick(Address address, DialogAddressAlias.DialogAddressAliasDelegate delegate) { this.address = address; this.delegate = delegate; } @Override public void onClick(View v) { new DialogWithActions(v.getContext()) { @Override protected List<Action> getActions() { ArrayList<Action> actions = new ArrayList<Action>(); actions.add(new Action(R.string.address_option_view_on_blockchain_info, new Runnable() { @Override public void run() { UIUtil.gotoBrower(TrashCanActivity.this, BitherUrl.BLOCKCHAIN_INFO_ADDRESS_URL + address .getAddress()); } })); String defaultCountry = Locale.getDefault().getCountry(); if (Utils.compareString(defaultCountry, "CN") || Utils.compareString (defaultCountry, "cn")) { actions.add(new Action(R.string.address_option_view_on_btc, new Runnable() { @Override public void run() { UIUtil.gotoBrower(TrashCanActivity.this, BitherUrl.BTC_COM_ADDRESS_URL + address.getAddress()); } })); } actions.add(new Action(R.string.address_alias_manage, new Runnable() { @Override public void run() { new DialogAddressAlias(TrashCanActivity.this, address, delegate).show(); } })); return actions; } }.show(); } } class RestoreClick implements View.OnClickListener { private Address address; RestoreClick(Address address) { this.address = address; } @Override public void onClick(View v) { if (dp == null) { dp = new DialogProgress(TrashCanActivity.this, R.string.please_wait); } new DialogConfirmTask(TrashCanActivity.this, getString(R.string.trash_address_restore), new Runnable() { @Override public void run() { new ThreadNeedService(dp, TrashCanActivity.this) { @Override public void runWithService(BlockchainService service) { if (service != null) { service.stopAndUnregister(); } AddressManager.getInstance().restorePrivKey(address); if (service != null) { service.startAndRegister(); } ThreadUtil.runOnMainThread(new Runnable() { @Override public void run() { if (dp.isShowing()) { dp.dismiss(); } refresh(); notifyDataSetChanged(); if (AppSharedPreference.getInstance().getAppMode() == BitherjSettings.AppMode.HOT) { Fragment f = BitherApplication.hotActivity .getFragmentAtIndex(1); if (f instanceof HotAddressFragment) { HotAddressFragment hotAddressFragment = (HotAddressFragment) f; hotAddressFragment.refresh(); } } else { Fragment f = BitherApplication.coldActivity .getFragmentAtIndex(1); if (f instanceof ColdAddressFragment) { ColdAddressFragment coldAddressFragment = (ColdAddressFragment) f; coldAddressFragment.refresh(); } } } }); } }.start(); } }).show(); } } }; }