All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.jobs.ui.fragment.EditTemplateFragment Maven / Gradle / Ivy

package com.github.jobs.ui.fragment;

import android.os.Bundle;
import android.os.Parcelable;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.ViewSwitcher;
import com.actionbarsherlock.app.SherlockFragment;
import com.codeslap.persistence.Persistence;
import com.codeslap.persistence.SqlAdapter;
import com.github.jobs.R;
import com.github.jobs.bean.Template;
import com.github.jobs.bean.TemplateService;
import com.github.jobs.templates.TemplatesHelper;
import com.github.jobs.ui.activity.EditTemplateActivity;
import com.github.jobs.utils.AppUtils;
import com.github.jobs.utils.GithubJobsJavascriptInterface;

import java.util.ArrayList;

import static com.github.jobs.utils.GithubJobsJavascriptInterface.JS_INTERFACE;
import static com.github.jobs.utils.GithubJobsJavascriptInterface.PREVIEW_TEMPLATE_URL;


/**
 * @author cristian
 * @version 1.0
 */
public class EditTemplateFragment extends SherlockFragment {
    private static final String KEY_TEMPLATE_SERVICES = "com.github.jobs.key.template_services";

    public static final String ARG_TEMPLATE_ID = "com.github.jobs.arg.template_id";
    public static final String ARG_EDIT_MODE = "com.github.jobs.arg.edit_mode";

    private static final int EDITOR_MODE = 0;
    private static final int PREVIEW_MODE = 1;

    private EditText mTemplateContent;
    private EditText mTemplateName;

    private long mTemplateId;
    private GithubJobsJavascriptInterface mJavascriptInterface;
    private ArrayList mTemplateServices;
    private ViewSwitcher mViewSwitcher;
    private boolean mShowEditor = false;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mTemplateServices = new ArrayList();
        if (savedInstanceState != null) {
            ArrayList list = savedInstanceState.getParcelableArrayList(KEY_TEMPLATE_SERVICES);
            if (list != null) {
                for (Parcelable parcelable : list) {
                    mTemplateServices.add((TemplateService) parcelable);
                }
            }
        }
        return inflater.inflate(R.layout.edit_template, null, false);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putParcelableArrayList(KEY_TEMPLATE_SERVICES, mTemplateServices);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        // init argument fields
        Bundle arguments = getArguments();
        mShowEditor = arguments.getBoolean(ARG_EDIT_MODE, false);
        mTemplateId = arguments.getLong(ARG_TEMPLATE_ID, -1);

        // prepare ui
        View root = getView();
        mViewSwitcher = (ViewSwitcher) root.findViewById(R.id.switcher_edit_mode);
        if (!mShowEditor) {
            showEditor(mShowEditor);
        }

        WebView templatePreview = (WebView) root.findViewById(R.id.lbl_cover_letter_preview);
        AppUtils.setupWebView(templatePreview);
        mJavascriptInterface = new GithubJobsJavascriptInterface(getActivity(), templatePreview, null);
        templatePreview.addJavascriptInterface(mJavascriptInterface, JS_INTERFACE);
        templatePreview.loadUrl(PREVIEW_TEMPLATE_URL);

        mTemplateName = (EditText) root.findViewById(R.id.edit_cover_letter_name);
        mTemplateContent = (EditText) root.findViewById(R.id.edit_cover_letter_content);
        mTemplateContent.addTextChangedListener(mTextWatcher);

        if (mTemplateId != -1) {
            // retrieve template from database
            SqlAdapter adapter = Persistence.getAdapter(getActivity());
            Template template = new Template();
            template.setId(mTemplateId);
            template = adapter.findFirst(template);
            ArrayList templateServices = new ArrayList(template.getTemplateServices());
            for (TemplateService savedService : mTemplateServices) {
                if (!templateServices.contains(savedService)) {
                    templateServices.add(savedService);
                }
            }
            mTemplateServices = templateServices;

            // set name and raw content
            mTemplateName.setText(template.getName());
            getActivity().setTitle(template.getName());
            String content = template.getContent();
            mTemplateContent.setText(content);
            updatePreview();
        }
    }

    private final TextWatcher mTextWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

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

        @Override
        public void afterTextChanged(Editable editable) {
            updatePreview();
        }
    };

    private void updatePreview() {
        if (mJavascriptInterface == null) {
            return;
        }
        String markdownContent = mTemplateContent.getText().toString().trim();
        if (mTemplateServices != null && !mTemplateServices.isEmpty()) {
            markdownContent += "\n\n---\n";
            for (TemplateService service : mTemplateServices) {
                markdownContent += TemplatesHelper.getContent(getActivity(), service) + "\n\n";
            }

        }
        mJavascriptInterface.setContent(markdownContent);
        mJavascriptInterface.onLoaded();
    }

    public Template buildTemplate() {
        // build the template
        Template template = new Template();
        if (mTemplateId > 0) {
            template.setId(mTemplateId);
        }
        template.setName(mTemplateName.getText().toString().trim());
        template.setContent(mTemplateContent.getText().toString().trim());
        template.setLastUpdate(System.currentTimeMillis());
        template.setTemplateServices(mTemplateServices);
        return template;
    }

    public boolean isTemplateValid() {
        if (TextUtils.isEmpty(mTemplateName.getText().toString().trim())) {
            selectEditorTab();
            mTemplateName.setError(getString(R.string.cover_letter_name_is_empty));
            mTemplateName.requestFocus();
            return false;
        }
        if (TextUtils.isEmpty(mTemplateContent.getText().toString().trim())) {
            selectEditorTab();
            mTemplateContent.setError(getString(R.string.cover_letter_content_is_empty));
            mTemplateContent.requestFocus();
            return false;
        }
        return true;
    }

    private void selectEditorTab() {
        if (getActivity() instanceof EditTemplateActivity) {
            EditTemplateActivity activity = (EditTemplateActivity) getActivity();
            activity.selectEditorTab();
        }
    }

    public void showEditor(boolean showEditor) {
        mShowEditor = showEditor;
        if (mViewSwitcher == null) {
            return;
        }
        mViewSwitcher.setDisplayedChild(showEditor ? EDITOR_MODE : PREVIEW_MODE);
    }

    public void addTemplateService(TemplateService templateService) {
        mTemplateServices.add(templateService);
        updatePreview();
    }

    public ArrayList getTemplateServices() {
        return mTemplateServices;
    }

    public void removeServices(ArrayList services) {
        mTemplateServices.removeAll(services);
        updatePreview();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy