/* * Copyright (c) 2010-2016, openHAB.org and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.habdroid.ui.drawer; import android.content.Context; import android.net.Uri; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import org.openhab.habdroid.R; import org.openhab.habdroid.model.OpenHABSitemap; import org.openhab.habdroid.util.MySmartImageView; import java.util.List; public class OpenHABDrawerAdapter extends ArrayAdapter<OpenHABDrawerItem> { public static final int TYPE_SITEMAPITEM = 0; public static final int TYPE_MENU_ITEM = 1; public static final int TYPE_MENU_WITH_COUNT = 2; public static final int TYPE_HEADER_ITEM = 3; public static final int TYPE_DIVIDER_ITEM = 4; public static final int TYPES_COUNT = 5; private static final String TAG = OpenHABDrawerAdapter.class.getSimpleName(); private String openHABBaseUrl = "http://demo.openhab.org:8080/"; private String openHABUsername = ""; private String openHABPassword = ""; public OpenHABDrawerAdapter(Context context, int resource, List<OpenHABDrawerItem> objects) { super(context, resource, objects); } @SuppressWarnings("deprecation") @Override public View getView(int position, View convertView, ViewGroup parent) { final RelativeLayout drawerItemView; LinearLayout drawerDivider; TextView drawerItemLabelTextView; TextView drawerItemCountLabelTextView; MySmartImageView drawerItemImage; int drawerItemLayout; OpenHABDrawerItem drawerItem = getItem(position); switch (this.getItemViewType(position)) { case TYPE_SITEMAPITEM: drawerItemLayout = R.layout.openhabdrawer_sitemap_item; break; case TYPE_MENU_ITEM: drawerItemLayout = R.layout.openhabdrawer_menuwithcount; break; case TYPE_MENU_WITH_COUNT: drawerItemLayout = R.layout.openhabdrawer_menuwithcount; break; case TYPE_HEADER_ITEM: drawerItemLayout = R.layout.openhabdrawer_header_item; break; case TYPE_DIVIDER_ITEM: drawerItemLayout = R.layout.openhabdrawer_divider_item; break; default: drawerItemLayout = R.layout.openhabdrawer_sitemap_item; break; } if (convertView == null) { drawerItemView = new RelativeLayout(getContext()); String inflater = Context.LAYOUT_INFLATER_SERVICE; LayoutInflater vi; vi = (LayoutInflater)getContext().getSystemService(inflater); vi.inflate(drawerItemLayout, drawerItemView, true); } else { drawerItemView = (RelativeLayout) convertView; } // Find all needed views drawerItemLabelTextView = (TextView)drawerItemView.findViewById(R.id.itemlabel); drawerItemCountLabelTextView = (TextView)drawerItemView.findViewById(R.id.itemcountlabel); drawerItemImage = (MySmartImageView)drawerItemView.findViewById(R.id.itemimage); switch (this.getItemViewType(position)) { case TYPE_SITEMAPITEM: OpenHABSitemap siteMap = drawerItem.getSiteMap(); if (siteMap.getLabel() != null && drawerItemLabelTextView != null) { drawerItemLabelTextView.setText(siteMap.getLabel()); } else { drawerItemLabelTextView.setText(siteMap.getName()); } if (siteMap.getIcon() != null && drawerItemImage != null) { String iconUrl = openHABBaseUrl + Uri.encode(siteMap.getIconPath(),"/?="); drawerItemImage.setImageUrl(iconUrl, R.drawable.openhabiconsmall, openHABUsername, openHABPassword); } else { drawerItemImage.setImageDrawable(getContext().getResources().getDrawable(R.drawable.openhabicon_light)); } break; case TYPE_DIVIDER_ITEM: break; default: if (drawerItemLabelTextView != null && drawerItem.getLabelText() != null) { drawerItemLabelTextView.setText(drawerItem.getLabelText()); } if (drawerItemImage != null && drawerItem.getIcon() != null) { drawerItemImage.setImageDrawable(drawerItem.getIcon()); } if (drawerItem.getCount() > 0 && drawerItemCountLabelTextView != null) { Log.d(TAG, "Showing count = " + String.valueOf(drawerItem.getCount())); drawerItemCountLabelTextView.setText(String.valueOf(drawerItem.getCount())); } else if (drawerItemCountLabelTextView != null) { Log.d(TAG, "Not showing count " + String.valueOf(drawerItem.getCount())); drawerItemCountLabelTextView.setText(""); } else { Log.d(TAG, "No count label"); } break; } return drawerItemView; } @Override public int getViewTypeCount() { return TYPES_COUNT; } @Override public int getItemViewType(int position) { switch(getItem(position).getItemType()) { case SITEMAP_ITEM: return TYPE_SITEMAPITEM; case MENU_ITEM: return TYPE_MENU_ITEM; case MENU_WITH_COUNT: return TYPE_MENU_WITH_COUNT; case HEADER_ITEM: return TYPE_HEADER_ITEM; case DIVIDER_ITEM: return TYPE_DIVIDER_ITEM; default: return TYPE_MENU_ITEM; } } public boolean areAllItemsEnabled() { return false; } public boolean isEnabled(int position) { if (getItem(position).getItemType() == OpenHABDrawerItem.DrawerItemType.DIVIDER_ITEM || getItem(position).getItemType() == OpenHABDrawerItem.DrawerItemType.HEADER_ITEM) return false; return true; } public String getOpenHABBaseUrl() { return openHABBaseUrl; } public void setOpenHABBaseUrl(String openHABBaseUrl) { this.openHABBaseUrl = openHABBaseUrl; } public String getOpenHABUsername() { return openHABUsername; } public void setOpenHABUsername(String openHABUsername) { this.openHABUsername = openHABUsername; } public String getOpenHABPassword() { return openHABPassword; } public void setOpenHABPassword(String openHABPassword) { this.openHABPassword = openHABPassword; } }