/*
SystemProfile.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.profile;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import org.deviceconnect.android.profile.api.DConnectApi;
import org.deviceconnect.android.profile.spec.DConnectApiSpec;
import org.deviceconnect.message.DConnectMessage;
import org.deviceconnect.profile.SystemProfileConstants;
import java.util.List;
/**
* System プロファイル.
*
* <p>
* システム情報を提供するAPI.<br>
* システム情報を提供するデバイスプラグインは当クラスを継承し、対応APIを実装すること。 <br>
* </p>
*
* @author NTT DOCOMO, INC.
*/
public abstract class SystemProfile extends DConnectProfile implements SystemProfileConstants {
/**
* 設定画面起動用IntentのパラメータオブジェクトのExtraキー.
*/
public static final String SETTING_PAGE_PARAMS = "org.deviceconnect.profile.system.setting_params";
/**
* 遷移先の設定画面用のActivityのクラス.
*
* @param request リクエストパラメータ
* @param param
* Activity起動用Intentのパラメータ。設定画面用のActivityを呼び出すときにIntentのExtra要素として付加される
* 。Extraのキーは {@link SystemProfile#SETTING_PAGE_PARAMS} となる。
*
* @return ActivityのClassクラス
*/
protected abstract Class<? extends Activity> getSettingPageActivity(Intent request, Bundle param);
@Override
public final String getProfileName() {
return PROFILE_NAME;
}
public SystemProfile() {
addApi(mPutWakeUpApi);
}
private final DConnectApi mPutWakeUpApi = new DConnectApi() {
@Override
public String getInterface() {
return INTERFACE_DEVICE;
}
@Override
public String getAttribute() {
return ATTRIBUTE_WAKEUP;
}
@Override
public DConnectApiSpec.Method getMethod() {
return DConnectApiSpec.Method.PUT;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle param = new Bundle();
Class<? extends Activity> clazz = getSettingPageActivity(request, param);
if (clazz == null) {
setUnsupportedError(response);
} else {
Intent i = new Intent(getContext(), clazz);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra(SETTING_PAGE_PARAMS, param);
getContext().startActivity(i);
setResult(response, DConnectMessage.RESULT_OK);
}
return true;
}
};
// ------------------------------------
// レスポンスセッターメソッド群
// ------------------------------------
/**
* レスポンスにバージョンを格納する.
*
* @param response レスポンスパラメータ
* @param version バージョン
*/
public static void setVersion(final Intent response, final String version) {
response.putExtra(PARAM_VERSION, version);
}
/**
* レスポンスにサポートしているI/Fの一覧を格納する.
*
* @param response レスポンスパラメータ
* @param supports サポートしているI/F一覧
*/
public static void setSupports(final Intent response, final String[] supports) {
response.putExtra(PARAM_SUPPORTS, supports);
}
/**
* レスポンスにサポートしているI/Fの一覧を格納する.
*
* @param response レスポンスパラメータ
* @param supports サポートしているI/F一覧
*/
public static void setSupports(final Intent response, final List<String> supports) {
setSupports(response, supports.toArray(new String[supports.size()]));
}
/**
* レスポンスにサポートしているI/Fの一覧を格納する.
*
* @param response レスポンスパラメータ
* @param supports サポートしているI/F一覧
*/
public static void setSupports(final Bundle response, final String[] supports) {
response.putStringArray(PARAM_SUPPORTS, supports);
}
/**
* レスポンスにサポートしているI/Fの一覧を格納する.
*
* @param response レスポンスパラメータ
* @param supports サポートしているI/F一覧
*/
public static void setSupports(final Bundle response, final List<String> supports) {
setSupports(response, supports.toArray(new String[supports.size()]));
}
/**
* リクエストからpluginIdを取得する.
*
* @param request リクエストパラメータ
* @return プラグインのID
*/
public static String getPluginID(final Intent request) {
String pluginId = request.getStringExtra(PARAM_PLUGIN_ID);
return pluginId;
}
/**
* レスポンスにnameを設定する.
* @param response レスポンスパラメータ
* @param name Managerの名前
*/
public static void setName(final Intent response, final String name) {
response.putExtra(PARAM_NAME, name);
}
/**
* レスポンスにUUIDを設定する.
* @param response レスポンスパラメータ
* @param uuid UUID
*/
public static void setUuid(final Intent response, final String uuid) {
response.putExtra(PARAM_UUID, uuid);
}
}