org.deviceconnect.android.deviceplugin.hitoe.fragment.HitoeProfileStressEstimationFragment.java Source code

Java tutorial

Introduction

Here is the source code for org.deviceconnect.android.deviceplugin.hitoe.fragment.HitoeProfileStressEstimationFragment.java

Source

/*
 HitoeProfileHealthFragment
 Copyright (c) 2016 NTT DOCOMO,INC.
 Released under the MIT license
 http://opensource.org/licenses/mit-license.php
 */
package org.deviceconnect.android.deviceplugin.hitoe.fragment;

import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import org.deviceconnect.android.deviceplugin.hitoe.HitoeApplication;
import org.deviceconnect.android.deviceplugin.hitoe.R;
import org.deviceconnect.android.deviceplugin.hitoe.activity.HitoeDeviceControlActivity;
import org.deviceconnect.android.deviceplugin.hitoe.data.HitoeConstants;
import org.deviceconnect.android.deviceplugin.hitoe.data.HitoeDevice;
import org.deviceconnect.android.deviceplugin.hitoe.data.HitoeManager;
import org.deviceconnect.android.deviceplugin.hitoe.data.StressEstimationData;
import org.deviceconnect.android.deviceplugin.hitoe.util.HitoeScheduler;

/**
 * This fragment do setting of the control health profile.
 *
 * @author NTT DOCOMO, INC.
 */
public class HitoeProfileStressEstimationFragment extends Fragment implements HitoeScheduler.OnRegularNotify {

    /**
     * Current Hitoe Device object.
     */
    private HitoeDevice mCurrentDevice;

    /**
     * HeartRate TextView.
     */
    private TextView mLFHF;
    /**
     * Hitoe scheduler.
     */
    private HitoeScheduler mScheduler;
    /** LFHF view. */
    private GradientDrawable mLFHFGradientDrawable;

    @Override
    public View onCreateView(final LayoutInflater inflater, final @Nullable ViewGroup container,
            final @Nullable Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_stress_instructions, null);
        mScheduler = new HitoeScheduler(this, HitoeConstants.LFHF_TEXT_UPDATE_CYCLE_TIME,
                HitoeConstants.LFHF_TEXT_UPDATE_CYCLE_TIME);
        rootView.findViewById(R.id.button_register).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(final View view) {
                mScheduler.scanHitoeDevice(true);
            }
        });
        rootView.findViewById(R.id.button_unregister).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(final View view) {
                mScheduler.scanHitoeDevice(false);
            }
        });
        TextView title = (TextView) rootView.findViewById(R.id.view_title);
        mLFHF = (TextView) rootView.findViewById(R.id.lfhf_value);
        Bundle args = getArguments();
        if (args != null) {

            String serviceId = args.getString(HitoeDeviceControlActivity.FEATURE_SERVICE_ID);
            HitoeApplication app = (HitoeApplication) getActivity().getApplication();
            HitoeManager manager = app.getHitoeManager();

            mCurrentDevice = manager.getHitoeDeviceForServiceId(serviceId);
            if (mCurrentDevice != null) {
                String[] profiles = getResources().getStringArray(R.array.support_profiles);
                title.setText(profiles[4] + getString(R.string.title_control));
            }
        }
        mLFHFGradientDrawable = (GradientDrawable) mLFHF.getBackground();
        return rootView;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mScheduler.scanHitoeDevice(false);
    }

    @Override
    public void onRegularNotify() {
        if (getActivity() == null) {
            return;
        }
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                HitoeApplication app = (HitoeApplication) getActivity().getApplication();
                HitoeManager manager = app.getHitoeManager();

                StressEstimationData stress = manager.getStressEstimationData(mCurrentDevice.getId());
                if (stress != null) {
                    updateView(stress.getTimeStamp(), stress.getLFHFValue());
                }

            }
        });
    }

    /**
     * Update view.
     * @param timestamp timestamp
     * @param lfhf stress estimation
     */
    public void updateView(final long timestamp, final double lfhf) {

        final int scoreRGB;
        final int scoreR;
        final int scoreG;
        final int scoreB;

        if (timestamp == -1) {

            return;
        }
        scoreRGB = (int) (150 * (lfhf / 5));
        if (105 + scoreRGB < 255) {
            scoreR = 105 + scoreRGB;
        } else {
            scoreR = 255;
        }
        if (255 - scoreRGB > 0) {
            scoreG = 255 - scoreRGB;
            scoreB = 255 - scoreRGB;
        } else {
            scoreG = 0;
            scoreB = 0;
        }

        mLFHF.setText("LF/HF:" + String.valueOf(lfhf));
        mLFHFGradientDrawable.setColors(new int[] { 0xFFCDFFFF, Color.rgb(scoreR, scoreG, scoreB) });
    }
}