/******************************************************************************* * Copyright 2013-2015 alladin-IT GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package at.alladin.rmbt.android.views; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.json.JSONArray; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.ScrollView; import android.widget.SimpleAdapter; import android.widget.TextView; import at.alladin.openrmbt.android.R; import at.alladin.rmbt.android.main.RMBTMainActivity; import at.alladin.rmbt.android.util.CheckTestResultDetailTask; import at.alladin.rmbt.android.util.ConfigHelper; import at.alladin.rmbt.android.util.EndTaskListener; import at.alladin.rmbt.android.views.ResultDetailsView.ResultDetailType; import at.alladin.rmbt.client.v2.task.result.QoSServerResult.DetailType; import at.alladin.rmbt.client.v2.task.result.QoSServerResultCollection; import at.alladin.rmbt.client.v2.task.result.QoSTestResultEnum; /** * * @author lb * */ public class ResultQoSDetailView extends ScrollView implements EndTaskListener, OnItemClickListener, OnClickListener { private final RMBTMainActivity activity; private final String uid; private View view; private EndTaskListener resultFetchEndTaskListener; private CheckTestResultDetailTask testResultDetailTask;; private JSONArray testResult; private QoSServerResultCollection results; /** * * @param context * @param activity * @param uid * @param jsonArray */ public ResultQoSDetailView(Context context, RMBTMainActivity activity, String uid, JSONArray jsonArray) { this(context, null, activity, uid, jsonArray); } /** * * @param context * @param activity2 */ public ResultQoSDetailView(Context context, AttributeSet attrs, RMBTMainActivity activity, String uid, JSONArray jsonArray) { super(context, attrs); setFillViewport(true); LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.activity = activity; this.uid = uid; this.view = createView(layoutInflater); this.testResult = jsonArray; } public void initialize(EndTaskListener resultFetchEndTaskListener) { this.resultFetchEndTaskListener = resultFetchEndTaskListener; if ((testResultDetailTask == null || testResultDetailTask != null || testResultDetailTask.isCancelled()) && uid != null) { if (this.testResult!=null) { taskEnded(this.testResult); } else { System.out.println("initializing ResultDetailsView"); testResultDetailTask = new CheckTestResultDetailTask(activity, ResultDetailType.QUALITY_OF_SERVICE_TEST); testResultDetailTask.setEndTaskListener(this); testResultDetailTask.execute(uid); } } } /** * * @param inflater * @return */ public View createView(final LayoutInflater inflater) { final View view = inflater.inflate(R.layout.result_qos_details, this); return view; } public View getView() { return view; } /* * (non-Javadoc) * @see at.alladin.rmbt.android.util.EndTaskListener#taskEnded(org.json.JSONArray) */ @SuppressWarnings("unchecked") @Override public void taskEnded(JSONArray result) { System.out.println("ResultQoSDetail taskEnded"); this.testResult = result; if (resultFetchEndTaskListener != null) { resultFetchEndTaskListener.taskEnded(result); } ProgressBar resultProgressBar = (ProgressBar) view.findViewById(R.id.progress_bar); TextView resultTextView = (TextView) view.findViewById(R.id.info_text); try { results = new QoSServerResultCollection(result); View successList = view.findViewById(R.id.qos_success_list); List<HashMap<String, String>> itemList = new ArrayList<HashMap<String,String>>(); int index = 0; for (QoSTestResultEnum type : QoSTestResultEnum.values()) { if (results.getQoSStatistics().getTestCounter(type) > 0) { HashMap<String, String> listItem = new HashMap<String, String>(); listItem.put("name", ConfigHelper.getCachedQoSNameByTestType(type, activity)); listItem.put("type_name", type.toString()); listItem.put("index", String.valueOf(index++)); itemList.add(listItem); } } ListAdapter valueList = new SimpleAdapter(activity, itemList, R.layout.qos_category_list_item, new String[] { "name"}, new int[] { R.id.name}); resultProgressBar.setVisibility(View.GONE); if (valueList.getCount() > 0) { //in case the view will change again: if (ListView.class.isAssignableFrom(successList.getClass())) { ((ListView) successList).setAdapter(valueList); ((ListView) successList).setOnItemClickListener(this); } else { ViewGroup vgList = (ViewGroup) successList; for (int i = 0; i < valueList.getCount(); i++) { View v = valueList.getView(i, null, null); QoSTestResultEnum key = QoSTestResultEnum.valueOf(((HashMap<String, String>)valueList.getItem(i)).get("type_name")); if (results.getQoSStatistics().getFailureCounter(key) > 0) { ImageView img = (ImageView) v.findViewById(R.id.status); img.setImageResource(R.drawable.traffic_lights_red); } TextView status = (TextView) v.findViewById(R.id.qos_type_status); status.setText((results.getQoSStatistics().getTestCounter(key) - results.getQoSStatistics().getFailedTestsCounter(key)) + "/" + results.getQoSStatistics().getTestCounter(key)); v.setOnClickListener(this); v.setTag(valueList.getItem(i)); vgList.addView(v); } } successList.invalidate(); resultTextView.setVisibility(View.GONE); successList.setVisibility(View.VISIBLE); } else { resultTextView.setText(R.string.result_qos_error_no_data_available); } } catch (Throwable t) { resultTextView.setText(R.string.result_qos_error_no_data_available); resultProgressBar.setVisibility(View.GONE); //t.printStackTrace(); } } @SuppressWarnings("unchecked") @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { ListView listView = (ListView) adapter; HashMap<String, String> item = (HashMap<String, String>) listView.getAdapter().getItem(position); if (listView.getId() == R.id.qos_success_list) { activity.showExpandedResultDetail(results, DetailType.OK, Integer.valueOf(item.get("index"))); } else if (listView.getId() == R.id.qos_error_list) { activity.showExpandedResultDetail(results, DetailType.FAIL, Integer.valueOf(item.get("index"))); } } @SuppressWarnings("unchecked") @Override public void onClick(View v) { try { HashMap<String, String> item = (HashMap<String, String>) v.getTag(); if (((View) v.getParent()).getId() == R.id.qos_success_list) { activity.showExpandedResultDetail(results, DetailType.OK, Integer.valueOf(item.get("index"))); } else if (((View) v.getParent()).getId() == R.id.qos_error_list) { activity.showExpandedResultDetail(results, DetailType.FAIL, Integer.valueOf(item.get("index"))); } } catch (Exception e) { e.printStackTrace(); } } }