Browse Source

Merge branch 'developer' of https://gitlab.com/Arisono/SkWeiChat-Baidu into feature_raomeng

# Conflicts:
#	WeiChat/version.properties
RaoMeng 7 years ago
parent
commit
f0ea931cbf
22 changed files with 586 additions and 38 deletions
  1. 12 8
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java
  2. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/PushNetMessageReceiver.java
  3. 1 1
      WeiChat/version.properties
  4. 10 0
      app_core/common/src/main/assets/work_menu.json
  5. 5 0
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  6. 19 13
      app_core/common/src/main/res/layout/pop_work_activity.xml
  7. 1 0
      app_core/common/src/main/res/values/strings.xml
  8. 5 1
      app_modular/applocation/src/main/java/com/uas/applocation/utils/LocationNeerHelper.java
  9. 9 1
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/SettingActivity.java
  10. 8 0
      app_modular/appmessages/src/main/java/com/modular/appmessages/model/MessageNew.java
  11. 2 1
      app_modular/apptasks/src/main/java/com/modular/apptasks/presenter/SchedulePresenter.java
  12. 1 0
      app_modular/appworks/build.gradle
  13. 79 10
      app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleActivity.java
  14. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleSearchActivity.java
  15. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/activity/SchedulerCreateActivity.java
  16. 11 0
      app_modular/appworks/src/main/java/com/uas/appworks/model/Schedule.java
  17. 5 0
      app_modular/appworks/src/main/res/drawable/icon_time_helper.xml
  18. 2 0
      app_modular/facesdk/src/main/AndroidManifest.xml
  19. 347 0
      app_modular/facesdk/src/main/java/com/baidu/aip/excep/activity/FaceManageActivity.java
  20. 4 0
      app_modular/facesdk/src/main/res/drawable/bg_delete_btn.xml
  21. 23 0
      app_modular/facesdk/src/main/res/layout/activity_face_manage.xml
  22. 39 0
      app_modular/facesdk/src/main/res/layout/item_face_list.xml

+ 12 - 8
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java

@@ -458,15 +458,19 @@ public class MainActivity extends BaseActivity implements ImStatusListener, NetW
                 mTabRadioGroup.clearCheck();
                 mTabRadioGroup.check(R.id.main_tab_one);
             } else if (action.equals(LoginHelper.ACTION_LOGOUT)) {
-                MyApplication.getInstance().mUserStatus = LoginHelper.STATUS_USER_SIMPLE_TELPHONE;
-                if (mCoreService != null) {
-                    mCoreService.logout();
+                try{
+                    MyApplication.getInstance().mUserStatus = LoginHelper.STATUS_USER_SIMPLE_TELPHONE;
+                    if (mCoreService != null) {
+                        mCoreService.logout();
+                    }
+                    cancelUserCheckIfExist();
+                    AlarmUtil.cancelAlarm(AlarmUtil.ID_SCHEDULE, AlarmUtil.ACTION_SCHEDULE);
+                    startActivity(new Intent(MainActivity.this, LoginActivity.class));
+                    // mFindRb.setChecked(true);
+                    MainActivity.this.finish();
+                    removeNeedUserFragment(false);
+                }catch (Exception e){
                 }
-                cancelUserCheckIfExist();
-                startActivity(new Intent(MainActivity.this, LoginActivity.class));
-                // mFindRb.setChecked(true);
-                MainActivity.this.finish();
-                removeNeedUserFragment(false);
             } else if (action.equals(LoginHelper.ACTION_CONFLICT)) {
                 // 改变用户状态
                 MyApplication.getInstance().mUserStatus = LoginHelper.STATUS_USER_TOKEN_CHANGE;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/PushNetMessageReceiver.java

@@ -75,7 +75,7 @@ public class PushNetMessageReceiver extends PushMessageReceiver {
                 .add("deviceType", 3)
                 .add("channelId", channelId)
                 .build();
-        HttpClient httpClient = new HttpClient.Builder("http://192.168.253.230:8080/schedule/").isDebug(false)
+        HttpClient httpClient = new HttpClient.Builder(com.core.utils.CommonUtil.getSchedulerBaseUrl()).isDebug(false)
                 .connectTimeout(5000)
                 .readTimeout(5000).build();
         httpClient.Api().post(mHttpClient, new ResultSubscriber<>(new Result2Listener<Object>() {

+ 1 - 1
WeiChat/version.properties

@@ -1,4 +1,4 @@
-#Wed Sep 05 14:22:06 CST 2018
+#Wed Sep 05 09:10:07 CST 2018
 debugName=579
 versionName=653
 debugCode=579

+ 10 - 0
app_core/common/src/main/assets/work_menu.json

@@ -75,6 +75,16 @@
         "menuUrl": "",
         "caller": "",
         "isHide": false
+      },
+      {
+        "isLocalMenu": true,
+        "menuName": "title_time_helper",
+        "menuIcon": "icon_time_helper",
+        "menuActivity": "com.modular.work.TimeHelperActivity",
+        "menuTag": "local_time_helper",
+        "menuUrl": "",
+        "caller": "",
+        "isHide": false
       }
     ]
   },

+ 5 - 0
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -217,6 +217,11 @@ public class CommonUtil {
         }
         return "https://api-inquiry.usoftmall.com/";
     }
+    //日程管理网址
+    public static String getSchedulerBaseUrl() {
+//        return "http://192.168.253.230:8080/schedule/";
+        return "https://mobile.ubtob.com:8443/schedule/";
+    }
 
     /**
      * B2B身份uid

+ 19 - 13
app_core/common/src/main/res/layout/pop_work_activity.xml

@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
-    style="@style/commonPopView"
-    xmlns:android="http://schemas.android.com/apk/res/android">
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/commonPopView">
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -12,8 +11,7 @@
         <TextView
             android:id="@+id/super_setting_tv"
             style="@style/commonPopItemTop"
-            android:text="@string/super_setting"
-            />
+            android:text="@string/super_setting" />
 
         <View
             android:id="@+id/super_setting_line"
@@ -24,8 +22,7 @@
         <TextView
             android:id="@+id/work_setting_tv"
             style="@style/commonPopItem"
-            android:text="@string/work_setting"
-            />
+            android:text="@string/work_setting" />
 
         <View
             android:id="@+id/work_setting_line"
@@ -33,11 +30,22 @@
             android:layout_height="0.3dp"
             android:background="@color/button_invalid" />
 
+
+        <TextView
+            android:id="@+id/face_setting_tv"
+            style="@style/commonPopItem"
+            android:text="@string/face_setting" />
+
+        <View
+            android:id="@+id/face_setting_line"
+            android:layout_width="match_parent"
+            android:layout_height="0.3dp"
+            android:background="@color/button_invalid" />
+
         <TextView
             android:id="@+id/office_addr_setting_tv"
             style="@style/commonPopItem"
-            android:text="@string/office_addr_setting"
-            />
+            android:text="@string/office_addr_setting" />
 
         <View
             android:id="@+id/office_addr_setting_line"
@@ -48,15 +56,13 @@
         <TextView
             android:id="@+id/my_rule_setting_tv"
             style="@style/commonPopSingleItem"
-            android:text="@string/my_rule_setting"
-            />
+            android:text="@string/my_rule_setting" />
 
     </LinearLayout>
 
     <TextView
         android:id="@+id/cancel_tv"
         style="@style/commonPopCancelItem"
-        android:text="@string/common_cancel"
-        />
+        android:text="@string/common_cancel" />
 
 </LinearLayout>

+ 1 - 0
app_core/common/src/main/res/values/strings.xml

@@ -614,6 +614,7 @@
     <!-- start 打卡签到 oasign_title-->
     <string name="super_setting">高级设置</string>
     <string name="work_setting">排班设置</string>
+    <string name="face_setting">人脸照片管理</string>
     <string name="office_addr_setting">办公地址设置</string>
     <string name="my_rule_setting">我的考勤规则</string>
     <string name="sm_cancel_title">取消</string>

+ 5 - 1
app_modular/applocation/src/main/java/com/uas/applocation/utils/LocationNeerHelper.java

@@ -151,7 +151,11 @@ public class LocationNeerHelper {
                             List<PoiInfo> poiLists = poiResult.getAllPoi();
                             List<UASLocation> mUASLocations = new ArrayList<>();
                             for (PoiInfo e : poiLists) {
-                                mUASLocations.add(ModelChangeUtils.poiInfo2Location(e));
+                                UASLocation model = ModelChangeUtils.poiInfo2Location(e);
+                                if (model==null||(model.getLatitude()==0&&model.getLatitude()==0)){
+                                }else{
+                                    mUASLocations.add(model);
+                                }
                             }
                             mOnSearchLocationListener.onCallBack(true, mUASLocations);
                         } else {

+ 9 - 1
app_modular/appme/src/main/java/com/uas/appme/settings/activity/SettingActivity.java

@@ -30,6 +30,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.alibaba.fastjson.JSON;
+import com.baidu.aip.excep.activity.FaceManageActivity;
 import com.baidu.android.pushservice.PushManager;
 import com.baidu.autoupdatesdk.AppUpdateInfo;
 import com.baidu.autoupdatesdk.AppUpdateInfoForInstall;
@@ -483,7 +484,11 @@ public class SettingActivity extends SupportToolBarActivity implements View.OnCl
             intent = new Intent(mContext, FlightsActivity.class);
             startActivityForResult(intent, 0x12);
             closePopupWindow();
-        } else if (v.getId() == R.id.office_addr_setting_tv) {
+        }else if (v.getId()==R.id.face_setting_tv){
+            intent = new Intent(mContext, FaceManageActivity.class);
+            startActivityForResult(intent, 0x13);
+            closePopupWindow();
+        }else if (v.getId() == R.id.office_addr_setting_tv) {
             startActivityForResult(new Intent(mContext, OfficeAddressSettingsActivity.class), 0x12);
             closePopupWindow();
         } else if (v.getId() == R.id.my_rule_setting_tv) {
@@ -656,12 +661,15 @@ public class SettingActivity extends SupportToolBarActivity implements View.OnCl
             viewContext.findViewById(R.id.super_setting_tv).setVisibility(View.GONE);
             viewContext.findViewById(R.id.work_setting_tv).setVisibility(View.GONE);
             viewContext.findViewById(R.id.office_addr_setting_tv).setVisibility(View.GONE);
+            viewContext.findViewById(R.id.face_setting_tv).setVisibility(View.GONE);
+            viewContext.findViewById(R.id.face_setting_line).setVisibility(View.GONE);
             viewContext.findViewById(R.id.super_setting_line).setVisibility(View.GONE);
             viewContext.findViewById(R.id.work_setting_line).setVisibility(View.GONE);
             viewContext.findViewById(R.id.office_addr_setting_line).setVisibility(View.GONE);
         } else {
             viewContext.findViewById(R.id.super_setting_tv).setOnClickListener(this);
             viewContext.findViewById(R.id.work_setting_tv).setOnClickListener(this);
+            viewContext.findViewById(R.id.face_setting_tv).setOnClickListener(this);
             viewContext.findViewById(R.id.office_addr_setting_tv).setOnClickListener(this);
         }
         viewContext.findViewById(R.id.my_rule_setting_tv).setOnClickListener(this);

+ 8 - 0
app_modular/appmessages/src/main/java/com/modular/appmessages/model/MessageNew.java

@@ -6,6 +6,7 @@ package com.modular.appmessages.model;
  */
 
 public class MessageNew<T> {
+    private  String bindTopId;//置顶对应id
     private int type;//0.头文件  1.正常数据
     private int imageId;//头像图片(本地资源)
     private int unRedNum;//未阅读的个数
@@ -18,6 +19,13 @@ public class MessageNew<T> {
     private Class cazz;
     private T t;
 
+    public String getBindTopId() {
+        return bindTopId;
+    }
+
+    public void setBindTopId(String bindTopId) {
+        this.bindTopId = bindTopId;
+    }
 
     public int getType() {
         return type;

+ 2 - 1
app_modular/apptasks/src/main/java/com/modular/apptasks/presenter/SchedulePresenter.java

@@ -8,6 +8,7 @@ import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.core.app.MyApplication;
+import com.core.utils.CommonUtil;
 import com.me.network.app.http.HttpClient;
 import com.me.network.app.http.rx.Result2Listener;
 import com.me.network.app.http.rx.ResultSubscriber;
@@ -36,7 +37,7 @@ public class SchedulePresenter {
 
     private HttpClient getHttpClient() {
         if (httpClient == null) {
-            String baseUrl = "https://mobile.ubtob.com:8443/schedule/";
+            String baseUrl = CommonUtil.getSchedulerBaseUrl();
             if (!StringUtil.isEmpty(baseUrl)) {
                 httpClient = new HttpClient.Builder(baseUrl).isDebug(true)
                         .connectTimeout(5000)

+ 1 - 0
app_modular/appworks/build.gradle

@@ -24,4 +24,5 @@ dependencies {
     compile project(path: ':imageload')
     compile 'com.android.support.constraint:constraint-layout:1.0.2'
     compile project(':facesdk')
+    compile project(path: ':appbooking')
 }

+ 79 - 10
app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleActivity.java

@@ -2,6 +2,7 @@ package com.uas.appworks.activity;
 
 import android.content.Intent;
 import android.graphics.Color;
+import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
@@ -22,6 +23,8 @@ import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.core.app.MyApplication;
+import com.core.utils.CommonUtil;
+import com.core.utils.ToastUtil;
 import com.modular.apputils.activity.BaseNetActivity;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.network.Parameter;
@@ -29,6 +32,9 @@ import com.modular.apputils.network.Tags;
 import com.modular.apputils.widget.compactcalender.CompactCalendarView;
 import com.modular.apputils.widget.compactcalender.Lunar;
 import com.modular.apputils.widget.compactcalender.domain.Event;
+import com.modular.booking.activity.services.BServiceAddActivity;
+import com.modular.booking.model.BookingModel;
+import com.modular.booking.model.SBListModel;
 import com.uas.appworks.R;
 import com.uas.appworks.datainquiry.Constants;
 import com.uas.appworks.model.Schedule;
@@ -85,7 +91,7 @@ public class ScheduleActivity extends BaseNetActivity {
 
     @Override
     protected String getBaseUrl() {
-        return "https://mobile.ubtob.com:8443/schedule/";
+        return CommonUtil.getSchedulerBaseUrl();
     }
 
     private void initView() {
@@ -156,7 +162,7 @@ public class ScheduleActivity extends BaseNetActivity {
         requestHttp(new Parameter.Builder()
                         .addParams("imid", MyApplication.getInstance().getLoginUserId())
                         .addParams("day", dateStr)
-                        .url("schedule/byDaySchedule")
+                        .url("schedule/getByDaySchedule")
                         .record(LOAD_DAY)
                 , mOnSmartHttpListener);
     }
@@ -175,7 +181,7 @@ public class ScheduleActivity extends BaseNetActivity {
                         break;
                 }
             } catch (Exception e) {
-                LogUtil.i("gong","e="+e.getMessage());
+                LogUtil.i("gong", "e=" + e.getMessage());
 
             }
 
@@ -219,8 +225,9 @@ public class ScheduleActivity extends BaseNetActivity {
                 chche.setWarnTime(JSONUtil.getInt(object, "warnTime"));
                 chche.setAddress(JSONUtil.getText(object, "address"));
                 chche.setStatus(JSONUtil.getText(object, "status"));
+                chche.setDetails(JSONUtil.getText(object, "details"));
                 schedules.add(chche);
-                if (!ListUtils.isEmpty(systemSchedule)){
+                if (!ListUtils.isEmpty(systemSchedule)) {
                     for (Schedule e : systemSchedule) {
                         if (e.getId() == chche.getId()) {
                             systemSchedule.remove(e);
@@ -328,15 +335,78 @@ public class ScheduleActivity extends BaseNetActivity {
         private View.OnClickListener mOnClickListener = new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                if (view.getTag() != null && view.getTag() instanceof Schedule) {
-                    Schedule mSchedule = (Schedule) view.getTag();
-                    startActivityForResult(new Intent(ct, SchedulerCreateActivity.class)
-                            .putExtra(Constants.Intents.ENABLE, false)
-                            .putExtra(Constants.Intents.MODEL, mSchedule), 0x11);
+                try {
+                    if (view.getTag() != null && view.getTag() instanceof Schedule) {
+                        Schedule mSchedule = (Schedule) view.getTag();
+                        toDetailActivty(mSchedule);
+                    }
+                } catch (Exception e) {
                 }
             }
         };
 
+        private void toDetailActivty(Schedule mSchedule) throws Exception {
+            if ("个人预约".equals(mSchedule.getType())) {
+                Bundle bundle = new Bundle();
+                BookingModel model = getBookingModelByString(mSchedule.getDetails());
+                if (model==null){
+                    ToastUtil.showToast(ct,R.string.error_message);
+                    return;
+                }
+                bundle.putParcelable("model", model);
+                startActivity(new Intent("com.modular.booking.BookingDetailActivity")
+                        .putExtras(bundle));
+            } else if ("商务预约".equals(mSchedule.getType())) {
+                BookingModel mBookingModel = getBookingModelByString(mSchedule.getDetails());
+                if (mBookingModel==null){
+                    ToastUtil.showToast(ct,R.string.error_message);
+                    return;
+                }
+                SBListModel model = new SBListModel();
+                model.setId(Integer.valueOf(mBookingModel.getAb_id()));
+                model.setAddress(mBookingModel.getAb_address());
+                model.setType(mBookingModel.getAb_content());//行业关键代码
+                model.setIndustrycode(mBookingModel.getAb_content());
+                model.setEndtime(mBookingModel.getAb_endtime());
+                model.setName(mBookingModel.getAb_bman());
+                startActivity(new Intent(ct, BServiceAddActivity.class)
+                        .putExtra("model", model)
+                        .putExtra("isEdited", false)
+                        .putExtra("dataService", mBookingModel.getData_service()));
+            } else {
+                startActivityForResult(new Intent(ct, SchedulerCreateActivity.class)
+                        .putExtra(Constants.Intents.ENABLE, false)
+                        .putExtra(Constants.Intents.MODEL, mSchedule), 0x11);
+            }
+        }
+
+        private BookingModel getBookingModelByString(String json) throws Exception {
+            JSONArray array = JSON.parseArray(json);
+            if (!ListUtils.isEmpty(array)){
+                JSONObject object =array.getJSONObject(0);
+                BookingModel model = new BookingModel();
+                model.setAb_id(JSONUtil.getText(object, "ab_id"));
+                model.setAb_bman(JSONUtil.getText(object, "ab_bman"));
+                model.setAb_bmanid(JSONUtil.getText(object, "ab_bmanid"));
+                model.setAb_starttime(JSONUtil.getText(object, "ab_starttime"));
+                model.setAb_endtime(JSONUtil.getText(object, "ab_endtime"));
+                model.setAb_recorddate(JSONUtil.getText(object, "ab_recorddate"));
+                model.setAb_recordid(JSONUtil.getText(object, "ab_recordid"));
+                model.setAb_recordman(JSONUtil.getText(object, "ab_recordman"));
+                model.setAb_content(JSONUtil.getText(object, "ab_content"));
+                model.setAb_confirmstatus(JSONUtil.getText(object, "ab_confirmstatus"));
+                model.setAb_sharestatus(JSONUtil.getText(object, "ab_sharestatus"));
+                model.setAb_address(JSONUtil.getText(object, "ab_address"));
+                model.setAb_longitude(JSONUtil.getText(object, "ab_longitude"));
+                model.setAb_latitude(JSONUtil.getText(object, "ab_latitude"));
+                model.setAb_type(JSONUtil.getText(object, "ab_type"));
+                model.setAb_reason(JSONUtil.getText(object, "ab_reason"));
+                model.setAd_reason(JSONUtil.getText(object, "ab_reason"));
+                return model;
+            }
+           return null;
+        }
+
         @Override
         public int getItemCount() {
             return ListUtils.getSize(mSchedules) + 1;
@@ -359,7 +429,6 @@ public class ScheduleActivity extends BaseNetActivity {
                 contentTv = (TextView) itemView.findViewById(R.id.contentTv);
                 typeTv = (TextView) itemView.findViewById(R.id.typeTv);
                 tagTv = (TextView) itemView.findViewById(R.id.tagTv);
-
             }
         }
 

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleSearchActivity.java

@@ -67,7 +67,7 @@ public class ScheduleSearchActivity extends BaseNetActivity {
     }
     @Override
     protected String getBaseUrl() {
-        return "https://mobile.ubtob.com:8443/schedule/";
+        return CommonUtil.getSchedulerBaseUrl();
     }
 
     private void initView() {

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/activity/SchedulerCreateActivity.java

@@ -146,7 +146,7 @@ public class SchedulerCreateActivity extends BaseNetActivity {
 
     @Override
     protected String getBaseUrl() {
-        return "https://mobile.ubtob.com:8443/schedule/";
+        return CommonUtil.getSchedulerBaseUrl();
     }
 
     private void findById() {

+ 11 - 0
app_modular/appworks/src/main/java/com/uas/appworks/model/Schedule.java

@@ -21,6 +21,7 @@ public class Schedule implements Parcelable {
     private long warnRealTime;//提醒精确时间(预留)
     private String address;//地点(预留)
     private String status;//状态(预留)
+    private String details;//单据详情
 
 
     public Schedule(boolean formUU) {
@@ -45,6 +46,7 @@ public class Schedule implements Parcelable {
         warnRealTime = in.readLong();
         address = in.readString();
         status = in.readString();
+        details = in.readString();
     }
 
     public static final Creator<Schedule> CREATOR = new Creator<Schedule>() {
@@ -167,6 +169,14 @@ public class Schedule implements Parcelable {
         return warnTime > 0 ? 1 : 0;
     }
 
+    public String getDetails() {
+        return details;
+    }
+
+    public void setDetails(String details) {
+        this.details = details;
+    }
+
     @Override
     public int describeContents() {
         return 0;
@@ -187,5 +197,6 @@ public class Schedule implements Parcelable {
         parcel.writeLong(warnRealTime);
         parcel.writeString(address);
         parcel.writeString(status);
+        parcel.writeString(details);
     }
 }

+ 5 - 0
app_modular/appworks/src/main/res/drawable/icon_time_helper.xml

@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:viewportHeight="100"
+    android:viewportWidth="100" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#B475DD" android:pathData="M63.5,81.7l-0.1,-4.3c-0.1,-0.4 -0.2,-0.7 -0.4,-1.1c0,-0.1 -0.1,-0.2 -0.1,-0.3c-2.4,-5.9 -8.8,-10.1 -12.4,-13.2c-3.1,-2.6 -5.4,-11.4 -5.1,-13.1c0.3,-1.8 13.3,-10.1 13.3,-17.2h-27c0,7.7 13.1,15.8 13.3,17.2c0.2,1.4 -2.1,10.2 -4.9,13.1c-2.8,2.9 -10.5,7.6 -12.7,14.1c0.2,-8.5 2.6,-15.2 7.1,-20.1c3.5,-3.8 7,-5 7.1,-5.1c0.7,-0.2 1.1,-0.8 1.2,-1.5c0.1,-0.7 -0.3,-1.4 -0.9,-1.7c0,0 -3.7,-2.2 -7.3,-6.7c-4.7,-5.8 -7.1,-12.6 -7.2,-20.1h36c-0.1,7.5 -2.5,14.3 -7.2,20.1c-3.6,4.5 -7.3,6.7 -7.3,6.7c-0.6,0.4 -0.9,1 -0.9,1.7c0.1,0.7 0.5,1.3 1.2,1.5c0,0 3.6,1.2 7.1,5.1c0.2,0.2 0.3,0.4 0.4,0.5c0.4,-1.3 0.9,-2.5 1.6,-3.5c-1.8,-1.9 -3.7,-3.2 -5.1,-4.1c1.5,-1.2 3.6,-3.1 5.6,-5.6c3.6,-4.5 8,-12 8.1,-22.4h4.2c1.4,0 2.6,-1.2 2.6,-2.6c0,-1.4 -1.2,-2.6 -2.6,-2.6H19.6c-1.4,0 -2.6,1.2 -2.6,2.6c0,1.4 1.2,2.6 2.6,2.6h4.2c0.1,10.5 4.4,18 8.1,22.4c2,2.5 4.1,4.3 5.6,5.6C36,50.8 34,52.2 32,54.3c-3.7,4 -8.1,11.4 -8.2,23.8h-4.2c-1.4,0 -2.6,1.2 -2.6,2.6s1.2,2.6 2.6,2.6h44.6C63.8,82.9 63.5,82.4 63.5,81.7z"/>
+    <path android:fillColor="#DAB0F5" android:pathData="M62,55.6c-2.5,1.7 -4.2,4.6 -4.1,8c0.1,3.7 2.2,7 5.3,8.7c0.5,0.3 0.8,0.8 0.9,1.4l0.1,7.6c0,1.1 0.9,1.9 2,2l3.8,0.1c1,0 1.9,-0.8 1.9,-1.9l-0.1,-7.6c0,-0.6 0.3,-1.1 0.8,-1.3c3.1,-1.6 5.1,-4.8 5.1,-8.6c0,-3.4 -1.8,-6.4 -4.5,-8.2c-0.7,-0.5 -1.7,0 -1.7,0.9l0.1,7.5c0,1.1 -0.8,1.9 -1.9,1.9L65.9,66c-1.1,0 -1.9,-0.9 -2,-2l-0.1,-7.4C63.8,55.7 62.8,55.2 62,55.6L62,55.6zM62,55.6"/>
+</vector>

+ 2 - 0
app_modular/facesdk/src/main/AndroidManifest.xml

@@ -12,6 +12,8 @@
 
         <activity android:name="com.baidu.aip.excep.activity.RealTimeDetectFaceActivty"
             android:label="刷脸打卡" />
+        <activity android:name="com.baidu.aip.excep.activity.FaceManageActivity"
+            android:label="人脸照片管理"/>
     </application>
 
 </manifest>

+ 347 - 0
app_modular/facesdk/src/main/java/com/baidu/aip/excep/activity/FaceManageActivity.java

@@ -0,0 +1,347 @@
+package com.baidu.aip.excep.activity;
+
+import android.text.Editable;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baidu.aip.excep.utils.FaceConfig;
+import com.common.LogUtil;
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.core.model.EmployeesEntity;
+import com.core.utils.CommonUtil;
+import com.core.utils.ToastUtil;
+import com.core.widget.EmptyLayout;
+import com.core.widget.VoiceSearchView;
+import com.core.widget.listener.EditChangeListener;
+import com.handmark.pulltorefresh.library.PullToRefreshListView;
+import com.me.network.app.http.HttpClient;
+import com.me.network.app.http.Method;
+import com.me.network.app.http.rx.Result2Listener;
+import com.me.network.app.http.rx.ResultSubscriber;
+import com.modular.apputils.activity.BaseNetActivity;
+import com.modular.apputils.manager.ContactsManager;
+import com.modular.apputils.widget.VeriftyDialog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import demo.face.aip.baidu.com.facesdk.R;
+
+/**
+ * 管理人脸数据列表
+ */
+public class FaceManageActivity extends BaseNetActivity {
+    private List<EmployeesEntity> allDatas = null;
+    private FaceAdapter mFaceAdapter = null;
+    private PullToRefreshListView refreshListView;
+    private String groupId;
+    private EmptyLayout mEmptyLayout;
+    private VoiceSearchView voiceSearchView;
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.activity_face_manage;
+    }
+
+    @Override
+    protected void init() throws Exception {
+        initView();
+
+    }
+
+    @Override
+    protected String getBaseUrl() {
+        return "https://aip.baidubce.com/";
+    }
+
+    private void initView() {
+        refreshListView = (PullToRefreshListView) findViewById(com.modular.apputils.R.id.refreshListView);
+        mEmptyLayout = new EmptyLayout(this, refreshListView.getRefreshableView());
+        mEmptyLayout.setShowLoadingButton(false);
+        mEmptyLayout.setShowEmptyButton(false);
+        mEmptyLayout.setShowErrorButton(false);
+        voiceSearchView = (VoiceSearchView) findViewById(com.modular.apputils.R.id.voiceSearchView);
+        voiceSearchView.addTextChangedListener(new EditChangeListener() {
+            @Override
+            public void afterTextChanged(Editable s) {
+                search(TextUtils.isEmpty(s) ? "" : s.toString());
+            }
+        });
+        voiceSearchView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+            @Override
+            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+                search(TextUtils.isEmpty(v.getText()) ? "" : v.getText().toString());
+                return false;
+            }
+        });
+
+        groupId = CommonUtil.getEnuu(ct);
+        loadFaceList();
+    }
+
+    private void search(String keyWord) {
+        if (!ListUtils.isEmpty(allDatas)) {
+            if (TextUtils.isEmpty(keyWord)) {
+                setAdapter(allDatas);
+            } else {
+                List<EmployeesEntity> showDatas = new ArrayList<>();
+                for (EmployeesEntity e : allDatas) {
+                    String word = e.getEM_MOBILE() + "" + e.getEM_NAME();
+                    if (word.contains(keyWord)) {
+                        showDatas.add(e);
+                    }
+                }
+                setAdapter(showDatas);
+            }
+        } else {
+            setAdapter(allDatas);
+        }
+    }
+
+
+    private void loadFaceList() {
+        showProgress();
+        FaceConfig.loadToken(new FaceConfig.FaceTokenListener() {
+            @Override
+            public void callBack(String accessToken) {
+                LogUtil.i("gong", "accessToken=" + accessToken);
+                httpClient.Api().send(new HttpClient.Builder()
+                        .url("rest/2.0/face/v3/faceset/group/getusers")
+                        .add("access_token", accessToken)
+                        .header("Content-Type", "application/json")
+                        .add("group_id", groupId)
+                        .add("start", 0)
+                        .add("length", 1000)
+                        .isDebug(true)
+                        .method(Method.POST).build(), new ResultSubscriber<>(new Result2Listener<Object>() {
+                    @Override
+                    public void onResponse(Object o) {
+                        try {
+                            LogUtil.i("gong", "o==" + o.toString());
+                            JSONObject object = JSON.parseObject(o.toString());
+                            handlerUserList(JSONUtil.getJSONArray(JSONUtil.getJSONObject(object, "result"), "user_id_list"));
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+
+                    @Override
+                    public void onFailure(Object t) {
+                        LogUtil.i("gong", "onFailure=" + t.toString());
+                        dismissProgress();
+                    }
+                }));
+            }
+        });
+    }
+
+    private void deleteUserFace(final EmployeesEntity model) {
+        showProgress();
+        FaceConfig.loadToken(new FaceConfig.FaceTokenListener() {
+            @Override
+            public void callBack(String accessToken) {
+                LogUtil.i("gong", "accessToken=" + accessToken);
+                httpClient.Api().send(new HttpClient.Builder()
+                        .url("rest/2.0/face/v3/faceset/user/delete")
+                        .add("access_token", accessToken)
+                        .header("Content-Type", "application/json")
+                        .add("group_id", groupId)
+                        .add("user_id", String.valueOf(model.getEm_IMID()))
+                        .isDebug(true)
+                        .method(Method.POST).build(), new ResultSubscriber<>(new Result2Listener<Object>() {
+                    @Override
+                    public void onResponse(Object o) {
+                        try {
+                            LogUtil.i("gong", "o==" + o.toString());
+                            JSONObject object = JSON.parseObject(o.toString());
+                            handlerDelete(JSONUtil.getInt(object, "error_code") == 0, model);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        dismissProgress();
+                    }
+
+                    @Override
+                    public void onFailure(Object t) {
+                        LogUtil.i("gong", "onFailure=" + t.toString());
+                        dismissProgress();
+                    }
+                }));
+            }
+        });
+    }
+
+    private void handlerDelete(boolean deleteOk, EmployeesEntity model) {
+        if (deleteOk) {
+            ToastUtil.showToast(ct, R.string.delete_succeed_notice1);
+            allDatas.remove(model);
+            search(TextUtils.isEmpty(voiceSearchView.getText()) ? "" : voiceSearchView.getText().toString());
+        } else {
+            ToastUtil.showToast(ct, R.string.delete_failed);
+        }
+    }
+
+    private void handlerUserList(final JSONArray userListArray) throws Exception {
+        if (ListUtils.isEmpty(userListArray)) {
+            mEmptyLayout.showEmpty();
+            dismissProgress();
+        } else {
+            ContactsManager.getInstance().loadContact(new ContactsManager.OnEmployListener() {
+                @Override
+                public void callback(List<EmployeesEntity> employees) {
+
+                    if (ListUtils.isEmpty(employees)) {
+                        ToastUtil.showToast(ct, R.string.not_load_ok_fefresh);
+                    } else {
+                        List<EmployeesEntity> hasFaceModels = new ArrayList<>();
+                        List<String> notHasUser = new ArrayList<>();
+
+                        for (int i = 0; i < userListArray.size(); i++) {
+                            String userId = userListArray.getString(i);
+                            boolean hasUser = false;
+                            for (EmployeesEntity e : employees) {
+                                String imid = String.valueOf(e.getEm_IMID());
+                                if (e != null && !TextUtils.isEmpty(imid) && !TextUtils.isEmpty(userId) &&
+                                        userId.equals(imid)) {
+                                    hasFaceModels.add(e);
+                                    hasUser = true;
+                                    break;
+                                }
+                            }
+                            if (!hasUser) {
+                                notHasUser.add(userId);
+                            }
+                        }
+                        LogUtil.i("gong","notHasUser="+JSON.toJSONString(notHasUser));
+                        if (ListUtils.isEmpty(hasFaceModels)) {
+                            ToastUtil.showToast(ct, R.string.not_load_ok_fefresh);
+                        } else {
+                            allDatas = hasFaceModels;
+                            setAdapter(hasFaceModels);
+                        }
+                    }
+                    dismissProgress();
+                }
+            });
+        }
+    }
+
+    private void setAdapter(final List<EmployeesEntity> faceModels) {
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (ListUtils.isEmpty(faceModels)) {
+                    mEmptyLayout.showEmpty();
+                } else {
+                    if (mFaceAdapter == null) {
+                        mFaceAdapter = new FaceAdapter(faceModels);
+                        refreshListView.setAdapter(mFaceAdapter);
+                    } else {
+                        mFaceAdapter.setFaceModels(faceModels);
+                        mFaceAdapter.notifyDataSetChanged();
+                    }
+                }
+            }
+        });
+        if (!ListUtils.isEmpty(faceModels)) {
+            LogUtil.i("gong", "faceModels=" + faceModels.size());
+        }
+    }
+
+    private class FaceAdapter extends BaseAdapter {
+        private List<EmployeesEntity> faceModels;
+
+        public FaceAdapter(List<EmployeesEntity> faceModels) {
+            this.faceModels = faceModels;
+        }
+
+        public List<EmployeesEntity> getFaceModels() {
+            return faceModels;
+        }
+
+        public void setFaceModels(List<EmployeesEntity> faceModels) {
+            this.faceModels = faceModels;
+        }
+
+        @Override
+        public int getCount() {
+            return ListUtils.getSize(faceModels);
+        }
+
+        @Override
+        public Object getItem(int position) {
+            return faceModels.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            ViewHolder mViewHolder = null;
+            if (convertView == null) {
+                mViewHolder = new ViewHolder();
+                convertView = LayoutInflater.from(ct).inflate(R.layout.item_face_list, null);
+                mViewHolder.deleteTv = (TextView) convertView.findViewById(R.id.deleteTv);
+                mViewHolder.nameTv = (TextView) convertView.findViewById(R.id.nameTv);
+                mViewHolder.phoneTv = (TextView) convertView.findViewById(R.id.phoneTv);
+                convertView.setTag(mViewHolder);
+            } else {
+                mViewHolder = (ViewHolder) convertView.getTag();
+            }
+            EmployeesEntity model = faceModels.get(position);
+            mViewHolder.nameTv.setText(TextUtils.isEmpty(model.getEM_NAME()) ? "" : model.getEM_NAME());
+            mViewHolder.phoneTv.setText(TextUtils.isEmpty(model.getEM_MOBILE()) ? "" : model.getEM_MOBILE());
+            mViewHolder.deleteTv.setTag(model);
+            mViewHolder.deleteTv.setOnClickListener(mOnClickListener);
+            return convertView;
+        }
+
+        private View.OnClickListener mOnClickListener = new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (v != null && v.getTag() != null && v.getTag() instanceof EmployeesEntity) {
+                    EmployeesEntity model = (EmployeesEntity) v.getTag();
+                    showDeleteDialog(model);
+                }
+            }
+        };
+
+        private class ViewHolder {
+            private TextView deleteTv;
+            private TextView nameTv;
+            private TextView phoneTv;
+        }
+    }
+
+
+    private void showDeleteDialog(final EmployeesEntity model) {
+        new VeriftyDialog.Builder(ct)
+                .setTitle(getString(R.string.app_name))
+                .setContent("确定删除" + model.getEM_NAME() + "的脸照?")
+                .setShowCancel(true)
+                .build(new VeriftyDialog.OnDialogClickListener() {
+                    @Override
+                    public void result(boolean clickSure) {
+                        if (clickSure) {
+                            deleteUserFace(model);
+                        }
+                    }
+
+
+                });
+    }
+
+
+}

+ 4 - 0
app_modular/facesdk/src/main/res/drawable/bg_delete_btn.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+</selector>

+ 23 - 0
app_modular/facesdk/src/main/res/layout/activity_face_manage.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:focusableInTouchMode="true"
+    android:orientation="vertical">
+
+    <com.core.widget.VoiceSearchView
+        android:id="@+id/voiceSearchView"
+        android:layout_width="match_parent"
+        android:focusableInTouchMode="false"
+        android:layout_height="48dp" />
+
+    <com.handmark.pulltorefresh.library.PullToRefreshListView
+        android:id="@+id/refreshListView"
+        style="@style/ListViewBasic"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:divider="@color/item_line"
+        android:dividerHeight="@dimen/line"
+        android:scrollbars="none"
+        android:scrollingCache="false" />
+</LinearLayout>

+ 39 - 0
app_modular/facesdk/src/main/res/layout/item_face_list.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/white"
+    android:orientation="vertical"
+    android:padding="@dimen/padding">
+
+    <TextView
+        android:id="@+id/deleteTv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:background="@drawable/selector_confirm_bg"
+        android:clickable="true"
+        android:padding="@dimen/paddingMin"
+        android:text="重置照片"
+        android:textColor="#FFFFFFFF"
+        android:textSize="10sp" />
+
+    <TextView
+        android:id="@+id/nameTv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="陈劲松"
+        android:textColor="#FF333333"
+        android:textSize="15sp" />
+
+    <TextView
+        android:id="@+id/phoneTv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/nameTv"
+        android:layout_marginTop="@dimen/paddingMin"
+        android:text="13456789876"
+        android:textColor="#FF999999"
+        android:textSize="12sp" />
+</RelativeLayout>