com.digi.android.wva.fragments.PreConnectionDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.digi.android.wva.fragments.PreConnectionDialog.java

Source

/* 
 * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
 * the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * 
 * Copyright (c) 2014 Digi International Inc., All Rights Reserved. 
 */

package com.digi.android.wva.fragments;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;

import com.digi.android.wva.BuildConfig;
import com.digi.android.wva.R;

/**
 * A {@link DialogFragment} used to prompt the user for the username/password
 * for their WVA device.
 */
public class PreConnectionDialog extends DialogFragment {
    private String ip;

    /**
     * Interface for activities (the DeviceListActivity in particular) to implement,
     * so they can handle clicking "Ok" in this dialog and pass the username/password and
     * IP address to DashboardActivity and connect to the device.
     * 
     * @author mwadsten
     *
     */
    public interface PreConnectionDialogListener {
        /**
         * Called when the "Okay" button is pressed on the dialog.
         */
        void onOkay(String ipAddress, String username, String password, boolean useHttps);

        /**
         * Called when the "Cancel" button is pressed.
         */
        void onCancelConnection();
    }

    public static PreConnectionDialog newInstance(String ipAddress) {
        // See Android developer documentation, DialogFragment
        PreConnectionDialog f = new PreConnectionDialog();

        Bundle args = new Bundle();
        args.putString("ip", ipAddress);
        f.setArguments(args);

        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle args = getArguments();
        ip = args.getString("ip");
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (!(activity instanceof PreConnectionDialogListener)) {
            throw new ClassCastException(activity.toString() + " must implement AuthenticationDialogListener!");
        }
    }

    protected String makeTitle() {
        return String.format(getResources().getString(R.string.pre_connection_dialog_title_template), this.ip);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        this.setCancelable(false);

        final View dialogView = LayoutInflater.from(getActivity()).inflate(R.layout.pre_connection_dialog_layout,
                null);
        final PreConnectionDialogListener activity = (PreConnectionDialogListener) getActivity();

        if (BuildConfig.DEBUG) {
            // Make it easier to get through the connection dialog by pre-filling the
            // authentication with "admin"/"admin". This speeds up development, assuming you're
            // developing against a WVA with those credentials (or no credentials).
            EditText username = (EditText) dialogView.findViewById(R.id.auth_username);
            EditText password = (EditText) dialogView.findViewById(R.id.auth_password);

            username.setText("admin");
            password.setText("admin");
        }

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setView(dialogView).setTitle(this.makeTitle())
                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String username = ((EditText) dialogView.findViewById(R.id.auth_username)).getText()
                                .toString();
                        String password = ((EditText) dialogView.findViewById(R.id.auth_password)).getText()
                                .toString();
                        boolean useHttps = ((CheckBox) dialogView.findViewById(R.id.https_checkbox)).isChecked();

                        // Turn null username/password into empty strings. Otherwise, we get IllegalArgumentException
                        // for passing null username into setBasicAuth within WVALib code.
                        if (username == null) {
                            username = "";
                        }
                        if (password == null) {
                            password = "";
                        }
                        activity.onOkay(ip, username, password, useHttps);
                    }
                }).setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        activity.onCancelConnection();
                    }
                });
        return builder.create();
    }
}