From d0a7b512a3b108bda6043e050fbc593730ebde3f Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Tue, 26 Jun 2012 18:26:06 +0000 Subject: [PATCH] Implement color indicators (green, yellow, red) for the Simulation Status in the Simulations list. This makes the list more like that on OR desktop. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@810 180e2498-e6e9-4542-8430-84ac67f01cd8 --- android/res/drawable/simulation_state.xml | 8 ++ .../res/drawable/simulation_state_green.xml | 9 ++ android/res/drawable/simulation_state_red.xml | 9 ++ .../res/drawable/simulation_state_yellow.xml | 9 ++ android/res/layout/simulation_list_item.xml | 35 +++++++ android/res/values/simulation_states.xml | 9 ++ .../android/rocket/Simulations.java | 33 ++----- .../simulation/SimulationListItem.java | 91 +++++++++++++++++++ 8 files changed, 180 insertions(+), 23 deletions(-) create mode 100644 android/res/drawable/simulation_state.xml create mode 100644 android/res/drawable/simulation_state_green.xml create mode 100644 android/res/drawable/simulation_state_red.xml create mode 100644 android/res/drawable/simulation_state_yellow.xml create mode 100644 android/res/layout/simulation_list_item.xml create mode 100644 android/res/values/simulation_states.xml create mode 100644 android/src/net/sf/openrocket/android/simulation/SimulationListItem.java diff --git a/android/res/drawable/simulation_state.xml b/android/res/drawable/simulation_state.xml new file mode 100644 index 00000000..28e59234 --- /dev/null +++ b/android/res/drawable/simulation_state.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/android/res/drawable/simulation_state_green.xml b/android/res/drawable/simulation_state_green.xml new file mode 100644 index 00000000..4ccef189 --- /dev/null +++ b/android/res/drawable/simulation_state_green.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/android/res/drawable/simulation_state_red.xml b/android/res/drawable/simulation_state_red.xml new file mode 100644 index 00000000..37c5b523 --- /dev/null +++ b/android/res/drawable/simulation_state_red.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/android/res/drawable/simulation_state_yellow.xml b/android/res/drawable/simulation_state_yellow.xml new file mode 100644 index 00000000..1d258478 --- /dev/null +++ b/android/res/drawable/simulation_state_yellow.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/android/res/layout/simulation_list_item.xml b/android/res/layout/simulation_list_item.xml new file mode 100644 index 00000000..4d349188 --- /dev/null +++ b/android/res/layout/simulation_list_item.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/res/values/simulation_states.xml b/android/res/values/simulation_states.xml new file mode 100644 index 00000000..836f7b41 --- /dev/null +++ b/android/res/values/simulation_states.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/android/src/net/sf/openrocket/android/rocket/Simulations.java b/android/src/net/sf/openrocket/android/rocket/Simulations.java index 4ceb210f..807d6be9 100644 --- a/android/src/net/sf/openrocket/android/rocket/Simulations.java +++ b/android/src/net/sf/openrocket/android/rocket/Simulations.java @@ -2,12 +2,10 @@ package net.sf.openrocket.android.rocket; import net.sf.openrocket.R; import net.sf.openrocket.android.CurrentRocketHolder; +import net.sf.openrocket.android.simulation.SimulationListItem; import net.sf.openrocket.android.util.AndroidLogWrapper; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.Simulation; -import net.sf.openrocket.simulation.FlightData; -import net.sf.openrocket.unit.Unit; -import net.sf.openrocket.unit.UnitGroup; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; @@ -21,7 +19,6 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; -import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.view.Menu; @@ -124,26 +121,16 @@ implements SharedPreferences.OnSharedPreferenceChangeListener @Override public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - if ( v == null ) { - LayoutInflater li = getActivity().getLayoutInflater(); - v = li.inflate(android.R.layout.simple_list_item_2,null); - } + SimulationListItem listItemView = (SimulationListItem) convertView; + + if (listItemView == null) { + listItemView = new SimulationListItem(parent.getContext()); + } + Simulation sim = this.getItem(position); - ((TextView)v.findViewById(android.R.id.text1)).setText( sim.getName() ); - StringBuilder sb = new StringBuilder(); - String motorConfig = sim.getOptions().getMotorConfigurationID(); - sb.append("motors: ").append(rocketDocument.getRocket().getMotorConfigurationNameOrDescription(motorConfig)); - Unit distanceUnit = UnitGroup.UNITS_DISTANCE.getDefaultUnit(); - FlightData flightData = sim.getSimulatedData(); - if ( flightData != null ) { - sb.append(" apogee: ").append( distanceUnit.toStringUnit(flightData.getMaxAltitude())); - sb.append(" time: ").append(flightData.getFlightTime()).append("s"); - ((TextView)v.findViewById(android.R.id.text2)).setText( sb.toString() ); - } else { - ((TextView)v.findViewById(android.R.id.text2)).setText("No simulation data"); - } - return v; + listItemView.setSimulation(sim); + + return listItemView; } }; diff --git a/android/src/net/sf/openrocket/android/simulation/SimulationListItem.java b/android/src/net/sf/openrocket/android/simulation/SimulationListItem.java new file mode 100644 index 00000000..16d12baa --- /dev/null +++ b/android/src/net/sf/openrocket/android/simulation/SimulationListItem.java @@ -0,0 +1,91 @@ +package net.sf.openrocket.android.simulation; + + +import net.sf.openrocket.R; +import net.sf.openrocket.document.Simulation; +import net.sf.openrocket.document.Simulation.Status; +import net.sf.openrocket.simulation.FlightData; +import net.sf.openrocket.unit.Unit; +import net.sf.openrocket.unit.UnitGroup; +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class SimulationListItem extends LinearLayout { + + private int[] SIMULATION_INVALID = { R.attr.simulation_invalid }; + private int[] SIMULATION_STALE = { R.attr.simulation_stale }; + + private TextView text1; + private TextView text2; + private Status simStatus; + + public SimulationListItem(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + loadViews(); + } + + public SimulationListItem(Context context, AttributeSet attrs) { + super(context, attrs); + loadViews(); + } + + public SimulationListItem(Context context) { + this(context, null); + } + + public void setSimulation(Simulation sim) { + + text1.setText( sim.getName() ); + + StringBuilder sb = new StringBuilder(); + String motorConfig = sim.getOptions().getMotorConfigurationID(); + sb.append("motors: ").append(sim.getRocket().getMotorConfigurationNameOrDescription(motorConfig)); + Unit distanceUnit = UnitGroup.UNITS_DISTANCE.getDefaultUnit(); + FlightData flightData = sim.getSimulatedData(); + if ( flightData != null ) { + sb.append(" apogee: ").append( distanceUnit.toStringUnit(flightData.getMaxAltitude())); + sb.append(" time: ").append(flightData.getFlightTime()).append("s"); + } else { + sb.append(" No simulation data"); + } + text2.setText( sb.toString() ); + + simStatus = sim.getStatus(); + + // Refresh the drawable state so that it includes the status if required. + refreshDrawableState(); + + } + + private void loadViews() { + this.setOrientation(LinearLayout.HORIZONTAL); + + LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + layoutInflater.inflate(R.layout.simulation_list_item, this, true); + + // setPadding(fiveDPInPixels, fiveDPInPixels, fiveDPInPixels, fiveDPInPixels); + // setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, fiftyDPInPixels)); + // setBackgroundResource(R.drawable.message_list_item_background); + + text1 = (TextView) findViewById(android.R.id.text1); + text2 = (TextView) findViewById(android.R.id.text2); + } + + @Override + protected int[] onCreateDrawableState(int extraSpace) { + // We are going to add extra state. + final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); + if ( simStatus == Status.OUTDATED || simStatus == Status.NOT_SIMULATED ) { + return mergeDrawableStates(drawableState, SIMULATION_INVALID ); + + } else if ( simStatus == Status.LOADED || simStatus == Status.EXTERNAL ) { + return mergeDrawableStates(drawableState, SIMULATION_STALE); + } else { + return super.onCreateDrawableState(extraSpace); + } + } + +} -- 2.30.2