cn.studyjams.s2.sj0132.bowenyan.mygirlfriend.nononsenseapps.notepad.ui.common.DialogEditList.java Source code

Java tutorial

Introduction

Here is the source code for cn.studyjams.s2.sj0132.bowenyan.mygirlfriend.nononsenseapps.notepad.ui.common.DialogEditList.java

Source

/*
 * Copyright (c) 2015 Jonas Kalderstam.
 *
 * 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 cn.studyjams.s2.sj0132.bowenyan.mygirlfriend.nononsenseapps.notepad.ui.common;

import android.database.Cursor;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import cn.studyjams.s2.sj0132.bowenyan.mygirlfriend.R;
import cn.studyjams.s2.sj0132.bowenyan.mygirlfriend.databinding.FragmentDialogEditlistBinding;
import cn.studyjams.s2.sj0132.bowenyan.mygirlfriend.nononsenseapps.notepad.data.model.sql.TaskList;
import cn.studyjams.s2.sj0132.bowenyan.mygirlfriend.nononsenseapps.notepad.ui.base.DialogConfirmBase.DialogConfirmedListener;

public class DialogEditList extends DialogFragment {

    static final String LIST_ID = "list_id";

    private TaskList mTaskList;
    private EditListDialogListener listener;
    private FragmentDialogEditlistBinding binding;

    public DialogEditList() {
    }

    /**
     * Use to create new list
     */
    public static DialogEditList getInstance() {
        DialogEditList dialog = new DialogEditList();
        dialog.setArguments(Bundle.EMPTY);
        return dialog;
    }

    public static DialogEditList getInstance(final long listid) {
        DialogEditList dialog = new DialogEditList();
        Bundle args = new Bundle();
        args.putLong(LIST_ID, listid);
        dialog.setArguments(args);
        return dialog;
    }

    public void setListener(final EditListDialogListener listener) {
        this.listener = listener;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_dialog_editlist, container, true);
        return binding.getRoot();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setup();
    }

    void setup() {
        // New item hides delete button and disables OK initially
        if (getArguments().getLong(LIST_ID, -1) < 1) {
            binding.deleteButton.setVisibility(View.GONE);
            binding.buttons.dialogYes.setEnabled(false);
        }

        if (getArguments().getLong(LIST_ID, -1) > 0) {
            getDialog().setTitle(R.string.menu_managelists);
            getLoaderManager().restartLoader(0, null, new LoaderCallbacks<Cursor>() {

                @Override
                public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
                    return new CursorLoader(getActivity(), TaskList.getUri(getArguments().getLong(LIST_ID, -1)),
                            TaskList.Columns.FIELDS, null, null, null);
                }

                @Override
                public void onLoadFinished(Loader<Cursor> arg0, Cursor c) {
                    if (c.moveToFirst()) {
                        mTaskList = new TaskList(c);
                        fillViews();
                    }
                    // Don't need it anymore
                    getLoaderManager().destroyLoader(0);
                }

                @Override
                public void onLoaderReset(Loader<Cursor> arg0) {

                }
            });
        } else {
            getDialog().setTitle(R.string.menu_createlist);
            mTaskList = new TaskList();
        }

        binding.titleField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                binding.buttons.dialogYes.setEnabled(editable.length() > 0);
            }
        });

        binding.deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                deleteClicked();
            }
        });

        binding.buttons.dialogNo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

        binding.buttons.dialogYes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                okClicked();
            }
        });
    }

    void fillViews() {
        binding.titleField.setText(mTaskList.title);

        // Check if this is the default list
        final long defList = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(getActivity())
                .getString(getString(R.string.pref_defaultlist), "-1"));
        if (mTaskList._id > 0 && defList == mTaskList._id) {
            binding.defaultListBox.setChecked(true);
        }
    }

    void deleteClicked() {
        if (mTaskList._id > 0) {
            DialogDeleteList.showDialog(getFragmentManager(), mTaskList._id, new DialogConfirmedListener() {
                @Override
                public void onConfirm() {
                    dismiss();
                }
            });
        }
    }

    void okClicked() {
        Toast.makeText(getActivity(), R.string.saved, Toast.LENGTH_SHORT).show();

        mTaskList.title = binding.titleField.getText().toString();

        mTaskList.save(getActivity());

        if (mTaskList._id > 0 && binding.defaultListBox.isChecked()) {
            PreferenceManager.getDefaultSharedPreferences(getActivity()).edit()
                    .putLong(getString(R.string.pref_defaultstartlist), mTaskList._id)
                    .putString(getString(R.string.pref_defaultlist), Long.toString(mTaskList._id)).commit();
        } else if (mTaskList._id > 0) {
            // Remove pref if it is the default list currently
            final long defList = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(getActivity())
                    .getString(getString(R.string.pref_defaultlist), "-1"));
            final long defStartList = PreferenceManager.getDefaultSharedPreferences(getActivity())
                    .getLong(getString(R.string.pref_defaultstartlist), -1);
            if (defList == mTaskList._id) {
                PreferenceManager.getDefaultSharedPreferences(getActivity()).edit()
                        .remove(getString(R.string.pref_defaultlist)).commit();
            }
            if (defStartList == mTaskList._id) {
                PreferenceManager.getDefaultSharedPreferences(getActivity()).edit()
                        .remove(getString(R.string.pref_defaultstartlist)).commit();
            }
        }

        if (mTaskList._id > 0 && listener != null) {
            listener.onFinishEditDialog(mTaskList._id);
        }

        // TODO save items if necessary
        this.dismiss();
    }

    public interface EditListDialogListener {
        void onFinishEditDialog(long id);
    }
}