org.alfresco.mobile.android.application.fragments.node.update.EditPropertiesFragment.java Source code

Java tutorial

Introduction

Here is the source code for org.alfresco.mobile.android.application.fragments.node.update.EditPropertiesFragment.java

Source

/*
 *  Copyright (C) 2005-2015 Alfresco Software Limited.
 *
 *  This file is part of Alfresco Mobile for Android.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.alfresco.mobile.android.application.fragments.node.update;

import java.io.Serializable;
import java.util.GregorianCalendar;
import java.util.Map;

import org.alfresco.mobile.android.api.model.Folder;
import org.alfresco.mobile.android.api.model.Node;
import org.alfresco.mobile.android.api.model.Person;
import org.alfresco.mobile.android.application.R;
import org.alfresco.mobile.android.application.fragments.builder.LeafFragmentBuilder;
import org.alfresco.mobile.android.application.ui.form.fields.BaseField;
import org.alfresco.mobile.android.application.ui.form.picker.AllowablePickerFragment.onPickAllowableValuesFragment;
import org.alfresco.mobile.android.application.ui.form.picker.DatePickerFragment.onPickDateFragment;
import org.alfresco.mobile.android.application.ui.form.picker.DocumentPickerFragment;
import org.alfresco.mobile.android.application.ui.form.picker.DocumentPickerFragment.onPickDocumentFragment;
import org.alfresco.mobile.android.application.ui.form.picker.PersonPickerFragment.onPickAuthorityFragment;
import org.alfresco.mobile.android.application.ui.form.picker.TimePickerFragment.onPickTimeFragment;
import org.alfresco.mobile.android.async.Operator;
import org.alfresco.mobile.android.async.definition.TypeDefinitionEvent;
import org.alfresco.mobile.android.async.node.update.UpdateNodeRequest;
import org.alfresco.mobile.android.platform.extensions.AnalyticsManager;
import org.alfresco.mobile.android.platform.utils.BundleUtils;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;

import com.squareup.otto.Subscribe;

public class EditPropertiesFragment extends EditNodePropertiesFragment implements onPickDateFragment,
        onPickTimeFragment, onPickAllowableValuesFragment, onPickAuthorityFragment, onPickDocumentFragment {
    public static final String TAG = EditPropertiesFragment.class.getName();

    protected static final String ARGUMENT_FOLDER = "folder";

    private Folder folder;

    // //////////////////////////////////////////////////////////////////////
    // CONSTRUCTORS
    // //////////////////////////////////////////////////////////////////////
    public EditPropertiesFragment() {
        setRetainInstance(true);
        screenName = AnalyticsManager.SCREEN_NODE_EDIT_PROPERTIES;
    }

    public static EditPropertiesFragment newInstanceByTemplate(Bundle b) {
        EditPropertiesFragment adf = new EditPropertiesFragment();
        adf.setArguments(b);
        // adf.setRetainInstance(true);
        return adf;
    }

    // //////////////////////////////////////////////////////////////////////
    // LIFE CYCLE
    // //////////////////////////////////////////////////////////////////////
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        folder = (Folder) getArguments().getSerializable(ARGUMENT_FOLDER);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = super.onCreateView(inflater, container, savedInstanceState);
        if (bcreate != null) {
            bcreate.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    updateNode();
                }
            });
        }

        return v;
    }

    @Override
    public void onResume() {
        super.onResume();
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
            getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        } else {
            getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
        }
    }

    // //////////////////////////////////////////////////////////////////////
    // INTERNALS
    // //////////////////////////////////////////////////////////////////////
    protected void updateNode() {
        if (!formManager.checkValidation()) {
            Snackbar.make(getActivity().findViewById(R.id.left_pane_body), R.string.form_message_validation,
                    Snackbar.LENGTH_LONG).show();
            return;
        }

        bcreate.setEnabled(false);
        Map<String, Serializable> props = formManager.getValues();
        Operator.with(getActivity()).load(new UpdateNodeRequest.Builder(folder, node, props));

        if (getDialog() != null) {
            dismiss();
        } else {
            getActivity().finish();
        }
    }

    public Object getPickedValues(String fieldId) {
        return formManager.getValuePicked(fieldId);
    }

    public BaseField getField(String fieldId) {
        return formManager.getField(fieldId);
    }

    // ///////////////////////////////////////////////////////////////////////////
    // DATE/TIME PICKER
    // ///////////////////////////////////////////////////////////////////////////
    @Override
    public void onDatePicked(String fieldId, GregorianCalendar gregorianCalendar) {
        formManager.setPropertyValue(fieldId, gregorianCalendar.getTime());
    }

    @Override
    public void onDateClear(String fieldId) {
        formManager.setPropertyValue(fieldId, null);
    }

    @Override
    public void onTimePicked(String fieldId, int hourOfDay, int minute) {
        // TODO
        // Log.d(TAG, "Time :" + hourOfDay + ":" + minute);
    }

    @Override
    public void onTimeClear(String fieldId) {
        formManager.setPropertyValue(fieldId, null);
    }

    // ///////////////////////////////////////////////////////////////////////////
    // ALLOWABLE PICKER
    // ///////////////////////////////////////////////////////////////////////////
    @Override
    public void onValuesPicked(String fieldId, Map<String, Object> values) {
        formManager.setPropertyValue(fieldId, values);
    }

    @Override
    public void onValuesClear(String fieldId) {
        formManager.setPropertyValue(fieldId, null);
    }

    @Override
    public Object getAllowableValuesSelected(String fieldId) {
        return formManager.getValuePicked(fieldId);
    }

    // ///////////////////////////////////////////////////////////////////////////
    // PERSON PICKER
    // ///////////////////////////////////////////////////////////////////////////
    @Override
    public void onPersonSelected(String fieldId, Map<String, Person> p) {
        formManager.setPropertyValue(fieldId, p);
    }

    @Override
    public void onPersonClear(String fieldId) {
        formManager.setPropertyValue(fieldId, null);
    }

    @SuppressWarnings("unchecked")
    @Override
    public Map<String, Person> getPersonSelected(String fieldId) {
        return (Map<String, Person>) formManager.getValuePicked(fieldId);
    }

    // ///////////////////////////////////////////////////////////////////////////
    // DOCUMENT/FOLDER PICKER
    // ///////////////////////////////////////////////////////////////////////////
    @Override
    public void onNodeSelected(String fieldId, Map<String, Node> items) {
        formManager.setPropertyValue(fieldId, items);
        getActivity().getSupportFragmentManager().popBackStackImmediate(DocumentPickerFragment.TAG,
                FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }

    @Override
    public void onNodeClear(String fieldId) {
        formManager.setPropertyValue(fieldId, null);
    }

    @Override
    public Map<String, Node> getNodeSelected(String fieldId) {
        return (Map<String, Node>) formManager.getValuePicked(fieldId);
    }

    // ///////////////////////////////////////////////////////////////////////////
    // EVENTS RECEIVER
    // ///////////////////////////////////////////////////////////////////////////
    @Subscribe
    public void onResult(TypeDefinitionEvent event) {
        if (event.hasException) {
            displayEmptyView();
            ((TextView) viewById(R.id.empty_text)).setText(R.string.empty_child);
        } else if (getActivity() != null) {
            displayData();
            modelDefinition = event.data;
            configService = configurationManager.getConfig(getAccount().getId());
            configure(LayoutInflater.from(getActivity()));
        }
    }

    // ///////////////////////////////////////////////////////////////////////////
    // BUILDER
    // ///////////////////////////////////////////////////////////////////////////
    public static Builder with(FragmentActivity activity) {
        return new Builder(activity);
    }

    public static class Builder extends LeafFragmentBuilder {
        // ///////////////////////////////////////////////////////////////////////////
        // CONSTRUCTORS & HELPERS
        // ///////////////////////////////////////////////////////////////////////////
        public Builder(FragmentActivity activity) {
            super(activity);
            this.extraConfiguration = new Bundle();
        }

        public Builder(FragmentActivity appActivity, Map<String, Object> configuration) {
            super(appActivity, configuration);
            templateArguments = new String[] {};
        }

        // ///////////////////////////////////////////////////////////////////////////
        // SETTERS
        // ///////////////////////////////////////////////////////////////////////////
        public Builder parentFolder(Folder folder) {
            BundleUtils.addIfNotNull(extraConfiguration, ARGUMENT_FOLDER, folder);
            return this;
        }

        public Builder node(Node node) {
            BundleUtils.addIfNotNull(extraConfiguration, ARGUMENT_NODE, node);
            return this;
        }

        // ///////////////////////////////////////////////////////////////////////////
        // CLICK
        // ///////////////////////////////////////////////////////////////////////////
        protected Fragment createFragment(Bundle b) {
            return newInstanceByTemplate(b);
        }
    }
}