|
|
@@ -1,20 +1,31 @@
|
|
|
package com.usai.redant.apexdrivers.Detail;
|
|
|
|
|
|
+import android.content.BroadcastReceiver;
|
|
|
import android.content.Context;
|
|
|
+import android.content.Intent;
|
|
|
+import android.content.IntentFilter;
|
|
|
+import android.support.v4.content.LocalBroadcastManager;
|
|
|
import android.util.TypedValue;
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
|
import android.widget.BaseExpandableListAdapter;
|
|
|
import android.widget.Button;
|
|
|
+import android.widget.ImageButton;
|
|
|
+import android.widget.ImageView;
|
|
|
import android.widget.LinearLayout;
|
|
|
import android.widget.RelativeLayout;
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
+import com.google.android.gms.maps.GoogleMap;
|
|
|
+import com.google.android.gms.maps.OnMapReadyCallback;
|
|
|
import com.usai.redant.apexdrivers.Detail.Model.DetailActionModel;
|
|
|
import com.usai.redant.apexdrivers.Detail.Model.DetailBaseModel;
|
|
|
import com.usai.redant.apexdrivers.Detail.Model.DetailLocationModel;
|
|
|
+import com.usai.redant.apexdrivers.Detail.Model.DetailMapModel;
|
|
|
import com.usai.redant.apexdrivers.Detail.Model.DetailMultipleLineModel;
|
|
|
+import com.usai.redant.apexdrivers.Detail.Model.DetailPhotoModel;
|
|
|
+import com.usai.redant.apexdrivers.Detail.Model.DetailSignatureModel;
|
|
|
import com.usai.redant.apexdrivers.Detail.Model.DetailSingleLineModel;
|
|
|
import com.usai.redant.apexdrivers.Detail.Model.DetailSubActionModel;
|
|
|
import com.usai.redant.apexdrivers.R;
|
|
|
@@ -75,7 +86,7 @@ public class DetailAdapter extends BaseExpandableListAdapter {
|
|
|
@Override
|
|
|
public int getChildTypeCount() {
|
|
|
|
|
|
- return 4;
|
|
|
+ return DetailBaseModel.detailValueTypeCount();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -198,6 +209,51 @@ public class DetailAdapter extends BaseExpandableListAdapter {
|
|
|
holder.bindLocationModel(locationModel);
|
|
|
}
|
|
|
break;
|
|
|
+ case DetailBaseModel.OrderDetailValueType.OderDetailValueTypeMap: {
|
|
|
+ MapHolder holder;
|
|
|
+ if (convertView == null) {
|
|
|
+
|
|
|
+ convertView = LayoutInflater.from(mCtx).inflate(R.layout.detail_map_cell,null);
|
|
|
+ holder = new MapHolder(convertView);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ holder = (MapHolder)convertView.getTag();
|
|
|
+ }
|
|
|
+
|
|
|
+ DetailMapModel mapModel = (DetailMapModel)model;
|
|
|
+ holder.bindModel(mapModel);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case DetailBaseModel.OrderDetailValueType.OderDetailValueTypePhoto: {
|
|
|
+ PhotoHolder holder;
|
|
|
+ if (convertView == null) {
|
|
|
+
|
|
|
+ convertView = LayoutInflater.from(mCtx).inflate(R.layout.detail_photo_cell,null);
|
|
|
+ holder = new PhotoHolder(convertView);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ holder = (PhotoHolder)convertView.getTag();
|
|
|
+ }
|
|
|
+
|
|
|
+ DetailPhotoModel mapModel = (DetailPhotoModel)model;
|
|
|
+ holder.bindModel(mapModel);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case DetailBaseModel.OrderDetailValueType.OderDetailValueTypeSignature: {
|
|
|
+ SignatureHolder holder;
|
|
|
+ if (convertView == null) {
|
|
|
+
|
|
|
+ convertView = LayoutInflater.from(mCtx).inflate(R.layout.detail_signature_cell,null);
|
|
|
+ holder = new SignatureHolder(convertView);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ holder = (SignatureHolder)convertView.getTag();
|
|
|
+ }
|
|
|
+
|
|
|
+ DetailSignatureModel mapModel = (DetailSignatureModel)model;
|
|
|
+ holder.bindModel(mapModel);
|
|
|
+ }
|
|
|
+
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
@@ -382,6 +438,214 @@ public class DetailAdapter extends BaseExpandableListAdapter {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public final static String MapLifCircleAction = "com.apex.driver.map_life_circle.action";
|
|
|
+
|
|
|
+ private class MapHolder implements OnMapReadyCallback,DetailBaseModel.OrderDetailModelDelegate {
|
|
|
+ TextView titleTv;
|
|
|
+ TextView valueTv;
|
|
|
+ com.google.android.gms.maps.MapView mapView;
|
|
|
+ GoogleMap googleMap;
|
|
|
+ WeakReference<DetailMapModel> weakMap;
|
|
|
+ MapBroadcastReceiver receiver;
|
|
|
+
|
|
|
+ private class MapBroadcastReceiver extends BroadcastReceiver {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onReceive(Context context, Intent intent) {
|
|
|
+
|
|
|
+ int life = intent.getIntExtra("life",0);
|
|
|
+ switch (life) {
|
|
|
+ case 0:{
|
|
|
+ onActivitySaveInstanceState();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 1:{
|
|
|
+ onActivityResume();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:{
|
|
|
+ onActivityStart();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3:{
|
|
|
+ onActivityStop();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 4:{
|
|
|
+ onActivityPause();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 5:{
|
|
|
+ onActivityLowMemory();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 6:{
|
|
|
+ onActivityDestroy();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ MapHolder(View view) {
|
|
|
+
|
|
|
+ titleTv = view.findViewById(R.id.detail_map_title_tv);
|
|
|
+ valueTv = view.findViewById(R.id.detail_map_value_tv);
|
|
|
+ mapView = view.findViewById(R.id.detail_map_view);
|
|
|
+ mapView.getMapAsync(this);
|
|
|
+
|
|
|
+ view.setTag(this);
|
|
|
+
|
|
|
+ receiver = new MapBroadcastReceiver();
|
|
|
+
|
|
|
+ IntentFilter intentFilter = new IntentFilter();
|
|
|
+ intentFilter.addAction(MapLifCircleAction);
|
|
|
+
|
|
|
+ LocalBroadcastManager.getInstance(mCtx).registerReceiver(receiver,intentFilter);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void onActivitySaveInstanceState() {
|
|
|
+
|
|
|
+ onActivityDestroy();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void onActivityResume() {
|
|
|
+ mapView.onResume();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void onActivityStart() {
|
|
|
+ mapView.onStart();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void onActivityStop() {
|
|
|
+ mapView.onStop();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void onActivityPause() {
|
|
|
+ mapView.onPause();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void onActivityDestroy() {
|
|
|
+
|
|
|
+ mapView.onDestroy();
|
|
|
+ LocalBroadcastManager.getInstance(mCtx).unregisterReceiver(receiver);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void onActivityLowMemory() {
|
|
|
+ mapView.onLowMemory();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void bindModel(DetailMapModel model) {
|
|
|
+ if (weakMap != null && weakMap.get() != null) {
|
|
|
+ weakMap.get().setDelegate(null);
|
|
|
+ }
|
|
|
+ if (model != null) {
|
|
|
+ weakMap = new WeakReference<>(model);
|
|
|
+ weakMap.get().setDelegate(this);
|
|
|
+ } else {
|
|
|
+ weakMap = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onMapReady(GoogleMap googleMap) {
|
|
|
+ this.googleMap = googleMap;
|
|
|
+
|
|
|
+ refreshUI();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void refreshUI() {
|
|
|
+ if (weakMap != null) {
|
|
|
+ DetailMapModel model = weakMap.get();
|
|
|
+ if (model != null) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private class PhotoHolder implements DetailBaseModel.OrderDetailModelDelegate {
|
|
|
+ TextView titleTv;
|
|
|
+ ImageButton photoBtn;
|
|
|
+ WeakReference<DetailPhotoModel> weakPhoto;
|
|
|
+
|
|
|
+ PhotoHolder(View view) {
|
|
|
+
|
|
|
+ titleTv = view.findViewById(R.id.detail_photo_title_tv);
|
|
|
+ photoBtn = view.findViewById(R.id.detail_photo_btn);
|
|
|
+
|
|
|
+ view.setTag(this);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void bindModel(DetailPhotoModel model) {
|
|
|
+ if (weakPhoto != null && weakPhoto.get() != null) {
|
|
|
+ weakPhoto.get().setDelegate(null);
|
|
|
+ }
|
|
|
+ if (model != null) {
|
|
|
+ weakPhoto = new WeakReference<>(model);
|
|
|
+ weakPhoto.get().setDelegate(this);
|
|
|
+ } else {
|
|
|
+ weakPhoto = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void refreshUI() {
|
|
|
+ if (weakPhoto != null) {
|
|
|
+ DetailPhotoModel model = weakPhoto.get();
|
|
|
+ if (model != null) {
|
|
|
+
|
|
|
+ titleTv.setText(model.getTitle());
|
|
|
+ photoBtn.setImageBitmap(model.getPhoto());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private class SignatureHolder implements DetailBaseModel.OrderDetailModelDelegate {
|
|
|
+
|
|
|
+ TextView titleTv;
|
|
|
+ ImageView signatureView;
|
|
|
+ WeakReference<DetailSignatureModel> weakSignature;
|
|
|
+
|
|
|
+ SignatureHolder(View view) {
|
|
|
+
|
|
|
+ titleTv = view.findViewById(R.id.detail_signature_title_tv);
|
|
|
+ signatureView = view.findViewById(R.id.detail_signature_image_view);
|
|
|
+
|
|
|
+ view.setTag(this);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void bindModel(DetailSignatureModel model) {
|
|
|
+ if (weakSignature != null && weakSignature.get() != null) {
|
|
|
+ weakSignature.get().setDelegate(null);
|
|
|
+ }
|
|
|
+ if (model != null) {
|
|
|
+ weakSignature = new WeakReference<>(model);
|
|
|
+ weakSignature.get().setDelegate(this);
|
|
|
+ } else {
|
|
|
+ weakSignature = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void refreshUI() {
|
|
|
+ if (weakSignature != null) {
|
|
|
+ DetailSignatureModel model = weakSignature.get();
|
|
|
+ if (model != null) {
|
|
|
+
|
|
|
+ titleTv.setText(model.getTitle());
|
|
|
+ signatureView.setImageBitmap(model.getSignature());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public interface DetailActionDelegate {
|
|
|
|
|
|
void performAction(View view,DetailSubActionModel actionModel);
|