From 191242b9b37b722ef245c88f88c5b45819d455b6 Mon Sep 17 00:00:00 2001 From: wds Date: Mon, 21 Jun 2021 18:27:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E5=91=A8=E9=97=AE=E9=A2=98=E6=94=B6?= =?UTF-8?q?=E5=B0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../adapter/CapacityEvaluationAdapter.java | 1 - .../com/navinfo/outdoor/api/Constant.java | 20 +- .../fragment/CapacityEvaluationFragment.java | 2 - .../fragment/ChargingStationFragment.java | 357 +++++++++++++ .../outdoor/fragment/FilterFragment.java | 9 +- .../outdoor/fragment/FindFragment.java | 1 + .../outdoor/fragment/GatherGetFragment.java | 29 + .../outdoor/fragment/GradeFragment.java | 8 +- .../outdoor/fragment/IssueFragment.java | 2 - .../navinfo/outdoor/fragment/PoiFragment.java | 6 +- .../outdoor/fragment/PoiVideoFragment.java | 220 ++++++++ .../outdoor/fragment/TreasureFragment.java | 32 +- .../res/drawable/ic_baseline_arrow_drop.xml | 5 + .../res/layout/charging_station_fragment.xml | 500 ++++++++++++++++++ .../res/layout/charging_station_header.xml | 58 ++ app/src/main/res/layout/fragment_filter.xml | 43 +- .../main/res/layout/fragment_gather_get.xml | 29 +- .../main/res/layout/poi_video_fragment.xml | 222 ++++++++ app/src/main/res/layout/poi_video_header.xml | 54 ++ 20 files changed, 1539 insertions(+), 61 deletions(-) create mode 100644 app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java create mode 100644 app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java create mode 100644 app/src/main/res/drawable/ic_baseline_arrow_drop.xml create mode 100644 app/src/main/res/layout/charging_station_fragment.xml create mode 100644 app/src/main/res/layout/charging_station_header.xml create mode 100644 app/src/main/res/layout/poi_video_fragment.xml create mode 100644 app/src/main/res/layout/poi_video_header.xml diff --git a/app/build.gradle b/app/build.gradle index b48ec2e..58798e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.0" - ndkVersion '23.0.7123448' + // ndkVersion '23.0.7123448' defaultConfig { applicationId "com.navinfo.outdoor" diff --git a/app/src/main/java/com/navinfo/outdoor/adapter/CapacityEvaluationAdapter.java b/app/src/main/java/com/navinfo/outdoor/adapter/CapacityEvaluationAdapter.java index dd9cd9f..10802cb 100644 --- a/app/src/main/java/com/navinfo/outdoor/adapter/CapacityEvaluationAdapter.java +++ b/app/src/main/java/com/navinfo/outdoor/adapter/CapacityEvaluationAdapter.java @@ -22,7 +22,6 @@ import java.util.List; public class CapacityEvaluationAdapter extends RecyclerView.Adapter { private List capacityList = new ArrayList<>(); private Context context; - public CapacityEvaluationAdapter(Context context) { this.context = context; } diff --git a/app/src/main/java/com/navinfo/outdoor/api/Constant.java b/app/src/main/java/com/navinfo/outdoor/api/Constant.java index 7f47e49..d05b482 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/Constant.java +++ b/app/src/main/java/com/navinfo/outdoor/api/Constant.java @@ -36,19 +36,19 @@ public class Constant { //message word 值 - public static final int TREASURE_FRAGMENT = 100; - public static final int TREASURE_WORD_0 = 0; - public static final int TREASURE_WORD_1 = 1; - public static final int POI_WORD_2 = 2; - public static final int POI_WORD_3 = 3; - public static final int FILTER_LIST = 4; - public static final int FILTER_LIST_ITEM = 5; - public static final int GATHER_GET = 6; - public static final int TREASURE_GATHER_GET_WORD = 7; + public static final int TREASURE_FRAGMENT = 100;//抽屉界面的展示和隐藏 + public static final int TREASURE_WORD = 0;//poi 对地图页面marker 的一个展示 + public static final int POI_WORD = 2;//地图页面marker 的经纬都回传 + public static final int FILTER_LIST = 4;//筛选列表所有数据地图显示 + public static final int FILTER_LIST_ITEM = 5;//点击筛选的item + public static final int GATHER_GET = 6;//点击开始采集 + public static final int TREASURE_GATHER_GET_WORD = 7;//领取采集页面其他marker 的回传 public static final int MAIN_BUTTON_VISIABLE = 8; // 控制主界面各个按钮显隐状态的what值 public static final int MAIN_HEADER = 9; // 控制主界面各个header public static final int MAIN_REMOVE = 10; // 控制主界面各个header移除 - public static final int GATHER_GET_WORD = 11; + public static final int GATHER_GET_RETURN = 11;//参加领取的返回 + public static final int MAIN_CHARGING_STATION = 13;//充电站的Fragment 对地图页面marker 的一个展示 + public static final int CHARGING_STATION_WORD = 15;//地图页面marker 的经纬都回传 /** * 用户当前位置 diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/CapacityEvaluationFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/CapacityEvaluationFragment.java index 51bebc1..0f7f28c 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/CapacityEvaluationFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/CapacityEvaluationFragment.java @@ -84,8 +84,6 @@ public class CapacityEvaluationFragment extends BaseFragment implements View.OnC startActivity(capacityEvaWeb); } }); - - } @Override diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java new file mode 100644 index 0000000..aabd7c4 --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java @@ -0,0 +1,357 @@ +package com.navinfo.outdoor.fragment; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.hjq.permissions.OnPermissionCallback; +import com.hjq.permissions.Permission; +import com.hjq.permissions.XXPermissions; +import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; +import com.kongzue.dialog.util.BaseDialog; +import com.kongzue.dialog.util.DialogSettings; +import com.kongzue.dialog.v3.MessageDialog; +import com.navinfo.outdoor.R; +import com.navinfo.outdoor.adapter.PoiRecycleAdapter; +import com.navinfo.outdoor.api.Constant; +import com.navinfo.outdoor.base.BaseDrawerFragment; +import com.navinfo.outdoor.bean.Info; +import com.navinfo.outdoor.bean.PoiBean; +import com.navinfo.outdoor.room.PoiDao; +import com.navinfo.outdoor.room.PoiDatabase; +import com.navinfo.outdoor.room.PoiEntity; +import com.navinfo.outdoor.util.PhotoPathUtil; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import static android.app.Activity.RESULT_OK; + +/** + * 充电站的Fragment + * 2021-5-25 + */ +public class ChargingStationFragment extends BaseDrawerFragment implements View.OnClickListener { + + private EditText editDescribe; + private RelativeLayout rlPanorama, rlName, rlInternalPhotos, rlCard, rlElse; + private ImageView ivPanorama, ivName, ivInternal, ivCard, ivElse; + private TextView tvExamine; + private EditText editNameContent, editSiteContent; + private RecyclerView recyclerPhone; + private PoiRecycleAdapter poiRecycleAdapter; + private ArrayList phoneData; + private ArrayList poiBeans; + private Button btnSaveLocal; + private Button btnUploading; + private PoiDatabase poiDatabase; + private PoiDao poiDao; + private String inode; + private List photoBean; + private CheckBox checkBoxLife; + private CheckBox checkBoxRight; + private String phone; + private Spinner spinnerType; + String[] ctype = new String[]{"全部", "poi", "道路", "充电站", "其他"}; + private ArrayAdapter adapter; + + public static ChargingStationFragment newInstance(Bundle bundle) { + ChargingStationFragment fragment = new ChargingStationFragment(); + fragment.setArguments(bundle); + return fragment; + } + + @Override + protected int getLayout() { + return R.layout.charging_station_fragment; + } + + @Override + public void onStart() { + super.onStart(); + if (!EventBus.getDefault().isRegistered(this)) {//加上判断 + EventBus.getDefault().register(this); + } + View header = LayoutInflater.from(getActivity()).inflate(R.layout.charging_station_header, null); + Message obtain = Message.obtain(); + obtain.what = Constant.MAIN_HEADER; + obtain.obj = header; + EventBus.getDefault().post(obtain); + + } + + @Override + protected void initView() { + super.initView(); + poiDatabase = PoiDatabase.getInstance(getContext()); + poiDao = poiDatabase.getPoiDao(); + checkBoxLife = findViewById(R.id.check_pot_life); + checkBoxRight = findViewById(R.id.check_pot_right); + checkBoxLife.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Message obtain = Message.obtain(); + obtain.what = Constant.MAIN_CHARGING_STATION; + obtain.obj = isChecked; + EventBus.getDefault().post(obtain); + } + }); + checkBoxRight.setVisibility(View.GONE); + spinnerType = findViewById(R.id.spinner_type); + adapter = new ArrayAdapter(getContext(), android.R.layout.simple_spinner_item, ctype); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //设置下拉列表框的下拉选项样式 + spinnerType.setAdapter(adapter); + spinnerType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + btnSaveLocal = findViewById(R.id.btn_save_local); + btnSaveLocal.setOnClickListener(this::onClick); + btnUploading = findViewById(R.id.btn_uploading); + btnUploading.setOnClickListener(this::onClick); + editNameContent = findViewById(R.id.tv_name_content); + editSiteContent = findViewById(R.id.tv_site_content); + tvExamine = findViewById(R.id.tv_examine); + tvExamine.setOnClickListener(this::onClick); + editDescribe = findViewById(R.id.edit_describe); + ivPanorama = findViewById(R.id.iv_panorama); + ivName = findViewById(R.id.iv_name); + ivInternal = findViewById(R.id.iv_internal); + ivCard = findViewById(R.id.iv_card); + ivElse = findViewById(R.id.iv_else); + rlPanorama = findViewById(R.id.rl_panorama); + rlPanorama.setOnClickListener(this::onClick); + rlName = findViewById(R.id.rl_name); + rlName.setOnClickListener(this::onClick); + rlInternalPhotos = findViewById(R.id.rl_internal_photos); + rlInternalPhotos.setOnClickListener(this::onClick); + rlCard = findViewById(R.id.rl_card); + rlCard.setOnClickListener(this::onClick); + rlElse = findViewById(R.id.rl_else); + rlElse.setOnClickListener(this::onClick); + recyclerPhone = findViewById(R.id.recycler_phone); + recyclerPhone.setLayoutManager(new LinearLayoutManager(getContext())); + recyclerPhone.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); + poiBeans.add(new PoiBean("电话*", phone, R.drawable.icon_add_bg)); + poiRecycleAdapter = new PoiRecycleAdapter(getContext(), poiBeans); + recyclerPhone.setAdapter(poiRecycleAdapter); + poiRecycleAdapter.setInitPoiClick(new PoiRecycleAdapter.initPoiClick() { + @Override + public void item(int aInt) { + if (aInt == 0) { + poiRecycleAdapter.addData(new PoiBean("", null, R.drawable.icon_del_bg)); + } else { + poiRecycleAdapter.removeData(aInt); + if (phoneData.size() > 0) { + phoneData.remove(aInt); + Log.d("TAG", "initView: " + phoneData.toString()); + } + } + } + }); + poiRecycleAdapter.setInitPoiEditClick(new PoiRecycleAdapter.initPoiEditClick() { + @Override + public void item(String a, String data, int aInt) { + if (data.length() == 11) { + if (a != null) { + phoneData.add(aInt, a + "," + data); + } else { + phoneData.add(aInt, data); + } + Log.d("TAG", "initView: " + phoneData.toString()); + } + } + }); + //禁用所有可操作控件 + //disables(); + + } +//禁用所有可操作性控件 + private void disables() { + checkBoxLife.setEnabled(false); + editNameContent.setEnabled(false); + tvExamine.setEnabled(false); + editSiteContent.setEnabled(false); + recyclerPhone.setEnabled(false); + ivPanorama.setEnabled(false); + ivName.setEnabled(false); + ivInternal.setEnabled(false); + ivCard.setEnabled(false); + ivElse.setEnabled(false); + editDescribe.setEnabled(false); + btnSaveLocal.setEnabled(false); + } + + @Override + protected void initData() { + super.initData(); + //存储对象 + poiBeans = new ArrayList<>(); + //存储手机号 + phoneData = new ArrayList<>(); + //存储图片地址 + photoBean = new ArrayList<>(); + } + + + + + @Subscribe + public void onEvent(Message data) { + if (data.what == Constant.CHARGING_STATION_WORD) { + inode = data.obj.toString(); + Toast.makeText(getContext(), inode, Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_save_local: + XXPermissions.with(this) + //读写权限 + .permission(Permission.MANAGE_EXTERNAL_STORAGE) + .request(new OnPermissionCallback() { + @Override + public void onGranted(List permissions, boolean all) { + if (all) { + //保存数据库: + PoiEntity poiEntity = new PoiEntity(); + String name = editNameContent.getText().toString().trim();//名称 + if (name == null || name.equals("")) { + Toast.makeText(getActivity(), "请输入充电站 名称", Toast.LENGTH_SHORT).show(); + return; + } else { + poiEntity.setName(name); + } + String site = editSiteContent.getText().toString().trim(); + if (site == null || site.equals("")) { + Toast.makeText(getActivity(), "请输入充电站 地址", Toast.LENGTH_SHORT).show(); + return; + } else { + poiEntity.setAddress(site); + } + if (inode == null || inode.equals("")) { + Toast.makeText(getActivity(), "请确定点位", Toast.LENGTH_SHORT).show(); + return; + } else { + String[] split = inode.split(","); + poiEntity.setX(split[0]); + poiEntity.setY(split[1]); + } + String describe = editDescribe.getText().toString().trim(); + if (describe == null || describe.equals("")) { + Toast.makeText(getActivity(), "请输入任务描述", Toast.LENGTH_SHORT).show(); + return; + } else { + poiEntity.setDescribe(describe); + } + if (phoneData.size() <= 0) { + Toast.makeText(getActivity(), "请输入手机号", Toast.LENGTH_SHORT).show(); + return; + } else { + poiEntity.setTelPhone(phoneData.get(0)); + } + if (photoBean.size() < 0) { + Toast.makeText(getActivity(), "请拍照", Toast.LENGTH_SHORT).show(); + return; + } else { + poiEntity.setPhotoInfo(photoBean); + } + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + String format = formatter.format(calendar.getTime()); + poiEntity.setCreateTime(format); + poiEntity.setType(2); + poiEntity.setTaskStatus(0); + new Thread(new Runnable() { + @Override + public void run() { + poiDao.insertPoiEntity(poiEntity); + } + }).start(); + Message obtains = Message.obtain(); + obtains.what = Constant.TREASURE_FRAGMENT; + obtains.obj = false; + EventBus.getDefault().post(obtains); + onBackPressed(); + } else { + Toast.makeText(getActivity(), "没有申请权限,请手动申请", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onDenied(List permissions, boolean never) { + if (never) { + Toast.makeText(getActivity(), "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show(); + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(getActivity(), permissions); + } + } + }); + + break; + case R.id.btn_uploading: + Message obtain = Message.obtain(); + obtain.what = Constant.TREASURE_FRAGMENT; + obtain.obj = false; + EventBus.getDefault().post(obtain); + break; + case R.id.tv_examine: + Toast.makeText(getContext(), editNameContent.getText().toString(), Toast.LENGTH_SHORT).show(); + break; + } + } + + + @Override + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + } + + + @Override + public void onDestroy() { + if (EventBus.getDefault().isRegistered(this))//加上判断 + EventBus.getDefault().unregister(this); + super.onDestroy(); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java index b4d1681..be96a7b 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java @@ -65,14 +65,12 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi EventBus.getDefault().post(obtain); } - - - @Override protected int getLayout() { return R.layout.fragment_filter; } + @Override protected void initView() { super.initView(); @@ -190,7 +188,6 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi tvType.setText(text); } }); - } - - } + } + } } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/FindFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/FindFragment.java index 474d0da..ede9c45 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/FindFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/FindFragment.java @@ -47,6 +47,7 @@ public class FindFragment extends BaseFragment implements View.OnClickListener{ @Override protected void initData() { super.initData(); + } @Override diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java index d219209..5e4a210 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java @@ -2,6 +2,7 @@ package com.navinfo.outdoor.fragment; import android.os.Bundle; import android.os.Message; +import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.TextView; @@ -38,6 +39,29 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe } } + @Override + public void onResume() { + super.onResume(); + getFocus(); + } + //主界面获取焦点 + private void getFocus() { + getView().setFocusableInTouchMode(true); + getView().requestFocus(); + getView().setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { + Message obtain = Message.obtain(); + obtain.what = Constant.GATHER_GET_RETURN; + obtain.obj = true; + EventBus.getDefault().post(obtain); + return true; + } + return false; + } + }); + } @Subscribe public void onEvent(Message data) { @@ -69,6 +93,7 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe btnBank = findViewById(R.id.btn_bank); btnBank.setOnClickListener(this); Bundle arguments = getArguments(); + if (arguments!=null) { poiEntity = (PoiEntity) arguments.getSerializable("PoiEntity"); tvTitle.setText(poiEntity.getName()); @@ -79,6 +104,8 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe tvDistance.setText("距离:" ); } + + } @Override @@ -97,10 +124,12 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe } } + @Override public void onDestroy() { if (EventBus.getDefault().isRegistered(this))//加上判断 EventBus.getDefault().unregister(this); super.onDestroy(); + } } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/GradeFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/GradeFragment.java index 4f1e731..7d93d74 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/GradeFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/GradeFragment.java @@ -31,9 +31,10 @@ public class GradeFragment extends BaseFragment implements View.OnClickListener{ @Override protected void initView() { - super.initView(); - ivGrade = findViewById(R.id.iv_grade); + + ivGrade = findViewById(R.id.iv_grade);super.initView(); ivGrade.setOnClickListener(this); + } @Override @@ -41,7 +42,6 @@ public class GradeFragment extends BaseFragment implements View.OnClickListener{ switch (v.getId()){ case R.id.iv_grade: getActivity().finish(); - break; - } + break; } } } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/IssueFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/IssueFragment.java index 60a89b2..b65e61d 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/IssueFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/IssueFragment.java @@ -80,8 +80,6 @@ public class IssueFragment extends BaseFragment implements View.OnClickListener @Override protected void initView() { super.initView(); - - ivIssueFinish =findViewById(R.id.iv_issue_finish); mainIssueRecycler =findViewById(R.id.main_issue_recycler); ivIssueFinish.setOnClickListener(this::onClick); diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java index c0d2ff8..63e5e10 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java @@ -64,7 +64,7 @@ import java.util.List; import static android.app.Activity.RESULT_OK; /** - * 记录的Fragment + * poi记录的Fragment * 2021-5-25 */ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListener { @@ -128,7 +128,7 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Message obtain = Message.obtain(); - obtain.what = Constant.TREASURE_WORD_0; + obtain.what = Constant.TREASURE_WORD; obtain.obj = isChecked; EventBus.getDefault().post(obtain); } @@ -246,7 +246,7 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe @Subscribe public void onEvent(Message data) { - if (data.what == Constant.POI_WORD_2) { + if (data.what == Constant.POI_WORD) { inode = data.obj.toString(); Toast.makeText(getContext(), inode, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java new file mode 100644 index 0000000..0878dac --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java @@ -0,0 +1,220 @@ +package com.navinfo.outdoor.fragment; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.media.MediaMetadataRetriever; +import android.os.Bundle; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.gson.Gson; +import com.hjq.permissions.OnPermissionCallback; +import com.hjq.permissions.Permission; +import com.hjq.permissions.XXPermissions; +import com.navinfo.outdoor.R; +import com.navinfo.outdoor.activity.PictureActivity; +import com.navinfo.outdoor.api.Constant; +import com.navinfo.outdoor.base.BaseDrawerFragment; +import com.navinfo.outdoor.bean.RoadExtend; +import com.navinfo.outdoor.room.PoiDao; +import com.navinfo.outdoor.room.PoiDatabase; +import com.navinfo.outdoor.room.PoiEntity; + +import org.greenrobot.eventbus.EventBus; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; + +/** + * 寻宝-点击上传弹窗-poi录像 + */ + +public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClickListener { + private TextView tvPictures; + private EditText etRoadName; + private ImageView ivRoadPicture; + private RadioButton rbCar; + private RadioButton rbBicycle; + private RadioButton rbWalking; + private RadioButton rbManual; + private EditText etDesc; + private Button btnRoadSave; + private RadioGroup rgType; + private PoiDatabase poiDatabase; + private PoiDao poiDao; + + public static PoiVideoFragment newInstance(Bundle bundle) { + PoiVideoFragment fragment = new PoiVideoFragment(); + fragment.setArguments(bundle); + return fragment; + } + + @Override + protected int getLayout() { + return R.layout.poi_video_fragment; + } + + @Override + public void onStart() { + super.onStart(); + View header = LayoutInflater.from(getActivity()).inflate(R.layout.poi_video_header, null); + Message obtain = Message.obtain(); + obtain.what = Constant.MAIN_HEADER; + obtain.obj = header; + EventBus.getDefault().post(obtain); + } + + + + @Override + protected void initView() { + super.initView(); + poiDatabase = PoiDatabase.getInstance(getContext()); + poiDao = poiDatabase.getPoiDao(); + tvPictures = (TextView) findViewById(R.id.tv_pictures); + tvPictures.setOnClickListener(this::onClick); + etRoadName = (EditText) findViewById(R.id.et_road_name); + ivRoadPicture = (ImageView) findViewById(R.id.iv_road_picture); + // Glide.with(getContext()).load(getLocalVideoBitmap(String.valueOf(R.drawable.bg_01))).into(ivRoadPicture); + rbCar = (RadioButton) findViewById(R.id.rb_car); + rbBicycle = (RadioButton) findViewById(R.id.rb_bicycle); + rbWalking = (RadioButton) findViewById(R.id.rb_walking); + rbManual = (RadioButton) findViewById(R.id.rb_manual); + etDesc = (EditText) findViewById(R.id.et_desc); + btnRoadSave = (Button) findViewById(R.id.btn_road_save); + btnRoadSave.setOnClickListener(this::onClick); + rgType = (RadioGroup) findViewById(R.id.rg_type); + + //禁用可操作性控件 + // disables(); + //获取 + } + + private void disables() { + etRoadName.setEnabled(false); + rgType.setEnabled(false); + ivRoadPicture.setEnabled(false); + tvPictures.setEnabled(false); + etDesc.setEnabled(false); + btnRoadSave.setEnabled(false); + } + + @Override + protected void initData() { + super.initData(); + // infos = new ArrayList<>(); + } + + /** + * 获取本地视频的第一帧 + * + * @param localPath + * @return + */ + public Bitmap getLocalVideoBitmap(String localPath) { + Bitmap bitmap = null; + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + try { + //根据文件路径获取缩略图 + retriever.setDataSource(localPath); + //获得第一帧图片 + bitmap = retriever.getFrameAtTime(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } finally { + retriever.release(); + } + return bitmap; + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_road_save: + XXPermissions.with(getContext()) + .permission(Permission.MANAGE_EXTERNAL_STORAGE) + .request(new OnPermissionCallback() { + @Override + public void onGranted(List permissions, boolean all) { + if (all) { + PoiEntity poiEntity = new PoiEntity(); + String roadName = etRoadName.getText().toString().trim(); + if (roadName == null || roadName.equals("")) { + Toast.makeText(getContext(), "请输入poi录像 名称", Toast.LENGTH_SHORT).show(); + return; + } else { + poiEntity.setName(roadName); + } + RoadExtend roadExtend = new RoadExtend(); + int type = getPictureType(); + if (type== -1){ + Toast.makeText(getContext(), "请选择拍照方式", Toast.LENGTH_SHORT).show(); + return; + } + roadExtend.setType(type); + Gson gson = new Gson(); + String roadExtendJson = gson.toJson(roadExtend); + poiEntity.setExtend(roadExtendJson); + String desc = etDesc.getText().toString().trim(); + if (desc == null || desc.equals("")) { + Toast.makeText(getContext(), "请输入你的任务描述", Toast.LENGTH_SHORT).show(); + } else { + poiEntity.setDescribe(desc); + } + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + String format = formatter.format(calendar.getTime()); + poiEntity.setCreateTime(format); + new Thread(new Runnable() { + @Override + public void run() { + poiDao.insertPoiEntity(poiEntity); + } + }).start(); + } + } + + @Override + public void onDenied(List permissions, boolean never) { + if (never) { + Toast.makeText(getActivity(), "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show(); + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(getActivity(), permissions); + } + } + + }); + break; + + case R.id.tv_pictures: + Intent intent = new Intent(getContext(), PictureActivity.class); + startActivity(intent); + break; + } + } + + //获取拍照类型 + private int getPictureType() { + if (rbCar != null && rbCar.isChecked()) { + return 0; + } else if (rbBicycle != null && rbBicycle.isChecked()) { + return 1; + } else if (rbWalking != null && rbWalking.isChecked()) { + return 2; + }else if (rbManual != null && rbManual.isChecked()) { + return 3; + } + return -1; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index 693cb1f..5927311 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -190,6 +190,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen showSlidingFragment(roadFragment); break; case 2: + ChargingStationFragment chargingStationFragment = ChargingStationFragment.newInstance(new Bundle()); + showSlidingFragment(chargingStationFragment); break; case 3: break; @@ -197,10 +199,13 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } else if (data.what == Constant.FILTER_LIST) { // 筛选列表所有数据地图显示 List poiEntities = (List) data.obj; initFilterMarker(poiEntities); - } else if (data.what == Constant.TREASURE_WORD_0) { // POI采集-移动位置 - initPoiMarker(Boolean.valueOf((Boolean) data.obj)); + } else if (data.what == Constant.TREASURE_WORD) { // POI采集-移动位置 + initPoiMarker(Boolean.valueOf((Boolean) data.obj),Constant.POI_WORD); - } else if (data.what == Constant.TREASURE_FRAGMENT) { + }else if (data.what==Constant.MAIN_CHARGING_STATION){//道路采集-移动位置 + initPoiMarker(Boolean.valueOf((Boolean) data.obj),Constant.CHARGING_STATION_WORD); + } + else if (data.what == Constant.TREASURE_FRAGMENT) { if ((boolean) data.obj == true) { frameLayout.setVisibility(View.GONE); sliding_layout.setPanelHeight(0); @@ -219,6 +224,12 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen dragView.removeAllViews(); } + }else if (data.what==Constant.GATHER_GET_RETURN){//item 点击页面的返回事件的处理 + if ((boolean)data.obj){ + frameLayout.setVisibility(View.GONE); + sliding_layout.setPanelHeight(1000); + sliding_layout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); + } } @@ -248,7 +259,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } - private void initPoiMarker(Boolean t) { + private void initPoiMarker(Boolean t,int aInt) { if (t == true) { //移动地图 CameraUpdate cameraSigma = @@ -282,7 +293,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen Constant.markerLatitude = latLng.latitude; Constant.markerLongitude = latLng.longitude; Message obtain = Message.obtain(); - obtain.what = Constant.POI_WORD_2; + obtain.what =aInt; obtain.obj = Constant.markerLatitude + "," + Constant.markerLongitude; EventBus.getDefault().post(obtain); @@ -410,6 +421,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen DialogSettings.style = DialogSettings.STYLE.STYLE_MIUI; List itemList = new ArrayList<>(); itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_poi, "POI")); + itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_poi, "POI录像")); itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_road, "道路")); itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_chongdianzhuang, "充电站")); itemList.add(new ShareDialog.Item(getContext(), R.drawable.push_qingbao, "其他")); @@ -422,11 +434,19 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen showSlidingFragment(poiFragment); break; case 1: + PoiVideoFragment poiVideoFragment = PoiVideoFragment.newInstance(new Bundle()); + showSlidingFragment(poiVideoFragment); + break; + case 2: RoadFragment roadFragment = RoadFragment.newInstance(new Bundle()); showSlidingFragment(roadFragment); break; - case 2: case 3: + ChargingStationFragment chargingStationFragment = ChargingStationFragment.newInstance(new Bundle()); + showSlidingFragment(chargingStationFragment); + break; + case 4: + Toast.makeText(getContext(), "其他", Toast.LENGTH_SHORT).show(); break; } return false; diff --git a/app/src/main/res/drawable/ic_baseline_arrow_drop.xml b/app/src/main/res/drawable/ic_baseline_arrow_drop.xml new file mode 100644 index 0000000..d31d8c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_arrow_drop.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/charging_station_fragment.xml b/app/src/main/res/layout/charging_station_fragment.xml new file mode 100644 index 0000000..7718b32 --- /dev/null +++ b/app/src/main/res/layout/charging_station_fragment.xml @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +