/******************************************************************************* * Copyright 2016 Specure 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.loopmode.measurement; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import at.alladin.openrmbt.android.R; import at.alladin.rmbt.android.loopmode.DetailsListItem; import at.alladin.rmbt.android.loopmode.LoopModeResults; import at.alladin.rmbt.android.loopmode.measurement.SpeedMeasurementDetails.SpeedType; public class MeasurementDetailsFragment extends Fragment { public static interface MeasurementDetailsItem extends DetailsListItem { boolean isRunning(); boolean isDone(); String getMedian(); } public static MeasurementDetailsFragment newInstance() { final MeasurementDetailsFragment f = new MeasurementDetailsFragment(); return f; } private LoopModeResults results; private ListView listView; private TextView currentText; private TextView medianText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View v = inflater.inflate(R.layout.loop_mode_measurement_fragment, container, false); listView = (ListView) v.findViewById(R.id.lm_list); currentText = (TextView) v.findViewById(R.id.lm_measurement_list_header_current); medianText = (TextView) v.findViewById(R.id.lm_measurement_list_header_median); return v; } public boolean hasResults() { return results != null; } public void initList(LoopModeResults results) { this.results = results; final List<MeasurementDetailsItem> mdList = new ArrayList<MeasurementDetailsFragment.MeasurementDetailsItem>(); mdList.add(new PingMeasurementDetails(getActivity(), results)); mdList.add(new SpeedMeasurementDetails(getActivity(), results, SpeedType.DOWN)); mdList.add(new SpeedMeasurementDetails(getActivity(), results, SpeedType.UP)); mdList.add(new QoSMeasurementDetails(getActivity(), results)); listView.setAdapter(new MeasurementListAdapter(mdList)); } public void updateList() { if (listView.getAdapter() != null) { ((MeasurementListAdapter) listView.getAdapter()).notifyDataSetChanged(); if (results != null && LoopModeResults.Status.RUNNING.equals(results.getStatus())) { currentText.setText(R.string.loop_test_current); if (results.getLastTestResults() != null) { medianText.setText(R.string.loop_test_last); } else { medianText.setText(""); } } else { currentText.setText(R.string.loop_test_last); medianText.setText(R.string.loop_test_median); } } } public class MeasurementListAdapter extends BaseAdapter { private class ViewHolder { TextView measurement; ProgressBar progress; ImageView status; TextView current; TextView median; } private final List<MeasurementDetailsItem> items; public MeasurementListAdapter(List<MeasurementDetailsItem> items) { this.items = items; } @Override public int getCount() { return items != null ? items.size() : 0; } @Override public Object getItem(int position) { return items != null ? items.get(position) : null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { LayoutInflater inflater = getActivity().getLayoutInflater(); convertView = inflater.inflate(R.layout.loop_mode_measurement_list_item, parent, false); holder = new ViewHolder(); holder.measurement = (TextView) convertView.findViewById(R.id.lm_measurement); holder.progress = (ProgressBar) convertView.findViewById(R.id.lm_measurement_progress); holder.status = (ImageView) convertView.findViewById(R.id.lm_measurement_status); holder.current = (TextView) convertView.findViewById(R.id.lm_measurement_current); holder.median = (TextView) convertView.findViewById(R.id.lm_measurement_median); convertView.setTag(holder); } holder = (ViewHolder) convertView.getTag(); final MeasurementDetailsItem md = (MeasurementDetailsItem) getItem(position); holder.measurement.setText(md.getTitle()); holder.current.setText(md.getCurrent()); holder.median.setText(md.getMedian()); if (md.isDone()) { holder.progress.setVisibility(View.GONE); holder.status.setVisibility(View.VISIBLE); holder.status.setImageResource(md.getStatusResource()); } else { holder.status.setVisibility(View.GONE); holder.progress.setVisibility(md.isRunning() ? View.VISIBLE : View.INVISIBLE); } return convertView; } } }