Implement color indicators (green, yellow, red) for the Simulation Status in the Simulations list. This makes the list more like that on OR desktop.
This commit is contained in:
parent
45838387bc
commit
5ae62a2db2
8
android/res/drawable/simulation_state.xml
Normal file
8
android/res/drawable/simulation_state.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:openrocket="http://schemas.android.com/apk/res/net.sf.openrocket"
|
||||
android:constantSize="true" android:dither="true" android:variablePadding="false">
|
||||
<item android:drawable="@drawable/simulation_state_red" openrocket:simulation_invalid="true"/>
|
||||
<item android:drawable="@drawable/simulation_state_yellow" openrocket:simulation_stale="true"/>
|
||||
<item android:drawable="@drawable/simulation_state_green"/>
|
||||
</selector>
|
9
android/res/drawable/simulation_state_green.xml
Normal file
9
android/res/drawable/simulation_state_green.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval" >
|
||||
|
||||
<corners android:radius="12dp"/>
|
||||
<solid android:color="#CC00FF00"/>
|
||||
<size android:width="24dp" android:height="24dp"/>
|
||||
|
||||
</shape>
|
9
android/res/drawable/simulation_state_red.xml
Normal file
9
android/res/drawable/simulation_state_red.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval" >
|
||||
|
||||
<corners android:radius="12dp"/>
|
||||
<solid android:color="#CCFF0000"/>
|
||||
<size android:width="24dp" android:height="24dp"/>
|
||||
|
||||
</shape>
|
9
android/res/drawable/simulation_state_yellow.xml
Normal file
9
android/res/drawable/simulation_state_yellow.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval" >
|
||||
|
||||
<corners android:radius="12dp"/>
|
||||
<solid android:color="#CCFFFF00"/>
|
||||
<size android:width="24dp" android:height="24dp"/>
|
||||
|
||||
</shape>
|
35
android/res/layout/simulation_list_item.xml
Normal file
35
android/res/layout/simulation_list_item.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/simulation_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/simulation_state"
|
||||
android:duplicateParentState="true"
|
||||
android:paddingRight="5dp" />
|
||||
|
||||
<TwoLineListItem
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:paddingTop="10px" >
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/text1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="TextView"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/text2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="30px"
|
||||
android:text="TextView"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||
</TwoLineListItem>
|
||||
|
||||
</merge>
|
9
android/res/values/simulation_states.xml
Normal file
9
android/res/values/simulation_states.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<declare-styleable name="SimulationState">
|
||||
<attr name="simulation_invalid" format="boolean"/>
|
||||
<attr name="simulation_stale" format="boolean"/>
|
||||
</declare-styleable>
|
||||
|
||||
</resources>
|
@ -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;
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user