/******************************************************************************* | |
* Copyright (c) 2013, 2017 Orange. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* Contributors: | |
* BAREAU Cyrille <cyrille.bareau@orange.com>, | |
* BONNARDEL Gregory <gbonnardel.ext@orange.com>, | |
* BOLLE Sebastien <sebastien.bolle@orange.com>. | |
*******************************************************************************/ | |
package org.eclipse.om2m.android.dashboard.devices; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.SortedSet; | |
import org.eclipse.om2m.android.dashboard.cse.models.SDTDevice; | |
import org.eclipse.om2m.android.dashboard.tools.OneM2MDeviceType; | |
import org.eclipse.om2m.android.dashboard.tools.Sorter; | |
import org.eclipse.om2m.android.dashboard.R; | |
import android.content.Context; | |
import android.util.AttributeSet; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.View.OnClickListener; | |
import android.widget.ImageView; | |
import android.widget.LinearLayout; | |
import android.widget.TextView; | |
public class DeviceTypeContainerView extends LinearLayout implements OnClickListener { | |
private LinearLayout container; | |
private ImageView ivDevCatIcon; | |
private ImageView ivDevCatMoreLess; | |
private TextView tvDevCatCount; | |
private TextView tvDevLocale; | |
private Context context; | |
private OneM2MDeviceType type; | |
private List<String> visibleDevIds = new ArrayList<String>(); | |
public DeviceTypeContainerView(Context context, AttributeSet attrs) { | |
super(context, attrs); | |
this.context = context; | |
visibleDevIds.clear(); | |
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); | |
inflater.inflate(R.layout.device_type_container_view, this, true); | |
container = (LinearLayout)findViewById(R.id.ll_devType_container); | |
ivDevCatIcon = (ImageView)findViewById(R.id.iv_devType_icon); | |
ivDevCatMoreLess = (ImageView)findViewById(R.id.iv_devType_moreLess); | |
tvDevCatCount = (TextView)findViewById(R.id.tv_devType_count); | |
tvDevLocale = (TextView)findViewById(R.id.tv_devType_locale); | |
this.setOnClickListener(this); | |
} | |
public OneM2MDeviceType getDeviceType() { | |
return type; | |
} | |
public String getTypeName() { | |
return (type == null) ? "" : type.getType(); | |
} | |
public void setDeviceType(OneM2MDeviceType type) { | |
this.type = type; | |
if (ivDevCatIcon != null) { | |
ivDevCatIcon.setImageDrawable(getResources().getDrawable(type.getIcon())); | |
} | |
} | |
public void setDevices(List<SDTDevice> devs) { | |
SortedSet<SDTDevice> devices = Sorter.getSortedDevices(devs); | |
if (tvDevCatCount != null) { | |
tvDevCatCount.setText("" + devices.size()); | |
} | |
if (tvDevLocale != null) { | |
tvDevLocale.setText(type.getLocale()); | |
} | |
// 1- add/update devices | |
for (SDTDevice device : devices) { | |
if (visibleDevIds.contains(device.getRi())) { | |
// this device already in container => just find his view and refresh it | |
for (int i = 0; i < container.getChildCount(); i++) { | |
DeviceSimpleView devView = (DeviceSimpleView)container.getChildAt(i); | |
if ((devView.getDevice() != null) | |
&& devView.getDevice().getRi().equals(device.getRi())) { | |
devView.setDevice(device); | |
break; | |
} | |
} | |
} | |
else { | |
DeviceSimpleView devView = new DeviceSimpleView(this.context, null); | |
devView.setDevice(device); | |
// add container | |
container.addView(devView); | |
// memorize it | |
visibleDevIds.add(device.getRi()); | |
} | |
} | |
// remove old devices | |
List<String> devIdsToRemove = new ArrayList<String>(); | |
for (String devId : visibleDevIds) { | |
boolean devFound = false; | |
for (SDTDevice dev : devices) { | |
if (dev.getRi().equals(devId)) { | |
devFound = true; | |
break; | |
} | |
} | |
if (! devFound) { | |
devIdsToRemove.add(devId); | |
} | |
} | |
for (String devId : devIdsToRemove) { | |
DeviceSimpleView devView = null; | |
for (int i = 0; i < container.getChildCount(); i++) { | |
DeviceSimpleView view = (DeviceSimpleView)container.getChildAt(i); | |
if ((view.getDevice() != null) | |
&& view.getDevice().getRi().equals(devId)) { | |
devView = view; | |
break; | |
} | |
} | |
if (devView != null) { | |
container.removeView(devView); | |
} | |
visibleDevIds.remove(devId); | |
} | |
} | |
@Override | |
public void onClick(View v) { | |
if (container.getVisibility() == View.VISIBLE) { | |
close(); | |
} else { | |
open(); | |
} | |
} | |
public void open() { | |
ivDevCatMoreLess.setImageDrawable(getResources().getDrawable(R.drawable.otb_picto_close_blue)); | |
container.setVisibility(View.VISIBLE); | |
} | |
public void close() { | |
ivDevCatMoreLess.setImageDrawable(getResources().getDrawable(R.drawable.otb_picto_open_blue)); | |
container.setVisibility(View.GONE); | |
} | |
} |