com.mycelium.wallet.ClearPinDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.mycelium.wallet.ClearPinDialog.java

Source

/*
 * Copyright 2013, 2014 Megion Research and Development GmbH
 *
 * Licensed under the Microsoft Reference Source License (MS-RSL)
 *
 * This license governs use of the accompanying software. If you use the software, you accept this license.
 * If you do not accept the license, do not use the software.
 *
 * 1. Definitions
 * The terms "reproduce," "reproduction," and "distribution" have the same meaning here as under U.S. copyright law.
 * "You" means the licensee of the software.
 * "Your company" means the company you worked for when you downloaded the software.
 * "Reference use" means use of the software within your company as a reference, in read only form, for the sole purposes
 * of debugging your products, maintaining your products, or enhancing the interoperability of your products with the
 * software, and specifically excludes the right to distribute the software outside of your company.
 * "Licensed patents" means any Licensor patent claims which read directly on the software as distributed by the Licensor
 * under this license.
 *
 * 2. Grant of Rights
 * (A) Copyright Grant- Subject to the terms of this license, the Licensor grants you a non-transferable, non-exclusive,
 * worldwide, royalty-free copyright license to reproduce the software for reference use.
 * (B) Patent Grant- Subject to the terms of this license, the Licensor grants you a non-transferable, non-exclusive,
 * worldwide, royalty-free patent license under licensed patents for reference use.
 *
 * 3. Limitations
 * (A) No Trademark License- This license does not grant you any rights to use the Licensors name, logo, or trademarks.
 * (B) If you begin patent litigation against the Licensor over patents that you think may apply to the software
 * (including a cross-claim or counterclaim in a lawsuit), your license to the software ends automatically.
 * (C) The software is licensed "as-is." You bear the risk of using it. The Licensor gives no express warranties,
 * guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot
 * change. To the extent permitted under your local laws, the Licensor excludes the implied warranties of merchantability,
 * fitness for a particular purpose and non-infringement.
 */

package com.mycelium.wallet;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.View;
import android.widget.Button;
import com.google.common.base.Optional;
import com.mycelium.wallet.activity.util.Pin;

public class ClearPinDialog extends PinDialog {
    public ClearPinDialog(final Context context, boolean hidden) {
        super(context, hidden, true);
        final MbwManager mbwManager = MbwManager.getInstance(context);

        Button btnForgotPin = (Button) findViewById(R.id.btn_forgot_pin);

        if (mbwManager.getPin().isResettable()) {
            Optional<Integer> resetPinRemainingBlocksCount = mbwManager.getResetPinRemainingBlocksCount();
            if (resetPinRemainingBlocksCount.or(1) == 0) {
                // reset procedure was started and is already old enough -> provide option to reset PIN
                btnForgotPin.setText("Reset PIN now");
                btnForgotPin.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mbwManager.savePin(Pin.CLEAR_PIN);
                        if (onPinValid != null)
                            onPinValid.pinEntered(ClearPinDialog.this, Pin.CLEAR_PIN);
                    }
                });
            } else if (resetPinRemainingBlocksCount.isPresent()) {
                // reset procedure was started, but the target blockheight isn't reached
                btnForgotPin.setText(String.format(context.getString(R.string.pin_forgotten_reset_wait_button_text),
                        Utils.formatBlockcountAsApproxDuration(this.getContext(),
                                resetPinRemainingBlocksCount.get())));

                btnForgotPin.setEnabled(false);
            } else {
                // no reset procedure was started
                btnForgotPin.setOnClickListener(startResetListener(context, mbwManager));
            }

        } else {
            // The current PIN is not marked as resettable - sorry, you are on your own
            btnForgotPin.setVisibility(View.GONE);
        }

    }

    private View.OnClickListener startResetListener(final Context context, final MbwManager mbwManager) {
        return new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(ClearPinDialog.this.getContext())
                        .setPositiveButton(context.getString(R.string.yes), new OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                mbwManager.startResetPinProcedure();
                                ClearPinDialog.this.dismiss();
                            }
                        }).setNegativeButton(context.getString(R.string.no), new OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                ClearPinDialog.this.dismiss();
                            }
                        })
                        .setMessage(context.getString(R.string.pin_forgotten_reset_pin_dialog_content,
                                Utils.formatBlockcountAsApproxDuration(ClearPinDialog.this.getContext(),
                                        Constants.MIN_PIN_BLOCKHEIGHT_AGE_RESET_PIN)))
                        .setTitle(context.getString(R.string.pin_forgotten_reset_pin_dialog_title)).show();
            }
        };
    }

    @Override
    protected void loadLayout() {
        setContentView(R.layout.enter_clear_pin_dialog);
    }
}