made classic course designer (up-down, trapezoid) a dialogfragment. strange bug with maps, see https://code.google.com/p/gmaps-api-issues/issues/detail?id=4865

This commit is contained in:
Fabian Tschirschnitz committed 2013-06-01 20:36:27 +02:00
1 parent fad54108e5
commit 06037f325f
13 files changed
+813 -673

No files matched your search

@@ -52,10 +52,6 @@
android:name=".ui.activities.RacingActivity">
</activity>
<activity
android:name=".ui.activities.CourseDesigner">
</activity>
<activity android:name=".ui.activities.SettingsActivity"></activity>
<service
android:name="com.sap.sailing.racecommittee.app.services.RaceStateService"
@@ -67,20 +67,14 @@
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="18dp"
android:layout_marginRight="26dp"
android:orientation="vertical" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</fragment>
</LinearLayout>
android:orientation="vertical"
/>
</LinearLayout>
</LinearLayout>
@@ -1,117 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dslv="http://schemas.android.com/apk**/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical|center_horizontal">
<TextView
android:text="@string/previous_course"
android:id="@+id/textPreviousCourse"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14pt"
android:textStyle="bold"
android:gravity="center_vertical|center_horizontal"/>
<TextView
android:text="@string/make_new_course"
android:id="@+id/textMakeNewCourse"
android:layout_width="350dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14pt"
android:textStyle="bold"
android:gravity="center_vertical|center_horizontal"/>
<TextView
android:text="@string/course_design_assets"
android:id="@+id/textCourseAssets"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14pt"
android:textStyle="bold"
android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="500dp"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal" >
<ListView
android:id="@+id/listViewPreviousCourse"
android:layout_width="300dp"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:gravity="center_horizontal|center_vertical" />
<com.mobeta.android.dslv.DragSortListView
android:id="@+id/listViewNewCourse"
android:layout_width="350dp"
android:layout_height="fill_parent"
android:layout_gravity="left"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:gravity="center_horizontal|center_vertical"
android:verticalSpacing="5dp"
dslv:collapsed_height="2dp"
dslv:drag_enabled="true"
dslv:drag_scroll_start="0.33"
dslv:float_alpha="0.6"
dslv:max_drag_scroll_speed="0.5"
dslv:slide_shuffle_speed="0.3"
dslv:track_drag_sort="false"
dslv:use_default_controller="false" />
<GridView
android:id="@+id/gridViewAssets"
android:layout_width="400dp"
android:layout_height="fill_parent"
android:columnWidth="100dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="20dp"
android:paddingBottom="10dp"
android:paddingLeft="20dp">
<Button
android:id="@+id/publishCourseDesignButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/publish"
android:textAppearance="@style/TextAppearance.Welter.BigTitleLabel"
android:layout_marginRight="20dp" />
<Button
android:id="@+id/unpublishCourseDesignButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/unpublish"
android:textAppearance="@style/TextAppearance.Welter.BigTitleLabel"
android:layout_marginRight="20dp" />
<Button
android:id="@+id/takePreviousCourseDesignButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/take_previous"
android:textAppearance="@style/TextAppearance.Welter.BigTitleLabel" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dslv="http://schemas.android.com/apk**/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical|center_horizontal">
<TextView
android:text="@string/previous_course"
android:id="@+id/textPreviousCourse"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14pt"
android:textStyle="bold"
android:gravity="center_vertical|center_horizontal"/>
<TextView
android:text="@string/make_new_course"
android:id="@+id/textMakeNewCourse"
android:layout_width="350dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14pt"
android:textStyle="bold"
android:gravity="center_vertical|center_horizontal"/>
<TextView
android:text="@string/course_design_assets"
android:id="@+id/textCourseAssets"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="14pt"
android:textStyle="bold"
android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="500dp"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal" >
<ListView
android:id="@+id/listViewPreviousCourse"
android:layout_width="300dp"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:gravity="center_horizontal|center_vertical" />
<com.mobeta.android.dslv.DragSortListView
android:id="@+id/listViewNewCourse"
android:layout_width="350dp"
android:layout_height="fill_parent"
android:layout_gravity="left"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:gravity="center_horizontal|center_vertical"
android:verticalSpacing="5dp"
dslv:collapsed_height="2dp"
dslv:drag_enabled="true"
dslv:drag_scroll_start="0.33"
dslv:float_alpha="0.6"
dslv:max_drag_scroll_speed="0.5"
dslv:slide_shuffle_speed="0.3"
dslv:track_drag_sort="false"
dslv:use_default_controller="false" />
<GridView
android:id="@+id/gridViewAssets"
android:layout_width="400dp"
android:layout_height="fill_parent"
android:columnWidth="100dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="20dp"
android:paddingBottom="10dp"
android:paddingLeft="20dp">
<Button
android:id="@+id/publishCourseDesignButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/publish"
android:textAppearance="@style/TextAppearance.Welter.BigTitleLabel"
android:layout_marginRight="20dp" />
<Button
android:id="@+id/unpublishCourseDesignButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/unpublish"
android:textAppearance="@style/TextAppearance.Welter.BigTitleLabel"
android:layout_marginRight="20dp" />
<Button
android:id="@+id/takePreviousCourseDesignButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/take_previous"
android:textAppearance="@style/TextAppearance.Welter.BigTitleLabel" />
</LinearLayout>
</LinearLayout>
@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.DimDisabledDialog" parent="Theme.Welter">
<item name="android:backgroundDimEnabled">false</item>
</style>
<style name="Theme.Welter" parent="android:Theme.Holo.Light">
<item name="android:actionBarStyle">@style/Widget.ActionBar</item>
<item name="android:textColorPrimary">@color/welter_deep_gray</item>
<!--
<item name="timePickerStyle">@style/Widget.TimePicker</item>
-->
@@ -59,4 +59,6 @@ public interface StartProcedure {
List<Class<? extends RaceDialogFragment>> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener);
Class<? extends RaceDialogFragment> getCourseDesignDialog();
}
@@ -26,6 +26,7 @@ import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedure;
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedureListener;
import com.sap.sailing.racecommittee.app.domain.startprocedure.UserRequiredActionPerformedListener;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.ESSCourseDesignDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.EssRunningRaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.FinishedRaceFragment;
@@ -400,4 +401,9 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
public List<Class<? extends RaceDialogFragment>> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener) {
return new ArrayList<Class<? extends RaceDialogFragment>>();
}
@Override
public Class<? extends RaceDialogFragment> getCourseDesignDialog() {
return ESSCourseDesignDialogFragment.class;
}
}
@@ -22,6 +22,7 @@ import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedure;
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedureListener;
import com.sap.sailing.racecommittee.app.domain.startprocedure.UserRequiredActionPerformedListener;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.ClassicCourseDesignDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.FinishedRaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.FinishingRaceFragment;
@@ -329,4 +330,9 @@ public class GateStartProcedure implements StartProcedure {
public List<Class<? extends RaceDialogFragment>> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener) {
return new ArrayList<Class<? extends RaceDialogFragment>>();
}
@Override
public Class<? extends RaceDialogFragment> getCourseDesignDialog() {
return ClassicCourseDesignDialogFragment.class;
}
}
@@ -26,6 +26,7 @@ import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedure;
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedureListener;
import com.sap.sailing.racecommittee.app.domain.startprocedure.UserRequiredActionPerformedListener;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.ClassicCourseDesignDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceChooseStartModeDialog;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RRS26FinishedRaceFragment;
@@ -419,4 +420,9 @@ public class RRS26StartProcedure implements StartProcedure, StartModeChoosableSt
}
return actionList;
}
@Override
public Class<? extends RaceDialogFragment> getCourseDesignDialog() {
return ClassicCourseDesignDialogFragment.class;
}
}
@@ -1,23 +0,0 @@
package com.sap.sailing.racecommittee.app.ui.activities;
import android.os.Bundle;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.sap.sailing.racecommittee.app.R;
public class CourseDesigner extends BaseActivity {
@SuppressWarnings("unused")
private GoogleMap courseAreaMap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.course_designer);
courseAreaMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
}
}
@@ -1,10 +1,11 @@
package com.sap.sailing.racecommittee.app.ui.fragments;
import android.app.AlertDialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -21,8 +22,8 @@ import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.state.RaceState;
import com.sap.sailing.racecommittee.app.domain.state.RaceStateChangedListener;
import com.sap.sailing.racecommittee.app.logging.ExLog;
import com.sap.sailing.racecommittee.app.ui.activities.CourseDesigner;
import com.sap.sailing.racecommittee.app.ui.fragments.chooser.RaceInfoFragmentChooser;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceInfoListener;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.SetStartTimeRaceFragment;
@@ -134,16 +135,25 @@ public class RaceInfoFragment extends RaceFragment implements RaceStateChangedLi
}
private void showCourseDesignDialog() {
Intent message = new Intent(this.getActivity(), CourseDesigner.class);
startActivity(message);
/*FragmentManager fragmentManager = getFragmentManager();
FragmentManager fragmentManager = getFragmentManager();
RaceDialogFragment fragment = new CourseDesignDialogFragment();
Bundle args = getRecentArguments();
fragment.setArguments(args);
fragment.show(fragmentManager, "courseDesignDialogFragment");*/
RaceDialogFragment fragment;
try {
fragment = getRace().getState().getStartProcedure().getCourseDesignDialog().newInstance();
Bundle args = getRecentArguments();
fragment.setArguments(args);
//handle map bug - https://code.google.com/p/gmaps-api-issues/issues/detail?id=4865
fragment.setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_DimDisabledDialog);
fragment.show(fragmentManager, "courseDesignDialogFragment");
} catch (java.lang.InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
@@ -0,0 +1,139 @@
package com.sap.sailing.racecommittee.app.ui.fragments.dialogs;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.sap.sailing.racecommittee.app.R;
public class ClassicCourseDesignDialogFragment extends RaceDialogFragment {
private MapView mMapView;
private GoogleMap mMap;
private Bundle mBundle;
@SuppressWarnings("unused")
private final static String TAG = ClassicCourseDesignDialogFragment.class.getName();
protected CourseDesignListener hostActivity;
private Button publishButton;
private Button unpublishButton;
@SuppressWarnings("unused")
private GoogleMap courseAreaMap;
@Override
public void onAttach(android.app.Activity activity) {
super.onAttach(activity);
if (activity instanceof CourseDesignListener) {
this.hostActivity = (CourseDesignListener) activity;
} else {
throw new IllegalStateException(
String.format(
"Instance of %s must be attached to instances of %s. Tried to attach to %s.",
ActivityDialogFragment.class.getName(),
CourseDesignListener.class.getName(),
activity.getClass().getName()));
}
};
protected CourseDesignListener getHost() {
return this.hostActivity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Inflate the layout for this fragment
View view = inflater.inflate(R.layout.race_choose_classic_course_design_view, container);
try {
MapsInitializer.initialize(getActivity());
} catch (GooglePlayServicesNotAvailableException e) {
// TODO handle this situation
}
mMapView = (MapView) view.findViewById(R.id.mapView);
mMapView.onCreate(mBundle);
setUpMapIfNeeded(view);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getDialog().setTitle(getActivity().getText(R.string.course_design_dialog_title));
publishButton = (Button) getView().findViewById(R.id.publishCourseDesignButton);
publishButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
}
});
unpublishButton = (Button) getView().findViewById(R.id.unpublishCourseDesignButton);
unpublishButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
}
});
}
@Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
public void notifyTick() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBundle = savedInstanceState;
}
private void setUpMapIfNeeded(View inflatedView) {
if (mMap == null) {
mMap = ((MapView) inflatedView.findViewById(R.id.mapView)).getMap();
if (mMap != null) {
setUpMap();
}
}
}
private void setUpMap() {
mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
@Override
public void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
public void onDestroy() {
mMapView.onDestroy();
super.onDestroy();
}
}