diff --git a/MyTracks/res/layout/choose_activity_type.xml b/MyTracks/res/layout/choose_activity_type.xml
index 38fa4e80a..68f1586a6 100644
--- a/MyTracks/res/layout/choose_activity_type.xml
+++ b/MyTracks/res/layout/choose_activity_type.xml
@@ -14,10 +14,40 @@ 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.
-->
-
+ android:orientation="vertical" >
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
index 517d8bd4e..2a0590f40 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
@@ -620,8 +620,8 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
setTitle(title);
}
- public void chooseActivityType() {
- new ChooseActivityTypeDialogFragment().show(getSupportFragmentManager(),
+ public void chooseActivityType(String category) {
+ ChooseActivityTypeDialogFragment.newInstance(category).show(getSupportFragmentManager(),
ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG);
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java
index 58c3f6feb..bbac28683 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java
@@ -125,7 +125,8 @@ public class TrackEditActivity extends AbstractMyTracksActivity
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
- new ChooseActivityTypeDialogFragment().show(getSupportFragmentManager(),
+ ChooseActivityTypeDialogFragment.newInstance(activityType.getText().toString()).show(
+ getSupportFragmentManager(),
ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG);
}
return true;
@@ -135,7 +136,8 @@ public class TrackEditActivity extends AbstractMyTracksActivity
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
- new ChooseActivityTypeDialogFragment().show(getSupportFragmentManager(),
+ ChooseActivityTypeDialogFragment.newInstance(activityType.getText().toString()).show(
+ getSupportFragmentManager(),
ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG);
}
return true;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeDialogFragment.java
index 38689b358..9a41024bb 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeDialogFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeDialogFragment.java
@@ -16,12 +16,15 @@
package com.google.android.apps.mytracks.fragments;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
+import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.apps.mytracks.util.TrackIconUtils;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.content.DialogInterface;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.os.Bundle;
@@ -30,20 +33,21 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
+import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* A DialogFragment to choose an activity type.
- *
+ *
* @author apoorvn
*/
public class ChooseActivityTypeDialogFragment extends DialogFragment {
/**
* Interface for caller of this dialog fragment.
- *
+ *
* @author apoorvn
*/
public interface ChooseActivityTypeCaller {
@@ -56,7 +60,22 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment {
public static final String CHOOSE_ACTIVITY_TYPE_DIALOG_TAG = "chooseActivityType";
+ private static final String KEY_CATEGORY = "category";
+
private ChooseActivityTypeCaller caller;
+ private ChooseActivityTypeImageAdapter imageAdapter;
+ private AlertDialog alertDialog;
+ private View weightContainer;
+ private TextView weight;
+
+ public static ChooseActivityTypeDialogFragment newInstance(String category) {
+ Bundle bundle = new Bundle();
+ bundle.putString(KEY_CATEGORY, category);
+
+ ChooseActivityTypeDialogFragment fragment = new ChooseActivityTypeDialogFragment();
+ fragment.setArguments(bundle);
+ return fragment;
+ }
@Override
public void onAttach(Activity activity) {
@@ -71,12 +90,13 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- GridView gridView =
- (GridView) getActivity().getLayoutInflater().inflate(R.layout.choose_activity_type, null);
+ View view = getActivity().getLayoutInflater().inflate(R.layout.choose_activity_type, null);
+ GridView gridView = (GridView) view.findViewById(R.id.choose_activity_type_grid_view);
+ weightContainer = view.findViewById(R.id.choose_activity_type_weight_container);
+ weight = (TextView) view.findViewById(R.id.choose_activity_type_weight);
- final List iconValues = TrackIconUtils.getAllIconValues();
List imageIds = new ArrayList();
- for (String iconValue : iconValues) {
+ for (String iconValue : TrackIconUtils.getAllIconValues()) {
imageIds.add(TrackIconUtils.getIconDrawable(iconValue));
}
@@ -88,18 +108,70 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment {
int height = options.outHeight + 2 * padding;
gridView.setColumnWidth(width);
- ChooseActivityTypeImageAdapter imageAdapter =
- new ChooseActivityTypeImageAdapter(getActivity(), imageIds, width, height, padding);
+ imageAdapter = new ChooseActivityTypeImageAdapter(
+ getActivity(), imageIds, width, height, padding);
gridView.setAdapter(imageAdapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
- @Override
+ @Override
public void onItemClick(AdapterView> parent, View v, int position, long id) {
- dismiss();
- caller.onChooseActivityTypeDone(iconValues.get(position));
+ alertDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(true);
+ imageAdapter.setSelected(position);
+ imageAdapter.notifyDataSetChanged();
+ updateWeightContainer(position);
}
});
- return new AlertDialog.Builder(getActivity()).setNegativeButton(R.string.generic_cancel, null)
- .setTitle(R.string.track_edit_activity_type_hint).setView(gridView).create();
+ alertDialog = new AlertDialog.Builder(getActivity()).setNegativeButton(
+ R.string.generic_cancel, null)
+ .setPositiveButton(R.string.generic_ok, new Dialog.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (weightContainer.getVisibility() == View.VISIBLE) {
+ PreferencesUtils.storeWeightValue(getActivity(), weight.getText().toString());
+ }
+ int selected = imageAdapter.getSelected();
+ caller.onChooseActivityTypeDone(TrackIconUtils.getAllIconValues().get(selected));
+ }
+ }).setTitle(R.string.track_edit_activity_type_hint).setView(view).create();
+ alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
+
+ @Override
+ public void onShow(DialogInterface dialog) {
+ int position = getPosition();
+ alertDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(position != -1);
+ if (position != -1) {
+ imageAdapter.setSelected(position);
+ imageAdapter.notifyDataSetChanged();
+ }
+ updateWeightContainer(position);
+ double weightValue = PreferencesUtils.getWeightDisplayValue(getActivity());
+ weight.setText(StringUtils.formatWeight(weightValue));
+ }
+ });
+ return alertDialog;
+ }
+
+ private int getPosition() {
+ String category = getArguments().getString(KEY_CATEGORY);
+ if (category == null) {
+ return -1;
+ }
+ String iconValue = TrackIconUtils.getIconValue(getActivity(), category);
+ if (iconValue.equals("")) {
+ return -1;
+ }
+ List iconValues = TrackIconUtils.getAllIconValues();
+ for (int i = 0; i < iconValues.size(); i++) {
+ if (iconValues.get(i).equals(iconValue)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ private void updateWeightContainer(int position) {
+ boolean showWeight = position == 0 || position == 1 || position == 2;
+ weightContainer.setVisibility(showWeight ? View.VISIBLE : View.GONE);
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeImageAdapter.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeImageAdapter.java
index 114b9016f..33a1942c0 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeImageAdapter.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityTypeImageAdapter.java
@@ -16,7 +16,10 @@
package com.google.android.apps.mytracks.fragments;
+import com.google.android.maps.mytracks.R;
+
import android.content.Context;
+import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
@@ -36,6 +39,7 @@ public class ChooseActivityTypeImageAdapter extends BaseAdapter {
private final int width;
private final int height;
private final int padding;
+ private int selected = -1;
public ChooseActivityTypeImageAdapter(
Context context, List imageIds, int width, int height, int padding) {
@@ -61,6 +65,14 @@ public class ChooseActivityTypeImageAdapter extends BaseAdapter {
return 0;
}
+ public int getSelected() {
+ return selected;
+ }
+
+ public void setSelected(int position) {
+ selected = position;
+ }
+
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
@@ -69,6 +81,11 @@ public class ChooseActivityTypeImageAdapter extends BaseAdapter {
} else {
imageView = (ImageView) convertView;
}
+ if (position == selected) {
+ imageView.setBackgroundResource(R.drawable.list_selector_background_transition_holo_dark);
+ } else {
+ imageView.setBackgroundColor(Color.TRANSPARENT);
+ }
imageView.setImageResource(imageIds.get(position));
imageView.setMinimumHeight(height);
imageView.setMinimumWidth(width);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java
index 935b5cc9a..871c2912d 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java
@@ -95,7 +95,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
- ((TrackDetailActivity) getActivity()).chooseActivityType();
+ ((TrackDetailActivity) getActivity()).chooseActivityType(category);
}
return true;
}
@@ -104,7 +104,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
- ((TrackDetailActivity) getActivity()).chooseActivityType();
+ ((TrackDetailActivity) getActivity()).chooseActivityType(category);
}
return true;
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java
index ad3995b6f..8c2673109 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/StatsSettingsActivity.java
@@ -18,7 +18,6 @@ package com.google.android.apps.mytracks.settings;
import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.StringUtils;
-import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.mytracks.R;
import android.app.Dialog;
@@ -28,7 +27,6 @@ import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
-import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;
@@ -40,8 +38,6 @@ import android.widget.TextView;
*/
public class StatsSettingsActivity extends AbstractSettingsActivity {
- private static final String TAG = MapSettingsActivity.class.getSimpleName();
-
private EditTextPreference weightPreference;
@SuppressWarnings("deprecation")
@@ -69,7 +65,7 @@ public class StatsSettingsActivity extends AbstractSettingsActivity {
weightPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- storeWeightValue((String) newValue);
+ PreferencesUtils.storeWeightValue(StatsSettingsActivity.this, (String) newValue);
updateWeightSummary(PreferencesUtils.isMetricUnits(StatsSettingsActivity.this));
return true;
}
@@ -78,8 +74,7 @@ public class StatsSettingsActivity extends AbstractSettingsActivity {
weightPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference pref) {
- double value = getWeightDisplayValue(
- PreferencesUtils.isMetricUnits(getApplicationContext()));
+ double value = PreferencesUtils.getWeightDisplayValue(StatsSettingsActivity.this);
((EditTextPreference) pref).getEditText().setText(StringUtils.formatWeight(value));
return true;
}
@@ -112,7 +107,6 @@ public class StatsSettingsActivity extends AbstractSettingsActivity {
boolean metricUnits = PreferencesUtils.STATS_UNITS_DEFAULT.equals((String) newValue);
configRateListPreference(metricUnits);
updateWeightSummary(metricUnits);
-
return true;
}
};
@@ -145,41 +139,7 @@ public class StatsSettingsActivity extends AbstractSettingsActivity {
*/
private void updateWeightSummary(boolean metricUnits) {
weightPreference.setSummary(getString(
- metricUnits ? R.string.value_kilogram : R.string.value_pound,
- StringUtils.formatWeight(getWeightDisplayValue(metricUnits))));
- }
-
- /**
- * Gets the weight display value in metric or imperial depending on the
- * preferred units.
- *
- * @param metricUnits true if metric units
- */
- private double getWeightDisplayValue(boolean metricUnits) {
- double value = PreferencesUtils.getFloat(
- this, R.string.stats_weight_key, PreferencesUtils.STATS_WEIGHT_DEFAULT);
- if (!metricUnits) {
- value = value * UnitConversions.KG_TO_LB;
- }
- return value;
- }
-
- /**
- * Stores the weight value, always in metric units.
- *
- * @param displayValue the display value
- */
- private void storeWeightValue(String displayValue) {
- double value;
- try {
- value = Double.parseDouble(displayValue);
- if (!PreferencesUtils.isMetricUnits(this)) {
- value = value * UnitConversions.LB_TO_KG;
- }
- } catch (NumberFormatException e) {
- Log.e(TAG, "invalid value " + displayValue);
- value = PreferencesUtils.STATS_WEIGHT_DEFAULT;
- }
- PreferencesUtils.setFloat(this, R.string.stats_weight_key, (float) value);
+ metricUnits ? R.string.value_kilogram : R.string.value_pound, StringUtils.formatWeight(
+ PreferencesUtils.getWeightDisplayValue(StatsSettingsActivity.this, metricUnits))));
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
index 98cf402f2..d54ec3251 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
@@ -27,6 +27,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.text.TextUtils;
+import android.util.Log;
/**
* Utilities to access preferences stored in {@link SharedPreferences}.
@@ -123,6 +124,8 @@ public class PreferencesUtils {
public static final int TRACK_WIDGET_ITEM4_DEFAULT = 2; // average speed
public static final int VOICE_FREQUENCY_DEFAULT = 0;
+ private static final String TAG = PreferencesUtils.class.getSimpleName();
+
private PreferencesUtils() {}
/**
@@ -332,4 +335,47 @@ public class PreferencesUtils {
}
setString(context, keyId, list + ";" + value);
}
+
+ /**
+ * Stores the weight value, always in metric units.
+ *
+ * @param displayValue the display value
+ */
+ public static void storeWeightValue(Context context, String displayValue) {
+ double value;
+ try {
+ value = Double.parseDouble(displayValue);
+ if (!PreferencesUtils.isMetricUnits(context)) {
+ value = value * UnitConversions.LB_TO_KG;
+ }
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "invalid value " + displayValue);
+ value = PreferencesUtils.STATS_WEIGHT_DEFAULT;
+ }
+ PreferencesUtils.setFloat(context, R.string.stats_weight_key, (float) value);
+ }
+
+ /**
+ * Gets the weight display value.
+ *
+ * @param context the context
+ */
+ public static double getWeightDisplayValue(Context context) {
+ return getWeightDisplayValue(context, PreferencesUtils.isMetricUnits(context));
+ }
+
+ /**
+ * Gets the weight display value.
+ *
+ * @param context the context
+ * @param metricUnits true to get display value in metric units
+ */
+ public static double getWeightDisplayValue(Context context, boolean metricUnits) {
+ double value = PreferencesUtils.getFloat(
+ context, R.string.stats_weight_key, PreferencesUtils.STATS_WEIGHT_DEFAULT);
+ if (!metricUnits) {
+ value = value * UnitConversions.KG_TO_LB;
+ }
+ return value;
+ }
}