diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 740794bd48..771c1f74d7 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -89,7 +89,6 @@
-
diff --git a/OCH/mogo-och-taxi/build.gradle b/OCH/mogo-och-taxi/build.gradle
index dad79886c1..8a55d2b6af 100644
--- a/OCH/mogo-och-taxi/build.gradle
+++ b/OCH/mogo-och-taxi/build.gradle
@@ -40,6 +40,7 @@ dependencies {
implementation rootProject.ext.dependencies.arouter
annotationProcessor rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.rxandroid
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.mogooch
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java
index 349f4baf89..1832059020 100644
--- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java
@@ -9,6 +9,8 @@ public
*/
interface IMogoOCHTaxiArriveCallback {
+ void onTheWay2StartStation();
+
/**
* 到达起始站
*/
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java
index 7f0d56e8ad..a9bb7c5d84 100644
--- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java
@@ -305,6 +305,7 @@ class MogoOCHTaxiModel {
*/
public void setOnTheWay2EndStation( boolean isOnTheWay2EndStation ) {
this.mIsOnTheWay2EndStation = isOnTheWay2EndStation;
+ OCHTaxiUiController.getInstance().onTheWay2EndStation();
}
/**
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java
index c74e7a86f3..231b02e613 100644
--- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java
@@ -1,18 +1,19 @@
package com.mogo.och.taxi.ui;
import android.os.Bundle;
-import android.widget.Button;
+import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
-import com.mogo.commons.mvp.MvpFragment;
import com.mogo.module.common.MogoApisHandler;
+import com.mogo.och.BaseOchFragment;
import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback;
import com.mogo.och.taxi.MogoOCHTaxiModel;
import com.mogo.och.taxi.OCHOrderStatus;
import com.mogo.och.taxi.OCHOrderStatusCallback;
import com.mogo.och.taxi.R;
+import com.mogo.och.view.SlidePanelView;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.utils.logger.Logger;
@@ -24,7 +25,7 @@ public
*
* 网约车-出租车UI
*/
-class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView,
+class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView,
IMogoStatusChangedListener, IMogoOCHTaxiArriveCallback {
public static final String TAG = "OCHTaxiFragment";
@@ -38,45 +39,23 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
return fragment;
}
- private TextView orderInfo;
- private Button autoPilot;
+ private TextView mOrderStatus;
+ private TextView mStartStationName;
+ private TextView mEndStationName;
+ private TextView mDistance;
@Override
- protected int getLayoutId() {
- return R.layout.module_och_taxi_fragment;
+ public int getStationPanelViewId() {
+ return R.layout.module_och_taxi_panel;
}
@Override
protected void initViews() {
-
- orderInfo = findViewById( R.id.orderInfo );
- autoPilot = findViewById( R.id.autoPilot );
- orderInfo.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().toString() );
- autoPilot.setOnClickListener( view -> {
- if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
- Logger.w( TAG, "已到达终点" );
- return;
- }
- MogoOCHTaxiModel.getInstance().startAutoPilot();
- MogoOCHTaxiModel.getInstance().setOnTheWay2EndStation( true );
- MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.OnTheWayToEndStation, new OCHOrderStatusCallback() {
- @Override
- public void onSuccess( Object data ) {
- Logger.d( TAG, "更新状态成功" );
- }
-
- @Override
- public void onFail() {
- Logger.d( TAG, "更新状态失败" );
- }
-
-
- @Override
- public void onError() {
- Logger.d( TAG, "更新状态失败2" );
- }
- } );
- } );
+ super.initViews();
+ mOrderStatus = findViewById( R.id.module_och_taxi_order_status );
+ mStartStationName = findViewById( R.id.module_och_taxi_order_start_station );
+ mEndStationName = findViewById( R.id.module_och_taxi_order_end_station );
+ mDistance = findViewById( R.id.module_och_taxi_order_distance );
if ( MogoApisHandler.getInstance()
.getApis()
@@ -122,28 +101,49 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
}
private void initOrderStatus() {
+ if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
+ mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation );
+ mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation );
+ mDistance.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance + " km" );
+ }
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
Logger.d( TAG, "已经达到终点" );
- return;
- }
- if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
+ slidePanelView.setVisibility( View.VISIBLE );
+ slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_end_station ) );
+ mOrderStatus.setText( "已到达乘客下车地点" );
+ } else if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
Logger.d( TAG, "已经去往终点" );
- return;
- }
- if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation() ) {
+ slidePanelView.setVisibility( View.GONE );
+ mOrderStatus.setText( "去往下车地点" );
+ } else if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation() ) {
Logger.d( TAG, "已经达到起点" );
- return;
+ slidePanelView.setVisibility( View.VISIBLE );
+ slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_start_station ) );
+ mOrderStatus.setText( "已到达上车地点,等待乘客上车" );
+ } else if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) {
+ Logger.d( TAG, "去往上车站点" );
+ slidePanelView.setVisibility( View.GONE );
+ mOrderStatus.setText( "收到新订单,正在前往上车地点" );
}
}
@Override
public void onArriveAtStartStation() {
Logger.d( TAG, "通知达到起点" );
+ initOrderStatus();
+ }
+
+ @Override
+ public void onTheWay2StartStation() {
+ Logger.d( TAG, "去往上车站点" );
+ initOrderStatus();
}
@Override
public void onArriveAtEndStation() {
Logger.d( TAG, "通知达到终点" );
+ onAutopilotStatusChanged( false );
+ initOrderStatus();
MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.ArriveAtEndStation, new OCHOrderStatusCallback() {
@Override
public void onSuccess( Object data ) {
@@ -166,6 +166,8 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
@Override
public void onTheWay2EndStation() {
Logger.d( TAG, "通知去往终点" );
+ onAutopilotStatusChanged( true );
+ initOrderStatus();
}
@Override
@@ -177,4 +179,56 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
.unregisterStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( null );
}
+
+ @Override
+ public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() {
+ return this::onSlidePanelMoveToEnd;
+ }
+
+ private void onSlidePanelMoveToEnd() {
+ // 已到达终点,需要结束订单
+ if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
+ MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.Completed, new OCHOrderStatusCallback() {
+ @Override
+ public void onSuccess( Object data ) {
+ Logger.d( TAG, "更新状态成功" );
+ MogoOCHTaxiModel.getInstance().clearCurrentOCHOrder();
+ OCHTaxiUiController.getInstance().removeFragment();
+ }
+
+ @Override
+ public void onFail() {
+ Logger.d( TAG, "更新状态失败" );
+ }
+
+ @Override
+ public void onError() {
+ Logger.d( TAG, "更新状态失败2" );
+ }
+ } );
+ return;
+ // 已到达起点,前往下一站并开启自动驾驶
+ } else if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation()
+ && !MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
+ MogoOCHTaxiModel.getInstance().startAutoPilot();
+ MogoOCHTaxiModel.getInstance().setOnTheWay2EndStation( true );
+ MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.OnTheWayToEndStation, new OCHOrderStatusCallback() {
+ @Override
+ public void onSuccess( Object data ) {
+ Logger.d( TAG, "更新状态成功" );
+ }
+
+ @Override
+ public void onFail() {
+ Logger.d( TAG, "更新状态失败" );
+ }
+
+
+ @Override
+ public void onError() {
+ Logger.d( TAG, "更新状态失败2" );
+ }
+ } );
+ }
+ }
}
diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java
index c29568768c..6b696fef07 100644
--- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java
+++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java
@@ -94,6 +94,11 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback {
this.mOCHTaxiArriveCallback = OCHTaxiArriveCallback;
}
+ @Override
+ public void onTheWay2StartStation() {
+
+ }
+
@Override
public void onArriveAtStartStation() {
runOnUIThread( () -> {
diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_blue_dot.png b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_blue_dot.png
new file mode 100644
index 0000000000..e1fd463963
Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_blue_dot.png differ
diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_dot_line.png b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_dot_line.png
new file mode 100644
index 0000000000..186001352c
Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_dot_line.png differ
diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_green_dot.png b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_green_dot.png
new file mode 100644
index 0000000000..a676a789c3
Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_green_dot.png differ
diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml
new file mode 100644
index 0000000000..d6aa33cbcd
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml
@@ -0,0 +1,21 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml
new file mode 100644
index 0000000000..998e8eeaaf
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml b/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml
deleted file mode 100644
index efa9185d26..0000000000
--- a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_panel.xml b/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_panel.xml
new file mode 100644
index 0000000000..20eacb3fbd
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_panel.xml
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi/src/main/res/values-xhdpi/dimens.xml b/OCH/mogo-och-taxi/src/main/res/values-xhdpi/dimens.xml
new file mode 100644
index 0000000000..0e6c603e65
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/res/values-xhdpi/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 464px
+ 310px
+
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi/src/main/res/values/colors.xml b/OCH/mogo-och-taxi/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..ff79c2f9a5
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/res/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #FFFFFF
+
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi/src/main/res/values/strings.xml b/OCH/mogo-och-taxi/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..2cbae68623
--- /dev/null
+++ b/OCH/mogo-och-taxi/src/main/res/values/strings.xml
@@ -0,0 +1,5 @@
+
+
+ 乘客已上车,准备出发
+ 到达站点,乘客已下车
+
\ No newline at end of file
diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java b/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java
index e22c567ad1..d7f3aa3540 100644
--- a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java
+++ b/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java
@@ -22,7 +22,7 @@ import com.mogo.service.statusmanager.StatusDescriptor;
* @author tongchenfei
*/
public abstract class BaseOchFragment> extends MvpFragment {
- private SlidePanelView slidePanelView;
+ protected SlidePanelView slidePanelView;
private TextView tvNotice;
private CheckedTextView ctvAutopilotStatus;
private FrameLayout flStationPanelContainer;
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/MapStyleController.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/MapStyleController.java
index 4a081d996f..43d2cc140b 100644
--- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/MapStyleController.java
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/MapStyleController.java
@@ -24,6 +24,7 @@ class MapStyleController {
private MapStyleController() {
mVrAreaFilters.add( new ShunYiArea() );
+ mVrAreaFilters.add( new OCHArea() );
}
public static MapStyleController getInstance() {
@@ -85,7 +86,21 @@ class MapStyleController {
}
public interface VrAreaFilter {
- boolean isVrArea( MogoLocation location );
+ default boolean isVrArea( MogoLocation location ) {
+ if ( location == null ) {
+ return false;
+ }
+ return location.getLat() > getLeftBottomLat() && location.getLon() > getLeftBottomLon()
+ && location.getLat() < getRightTopLat() && location.getLon() < getRightTopLon();
+ }
+
+ double getLeftBottomLat();
+
+ double getLeftBottomLon();
+
+ double getRightTopLat();
+
+ double getRightTopLon();
}
public static class ShunYiArea implements VrAreaFilter {
@@ -97,12 +112,46 @@ class MapStyleController {
private final double rightTopLon = 116.74804;
@Override
- public boolean isVrArea( MogoLocation location ) {
- if ( location == null ) {
- return false;
- }
- return location.getLat() > leftBottomLat && location.getLon() > leftBottomLon
- && location.getLat() < rightTopLat && location.getLon() < rightTopLon;
+ public double getLeftBottomLat() {
+ return leftBottomLat;
+ }
+
+ @Override
+ public double getLeftBottomLon() {
+ return leftBottomLon;
+ }
+
+ @Override
+ public double getRightTopLat() {
+ return rightTopLat;
+ }
+
+ @Override
+ public double getRightTopLon() {
+ return rightTopLon;
+ }
+ }
+
+ public static class OCHArea implements VrAreaFilter {
+
+ @Override
+ public double getLeftBottomLat() {
+ return 39.97645;
+ }
+
+ @Override
+ public double getLeftBottomLon() {
+ return 116.41673;
+ }
+
+ @Override
+ public double getRightTopLat() {
+ return 0;
+ }
+
+ @Override
+ public double getRightTopLon() {
+ return 0;
}
}
}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
index 8c23c046ac..323e91753e 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
@@ -2,7 +2,9 @@ package com.mogo.module.common.entity;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
+import com.mogo.commons.debug.DebugConfig;
import com.mogo.map.MogoLatLng;
import com.mogo.utils.CoordinateUtils;
@@ -21,8 +23,14 @@ public class CloudLocationInfo implements Parcelable {
private long satelliteTime;
private double alt;
private double speed;
+ private int vehicleType = 0;
public CloudLocationInfo() {
+ if ( DebugConfig.getProductFlavor().contains( "taxi" ) ) {
+ vehicleType = 9;
+ } else if ( DebugConfig.getProductFlavor().contains( "bus" ) ) {
+ vehicleType = 10;
+ }
}
public CloudLocationInfo( CloudLocationInfo info ) {
@@ -35,7 +43,7 @@ public class CloudLocationInfo implements Parcelable {
this.speed = info.speed;
}
- public void convertCoor2GCJ02(){
+ public void convertCoor2GCJ02() {
double[] amapCoord = CoordinateUtils.transformFromWGSToGCJ( lat, lon );
if ( amapCoord != null ) {
this.lat = amapCoord[0];
@@ -43,44 +51,6 @@ public class CloudLocationInfo implements Parcelable {
}
}
- protected CloudLocationInfo( Parcel in ) {
- lat = in.readDouble();
- lon = in.readDouble();
- heading = in.readDouble();
- systemTime = in.readLong();
- satelliteTime = in.readLong();
- alt = in.readDouble();
- speed = in.readDouble();
- }
-
- @Override
- public void writeToParcel( Parcel dest, int flags ) {
- dest.writeDouble( lat );
- dest.writeDouble( lon );
- dest.writeDouble( heading );
- dest.writeLong( systemTime );
- dest.writeLong( satelliteTime );
- dest.writeDouble( alt );
- dest.writeDouble( speed );
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- public static final Creator< CloudLocationInfo > CREATOR = new Creator< CloudLocationInfo >() {
- @Override
- public CloudLocationInfo createFromParcel( Parcel in ) {
- return new CloudLocationInfo( in );
- }
-
- @Override
- public CloudLocationInfo[] newArray( int size ) {
- return new CloudLocationInfo[size];
- }
- };
-
public double getLat() {
return lat;
}
@@ -172,4 +142,44 @@ public class CloudLocationInfo implements Parcelable {
public int hashCode() {
return Objects.hash( lat, lon );
}
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel( Parcel dest, int flags ) {
+ dest.writeDouble( this.lat );
+ dest.writeDouble( this.lon );
+ dest.writeDouble( this.heading );
+ dest.writeLong( this.systemTime );
+ dest.writeLong( this.satelliteTime );
+ dest.writeDouble( this.alt );
+ dest.writeDouble( this.speed );
+ dest.writeInt( this.vehicleType );
+ }
+
+ protected CloudLocationInfo( Parcel in ) {
+ this.lat = in.readDouble();
+ this.lon = in.readDouble();
+ this.heading = in.readDouble();
+ this.systemTime = in.readLong();
+ this.satelliteTime = in.readLong();
+ this.alt = in.readDouble();
+ this.speed = in.readDouble();
+ this.vehicleType = in.readInt();
+ }
+
+ public static final Creator< CloudLocationInfo > CREATOR = new Creator< CloudLocationInfo >() {
+ @Override
+ public CloudLocationInfo createFromParcel( Parcel source ) {
+ return new CloudLocationInfo( source );
+ }
+
+ @Override
+ public CloudLocationInfo[] newArray( int size ) {
+ return new CloudLocationInfo[size];
+ }
+ };
}