From 33118568bcdca1037df18909848f9b8337bfec3a Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Mon, 23 Apr 2012 17:49:23 -0700 Subject: [PATCH] A few fixes. - use fill_parent since we are still supporting api level 7. - on the TrackListActivity, hide the empty view content until the check unit dialog has been showned. - fix the ChartView height. ChartView is no longer displayed on the full canvas. The new design has a tab bar and a zoom control. - In TrackDetailActivity, only call methods of a tab fragment if it is the current tab. --- MyTracks/res/layout/track_detail.xml | 12 ++++----- MyTracks/res/layout/track_list.xml | 3 +++ .../android/apps/mytracks/ChartView.java | 25 +++++++++++++------ .../apps/mytracks/TrackDetailActivity.java | 22 ++++++++++------ .../apps/mytracks/TrackListActivity.java | 14 +++++++++++ .../mytracks/fragments/ChartFragment.java | 5 ++-- .../fragments/CheckUnitsDialogFragment.java | 19 ++++++++++---- 7 files changed, 71 insertions(+), 29 deletions(-) diff --git a/MyTracks/res/layout/track_detail.xml b/MyTracks/res/layout/track_detail.xml index 1226d9ec0..e5ec73c2e 100644 --- a/MyTracks/res/layout/track_detail.xml +++ b/MyTracks/res/layout/track_detail.xml @@ -16,17 +16,17 @@ limitations under the License. --> + android:layout_height="fill_parent" + android:layout_width="fill_parent" > + android:layout_width="fill_parent" /> \ No newline at end of file diff --git a/MyTracks/res/layout/track_list.xml b/MyTracks/res/layout/track_list.xml index 0a22b38ff..508ea85a7 100644 --- a/MyTracks/res/layout/track_list.xml +++ b/MyTracks/res/layout/track_list.xml @@ -28,7 +28,9 @@ limitations under the License. android:layout_width="fill_parent" android:orientation="vertical" > \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/ChartView.java b/MyTracks/src/com/google/android/apps/mytracks/ChartView.java index e55e3a5f6..da5389411 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/ChartView.java +++ b/MyTracks/src/com/google/android/apps/mytracks/ChartView.java @@ -76,7 +76,7 @@ public class ChartView extends View { /** * Unscaled top border of the chart. */ - private static final int TOP_BORDER = 15; + private static final int TOP_BORDER = 16; /** * Device scaled top border of the chart. @@ -86,7 +86,7 @@ public class ChartView extends View { /** * Unscaled bottom border of the chart. */ - private static final float BOTTOM_BORDER = 40; + private static final float BOTTOM_BORDER = 8; /** * Device scaled bottom border of the chart. @@ -509,10 +509,16 @@ public class ChartView extends View { return true; } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + updateEffectiveDimensionsIfChanged( + View.MeasureSpec.getSize(widthMeasureSpec), View.MeasureSpec.getSize(heightMeasureSpec)); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + @Override protected void onDraw(Canvas c) { synchronized (data) { - updateEffectiveDimensionsIfChanged(c); // Keep original state. c.save(); @@ -742,13 +748,16 @@ public class ChartView extends View { /** * Updates the effective dimensions where the graph will be drawn, only if the - * dimensions of the given canvas have changed since the last call. + * dimensions have changed since the last call. + * + * @param newWidth the new width + * @param newHeight the new height */ - private void updateEffectiveDimensionsIfChanged(Canvas c) { - if (w != c.getWidth() || h != c.getHeight()) { + private void updateEffectiveDimensionsIfChanged(int newWidth, int newHeight) { + if (w != newWidth || h != newHeight) { // Dimensions have changed (for example due to orientation change). - w = c.getWidth(); - h = c.getHeight(); + w = newWidth; + h = newHeight; updateEffectiveDimensions(); setUpPath(); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index 4fdd09ea2..96d34bf96 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -237,14 +237,20 @@ public class TrackDetailActivity extends AbstractMyTracksActivity { ChartFragment.CHART_FRAGMENT_TAG.equals(currentTabTag)); menu.findItem(R.id.track_detail_my_location) .setVisible(MapFragment.MAP_FRAGMENT_TAG.equals(currentTabTag)); - - // Set map or satellite mode - MapFragment mapFragment = (MapFragment) getSupportFragmentManager() - .findFragmentByTag(MapFragment.MAP_FRAGMENT_TAG); - boolean isSatelliteMode = mapFragment != null ? mapFragment.isSatelliteView() : false; - menu.findItem(R.id.track_detail_satellite_mode) - .setVisible(MapFragment.MAP_FRAGMENT_TAG.equals(currentTabTag)) - .setTitle(isSatelliteMode ? R.string.menu_map_mode : R.string.menu_satellite_mode); + MenuItem satelliteMode = menu.findItem(R.id.track_detail_satellite_mode) + .setVisible(MapFragment.MAP_FRAGMENT_TAG.equals(currentTabTag)); + + if (satelliteMode.isVisible()) { + MapFragment mapFragment = (MapFragment) getSupportFragmentManager() + .findFragmentByTag(MapFragment.MAP_FRAGMENT_TAG); + /* + * The current tag is mapFragment, thus safe to call its methods like + * isSatelliteView. + */ + boolean isSatelliteMode = mapFragment != null ? mapFragment.isSatelliteView() : false; + menu.findItem(R.id.track_detail_satellite_mode).setTitle( + isSatelliteMode ? R.string.menu_map_mode : R.string.menu_satellite_mode); + } return super.onPrepareOptionsMenu(menu); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 8c4e46e36..144bafe65 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -24,6 +24,7 @@ import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileForm import com.google.android.apps.mytracks.services.ITrackRecordingService; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.util.ApiAdapterFactory; +import com.google.android.apps.mytracks.util.CheckUnitsUtils; import com.google.android.apps.mytracks.util.EulaUtils; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.ListItemUtil; @@ -262,8 +263,21 @@ public class TrackListActivity extends FragmentActivity { getSupportFragmentManager(), EulaDialogFragment.EULA_DIALOG_TAG); } } + if (CheckUnitsUtils.getCheckUnitsValue(this)) { + enableEmptyView(); + } } + /** + * Enables the content of the empty view. + */ + public void enableEmptyView() { + View emptyMessage = findViewById(R.id.track_list_empty_message); + emptyMessage.setVisibility(View.VISIBLE); + View recordButton = findViewById(R.id.track_list_record_button); + recordButton.setVisibility(View.VISIBLE); + } + @Override protected void onResume() { super.onResume(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java index eef8ae371..50de47cd5 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChartFragment.java @@ -133,8 +133,9 @@ public class ChartFragment extends Fragment implements TrackDataListener { public void onStart() { super.onStart(); ViewGroup layout = (ViewGroup) getActivity().findViewById(R.id.chart_view_layout); - LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT); + @SuppressWarnings("deprecation") + LayoutParams layoutParams = new LayoutParams( + LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); layout.addView(chartView, layoutParams); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/CheckUnitsDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/CheckUnitsDialogFragment.java index 2370392d2..e6cfff5b3 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/CheckUnitsDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/CheckUnitsDialogFragment.java @@ -17,6 +17,7 @@ package com.google.android.apps.mytracks.fragments; import com.google.android.apps.mytracks.Constants; +import com.google.android.apps.mytracks.TrackListActivity; import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.CheckUnitsUtils; import com.google.android.maps.mytracks.R; @@ -31,13 +32,13 @@ import android.support.v4.app.DialogFragment; /** * A DialogFragment to check preferred units. - * + * * @author Jimmy Shih */ public class CheckUnitsDialogFragment extends DialogFragment { public static final String CHECK_UNITS_DIALOG_TAG = "checkUnitsDialog"; - + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -46,19 +47,18 @@ public class CheckUnitsDialogFragment extends DialogFragment { .setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { - CheckUnitsUtils.setCheckUnitsValue(getActivity()); + handleButtonClicked(); } }) .setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - CheckUnitsUtils.setCheckUnitsValue(getActivity()); - int position = ((AlertDialog) dialog).getListView().getSelectedItemPosition(); SharedPreferences sharedPreferences = getActivity() .getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(sharedPreferences.edit() .putBoolean(getString(R.string.metric_units_key), position == 0)); + handleButtonClicked(); } }) .setSingleChoiceItems(new CharSequence[] { getString(R.string.preferred_units_metric), @@ -66,4 +66,13 @@ public class CheckUnitsDialogFragment extends DialogFragment { .setTitle(R.string.preferred_units_title) .create(); } + + /** + * Handles a button click. + */ + private void handleButtonClicked() { + CheckUnitsUtils.setCheckUnitsValue(getActivity()); + TrackListActivity trackListActivity = (TrackListActivity) getActivity(); + trackListActivity.enableEmptyView(); + } } \ No newline at end of file