/*
* Copyright 2011-2013 the original author or authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.schildbach.wallet.digitalcoin.ui;
import android.app.Dialog;
import android.content.Intent;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.google.digitalcoin.uri.DigitalcoinURI;
import com.google.digitalcoin.uri.DigitalcoinURIParseException;
import de.schildbach.wallet.digitalcoin.R;
import java.math.BigInteger;
/**
* @author Andreas Schildbach
*/
public final class SendCoinsActivity extends AbstractWalletActivity
{
public static final String INTENT_EXTRA_ADDRESS = "address";
public static final String INTENT_EXTRA_ADDRESS_LABEL = "address_label";
private static final int DIALOG_HELP = 0;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.send_coins_content);
getWalletApplication().startBlockchainService(false);
final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(final Intent intent)
{
handleIntent(intent);
}
@Override
protected Dialog onCreateDialog(final int id)
{
final WebView webView = new WebView(this);
webView.loadUrl("file:///android_asset/help_send_coins" + languagePrefix() + ".html");
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(webView);
dialog.setCanceledOnTouchOutside(true);
return dialog;
}
@Override
public boolean onCreateOptionsMenu(final Menu menu)
{
getSupportMenuInflater().inflate(R.menu.send_coins_activity_options, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
finish();
return true;
case R.id.send_coins_options_help:
showDialog(DIALOG_HELP);
return true;
}
return super.onOptionsItemSelected(item);
}
private void handleIntent(final Intent intent)
{
final String action = intent.getAction();
final Uri intentUri = intent.getData();
final String scheme = intentUri != null ? intentUri.getScheme() : null;
final String address;
final String addressLabel;
final BigInteger amount;
if ((Intent.ACTION_VIEW.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) && intentUri != null && "digitalcoin".equals(scheme))
{
try
{
final DigitalcoinURI digitalcoinUri = new DigitalcoinURI(null, intentUri.toString());
address = digitalcoinUri.getAddress().toString();
addressLabel = digitalcoinUri.getLabel();
amount = digitalcoinUri.getAmount();
}
catch (final DigitalcoinURIParseException x)
{
parseErrorDialog(intentUri.toString());
return;
}
}
else if (intent.hasExtra(INTENT_EXTRA_ADDRESS))
{
address = intent.getStringExtra(INTENT_EXTRA_ADDRESS);
addressLabel = intent.getStringExtra(INTENT_EXTRA_ADDRESS_LABEL);
amount = null;
}
else
{
return;
}
if (address != null || amount != null)
updateSendCoinsFragment(address, addressLabel, amount);
else
longToast(R.string.send_coins_parse_address_error_msg);
}
private void updateSendCoinsFragment(final String receivingAddress, final String receivingLabel, final BigInteger amount)
{
final SendCoinsFragment sendCoinsFragment = (SendCoinsFragment) getSupportFragmentManager().findFragmentById(R.id.send_coins_fragment);
sendCoinsFragment.update(receivingAddress, receivingLabel, amount);
}
}