com.app.blockydemo.ui.dialogs.ScriptNameDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.app.blockydemo.ui.dialogs.ScriptNameDialog.java

Source

/**
 *  Catroid: An on-device visual programming system for Android devices
 *  Copyright (C) 2010-2013 The Catrobat Team
 *  (<http://developer.catrobat.org/credits>)
 *  
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as
 *  published by the Free Software Foundation, either version 3 of the
 *  License, or (at your option) any later version.
 *  
 *  An additional term exception under section 7 of the GNU Affero
 *  General Public License, version 3, is available at
 *  http://developer.catrobat.org/license_additional_term
 *  
 *  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 Affero General Public License for more details.
 *  
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.app.blockydemo.ui.dialogs;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnShowListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.Toast;

import com.app.blockydemo.ProjectManager;
import com.app.blockydemo.R;
import com.app.blockydemo.content.Script;
import com.app.blockydemo.formulaeditor.UserVariable;

import java.util.ArrayList;
import java.util.List;

@SuppressLint("ValidFragment")
public class ScriptNameDialog extends DialogFragment {

    public static final String DIALOG_FRAGMENT_TAG = "dialog_new_script_name";
    Script script;

    public ScriptNameDialog() {
        super();
    }

    public ScriptNameDialog(Script script) {
        super();
        this.script = script;
    }

    @Override
    public void onCancel(DialogInterface dialog) {
        super.onCancel(dialog);
    }

    @Override
    public Dialog onCreateDialog(Bundle bundle) {
        final View dialogView = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_script_editor_name,
                null);

        final Dialog dialogNewVariable = new AlertDialog.Builder(getActivity()).setView(dialogView)
                .setTitle(R.string.formula_editor_script_name)
                .setNegativeButton(R.string.cancel_button, new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                }).setPositiveButton(R.string.ok, new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        handleOkButton(dialogView);
                    }
                }).create();

        dialogNewVariable.setCanceledOnTouchOutside(true);
        dialogNewVariable.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

        dialogNewVariable.setOnShowListener(new OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                handleOnShow(dialogNewVariable);
            }
        });

        return dialogNewVariable;
    }

    private void handleOkButton(View dialogView) {
        EditText variableNameEditText = (EditText) dialogView
                .findViewById(R.id.dialog_editor_script_name_edit_text);

        String variableName = variableNameEditText.getText().toString();
        script.setName(variableName);
    }

    private void handleOnShow(final Dialog dialogEditName) {
        final Button positiveButton = ((AlertDialog) dialogEditName).getButton(AlertDialog.BUTTON_POSITIVE);
        positiveButton.setEnabled(false);

        EditText dialogEditText = (EditText) dialogEditName.findViewById(R.id.dialog_editor_script_name_edit_text);

        InputMethodManager inputMethodManager = (InputMethodManager) getActivity()
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.showSoftInput(dialogEditText, InputMethodManager.SHOW_IMPLICIT);

        dialogEditText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable editable) {

                String variableName = editable.toString();
                positiveButton.setEnabled(true);
                for (Script local_script : ProjectManager.getInstance().getCurrentSprite().getScriptList()) {
                    if (local_script.getName().equals(variableName)
                            && !local_script.getName().equals(script.getName())) {
                        Toast.makeText(getActivity(), R.string.formula_editor_existing_variable, Toast.LENGTH_SHORT)
                                .show();
                        positiveButton.setEnabled(false);
                    }
                }

                if (editable.length() == 0) {
                    positiveButton.setEnabled(false);
                }
                if (editable.toString().equals(script.getName())) {
                    positiveButton.setEnabled(false);
                }
            }
        });
        dialogEditText.setText(script.getName());

    }

}