merge heads

This commit is contained in:
Jimmy Shih
2012-03-21 13:04:57 -07:00
6 changed files with 131 additions and 347 deletions
+77 -82
View File
@@ -14,93 +14,88 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_width="fill_parent" >
android:orientation="vertical">
<TableLayout <LinearLayout
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:shrinkColumns="0" android:orientation="vertical"
android:stretchColumns="0"> android:padding="8dp" >
<TextView <TextView
android:background="@drawable/list_bar" android:drawableLeft="@drawable/x_axis"
android:drawablePadding="8dp"
android:gravity="bottom"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="wrap_content"
android:paddingLeft="10dp" style="@android:style/TextAppearance.DeviceDefault.Large"
android:text="@string/menu_chart_view_chart_settings" android:text="@string/chart_settings_x_axis" />
android:textColor="@color/white"
android:textSize="20sp"/> <RadioGroup
</TableLayout> android:id="@+id/chart_settings_x"
<ScrollView
android:layout_height="0dp"
android:layout_weight="1"
android:layout_width="fill_parent">
<LinearLayout
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="wrap_content" >
android:orientation="vertical"
android:padding="10dp"> <RadioButton
<!-- X axis --> android:id="@+id/chart_settings_by_distance"
<TextView
android:drawableLeft="@drawable/x_axis"
android:drawablePadding="10dp"
android:text="@string/chart_settings_x_axis"
style="@style/ChartSettingsAxisText"/>
<RadioGroup
android:id="@+id/chart_settings_x"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent"> android:layout_width="wrap_content"
<RadioButton style="@android:style/TextAppearance.DeviceDefault.Medium"
android:id="@+id/chart_settings_by_distance" android:text="@string/chart_settings_by_distance" />
android:text="@string/chart_settings_by_distance"
style="@style/ChartSettingsRadioButton"/> <RadioButton
<RadioButton android:id="@+id/chart_settings_by_time"
android:id="@+id/chart_settings_by_time" android:layout_height="wrap_content"
android:text="@string/chart_settings_by_time" android:layout_width="wrap_content"
style="@style/ChartSettingsRadioButton"/> style="@android:style/TextAppearance.DeviceDefault.Medium"
</RadioGroup> android:text="@string/chart_settings_by_time" />
<!-- Y axis --> </RadioGroup>
<TextView
android:drawableLeft="@drawable/y_axis" <TextView
android:drawablePadding="10dp" android:drawableLeft="@drawable/y_axis"
android:paddingTop="10dp" android:drawablePadding="8dp"
android:text="@string/chart_settings_y_axis" android:gravity="bottom"
style="@style/ChartSettingsAxisText"/> android:layout_height="wrap_content"
<CheckBox android:layout_width="wrap_content"
android:id="@+id/chart_settings_elevation" style="@android:style/TextAppearance.DeviceDefault.Large"
android:text="@string/stat_elevation" android:text="@string/chart_settings_y_axis" />
style="@style/ChartSettingsCheckbox"/>
<CheckBox <CheckBox
android:id="@+id/chart_settings_speed" android:id="@+id/chart_settings_elevation"
android:text="@string/stat_speed" android:layout_height="wrap_content"
style="@style/ChartSettingsCheckbox"/> android:layout_width="wrap_content"
<CheckBox style="@android:style/TextAppearance.DeviceDefault.Medium"
android:id="@+id/chart_settings_power" android:text="@string/stat_elevation" />
android:text="@string/sensor_state_power"
style="@style/ChartSettingsCheckbox"/> <CheckBox
<CheckBox android:id="@+id/chart_settings_speed"
android:id="@+id/chart_settings_cadence" android:layout_height="wrap_content"
android:text="@string/sensor_state_cadence" android:layout_width="wrap_content"
style="@style/ChartSettingsCheckbox"/> style="@android:style/TextAppearance.DeviceDefault.Medium"
<CheckBox android:text="@string/stat_speed" />
android:id="@+id/chart_settings_heart_rate"
android:text="@string/sensor_state_heart_rate" <CheckBox
style="@style/ChartSettingsCheckbox"/> android:id="@+id/chart_settings_power"
</LinearLayout> android:layout_height="wrap_content"
</ScrollView> android:layout_width="wrap_content"
<LinearLayout style="@style/ButtonLayout"> style="@android:style/TextAppearance.DeviceDefault.Medium"
<LinearLayout style="@style/ButtonSpacer"/> android:text="@string/sensor_state_power" />
<Button
android:id="@+id/chart_settings_ok" <CheckBox
android:layout_gravity="left" android:id="@+id/chart_settings_cadence"
android:text="@string/generic_ok" android:layout_height="wrap_content"
style="@style/Button"/> android:layout_width="wrap_content"
<Button style="@android:style/TextAppearance.DeviceDefault.Medium"
android:id="@+id/chart_settings_cancel" android:text="@string/sensor_state_cadence" />
android:layout_gravity="right"
android:text="@string/generic_cancel" <CheckBox
style="@style/Button"/> android:id="@+id/chart_settings_heart_rate"
<LinearLayout style="@style/ButtonSpacer"/> android:layout_height="wrap_content"
android:layout_width="wrap_content"
style="@android:style/TextAppearance.DeviceDefault.Medium"
android:text="@string/sensor_state_heart_rate" />
</LinearLayout> </LinearLayout>
</LinearLayout>
</ScrollView>
-21
View File
@@ -74,27 +74,6 @@ limitations under the License.
<item name="android:visibility">gone</item> <item name="android:visibility">gone</item>
</style> </style>
<!-- Chart settings axis text -->
<style name="ChartSettingsAxisText">
<item name="android:gravity">bottom</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textSize">20sp</item>
</style>
<!-- Chart settings checkbox -->
<style name="ChartSettingsCheckbox">
<item name="android:checked">true</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
</style>
<!-- Chart settings radio button -->
<style name="ChartSettingsRadioButton">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
</style>
<style name="SensorStateLabel"> <style name="SensorStateLabel">
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">fill_parent</item> <item name="android:layout_width">fill_parent</item>
@@ -35,9 +35,9 @@ import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.location.Location; import android.location.Location;
import android.os.Bundle; import android.os.Bundle;
import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech;
@@ -45,7 +45,9 @@ import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
import android.widget.CheckBox;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.ZoomControls; import android.widget.ZoomControls;
import java.util.ArrayList; import java.util.ArrayList;
@@ -59,7 +61,7 @@ import java.util.EnumSet;
*/ */
public class ChartActivity extends Activity implements TrackDataListener { public class ChartActivity extends Activity implements TrackDataListener {
public static final int CHART_SETTINGS_DIALOG = 1; private static final int DIALOG_CHART_SETTINGS_ID = 0;
private final DoubleBuffer elevationBuffer = private final DoubleBuffer elevationBuffer =
new DoubleBuffer(Constants.ELEVATION_SMOOTHING_FACTOR); new DoubleBuffer(Constants.ELEVATION_SMOOTHING_FACTOR);
@@ -185,43 +187,60 @@ public class ChartActivity extends Activity implements TrackDataListener {
@Override @Override
protected Dialog onCreateDialog(int id) { protected Dialog onCreateDialog(int id) {
if (id == CHART_SETTINGS_DIALOG) { switch (id) {
final ChartSettingsDialog settingsDialog = new ChartSettingsDialog(this); case DIALOG_CHART_SETTINGS_ID:
settingsDialog.setOnClickListener(new OnClickListener() { View view = getLayoutInflater().inflate(R.layout.chart_settings, null);
@Override final RadioGroup radioGroup = (RadioGroup) view.findViewById(R.id.chart_settings_x);
public void onClick(DialogInterface arg0, int which) { radioGroup.check(chartView.getMode() == Mode.BY_DISTANCE
if (which != DialogInterface.BUTTON_POSITIVE) { ? R.id.chart_settings_by_distance : R.id.chart_settings_by_time);
return;
}
for (int i = 0; i < ChartView.NUM_SERIES; i++) { final CheckBox[] checkBoxes = new CheckBox[ChartView.NUM_SERIES];
chartView.setChartValueSeriesEnabled(i, settingsDialog.isSeriesEnabled(i)); checkBoxes[ChartView.ELEVATION_SERIES] = (CheckBox) view.findViewById(
} R.id.chart_settings_elevation);
setMode(settingsDialog.getMode()); checkBoxes[ChartView.SPEED_SERIES] = (CheckBox) view.findViewById(
chartView.postInvalidate(); R.id.chart_settings_speed);
checkBoxes[ChartView.POWER_SERIES] = (CheckBox) view.findViewById(
R.id.chart_settings_power);
checkBoxes[ChartView.CADENCE_SERIES] = (CheckBox) view.findViewById(
R.id.chart_settings_cadence);
checkBoxes[ChartView.HEART_RATE_SERIES] = (CheckBox) view.findViewById(
R.id.chart_settings_heart_rate);
// set checkboxes values
for (int i = 0; i < ChartView.NUM_SERIES; i++) {
checkBoxes[i].setChecked(chartView.isChartValueSeriesEnabled(i));
} }
}); checkBoxes[ChartView.SPEED_SERIES]
return settingsDialog; .setText(reportSpeed ? R.string.stat_speed : R.string.stat_pace);
}
return new AlertDialog.Builder(this)
return super.onCreateDialog(id); .setCancelable(true)
} .setNegativeButton(R.string.generic_cancel, null)
.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
@Override @Override
protected void onPrepareDialog(int id, Dialog dialog) { public void onClick(DialogInterface dialog, int which) {
super.onPrepareDialog(id, dialog); setMode(radioGroup.getCheckedRadioButtonId() == R.id.chart_settings_by_distance
? Mode.BY_DISTANCE
if (id == CHART_SETTINGS_DIALOG) { : Mode.BY_TIME);
prepareSettingsDialog((ChartSettingsDialog) dialog); for (int i = 0; i < ChartView.NUM_SERIES; i++) {
chartView.setChartValueSeriesEnabled(i, checkBoxes[i].isChecked());
}
chartView.postInvalidate();
}
})
.setTitle(R.string.menu_chart_view_chart_settings)
.setView(view)
.create();
default:
return null;
} }
} }
private void prepareSettingsDialog(ChartSettingsDialog settingsDialog) { /**
settingsDialog.setMode(chartView.getMode()); * Shows the chart settings dialog
settingsDialog.setDisplaySpeed(reportSpeed); */
for (int i = 0; i < ChartView.NUM_SERIES; i++) { public void showChartSettingsDialog() {
settingsDialog.setSeriesEnabled(i, chartView.isChartValueSeriesEnabled(i)); showDialog(DIALOG_CHART_SETTINGS_ID);
}
} }
/** /**
@@ -1,127 +0,0 @@
/*
* Copyright 2009 Google Inc.
*
* 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 com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.ChartView.Mode;
import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.RadioGroup;
/**
* An activity that allows the user to set the chart settings.
*
* @author Sandor Dornbush
*/
public class ChartSettingsDialog extends Dialog {
private RadioButton distance;
private CheckBox[] series;
private OnClickListener clickListener;
public ChartSettingsDialog(Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.chart_settings);
Button cancel = (Button) findViewById(R.id.chart_settings_cancel);
cancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (clickListener != null) {
clickListener.onClick(ChartSettingsDialog.this, BUTTON_NEGATIVE);
}
dismiss();
}
});
Button okButton = (Button) findViewById(R.id.chart_settings_ok);
okButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (clickListener != null) {
clickListener.onClick(ChartSettingsDialog.this, BUTTON_POSITIVE);
}
dismiss();
}
});
distance = (RadioButton) findViewById(R.id.chart_settings_by_distance);
series = new CheckBox[ChartView.NUM_SERIES];
series[ChartView.ELEVATION_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_elevation);
series[ChartView.SPEED_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_speed);
series[ChartView.POWER_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_power);
series[ChartView.CADENCE_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_cadence);
series[ChartView.HEART_RATE_SERIES] =
(CheckBox) findViewById(R.id.chart_settings_heart_rate);
}
public void setMode(Mode mode) {
RadioGroup rd = (RadioGroup) findViewById(R.id.chart_settings_x);
rd.check(mode == Mode.BY_DISTANCE
? R.id.chart_settings_by_distance
: R.id.chart_settings_by_time);
}
/**
* Sets whether to display speed or pace.
*
* @param displaySpeed true to display speed
*/
public void setDisplaySpeed(boolean displaySpeed) {
series[ChartView.SPEED_SERIES].setText(displaySpeed ? R.string.stat_speed : R.string.stat_pace);
}
public void setSeriesEnabled(int seriesIdx, boolean enabled) {
series[seriesIdx].setChecked(enabled);
}
public Mode getMode() {
if (distance == null) return Mode.BY_DISTANCE;
return distance.isChecked() ? Mode.BY_DISTANCE : Mode.BY_TIME;
}
public boolean isSeriesEnabled(int seriesIdx) {
if (series == null) return true;
return series[seriesIdx].isChecked();
}
public void setOnClickListener(OnClickListener clickListener) {
this.clickListener = clickListener;
}
@VisibleForTesting
CheckBox[] getSeries() {
return series;
}
}
@@ -540,7 +540,7 @@ public class MyTracks extends TabActivity implements OnTouchListener {
public void showChartSettings() { public void showChartSettings() {
ChartActivity chart = getChartTab(); ChartActivity chart = getChartTab();
if (chart != null) { if (chart != null) {
chart.showDialog(ChartActivity.CHART_SETTINGS_DIALOG); chart.showChartSettingsDialog();
} }
} }
@@ -1,82 +0,0 @@
/*
* Copyright 2012 Google Inc.
*
* 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 com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.ChartView.Mode;
import com.google.android.maps.mytracks.R;
import android.test.ActivityInstrumentationTestCase2;
/**
* Tests the {@link ChartSettingsDialog}.
*
* @author Youtao Liu
*/
public class ChartSettingsDialogTest extends ActivityInstrumentationTestCase2<ChartActivity> {
private ChartSettingsDialog chartSettingsDialog;
public ChartSettingsDialogTest() {
super(ChartActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
chartSettingsDialog = new ChartSettingsDialog(getActivity());
chartSettingsDialog.show();
}
/**
* Tests the {@link ChartSettingsDialog#setMode} and check the result by
* {@link ChartSettingsDialog#getMode}. Gets all modes of Mode, then set and
* get each mode.
*/
public void testSetMode() {
Mode[] modes = Mode.values();
for (Mode mode : modes) {
chartSettingsDialog.setMode(mode);
assertEquals(mode, chartSettingsDialog.getMode());
}
}
/**
* Tests the {@link ChartSettingsDialog#setDisplaySpeed}.
*/
public void testSetDisplaySpeed() {
chartSettingsDialog.setDisplaySpeed(true);
assertEquals(getActivity().getString(R.string.stat_speed),
chartSettingsDialog.getSeries()[ChartView.SPEED_SERIES].getText());
chartSettingsDialog.setDisplaySpeed(false);
assertEquals(getActivity().getString(R.string.stat_pace),
chartSettingsDialog.getSeries()[ChartView.SPEED_SERIES].getText());
}
/**
* Tests the {@link ChartSettingsDialog#setSeriesEnabled} and check the result
* by {@link ChartSettingsDialog#isSeriesEnabled}.
*/
public void testSetSeriesEnabled() {
for (int i = 0; i < ChartView.NUM_SERIES; i++) {
chartSettingsDialog.setSeriesEnabled(i, true);
assertEquals(true, chartSettingsDialog.getSeries()[i].isChecked());
assertEquals(true, chartSettingsDialog.isSeriesEnabled(i));
chartSettingsDialog.setSeriesEnabled(i, false);
assertEquals(false, chartSettingsDialog.getSeries()[i].isChecked());
assertEquals(false, chartSettingsDialog.isSeriesEnabled(i));
}
}
}