Browse Source

提交类型 编写功能
提交内容 编写日程提交代码

Bitliker 7 năm trước cách đây
mục cha
commit
4a2c4fba65
20 tập tin đã thay đổi với 1043 bổ sung109 xóa
  1. 1 0
      app_core/common/src/main/java/com/common/data/DateFormatUtil.java
  2. 1 0
      app_core/common/src/main/res/values/strings.xml
  3. 9 5
      app_modular/applocation/src/main/java/com/uas/applocation/utils/ModelChangeUtils.java
  4. 1 0
      app_modular/apputils/src/main/java/com/modular/apputils/utils/SignUtils.java
  5. 6 3
      app_modular/appworks/src/main/AndroidManifest.xml
  6. 1 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java
  7. 196 26
      app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleActivity.java
  8. 251 8
      app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleSearchActivity.java
  9. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleSettingActivity.java
  10. 392 22
      app_modular/appworks/src/main/java/com/uas/appworks/activity/SchedulerCreateActivity.java
  11. 5 0
      app_modular/appworks/src/main/java/com/uas/appworks/datainquiry/Constants.java
  12. 71 24
      app_modular/appworks/src/main/java/com/uas/appworks/model/Schedule.java
  13. 2 2
      app_modular/appworks/src/main/java/com/uas/appworks/utils/ScheduleUtils.java
  14. 0 5
      app_modular/appworks/src/main/res/layout/activity_scheduler_create.xml
  15. 42 10
      app_modular/appworks/src/main/res/layout/item_schedule_bottom.xml
  16. 8 2
      app_modular/appworks/src/main/res/layout/item_schedule_search.xml
  17. 35 0
      app_modular/appworks/src/main/res/layout/pop_edit_schedule_activity.xml
  18. 9 0
      app_modular/appworks/src/main/res/menu/menu_input_edit.xml
  19. 4 0
      app_modular/appworks/src/main/res/menu/menu_input_ok.xml
  20. 8 1
      app_modular/appworks/src/main/res/values/strings.xml

+ 1 - 0
app_core/common/src/main/java/com/common/data/DateFormatUtil.java

@@ -13,6 +13,7 @@ import java.util.Date;
 
 public class DateFormatUtil {
     public static final String YMD = "yyyy-MM-dd";
+    public static final String YM = "yyyy-MM";
     public static final String YMD_HMS = "yyyy-MM-dd HH:mm:ss";
     public static final String YMD_HM = "yyyy-MM-dd HH:mm";
     public static final String HM = "HH:mm";

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

@@ -1882,6 +1882,7 @@
     <string name="usoft_science">优软科技</string>
     <string name="work_plat_setting">工作面板设置</string>
     <string name="complete">完成</string>
+    <string name="edit">编辑</string>
 
 
     <!--工作台菜单-->

+ 9 - 5
app_modular/applocation/src/main/java/com/uas/applocation/utils/ModelChangeUtils.java

@@ -22,11 +22,15 @@ public class ModelChangeUtils {
 
     public static UASLocation poiInfo2Location(PoiInfo mPoiInfo) {
         UASLocation mUasLocation = new UASLocation(UASLocation.TYPE_BAIDU);
-        mUasLocation.setLatitude(mPoiInfo.location.latitude);
-        mUasLocation.setLongitude(mPoiInfo.location.longitude);
-        mUasLocation.setName(mPoiInfo.name);
-        mUasLocation.setAddress(mPoiInfo.address);
-        mUasLocation.setCityName(mPoiInfo.city);
+        if (mPoiInfo != null) {
+            if (mPoiInfo.location!=null){
+                mUasLocation.setLatitude(mPoiInfo.location.latitude);
+                mUasLocation.setLongitude(mPoiInfo.location.longitude);
+            }
+            mUasLocation.setName(mPoiInfo.name);
+            mUasLocation.setAddress(mPoiInfo.address);
+            mUasLocation.setCityName(mPoiInfo.city);
+        }
         return mUasLocation;
     }
 

+ 1 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/SignUtils.java

@@ -273,6 +273,7 @@ public class SignUtils implements OnHttpResultListener {
         String formStore = JSONUtil.map2JSON(form);
         param.put("formStore", formStore);
         param.put("facecard", "1");
+        param.put("_noc", "1");
         param.put("emcode", getSharedPreferences(ct, "erp_username"));
         String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url :
                 "mobile/saveCardLog.action";

+ 6 - 3
app_modular/appworks/src/main/AndroidManifest.xml

@@ -472,9 +472,12 @@
         <activity android:name=".activity.RegisterDetailActivity" />
         <activity android:name=".activity.EnterpriseInviteStatisticsActivity" />
         <activity android:name=".activity.ScheduleSearchActivity" />
-        <activity android:name=".activity.ScheduleSettingActivity" />
-        <activity android:name=".activity.SchedulerCreateActivity" />
-        <activity android:name=".activity.ScheduleActivity">
+        <activity android:name=".activity.ScheduleSettingActivity"
+            android:label="@string/scheduler_setting"/>
+        <activity android:name=".activity.SchedulerCreateActivity"
+            android:label="@string/create_scheduler"/>
+        <activity android:name=".activity.ScheduleActivity"
+            android:label="@string/my_scheduler">
             <intent-filter>
                 <action android:name="com.modular.work.ScheduleActivity" />
 

+ 1 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java

@@ -235,6 +235,7 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
         String formStore = JSONUtil.map2JSON(form);
         param.put("formStore", formStore);
         param.put("facecard", "1");
+        param.put("_noc", "1");
         param.put("emcode", getSharedPreferences(ct, "erp_username"));
         String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url :
                 "mobile/saveCardLog.action";

+ 196 - 26
app_modular/appworks/src/main/java/com/uas/appworks/activity/ScheduleActivity.java

@@ -2,9 +2,9 @@ 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;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -13,13 +13,23 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.TextView;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.common.data.DateFormatUtil;
+import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
-import com.core.base.BaseActivity;
+import com.common.data.StringUtil;
+import com.core.app.MyApplication;
+import com.modular.apputils.activity.BaseNetActivity;
+import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.network.Parameter;
+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.uas.appworks.R;
+import com.uas.appworks.datainquiry.Constants;
 import com.uas.appworks.model.Schedule;
 
 import java.util.ArrayList;
@@ -29,13 +39,16 @@ import java.util.List;
 import java.util.Locale;
 import java.util.TimeZone;
 
-public class ScheduleActivity extends BaseActivity {
+public class ScheduleActivity extends BaseNetActivity {
+    private final int LOAD_MONTH = 11;
+    private final int LOAD_DAY = 12;
 
     private CompactCalendarView compactCalendarView;
     private RecyclerView mRecyclerView;
     private TextView monthTv, lunarCalendarTv, newDayTv;
 
     private Date mCurrentDate;
+    private String lastMonth;
     private String mCurrentDateStr;
     private ScheduleAdapter mScheduleAdapter;
 
@@ -48,18 +61,28 @@ public class ScheduleActivity extends BaseActivity {
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.search) {
-            startActivity(new Intent(ct,ScheduleSearchActivity.class));
+            startActivity(new Intent(ct, ScheduleSearchActivity.class));
         } else if (item.getItemId() == R.id.setting) {
-            startActivity(new Intent(ct,ScheduleSettingActivity.class));
+            startActivity(new Intent(ct, ScheduleSettingActivity.class));
         }
         return super.onOptionsItemSelected(item);
     }
 
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.activity_schedule;
+    }
+
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_schedule);
+    protected void init() throws Exception {
         initView();
+
+    }
+
+    @Override
+    protected String getBaseUrl() {
+        return "http://192.168.253.230:8080/schedule/";
     }
 
     private void initView() {
@@ -77,7 +100,6 @@ public class ScheduleActivity extends BaseActivity {
         compactCalendarView.setLocale(TimeZone.getDefault(), Locale.CHINESE);
         compactCalendarView.setUseThreeLetterAbbreviation(true);
         mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
-//        mRecyclerView.addItemDecoration(new ScheduleDividerItemDecoration(ct));
         changeDate(mCurrentDate);
         newDayTv.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -98,32 +120,128 @@ public class ScheduleActivity extends BaseActivity {
                 changeDate(firstDayOfNewMonth);
             }
         });
-        addTestData();
     }
 
-    private void addTestData() {
-        List<Schedule> mSchedules = new ArrayList<>();
-        mSchedules.add(new Schedule());
-        mSchedules.add(new Schedule());
-        mSchedules.add(new Schedule());
-        mSchedules.add(new Schedule());
-        mScheduleAdapter = new ScheduleAdapter(mSchedules);
-        mRecyclerView.setAdapter(mScheduleAdapter);
-        //TODO 获取到接口以后,添加事件
-        compactCalendarView.addEvent(new Event(Color.argb(255, 169, 68, 65), mCurrentDate.getTime() + 48 * 60 * 60 * 1000));
-
-    }
 
     private void changeDate(Date date) {
-        String dateStr = DateFormatUtil.date2Str(date, "yyyy-MM-dd");
+        String dateStr = DateFormatUtil.date2Str(date, DateFormatUtil.YMD);
         lunarCalendarTv.setText(new Lunar(date).toString());
         monthTv.setText(dateStr);
         newDayTv.setVisibility(dateStr.equals(mCurrentDateStr) ? View.GONE : View.VISIBLE);
+        String ym = DateFormatUtil.date2Str(date, DateFormatUtil.YM);
+        if (StringUtil.isEmpty(lastMonth) || !ym.equals(lastMonth)) {
+            if (StringUtil.isEmpty(lastMonth)) {
+                loadByDay(dateStr);
+            }
+            lastMonth = ym;
+            loadByMonth(lastMonth);
+        } else {
+            loadByDay(dateStr);
+        }
+    }
+
+
+    private void loadByMonth(String month) {
+        requestHttp(new Parameter.Builder()
+                        .addParams("imid", MyApplication.getInstance().getLoginUserId())
+                        .addParams("month", month)
+                        .url("schedule/getByMonthSchedule")
+                        .record(LOAD_MONTH)
+                , mOnSmartHttpListener);
+    }
+
+    private void loadByDay(String dateStr) {
+        requestHttp(new Parameter.Builder()
+                        .addParams("imid", MyApplication.getInstance().getLoginUserId())
+                        .addParams("day", dateStr)
+                        .url("schedule/getByDaySchedule")
+                        .record(LOAD_DAY)
+                , mOnSmartHttpListener);
+    }
+
+    private OnSmartHttpListener mOnSmartHttpListener = new OnSmartHttpListener() {
+        @Override
+        public void onSuccess(int what, String message, Tags tag) throws Exception {
+            try {
+                JSONObject object = JSON.parseObject(message);
+                switch (what) {
+                    case LOAD_MONTH:
+                        handlerMonth(JSONUtil.getJSONArray(object, "data"));
+                        break;
+                    case LOAD_DAY:
+                        handlerDay(JSONUtil.getJSONArray(object, "data"));
+                        break;
+                }
+            } catch (Exception e) {
+
+            }
+
+        }
+
+        @Override
+        public void onFailure(int what, String message, Tags tag) throws Exception {
+
+        }
+    };
+
+
+    private void handlerDay(JSONArray jsonArray) throws Exception {
+        List<Schedule> schedules = null;
+        if (!ListUtils.isEmpty(jsonArray)) {
+            schedules = new ArrayList<>();
+            Schedule chche = null;
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject object = jsonArray.getJSONObject(i);
+                chche = new Schedule();
+                chche.setId(JSONUtil.getInt(object, "scheduleId"));
+                chche.setType(JSONUtil.getText(object, "type"));
+                chche.setAllDay(JSONUtil.getInt(object, "allDay"));
+                chche.setRepeat(JSONUtil.getText(object, "repeat"));
+                chche.setTitle(JSONUtil.getText(object, "title"));
+                chche.setTag(JSONUtil.getText(object, "tag"));
+                chche.setRemarks(JSONUtil.getText(object, "remarks"));
+                chche.setStartTime(JSONUtil.getTime(object, "startTime"));
+                chche.setEndTime(JSONUtil.getTime(object, "endTime"));
+                chche.setWarnRealTime(JSONUtil.getTime(object, "warnRealTime"));
+                chche.setWarnTime(JSONUtil.getInt(object, "warnTime"));
+                chche.setAddress(JSONUtil.getText(object, "address"));
+                chche.setStatus(JSONUtil.getText(object, "status"));
+                schedules.add(chche);
+
+            }
+        }
+        setAdapter(schedules);
+    }
+
+    private void handlerMonth(JSONArray jsonArray) throws Exception {
+        compactCalendarView.removeAllEvents();
+        if (!ListUtils.isEmpty(jsonArray)) {
+            List<Event> mEvents = new ArrayList<>();
+            for (int i = 0; i < jsonArray.size(); i++) {
+                String time = jsonArray.getString(i);
+                mEvents.add(new Event(Color.argb(255, 169, 68, 65), DateFormatUtil.str2Long(time, DateFormatUtil.YMD)));
+            }
+            compactCalendarView.addEvents(mEvents);
+        }
+    }
+
+    private void setAdapter(List<Schedule> schedules) {
+        if (mScheduleAdapter == null) {
+            mScheduleAdapter = new ScheduleAdapter(schedules);
+            mRecyclerView.setAdapter(mScheduleAdapter);
+        } else {
+            mScheduleAdapter.setSchedules(schedules);
+            mScheduleAdapter.notifyDataSetChanged();
+        }
     }
 
     private class ScheduleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
         private List<Schedule> mSchedules = null;
 
+        public void setSchedules(List<Schedule> mSchedules) {
+            this.mSchedules = mSchedules;
+        }
+
         public ScheduleAdapter(List<Schedule> mSchedules) {
             this.mSchedules = mSchedules;
         }
@@ -146,28 +264,70 @@ public class ScheduleActivity extends BaseActivity {
 
         @Override
         public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
-            if (holder instanceof ViewHoder) {
-
+            if (holder instanceof ViewHoder && ListUtils.getSize(this.mSchedules) > position) {
+                ViewHoder mViewHoder = (ViewHoder) holder;
+                Schedule mSchedule = this.mSchedules.get(position);
+                if (mSchedule.getAllDay() == 1) {
+                    mViewHoder.timeTv.setVisibility(View.VISIBLE);
+                    mViewHoder.startTimeTv.setVisibility(View.GONE);
+                    mViewHoder.endTimeTv.setVisibility(View.GONE);
+                } else {
+                    mViewHoder.timeTv.setVisibility(View.GONE);
+                    mViewHoder.startTimeTv.setVisibility(View.VISIBLE);
+                    mViewHoder.endTimeTv.setVisibility(View.VISIBLE);
+                    String startTime = DateFormatUtil.long2Str(mSchedule.getStartTime(), DateFormatUtil.HM);
+                    String endTime = DateFormatUtil.long2Str(mSchedule.getEndTime(), DateFormatUtil.HM);
+                    mViewHoder.startTimeTv.setText(startTime);
+                    mViewHoder.endTimeTv.setText(endTime);
+                }
+                mViewHoder.contentTv.setText(StringUtil.isEmpty(mSchedule.getRemarks()) ? "" : mSchedule.getRemarks());
+                mViewHoder.typeTv.setText(StringUtil.isEmpty(mSchedule.getType()) ? "" : mSchedule.getType());
+                mViewHoder.itemView.setTag(mSchedule);
+                mViewHoder.itemView.setOnClickListener(mOnClickListener);
 
             } else if (holder instanceof CreateViewHoder) {
                 ((CreateViewHoder) holder).createBtn.setOnClickListener(new View.OnClickListener() {
                     @Override
                     public void onClick(View view) {
-                        startActivity(new Intent(ct, SchedulerCreateActivity.class));
+                        startActivityForResult(new Intent(ct, SchedulerCreateActivity.class), 0x11);
                     }
                 });
             }
         }
 
+        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);
+                }
+            }
+        };
+
         @Override
         public int getItemCount() {
             return ListUtils.getSize(mSchedules) + 1;
         }
 
         class ViewHoder extends RecyclerView.ViewHolder {
+            private TextView timeTv;
+            private TextView startTimeTv;
+            private TextView endTimeTv;
+            private TextView contentTv;
+            private TextView typeTv;
+
 
             public ViewHoder(View itemView) {
                 super(itemView);
+                timeTv = (TextView) itemView.findViewById(R.id.timeTv);
+                startTimeTv = (TextView) itemView.findViewById(R.id.startTimeTv);
+                endTimeTv = (TextView) itemView.findViewById(R.id.endTimeTv);
+                contentTv = (TextView) itemView.findViewById(R.id.contentTv);
+                typeTv = (TextView) itemView.findViewById(R.id.typeTv);
+
             }
         }
 
@@ -180,4 +340,14 @@ public class ScheduleActivity extends BaseActivity {
             }
         }
     }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == 0x11 && resultCode == 0x11) {
+            loadByMonth(lastMonth);
+            String dayStr = TextUtils.isEmpty(monthTv.getText()) ? DateFormatUtil.long2Str(DateFormatUtil.YMD) : monthTv.getText().toString();
+            loadByDay(dayStr);
+        }
+    }
 }

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

@@ -1,38 +1,281 @@
 package com.uas.appworks.activity;
 
-import android.os.Bundle;
+import android.content.Intent;
+import android.support.v7.app.ActionBar;
 import android.support.v7.widget.DividerItemDecoration;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
 import android.widget.LinearLayout;
+import android.widget.TextView;
 
-import com.core.base.BaseActivity;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.common.data.DateFormatUtil;
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.core.app.MyApplication;
+import com.core.utils.CommonUtil;
+import com.core.widget.ClearEditText;
+import com.core.xmpp.utils.audio.voicerecognition.JsonParser;
+import com.iflytek.cloud.RecognizerResult;
+import com.iflytek.cloud.SpeechConstant;
+import com.iflytek.cloud.SpeechError;
+import com.iflytek.cloud.ui.RecognizerDialog;
+import com.iflytek.cloud.ui.RecognizerDialogListener;
+import com.modular.apputils.activity.BaseNetActivity;
+import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.network.Parameter;
+import com.modular.apputils.network.Tags;
 import com.uas.appworks.R;
+import com.uas.appworks.datainquiry.Constants;
+import com.uas.appworks.model.Schedule;
 
-public class ScheduleSearchActivity extends BaseActivity {
+import java.util.ArrayList;
+import java.util.List;
+
+public class ScheduleSearchActivity extends BaseNetActivity {
+    private final int LAST_KEY = 12;
     private RecyclerView mRecyclerView;
     private View emptyView;
     private String lastKey;//最后一次输入
+    private ClearEditText mSearchEditText;
+    private ScheduleAdapter mScheduleAdapter;
+
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.activity_schedule_search;
+    }
 
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_schedule_search);
+    protected void init() throws Exception {
         initView();
+
+    }
+
+    @Override
+    protected String getBaseUrl() {
+        return "http://192.168.253.230:8080/schedule/";
     }
 
     private void initView() {
+        setTitle("");
+        View view = LayoutInflater.from(ct).inflate(R.layout.action_data_inquiry_list, null);
+        view.findViewById(R.id.back).setVisibility(View.GONE);
+        view.findViewById(R.id.data_inquiry_voice_iv).setOnClickListener(mOnClickListener);
+        view.findViewById(R.id.data_inquiry_filter_iv).setVisibility(View.GONE);
+        mSearchEditText = view.findViewById(R.id.data_inquiry_filter_et);
+        mSearchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+            @Override
+            public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
+                if (actionId == EditorInfo.IME_ACTION_SEARCH
+                        || actionId == EditorInfo.IME_ACTION_SEND
+                        || (event != null && event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
+                    searchEvent();
+                    return true;
+                }
+                return false;
+            }
+        });
+        ActionBar bar = this.getSupportActionBar();
+        if (bar != null) {
+            bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+            bar.setCustomView(view);
+        }
+
         mRecyclerView = findViewById(R.id.mRecyclerView);
         emptyView = findViewById(R.id.emptyView);
         mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
         mRecyclerView.addItemDecoration(new DividerItemDecoration(ct, LinearLayout.VERTICAL));
     }
 
-    private void searchChange(String keyWord) {
+    private void getVoice() {
+        RecognizerDialog dialog = new RecognizerDialog(this, null);
+        dialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
+        dialog.setParameter(SpeechConstant.ACCENT, "mandarin");
+        dialog.setListener(new RecognizerDialogListener() {
+            @Override
+            public void onResult(RecognizerResult recognizerResult, boolean b) {
+                String text = JsonParser.parseIatResult(recognizerResult.getResultString());
+                String s = mSearchEditText.getText().toString() + CommonUtil.getPlaintext(text);
+                mSearchEditText.setText(s);
+                mSearchEditText.setSelection(s.length());
+                if (b) {
+                    searchEvent();
+                }
+            }
+
+            @Override
+            public void onError(SpeechError speechError) {
+
+            }
+        });
+        dialog.show();
+    }
+
+    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View view) {
+            if (R.id.back == view.getId()) {
+                onBackPressed();
+            } else if (R.id.data_inquiry_voice_iv == view.getId()) {
+                getVoice();
+            }
+        }
+    };
+
+
+    private void searchEvent() {
+        String keyWord = TextUtils.isEmpty(mSearchEditText.getText()) ? "" : mSearchEditText.getText().toString();
         this.lastKey = keyWord;
-        //TODO 网络请求
+        loadDataByKey();
     }
 
+    private void loadDataByKey() {
+        requestHttp(new Parameter.Builder()
+                        .record(11)
+                        .addTag(LAST_KEY, this.lastKey)
+                        .url("schedule/searchSchedule")
+                        .addParams("keyword", this.lastKey)
+                        .addParams("imid", MyApplication.getInstance().getLoginUserId())
+                , mOnSmartHttpListener);
+    }
+
+    private OnSmartHttpListener mOnSmartHttpListener = new OnSmartHttpListener() {
+        @Override
+        public void onSuccess(int what, String message, Tags tag) throws Exception {
+            if (tag != null & tag.get(LAST_KEY) != null && tag.get(LAST_KEY) instanceof String) {
+                String keyword = (String) tag.get(LAST_KEY);
+                if (keyword.equals(lastKey)) {
+                    JSONObject jsonObject = JSON.parseObject(message);
+                    if (JSONUtil.getBoolean(jsonObject, "success")) {
+                        handlerData(JSONUtil.getJSONArray(jsonObject, "data"));
+                    }
+
+                }
+            }
+
+        }
+
+        @Override
+        public void onFailure(int what, String message, Tags tag) throws Exception {
 
+        }
+    };
+
+    private void handlerData(JSONArray array) throws Exception {
+        if (ListUtils.isEmpty(array)) {
+            mRecyclerView.setVisibility(View.GONE);
+            emptyView.setVisibility(View.VISIBLE);
+        } else {
+            emptyView.setVisibility(View.GONE);
+            mRecyclerView.setVisibility(View.VISIBLE);
+            ArrayList<Schedule> schedules = new ArrayList<>();
+            Schedule chche = null;
+            for (int i = 0; i < array.size(); i++) {
+                JSONObject object = array.getJSONObject(i);
+                chche = new Schedule();
+                chche.setId(JSONUtil.getInt(object, "scheduleId"));
+                chche.setType(JSONUtil.getText(object, "type"));
+                chche.setAllDay(JSONUtil.getInt(object, "allDay"));
+                chche.setRepeat(JSONUtil.getText(object, "repeat"));
+                chche.setTitle(JSONUtil.getText(object, "title"));
+                chche.setTag(JSONUtil.getText(object, "tag"));
+                chche.setRemarks(JSONUtil.getText(object, "remarks"));
+                chche.setStartTime(JSONUtil.getTime(object, "startTime"));
+                chche.setEndTime(JSONUtil.getTime(object, "endTime"));
+                chche.setWarnRealTime(JSONUtil.getTime(object, "warnRealTime"));
+                chche.setWarnTime(JSONUtil.getInt(object, "warnTime"));
+                chche.setAddress(JSONUtil.getText(object, "address"));
+                chche.setStatus(JSONUtil.getText(object, "status"));
+                schedules.add(chche);
+            }
+            setAdapter(schedules);
+        }
+
+    }
+
+
+    private void setAdapter(List<Schedule> schedules) {
+        if (mScheduleAdapter == null) {
+            mScheduleAdapter = new ScheduleAdapter(schedules);
+            mRecyclerView.setAdapter(mScheduleAdapter);
+        } else {
+            mScheduleAdapter.setSchedules(schedules);
+            mScheduleAdapter.notifyDataSetChanged();
+        }
+    }
+
+    private class ScheduleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+        private List<Schedule> mSchedules = null;
+
+        public void setSchedules(List<Schedule> mSchedules) {
+            this.mSchedules = mSchedules;
+        }
+
+        public ScheduleAdapter(List<Schedule> mSchedules) {
+            this.mSchedules = mSchedules;
+        }
+
+        @Override
+        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            return new ViewHoder(LayoutInflater.from(ct).inflate(R.layout.item_schedule_search, parent, false));
+
+        }
+
+        @Override
+        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+            if (ListUtils.getSize(this.mSchedules) > position) {
+                ViewHoder mViewHoder = (ViewHoder) holder;
+                Schedule mSchedule = this.mSchedules.get(position);
+                mViewHoder.titleTv.setText(TextUtils.isEmpty(mSchedule.getRemarks()) ? "" : mSchedule.getRemarks());
+                mViewHoder.tagTv.setText(TextUtils.isEmpty(mSchedule.getTag()) ? "" : mSchedule.getTag());
+                String startTime = DateFormatUtil.long2Str(mSchedule.getStartTime(), DateFormatUtil.YMD_HM);
+                String endTime = DateFormatUtil.long2Str(mSchedule.getEndTime(), DateFormatUtil.YMD_HM);
+                mViewHoder.timeTv.setText(startTime + " - " + endTime);
+                mViewHoder.itemView.setTag(mSchedule);
+                mViewHoder.itemView.setOnClickListener(mOnClickListener);
+            }
+        }
+
+        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();
+                    startActivity(new Intent(ct, SchedulerCreateActivity.class)
+                            .putExtra(Constants.Intents.ENABLE, false)
+                            .putExtra(Constants.Intents.MODEL, mSchedule));
+                }
+            }
+        };
+
+
+        @Override
+        public int getItemCount() {
+            return ListUtils.getSize(mSchedules);
+        }
+
+        class ViewHoder extends RecyclerView.ViewHolder {
+            private TextView titleTv;
+            private TextView tagTv;
+            private TextView timeTv;
+
+            public ViewHoder(View itemView) {
+                super(itemView);
+                titleTv = (TextView) itemView.findViewById(R.id.titleTv);
+                tagTv = (TextView) itemView.findViewById(R.id.tagTv);
+                timeTv = (TextView) itemView.findViewById(R.id.timeTv);
+
+            }
+        }
+
+    }
 }

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

@@ -25,7 +25,7 @@ public class ScheduleSettingActivity extends BaseActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_schedule_search);
+        setContentView(R.layout.activity_schedule_setting);
         initView();
     }
 

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

@@ -1,46 +1,151 @@
 package com.uas.appworks.activity;
 
+import android.Manifest;
 import android.content.Intent;
-import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.PopupWindow;
 import android.widget.TextView;
+import android.widget.Toast;
 
-import com.core.base.BaseActivity;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
+import com.common.data.DateFormatUtil;
+import com.common.data.JSONUtil;
+import com.common.preferences.PreferenceUtils;
+import com.common.system.DisplayUtil;
+import com.core.app.MyApplication;
 import com.core.model.SelectBean;
 import com.core.utils.time.wheel.DateTimePicker;
 import com.core.widget.view.Activity.SelectActivity;
 import com.core.widget.view.SwitchView;
+import com.me.network.app.http.Method;
+import com.modular.apputils.activity.BaseNetActivity;
+import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.network.Parameter;
+import com.modular.apputils.network.Tags;
+import com.modular.apputils.widget.VeriftyDialog;
 import com.uas.appworks.R;
+import com.uas.appworks.datainquiry.Constants;
+import com.uas.appworks.model.Schedule;
+import com.uas.appworks.utils.ScheduleUtils;
 
 import java.util.ArrayList;
 import java.util.Calendar;
 
-public class SchedulerCreateActivity extends BaseActivity {
-    private final String[] warns = {"不提醒", "开始时(默认)", "提醒前5分钟", "提醒前15分钟", "提醒前30分钟", "提醒前1小时", "提醒前一天"};
-    private final String[] warns2 = {"不提醒", "当天8点(默认)", "当天9点", "提前一天8点", "提前一天9点"};
-    private final String[] types = {"工作(默认)", "学习", "娱乐", "运动", "约会", "纪念日"};
-    private final String[] repeats = {"不重复(默认)", "每天重复", "每周重复", "每月重复"};
+public class SchedulerCreateActivity extends BaseNetActivity {
+
+    private final int SUBMIT = 0x11;
+    private final int DELETE = 0x12;
+    private final int UPDATE = 0x13;
+
+    private final String[] warns = {"不提醒", "开始时", "提醒前5分钟", "提醒前15分钟", "提醒前30分钟", "提醒前1小时", "提醒前一天"};
+    private final String[] warns2 = {"不提醒", "当天8点", "当天9点", "提前一天8点", "提前一天9点"};
+    private final String[] types = {"工作", "学习", "娱乐", "运动", "约会", "纪念日"};
+    private final String[] repeats = {"不重复", "每天重复", "每周重复", "每月重复"};
 
     private EditText contentEd;
     private SwitchView allDaySv;
     private TextView startTimeTv, endTimeTv, warnTimeTv, repeatTv, typeTv;
-    private boolean submiting;
+    private boolean submiting;//正在提交
+    private boolean isEnable;//是否可以编辑
+    private boolean isUpdate;//是否更新
+    private Schedule mSchedule;//当前的日程对象
+    private PopupWindow setWindow;
 
 
-    private boolean isEnable;
+    @Override
+    protected int getLayoutId() {
+        return R.layout.activity_scheduler_create;
+    }
 
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_scheduler_create);
-        isEnable = getIntent().getBooleanExtra("isEnable", true);
+    protected void init() throws Exception {
+        isEnable = getIntent().getBooleanExtra(Constants.Intents.ENABLE, true);
+        if (isEnable) {
+            initSchedule();
+        } else {
+            mSchedule = getIntent().getParcelableExtra(Constants.Intents.MODEL);
+            if (mSchedule == null) {
+                initSchedule();
+            }
+        }
         findById();
+        initView();
         updateEnable(isEnable);
     }
 
+    private void initSchedule() {
+        mSchedule = new Schedule();
+        mSchedule.setStartTime(System.currentTimeMillis() + 1000 * 5 * 60);
+        mSchedule.setEndTime(System.currentTimeMillis() + 1000 * 10 * 60);
+        mSchedule.setRepeat(repeats[0]);
+        mSchedule.setTag(types[0]);
+        mSchedule.setWarnTime(0);
+        mSchedule.setType(getString(R.string.app_name));
+    }
+
+    private void initView() {
+        contentEd.setText(TextUtils.isEmpty(mSchedule.getRemarks()) ? "" : mSchedule.getRemarks());
+        repeatTv.setText(TextUtils.isEmpty(mSchedule.getRepeat()) ? "" : mSchedule.getRepeat());
+        typeTv.setText(TextUtils.isEmpty(mSchedule.getTag()) ? "" : mSchedule.getTag());
+
+        allDaySv.setChecked(mSchedule.getAllDay() == 1);
+        String format = allDaySv.isChecked() ? DateFormatUtil.YMD : DateFormatUtil.YMD_HM;
+        startTimeTv.setText(DateFormatUtil.long2Str(mSchedule.getStartTime(), format));
+        endTimeTv.setText(DateFormatUtil.long2Str(mSchedule.getEndTime(), format));
+        String warnTime = "";
+        switch (mSchedule.getWarnTime()) {
+            case 0:
+                warnTime = warns[1];
+                break;
+            case 5:
+                warnTime = warns[2];
+                break;
+            case 15:
+                warnTime = warns[3];
+                break;
+            case 30:
+                warnTime = warns[4];
+                break;
+            case 60:
+                warnTime = warns[5];
+                break;
+            case 60 * 24:
+                warnTime = warns[6];
+                break;
+            case 8:
+                warnTime = warns2[1];
+                break;
+            case 9:
+                warnTime = warns2[2];
+                break;
+            case 18:
+                warnTime = warns2[3];
+                break;
+            case 19:
+                warnTime = warns2[4];
+                break;
+            default:
+                if (mSchedule.getWarnTime() < 0) {
+                    warnTime = warns2[0];
+                }
+        }
+        warnTimeTv.setText(warnTime);
+    }
+
+    @Override
+    protected String getBaseUrl() {
+        return "http://192.168.253.230:8080/schedule/";
+    }
+
     private void findById() {
         contentEd = findViewById(R.id.contentEd);
         allDaySv = findViewById(R.id.allDaySv);
@@ -49,6 +154,8 @@ public class SchedulerCreateActivity extends BaseActivity {
         warnTimeTv = findViewById(R.id.warnTimeTv);
         repeatTv = findViewById(R.id.repeatTv);
         typeTv = findViewById(R.id.typeTv);
+        allDaySv.setChecked(false);
+
     }
 
     @Override
@@ -57,14 +164,59 @@ public class SchedulerCreateActivity extends BaseActivity {
         return super.onCreateOptionsMenu(menu);
     }
 
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        if (isEnable) {
+            menu.findItem(R.id.edit).setVisible(false);
+            menu.findItem(R.id.complete).setVisible(true);
+        } else {
+            menu.findItem(R.id.complete).setVisible(false);
+            menu.findItem(R.id.edit).setVisible(true);
+        }
+        return super.onPrepareOptionsMenu(menu);
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.complete) {
             save();
         }
+        if (item.getItemId() == R.id.edit) {
+            showPopupWindow();
+        }
         return super.onOptionsItemSelected(item);
     }
 
+    private void showPopupWindow() {
+        if (setWindow == null) initPopupWindow();
+        setWindow.showAtLocation(getWindow().getDecorView().
+                findViewById(android.R.id.content), Gravity.BOTTOM, 0, 0);
+        DisplayUtil.backgroundAlpha(this, 0.7f);
+    }
+
+    private void initPopupWindow() {
+        View viewContext = LayoutInflater.from(ct).inflate(R.layout.pop_edit_schedule_activity, null);
+        viewContext.findViewById(R.id.editTv).setOnClickListener(mOnClickListener);
+        viewContext.findViewById(R.id.deleteTv).setOnClickListener(mOnClickListener);
+        viewContext.findViewById(R.id.cancel_tv).setOnClickListener(mOnClickListener);
+        setWindow = new PopupWindow(viewContext,
+                LinearLayout.LayoutParams.MATCH_PARENT,
+                LinearLayout.LayoutParams.WRAP_CONTENT, true);
+        setWindow.setAnimationStyle(R.style.MenuAnimationFade);
+        setWindow.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.bg_popuwin));
+        setWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
+            @Override
+            public void onDismiss() {
+                closePopupWindow();
+            }
+        });
+    }
+
+    private void closePopupWindow() {
+        if (setWindow != null)
+            setWindow.dismiss();
+        DisplayUtil.backgroundAlpha(this, 1f);
+    }
 
     private void updateEnable(boolean isEnable) {
         updateEnable(isEnable, startTimeTv, endTimeTv, warnTimeTv, repeatTv, typeTv);
@@ -79,6 +231,8 @@ public class SchedulerCreateActivity extends BaseActivity {
                 v.setOnClickListener(isEnable ? mOnClickListener : null);
             }
         }
+        contentEd.setEnabled(isEnable);
+        contentEd.setFocusable(isEnable);
         allDaySv.setEnabled(isEnable);
         allDaySv.setClickable(isEnable);
         allDaySv.setFocusable(isEnable);
@@ -88,13 +242,27 @@ public class SchedulerCreateActivity extends BaseActivity {
     private SwitchView.OnCheckedChangeListener mOnCheckedChangeListener = new SwitchView.OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(View view, boolean isChecked) {
-
+            mSchedule.setAllDay(isChecked ? 1 : 0);
+            String format = mSchedule.getAllDay() == 1 ? DateFormatUtil.YMD : DateFormatUtil.YMD_HM;
+            startTimeTv.setText(DateFormatUtil.long2Str(mSchedule.getStartTime(), format));
+            endTimeTv.setText(DateFormatUtil.long2Str(mSchedule.getEndTime(), format));
         }
     };
     private View.OnClickListener mOnClickListener = new View.OnClickListener() {
         @Override
         public void onClick(View view) {
-            if (view == startTimeTv) {
+            if (view.getId() == R.id.editTv) {
+                closePopupWindow();
+                isEnable = true;
+                isUpdate = true;
+                updateEnable(isEnable);
+                invalidateOptionsMenu();
+            } else if (view.getId() == R.id.deleteTv) {
+                closePopupWindow();
+                deleteSchedule();
+            } else if (view.getId() == R.id.cancel_tv) {
+                closePopupWindow();
+            } else if (view == startTimeTv) {
                 showTimeSelect(true);
             } else if (view == endTimeTv) {
                 showTimeSelect(false);
@@ -105,13 +273,12 @@ public class SchedulerCreateActivity extends BaseActivity {
                 for (String e : datas) {
                     bean = new SelectBean();
                     bean.setName(e);
-                    bean.setClick(e.contains("默认") ? true : false);
                     beans.add(bean);
                 }
                 Intent intent = new Intent(ct, SelectActivity.class);
                 intent.putExtra("type", 2);
                 intent.putParcelableArrayListExtra("data", beans);
-                intent.putExtra("title", getString(R.string.select_approvel_people));
+                intent.putExtra("title", "提醒时间");
                 startActivityForResult(intent, 0x11);
             } else if (repeatTv == view) {
                 ArrayList<SelectBean> beans = new ArrayList<>();
@@ -146,6 +313,10 @@ public class SchedulerCreateActivity extends BaseActivity {
     };
 
     private void save() {
+        if (TextUtils.isEmpty(contentEd.getText())) {
+            showToast("请添加备注!!");
+            return;
+        }
         if (submiting) {
             showToast("当前正在处理,请稍等!!");
             return;
@@ -165,9 +336,15 @@ public class SchedulerCreateActivity extends BaseActivity {
         picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
             @Override
             public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
-                TextView tv = isStart ? startTimeTv : endTimeTv;
-                tv.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00");
-
+                long time = DateFormatUtil.str2Long(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00", DateFormatUtil.YMD_HMS);
+                String format = mSchedule.getAllDay() == 1 ? DateFormatUtil.YMD : DateFormatUtil.YMD_HM;
+                if (isStart) {
+                    mSchedule.setStartTime(time);
+                    startTimeTv.setText(DateFormatUtil.long2Str(time, format));
+                } else {
+                    mSchedule.setEndTime(time);
+                    endTimeTv.setText(DateFormatUtil.long2Str(time, format));
+                }
             }
         });
         picker.show();
@@ -185,10 +362,11 @@ public class SchedulerCreateActivity extends BaseActivity {
                         break;
                     case 0x12:
                         repeatTv.setText(b.getName());
+                        mSchedule.setRepeat(b.getName());
                         break;
                     case 0x13:
                         typeTv.setText(b.getName());
-
+                        mSchedule.setTag(b.getName());
                         break;
 
                 }
@@ -196,9 +374,201 @@ public class SchedulerCreateActivity extends BaseActivity {
         }
     }
 
-
     private void submit() {
+        showProgress();
+        String url = isUpdate ? "schedule/updateSchedule" : "schedule/saveSchedule";
+        mSchedule.setRemarks(contentEd.getText().toString());
+        mSchedule.setTitle(contentEd.getText().toString());
+        long minth = 60 * 1000;
+
+        int warnTime = -1;
+        long warnRealTime = 0;
+        String warnStr = warnTimeTv.getText().toString();
 
+        if (mSchedule.getAllDay() == 1) {
+            if (warnStr.equals(warns2[1])) {
+                warnTime = 8;
+                warnRealTime = DateFormatUtil.str2Long(DateFormatUtil.long2Str(mSchedule.getStartTime(), DateFormatUtil.YMD) + " 08:00:00", DateFormatUtil.YMD_HMS);
+            } else if (warnStr.equals(warns2[2])) {
+                warnTime = 9;
+                warnRealTime = DateFormatUtil.str2Long(DateFormatUtil.long2Str(mSchedule.getStartTime(), DateFormatUtil.YMD) + " 09:00:00", DateFormatUtil.YMD_HMS);
+            } else if (warnStr.equals(warns2[3])) {
+                warnTime = 18;
+                warnRealTime = DateFormatUtil.str2Long(DateFormatUtil.long2Str(mSchedule.getStartTime(), DateFormatUtil.YMD) + " 08:00:00", DateFormatUtil.YMD_HMS) - minth * 24 * 60;
+            } else if (warnStr.equals(warns2[4])) {
+                warnTime = 19;
+                warnRealTime = DateFormatUtil.str2Long(DateFormatUtil.long2Str(mSchedule.getStartTime(), DateFormatUtil.YMD) + " 09:00:00", DateFormatUtil.YMD_HMS) - minth * 24 * 60;
+            }
+        } else {
+            if (warnStr.equals(warns[1])) {
+                warnTime = 0;
+            } else if (warnStr.equals(warns[2])) {
+                warnTime = 5;
+            } else if (warnStr.equals(warns[3])) {
+                warnTime = 15;
+            } else if (warnStr.equals(warns[4])) {
+                warnTime = 30;
+            } else if (warnStr.equals(warns[5])) {
+                warnTime = 60;
+            } else if (warnStr.equals(warns[6])) {
+                warnTime = 60 * 24;
+            }
+            warnRealTime = mSchedule.getStartTime() - warnTime * minth;
+        }
+        mSchedule.setWarnRealTime(warnRealTime);
+        mSchedule.setWarnTime(warnTime);
+        Parameter.Builder mBuilder = new Parameter.Builder()
+                .mode(Method.POST)
+                .url(url)
+                .addParams("imid", MyApplication.getInstance().getLoginUserId())
+                .addParams("type", mSchedule.getType())
+                .addParams("allDay", mSchedule.getAllDay())
+                .addParams("repeat", mSchedule.getRepeat())
+                .addParams("title", mSchedule.getTitle())
+                .addParams("tag", mSchedule.getTag())
+                .addParams("remarks", mSchedule.getRemarks())
+                .addParams("startTime", mSchedule.getStartTime() / 1000)
+                .addParams("endTime", mSchedule.getEndTime() / 1000)
+                .addParams("warnTime", mSchedule.getWarnTime())
+                .addParams("warnRealTime", mSchedule.getWarnRealTime() / 1000)
+                .addParams("address", mSchedule.getAddress())
+                .addParams("status", mSchedule.getStatus())
+                .addParams("phone", MyApplication.getInstance().mLoginUser.getTelephone())
+                .record(isUpdate ? UPDATE : SUBMIT);
+        if (isUpdate) {
+            mBuilder.addParams("scheduleId", mSchedule.getId());
+        }
+        requestHttp(mBuilder, mOnSmartHttpListener);
+
+
+    }
+
+    private void deleteSchedule() {
+        if (submiting) {
+            showToast("当前正在处理,请稍等!!");
+            return;
+        }
+        submiting = true;
+        showProgress();
+        requestHttp(new Parameter.Builder()
+                        .mode(Method.POST)
+                        .addParams("scheduleId", mSchedule.getId())
+                        .url("schedule/deleteSchedule")
+                        .record(DELETE)
+                , mOnSmartHttpListener);
+    }
+
+    private OnSmartHttpListener mOnSmartHttpListener = new OnSmartHttpListener() {
+        @Override
+        public void onSuccess(int what, String message, Tags tag) throws Exception {
+            LogUtil.i("gong", "onSuccess=" + message);
+            dismissProgress();
+            JSONObject object = JSON.parseObject(message);
+            switch (what) {
+                case SUBMIT:
+                    if (JSONUtil.getBoolean(object, "success")) {
+                        Toast.makeText(ct, "提交成功!!", Toast.LENGTH_LONG).show();
+                        int id = JSONUtil.getInt(object, "data");
+                        mSchedule.setId(id);
+                        save2System(false);
+                        setResult(0x11);
+                        onBackPressed();
+                    }
+                    break;
+                case UPDATE:
+                    if (JSONUtil.getBoolean(object, "success")) {
+                        Toast.makeText(ct, "更新成功!!", Toast.LENGTH_LONG).show();
+                        int id = JSONUtil.getInt(object, "data");
+                        mSchedule.setId(id);
+                        save2System(true);
+                        setResult(0x11);
+                        onBackPressed();
+                    }
+                    break;
+                case DELETE:
+                    if (JSONUtil.getBoolean(object, "success")) {
+                        Toast.makeText(ct, "删除成功!!", Toast.LENGTH_LONG).show();
+                        deleteFormSystem();
+                        int id = JSONUtil.getInt(object, "data");
+                        mSchedule.setId(id);
+                        deleteFormSystem();
+                    }
+                    break;
+            }
+            submiting = false;
+        }
+
+        @Override
+        public void onFailure(int what, String message, Tags tag) throws Exception {
+            submiting = false;
+            dismissProgress();
+            LogUtil.i("gong", "onFailure=" + message);
 
+        }
+    };
+
+    private void deleteFormSystem() {
+        new VeriftyDialog.Builder(ct)
+                .setTitle(getString(R.string.app_name))
+                .setCanceledOnTouchOutside(false)
+                .setShowCancel(true)
+                .setContent("删除成功,是否同步删除系统日程!!")
+                .build(new VeriftyDialog.OnDialogClickListener() {
+                    @Override
+                    public void result(boolean clickSure) {
+                        if (clickSure) {
+                            deleteFormSystem(mSchedule);
+                        } else {
+                            setResult(0x11);
+                            onBackPressed();
+                        }
+                    }
+                });
+    }
+
+    private void deleteFormSystem(final Schedule mSchedule) {
+        requestPermission(Manifest.permission.WRITE_CALENDAR, new Runnable() {
+            @Override
+            public void run() {
+                ScheduleUtils.deleteSystemCalendar(ct, mSchedule.getId());
+                setResult(0x11);
+                onBackPressed();
+            }
+        }, new Runnable() {
+            @Override
+            public void run() {
+                showToast(R.string.not_system_permission);
+            }
+        });
+    }
+
+    private void save2System(final boolean isUpdate) {
+        boolean needSaveSystem = PreferenceUtils.getBoolean(PreferenceUtils.Constants.SAVE_SYSTEM_SCHEDULE, true);
+        if (needSaveSystem) {
+            requestPermission(Manifest.permission.WRITE_CALENDAR, new Runnable() {
+                @Override
+                public void run() {
+                    saveScheduleSystem(isUpdate, mSchedule);
+                }
+            }, new Runnable() {
+                @Override
+                public void run() {
+                    showToast(R.string.not_system_permission);
+                }
+            });
+
+        }
+    }
+
+    private void saveScheduleSystem(boolean isUpdate, Schedule mSchedule) {
+        if (ScheduleUtils.checkCalendarAccount(ct) > 0 || ScheduleUtils.addCalendarAccount(ct) > 0) {
+            if (isUpdate) {
+                ScheduleUtils.updateSystemCalendar(ct, mSchedule);
+            } else {
+                ScheduleUtils.addCalendarEvent(ct, mSchedule);
+            }
+        } else {
+            showToast("添加到系统日历失败!!");
+        }
     }
 }

+ 5 - 0
app_modular/appworks/src/main/java/com/uas/appworks/datainquiry/Constants.java

@@ -6,6 +6,11 @@ import android.os.Environment;
  * Created by RaoMeng on 2017/8/16.
  */
 public interface Constants {
+    interface Intents {
+        String MODEL = "model";
+        String ENABLE = "isEnable";
+    }
+
     interface CONSTANT {
         String PDF_FILE_NAME = "statement.pdf";
         String PDF_FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/UU/statementFile";

+ 71 - 24
app_modular/appworks/src/main/java/com/uas/appworks/model/Schedule.java

@@ -1,22 +1,55 @@
 package com.uas.appworks.model;
 
-public class Schedule {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Schedule implements Parcelable {
 
     private int id;
-    private String type;//类型 (UU互联||手机日程)
+    private String type;//类型 (UU互联||手机日程|会议
     private int allDay;//是否全天 ( 1.全天  0.非全天 )
-    private int repeat;//是否重复 ( 1.重复  0.非重复 )
-    private int repeatTag;//重复类型 ( 1.每天  2.每周 3.每月 4.每年 )
+    private String repeat;//重复类型(不重复、每天重复、每周重复、每月重复)
     private String title;//标题
     private String tag;//标签(工作|会议|学习)
     private String remarks;//备注
     private long startTime;//开始时间戳
     private long endTime;//结束时间戳
     private int warnTime;  //提醒时间(单位 分钟:  如:12==12分钟   负数为不提醒)
-    private String warnRealTime;//提醒精确时间(预留)
+    private long warnRealTime;//提醒精确时间(预留)
     private String address;//地点(预留)
     private String status;//状态(预留)
 
+    public Schedule() {
+    }
+
+    protected Schedule(Parcel in) {
+        id = in.readInt();
+        type = in.readString();
+        allDay = in.readInt();
+        repeat = in.readString();
+        title = in.readString();
+        tag = in.readString();
+        remarks = in.readString();
+        startTime = in.readLong();
+        endTime = in.readLong();
+        warnTime = in.readInt();
+        warnRealTime = in.readLong();
+        address = in.readString();
+        status = in.readString();
+    }
+
+    public static final Creator<Schedule> CREATOR = new Creator<Schedule>() {
+        @Override
+        public Schedule createFromParcel(Parcel in) {
+            return new Schedule(in);
+        }
+
+        @Override
+        public Schedule[] newArray(int size) {
+            return new Schedule[size];
+        }
+    };
+
     public int getId() {
         return id;
     }
@@ -26,7 +59,7 @@ public class Schedule {
     }
 
     public String getType() {
-        return type;
+        return type==null?"":type;
     }
 
     public void setType(String type) {
@@ -41,24 +74,16 @@ public class Schedule {
         this.allDay = allDay;
     }
 
-    public int getRepeat() {
-        return repeat;
+    public String getRepeat() {
+        return repeat==null?"":repeat;
     }
 
-    public void setRepeat(int repeat) {
+    public void setRepeat(String repeat) {
         this.repeat = repeat;
     }
 
-    public int getRepeatTag() {
-        return repeatTag;
-    }
-
-    public void setRepeatTag(int repeatTag) {
-        this.repeatTag = repeatTag;
-    }
-
     public String getTitle() {
-        return title;
+        return title==null?"":title;
     }
 
     public void setTitle(String title) {
@@ -66,7 +91,7 @@ public class Schedule {
     }
 
     public String getTag() {
-        return tag;
+        return tag==null?"":tag;
     }
 
     public void setTag(String tag) {
@@ -74,7 +99,7 @@ public class Schedule {
     }
 
     public String getRemarks() {
-        return remarks;
+        return remarks==null?"":remarks;
     }
 
     public void setRemarks(String remarks) {
@@ -105,16 +130,16 @@ public class Schedule {
         this.warnTime = warnTime;
     }
 
-    public String getWarnRealTime() {
+    public long getWarnRealTime() {
         return warnRealTime;
     }
 
-    public void setWarnRealTime(String warnRealTime) {
+    public void setWarnRealTime(long warnRealTime) {
         this.warnRealTime = warnRealTime;
     }
 
     public String getAddress() {
-        return address;
+        return address==null?"":address;
     }
 
     public void setAddress(String address) {
@@ -122,7 +147,7 @@ public class Schedule {
     }
 
     public String getStatus() {
-        return status;
+        return status==null?"":status;
     }
 
     public void setStatus(String status) {
@@ -132,4 +157,26 @@ public class Schedule {
     public int hasAlarm() {
         return warnTime > 0 ? 1 : 0;
     }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int i) {
+        parcel.writeInt(id);
+        parcel.writeString(type);
+        parcel.writeInt(allDay);
+        parcel.writeString(repeat);
+        parcel.writeString(title);
+        parcel.writeString(tag);
+        parcel.writeString(remarks);
+        parcel.writeLong(startTime);
+        parcel.writeLong(endTime);
+        parcel.writeInt(warnTime);
+        parcel.writeLong(warnRealTime);
+        parcel.writeString(address);
+        parcel.writeString(status);
+    }
 }

+ 2 - 2
app_modular/appworks/src/main/java/com/uas/appworks/utils/ScheduleUtils.java

@@ -18,7 +18,7 @@ import java.util.List;
 import java.util.TimeZone;
 
 public class ScheduleUtils {
-    private static final String DEF_EMAIL = "usoftchina@163.com";
+    private static final String DEF_EMAIL = "uu@usoftchina.com";
     private static final String NAME = "UU互联";
 
     /**
@@ -198,7 +198,7 @@ public class ScheduleUtils {
      */
     public static long deleteSystemCalendar(Context context, int id) {
         int deleteOk = -1;
-        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
+        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
             return deleteOk;
         }
         try {

+ 0 - 5
app_modular/appworks/src/main/res/layout/activity_scheduler_create.xml

@@ -86,7 +86,6 @@
         android:layout_height="wrap_content"
         android:drawablePadding="@dimen/paddingMin"
         android:drawableRight="@drawable/oa_next"
-        android:text="2018年8月09日  14:00"
         android:textColor="#909090"
         android:textSize="11sp"
         app:layout_constraintBottom_toBottomOf="@id/startTimeTag"
@@ -122,7 +121,6 @@
         android:layout_height="wrap_content"
         android:drawablePadding="@dimen/paddingMin"
         android:drawableRight="@drawable/oa_next"
-        android:text="2018年8月09日  14:00"
         android:textColor="#FF909090"
         android:textSize="11sp"
         app:layout_constraintBottom_toBottomOf="@id/endTimeTag"
@@ -158,7 +156,6 @@
         android:layout_height="wrap_content"
         android:drawablePadding="@dimen/paddingMin"
         android:drawableRight="@drawable/oa_next"
-        android:text="2018年8月09日  14:00"
         android:textColor="#FF909090"
         android:textSize="11sp"
         app:layout_constraintBottom_toBottomOf="@id/warnTag"
@@ -194,7 +191,6 @@
         android:layout_height="wrap_content"
         android:drawablePadding="@dimen/paddingMin"
         android:drawableRight="@drawable/oa_next"
-        android:text="2018年8月09日  14:00"
         android:textColor="#FF909090"
         android:textSize="11sp"
         app:layout_constraintBottom_toBottomOf="@id/repeatTag"
@@ -230,7 +226,6 @@
         android:layout_height="wrap_content"
         android:drawablePadding="@dimen/paddingMin"
         android:drawableRight="@drawable/oa_next"
-        android:text="2018年8月09日  14:00"
         android:textColor="#FF909090"
         android:textSize="11sp"
         app:layout_constraintBottom_toBottomOf="@id/typeTag"

+ 42 - 10
app_modular/appworks/src/main/res/layout/item_schedule_bottom.xml

@@ -26,33 +26,64 @@
         app:layout_constraintTop_toTopOf="parent" />
 
 
-    <TextView
-        android:id="@+id/timeTv"
+    <LinearLayout
+        android:id="@+id/timeFl"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="10dp"
-        android:text="全天"
-        android:textColor="#FF000000"
-        android:textSize="14sp"
+        android:orientation="vertical"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toRightOf="@id/spot"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintTop_toTopOf="parent">
+
+        <TextView
+            android:id="@+id/timeTv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="全天"
+            android:textColor="#FF000000"
+            android:textSize="14sp"
+            android:visibility="visible" />
+
+        <TextView
+            android:id="@+id/startTimeTv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="10:30"
+            android:textColor="#FF000000"
+            android:textSize="9sp"
+            android:visibility="gone" />
+
+        <TextView
+            android:id="@+id/endTimeTv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="14:00"
+            android:textColor="#FF000000"
+            android:textSize="9sp"
+            android:visibility="gone" />
+
+    </LinearLayout>
 
     <TextView
         android:id="@+id/contentTv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="20dp"
+        android:layout_marginTop="@dimen/padding"
         android:text="需求设计需求设计需求设计需求设计需…"
         android:textColor="#FF282828"
         android:textSize="12sp"
-        app:layout_constraintLeft_toRightOf="@id/timeTv" />
+        app:layout_constraintLeft_toRightOf="@id/timeFl"
+        app:layout_constraintTop_toTopOf="parent" />
 
     <TextView
+        android:id="@+id/typeTv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_marginBottom="@dimen/padding"
+        app:layout_constraintBottom_toBottomOf="parent"
         android:layout_marginTop="@dimen/paddingMin"
-        android:text="(来自手机日历)"
         android:textColor="#FF909090"
         android:textSize="8sp"
         app:layout_constraintLeft_toLeftOf="@id/contentTv"
@@ -65,11 +96,12 @@
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
+
     <View
         android:layout_width="0dp"
         android:layout_height="@dimen/line"
         android:background="@color/linen"
-        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="@id/contentTv"
-        app:layout_constraintBottom_toBottomOf="parent"/>
+        app:layout_constraintRight_toRightOf="parent" />
 </android.support.constraint.ConstraintLayout>

+ 8 - 2
app_modular/appworks/src/main/res/layout/item_schedule_search.xml

@@ -29,8 +29,14 @@
         android:text="需求评审"
         android:textColor="#FF000000"
         android:textSize="14sp"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@id/nextView" />
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <TextView
+        android:id="@+id/tagTv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/padding"
+        app:layout_constraintLeft_toRightOf="@id/titleTv" />
 
     <TextView
         android:id="@+id/timeTv"

+ 35 - 0
app_modular/appworks/src/main/res/layout/pop_edit_schedule_activity.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/commonPopView">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/shape_common_pop_option_item"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/editTv"
+            style="@style/commonPopItemTop"
+            android:text="编辑日程" />
+
+        <View
+            android:id="@+id/super_setting_line"
+            android:layout_width="match_parent"
+            android:layout_height="0.3dp"
+            android:background="@color/button_invalid" />
+
+
+        <TextView
+            android:id="@+id/deleteTv"
+            style="@style/commonPopSingleItem"
+            android:text="删除日程" />
+
+    </LinearLayout>
+
+    <TextView
+        android:id="@+id/cancel_tv"
+        style="@style/commonPopCancelItem"
+        android:text="@string/common_cancel" />
+
+</LinearLayout>

+ 9 - 0
app_modular/appworks/src/main/res/menu/menu_input_edit.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <item
+        android:id="@+id/edit"
+        android:title="@string/edit"
+        app:showAsAction="always" />
+</menu>

+ 4 - 0
app_modular/appworks/src/main/res/menu/menu_input_ok.xml

@@ -6,4 +6,8 @@
         android:id="@+id/complete"
         android:title="@string/complete"
         app:showAsAction="always" />
+    <item
+        android:id="@+id/edit"
+        android:title="@string/edit"
+        app:showAsAction="always" />
 </menu>

+ 8 - 1
app_modular/appworks/src/main/res/values/strings.xml

@@ -229,5 +229,12 @@
     <string name="model_can_not_be_empty">型号不能为空</string>
     <string name="spec_can_not_be_empty">规格不能为空</string>
 
-
+    <!--日程时间助手-->
+    <string name="create_scheduler">创建日程</string>
+    <string name="detail">详情</string>
+    <string name="scheduler_tag">日程标签</string>
+    <string name="scheduler_warn">日程提醒</string>
+    <string name="scheduler_setting">日程设置</string>
+    <string name="add_time_helper">添加到时间助手</string>
+    <string name="my_scheduler">我的日程</string>
 </resources>