/*
IRKitVirtualProfileListFragment.java
Copyright (c) 2015 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.irkit.settings.fragment;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import org.deviceconnect.android.deviceplugin.irkit.IRKitApplication;
import org.deviceconnect.android.deviceplugin.irkit.R;
import org.deviceconnect.android.deviceplugin.irkit.data.IRKitDBHelper;
import org.deviceconnect.android.deviceplugin.irkit.data.VirtualProfileData;
import org.deviceconnect.android.deviceplugin.irkit.settings.activity.IRKitVirtualDeviceListActivity;
import java.util.ArrayList;
import java.util.List;
/**
* IRKit Profileリスト fragment.
*
* @author NTT DOCOMO, INC.
*/
public class IRKitVirtualProfileListFragment extends Fragment {
/** Adapter. */
private VirtualProfileAdapter mVirtualProfileAdapter;
/** Profiles. */
private List<VirtualProfileData> mProfiles;
/** サービスID. */
private String mServiceId;
/** DB Helper. */
private IRKitDBHelper mDBHelper;
/** ListView. */
private ListView mListView;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
}
@Override
public void onResume() {
super.onResume();
IRKitVirtualDeviceListActivity activity = (IRKitVirtualDeviceListActivity) getActivity();
IRKitApplication application = activity.getIRKitApplication();
IRKitApplication.ListViewPosition p = application.getListViewPosition(
IRKitVirtualDeviceListActivity.MANAGE_VIRTUAL_PROFILE_PAGE);
if (mListView != null && p != null) {
mListView.requestFocusFromTouch();
mListView.setSelectionFromTop(p.getPosition(), p.getOffset());
}
updateProfileList();
}
/**
* サービスID を受け取る.
* @param serviceId サービスID
*/
public void setServiceId(final String serviceId) {
mServiceId = serviceId;
}
/**
* VirtualDevice のProfile を保持する。
* @param profile IRKitデバイス
* @return VirtualProfileContainer
*/
private VirtualProfileContainer createContainer(final VirtualProfileData profile) {
VirtualProfileContainer container = new VirtualProfileContainer();
container.setLabel(profile.getName());
container.setRegister((profile.getIr() != null));
return container;
}
/**
* IRKitデバイスのリストの取得.
* @return IRKitデバイスのリスト.
*/
private List<VirtualProfileContainer> createDeviceContainers() {
List<VirtualProfileContainer> containers = new ArrayList<VirtualProfileContainer>();
mProfiles = mDBHelper.getVirtualProfiles(mServiceId, null);
if (mProfiles != null) {
for (VirtualProfileData device : mProfiles) {
containers.add(createContainer(device));
}
}
return containers;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
final MenuItem menuItem = menu.add(getString(R.string.menu_close));
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(final MenuItem item) {
if (item.getTitle().equals(menuItem.getTitle())) {
getActivity().finish();
}
return true;
}
});
}
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
final Bundle savedInstanceState) {
mDBHelper = new IRKitDBHelper(getActivity());
mVirtualProfileAdapter = new VirtualProfileAdapter(getActivity(), createDeviceContainers());
View rootView = inflater.inflate(R.layout.fragment_profilelist, container, false);
mListView = (ListView) rootView.findViewById(R.id.listview_devicelist);
mListView.setItemsCanFocus(true);
mListView.setAdapter(mVirtualProfileAdapter);
return rootView;
}
/**
* Update profile list.
*/
public void updateProfileList() {
if (mVirtualProfileAdapter == null) {
return;
}
if (getActivity() == null) {
return;
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mVirtualProfileAdapter.clear();
mVirtualProfileAdapter.addAll(createDeviceContainers());
mVirtualProfileAdapter.notifyDataSetChanged();
}
});
}
/**
* DeviceContainer.
*/
static class VirtualProfileContainer {
/** ラベル. */
private String mLabel;
/** 更新・登録判定. */
private boolean mIsRegister;
/**
* デバイスラベルの取得.
*
* @return デバイスラベル.
*/
public String getLabel() {
return mLabel;
}
/**
* デバイスラベルの設定.
*
* @param label デバイスラベル.
*/
public void setLabel(final String label) {
if (label == null) {
mLabel = "Unknown";
} else {
mLabel = label;
}
}
/**
* 赤外線が登録されているかどうか.
*
* @return true:登録済み false:登録されていない.
*/
public boolean isRegister() {
return mIsRegister;
}
/**
* 赤外線が登録されているかの設定.
*
* @param isRegister 登録されているか.
*/
public void setRegister(final boolean isRegister) {
mIsRegister = isRegister;
}
}
/**
* DeviceAdapter.
*/
private class VirtualProfileAdapter extends ArrayAdapter<VirtualProfileContainer> {
/** LayoutInflater. */
private LayoutInflater mInflater;
/**
* コンストラクタ.
*
* @param context Context.
* @param objects DeviceList.
*/
public VirtualProfileAdapter(final Context context, final List<VirtualProfileContainer> objects) {
super(context, 0, objects);
mInflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
View cv = convertView;
if (cv == null) {
cv = mInflater.inflate(R.layout.item_irkit_profile_list, parent, false);
} else {
cv = convertView;
}
final VirtualProfileContainer device = getItem(position);
String name = device.getLabel();
TextView nameView = (TextView) cv.findViewById(R.id.profile_name);
nameView.setText(name);
Button registerBtn = (Button) cv.findViewById(R.id.btn_register_ir);
registerBtn.setTag(position);
if (device.isRegister()) {
registerBtn.setBackgroundResource(R.drawable.button_orange);
registerBtn.setText(getString(R.string.virtual_device_update));
} else {
registerBtn.setBackgroundResource(R.drawable.button_blue);
registerBtn.setText(getString(R.string.virtual_device_register));
}
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = ((Integer) view.getTag()).intValue();
VirtualProfileData profile = mProfiles.get(pos);
IRKitVirtualDeviceListActivity activity = (IRKitVirtualDeviceListActivity) getActivity();
activity.startRegisterPageApp(profile);
IRKitApplication application = activity.getIRKitApplication();
int yOffset = mListView.getChildAt(0).getTop();
application.setListViewPosition(
IRKitVirtualDeviceListActivity.MANAGE_VIRTUAL_PROFILE_PAGE,
pos,
yOffset);
}
});
return cv;
}
}
}