org.deviceconnect.android.uiapp.fragment.profile.SystemProfileFragment.java Source code

Java tutorial

Introduction

Here is the source code for org.deviceconnect.android.uiapp.fragment.profile.SystemProfileFragment.java

Source

/*
 SystemProfileFragment.java
 Copyright (c) 2014 NTT DOCOMO,INC.
 Released under the MIT license
 http://opensource.org/licenses/mit-license.php
 */
package org.deviceconnect.android.uiapp.fragment.profile;

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.List;
import java.util.logging.Logger;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.deviceconnect.android.uiapp.R;
import org.deviceconnect.android.uiapp.fragment.SmartDevicePreferenceFragment;
import org.deviceconnect.message.DConnectMessage;
import org.deviceconnect.message.basic.message.DConnectResponseMessage;
import org.deviceconnect.message.http.impl.factory.HttpMessageFactory;
import org.deviceconnect.profile.SystemProfileConstants;
import org.deviceconnect.utils.URIBuilder;

import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * ?.
 */
public class SystemProfileFragment extends SmartDevicePreferenceFragment {

    /**
     * .
     */
    private Logger mLogger = Logger.getLogger("deviceconnect.uiapp");

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        mLogger.entering(getClass().getName(), "onCreate", savedInstanceState);
        super.onCreate(savedInstanceState);

        // load system profile layout
        addPreferencesFromResource(R.xml.system_profile);

        // load current connection statuses
        (new SystemLoader()).execute();

        mLogger.exiting(getClass().getName(), "onCreate");
    }

    @Override
    public View onCreateView(final LayoutInflater paramLayoutInflater, final ViewGroup paramViewGroup,
            final Bundle paramBundle) {
        mLogger.entering(getClass().getName(), "onCreateView",
                new Object[] { paramLayoutInflater, paramViewGroup, paramBundle });

        View view = super.onCreateView(paramLayoutInflater, paramViewGroup, paramBundle);
        view.setBackgroundColor(getResources().getColor(android.R.color.background_light));

        mLogger.exiting(getClass().getName(), "onCreateView", view);
        return view;
    }

    /**
     * .
     */
    private class SystemLoader extends AsyncTask<Object, Integer, DConnectMessage> {

        @Override
        protected DConnectMessage doInBackground(final Object... args) {
            mLogger.entering(getClass().getName(), "doInBackground", args);

            DConnectMessage message;

            URIBuilder uriBuilder = new URIBuilder();
            uriBuilder.setProfile(SystemProfileConstants.PROFILE_NAME);
            uriBuilder.setAttribute(SystemProfileConstants.ATTRIBUTE_DEVICE);
            uriBuilder.addParameter(DConnectMessage.EXTRA_DEVICE_ID, getSmartDevice().getId());
            uriBuilder.addParameter(DConnectMessage.EXTRA_ACCESS_TOKEN, getAccessToken());

            try {
                mLogger.fine("request: " + uriBuilder.build().toString());
                HttpResponse response = getDConnectClient().execute(getDefaultHost(),
                        new HttpGet(uriBuilder.build()));
                mLogger.fine("response: " + response.toString());

                message = (new HttpMessageFactory()).newDConnectMessage(response);
            } catch (IOException e) {
                message = new DConnectResponseMessage(DConnectMessage.RESULT_ERROR);
            } catch (URISyntaxException e) {
                message = new DConnectResponseMessage(DConnectMessage.RESULT_ERROR);
            }

            mLogger.exiting(getClass().getName(), "doInBackground", message);
            return message;

        }

        @Override
        protected void onPostExecute(final DConnectMessage result) {
            mLogger.entering(getClass().getName(), "onPostExecute", result);
            super.onPostExecute(result);

            if (getActivity().isFinishing()) {
                return;
            }

            if (result.getInt(DConnectMessage.EXTRA_RESULT) != DConnectMessage.RESULT_OK) {
                return;
            }

            // set version
            findPreference(getString(R.string.key_system_profile_version))
                    .setSummary(result.getString(SystemProfileConstants.PARAM_VERSION));

            // set profile list
            PreferenceCategory profileList = (PreferenceCategory) findPreference(
                    getString(R.string.key_system_profile_list));

            List<Object> support = result.getList(SystemProfileConstants.PARAM_SUPPORTS);
            if (support != null) {
                for (Object object : support) {
                    String name = (String) object;
                    if (name != null) {
                        Preference pref = new Preference(getActivity());
                        pref.setTitle(name);
                        profileList.addPreference(pref);
                    }
                }
            }

            mLogger.exiting(getClass().getName(), "onPostExecute");
        }
    }

}