From 288ce9cd0cc2aaf34f6d908f77856ef6ed3366a4 Mon Sep 17 00:00:00 2001
From: jianbo <263303411@qq.com>
Date: Fri, 21 Aug 2020 18:09:37 +0800
Subject: [PATCH] d
---
.idea/modules.xml | 1 +
app/build.gradle | 4 +
app/src/main/AndroidManifest.xml | 60 ++--
.../seven/base/BaseActivity.java | 309 +++++++++--------
.../seven/base/BaseRecycleAdapter.java | 257 ++++++++++++++
.../seven/base/BaseTreeActivity.java | 10 -
.../seven/base/BaseViewHolder.java | 34 ++
.../seven/base/BasetwoFragment.java | 280 ++++++++++++++++
.../administrator/seven/common/Constants.java | 88 +++++
.../seven/main/activity/MainActivity.java | 54 ++-
.../main/find/CloundSolutionActivity.java | 220 ++++++++++++
.../seven/main/find/CommentActivity.java | 27 ++
.../seven/main/find/ConversationActivity.java | 26 ++
.../seven/main/find/FindFragment.java | 119 +++++++
.../seven/main/find/MainActivitytwot.java | 143 ++++++++
.../seven/main/find/MapFragment.java | 6 -
.../main/find/OnSatisfactionListener.java | 9 +
.../seven/main/find/PriLetFragment.java | 63 ++++
.../seven/main/find/QuestionsFragment.java | 120 +++++++
.../main/find/adapter/FindListAdapter.java | 61 ++++
.../main/find/adapter/PrivateletAdapter.java | 61 ++++
.../main/find/adapter/QuestionsAdapter.java | 230 +++++++++++++
.../main/find/entity/QuestionsEntity.java | 92 +++++
.../find/mvp/contract/QuestionsContract.java | 50 +++
.../find/mvp/model/QuestionsModelImpl.java | 42 +++
.../mvp/presenter/QuestionsPresenterImpl.java | 56 ++++
.../seven/main/find/ui/CommentFragment.java | 118 +++++++
.../seven/main/find/ui/FindFragmenttwo.java | 118 +++++++
.../main/find/ui/PrivateletterFragment.java | 121 +++++++
.../seven/main/kehu/activity/ShowAty.java | 26 ++
.../seven/main/my/MyFragment.java | 2 +
...SendFragment.java => LivebroFragment.java} | 5 +-
.../seven/network/http/MyApi.java | 16 +
.../seven/utils/StatusBarUtil.java | 205 ++++++++++++
.../seven/utils/StatusBarUtils.java | 49 ---
.../seven/widget/PastEditText.java | 44 +++
.../drawable-v21/selector_btn_green_bg.xml | 8 +-
.../res/drawable-xhdpi/chat_left_bg.9.png | Bin 0 -> 1128 bytes
.../res/drawable-xhdpi/chat_left_qp.9.png | Bin 0 -> 488 bytes
.../res/drawable-xhdpi/chat_right_bg.9.png | Bin 0 -> 1194 bytes
.../res/drawable-xhdpi/chat_right_qp.9.png | Bin 0 -> 567 bytes
.../res/drawable/drawable_edit_normal.xml | 9 +
.../res/layout/activity_clound_solution.xml | 46 +++
app/src/main/res/layout/activity_comment.xml | 19 ++
.../main/res/layout/activity_conversation.xml | 19 ++
app/src/main/res/layout/activity_main.xml | 1 +
app/src/main/res/layout/activity_mainsss.xml | 58 ++++
app/src/main/res/layout/criclefragment.xml | 107 ++++++
app/src/main/res/layout/findfragment.xml | 64 ++++
app/src/main/res/layout/findlist_item.xml | 120 +++++++
app/src/main/res/layout/findtwo_activity.xml | 7 +
app/src/main/res/layout/findtwo_fragment.xml | 20 ++
.../main/res/layout/fragment_questions.xml | 54 +++
.../main/res/layout/item_question_left.xml | 48 +++
.../main/res/layout/item_question_right.xml | 34 ++
app/src/main/res/layout/item_rcv_empty.xml | 12 +
.../main/res/layout/item_rcv_load_and_all.xml | 56 ++++
app/src/main/res/layout/priletfragment.xml | 78 +++++
app/src/main/res/layout/private_let_item.xml | 120 +++++++
app/src/main/res/mipmap-hdpi/icon_live.png | Bin 0 -> 789 bytes
app/src/main/res/mipmap-hdpi/icon_watch_k.png | Bin 0 -> 1723 bytes
.../main/res/mipmap-hdpi/marking_down_pic.png | Bin 0 -> 305 bytes
app/src/main/res/mipmap-mdpi/icon_live.png | Bin 0 -> 574 bytes
app/src/main/res/mipmap-mdpi/icon_watch_k.png | Bin 0 -> 1123 bytes
.../main/res/mipmap-mdpi/marking_down_pic.png | Bin 0 -> 194 bytes
app/src/main/res/mipmap-xhdpi/icon_live.png | Bin 0 -> 778 bytes
.../main/res/mipmap-xhdpi/icon_watch_k.png | Bin 0 -> 2165 bytes
.../res/mipmap-xhdpi/marking_down_pic.png | Bin 0 -> 314 bytes
.../res/mipmap-xxhdpi/fangan_location.png | Bin 0 -> 2748 bytes
app/src/main/res/mipmap-xxhdpi/icon_live.png | Bin 0 -> 1627 bytes
.../main/res/mipmap-xxhdpi/icon_watch_k.png | Bin 0 -> 3772 bytes
.../res/mipmap-xxhdpi/marking_down_pic.png | Bin 0 -> 536 bytes
.../main/res/mipmap-xxhdpi/message_remind.png | Bin 0 -> 2110 bytes
app/src/main/res/mipmap-xxxhdpi/icon_live.png | Bin 0 -> 1460 bytes
.../main/res/mipmap-xxxhdpi/icon_watch_k.png | Bin 0 -> 2939 bytes
.../res/mipmap-xxxhdpi/marking_down_pic.png | Bin 0 -> 626 bytes
app/src/main/res/values/styles.xml | 2 +
build.gradle | 2 +-
citypicker/.gitignore | 1 +
citypicker/build.gradle | 34 ++
citypicker/proguard-rules.pro | 17 +
.../citypicker/ExampleInstrumentedTest.java | 26 ++
citypicker/src/main/AndroidManifest.xml | 11 +
citypicker/src/main/assets/china_cities_v2.db | Bin 0 -> 122880 bytes
.../com/zaaach/citypicker/CityPicker.java | 132 ++++++++
.../citypicker/CityPickerDialogFragment.java | 316 ++++++++++++++++++
.../citypicker/adapter/CityListAdapter.java | 261 +++++++++++++++
.../citypicker/adapter/GridListAdapter.java | 90 +++++
.../citypicker/adapter/InnerListener.java | 8 +
.../citypicker/adapter/OnPickListener.java | 9 +
.../decoration/DividerItemDecoration.java | 45 +++
.../decoration/GridItemDecoration.java | 27 ++
.../decoration/SectionItemDecoration.java | 146 ++++++++
.../com/zaaach/citypicker/db/DBConfig.java | 14 +
.../com/zaaach/citypicker/db/DBManager.java | 130 +++++++
.../com/zaaach/citypicker/model/City.java | 77 +++++
.../com/zaaach/citypicker/model/HotCity.java | 8 +
.../zaaach/citypicker/model/LocateState.java | 16 +
.../zaaach/citypicker/model/LocatedCity.java | 8 +
.../zaaach/citypicker/util/ScreenUtil.java | 83 +++++
.../zaaach/citypicker/view/SideIndexBar.java | 171 ++++++++++
.../src/main/res/anim/cp_push_bottom_in.xml | 7 +
.../src/main/res/anim/cp_push_bottom_out.xml | 7 +
.../src/main/res/drawable/cp_grid_item_bg.xml | 11 +
.../src/main/res/drawable/cp_overlay_bg.xml | 12 +
.../main/res/layout/cp_dialog_city_picker.xml | 40 +++
.../src/main/res/layout/cp_empty_view.xml | 30 ++
.../main/res/layout/cp_grid_item_layout.xml | 18 +
.../layout/cp_list_item_default_layout.xml | 15 +
.../res/layout/cp_list_item_hot_layout.xml | 12 +
.../layout/cp_list_item_location_layout.xml | 28 ++
.../src/main/res/layout/cp_search_view.xml | 55 +++
.../res/mipmap-xxhdpi/cp_icon_clear_all.png | Bin 0 -> 1283 bytes
.../main/res/mipmap-xxhdpi/cp_icon_empty.png | Bin 0 -> 3617 bytes
.../src/main/res/values-w820dp/dimens.xml | 6 +
citypicker/src/main/res/values/attrs.xml | 41 +++
citypicker/src/main/res/values/colors.xml | 13 +
citypicker/src/main/res/values/dimens.xml | 27 ++
citypicker/src/main/res/values/strings.xml | 8 +
citypicker/src/main/res/values/styles.xml | 61 ++++
.../zaaach/citypicker/ExampleUnitTest.java | 17 +
settings.gradle | 2 +-
122 files changed, 5820 insertions(+), 230 deletions(-)
create mode 100644 app/src/main/java/com/example/administrator/seven/base/BaseRecycleAdapter.java
create mode 100644 app/src/main/java/com/example/administrator/seven/base/BaseViewHolder.java
create mode 100644 app/src/main/java/com/example/administrator/seven/base/BasetwoFragment.java
create mode 100644 app/src/main/java/com/example/administrator/seven/common/Constants.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/CloundSolutionActivity.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/CommentActivity.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/ConversationActivity.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/FindFragment.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/MainActivitytwot.java
delete mode 100644 app/src/main/java/com/example/administrator/seven/main/find/MapFragment.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/OnSatisfactionListener.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/PriLetFragment.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/QuestionsFragment.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/adapter/FindListAdapter.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/adapter/PrivateletAdapter.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/adapter/QuestionsAdapter.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/entity/QuestionsEntity.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/mvp/contract/QuestionsContract.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/mvp/model/QuestionsModelImpl.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/mvp/presenter/QuestionsPresenterImpl.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/ui/CommentFragment.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/ui/FindFragmenttwo.java
create mode 100644 app/src/main/java/com/example/administrator/seven/main/find/ui/PrivateletterFragment.java
rename app/src/main/java/com/example/administrator/seven/main/zhibo/{SendFragment.java => LivebroFragment.java} (93%)
create mode 100644 app/src/main/java/com/example/administrator/seven/utils/StatusBarUtil.java
delete mode 100644 app/src/main/java/com/example/administrator/seven/utils/StatusBarUtils.java
create mode 100644 app/src/main/java/com/example/administrator/seven/widget/PastEditText.java
create mode 100644 app/src/main/res/drawable-xhdpi/chat_left_bg.9.png
create mode 100644 app/src/main/res/drawable-xhdpi/chat_left_qp.9.png
create mode 100644 app/src/main/res/drawable-xhdpi/chat_right_bg.9.png
create mode 100644 app/src/main/res/drawable-xhdpi/chat_right_qp.9.png
create mode 100644 app/src/main/res/drawable/drawable_edit_normal.xml
create mode 100644 app/src/main/res/layout/activity_clound_solution.xml
create mode 100644 app/src/main/res/layout/activity_comment.xml
create mode 100644 app/src/main/res/layout/activity_conversation.xml
create mode 100644 app/src/main/res/layout/activity_mainsss.xml
create mode 100644 app/src/main/res/layout/criclefragment.xml
create mode 100644 app/src/main/res/layout/findfragment.xml
create mode 100644 app/src/main/res/layout/findlist_item.xml
create mode 100644 app/src/main/res/layout/findtwo_activity.xml
create mode 100644 app/src/main/res/layout/findtwo_fragment.xml
create mode 100644 app/src/main/res/layout/fragment_questions.xml
create mode 100644 app/src/main/res/layout/item_question_left.xml
create mode 100644 app/src/main/res/layout/item_question_right.xml
create mode 100644 app/src/main/res/layout/item_rcv_empty.xml
create mode 100644 app/src/main/res/layout/item_rcv_load_and_all.xml
create mode 100644 app/src/main/res/layout/priletfragment.xml
create mode 100644 app/src/main/res/layout/private_let_item.xml
create mode 100644 app/src/main/res/mipmap-hdpi/icon_live.png
create mode 100644 app/src/main/res/mipmap-hdpi/icon_watch_k.png
create mode 100644 app/src/main/res/mipmap-hdpi/marking_down_pic.png
create mode 100644 app/src/main/res/mipmap-mdpi/icon_live.png
create mode 100644 app/src/main/res/mipmap-mdpi/icon_watch_k.png
create mode 100644 app/src/main/res/mipmap-mdpi/marking_down_pic.png
create mode 100644 app/src/main/res/mipmap-xhdpi/icon_live.png
create mode 100644 app/src/main/res/mipmap-xhdpi/icon_watch_k.png
create mode 100644 app/src/main/res/mipmap-xhdpi/marking_down_pic.png
create mode 100644 app/src/main/res/mipmap-xxhdpi/fangan_location.png
create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_live.png
create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_watch_k.png
create mode 100644 app/src/main/res/mipmap-xxhdpi/marking_down_pic.png
create mode 100644 app/src/main/res/mipmap-xxhdpi/message_remind.png
create mode 100644 app/src/main/res/mipmap-xxxhdpi/icon_live.png
create mode 100644 app/src/main/res/mipmap-xxxhdpi/icon_watch_k.png
create mode 100644 app/src/main/res/mipmap-xxxhdpi/marking_down_pic.png
create mode 100644 citypicker/.gitignore
create mode 100644 citypicker/build.gradle
create mode 100644 citypicker/proguard-rules.pro
create mode 100644 citypicker/src/androidTest/java/com/zaaach/citypicker/ExampleInstrumentedTest.java
create mode 100644 citypicker/src/main/AndroidManifest.xml
create mode 100644 citypicker/src/main/assets/china_cities_v2.db
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/CityPicker.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/CityPickerDialogFragment.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/adapter/CityListAdapter.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/adapter/GridListAdapter.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/adapter/InnerListener.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/adapter/OnPickListener.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/adapter/decoration/DividerItemDecoration.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/adapter/decoration/GridItemDecoration.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/adapter/decoration/SectionItemDecoration.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/db/DBConfig.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/db/DBManager.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/model/City.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/model/HotCity.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/model/LocateState.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/model/LocatedCity.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/util/ScreenUtil.java
create mode 100644 citypicker/src/main/java/com/zaaach/citypicker/view/SideIndexBar.java
create mode 100644 citypicker/src/main/res/anim/cp_push_bottom_in.xml
create mode 100644 citypicker/src/main/res/anim/cp_push_bottom_out.xml
create mode 100644 citypicker/src/main/res/drawable/cp_grid_item_bg.xml
create mode 100644 citypicker/src/main/res/drawable/cp_overlay_bg.xml
create mode 100644 citypicker/src/main/res/layout/cp_dialog_city_picker.xml
create mode 100644 citypicker/src/main/res/layout/cp_empty_view.xml
create mode 100644 citypicker/src/main/res/layout/cp_grid_item_layout.xml
create mode 100644 citypicker/src/main/res/layout/cp_list_item_default_layout.xml
create mode 100644 citypicker/src/main/res/layout/cp_list_item_hot_layout.xml
create mode 100644 citypicker/src/main/res/layout/cp_list_item_location_layout.xml
create mode 100644 citypicker/src/main/res/layout/cp_search_view.xml
create mode 100644 citypicker/src/main/res/mipmap-xxhdpi/cp_icon_clear_all.png
create mode 100644 citypicker/src/main/res/mipmap-xxhdpi/cp_icon_empty.png
create mode 100644 citypicker/src/main/res/values-w820dp/dimens.xml
create mode 100644 citypicker/src/main/res/values/attrs.xml
create mode 100644 citypicker/src/main/res/values/colors.xml
create mode 100644 citypicker/src/main/res/values/dimens.xml
create mode 100644 citypicker/src/main/res/values/strings.xml
create mode 100644 citypicker/src/main/res/values/styles.xml
create mode 100644 citypicker/src/test/java/com/zaaach/citypicker/ExampleUnitTest.java
diff --git a/.idea/modules.xml b/.idea/modules.xml
index b7b8e95..29bb906 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -5,6 +5,7 @@
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8d136a0..15e80cd 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -26,6 +26,7 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
@@ -60,4 +61,7 @@ dependencies {
// implementation 'com.contrarywind:Android-PickerView:3.2.6'
implementation 'com.contrarywind:Android-PickerView:4.1.9'
implementation files('libs/fastjson-1.1.43.android.jar')
+ implementation 'org.jsoup:jsoup:1.10.1'
+ api 'com.amap.api:location:latest.integration'
+ implementation project(':citypicker')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d0e51eb..e3b6390 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,10 +1,12 @@
+
+
-
-
-
+
+
+
-
-
+
+
+
+
+
+
-
-
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
+ android:screenOrientation="portrait">
-
-
+
+
+
+
+
+
-
+
+
-
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseActivity.java b/app/src/main/java/com/example/administrator/seven/base/BaseActivity.java
index 3c7f724..b31f2f8 100644
--- a/app/src/main/java/com/example/administrator/seven/base/BaseActivity.java
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseActivity.java
@@ -1,93 +1,167 @@
package com.example.administrator.seven.base;
+import android.Manifest;
import android.app.Activity;
-import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
-import android.graphics.Color;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.net.Uri;
import android.os.Bundle;
import android.text.TextPaint;
-import android.util.TypedValue;
+import android.util.DisplayMetrics;
import android.view.View;
-import android.view.inputmethod.InputMethodManager;
+import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.administrator.seven.R;
+import com.example.administrator.seven.dialog.LoadingDialog;
import com.example.administrator.seven.dialog.PersonnelDialogHelptwo;
-import com.example.administrator.seven.utils.StatusBarUtils;
+import com.example.administrator.seven.utils.NetUtils;
+import com.example.administrator.seven.utils.StatusBarUtil;
+import com.example.administrator.seven.utils.ToastUtils;
-import androidx.annotation.IdRes;
-import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
+import androidx.annotation.ColorRes;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.FragmentActivity;
/**
- * 日期:2017.01.03
- *
- * 作者:xudiwei
- *
- * 描述:Baseactivity添加相关的方法
- *
- *
+ * @author: qndroid
+ * @function: 所有Activity的基类,用来处理一些公共事件,如:数据统计
+ * @date: 16/3/10
*/
-public class BaseActivity extends AppCompatActivity {
+public abstract class BaseActivity extends FragmentActivity {
- private ProgressDialog mProgressDialog;
+ private LoadingDialog mProgressDialog;
+ public static final int REQUEST_CALL_PERMISSION = 10111; //拨号请求码
+ protected final String TAG = this.getClass().getSimpleName();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ reverseStatusColor();
+ StatusBarUtil.transparencyBar(this); //设置状态栏全透明
+ StatusBarUtil.StatusBarLightMode(this); //设置白底黑字
+ initFontScale();
+ }
+
+
+
+ /**
+ * 拨打电话(直接拨打)
+ *
+ * @param telPhone 电话
+ */
+ public void call(String telPhone) {
+ if (checkReadPermission(Manifest.permission.CALL_PHONE, REQUEST_CALL_PERMISSION)) {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_CALL);
+ Uri phoneNum = Uri.parse("tel:" + telPhone);
+ intent.setData(phoneNum);
+ startActivity(intent);
+ }
+
+ }
+
+ /**
+ * 判断是否有某项权限
+ *
+ * @param string_permission 权限
+ * @param request_code 请求码
+ * @return
+ */
+ public boolean checkReadPermission(String string_permission, int request_code) {
+ boolean flag = false;
+ if (ContextCompat.checkSelfPermission(this, string_permission) == PackageManager.PERMISSION_GRANTED) {//已有权限
+ flag = true;
+ } else {//申请权限
+ ActivityCompat.requestPermissions(this, new String[]{string_permission}, request_code);
+ }
+ return flag;
+ }
+
+ private void initFontScale() {
+ Configuration configuration = getResources().getConfiguration();
+ configuration.fontScale = (float) 1;
+ //0.85 小, 1 标准大小, 1.15 大,1.3 超大 ,1.45 特大
+ DisplayMetrics metrics = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(metrics);
+ metrics.scaledDensity = configuration.fontScale * metrics.density;
+ getBaseContext().getResources().updateConfiguration(configuration, metrics);
+ }
@Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- initStyle();
+ protected void onStop() {
+ super.onStop();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
}
/**
- * 初始化状态栏
+ * 申请指定的权限.
*/
- public void initStyle() {
- StatusBarUtils.setStateBaeColor(this, Color.parseColor("#131313"));
- }
- /**
- * 字体加粗
- */
- protected void Thickening(TextView mLayTopTitle) {
- TextPaint tp = mLayTopTitle.getPaint();
- tp.setFakeBoldText(true);
- }
+ public void requestPermission(int code, String... permissions) {
-
-
-
-
-
- public void toast(String msg) {
- Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
- }
-
- public void toast(@StringRes int ids) {
- this.toast(getString(ids));
+ ActivityCompat.requestPermissions(this, permissions, code);
}
/**
- * 线程安全的toast
- *
- * @param msg
+ * 初始化进度对话框
*/
- public void toastThreadSafe(final String msg) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- toast(msg);
+
+ public void showProgressDialog(String dialogMessage,Context mContext) {
+ mProgressDialog = new LoadingDialog(mContext);
+ mProgressDialog.setCanceledOnTouchOutside(false);
+// mProgressDialog.setMessage(dialogMessage);
+ mProgressDialog.show();
+ }
+
+ /**
+ * 关闭进度对话框
+ */
+
+ public void dismissProgressDialog() {
+ if (null != mProgressDialog && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
+ /**
+ * 判断是否有指定的权限
+ */
+ public boolean hasPermission(String... permissions) {
+
+ for (String permisson : permissions) {
+ if (ContextCompat.checkSelfPermission(this, permisson)
+ != PackageManager.PERMISSION_GRANTED) {
+ return false;
}
- });
-
+ }
+ return true;
}
+ /**
+ * 处理整个应用用中的SDCard业务
+ */
+ public void doSDCardPermission() {
+ }
+
+ /**
+ * 隐藏状态栏
+ */
+ public void hiddenStatusBar() {
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ }
/**
* 开启一个Activity
*
@@ -96,88 +170,68 @@ public class BaseActivity extends AppCompatActivity {
public void startActivity(Class extends Activity> clz) {
startActivity(new Intent(this, clz));
}
-
/**
- * 开启一个Activity并关闭当前Activity
+ * 改变状态栏颜色
*
- * @param clz
+ * @param color
*/
- public void startActivityAndFinishSelf(Class extends Activity> clz) {
- startActivity(clz);
- finish();
+ public void changeStatusBarColor(@ColorRes int color) {
+ // StatusBarUtil.setStatusBarColor(this, color);
}
/**
- * 初始化进度对话框
+ * 调整状态栏为亮模式,这样状态栏的文字颜色就为深模式了。
*/
- public void showProgressDialog(String dialogMessage) {
- mProgressDialog = new ProgressDialog(this);
- mProgressDialog.setCanceledOnTouchOutside(false);
- mProgressDialog.setMessage(dialogMessage);
- mProgressDialog.show();
+ private void reverseStatusColor() {
+// StatusBarUtil.statusBarLightMode(this);
}
+
/**
- * 关闭进度对话框
+ * 弹出提示对话框
*/
- public void dismissProgressDialog() {
- if (null != mProgressDialog && mProgressDialog.isShowing()) {
- mProgressDialog.dismiss();
+
+ public void alertmessage(Context context,String msg) {
+
+ new PersonnelDialogHelptwo().showDownloadDialog(BaseActivity.this, msg,"确定", new PersonnelDialogHelptwo.ClickListener() {
+ @Override
+ public void confirm() {
+
+ }
+ });
+ }
+ public void messageDialog(String str) {
+ new PersonnelDialogHelptwo().showDownloadDialog(BaseActivity.this, str,"确定", new PersonnelDialogHelptwo.ClickListener() {
+ @Override
+ public void confirm() {
+
+ }
+ });
+ }
+
+ public void toast(String msg) {
+ Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
+ }
+ /**
+ * 字体加粗
+ */
+ protected void Thickening(TextView mLayTopTitle) {
+ TextPaint tp = mLayTopTitle.getPaint();
+ tp.setFakeBoldText(true);
+ }
+ protected void Thickeningtwo(TextView mLayTopTitle) {
+ TextPaint tp = mLayTopTitle.getPaint();
+ tp.setFakeBoldText(false);
+ }
+
+
+ public boolean ConnectNetwork(Context context,String str) {
+ if (!NetUtils.isConnected(context)) {
+ ToastUtils.showToast(context, str);
+ return true;
}
+ return false;
}
-
- /**
- * 初始化刷新控件的参数
- *
- * @param ids 刷新控件的id
- */
- protected SwipeRefreshLayout setSwipeRefreshLayout(@IdRes int ids) {
- SwipeRefreshLayout mRefreshLayout = (SwipeRefreshLayout) findViewById(ids);
- mRefreshLayout.setProgressViewOffset(false, 0,
- (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics()));
- mRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
- return mRefreshLayout;
- }
-
-
- /**
- * 显示或隐藏软键盘,如果当时是显示则隐藏,如果当前是隐藏则显示
- */
- public void showOrHide() {
- InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
- // 得到InputMethodManager的实例
- if (imm.isActive()) {
- // 如果开启
- imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
- InputMethodManager.HIDE_NOT_ALWAYS);
-
- }
- }
-
-
- /**
- * 隐藏软键盘
- */
- public void hintKb() {
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- /**点击空白处隐藏键盘*/
- if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) {
- imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
- }
-
- }
-
- /**
- * 显示软键盘
- *
- * @param view
- */
- public void showKb(View view) {
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(view, InputMethodManager.RESULT_SHOWN);
- imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
- }
-
/**
* 初始化一般返回按钮事件
*/
@@ -194,13 +248,4 @@ public class BaseActivity extends AppCompatActivity {
});
}
}
- public void messageDialog(String str) {
- new PersonnelDialogHelptwo().showDownloadDialog(BaseActivity.this, str,"确定", new PersonnelDialogHelptwo.ClickListener() {
- @Override
- public void confirm() {
-
- }
- });
- }
-
}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseRecycleAdapter.java b/app/src/main/java/com/example/administrator/seven/base/BaseRecycleAdapter.java
new file mode 100644
index 0000000..38949aa
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseRecycleAdapter.java
@@ -0,0 +1,257 @@
+package com.example.administrator.seven.base;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.example.administrator.seven.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import static com.example.administrator.seven.common.Constants.LIMIT;
+
+
+/**
+ * BaseRecycleAdapter
+ * (๑• . •๑)
+ * 类描述:普通RecycleView的普通BaseAdapter
+ * 支持多类型item,支持加载更多,通过{{@link #canLoadMore}开启}
+ * 支持Empty布局
+ * simple{@link ProjectAdapter}
+ * Created by LeiXiaoXing on 2017/3/17 14:26
+ */
+
+public abstract class BaseRecycleAdapter> extends RecyclerView.Adapter> {
+
+ /**
+ * Item类型: 加载更多
+ */
+ private static final int ITEM_TYPE_LOAD_MORE = -1;
+ /**
+ * Item类型: Empty
+ */
+ private static final int ITEM_TYPE_EMPTY = -2;
+ public List mEList;
+ protected Context mContext;
+ private OnItemClickListener mListener;
+ /**
+ * 是否支付加载更多,默认不开启
+ */
+ private boolean canLoadMore;
+ /**
+ * 是否加载完全部,默认可以加载更多
+ */
+ private boolean isLoadAll;
+
+ /**
+ * 构造Adapter
+ *
+ * @param context 上下文
+ * @param eList 数据集合
+ * @param canLoadMore 是否支持加载更多
+ */
+ protected BaseRecycleAdapter(Context context, List eList, boolean canLoadMore) {
+ mEList = eList;
+ mContext = context;
+ this.canLoadMore = canLoadMore;
+ }
+
+ public List getEList() {
+ return mEList;
+ }
+
+ @Override
+ public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if (viewType == ITEM_TYPE_LOAD_MORE) {
+ //返回加载更多类型 ViewHolder
+ View view = LayoutInflater.from(mContext).inflate(R.layout.item_rcv_load_and_all, parent, false);
+ return new LoadMoreViewHolder(view);
+ } else if (viewType == ITEM_TYPE_EMPTY) {
+ //返回空布局类型 ViewHolder
+ View view = LayoutInflater.from(mContext).inflate(R.layout.item_rcv_empty, parent, false);
+ return new EmptyViewHolder(view);
+ } else {
+ View view = LayoutInflater.from(mContext).inflate(getItemLayout(viewType), parent, false);
+ return createViewHolder(view, viewType);
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(final BaseViewHolder holder, final int position) {
+ holder.bindView(mEList.get(position), position);
+ if (!canLoadMore || position <= LIMIT
+ || position != mEList.size() - 1
+ && mEList.get(0) != null) {
+ //在没有开启加载更多时,开启加更多但未满一页数据时,大于一页数据但不是加载更多的item时,并且为空内容时
+ //点击事件生效
+ holder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mListener != null) {
+ if (mEList.get(position) == null) {
+ return;
+ }
+ mListener.onItemClick(mEList.get(position),position);
+ }
+ }
+ });
+ }
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (canLoadMore && position > LIMIT - 1 && position == mEList.size() - 1) {
+ //如果开启加载更多,显示加载中
+ return ITEM_TYPE_LOAD_MORE;
+ } else if (mEList.get(0) == null) {
+ //如果无内容,显示空布局
+ return ITEM_TYPE_EMPTY;
+ }
+ return getCustomItemViewType(position);
+ }
+
+ /**
+ * 创建自定义的item Type
+ *
+ * @param position item下标
+ * @return 自定义item Type
+ */
+ protected int getCustomItemViewType(int position) {
+ return 0;
+ }
+
+ /**
+ * 创建ViewHolder
+ *
+ * @param view item
+ * @param viewType item视图类型
+ * @return ViewHolder
+ */
+ protected abstract VH createViewHolder(View view, int viewType);
+
+ /**
+ * 获取子项布局文件id
+ *
+ * @return 子项布局文件id
+ */
+ protected abstract int getItemLayout(int viewType);
+
+ /**
+ * 刷新列表数据
+ *
+ * @param entitys 新的数据集合
+ */
+ public void upDate(List entitys) {
+ this.mEList = entitys;
+ isLoadAll = false;//刷新列表,取消已加载完全部状态
+ if (entitys != null && entitys.size() != 0) {
+ //有内容,移除EmptyView
+ mEList.remove(null);
+ }
+ notifyDataSetChanged();
+ }
+
+ /**
+ * 追加数据并更新
+ *
+ * @param entitys 新的数据集合
+ */
+ public void upDateAdd(List entitys) {
+
+ if (this.mEList == null) {
+ mEList = entitys;
+ } else if (entitys != null) {
+ if (canLoadMore) {
+ //k
+ isLoadAll = entitys.size() == 0;
+ if (entitys.size() != 0) {
+ //移除加载更多
+ isLoadAll = false;
+ mEList.remove(null);
+ }
+
+ }
+ mEList.addAll(entitys);
+ }
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public int getItemCount() {
+ if (canLoadMore && mEList != null && mEList.size() >= LIMIT) {
+ //数据条数大于每页条数时显示加载更多
+ //添加加载更多到尾部
+ if (!mEList.contains(null)) {
+ mEList.add(null);
+ }
+ } else if (mEList == null || mEList.size() == 0) {
+ //无内容,添加EmptyView
+ mEList = new ArrayList<>();
+ mEList.add(null);
+ }
+ return mEList.size();
+ }
+
+ public boolean isLoadAll() {
+ return isLoadAll;
+ }
+
+ public void setOnItemClickListener(OnItemClickListener listener) {
+ mListener = listener;
+ }
+
+
+ public interface OnItemClickListener {
+ void onItemClick(E entity, int position);
+ }
+
+ /**
+ * 加载更多item以及加载完全部 ViewHolder
+ */
+ private class LoadMoreViewHolder extends BaseViewHolder {
+
+ private View viewLoadAll;
+ private View viewLoading;
+
+ LoadMoreViewHolder(View itemView) {
+ super(itemView);
+ }
+
+ @Override
+ protected void initView(View itemView) {
+ viewLoadAll = itemView.findViewById(R.id.view_load_all);
+ viewLoading = itemView.findViewById(R.id.view_loading);
+ }
+
+ @Override
+ protected void bindView(E entity, int position) {
+ viewLoadAll.setVisibility(isLoadAll ? View.VISIBLE : View.GONE);
+ viewLoading.setVisibility(isLoadAll ? View.GONE : View.VISIBLE);
+ }
+ }
+
+ /**
+ * 空布局ViewHolder
+ */
+ private class EmptyViewHolder extends BaseViewHolder {
+
+ EmptyViewHolder(View view) {
+ super(view);
+ }
+
+ @Override
+ protected void initView(View itemView) {
+
+ }
+
+ @Override
+ protected void bindView(E entity, int position) {
+
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BaseTreeActivity.java b/app/src/main/java/com/example/administrator/seven/base/BaseTreeActivity.java
index 60eaa92..b2461ee 100644
--- a/app/src/main/java/com/example/administrator/seven/base/BaseTreeActivity.java
+++ b/app/src/main/java/com/example/administrator/seven/base/BaseTreeActivity.java
@@ -14,7 +14,6 @@ import android.widget.Toast;
import com.example.administrator.seven.R;
import com.example.administrator.seven.dialog.LoadingDialogy;
-import com.example.administrator.seven.utils.StatusBarUtils;
import com.hannesdorfmann.mosby3.mvp.MvpActivity;
import com.hannesdorfmann.mosby3.mvp.MvpPresenter;
import com.hannesdorfmann.mosby3.mvp.MvpView;
@@ -41,7 +40,6 @@ public abstract class BaseTreeActivity extends RecyclerView.ViewHolder {
+
+ protected BaseViewHolder(View itemView) {
+ super(itemView);
+ initView(itemView);
+ }
+
+ /**
+ * 初始化视图
+ *
+ * @param itemView 子视图
+ */
+ protected abstract void initView(View itemView);
+
+ /**
+ * 绑定数据
+ *
+ * @param entity 实体对象
+ */
+ protected abstract void bindView(E entity,int position);
+}
diff --git a/app/src/main/java/com/example/administrator/seven/base/BasetwoFragment.java b/app/src/main/java/com/example/administrator/seven/base/BasetwoFragment.java
new file mode 100644
index 0000000..8b16d34
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/base/BasetwoFragment.java
@@ -0,0 +1,280 @@
+package com.example.administrator.seven.base;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.dialog.LoadingDialog;
+import com.example.administrator.seven.widget.TitleBar;
+import com.hannesdorfmann.mosby3.mvp.MvpFragment;
+import com.hannesdorfmann.mosby3.mvp.MvpPresenter;
+import com.hannesdorfmann.mosby3.mvp.MvpView;
+
+import androidx.annotation.IdRes;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
+
+/**
+ * BaseTreeFragment
+ * (๑• . •๑)
+ * 类描述: Fragment基类,使用第三方MVP
+ * Created by LeiXiaoXing on 2017/3/14 09:57
+ */
+
+public abstract class BasetwoFragment> extends MvpFragment {
+
+ protected final String TAG = getClass().getSimpleName();
+ protected Context mContext;
+ protected Activity mActivity;
+ private LoadingDialog mProgressDialog;
+ /**
+ * 视图是否已经初初始化
+ */
+ protected boolean isInit = false;
+ protected boolean isLoad = false;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+
+ return inflater.inflate(getFragmentLayoutId(), container, false);
+ }
+
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ initView(view);
+ initData();
+ initEvent(view);
+ isInit = true;
+ isCanLoadData();
+ }
+
+ /**
+ * 获取Fragment布局文件id
+ *
+ * @return Fragment布局文件id
+ */
+ protected abstract int getFragmentLayoutId();
+
+ /**
+ * 初始化视图状态
+ */
+ protected abstract void initView(View view);
+
+ /**
+ * 初始化数据参数
+ */
+ protected abstract void initData();
+
+ /**
+ * 初始化操作事件
+ */
+ protected abstract void initEvent(View view);
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mContext = context;
+ mActivity = getActivity();
+
+ }
+
+ /**
+ * 视图是否已经对用户可见,系统的方法,setUserVisibleHint在onCreate之前调用
+ * 1.第一次创建Fragment时,加载数据会报空指针异常,所以要加个判断是否已经初始化
+ * 2.当Fragment已经初始化,再次可见时会直接调用此方法,此时可以直接加载数据
+ * 所以要在两个地方调用加载数据
+ */
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ isCanLoadData();
+ }
+
+ /**
+ * 是否可以加载数据
+ * 可以加载数据的条件:
+ * 1.视图已经初始化
+ * 2.视图对用户可见
+ */
+ private void isCanLoadData() {
+ if (!isInit) {
+ return;
+ }
+
+ if (getUserVisibleHint()) {
+ setUpView();
+ isLoad = true;
+ } else {
+ if (isLoad) {
+ stopLoad();
+ }
+ }
+ }
+
+ /**
+ * 当视图初始化并且对用户可见的时候去真正的加载数据
+ */
+ protected void setUpView() {
+ }
+
+ /**
+ * 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以调用此方法
+ */
+ protected void stopLoad() {
+ }
+
+ /**
+ * toast
+ *
+ * @param msg 吐丝的内容
+ */
+ public void toast(String msg) {
+ Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
+ }
+
+ /**
+ * toast
+ *
+ * @param ids 吐丝的内容的字符串ids
+ */
+ public void toast(@StringRes int ids) {
+ toast(getString(ids));
+ }
+
+
+ /**
+ * 线程安全的toast
+ *
+ * @param msg
+ */
+ public void toastThreadSafe(final String msg) {
+ if (null != mActivity) {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(msg);
+ }
+ });
+ }
+ }
+
+ /**
+ * 线程安全的toast
+ *
+ * @param ids
+ */
+ public void toastThreadSafe(@StringRes final int ids) {
+ if (null != mActivity) {
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ toast(ids);
+ }
+ });
+ }
+ }
+
+ /**
+ * 开启一个Activity
+ *
+ * @param clz 需要开启的Activity
+ */
+ public void startActivity(Class extends Activity> clz) {
+ if (null != mContext) {
+ startActivity(new Intent(mContext, clz));
+// getActivity().overridePendingTransition(R.anim.trans_next_in,R.anim.trans_next_out);
+ }
+ }
+
+ /**
+ * 开启一个Activity,并finish掉当前的Activity
+ *
+ * @param clz
+ */
+ public void startActivityAndFinishSelf(Class extends Activity> clz) {
+ if (null != mActivity) {
+ startActivity(clz);
+ mActivity.finish();
+ }
+
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ }
+
+ /**
+ * 初始化进度对话框
+ */
+
+ public void showProgressDialog(String dialogMessage) {
+ mProgressDialog = new LoadingDialog(mContext);
+ mProgressDialog.setCanceledOnTouchOutside(false);
+// mProgressDialog.setMessage(dialogMessage);
+ mProgressDialog.show();
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ Log.d(TAG, "onHiddenChanged");
+ }
+
+ /**
+ * 关闭进度对话框
+ */
+
+ public void dismissProgressDialog() {
+ if (null != mProgressDialog && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
+ /**
+ * 初始化刷新控件的参数
+ *
+ * @param ids 刷新控件的id
+ */
+ protected SwipeRefreshLayout setSwipeRefreshLayout(@IdRes int ids) {
+ SwipeRefreshLayout mRefreshLayout = (SwipeRefreshLayout) getView().findViewById(ids);
+ mRefreshLayout.setProgressViewOffset(false, 0,
+ (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics()));
+ mRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
+ return mRefreshLayout;
+ }
+
+ /**
+ * 设置标题栏参数
+ *
+ * @param titleIds 标题栏的id
+ * @param title 标题
+ * @param goneLeftBtn 左边按钮是否显示
+ * @param goneRightBtn 右边按钮是否显示
+ * @param titleBarClickListener 左右边的按钮点击事件回调接口
+ * @return 返回设置好的titlebar
+ */
+ public TitleBar setTitleBar(@IdRes int titleIds, String title
+ , boolean goneLeftBtn, boolean goneRightBtn, TitleBar.OnTitleBarClickListener titleBarClickListener) {
+ TitleBar titleBar = (TitleBar) getView().findViewById(titleIds);
+ titleBar.setTitle(title);
+ titleBar.visibleIvLeftBtn(goneLeftBtn);
+ titleBar.visibleIvRightBtn(goneRightBtn);
+ titleBar.setOnTitleBarClickListener(titleBarClickListener);
+ return titleBar;
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/common/Constants.java b/app/src/main/java/com/example/administrator/seven/common/Constants.java
new file mode 100644
index 0000000..b235710
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/common/Constants.java
@@ -0,0 +1,88 @@
+package com.example.administrator.seven.common;
+
+/**
+ * Created by Administrator on 2016/1/10.
+ * 作者:xudiwei
+ *
+ * 描述:常量类
+ */
+
+public class Constants {
+ /**
+ * 模拟网络请求成功
+ */
+ public static final int SUCCESS = 1;
+ /**
+ * 模拟网络请求失败
+ */
+ public static final int FAILE = 0;
+
+ /**
+ * 模拟数据网络耗时
+ */
+ public static final int LOADING_TIME = 1500;
+
+ /**
+ * 模拟数据每页长度
+ */
+ public static final int LIMIT = 20;
+
+ /**
+ * 讯飞语音appid
+ */
+ public static final String IFLYTEK_APPID = "58a176c2";
+ /**
+ * 当前App创建在Sd卡里的根目录,其它的目录都要创建在App_root_dir里面。
+ */
+ public static final String APP_ROOT_DIR = "LifeTree";
+ /**
+ * 存图片的dir
+ */
+ public static final String IMG_DIR = APP_ROOT_DIR + "/img";
+ /**
+ * 图片预览里保存图片的目录
+ */
+ public static final String SAVE_IMG_DIR = APP_ROOT_DIR + "/save";
+ /**
+ * apk下载存放目录
+ */
+ public static final String APK_DIR = APP_ROOT_DIR + "/apk";
+ /**
+ * 缓存目录
+ */
+ public static final String CACHE_DIR = APP_ROOT_DIR + "/cache";
+ /**
+ * SharedPreferences 文件名
+ */
+ public static final String SP_CONFIG_FILE_NAME = "config";
+ private static final String TAG = "Constants";
+ /**
+ * 当前用户的user_id(token)
+ */
+ private static String userId = "";
+ /**
+ * 当前用户的角色 1=普通用户 2=老师 3=义工
+ */
+ // private static int role = -1;
+ /**
+ * 当前用户所在的班级
+ */
+ private static String classId = "";
+ /**
+ * 当前用户的IMidentify
+ */
+ private static String identify = "";
+
+
+ /**
+ * 消息内存中的用户相关的信息。
+ */
+ public static void clearAccountInfo() {
+ userId = "";
+ //role = -1;
+ classId = "";
+ identify = "";
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/activity/MainActivity.java b/app/src/main/java/com/example/administrator/seven/main/activity/MainActivity.java
index 86d09d7..e64b3a8 100644
--- a/app/src/main/java/com/example/administrator/seven/main/activity/MainActivity.java
+++ b/app/src/main/java/com/example/administrator/seven/main/activity/MainActivity.java
@@ -7,10 +7,11 @@ import android.widget.TextView;
import com.example.administrator.seven.R;
import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.find.FindFragment;
import com.example.administrator.seven.main.kehu.TraceFragment;
import com.example.administrator.seven.main.my.MyFragment;
import com.example.administrator.seven.main.task.HomeFragment;
-import com.example.administrator.seven.main.zhibo.SendFragment;
+import com.example.administrator.seven.main.zhibo.LivebroFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -23,6 +24,7 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
*/
private TextView mTvHome;
private TextView mTvHomeImg;
+
private RelativeLayout mRlHome;
/**
* 地图
@@ -30,6 +32,10 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
private TextView mTvMap;
private RelativeLayout mRlMap;
private TextView mTvMapImg;
+ /**
+ * 发现
+ */
+ private TextView img_toggle_cms;
/**
* 配送
*/
@@ -46,10 +52,13 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
private FragmentManager fm;
private HomeFragment mHomeFragment;
- private SendFragment mSendFragment;
+ private LivebroFragment mSendFragment;
private TraceFragment traceFragment;
+ private FindFragment mapFragment;
private MyFragment mMineFragment;
private Fragment mCurrent;
+ private RelativeLayout rl_faxian;
+ private TextView tv_find;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -62,8 +71,14 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
private void initView() {
mTvHomeImg = (TextView) findViewById(R.id.tv_home_img);
mTvHome = (TextView) findViewById(R.id.tv_home);
+
+
mRlHome = (RelativeLayout) findViewById(R.id.rl_home);
mRlHome.setOnClickListener(this);
+ rl_faxian = (RelativeLayout) findViewById(R.id.rl_faxian);
+ rl_faxian.setOnClickListener(this);
+ tv_find = (TextView) findViewById(R.id.tv_find);
+
mTvMapImg = (TextView) findViewById(R.id.tv_map_img);
mTvMap = (TextView) findViewById(R.id.tv_map);
mRlMap = (RelativeLayout) findViewById(R.id.rl_map);
@@ -102,12 +117,14 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
mTvHome.setTextColor(getResources().getColor(R.color.colortheme));
mTvSend.setTextColor(getResources().getColor(R.color.colorhui));
+ tv_find.setTextColor(getResources().getColor(R.color.colorhui));
mTvMap.setTextColor(getResources().getColor(R.color.colorhui));
mTvMy.setTextColor(getResources().getColor(R.color.colorhui));
hideFragment(mSendFragment, fragmentTransaction);
hideFragment(traceFragment, fragmentTransaction);
+ hideFragment(mapFragment, fragmentTransaction);
hideFragment(mMineFragment, fragmentTransaction);
if (mHomeFragment == null) {
fragmentTransaction.add(R.id.content_layout, mHomeFragment);
@@ -124,21 +141,48 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
mTvHome.setTextColor(getResources().getColor(R.color.colorhui));
mTvSend.setTextColor(getResources().getColor(R.color.colortheme));
+ tv_find.setTextColor(getResources().getColor(R.color.colorhui));
mTvMap.setTextColor(getResources().getColor(R.color.colorhui));
mTvMy.setTextColor(getResources().getColor(R.color.colorhui));
hideFragment(mHomeFragment, fragmentTransaction);
hideFragment(traceFragment, fragmentTransaction);
+ hideFragment(mapFragment, fragmentTransaction);
hideFragment(mMineFragment, fragmentTransaction);
if (mSendFragment == null) {
- mSendFragment = new SendFragment();
+ mSendFragment = new LivebroFragment();
fragmentTransaction.add(R.id.content_layout, mSendFragment);
} else {
mCurrent = mSendFragment;
fragmentTransaction.show(mSendFragment);
}
break;
+ case R.id.rl_faxian:
+ mTvHomeImg.setBackgroundResource(R.mipmap.icon_task_hui);
+ mTvSendImg.setBackgroundResource(R.mipmap.icon_zhibohui);
+ mTvMapImg.setBackgroundResource(R.mipmap.icon_kehuhui);
+ mTvMineImg.setBackgroundResource(R.mipmap.icon_wodehui);
+
+ mTvHome.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvSend.setTextColor(getResources().getColor(R.color.colorhui));
+ tv_find.setTextColor(getResources().getColor(R.color.colortheme));
+ mTvMap.setTextColor(getResources().getColor(R.color.colorhui));
+ mTvMy.setTextColor(getResources().getColor(R.color.colorhui));
+
+
+ hideFragment(mHomeFragment, fragmentTransaction);
+ hideFragment(mSendFragment, fragmentTransaction);
+ hideFragment(traceFragment, fragmentTransaction);
+ hideFragment(mMineFragment, fragmentTransaction);
+ if (mapFragment == null) {
+ mapFragment = new FindFragment();
+ fragmentTransaction.add(R.id.content_layout, mapFragment);
+ } else {
+ mCurrent = mapFragment;
+ fragmentTransaction.show(mapFragment);
+ }
+ break;
case R.id.rl_map:
mTvHomeImg.setBackgroundResource(R.mipmap.icon_task_hui);
mTvSendImg.setBackgroundResource(R.mipmap.icon_zhibohui);
@@ -147,12 +191,14 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
mTvHome.setTextColor(getResources().getColor(R.color.colorhui));
mTvSend.setTextColor(getResources().getColor(R.color.colorhui));
+ tv_find.setTextColor(getResources().getColor(R.color.colorhui));
mTvMap.setTextColor(getResources().getColor(R.color.colortheme));
mTvMy.setTextColor(getResources().getColor(R.color.colorhui));
hideFragment(mHomeFragment, fragmentTransaction);
hideFragment(mSendFragment, fragmentTransaction);
+ hideFragment(mapFragment, fragmentTransaction);
hideFragment(mMineFragment, fragmentTransaction);
if (traceFragment == null) {
traceFragment = new TraceFragment();
@@ -170,12 +216,14 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{
mTvHome.setTextColor(getResources().getColor(R.color.colorhui));
mTvSend.setTextColor(getResources().getColor(R.color.colorhui));
+ tv_find.setTextColor(getResources().getColor(R.color.colorhui));
mTvMap.setTextColor(getResources().getColor(R.color.colorhui));
mTvMy.setTextColor(getResources().getColor(R.color.colortheme));
hideFragment(mHomeFragment, fragmentTransaction);
hideFragment(mSendFragment, fragmentTransaction);
+ hideFragment(mapFragment, fragmentTransaction);
hideFragment(traceFragment, fragmentTransaction);
if (mMineFragment == null) {
mMineFragment = new MyFragment();
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/CloundSolutionActivity.java b/app/src/main/java/com/example/administrator/seven/main/find/CloundSolutionActivity.java
new file mode 100644
index 0000000..e927e41
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/CloundSolutionActivity.java
@@ -0,0 +1,220 @@
+package com.example.administrator.seven.main.find;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.amap.api.location.AMapLocation;
+import com.amap.api.location.AMapLocationClient;
+import com.amap.api.location.AMapLocationClientOption;
+import com.amap.api.location.AMapLocationListener;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.zaaach.citypicker.CityPicker;
+import com.zaaach.citypicker.adapter.OnPickListener;
+import com.zaaach.citypicker.model.City;
+import com.zaaach.citypicker.model.HotCity;
+import com.zaaach.citypicker.model.LocateState;
+import com.zaaach.citypicker.model.LocatedCity;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class CloundSolutionActivity extends BaseActivity implements View.OnClickListener, AMapLocationListener {
+
+ private List hotCities;
+ private int anim;
+ private boolean enable;
+
+
+ private TextView titleTv;
+ private ImageView backIv;
+
+ /**
+ * 西安
+ */
+ private TextView mChengshi;
+
+ //声明AMapLocationClient类对象,定位发起端
+ private AMapLocationClient mLocationClient = null;
+ //声明mLocationOption对象,定位参数
+ public AMapLocationClientOption mLocationOption = null;
+ //标识,用于判断是否只显示一次定位信息和用户重新定位
+ private boolean isFirstLoc = true;
+ private String city;
+ private String province;
+ private String cityCode;
+ private String adCode;
+ private View view;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_clound_solution);
+ initView();
+// HotCity();
+ //开始定位
+// location();
+ }
+
+ private void HotCity() {
+ hotCities = new ArrayList<>();
+ hotCities.add(new HotCity("北京", "北京", "101010100"));
+ hotCities.add(new HotCity("上海", "上海", "101020100"));
+ hotCities.add(new HotCity("广州", "广东", "101280101"));
+ hotCities.add(new HotCity("深圳", "广东", "101280601"));
+ hotCities.add(new HotCity("杭州", "浙江", "101210101"));
+ }
+
+ private void initView() {
+ mChengshi = (TextView) findViewById(R.id.chengshi);
+ mChengshi.setOnClickListener(this);
+ view = (View) findViewById(R.id.view);
+
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.leftIv:
+ finish();
+ break;
+ case R.id.chengshi:
+ CityPicker.from(CloundSolutionActivity.this)
+ .enableAnimation(enable)
+ .setAnimationStyle(anim)
+ .setLocatedCity(null)
+ .setHotCities(hotCities)
+ .setOnPickListener(new OnPickListener() {
+ @Override
+ public void onPick(int position, City data) {
+ // mDangqianchengshi.setText(String.format("当前城市:%s,%s", data.getName(), data.getCode()));
+ mChengshi.setText(String.format(data.getName()));
+ Toast.makeText(
+ getApplicationContext(),
+ String.format("点击的数据:%s,%s", data.getName(), data.getCode()),
+ Toast.LENGTH_SHORT)
+ .show();
+ }
+
+ @Override
+ public void onCancel() {
+ Toast.makeText(getApplicationContext(), "取消选择", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onLocate() {
+ //开始定位,这里模拟一下定位
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ CityPicker.from(CloundSolutionActivity.this).locateComplete(new LocatedCity(city, province, adCode), LocateState.SUCCESS);
+ }
+ }, 3000);
+
+
+ }
+ })
+ .show();
+ break;
+
+
+ }
+ }
+
+ private void location() {
+ //初始化定位
+ mLocationClient = new AMapLocationClient(getApplicationContext());
+ //设置定位回调监听
+ mLocationClient.setLocationListener(this);
+ //初始化定位参数
+ mLocationOption = new AMapLocationClientOption();
+ //设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
+ mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
+ //设置是否返回地址信息(默认返回地址信息)
+ mLocationOption.setNeedAddress(true);
+ //设置是否只定位一次,默认为false
+ mLocationOption.setOnceLocation(false);
+ //设置是否强制刷新WIFI,默认为强制刷新
+ mLocationOption.setWifiActiveScan(true);
+ //设置是否允许模拟位置,默认为false,不允许模拟位置
+ mLocationOption.setMockEnable(false);
+ //设置定位间隔,单位毫秒,默认为2000ms
+ mLocationOption.setInterval(2000);
+ //给定位客户端对象设置定位参数
+ mLocationClient.setLocationOption(mLocationOption);
+ //启动定位
+ mLocationClient.startLocation();
+ }
+
+ @Override
+ public void onLocationChanged(AMapLocation aMapLocation) {
+ if (aMapLocation != null) {
+ if (aMapLocation.getErrorCode() == 0) {
+ //定位成功回调信息,设置相关消息
+ aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表
+ aMapLocation.getLatitude();//获取纬度
+ aMapLocation.getLongitude();//获取经度
+ aMapLocation.getAccuracy();//获取精度信息
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date date = new Date(aMapLocation.getTime());
+ df.format(date);//定位时间
+ aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
+ aMapLocation.getCountry();//国家信息
+ aMapLocation.getProvince();//省信息
+ aMapLocation.getCity();//城市信息
+ aMapLocation.getDistrict();//城区信息
+ aMapLocation.getStreet();//街道信息
+ aMapLocation.getStreetNum();//街道门牌号信息
+ aMapLocation.getCityCode();//城市编码
+ aMapLocation.getAdCode();//地区编码
+
+ // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
+ if (isFirstLoc) {
+ //获取定位信息
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(aMapLocation.getCountry() + ""
+ + aMapLocation.getProvince() + ""
+ + aMapLocation.getCity() + ""
+ + aMapLocation.getProvince() + ""
+ + aMapLocation.getDistrict() + ""
+ + aMapLocation.getStreet() + ""
+ + aMapLocation.getStreetNum());
+ Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
+
+ city = aMapLocation.getCity();
+ mChengshi.setText(city);
+ province = aMapLocation.getProvince();
+ cityCode = aMapLocation.getCityCode();
+ adCode = aMapLocation.getAdCode();
+ isFirstLoc = false;
+ mLocationClient.stopLocation();
+ }
+
+
+ } else {
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e("AmapError", "location Error, ErrCode:"
+ + aMapLocation.getErrorCode() + ", errInfo:"
+ + aMapLocation.getErrorInfo());
+ Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();
+ }
+ }
+ }
+
+
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/CommentActivity.java b/app/src/main/java/com/example/administrator/seven/main/find/CommentActivity.java
new file mode 100644
index 0000000..2e44956
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/CommentActivity.java
@@ -0,0 +1,27 @@
+package com.example.administrator.seven.main.find;
+
+import android.os.Bundle;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.find.ui.CommentFragment;
+import com.example.administrator.seven.widget.TitleBar;
+
+/**
+ * 评论
+ */
+public class CommentActivity extends BaseActivity {
+
+ private TitleBar mTitleBar;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_comment);
+ mTitleBar = findViewById(R.id.title_bar);
+ initNormalBack();
+ String num = getIntent().getStringExtra("num");
+ mTitleBar.setTitle("新评论"+"("+num+")");
+ getSupportFragmentManager().beginTransaction().replace(R.id.container,new CommentFragment()).commit();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/ConversationActivity.java b/app/src/main/java/com/example/administrator/seven/main/find/ConversationActivity.java
new file mode 100644
index 0000000..ddf2408
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/ConversationActivity.java
@@ -0,0 +1,26 @@
+package com.example.administrator.seven.main.find;
+
+import android.os.Bundle;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseActivity;
+import com.example.administrator.seven.main.find.ui.CommentFragment;
+import com.example.administrator.seven.widget.TitleBar;
+
+/**
+ * 会话
+ */
+public class ConversationActivity extends BaseActivity {
+ private TitleBar mTitleBar;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_conversation);
+ mTitleBar = findViewById(R.id.title_bar);
+ initNormalBack();
+ String num = getIntent().getStringExtra("num");
+ mTitleBar.setTitle("抖音昵称"+"**");
+ getSupportFragmentManager().beginTransaction().replace(R.id.container,new QuestionsFragment()).commit();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/FindFragment.java b/app/src/main/java/com/example/administrator/seven/main/find/FindFragment.java
new file mode 100644
index 0000000..8802f6a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/FindFragment.java
@@ -0,0 +1,119 @@
+package com.example.administrator.seven.main.find;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.find.ui.FindFragmenttwo;
+import com.example.administrator.seven.main.kehu.activity.ShowAty;
+import com.example.administrator.seven.test.BaseFragment;
+import com.zaaach.citypicker.CityPicker;
+import com.zaaach.citypicker.adapter.OnPickListener;
+import com.zaaach.citypicker.model.City;
+import com.zaaach.citypicker.model.HotCity;
+import com.zaaach.citypicker.model.LocateState;
+import com.zaaach.citypicker.model.LocatedCity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 发现
+ */
+public class FindFragment extends BaseFragment {
+ private int anim;
+ private boolean enable;
+ private List hotCities;
+ private String city;
+ private String province;
+ private String adCode;
+ Context mContext;
+ View view;
+ private RelativeLayout rl_privateletter;
+ private String pagetype="0";//0是家居 1是私信
+ private RelativeLayout dianpubuju;
+ private LinearLayout dianyuanbuju;
+ private TextView marking_fragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mContext = getActivity();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if (view != null) {
+ ViewGroup parent = (ViewGroup) view.getParent();
+ if (parent != null) {
+ parent.removeView(view);
+ }
+ return view;
+ }
+ view = inflater.inflate(R.layout.criclefragment, container, false);
+ getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container,new FindFragmenttwo()).commit();
+ initView(view);
+ HotCity();
+ return view;
+ }
+ private void HotCity() {
+ hotCities = new ArrayList<>();
+ hotCities.add(new HotCity("北京", "北京", "101010100"));
+ hotCities.add(new HotCity("上海", "上海", "101020100"));
+ hotCities.add(new HotCity("广州", "广东", "101280101"));
+ hotCities.add(new HotCity("深圳", "广东", "101280601"));
+ hotCities.add(new HotCity("杭州", "浙江", "101210101"));
+ }
+
+ private void initView(View mContentView) {
+ marking_fragment = (TextView)view.findViewById(R.id.marking_fragment);
+ dianpubuju = (RelativeLayout)view.findViewById(R.id.dianpubuju);
+ dianyuanbuju = (LinearLayout)view.findViewById(R.id.dianyuanbuju);
+ rl_privateletter = (RelativeLayout)view.findViewById(R.id.rl_privateletter);
+ rl_privateletter.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(pagetype.equals("0")){
+ pagetype="1";
+ dianpubuju.setVisibility(View.GONE);
+ dianyuanbuju.setVisibility(View.VISIBLE);
+
+ }else {
+ pagetype="0";
+ dianpubuju.setVisibility(View.VISIBLE);
+ dianyuanbuju.setVisibility(View.GONE);
+ }
+ }
+ });
+
+ PriLetFragment priLetFragment = (PriLetFragment) getChildFragmentManager().findFragmentById(R.id.news_title_fragment);
+ priLetFragment.cutover(new PriLetFragment.ClickCallback() {
+ @Override
+ public void onsuccess() {
+ pagetype="0";
+ dianpubuju.setVisibility(View.VISIBLE);
+ dianyuanbuju.setVisibility(View.GONE);
+ }
+ });
+
+
+ marking_fragment.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ // ShowAty.CloundSolutionActivity(getActivity());
+ ShowAty.MainActivitytwot(getActivity());
+
+
+ }
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/MainActivitytwot.java b/app/src/main/java/com/example/administrator/seven/main/find/MainActivitytwot.java
new file mode 100644
index 0000000..4fc4104
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/MainActivitytwot.java
@@ -0,0 +1,143 @@
+package com.example.administrator.seven.main.find;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.example.administrator.seven.R;
+import com.zaaach.citypicker.CityPicker;
+import com.zaaach.citypicker.adapter.OnPickListener;
+import com.zaaach.citypicker.model.City;
+import com.zaaach.citypicker.model.HotCity;
+import com.zaaach.citypicker.model.LocateState;
+import com.zaaach.citypicker.model.LocatedCity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+public class MainActivitytwot extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
+ private TextView currentTV;
+ private CheckBox hotCB;
+ private CheckBox animCB;
+ private CheckBox enableCB;
+ private Button themeBtn;
+
+ private static final String KEY = "current_theme";
+
+ private List hotCities;
+ private int anim;
+ private int theme;
+ private boolean enable;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (savedInstanceState != null) {
+ theme = savedInstanceState.getInt(KEY);
+ setTheme(theme > 0 ? theme : R.style.DefaultCityPickerTheme);
+ }
+
+ setContentView(R.layout.activity_mainsss);
+
+ currentTV = findViewById(R.id.tv_current);
+ hotCB = findViewById(R.id.cb_hot);
+ animCB = findViewById(R.id.cb_anim);
+ enableCB = findViewById(R.id.cb_enable_anim);
+ themeBtn = findViewById(R.id.btn_style);
+
+ if (theme == R.style.DefaultCityPickerTheme){
+ themeBtn.setText("默认主题");
+ }
+ hotCB.setOnCheckedChangeListener(this);
+ animCB.setOnCheckedChangeListener(this);
+ enableCB.setOnCheckedChangeListener(this);
+
+ themeBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (themeBtn.getText().toString().startsWith("自定义")){
+ themeBtn.setText("默认主题");
+ theme = R.style.DefaultCityPickerTheme;
+ }
+ recreate();
+ }
+ });
+
+ findViewById(R.id.btn_pick).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ CityPicker.from(MainActivitytwot.this)
+ .enableAnimation(enable)
+ .setAnimationStyle(anim)
+ .setLocatedCity(null)
+ .setHotCities(hotCities)
+ .setOnPickListener(new OnPickListener() {
+ @Override
+ public void onPick(int position, City data) {
+ currentTV.setText(String.format("当前城市:%s,%s", data.getName(), data.getCode()));
+ Toast.makeText(
+ getApplicationContext(),
+ String.format("点击的数据:%s,%s", data.getName(), data.getCode()),
+ Toast.LENGTH_SHORT)
+ .show();
+ }
+
+ @Override
+ public void onCancel() {
+ Toast.makeText(getApplicationContext(), "取消选择", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onLocate() {
+ //开始定位,这里模拟一下定位
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ CityPicker.from(MainActivitytwot.this).locateComplete(new LocatedCity("深圳", "广东", "101280601"), LocateState.SUCCESS);
+ }
+ }, 3000);
+ }
+ })
+ .show();
+ }
+ });
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ switch (buttonView.getId()){
+ case R.id.cb_hot:
+ if (isChecked){
+ hotCities = new ArrayList<>();
+ hotCities.add(new HotCity("北京", "北京", "101010100"));
+ hotCities.add(new HotCity("上海", "上海", "101020100"));
+ hotCities.add(new HotCity("广州", "广东", "101280101"));
+ hotCities.add(new HotCity("深圳", "广东", "101280601"));
+ hotCities.add(new HotCity("杭州", "浙江", "101210101"));
+ }else {
+ hotCities = null;
+ }
+ break;
+ case R.id.cb_anim:
+
+ break;
+ case R.id.cb_enable_anim:
+ enable = isChecked;
+ break;
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY, theme);
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/MapFragment.java b/app/src/main/java/com/example/administrator/seven/main/find/MapFragment.java
deleted file mode 100644
index d26f555..0000000
--- a/app/src/main/java/com/example/administrator/seven/main/find/MapFragment.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.example.administrator.seven.main.find;
-
-import com.example.administrator.seven.base.BaseFragment;
-
-public class MapFragment extends BaseFragment {
-}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/OnSatisfactionListener.java b/app/src/main/java/com/example/administrator/seven/main/find/OnSatisfactionListener.java
new file mode 100644
index 0000000..1982e93
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/OnSatisfactionListener.java
@@ -0,0 +1,9 @@
+package com.example.administrator.seven.main.find;
+
+/**
+ * Created by ${hu} on 2017/5/27.
+ */
+
+public interface OnSatisfactionListener {
+ void onClick();
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/PriLetFragment.java b/app/src/main/java/com/example/administrator/seven/main/find/PriLetFragment.java
new file mode 100644
index 0000000..2185ef9
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/PriLetFragment.java
@@ -0,0 +1,63 @@
+package com.example.administrator.seven.main.find;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.find.ui.PrivateletterFragment;
+import com.example.administrator.seven.test.BaseFragment;
+
+/**
+ * 私信
+ */
+public class PriLetFragment extends BaseFragment {
+
+ Context mContext;
+ View view;
+ private RelativeLayout rl_live;
+
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mContext = getActivity();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if (view != null) {
+ ViewGroup parent = (ViewGroup) view.getParent();
+ if (parent != null) {
+ parent.removeView(view);
+ }
+ return view;
+ }
+ view = inflater.inflate(R.layout.findfragment, container, false);
+ getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.containerr,new PrivateletterFragment()).commit();
+ initView(view);
+ return view;
+ }
+
+ private void initView(View mContentView) {
+ rl_live = (RelativeLayout)view.findViewById(R.id.rl_live);
+
+ }
+
+ interface ClickCallback {
+ void onsuccess();
+ }
+
+ public void cutover(final ClickCallback callback) {
+ rl_live.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ callback.onsuccess();
+ }
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/QuestionsFragment.java b/app/src/main/java/com/example/administrator/seven/main/find/QuestionsFragment.java
new file mode 100644
index 0000000..dda62d3
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/QuestionsFragment.java
@@ -0,0 +1,120 @@
+package com.example.administrator.seven.main.find;
+
+
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.Button;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseTreeFragment;
+import com.example.administrator.seven.main.find.adapter.QuestionsAdapter;
+import com.example.administrator.seven.main.find.entity.QuestionsEntity;
+import com.example.administrator.seven.main.find.mvp.contract.QuestionsContract;
+import com.example.administrator.seven.main.find.mvp.presenter.QuestionsPresenterImpl;
+import com.example.administrator.seven.widget.PastEditText;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import io.reactivex.annotations.NonNull;
+
+/**
+ * 日期:2017.01.03
+ *
+ * 作者:
+ *
+ * 描述:答疑Fragment
+ */
+public class QuestionsFragment extends BaseTreeFragment implements QuestionsContract.View {
+
+
+ private Button btnSend;
+ private PastEditText pastEditText;
+ private RecyclerView mRecyclerView;
+ private QuestionsAdapter mAdapter;
+ private LinearLayoutManager mLayoutManager;
+
+ @Override
+ protected int getFragmentLayoutId() {
+ return R.layout.fragment_questions;
+
+ }
+
+ @Override
+ protected void initView(View view) {
+ btnSend = (Button) view.findViewById(R.id.btn_send);
+ pastEditText = (PastEditText) view.findViewById(R.id.et_msg);
+ mRecyclerView = (RecyclerView) view.findViewById(R.id.rcv);
+ mLayoutManager = new LinearLayoutManager(mContext);
+ mRecyclerView.setLayoutManager(mLayoutManager);
+ mAdapter = new QuestionsAdapter(mContext, null, false);
+ mRecyclerView.setAdapter(mAdapter);
+ }
+
+ @Override
+ protected void initData() {
+ getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+
+ //初始化
+ List question = new ArrayList<>();
+ QuestionsEntity questionsEntity = new QuestionsEntity();
+ questionsEntity.setIs_self(0);//表明是自己发送的
+ questionsEntity.setMsg("您好,很高兴为您服务。");//设置问题内容
+ question.add(questionsEntity);
+ mAdapter.upDate(question);
+ }
+
+
+ @Override
+ protected void initEvent(View view) {
+ pastEditText.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ btnSend.setEnabled(!TextUtils.isEmpty(s));
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+
+ }
+ });
+ btnSend.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //发送消息
+ getPresenter().sendMsg();
+ }
+ });
+
+ }
+
+ @NonNull
+ @Override
+ public QuestionsPresenterImpl createPresenter() {
+ return new QuestionsPresenterImpl();
+ }
+
+ @Override
+ public String getInput() {
+ String msg = pastEditText.getText().toString();
+ pastEditText.setText("");
+ return msg;
+ }
+
+ @Override
+ public void upDataAdd(List list) {
+ mAdapter.upDateAdd(list);
+ mLayoutManager.scrollToPosition(mAdapter.getEList().size() - 1);
+ }
+
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/adapter/FindListAdapter.java b/app/src/main/java/com/example/administrator/seven/main/find/adapter/FindListAdapter.java
new file mode 100644
index 0000000..e1a44e3
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/adapter/FindListAdapter.java
@@ -0,0 +1,61 @@
+package com.example.administrator.seven.main.find.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.kehu.Bean.CustomerListBean;
+import com.example.administrator.seven.utils.WidgetTools;
+
+import java.util.List;
+
+
+public class FindListAdapter extends BaseQuickAdapter {
+ Context mcontext;
+ OnViewClickListener onViewClickListener;
+
+ public FindListAdapter(Context context, List list) {
+ super(R.layout.cuslist_item, list);
+ this.mcontext = context;
+ }
+
+ @Override
+ protected void convert(final BaseViewHolder helper, final CustomerListBean.ResultBean.DataBean item) {
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.tv_dea_name), "", item.getName());
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.tv_dea_phone), "", item.getPhone());
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.tv_dea_watch), "", item.getWechat());
+ TextView tv_cuslist_caozuo = (TextView)helper.getView(R.id.tv_cuslist_caozuo);
+ tv_cuslist_caozuo.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onViewClickListener.operation(item);
+ }
+ });
+ RelativeLayout yichengjhiao_rv = (RelativeLayout)helper.getView(R.id.yichengjhiao_rv);
+ yichengjhiao_rv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onViewClickListener.enterCusDetail(item);
+ }
+ });
+
+ }
+
+ public void operationListenner(OnViewClickListener onViewClickListener){
+ this.onViewClickListener = onViewClickListener;
+ }
+
+ public interface OnViewClickListener{
+
+ void operation(CustomerListBean.ResultBean.DataBean item);
+
+
+ void enterCusDetail(CustomerListBean.ResultBean.DataBean item);
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/adapter/PrivateletAdapter.java b/app/src/main/java/com/example/administrator/seven/main/find/adapter/PrivateletAdapter.java
new file mode 100644
index 0000000..de8fdc5
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/adapter/PrivateletAdapter.java
@@ -0,0 +1,61 @@
+package com.example.administrator.seven.main.find.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.main.kehu.Bean.CustomerListBean;
+import com.example.administrator.seven.utils.WidgetTools;
+
+import java.util.List;
+
+
+public class PrivateletAdapter extends BaseQuickAdapter {
+ Context mcontext;
+ OnViewClickListener onViewClickListener;
+
+ public PrivateletAdapter(Context context, List list) {
+ super(R.layout.private_let_item, list);
+ this.mcontext = context;
+ }
+
+ @Override
+ protected void convert(final BaseViewHolder helper, final CustomerListBean.ResultBean.DataBean item) {
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.tv_dea_name), "", item.getName());
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.tv_dea_phone), "", item.getPhone());
+ WidgetTools.setTextfive((TextView) helper.getView(R.id.tv_dea_watch), "", item.getWechat());
+ TextView tv_cuslist_caozuo = (TextView)helper.getView(R.id.tv_cuslist_caozuo);
+ tv_cuslist_caozuo.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onViewClickListener.operation(item);
+ }
+ });
+ RelativeLayout yichengjhiao_rv = (RelativeLayout)helper.getView(R.id.yichengjhiao_rv);
+ yichengjhiao_rv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onViewClickListener.enterCusDetail(item);
+ }
+ });
+
+ }
+
+ public void operationListenner(OnViewClickListener onViewClickListener){
+ this.onViewClickListener = onViewClickListener;
+ }
+
+ public interface OnViewClickListener{
+
+ void operation(CustomerListBean.ResultBean.DataBean item);
+
+
+ void enterCusDetail(CustomerListBean.ResultBean.DataBean item);
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/adapter/QuestionsAdapter.java b/app/src/main/java/com/example/administrator/seven/main/find/adapter/QuestionsAdapter.java
new file mode 100644
index 0000000..4fdcf93
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/adapter/QuestionsAdapter.java
@@ -0,0 +1,230 @@
+package com.example.administrator.seven.main.find.adapter;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.os.Build;
+import android.util.Log;
+import android.view.View;
+import android.webkit.WebView;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.base.BaseRecycleAdapter;
+import com.example.administrator.seven.base.BaseViewHolder;
+import com.example.administrator.seven.main.find.entity.QuestionsEntity;
+import com.example.administrator.seven.utils.GlideTools;
+import com.example.administrator.seven.widget.CircleImageView;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.List;
+
+import androidx.core.content.ContextCompat;
+
+/**
+ * QuestionsAdapter
+ * (๑• . •๑)
+ * 类描述: 答疑记录适配器
+ * Created by LeiXiaoXing on 2017/5/22 19:53
+ */
+
+public class QuestionsAdapter extends BaseRecycleAdapter {
+
+
+ private final int ITEM_TYPE_LEFT = 1;
+ private final int ITEM_TYPE_RIGHT = 2;
+ private Context mContext;
+
+ /**
+ * 构造Adapter
+ *
+ * @param context 上下文
+ * @param questionEntities 数据集合
+ * @param canLoadMore 是否支持加载更多
+ */
+ public QuestionsAdapter(Context context, List questionEntities, boolean canLoadMore) {
+ super(context, questionEntities, canLoadMore);
+ mContext = context;
+ }
+
+ @Override
+ protected ViewHolder createViewHolder(View view, int viewType) {
+ if (viewType == ITEM_TYPE_LEFT) {
+ return new ViewHolder(view);
+ } else if (viewType == ITEM_TYPE_RIGHT) {
+ return new QuestionViewHolder(view);
+ }
+ return null;
+ }
+
+ @Override
+ protected int getCustomItemViewType(int position) {
+ return 1 == mEList.get(position).getIs_self() ? ITEM_TYPE_RIGHT : ITEM_TYPE_LEFT;
+ }
+
+ @Override
+ protected int getItemLayout(int viewType) {
+ if (viewType == ITEM_TYPE_LEFT) {
+ return R.layout.item_question_left;
+ } else if (viewType == ITEM_TYPE_RIGHT) {
+ return R.layout.item_question_right;
+ }
+ return 0;
+ }
+
+
+ /**
+ * 创建绿色健康文本
+ *
+ * @param msg 文本内容
+ * @return
+ */
+ private TextView createTextView(String msg) {
+ TextView textView = new TextView(mContext);
+ textView.setPadding(0, 10, 0, 10);
+ textView.setTextColor(ContextCompat.getColor(mContext, R.color.colorAccent));
+ textView.setText(msg);
+ textView.setTextSize(16);
+ return textView;
+ }
+
+ /**
+ * 创建绿色健康文本
+ *
+ * @param msg 文本内容
+ * @return
+ */
+ private WebView createWebView(String msg) {
+ WebView webView = new WebView(mContext);
+ RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
+ webView.setLayoutParams(layoutParams);
+// webView.getSettings().setLoadWithOverviewMode(true);// 缩放至屏幕的大小
+
+ webView.loadDataWithBaseURL(null, getNewContent(msg), "text/html", "utf-8", null);
+ return webView;
+ }
+
+
+ class ViewHolder extends BaseViewHolder {
+
+ TextView tvContent;
+ private FrameLayout view_content_fl;
+ private LinearLayout view_content_ll;
+
+ protected ViewHolder(View itemView) {
+ super(itemView);
+ }
+
+ @Override
+ protected void initView(View itemView) {
+ tvContent = (TextView) itemView.findViewById(R.id.tv_content);
+ view_content_fl = (FrameLayout) itemView.findViewById(R.id.view_content_fl);
+ view_content_ll = (LinearLayout) itemView.findViewById(R.id.view_content_ll);
+ }
+
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
+ @Override
+ protected void bindView(final QuestionsEntity entity, int position) {
+ Log.e("entity.getMsg()", "bindView: " + entity.getMsg());
+ tvContent.setText(entity.getMsg());
+ //0 = 解答内容回复 , 1 = 回答满意/不满意 ,2 = 点击提交问题
+ if (entity.getReply_type() == 1) {
+ view_content_fl.setVisibility(View.GONE);//隐藏帧布局,使用线性布局
+ view_content_ll.setVisibility(View.VISIBLE);
+ view_content_ll.removeAllViews();
+ view_content_ll.setOrientation(LinearLayout.HORIZONTAL);
+ LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+ layoutParams.setMarginEnd(100);
+ TextView tvUnsatisfy = createTextView("不满意");
+ TextView tvSatisfy = createTextView("满意");
+ tvUnsatisfy.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // mContext.startActivity(new Intent(mContext, QuestionsAddedActivity.class));
+ }
+ });
+ tvSatisfy.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+// Toast.makeText(mContext, "满意", Toast.LENGTH_SHORT).show();
+ // mListener.onClick();
+ }
+ });
+ view_content_ll.addView(tvUnsatisfy, layoutParams);
+ view_content_ll.addView(tvSatisfy);
+ } else if (entity.getReply_type() == 2) {
+ view_content_ll.setVisibility(View.VISIBLE);
+ view_content_fl.setVisibility(View.GONE);//隐藏帧布局,使用线性布局
+ view_content_ll.removeAllViews();
+ TextView textView = createTextView("点击提交问题和关键字 >");
+ textView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // Intent intent=new Intent(mContext, QuestionsAddedActivity.class);
+ // intent.putExtra("question",entity.getQuestion());//把问题传到提交问题界面
+ // mContext.startActivity(intent);
+ //mContext.startActivity(new Intent(mContext, QuestionsAddedActivity.class));
+ }
+ });
+ view_content_ll.addView(textView);
+ } else {
+ view_content_fl.setVisibility(View.VISIBLE);
+ view_content_ll.setVisibility(View.GONE);
+ List data = entity.getData();
+ if (data == null) {
+ return;
+ }
+// view_content.setOrientation(LinearLayout.VERTICAL);
+ view_content_fl.removeAllViews();
+ for (int i = 0; i < data.size(); i++) {
+ //i + 1 + "." + data.get(i).getContent()
+ view_content_fl.addView(createWebView(data.get(i).getContent()));
+// view_content.addView(createTextView(data.get(i).getContent()));
+ Log.d("log","content:"+data.get(i).getContent());
+ }
+ Log.d("log",data.toString());
+ }
+ }
+ }
+
+ private String getNewContent(String htmlText) {
+ Document doc = Jsoup.parse(htmlText);
+ Elements elements = doc.getElementsByTag("img");
+ for (Element element : elements) {
+ element.attr("width", "auto").attr("height", "auto");
+ }
+ return doc.toString();
+ }
+
+
+ /**
+ * 用户提问方的ViewHolder
+ */
+ private class QuestionViewHolder extends ViewHolder {
+
+ private CircleImageView ivAvatar;
+
+ private QuestionViewHolder(View itemView) {
+ super(itemView);
+ }
+
+ @Override
+ protected void initView(View itemView) {
+ super.initView(itemView);
+ ivAvatar = (CircleImageView) itemView.findViewById(R.id.iv_icon);
+ }
+
+ @Override
+ protected void bindView(QuestionsEntity entity, int position) {
+ tvContent.setText(entity.getMsg());
+ GlideTools.init(mContext).displaypic(ivAvatar, "", R.mipmap.icon_default_head);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/entity/QuestionsEntity.java b/app/src/main/java/com/example/administrator/seven/main/find/entity/QuestionsEntity.java
new file mode 100644
index 0000000..8efb5e6
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/entity/QuestionsEntity.java
@@ -0,0 +1,92 @@
+package com.example.administrator.seven.main.find.entity;
+
+import java.util.List;
+
+/**
+ * QuestionsEntity
+ * (๑• . •๑)
+ * 类描述:
+ * Created by LeiXiaoXing on 2017/5/22 19:46
+ */
+
+public class QuestionsEntity {
+
+ /**
+ * msg : 关键字"为什么"的解答如下
+ * is_self : 0
+ * data : [{"id":"69","content":"每年农历冬至这天,不论贫富,饺子是必不可少的节日饭。这种习俗,据说是为了纪念\u201c医圣\u201d张仲景。"},{"id":"70","content":"为了纪念这位\u201c医圣\u201d也为了冬天不冻耳朵,人们学着\u201c娇耳\u201d的样子,包成食物,也叫\u201c饺子\u201d或\u201c扁食\u201d。"},{"id":"71","content":"金字塔是古代埃及劳动人民智慧的结晶,是世界古代文明史上的奇迹。"},{"id":"72","content":"在《圣经》中,记载着这么一个故事:耶稣和他的十二个门徒逾越节聚会。在晚餐时,耶稣说:\u201c你们中有一个人要出卖我。 \u201d果然,门徒中的犹大向统治者告发了耶稣,耶稣被钉死在十字架上。当时晚餐桌上正好是十三个人,人们就认为是这个\u201c13\u201d带来了不幸。"}]
+ * reply_type : 0
+ */
+
+ private String msg;
+ private int is_self;
+ private int reply_type;
+ private List data;
+ private String question;
+
+ public String getQuestion() {
+ return question;
+ }
+
+ public void setQuestion(String question) {
+ this.question = question;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public int getIs_self() {
+ return is_self;
+ }
+
+ public void setIs_self(int is_self) {
+ this.is_self = is_self;
+ }
+
+ public int getReply_type() {
+ return reply_type;
+ }
+
+ public void setReply_type(int reply_type) {
+ this.reply_type = reply_type;
+ }
+
+ public List getData() {
+ return data;
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+
+ public static class DataEntity {
+ /**
+ * id : 69
+ * content : 每年农历冬至这天,不论贫富,饺子是必不可少的节日饭。这种习俗,据说是为了纪念“医圣”张仲景。
+ */
+
+ private String id;
+ private String content;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/mvp/contract/QuestionsContract.java b/app/src/main/java/com/example/administrator/seven/main/find/mvp/contract/QuestionsContract.java
new file mode 100644
index 0000000..d7b459f
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/mvp/contract/QuestionsContract.java
@@ -0,0 +1,50 @@
+package com.example.administrator.seven.main.find.mvp.contract;
+
+import com.example.administrator.seven.base.BaseTreeView;
+import com.example.administrator.seven.main.find.entity.QuestionsEntity;
+import com.example.administrator.seven.network.ApiCallBack;
+
+import java.util.List;
+
+/**
+ * QuestionsContract
+ * (๑• . •๑)
+ * 类描述:
+ * Created by LeiXiaoXing on 2017/5/22 19:43
+ */
+
+public class QuestionsContract {
+
+ public interface View extends BaseTreeView {
+
+ /**
+ * 获取输入内容
+ *
+ * @return
+ */
+ String getInput();
+
+ /**
+ * 叠加数据
+ *
+ * @param list
+ */
+ void upDataAdd(List list);
+ }
+
+ public interface Presenter {
+ void sendMsg();
+ }
+
+ public interface Model {
+ /**
+ * 发送消息
+ *
+ * @param qu_key 关键字
+ * @param callBack 回调
+ */
+ void sendMsg(String qu_key, ApiCallBack> callBack);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/mvp/model/QuestionsModelImpl.java b/app/src/main/java/com/example/administrator/seven/main/find/mvp/model/QuestionsModelImpl.java
new file mode 100644
index 0000000..afd65db
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/mvp/model/QuestionsModelImpl.java
@@ -0,0 +1,42 @@
+package com.example.administrator.seven.main.find.mvp.model;
+
+import com.example.administrator.seven.main.find.entity.QuestionsEntity;
+import com.example.administrator.seven.main.find.mvp.contract.QuestionsContract;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.example.administrator.seven.network.ApiUtils;
+import com.example.administrator.seven.network.http.ResponseBean;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.functions.Consumer;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by 雷小星🍀 on 2017/05/22
+ */
+
+public class QuestionsModelImpl implements QuestionsContract.Model {
+
+ @Override
+ public void sendMsg(String qu_key, final ApiCallBack> callBack) {
+ ApiUtils.getApi()
+ .ask(ProfileSpUtils.getInstance().getUserProfie().getData().getUuid()
+ , qu_key)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribeOn(Schedulers.io())
+ .subscribe(new Consumer>>() {
+ @Override
+ public void accept(@NonNull ResponseBean> listResponseBean) throws Exception {
+ callBack.onResponse(listResponseBean);
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(@NonNull Throwable throwable) throws Exception {
+ callBack.onFailure(throwable);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/mvp/presenter/QuestionsPresenterImpl.java b/app/src/main/java/com/example/administrator/seven/main/find/mvp/presenter/QuestionsPresenterImpl.java
new file mode 100644
index 0000000..f4f8b11
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/mvp/presenter/QuestionsPresenterImpl.java
@@ -0,0 +1,56 @@
+package com.example.administrator.seven.main.find.mvp.presenter;
+
+import com.example.administrator.seven.main.find.entity.QuestionsEntity;
+import com.example.administrator.seven.main.find.mvp.contract.QuestionsContract;
+import com.example.administrator.seven.main.find.mvp.model.QuestionsModelImpl;
+import com.example.administrator.seven.network.ApiCallBack;
+import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by 雷小星🍀 on 2017/05/22
+ */
+
+public class QuestionsPresenterImpl extends MvpBasePresenter implements QuestionsContract.Presenter {
+
+ private QuestionsModelImpl mModel;
+
+ public QuestionsPresenterImpl() {
+ mModel = new QuestionsModelImpl();
+ }
+
+ @Override
+ public void sendMsg() {
+ if (getView() == null) {
+ return;
+ }
+ //获取输入
+ String input = getView().getInput();
+ List question = new ArrayList<>();
+ QuestionsEntity questionsEntity = new QuestionsEntity();
+ questionsEntity.setIs_self(1);//表明是自己发送的
+ questionsEntity.setMsg(input);//设置问题内容
+ question.add(questionsEntity);
+ getView().upDataAdd(question);
+ //用户提问,获取服务器回答
+ mModel.sendMsg(input, new ApiCallBack>() {
+ @Override
+ protected void onSuccess(List responseData, String message) {
+ if (getView() == null) {
+ return;
+ }
+ getView().upDataAdd(responseData);
+ }
+
+ @Override
+ protected void onFailure(String error) {
+ if (getView() == null) {
+ return;
+ }
+ getView().toast(error);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/ui/CommentFragment.java b/app/src/main/java/com/example/administrator/seven/main/find/ui/CommentFragment.java
new file mode 100644
index 0000000..cd69a0a
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/ui/CommentFragment.java
@@ -0,0 +1,118 @@
+package com.example.administrator.seven.main.find.ui;
+
+import android.widget.Toast;
+
+import com.example.administrator.seven.JsonUtils;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.dialog.BaseTipsDialog;
+import com.example.administrator.seven.main.kehu.Bean.CustomerListBean;
+import com.example.administrator.seven.main.kehu.Dialog.CusOperationDialog;
+import com.example.administrator.seven.main.kehu.MobanFragment;
+import com.example.administrator.seven.main.kehu.activity.ShowAty;
+import com.example.administrator.seven.main.kehu.adapter.CusListAdapter;
+import com.example.administrator.seven.okgonet.NetApi;
+import com.example.administrator.seven.okgonet.Observer;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+import com.lzy.okgo.model.Response;
+
+import java.util.List;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+
+public class CommentFragment extends MobanFragment {
+
+
+ public CommentFragment() {
+ super();
+
+ }
+ @Override
+ public void initAdapter() {
+ mMarkingFragmentRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ CusListAdapter markingtwoAdapter = new CusListAdapter(mContext, null);
+ getAdpter(markingtwoAdapter);
+ mMarkingFragmentRecyclerView.setAdapter(markingtwoAdapter);
+ markingtwoAdapter.operationListenner(new CusListAdapter.OnViewClickListener() {
+ @Override
+ public void operation(final CustomerListBean.ResultBean.DataBean item) {
+ new CusOperationDialog(getActivity(), R.style.dialog, new CusOperationDialog.OnCloseListener() {
+ @Override
+ public void phoneClick() {//拨打电话
+ if (item.getPhone() != null) {
+ call(item.getPhone());
+ }
+ }
+
+ @Override
+ public void kaidanonClick() {//删除客户
+ new BaseTipsDialog().showDownloadDialog(getActivity(), "确认删除该客户吗?", "确定", new BaseTipsDialog.ClickListener() {
+ @Override
+ public void confirm() {
+ Toast.makeText(getActivity(), "还没调接口", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void cancle() {
+
+ }
+ });
+ }
+
+ //信息完善
+ @Override
+ public void uploadAvatar() {
+
+ }
+
+ }).show();
+ }
+
+ @Override
+ public void enterCusDetail(CustomerListBean.ResultBean.DataBean item) {
+ //进入查看评论
+ ShowAty.CustomerDetailActivity(getActivity(),item);
+ }
+ });
+ }
+
+ @Override
+ public void requestData() {
+ new NetApi().customerList(ProfileSpUtils.getInstance().getUserProfie().getData().getUuid(),"").subscribe(new Observer() {
+ @Override
+ public void onNext(Response response) {
+ String body = (String) response.body();
+ CustomerListBean.ResultBean result = JsonUtils.fromJson(body, CustomerListBean.class).getResult();
+ mSwl.setRefreshing(false);
+ if (result != null && String.valueOf(result.getSuccess()).equals("0")) {
+
+ List data = result.getData();
+ if (data.size() == 0) {
+ markingtwoAdapter.setEmptyView(notDataView);
+ return;
+ }
+ if (mNextRequestPage == 1) {
+ setData(true, data);
+ } else {
+ setData(false, data);
+ }
+ } else {
+ setData(true, null);
+ markingtwoAdapter.setEmptyView(notDataView);
+ mSwl.setRefreshing(false);
+ }
+ }
+ @Override
+ public void onError(Exception e) {
+ e.printStackTrace();
+ markingtwoAdapter.setEmptyView(errorView);
+ mSwl.setRefreshing(false);
+ }
+ });
+
+ }
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/ui/FindFragmenttwo.java b/app/src/main/java/com/example/administrator/seven/main/find/ui/FindFragmenttwo.java
new file mode 100644
index 0000000..7855431
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/ui/FindFragmenttwo.java
@@ -0,0 +1,118 @@
+package com.example.administrator.seven.main.find.ui;
+
+import android.widget.Toast;
+
+import com.example.administrator.seven.JsonUtils;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.dialog.BaseTipsDialog;
+import com.example.administrator.seven.main.kehu.Bean.CustomerListBean;
+import com.example.administrator.seven.main.kehu.Dialog.CusOperationDialog;
+import com.example.administrator.seven.main.kehu.MobanFragment;
+import com.example.administrator.seven.main.kehu.activity.ShowAty;
+import com.example.administrator.seven.main.kehu.adapter.CusListAdapter;
+import com.example.administrator.seven.okgonet.NetApi;
+import com.example.administrator.seven.okgonet.Observer;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+import com.lzy.okgo.model.Response;
+
+import java.util.List;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+
+public class FindFragmenttwo extends MobanFragment {
+
+
+ public FindFragmenttwo() {
+ super();
+
+ }
+ @Override
+ public void initAdapter() {
+ mMarkingFragmentRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ CusListAdapter markingtwoAdapter = new CusListAdapter(mContext, null);
+ getAdpter(markingtwoAdapter);
+ mMarkingFragmentRecyclerView.setAdapter(markingtwoAdapter);
+ markingtwoAdapter.operationListenner(new CusListAdapter.OnViewClickListener() {
+ @Override
+ public void operation(final CustomerListBean.ResultBean.DataBean item) {
+ new CusOperationDialog(getActivity(), R.style.dialog, new CusOperationDialog.OnCloseListener() {
+ @Override
+ public void phoneClick() {//拨打电话
+ if (item.getPhone() != null) {
+ call(item.getPhone());
+ }
+ }
+
+ @Override
+ public void kaidanonClick() {//删除客户
+ new BaseTipsDialog().showDownloadDialog(getActivity(), "确认删除该客户吗?", "确定", new BaseTipsDialog.ClickListener() {
+ @Override
+ public void confirm() {
+ Toast.makeText(getActivity(), "还没调接口", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void cancle() {
+
+ }
+ });
+ }
+
+ //信息完善
+ @Override
+ public void uploadAvatar() {
+
+ }
+
+ }).show();
+ }
+
+ @Override
+ public void enterCusDetail(CustomerListBean.ResultBean.DataBean item) {
+ //进入查看评论
+ ShowAty.CommentActivity(getActivity(),20);
+ }
+ });
+ }
+
+ @Override
+ public void requestData() {
+ new NetApi().customerList(ProfileSpUtils.getInstance().getUserProfie().getData().getUuid(),"").subscribe(new Observer() {
+ @Override
+ public void onNext(Response response) {
+ String body = (String) response.body();
+ CustomerListBean.ResultBean result = JsonUtils.fromJson(body, CustomerListBean.class).getResult();
+ mSwl.setRefreshing(false);
+ if (result != null && String.valueOf(result.getSuccess()).equals("0")) {
+
+ List data = result.getData();
+ if (data.size() == 0) {
+ markingtwoAdapter.setEmptyView(notDataView);
+ return;
+ }
+ if (mNextRequestPage == 1) {
+ setData(true, data);
+ } else {
+ setData(false, data);
+ }
+ } else {
+ setData(true, null);
+ markingtwoAdapter.setEmptyView(notDataView);
+ mSwl.setRefreshing(false);
+ }
+ }
+ @Override
+ public void onError(Exception e) {
+ e.printStackTrace();
+ markingtwoAdapter.setEmptyView(errorView);
+ mSwl.setRefreshing(false);
+ }
+ });
+
+ }
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/find/ui/PrivateletterFragment.java b/app/src/main/java/com/example/administrator/seven/main/find/ui/PrivateletterFragment.java
new file mode 100644
index 0000000..a6fb577
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/main/find/ui/PrivateletterFragment.java
@@ -0,0 +1,121 @@
+package com.example.administrator.seven.main.find.ui;
+
+import android.widget.Toast;
+
+import com.example.administrator.seven.JsonUtils;
+import com.example.administrator.seven.R;
+import com.example.administrator.seven.dialog.BaseTipsDialog;
+import com.example.administrator.seven.main.find.adapter.PrivateletAdapter;
+import com.example.administrator.seven.main.kehu.Bean.CustomerListBean;
+import com.example.administrator.seven.main.kehu.Dialog.CusOperationDialog;
+import com.example.administrator.seven.main.kehu.MobanFragment;
+import com.example.administrator.seven.main.kehu.activity.ShowAty;
+import com.example.administrator.seven.main.kehu.adapter.CusListAdapter;
+import com.example.administrator.seven.okgonet.NetApi;
+import com.example.administrator.seven.okgonet.Observer;
+import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
+import com.lzy.okgo.model.Response;
+
+import java.util.List;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+/**
+ * 私信
+ */
+public class PrivateletterFragment extends MobanFragment {
+
+
+ public PrivateletterFragment() {
+ super();
+
+ }
+ @Override
+ public void initAdapter() {
+ mMarkingFragmentRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ PrivateletAdapter markingtwoAdapter = new PrivateletAdapter(mContext, null);
+ getAdpter(markingtwoAdapter);
+ mMarkingFragmentRecyclerView.setAdapter(markingtwoAdapter);
+ markingtwoAdapter.operationListenner(new PrivateletAdapter.OnViewClickListener() {
+ @Override
+ public void operation(final CustomerListBean.ResultBean.DataBean item) {
+ new CusOperationDialog(getActivity(), R.style.dialog, new CusOperationDialog.OnCloseListener() {
+ @Override
+ public void phoneClick() {//拨打电话
+ if (item.getPhone() != null) {
+ call(item.getPhone());
+ }
+ }
+
+ @Override
+ public void kaidanonClick() {//删除客户
+ new BaseTipsDialog().showDownloadDialog(getActivity(), "确认删除该客户吗?", "确定", new BaseTipsDialog.ClickListener() {
+ @Override
+ public void confirm() {
+ Toast.makeText(getActivity(), "还没调接口", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void cancle() {
+
+ }
+ });
+ }
+
+ //信息完善
+ @Override
+ public void uploadAvatar() {
+
+ }
+
+ }).show();
+ }
+
+ @Override
+ public void enterCusDetail(CustomerListBean.ResultBean.DataBean item) {
+ //进入回话页
+ ShowAty.ConversationActivity(getActivity());
+ }
+ });
+ }
+
+ @Override
+ public void requestData() {
+ new NetApi().customerList(ProfileSpUtils.getInstance().getUserProfie().getData().getUuid(),"").subscribe(new Observer() {
+ @Override
+ public void onNext(Response response) {
+ String body = (String) response.body();
+ CustomerListBean.ResultBean result = JsonUtils.fromJson(body, CustomerListBean.class).getResult();
+ mSwl.setRefreshing(false);
+ if (result != null && String.valueOf(result.getSuccess()).equals("0")) {
+
+ List data = result.getData();
+ if (data.size() == 0) {
+ markingtwoAdapter.setEmptyView(notDataView);
+ return;
+ }
+ if (mNextRequestPage == 1) {
+ setData(true, data);
+ } else {
+ setData(false, data);
+ }
+ } else {
+ setData(true, null);
+ markingtwoAdapter.setEmptyView(notDataView);
+ mSwl.setRefreshing(false);
+ }
+ }
+ @Override
+ public void onError(Exception e) {
+ e.printStackTrace();
+ markingtwoAdapter.setEmptyView(errorView);
+ mSwl.setRefreshing(false);
+ }
+ });
+
+ }
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+}
diff --git a/app/src/main/java/com/example/administrator/seven/main/kehu/activity/ShowAty.java b/app/src/main/java/com/example/administrator/seven/main/kehu/activity/ShowAty.java
index 2d44b29..b832679 100644
--- a/app/src/main/java/com/example/administrator/seven/main/kehu/activity/ShowAty.java
+++ b/app/src/main/java/com/example/administrator/seven/main/kehu/activity/ShowAty.java
@@ -5,6 +5,10 @@ import android.content.Intent;
import android.os.Bundle;
import com.example.administrator.seven.db.DbRecordBeanData;
+import com.example.administrator.seven.main.find.CloundSolutionActivity;
+import com.example.administrator.seven.main.find.CommentActivity;
+import com.example.administrator.seven.main.find.ConversationActivity;
+import com.example.administrator.seven.main.find.MainActivitytwot;
import com.example.administrator.seven.main.kehu.Bean.CustomerListBean;
import java.io.Serializable;
@@ -50,5 +54,27 @@ public class ShowAty {
i.putExtra("customer_id",item.getCustomer_id());
ctx.startActivity(i);
}
+ public static void CommentActivity(Context ctx,int num) {
+ Intent i = new Intent(ctx, CommentActivity.class);
+ i.putExtra("num",num+"");
+ ctx.startActivity(i);
+ }
+
+
+ public static void ConversationActivity(Context ctx) {
+ Intent i = new Intent(ctx, ConversationActivity.class);
+ ctx.startActivity(i);
+ }
+
+
+ public static void CloundSolutionActivity(Context ctx) {
+ Intent i = new Intent(ctx, CloundSolutionActivity.class);
+ ctx.startActivity(i);
+ }
+ public static void MainActivitytwot(Context ctx) {
+ Intent i = new Intent(ctx, MainActivitytwot.class);
+ ctx.startActivity(i);
+ }
+
}
diff --git a/app/src/main/java/com/example/administrator/seven/main/my/MyFragment.java b/app/src/main/java/com/example/administrator/seven/main/my/MyFragment.java
index d797e7b..560baa7 100644
--- a/app/src/main/java/com/example/administrator/seven/main/my/MyFragment.java
+++ b/app/src/main/java/com/example/administrator/seven/main/my/MyFragment.java
@@ -13,6 +13,7 @@ import com.example.administrator.seven.main.Fragment.mvp.contract.MyContract;
import com.example.administrator.seven.main.Fragment.mvp.presenter.MyPresenterImpl;
import com.example.administrator.seven.main.activity.LoginPasswordActivity;
import com.example.administrator.seven.main.activity.Main2Activity;
+import com.example.administrator.seven.utils.StatusBarUtil;
import com.example.administrator.seven.utils.ToolsUtils;
import com.example.administrator.seven.utils.checkVersionsUtils.ProfileSpUtils;
import com.example.administrator.seven.view.webview.XfiveWebActivity;
@@ -60,6 +61,7 @@ public class MyFragment
@Override
protected void initView(View view) {
+
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.SwipeRefreshLayout);
mSwipeRefreshLayout.setColorSchemeColors(ContextCompat.getColor(mContext, R.color.colorAccent));
//初始化用户资料控件
diff --git a/app/src/main/java/com/example/administrator/seven/main/zhibo/SendFragment.java b/app/src/main/java/com/example/administrator/seven/main/zhibo/LivebroFragment.java
similarity index 93%
rename from app/src/main/java/com/example/administrator/seven/main/zhibo/SendFragment.java
rename to app/src/main/java/com/example/administrator/seven/main/zhibo/LivebroFragment.java
index d84285c..2a96626 100644
--- a/app/src/main/java/com/example/administrator/seven/main/zhibo/SendFragment.java
+++ b/app/src/main/java/com/example/administrator/seven/main/zhibo/LivebroFragment.java
@@ -9,7 +9,10 @@ import android.widget.TextView;
import com.example.administrator.seven.R;
import com.example.administrator.seven.base.BaseFragment;
-public class SendFragment extends BaseFragment {
+/**
+ * 直播
+ */
+public class LivebroFragment extends BaseFragment {
private View mContentView;
private TextView titleTv;
diff --git a/app/src/main/java/com/example/administrator/seven/network/http/MyApi.java b/app/src/main/java/com/example/administrator/seven/network/http/MyApi.java
index 6390022..9eb6641 100644
--- a/app/src/main/java/com/example/administrator/seven/network/http/MyApi.java
+++ b/app/src/main/java/com/example/administrator/seven/network/http/MyApi.java
@@ -3,9 +3,12 @@ package com.example.administrator.seven.network.http;
import com.example.administrator.seven.main.entity.LoginBean;
import com.example.administrator.seven.main.entity.mine.TreeUserEntity;
+import com.example.administrator.seven.main.find.entity.QuestionsEntity;
import com.example.administrator.seven.main.kehu.Bean.CommitDesignModel;
import com.example.administrator.seven.main.kehu.Bean.industryBean;
+import java.util.List;
+
import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
@@ -132,6 +135,19 @@ public class MyApi {
, @Field("content") String content);
+ /**
+ * 答疑解惑
+ * 提交问题
+ *
+ * @param user_id 用户token
+ * @param qu_key 问题关键字
+ * @return
+ */
+ @POST("robotQA/ask")
+ @FormUrlEncoded
+ Observable>> ask(@Field("user_id") String user_id
+ , @Field("qu_key") String qu_key);
+
}
}
diff --git a/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtil.java b/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtil.java
new file mode 100644
index 0000000..29c0cc9
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtil.java
@@ -0,0 +1,205 @@
+package com.example.administrator.seven.utils;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.graphics.Color;
+import android.os.Build;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.readystatesoftware.systembartint.SystemBarTintManager;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * Created by XiaoQiang on 2017/6/21.
+ */
+public class StatusBarUtil {
+
+ /**
+ * 修改状态栏为全透明
+ * @param activity
+ */
+ @TargetApi(19)
+ public static void transparencyBar(Activity activity){
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = activity.getWindow();
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.WHITE);
+
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ Window window =activity.getWindow();
+ window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+ }
+
+ /**
+ * 修改状态栏颜色,支持4.4以上版本
+ * @param activity
+ * @param colorId
+ */
+ public static void setStatusBarColor(Activity activity,int colorId) {
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = activity.getWindow();
+// window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(activity.getResources().getColor(colorId));
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ //使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明
+ transparencyBar(activity);
+ SystemBarTintManager tintManager = new SystemBarTintManager(activity);
+ tintManager.setStatusBarTintEnabled(true);
+ tintManager.setStatusBarTintResource(colorId);
+ }
+ }
+
+ /**
+ *状态栏亮色模式,设置状态栏黑色文字、图标,
+ * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
+ * @param activity
+ * @return 1:MIUUI 2:Flyme 3:android6.0
+ */
+ public static int StatusBarLightMode(Activity activity){
+ int result=0;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ if(MIUISetStatusBarLightMode(activity, true)){
+ result=1;
+ }else if(FlymeSetStatusBarLightMode(activity.getWindow(), true)){
+ result=2;
+ }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ result=3;
+ }else{
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = activity.getWindow();
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
+
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ Window window =activity.getWindow();
+ window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 已知系统类型时,设置状态栏黑色文字、图标。
+ * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
+ * @param activity
+ * @param type 1:MIUUI 2:Flyme 3:android6.0
+ */
+ public static void StatusBarLightMode(Activity activity,int type){
+ if(type==1){
+ MIUISetStatusBarLightMode(activity, true);
+ }else if(type==2){
+ FlymeSetStatusBarLightMode(activity.getWindow(), true);
+ }else if(type==3){
+ activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }
+
+ }
+
+ /**
+ * 状态栏暗色模式,清除MIUI、flyme或6.0以上版本状态栏黑色文字、图标
+ */
+ public static void StatusBarDarkMode(Activity activity,int type){
+ if(type==1){
+ MIUISetStatusBarLightMode(activity, false);
+ }else if(type==2){
+ FlymeSetStatusBarLightMode(activity.getWindow(), false);
+ }else if(type==3){
+ activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
+ }
+
+ }
+
+
+ /**
+ * 设置状态栏图标为深色和魅族特定的文字风格
+ * 可以用来判断是否为Flyme用户
+ * @param window 需要设置的窗口
+ * @param dark 是否把状态栏文字及图标颜色设置为深色
+ * @return boolean 成功执行返回true
+ *
+ */
+ public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {
+ boolean result = false;
+ if (window != null) {
+ try {
+ WindowManager.LayoutParams lp = window.getAttributes();
+ Field darkFlag = WindowManager.LayoutParams.class
+ .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
+ Field meizuFlags = WindowManager.LayoutParams.class
+ .getDeclaredField("meizuFlags");
+ darkFlag.setAccessible(true);
+ meizuFlags.setAccessible(true);
+ int bit = darkFlag.getInt(null);
+ int value = meizuFlags.getInt(lp);
+ if (dark) {
+ value |= bit;
+ } else {
+ value &= ~bit;
+ }
+ meizuFlags.setInt(lp, value);
+ window.setAttributes(lp);
+ result = true;
+ } catch (Exception e) {
+
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 需要MIUIV6以上
+ * @param activity
+ * @param dark 是否把状态栏文字及图标颜色设置为深色
+ * @return boolean 成功执行返回true
+ *
+ */
+ public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
+ boolean result = false;
+ Window window=activity.getWindow();
+ if (window != null) {
+ Class clazz = window.getClass();
+ try {
+ int darkModeFlag = 0;
+ Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
+ Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
+ darkModeFlag = field.getInt(layoutParams);
+ Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
+ if(dark){
+ extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体
+ }else{
+ extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
+ }
+ result=true;
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ //开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
+ if(dark){
+ activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ }else {
+ activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
+ }
+ }
+ }catch (Exception e){
+
+ }
+ }
+ return result;
+ }
+}
+
diff --git a/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtils.java b/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtils.java
deleted file mode 100644
index 11bb851..0000000
--- a/app/src/main/java/com/example/administrator/seven/utils/StatusBarUtils.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.example.administrator.seven.utils;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.os.Build;
-import android.view.Window;
-import android.view.WindowManager;
-
-import com.readystatesoftware.systembartint.SystemBarTintManager;
-
-/**
- * Created by Administrator on 2016/12/26.
- *
- * 作者:xudiwei
- *
- * 描述:MIUI 与MEIZI的状态栏字体颜色工具类
- */
-
-public class StatusBarUtils {
-
-
- public static void setStateBaeColor(Activity ac , int color ){
- // 4.4及以上版本开启
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- setTranslucentStatus(true , ac);
- }
-
- SystemBarTintManager tintManager = new SystemBarTintManager(ac);
- tintManager.setStatusBarTintEnabled(true);
- tintManager.setNavigationBarTintEnabled(true);
-
- // 自定义颜色
- tintManager.setTintColor(color);
- }
-
-
- @TargetApi(19)
- private static void setTranslucentStatus(boolean on , Activity acc) {
- Window win = acc.getWindow();
- WindowManager.LayoutParams winParams = win.getAttributes();
- final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
- if (on) {
- winParams.flags |= bits;
- } else {
- winParams.flags &= ~bits;
- }
- win.setAttributes(winParams);
- }
-}
diff --git a/app/src/main/java/com/example/administrator/seven/widget/PastEditText.java b/app/src/main/java/com/example/administrator/seven/widget/PastEditText.java
new file mode 100644
index 0000000..bcff9e2
--- /dev/null
+++ b/app/src/main/java/com/example/administrator/seven/widget/PastEditText.java
@@ -0,0 +1,44 @@
+package com.example.administrator.seven.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.EditText;
+
+/**
+ * Created by: xudiwei
+ *
+ * on: 2017/4/21.
+ *
+ * 描述:
+ */
+
+public class PastEditText extends EditText {
+
+ private static final String TAG = "PastEditText";
+
+ public PastEditText(Context context) {
+ super(context);
+ }
+
+ public PastEditText(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public PastEditText(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public boolean onTextContextMenuItem(int id) {
+
+// if (id == android.R.id.paste) {
+// ClipboardManager clipboardManager = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
+// CharSequence text = clipboardManager.getText();
+// Log.d(TAG, "paste: " + text);
+// SpannableString spannableString = EmojUtils.stringTransSpannable(getContext(), text.toString());
+// this.append(spannableString);
+// return true;
+// }
+ return super.onTextContextMenuItem(id);
+ }
+}
diff --git a/app/src/main/res/drawable-v21/selector_btn_green_bg.xml b/app/src/main/res/drawable-v21/selector_btn_green_bg.xml
index 2780a38..c709483 100644
--- a/app/src/main/res/drawable-v21/selector_btn_green_bg.xml
+++ b/app/src/main/res/drawable-v21/selector_btn_green_bg.xml
@@ -1,11 +1,11 @@
+ android:color="@color/colortheme">
-
-
+
@@ -15,7 +15,7 @@
-
-
+
@@ -23,7 +23,7 @@
-
-
+
diff --git a/app/src/main/res/drawable-xhdpi/chat_left_bg.9.png b/app/src/main/res/drawable-xhdpi/chat_left_bg.9.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf7a6d808dfdef51a89cfc73dd018e2814c68b1c
GIT binary patch
literal 1128
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
FO^-
z1kmqkSPG4ejYFl+3D9gg`8|Wt1^y6oRhn
z&9e0|8ivs#6hb&0E|RUIRZ)~9LVK2osLM2sSLho~_}*q^BO|S^>+9?13GH4(y{)aS
z?U*cG?$8R&Li-p|Z$lwMRaJMQfA0W|&qJH^8+G?SZqF@#@
z3+-)2A%aIkHYN!K0w*Z@K2MZyprD18KrytD&iT*^%|g4}QGuzbs2J&XyQd)3Fj-w)
z-5Q$sw5DmTrfI&UefcBq(&A(vF(>AR255mMXoE&*{mrV;pMCy=(4vexn%C(-dpWPz
z=KfFP?+TW4O&QQAXc_$YYdBEmNhg!m-U1S`l!swXJRQfJm>U{+)i|AN>))^8tfhgh
ziyIM4jI9WX$mjFTrLij>hPf~&e^r*wwWJDM0zaf7tNruw8JVHcS15z4(EtDd07*qo
IM6N<$f?(<_rT_o{
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable-xhdpi/chat_right_qp.9.png b/app/src/main/res/drawable-xhdpi/chat_right_qp.9.png
new file mode 100644
index 0000000000000000000000000000000000000000..2eaa7dd9a71d4bac71a70a42b5ee232cfa700ed4
GIT binary patch
literal 567
zcmV-70?7S|P)&d=T6b9{s
zwUImiLa01V`~F0z8U?gARi0pWK1=0I&byipU8GgcJCxTEJKuC%u@?lv*g#(?n1CX7
z{yEF!+Q6UbJQcHO^PY*vOo=ZK)u&`BKSsLqHBziB4c(}z!hz8FH^M3_k#wpmjPL>A
zN0GJa*xFktc();|{ht6Z?S5m(yhjeemD$Mutzz2!5MAC#0-##XE3g2_F}a>(05#wD
z$CC^o>hQ+}fH1zR3jm7zCseE^Is(ppF_mZlT955501LnZumCIo3%~-f04x9tAh`fc
zKNfH51z`Hc2&_+c1XNAG^VbT%^vhATKCJ*UUS-bU>+!Z)pLQ9aL#1aX0O`e|V>DAD
z!|Q5Yu?achgyp+Uk9p
zb3VM7`
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_clound_solution.xml b/app/src/main/res/layout/activity_clound_solution.xml
new file mode 100644
index 0000000..415e39d
--- /dev/null
+++ b/app/src/main/res/layout/activity_clound_solution.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_comment.xml b/app/src/main/res/layout/activity_comment.xml
new file mode 100644
index 0000000..c3875f7
--- /dev/null
+++ b/app/src/main/res/layout/activity_comment.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_conversation.xml b/app/src/main/res/layout/activity_conversation.xml
new file mode 100644
index 0000000..c3875f7
--- /dev/null
+++ b/app/src/main/res/layout/activity_conversation.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 074e075..36f381e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -174,6 +174,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/criclefragment.xml b/app/src/main/res/layout/criclefragment.xml
new file mode 100644
index 0000000..4ff8108
--- /dev/null
+++ b/app/src/main/res/layout/criclefragment.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/findfragment.xml b/app/src/main/res/layout/findfragment.xml
new file mode 100644
index 0000000..3040c55
--- /dev/null
+++ b/app/src/main/res/layout/findfragment.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/findlist_item.xml b/app/src/main/res/layout/findlist_item.xml
new file mode 100644
index 0000000..c685776
--- /dev/null
+++ b/app/src/main/res/layout/findlist_item.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/findtwo_activity.xml b/app/src/main/res/layout/findtwo_activity.xml
new file mode 100644
index 0000000..66fbe06
--- /dev/null
+++ b/app/src/main/res/layout/findtwo_activity.xml
@@ -0,0 +1,7 @@
+
+
diff --git a/app/src/main/res/layout/findtwo_fragment.xml b/app/src/main/res/layout/findtwo_fragment.xml
new file mode 100644
index 0000000..36f762d
--- /dev/null
+++ b/app/src/main/res/layout/findtwo_fragment.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_questions.xml b/app/src/main/res/layout/fragment_questions.xml
new file mode 100644
index 0000000..d8bd4cd
--- /dev/null
+++ b/app/src/main/res/layout/fragment_questions.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_question_left.xml b/app/src/main/res/layout/item_question_left.xml
new file mode 100644
index 0000000..c550fab
--- /dev/null
+++ b/app/src/main/res/layout/item_question_left.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_question_right.xml b/app/src/main/res/layout/item_question_right.xml
new file mode 100644
index 0000000..f9eeaa2
--- /dev/null
+++ b/app/src/main/res/layout/item_question_right.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rcv_empty.xml b/app/src/main/res/layout/item_rcv_empty.xml
new file mode 100644
index 0000000..1883f4d
--- /dev/null
+++ b/app/src/main/res/layout/item_rcv_empty.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_rcv_load_and_all.xml b/app/src/main/res/layout/item_rcv_load_and_all.xml
new file mode 100644
index 0000000..93a1cbc
--- /dev/null
+++ b/app/src/main/res/layout/item_rcv_load_and_all.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/priletfragment.xml b/app/src/main/res/layout/priletfragment.xml
new file mode 100644
index 0000000..6c513dc
--- /dev/null
+++ b/app/src/main/res/layout/priletfragment.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/private_let_item.xml b/app/src/main/res/layout/private_let_item.xml
new file mode 100644
index 0000000..c685776
--- /dev/null
+++ b/app/src/main/res/layout/private_let_item.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/icon_live.png b/app/src/main/res/mipmap-hdpi/icon_live.png
new file mode 100644
index 0000000000000000000000000000000000000000..1fed0648ef333f66cedc8f1013c3535231275c96
GIT binary patch
literal 789
zcmV+w1M2*VP)2%r*4Gpc4
zbVAZLlFJd%BdJVs7=V*>!8!Mi*4j1U1<7?0>CP0^1IWcUEoy#R2p
zTrQvJ@9+OmEySMy>@~*R2wO%{p5!tB1n{X;D(xH{9eq@d8}$HqCux&0=79HpAITLJ
zkgWH}GN9qEQ&1M^eKzn=pdXh(sG5Y`*NpArhcg|h^D*)d`thHN6hB^}V
z$H$S8ktMS&M_nE0>gt+bC=^;r9+tGZ0(3E(%^r%}ftHq*1@UWhqRvKek#>U2O=W@9>)nq*VpFaYq
zMesks6bIPW*0v%Ri`^i(MbgPx=K*W&Jd*n*Z4D*19@di#al-Vqf#is!))@g(snmjE
zv3Qnb7l2qj#HYjv1L?S=bUvT&`3WE%j~5Gt!uHC!UK`pjfI9&4b%F@uuSwo(Zf<_u
z-QDef02GVG#)gK5VvJpjJ~M2SDk
Tlj@eS00000NkvXXu0mjfh8Jag
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-hdpi/icon_watch_k.png b/app/src/main/res/mipmap-hdpi/icon_watch_k.png
new file mode 100644
index 0000000000000000000000000000000000000000..d14f2b7aaf9d84a65bc4a794e0574834ab89df43
GIT binary patch
literal 1723
zcmV;s21NOZP)S3JnzrvJcpQn(R+WnbM8IWYV~I4+!~VaQ`J@g?*{NM0RIN?X8_MR=YBgiH8r|?
z`SMDCf4?knHaORYo}QlerluyZs$Bp+MDp#b3i7QcGyY#u)k7qQMn^|?4G$0hZ$1ak
z3f|q_y(FK{r>fdPve^#L)@xam$4MSj)oTG)?e#
zp)-o2VF0bF`YM3#5WA1>kvAErk&N-q_EsuCB$+&COe#bN8$2
zaR3`b2)hAHciDwHVZ8w0D^^MXHIkc>Br#{|%jWnx0M7!rlH~3rNj`m{U~}1d??*^3
z1#m)DFKsj*<2e2d$*0US5xJpUE{|Mn@HmcFkUTCn9&GX}Z52c^t=2I_GReUP_YW
z#)}PX=XvknM)D6CZ%k*G#bWXI06qxdkt9jJ)Bw+VVWp}ruGMP8`}XadXq2kAxA&S{
zF1M;ytNqS7_evv;-urg|Fq_Kw`1rx$;o+*;^!4>MRVtNTBx6;5DTGiD(rR8Id6|fO
zK26gfG{B3+;$~I-c1EXzs=6VBFj*>x_EM;7wyQ5!sNY>5m)W-uoRS@3!BnYT5BNCf@svB&}oXW9po{
zX>f4x#h#v?)?6<47m^lz-6n)^YXcm>R+3*-)z`+x#;&!j82GCsmx##bG)=cQz~eZ+
z$2n)2Fw*&ck|bZXZ@s;}S4UCw6v>qU#;eupiamSw7zJBxe+J+qBu|M*Ax%@`j(XZB
zCMGPfdsOw0A%qXq(_SnVpHx+AxL<`3RyV*igHHgsVsvzLN27k316M{-beD)cQ!bZZ
zoY|z_`*l$i9UB}RJka2Zb?eqGI&tE}a{z7z5c2u_eLHvVJkC<7WZpbs6sW50R@aN&
z@oU$vy-Gxms%oC(1FCxU%ks$+9)q_)0Q>A=9KM24W@7d`qwNNN*h@$9ws(J|k8?E(A
zmo9zzLQ1e@%N92>GIE=9ZilKaF-|9Wf086Si^Za){XV-rr@_tO$dMzP0DO&Pi>kg%
za$AxlKRTZb*t|zkWU2kKk(U9B$U~i-oljUG#bVJk!>0foIz!2r2xx0-`+{@M*eC*E
z3iQEqbs&!8Pm(leuOdlRHA-F|LfAWlyi6x_sOs*w2uSaJq^fqvc9K_^2&h)8K8m9C
z0B$jL8by%_4%2s+iiiQ-sH!WB6EaZim*+|LcXV_d$Vz9ISdVkA4B)gyKc{pq7K^_&
zwlZyQQ$W%#A7i`vQdKpenI*|o?jaF*R78HcckkZO#`moG9wYgFquyGr);%Y<_ujhy
z_J$@`RZ}9S!_8*;PgNbsNfCJ*K$@oM!PzRvd%x1Oyp=;$-%!=QG);#V1ka*0y}rFt
zscdU&YrDkMNVQsRilXSl0PZl&o(aW6_Hq%CH=J`O92Su@<@+?rMXGvKL>_5vZ5j>fBhyjt2T!RqY4RoK?Y^)N1Ykn0Eh6WY^HpkUc8v>!O0sR)1g3$@B0TLG6Oc-wmr-9
z`~jFd`&FaK4uaqWP+6AU4sLQhA**$aI$90GU;eb8=$=0lDD@@#00000NkvXXu0mjf
Dv}}r+
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-mdpi/icon_live.png b/app/src/main/res/mipmap-mdpi/icon_live.png
new file mode 100644
index 0000000000000000000000000000000000000000..5296939bbae82190645ac52091d048eba20b2c80
GIT binary patch
literal 574
zcmV-E0>S->P)IOmQ7cq}4G0DCa!F|)pi
zyajMsGMUT=lKV+M34)+ECle%>NG_9n7ejj_3*P%XV}SDSozoJg)9Ht*dM1YMki6=>
zzdst3&1M(-{r({{8>s3x@BJ?TW8u!ZRRC@*G@s9FwOT!^s`mi=FtcZ>`nucgeyvn0
zzjsqT6`ITC7CN2IMKfCwkuM|{0c?p#k>ncy4exz444(yhiR4|9`&88dI0#?^z?%2I
zK3tBOpdxakSS*I=bo!i#6h!2RnOzW(7sG02g|3k_0Ov*Iu$jFVkq6%Ut+|wvyhZX8
zfJ9tdGkb1kuS%s-V{{UxDvi5etJO}6$O_4yB+Ee%Y&4tAk6{?@%+>uk$T^n)a5Rdd
z?ZIHMSuU5iCmCR>(vjfURdYK^QmIrT2!d0px-`v}!~anf9SDNp3dzs^9o1^J))R@u
zF;%^;swV&}%mM`vk*u59wZBj^y9uBtBFpg&U_FYW%~_x#67P^kyWMVxb8Z0OyNK*1
z`BGJHn^`@XOzzs@Nr?)DLOjcel|BM+lH_Wu)p{C+VZ1D+Hf0k04{aWWT*wUsSpWb4
M07*qoM6N<$f;`jwY5)KL
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-mdpi/icon_watch_k.png b/app/src/main/res/mipmap-mdpi/icon_watch_k.png
new file mode 100644
index 0000000000000000000000000000000000000000..d052eac0d3dc6545675b34b9729b6b5b532d9529
GIT binary patch
literal 1123
zcmV-p1f2VcP)*?CA9d6J@3{fvcvc%0l8D3~GLP$m$Q?jw1a)p`1kwB1WL^R&aa)a>-
z5&@Z-pb(AwHl~}QfC)AVk{H6GY#K4dKWH-7%}Hr%JI?tY^AScECI-*loAaID_n!B8
zpGPqNQJtNgO~GJrHAxr1qW~5GZ~*)b;5QM;lk5+N!=r}|9jXA}%?Oz*QmIsZC=^x-wlI>DBtI09
z_qEm*c%uW?bt5DnS4urYay5X9zVE*pkH^pS_4V0HA+GBNeBVz80)c%1zVO=;*jF7z`c-Pynz=YyI7S!RFre_V%i=
zv9T>msaHrIEtkvNbGcm6c4&WdD}bJXfq^5p1DiWzJ8fuac$Z{5fOf6*Hx@Wba#lp1
z&|1&7wY3FXTU!GM4<4-9`K?^J(uqVOfmkf&X{~)bqC%k%Oe7LlZJo(vQY7Co#_Viq
zY1waqe~~;gFfgz&nM^K-Mx$#;HY%mQ0PqulHj>LlhH{n5&r<Txe7A@^
zOS0GVyaT0DiH(hor>&q2Y`m_n?sJkOBC_2APXdSmcv5R!bzL`FtJR{z!^2i}vth%A
zXti3cFO^EgTrO9$yXbjd!_3S~F`v)d^Xp0O1@H;UH>Inqt4Ard%NVm|aB#5y|ES#A
z*}2GZoVQ6nq?EFT_*T}fTX$C=5I77V0$_*M`qb?}ZReFr<$0ylb5;WpSpi_FwVn-x
z)sExr5s?X!2MUG4;LZNL^#a#*mxxG@F{T^9DbMqI9mjc1DfQGfFL!r$hs))1(kcod
zN^)N;7JKjV<;&4TB2nz?>+@2nRHVMX{(fVO_3$bHkC6OSMD~_Sr3==N1Z=}t2
z<6A}F0`Q|T=6j`7Gk~%c2S7+ftonBX_?6^g$8kn{-@jyx=}=1T2k_Aipbd(yuC9jz
zfxropHhrc=No{>uoz@n=EI~
zp1mU+4nHO$YXCeTA|U{a0o+4!cdb^-j*N^{<^ktE&StYVROdzeb)~HlRH0CiWy_Yy
pl`B^k`o90Nh@3ALiyzp<{|5s19GbjGhjjn|002ovPDHLkV1n_j6Kntg
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-mdpi/marking_down_pic.png b/app/src/main/res/mipmap-mdpi/marking_down_pic.png
new file mode 100644
index 0000000000000000000000000000000000000000..49f913164021aedab5f707080279783fdc48d383
GIT binary patch
literal 194
zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4PEQxd5RKsE6a_(pNh{_x_DS{h
z_D=o(|G#|m;ZE=KbFItSRoWk^C@U}C+0)bGnK4Ujj%~G>pjz9ag9i^bKE1r$KUzXk
z@~$J-zyJUDw@;jS@%5XVoA+s*7&CTidO1C>qr||Id
sE{%wYnBhO)?ytmM{}P_Cq+}U}#M7$0A6`}#10BWS>FVdQ&MBb@032XX5dZ)H
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-xhdpi/icon_live.png b/app/src/main/res/mipmap-xhdpi/icon_live.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ed17ff6ecb0891b208d017b5a86aa9ecf797ead
GIT binary patch
literal 778
zcmV+l1NHogP)>$YsYE}TOpy3V8SSnpX$qE`)&}0Q^UTxW@
z`jH127lQExQ?>H~_%ieP_qol1L_7wAK|6|~F*CP`sAG@U`1v4&xM${(G3MTK5WYw$
zheC)k5na>>xOeF&if%m5o8SV1vSAqhI9FKv6j2midY-o=DdmEQKHvm1-x1M7YrUvj
zX(=Vl(oM1%W4Zu_y4Geto*kuYTI!T5BSu6ekbVt!#RIr4$_QZEOMW&K_7wxg?_Z
z0EQj^d%$r>yn-Jv^KGNi7|rK%#L!Yk=?Y6JpLT>q*Z2MDVzKyDl)6;le!t&!9OwHU
zD5&get!G7`D+6ZcM1UJW;N#($R
z?DcvVtyb$=2=O@u4V%6(#@uFA`y{~0OcjP9)Ly6l#K@dcPYP@Sl~O%s{$isEGf#~%
zcmoH=$$^zppO_gcZ%Wr>xp;{9WWWe{M1&eUy&0Hktxw}s&1}tPvr~qm=?AC;_>f9P&i@B4qF$DJlN$uz_g|m&
zo(?rg9NX6pZH#GW21a9JN7a=@q`cQ4rEjvOEtoO^E2YLlh)mU0Ub>g=gStTwbdV`u
z1diK9C<|-rW-{})AP9ywt?va^N@2Hn+O3;rTVjG0
zGY`}DlV^dl?*T9(0Girw;)-h;1c95U*e)Ax*L>^$IR2*b8^)?%B*lW6@c;k-07*qo
IM6N<$f^*SltpET3
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-xhdpi/icon_watch_k.png b/app/src/main/res/mipmap-xhdpi/icon_watch_k.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab667f4ede811d3377a8893b5e3d86da7f8f43bd
GIT binary patch
literal 2165
zcmV-*2#WWKP)OVySZFjzurqcoe+7&le3efOUGwr(sxkt!)rgQ1pSDYZ3{
z0REstKx#r%XwTgH7Al}=Ar+#Ch?W{-aud^kxk$ZM06ezc>pI5wO>TuC87@!(H0T;K^(`w9cs@&zYhy&7>2hQW4=v9
zy+kx=G=_AKh#VrKHvwGbocrTQ^b88LR4PsL-fseM77=|Qr}!`t84=k|MB4$pOho_D
zeF5e#DL%){p}^E*T784#$(B7ob8=%nn*6yP()m=zl~Z0H_JX`|nx
zD7soit|y}DH4lqOZ!e`g7U;kPo8~uPrQFM)n+z#OMOu=)^Jm+`;%qjbJ8JZ
zu6j5xRiIH6y+TCOvLBptt~6dC)lRWkoLVRp{-h6BME(n4nRD*v{eX6KbbQo%uPNsw
z5qSr|f{|8@<8i1ciZrXt&2(*Z&RyIOs3vv*-_yz?BKw(H$;G%!6h(`ONWG}JyH`Zc
zU}i13Re`luE6qFr6N0}M4*6spuj)?5?-Y-p(VaBoKO!RP^;hCJ{{BD*vDSVSK&$uu@i>ml^=sPO+fQw3YP!Q1v)?(lqJfS*wL+s6
zjG2Gh2Q-Qzt+SK#+5s$f&OMP=q9BRrF96OKk@tw`31+tWHDMU)-|LJq&8mlpu4d+q
zwKdk-Qvke}OYToIb89`=D2lccQ8hNzG0gm(JWypoQ$%Es_x|!EN&Z;}lmUdbZ@Ml`
z(?#WSd5eB)ZEbCuJbAKS*@tp#b~1C7v+B1X2<|Er3QBUSA|iWSC}!LZiq)oZR+^1Y6kzcs*H*a6^NWmEvJbB|*R^RkN8e=r$Xrt(7%$PA@
z_3G8t7+1lfMT=U}G~JaYd_74UGwU^ttAt^AuQ5g&N0leN_s;{E%gmQmf$D!@7&>E2
zE#*AtoEsAk+UVrg+KT}Eo`_D@_C!Rk0HEYr)8UoO{CE{;5CpReg~Fz+!`xG;RHAaZ
z{LFZ{Gz`PXj4=x`dz${1Y8U{}$GMf6XZ10BYwdafHP-Ym=iK!10BWsW0pRA$Ne4wF
zG{&6iy}v&r)Q2ZdoOo6r&{eBeneOiHquK^5KoQx&%+)qwtRx76D~vH~wZ3OIAJrDR
zt*vcRb93{ytPt%cqEf$}$y%!;nn$%~$|&D~v1&(xAh@AWD6GszL5lM&=UlC!RE}IL
z?Qam#^~ZFf3l}c@LQ_-I!?oT?L=L8D+I~D^HVi{;Ait(DnBCS9=Um@_!dhDZpoKwi
zw;B$O`uc@L^gyl~)wHD~p^wdsCLFSOTF~;aTN<(bt%$YOK%je9j(fn&>|4^k;
zxv=4+B#NT>BJvo3iK@_h|F(#HGf9#MM*=bo!`3YIX+Hc|ZgzEqh+cBeRU68@SZi-0
zqBUw;ME=dppB!}d)Y;iNskgWHSt7bXODqxHjWOqo
zh<30#T(|^)=0dGDeWG3zkq7has1E4g0bC>^dYGRu^YS65dDhxjiRcqGpd!+&gn@`A
zkHoXtT5TB?yA`#+WZ>!?Por@bgS=*g$IliAYbXWo>>V%V8Ln0cgW`
zg7^M_F-E!U!$kC=_x^Pv(hxY;dw+6EOUn=U?c29fb82Q|pZ9)q9LH6r-{+vAP8x=x
z&Z90?C4)79c|B1S1w_=Z&B*<(d9g>w&;YeMpV3sA`_1@1*lH`RE1Jw=1VsY;KsZ8o&5osf$
z8Cf@5A);L(@}@CH=cLs`=#cDv0Ueh6M!Bd|DqZNk*CB`w#w!1}Kx^l-*6K7-JK6cn
roQ~@1N9n8)Z?o2(z|2ZUj*xJ7)XdCG`0wApM;RCx
z)NxpH_us#Nmgmo(e~rr#1oMHZsj1SxfB%j#FffRt8S<8ync3>psZ+P``H-LmAkC(x
zrl$Y?{oBvLz`zYP><0q_gX`I|XO9qyBcdz-8DeB)kD|4a-F3{mIKodYET
zf`DiXKqeU*8)q;wGV+}{bEb=+$xsC(SwO6z$m&KdAQ)<+K}0Z!0PZC|8PBG>F8}}l
M07*qoM6N<$g4mIb>i_@%
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-xxhdpi/fangan_location.png b/app/src/main/res/mipmap-xxhdpi/fangan_location.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c6230fcd8bc35d8756ce05e2c97f3b300a7c461
GIT binary patch
literal 2748
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
+
+
diff --git a/build.gradle b/build.gradle
index 45dd29e..6a4f7ce 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
-
+ classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
diff --git a/citypicker/.gitignore b/citypicker/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/citypicker/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/citypicker/build.gradle b/citypicker/build.gradle
new file mode 100644
index 0000000..876d89f
--- /dev/null
+++ b/citypicker/build.gradle
@@ -0,0 +1,34 @@
+apply plugin: 'com.android.library'
+apply plugin: 'com.github.dcendents.android-maven'
+group='com.github.zaaach'
+
+android {
+ compileSdkVersion 28
+ buildToolsVersion "28.0.3"
+ defaultConfig {
+ minSdkVersion 14
+ targetSdkVersion 27
+ versionCode 7
+ versionName "2.0.3"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
+ exclude group: 'com.android.support', module: 'support-annotations'
+ })
+ testImplementation 'junit:junit:4.12'
+ compileOnly 'androidx.appcompat:appcompat:1.0.0'
+ compileOnly 'androidx.recyclerview:recyclerview:1.0.0'
+ api 'com.google.android.material:material:1.0.0'
+}
\ No newline at end of file
diff --git a/citypicker/proguard-rules.pro b/citypicker/proguard-rules.pro
new file mode 100644
index 0000000..40bdd43
--- /dev/null
+++ b/citypicker/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in F:\Android\sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/citypicker/src/androidTest/java/com/zaaach/citypicker/ExampleInstrumentedTest.java b/citypicker/src/androidTest/java/com/zaaach/citypicker/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..5029a6e
--- /dev/null
+++ b/citypicker/src/androidTest/java/com/zaaach/citypicker/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.zaaach.citypicker;
+
+import android.content.Context;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumentation test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() throws Exception {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.zaaach.citypicker.test", appContext.getPackageName());
+ }
+}
diff --git a/citypicker/src/main/AndroidManifest.xml b/citypicker/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..ae05bf7
--- /dev/null
+++ b/citypicker/src/main/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/citypicker/src/main/assets/china_cities_v2.db b/citypicker/src/main/assets/china_cities_v2.db
new file mode 100644
index 0000000000000000000000000000000000000000..34d204a1fd4581f6906caf4c14cbac531b0a1cfa
GIT binary patch
literal 122880
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