at.alladin.rmbt.android.terms.RMBTCheckFragment.java Source code

Java tutorial

Introduction

Here is the source code for at.alladin.rmbt.android.terms.RMBTCheckFragment.java

Source

/*******************************************************************************
 * Copyright 2013-2016 alladin-IT GmbH
 * 
 * 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 at.alladin.rmbt.android.terms;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
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.webkit.WebView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import at.alladin.openrmbt.android.R;
import at.alladin.rmbt.android.main.AppConstants;
import at.alladin.rmbt.android.main.RMBTMainActivity;
import at.alladin.rmbt.android.util.ConfigHelper;

public class RMBTCheckFragment extends Fragment {
    public enum CheckType {
        NDT("file:///android_res/raw/ndt_info.html", AppConstants.PAGE_TITLE_NDT_CHECK, R.string.terms_ndt_header,
                R.string.terms_ndt_accept_text, false), LOOP_MODE("file:///android_res/raw/loop_mode_info.html",
                        AppConstants.PAGE_TITLE_LOOP_MODE_CHECK, R.string.terms_loop_mode_header,
                        R.string.terms_loop_mode_accept_text, true);

        private final String templateFile;
        private final String fragmentTag;
        private final boolean defaultIsChecked;
        private final int titleId;
        private final int textId;

        CheckType(final String templateFile, final String fragmentTag, final int titleId, final int textId,
                final boolean defaultIsChecked) {
            this.templateFile = templateFile;
            this.fragmentTag = fragmentTag;
            this.titleId = titleId;
            this.textId = textId;
            this.defaultIsChecked = defaultIsChecked;
        }

        public String getTemplateFile() {
            return templateFile;
        }

        public String getFragmentTag() {
            return fragmentTag;
        }

        public int getTitleId() {
            return titleId;
        }

        public int getTextId() {
            return textId;
        }

        public boolean isDefaultIsChecked() {
            return defaultIsChecked;
        }
    }

    private CheckType checkType;

    private CheckBox checkBox;

    boolean firstTime = true;

    public static RMBTCheckFragment newInstance(final CheckType checkType) {
        final RMBTCheckFragment f = new RMBTCheckFragment();
        final Bundle bdl = new Bundle(1);
        bdl.putSerializable("checkType", checkType);
        f.setArguments(bdl);
        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        checkType = (CheckType) getArguments().get("checkType");
    }

    public CheckType getCheckType() {
        return checkType;
    }

    @Override
    public void onSaveInstanceState(final Bundle b) {
        super.onSaveInstanceState(b);
        if (checkBox != null)
            b.putBoolean("isChecked", checkBox.isChecked());
    }

    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
            final Bundle savedInstanceState) {
        if (!(getActivity() instanceof RMBTMainActivity))
            firstTime = false;

        final View v = inflater.inflate(R.layout.ndt_check, container, false);

        if (!firstTime)
            v.findViewById(R.id.termsNdtButtonBack).setVisibility(View.GONE);

        final TextView textTitle = (TextView) v.findViewById(R.id.check_fragment_title);
        textTitle.setText(checkType.getTitleId());

        checkBox = (CheckBox) v.findViewById(R.id.ndtCheckBox);
        checkBox.setText(checkType.getTextId());

        if (savedInstanceState != null) {
            checkBox.setChecked(savedInstanceState.getBoolean("isChecked"));
        } else {
            checkBox.setChecked(checkType.isDefaultIsChecked());
        }

        final Button buttonAccept = (Button) v.findViewById(R.id.termsNdtAcceptButton);

        if (!firstTime) {
            checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    buttonAccept.setEnabled(isChecked);
                }
            });
        }

        final WebView wv = (WebView) v.findViewById(R.id.ndtInfoWebView);
        wv.loadUrl(checkType.getTemplateFile());

        buttonAccept.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(final View v) {
                final FragmentActivity activity = getActivity();

                switch (checkType) {
                case NDT:
                    ConfigHelper.setNDT(activity, checkBox.isChecked());
                    ConfigHelper.setNDTDecisionMade(activity, true);
                    break;
                case LOOP_MODE:
                    ConfigHelper.setLoopMode(activity, checkBox.isChecked());
                    break;
                }

                activity.getSupportFragmentManager().popBackStack(checkType.getFragmentTag(),
                        FragmentManager.POP_BACK_STACK_INCLUSIVE);

                if (firstTime && CheckType.NDT.equals(checkType)) {
                    ((RMBTMainActivity) activity).initApp(false);
                } else {
                    getActivity().setResult(checkBox.isChecked() ? Activity.RESULT_OK : Activity.RESULT_CANCELED);
                    getActivity().finish();
                }
            }
        });

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                buttonAccept.setEnabled(firstTime || checkBox.isChecked());
            }
        }, 500);

        final Button buttonBack = (Button) v.findViewById(R.id.termsNdtBackButton);
        buttonBack.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(final View v) {
                getActivity().getSupportFragmentManager().popBackStack();
            }
        });

        return v;
    }

}