package app.hanks.com.conquer.activity; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.design.widget.TextInputLayout; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewTreeObserver; import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.ProgressBar; import android.widget.TextView; import com.google.gson.Gson; import com.iflytek.cloud.ErrorCode; import com.iflytek.cloud.InitListener; import com.iflytek.cloud.RecognizerListener; import com.iflytek.cloud.RecognizerResult; import com.iflytek.cloud.SpeechConstant; import com.iflytek.cloud.SpeechError; import com.iflytek.cloud.SpeechRecognizer; import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import app.hanks.com.conquer.R; import app.hanks.com.conquer.adapter.TagAdapter; import app.hanks.com.conquer.bean.Card; import app.hanks.com.conquer.bean.Tag; import app.hanks.com.conquer.bean.Task; import app.hanks.com.conquer.bean.User; import app.hanks.com.conquer.config.Constants; import app.hanks.com.conquer.db.TagDao; import app.hanks.com.conquer.db.TaskDao; import app.hanks.com.conquer.otto.BusProvider; import app.hanks.com.conquer.otto.RefreshEvent; import app.hanks.com.conquer.util.A; import app.hanks.com.conquer.util.AlertDialogUtils; import app.hanks.com.conquer.util.AlertDialogUtils.EtOkCallBack; import app.hanks.com.conquer.util.AlertDialogUtils.OkCallBack; import app.hanks.com.conquer.util.AudioUtils; import app.hanks.com.conquer.util.CollectionUtils; import app.hanks.com.conquer.util.JsonParser; import app.hanks.com.conquer.util.L; import app.hanks.com.conquer.util.MsgUtils; import app.hanks.com.conquer.util.PixelUtil; import app.hanks.com.conquer.util.RecordUtil; import app.hanks.com.conquer.util.SP; import app.hanks.com.conquer.util.T; import app.hanks.com.conquer.util.TaskUtil; import app.hanks.com.conquer.util.TaskUtil.UpLoadListener; import app.hanks.com.conquer.util.TimeUtil; import app.hanks.com.conquer.view.FlowLayout; import app.hanks.com.conquer.view.OpAnimationView; import app.hanks.com.conquer.view.RevealBackgroundView; import app.hanks.com.conquer.view.SoundWaveView; import app.hanks.com.conquer.view.datetime.datepicker.DatePickerDialog; import app.hanks.com.conquer.view.datetime.datepicker.DatePickerDialog.OnDateSetListener; import app.hanks.com.conquer.view.datetime.timepicker.RadialPickerLayout; import app.hanks.com.conquer.view.datetime.timepicker.TimePickerDialog; import app.hanks.com.conquer.view.datetime.timepicker.TimePickerDialog.OnTimeSetListener; import app.hanks.com.conquer.view.materialmenu.MaterialMenuDrawable; import app.hanks.com.conquer.view.materialmenu.MaterialMenuView; import cn.bmob.im.BmobChatManager; import cn.bmob.v3.listener.SaveListener; public class AddTaskActivity extends BaseActivity implements OnClickListener, RevealBackgroundView.OnStateChangeListener { private static final int REQUES_IMG = 0; private static final int REQUES_FRIEND = 1; boolean isFirst = true; private EditText et_name; private TextView tv_time, tv_time_tip; private TimePickerDialog timePickerDialog24h; private DatePickerDialog datePickerDialog; private TextView tv_date; private TextView wk_0, wk_1, wk_2, wk_3, wk_4, wk_5, wk_6; private TextView day_0, day_1, day_2, day_3, day_4, day_5, day_6; private final Calendar mCalendar = Calendar.getInstance(); private String imgUrl = null; private String audioUrl = null; private String note = null; private ImageView iv;// 添加的图片 private View ll_audio; private FlowLayout ll_at_friend; private List<String> atFriends = new ArrayList<String>(); private List<User> at = new ArrayList<User>(); private AudioUtils aUtils; // 标记第一个的时间基准 private long headTime; private RevealBackgroundView vRevealBackground; private MaterialMenuView material_menu; private View iv_sort; //title上面的 private TextView tv_repeat, tv_tag; private View layout_date;//日期选择 private View currentTime; //显示选择的时间 private View iv_voice, iv_clear; //语音,清除 private View ib_audio, ib_theme, ib_img, ib_at; private ViewGroup ll_recording; private ViewGroup et_layout; private SoundWaveView soundWaveView; private TextInputLayout textInputLayout; private OpAnimationView ib_save; final Task task = new Task(); private static String pad(int c) { if (c >= 10) return String.valueOf(c); else return "0" + String.valueOf(c); } public static void startUserProfileFromLocation(int[] startingLocation, Activity mainActivity) { Intent intent = new Intent(mainActivity, AddTaskActivity.class); intent.putExtra("startingLocation", startingLocation); mainActivity.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); setupRevealBackground(savedInstanceState); } private void init() { // 播放音频的 aUtils = AudioUtils.getInstance(); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); tv_time = (TextView) findViewById(R.id.tv_time); tv_time_tip = (TextView) findViewById(R.id.tv_time_tip); tv_date = (TextView) findViewById(R.id.tv_title); material_menu = (MaterialMenuView) findViewById(R.id.material_menu); iv_sort = findViewById(R.id.iv_sort); iv_sort.setOnClickListener(this); et_name = (EditText) findViewById(R.id.et_name); ll_audio = findViewById(R.id.ll_audio); ll_audio.setVisibility(View.GONE); iv = (ImageView) findViewById(R.id.iv); iv.setOnClickListener(this); material_menu.setState(MaterialMenuDrawable.IconState.BURGER); material_menu.setOnClickListener(this); ll_at_friend = (FlowLayout) findViewById(R.id.ll_at_friend); layout_date = findViewById(R.id.layout_date); currentTime = findViewById(R.id.currentTime); iv_voice = findViewById(R.id.iv_voice); iv_clear = findViewById(R.id.iv_clear); et_layout = (ViewGroup) findViewById(R.id.et_layout); ll_recording = (ViewGroup) findViewById(R.id.ll_recording); soundWaveView = (SoundWaveView) findViewById(R.id.soundWaveView); textInputLayout = (TextInputLayout) findViewById(R.id.textInputLayout); iv_clear.setOnClickListener(this); //右下角 ib_at = findViewById(R.id.ib_at); ib_img = findViewById(R.id.ib_img); ib_audio = findViewById(R.id.ib_audio); ib_theme = findViewById(R.id.ib_theme); tv_tag = (TextView) findViewById(R.id.tv_tag); tv_repeat = (TextView) findViewById(R.id.tv_repeat); ib_save = (OpAnimationView) findViewById(R.id.ib_save); ib_theme.setScaleX(0.8f); ib_theme.setScaleY(0.8f); ib_at.setScaleX(0.8f); ib_at.setScaleY(0.8f); ib_audio.setScaleX(0.8f); ib_audio.setScaleY(0.8f); ib_img.setScaleX(0.8f); ib_img.setScaleY(0.8f); ib_at.setOnClickListener(this); ib_img.setOnClickListener(this); ib_audio.setOnClickListener(this); ib_theme.setOnClickListener(this); ib_save.setOnClickListener(this); tv_tag.setOnClickListener(this); tv_repeat.setOnClickListener(this); wk_0 = (TextView) findViewById(R.id.wk_0); wk_1 = (TextView) findViewById(R.id.wk_1); wk_2 = (TextView) findViewById(R.id.wk_2); wk_3 = (TextView) findViewById(R.id.wk_3); wk_4 = (TextView) findViewById(R.id.wk_4); wk_5 = (TextView) findViewById(R.id.wk_5); wk_6 = (TextView) findViewById(R.id.wk_6); day_0 = (TextView) findViewById(R.id.day_0); day_1 = (TextView) findViewById(R.id.day_1); day_2 = (TextView) findViewById(R.id.day_2); day_3 = (TextView) findViewById(R.id.day_3); day_4 = (TextView) findViewById(R.id.day_4); day_5 = (TextView) findViewById(R.id.day_5); day_6 = (TextView) findViewById(R.id.day_6); wk_0.setOnClickListener(this); wk_1.setOnClickListener(this); wk_2.setOnClickListener(this); wk_3.setOnClickListener(this); wk_4.setOnClickListener(this); wk_5.setOnClickListener(this); wk_6.setOnClickListener(this); day_0.setOnClickListener(this); day_1.setOnClickListener(this); day_2.setOnClickListener(this); day_3.setOnClickListener(this); day_4.setOnClickListener(this); day_5.setOnClickListener(this); day_6.setOnClickListener(this); Date d = new Date(); Calendar c = Calendar.getInstance(); c.setTime(d); headTime = d.getTime(); initWeekday(c); tv_date.setText(new SimpleDateFormat("yyyy/MM/dd").format(d)); initDatePicker(); tv_date.setOnClickListener(this); tv_time.setOnClickListener(this); //自动补全 /* String[] course = Tasks.tasks; AutoCompleteArrayAdapter<String> adapter = new AutoCompleteArrayAdapter<String>(this, R.layout.item_list_simple, course); et_name.setAdapter(adapter); et_name.setDropDownHeight(metrics.heightPixels / 3); et_name.setThreshold(1); et_name.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { AutoCompleteTextView view = (AutoCompleteTextView) v; if (view.getText().length() > 0 && hasFocus) { view.showDropDown(); } } });*/ et_name.addTextChangedListener(new EditTextChangeListener()); et_name.setOnEditorActionListener(new SaveEditActionListener()); } /** * title的动画 */ private void titleAnim() { layout_date.setTranslationY(-layout_date.getHeight()); tv_tag.setTranslationY(tv_tag.getHeight()); currentTime.setAlpha(0); et_name.setVisibility(View.VISIBLE); et_layout.setVisibility(View.VISIBLE); layout_date.setVisibility(View.VISIBLE); currentTime.setVisibility(View.VISIBLE); material_menu.animateState(MaterialMenuDrawable.IconState.ARROW); iv_sort.animate().rotation(90).setDuration(300).start(); layout_date.animate().translationY(-PixelUtil.dp2px(3)).setDuration(300).start(); currentTime.animate().alpha(1).setDuration(300).start(); int w = (int) (ib_save.getWidth() * 1.7f); ib_theme.animate().translationY(-w).rotation(360).setDuration(300).setStartDelay(150).start(); ib_at.animate().translationY((float) (-w * Math.sqrt(3) / 2)).translationX(-w / 2).rotation(360).setDuration(300).setStartDelay(100).start(); ib_audio.animate().translationY(-w / 2).translationX((float) (-w * Math.sqrt(3) / 2)).rotation(360).setDuration(300).setStartDelay(50).start(); ib_img.animate().translationX(-w).rotation(360).setDuration(300).start(); ib_save.add2right(); tv_tag.animate().translationY(0).setDuration(300).alpha(1).setStartDelay(300).start(); task.setNeedAlerted(true); } /** * 初始化头部 */ private void initWeekday(Calendar c) { Calendar tmp = Calendar.getInstance(Locale.CHINA); tmp.setTimeInMillis(c.getTimeInMillis()); wk_0.setText(TimeUtil.getWeekDayD(tmp.get(Calendar.DAY_OF_WEEK))); day_0.setText(tmp.get(Calendar.DAY_OF_MONTH) + ""); tmp.add(Calendar.DAY_OF_YEAR, 1); wk_1.setText(TimeUtil.getWeekDayD(tmp.get(Calendar.DAY_OF_WEEK))); day_1.setText(tmp.get(Calendar.DAY_OF_MONTH) + ""); tmp.add(Calendar.DAY_OF_YEAR, 1); wk_2.setText(TimeUtil.getWeekDayD(tmp.get(Calendar.DAY_OF_WEEK))); day_2.setText(tmp.get(Calendar.DAY_OF_MONTH) + ""); tmp.add(Calendar.DAY_OF_YEAR, 1); wk_3.setText(TimeUtil.getWeekDayD(tmp.get(Calendar.DAY_OF_WEEK))); day_3.setText(tmp.get(Calendar.DAY_OF_MONTH) + ""); tmp.add(Calendar.DAY_OF_YEAR, 1); wk_4.setText(TimeUtil.getWeekDayD(tmp.get(Calendar.DAY_OF_WEEK))); day_4.setText(tmp.get(Calendar.DAY_OF_MONTH) + ""); tmp.add(Calendar.DAY_OF_YEAR, 1); wk_5.setText(TimeUtil.getWeekDayD(tmp.get(Calendar.DAY_OF_WEEK))); day_5.setText(tmp.get(Calendar.DAY_OF_MONTH) + ""); tmp.add(Calendar.DAY_OF_YEAR, 1); wk_6.setText(TimeUtil.getWeekDayD(tmp.get(Calendar.DAY_OF_WEEK))); day_6.setText(tmp.get(Calendar.DAY_OF_MONTH) + ""); int t = (Integer) SP.get(context, "theme", 0); int color = getResources().getColor(R.color.theme_0); if (t == 1) color = getResources().getColor(R.color.theme_1); else if (t == 2) color = getResources().getColor(R.color.theme_2); else if (t == 3) color = getResources().getColor(R.color.theme_3); day_0.setBackgroundDrawable(getResources().getDrawable(R.drawable.red_bg)); day_1.setBackgroundColor(color); day_2.setBackgroundColor(color); day_3.setBackgroundColor(color); day_4.setBackgroundColor(color); day_5.setBackgroundColor(color); day_6.setBackgroundColor(color); } /** * 初始化日历时间的选择控件 */ private void initDatePicker() { mCalendar.add(Calendar.MINUTE, 60);// 设成60分钟后 setTimeAndTip(new SimpleDateFormat("yyyy/MM/dd").format(mCalendar.getTime()) + " " + pad(mCalendar.get(Calendar.HOUR_OF_DAY)) + ":" + pad(mCalendar.get(Calendar.MINUTE))); timePickerDialog24h = TimePickerDialog.newInstance(new OnTimeSetListener() { @Override public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) { setTimeAndTip(tv_date.getText() + " " + new StringBuilder().append(pad(hourOfDay)).append(":").append(pad(minute)) .toString()); } }, mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE), true); datePickerDialog = DatePickerDialog.newInstance(new OnDateSetListener() { public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) { Calendar c = Calendar.getInstance(); c.set(year, month, day); headTime = c.getTimeInMillis(); initWeekday(c); tv_date.setText(new StringBuilder().append(pad(year)).append("/").append(pad(month + 1)) .append("/").append(pad(day))); setTimeAndTip(tv_date.getText() + " " + tv_time.getText()); } }, mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH)); int curYear = mCalendar.get(Calendar.YEAR); datePickerDialog.setYearRange(curYear, mCalendar.get(Calendar.MONTH) >= 11 ? curYear + 1 : curYear); } /** * 设置tv_time 和 tv_time_tip的文本内容 * * @param string 类似yyyy/MM/dd HH:mm */ private void setTimeAndTip(String string) { tv_time.setText(string.substring(string.length() - 5, string.length())); try { Date d = new SimpleDateFormat("yyyy/MM/dd HH:mm").parse(string); tv_time_tip.setTextColor(d.getTime() > System.currentTimeMillis() ? Color.GRAY : Color.RED); tv_time_tip.setText("(" + TaskUtil.getDescriptionTimeFromTimestamp(d.getTime()) + ")"); } catch (ParseException e) { e.printStackTrace(); } } /** * 保存任务 */ private void saveTask() { /** 1.彈出进度条dialog 或者 设置 保存按钮不可用 */ /** 2.获取内容 */ /** 3.提交服务器,成功finish ,失败关闭dialog或者设置保存按钮可以使用 */ String name = et_name.getText().toString().trim(); if (TextUtils.isEmpty(name)) { T.show(context, "写点内容吧~~"); // textInputLayout.setErrorEnabled(true); // textInputLayout.setError("内容不能为空"); return; } task.setUser(currentUser); task.setName(name); try { Date time = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse(tv_date.getText().toString().trim() .substring(0, 10) + " " + tv_time.getText().toString().trim() + ":00"); task.setTime(time.getTime()); } catch (ParseException e1) { e1.printStackTrace(); } if (task.getTime() < System.currentTimeMillis()) { T.show(context, "时间已经过去了 T_T "); return; } task.setHasAlerted(false); if (atFriends.size() > 0) { task.setAtFriends(atFriends); } task.save(context, new SaveListener() { @Override public void onSuccess() { L.d("保存的task:" + task.getObjectId()); // 1.本地数据库存储 new TaskDao(context).create(task); if (CollectionUtils.isNotNull(at)) {//发送好友邀请 sendInvite(task); } //通知刷新list BusProvider.getInstance().post(new RefreshEvent()); // 2.finish A.finishSelf(context); } @Override public void onFailure(int arg0, String arg1) { L.e(arg0 + ",task.save," + arg1); } }); } /** * 发送好友邀请 */ private void sendInvite(Task task) { for (User user : at) { Card card = new Card(); card.setType(1);// 0。提醒卡 card.setFid(currentUser.getObjectId()); card.setFusername(currentUser.getUsername()); card.setFnick(currentUser.getNick()); card.setFavatar(currentUser.getAvatar()); card.setZixiName(task.getName()); card.setTime(task.getTime()); card.settId(user.getObjectId()); if (audioUrl != null) card.setAudioUrl(audioUrl); if (imgUrl != null) card.setImgUrl(imgUrl); card.setContent("我在克服拖延症,记得提醒我哟!"); L.e(card.toString()); String json = new Gson().toJson(card); L.d("发送邀请:" + user.getNick()); MsgUtils.sendMsg(context, BmobChatManager.getInstance(context.getApplicationContext()), user, json); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv: AlertDialogUtils.show(context, "删除图片", "真的要删除么?", "删除", "算了", new OkCallBack() { @Override public void onOkClick(DialogInterface dialog, int which) { iv.setVisibility(View.GONE); imgUrl = null; } }, null); break; case R.id.ib_at: goSelectFriends(); break; case R.id.iv_sort: setAlert(); break; case R.id.ib_audio: showRecoder(); break; case R.id.ib_img: selectPic(); break; case R.id.ib_theme: editNote(); break; case R.id.ib_save: if (currentUser != null) { saveTask(); } else { // 登录对话框 T.show(context, "请先登录"); } break; case R.id.tv_title: datePickerDialog.show(getFragmentManager(), ""); break; case R.id.tv_time: timePickerDialog24h.show(getFragmentManager(), ""); break; case R.id.material_menu: onBackPressed(); break; case R.id.tv_tag: showTagSelect(); break; case R.id.tv_repeat: showRepeat(); break; case R.id.iv_clear: et_name.setText(""); break; case R.id.wk_0: case R.id.day_0: setCheckedDay(day_0, 0); break; case R.id.wk_1: case R.id.day_1: setCheckedDay(day_1, 1); break; case R.id.wk_2: case R.id.day_2: setCheckedDay(day_2, 2); break; case R.id.wk_3: case R.id.day_3: setCheckedDay(day_3, 3); break; case R.id.wk_4: case R.id.day_4: setCheckedDay(day_4, 4); break; case R.id.wk_5: case R.id.day_5: setCheckedDay(day_5, 5); break; case R.id.wk_6: case R.id.day_6: setCheckedDay(day_6, 6); break; } } /** * 修改是否提醒 */ private void setAlert() { if (task.isNeedAlerted()) { iv_sort.animate().rotation(0).setDuration(300).start(); task.setNeedAlerted(false); layout_date.animate().translationY(-layout_date.getHeight()).setDuration(300).start(); currentTime.animate().alpha(0).setDuration(300).start(); } else { iv_sort.animate().rotation(90).setDuration(300).start(); task.setNeedAlerted(true); layout_date.animate().translationY(-PixelUtil.dp2px(3)).setDuration(300).start(); currentTime.animate().alpha(1).setDuration(300).start(); } } /** * 添加修改标签 */ private void showTagSelect() { ListView v = new ListView(context); final PopupWindow popWin = new PopupWindow(v, PixelUtil.dp2px(180), PixelUtil.dp2px(200)); popWin.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.card_bg)); popWin.setFocusable(true); popWin.setOutsideTouchable(true); // 以处的区域,自动关闭 int[] location = new int[2]; tv_tag.getLocationOnScreen(location); popWin.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1] + tv_tag.getHeight()); TagDao tagDao = new TagDao(context); List<Tag> tags = tagDao.getAllTag(); if (tags == null) { tags = new ArrayList<>(); } v.setAdapter(new TagAdapter(context, tags)); final List<Tag> finalTags = tags; v.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == finalTags.size() - 1) { //新建 createNewTag(); } else { tv_tag.setText(finalTags.get(position).getName()); task.setTagId(finalTags.get(position).getId()); } if (popWin != null) { popWin.dismiss(); } } }); v.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { if (position < finalTags.size() - 5) { deleteTag(finalTags.get(position), popWin); } return true; } }); } /** * 删除分组 * * @param tag * @param popupWindow */ private void deleteTag(final Tag tag, final PopupWindow popupWindow) { AlertDialogUtils.show(context, "删除分组", "确定删除分组吗?", "确定", "取消", new OkCallBack() { @Override public void onOkClick(DialogInterface dialog, int which) { new TagDao(context).deleteTag(tag); popupWindow.dismiss(); } }, null); } /** * 创建标签 */ private void createNewTag() { AlertDialogUtils.showEditDialog(context, "创建分组", "确定", "取消", new AlertDialogUtils.EtOkCallBack() { @Override public void onOkClick(String s) { if (s != null) { Tag tag = new Tag(); tag.setName(s); long id = new TagDao(context).create(tag); tv_tag.setText(s); task.setTagId((int) id); } } }); } /** * 添加修改重复 */ private void showRepeat() { ListView v = new ListView(context); v.setFooterDividersEnabled(false); final PopupWindow popupWindow = new PopupWindow(v, PixelUtil.dp2px(100), PixelUtil.dp2px(180)); popupWindow.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.card_bg)); popupWindow.setFocusable(true); popupWindow.setOutsideTouchable(true); // 点击popWin popupWindow.setOutsideTouchable(true); // 以处的区域,自动关闭 int[] location = new int[2]; tv_repeat.getLocationOnScreen(location); popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1] + tv_repeat.getHeight()); final List<String> list = new ArrayList<>(); list.add("单次"); list.add("每天"); list.add("每周"); list.add("每月"); v.setAdapter(new ArrayAdapter<String>(context, R.layout.item_list_simple, list)); v.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { task.setRepeat(position); tv_repeat.setText(list.get(position)); popupWindow.dismiss(); } }); } /** * 备注 */ private void editNote() { AlertDialogUtils.showEditDialog(context, "输入附加信息", "写好了", "算了", new EtOkCallBack() { @Override public void onOkClick(String s) { task.setNote(s); } }); } /** * at好友 */ private void goSelectFriends() { if (currentUser != null) { Intent intent = new Intent(context, SelectFriendActivity.class); startActivityForResult(intent, REQUES_FRIEND); } } /** * 添加好友布局 * * @param toUsers */ private void addFriend(final User toUsers) { if (!atFriends.contains(toUsers.getObjectId())) {// 防止重复 atFriends.add(toUsers.getObjectId()); at.add(toUsers); final TextView tv = new TextView(context); // 必须 MarginLayoutParams lp = new MarginLayoutParams(MarginLayoutParams.WRAP_CONTENT, MarginLayoutParams.WRAP_CONTENT); tv.setLayoutParams(lp); tv.setBackgroundResource(R.drawable.btn_little_grey_f); if (atFriends.size() > 0) tv.setText(" @" + toUsers.getNick() + " "); ll_at_friend.addView(tv); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ll_at_friend.removeView(tv); atFriends.remove(toUsers); } }); } } /** * 添加录音 */ private void showRecoder() { View v = View.inflate(context, R.layout.dialog_recorder, null); new RecordUtil(context, v, currentUser.getObjectId(), new RecordUtil.RecordStatusChangedListener() { @Override public void onRecordCompleled(String path) { if (path == null) return; final File f = new File(path); if (f.exists()) { ll_audio.setVisibility(View.VISIBLE); // 为播放按钮设置点击事件 final ImageButton ib_play = (ImageButton) ll_audio.findViewById(R.id.ib_play); ProgressBar pb = (ProgressBar) ll_audio.findViewById(R.id.pb); pb.setProgress(0); // 播放按钮 ib_play.setImageResource(R.drawable.play_audio); ib_play.setTag("play"); ib_play.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { aUtils.play(context, ll_audio, f.getAbsolutePath()); } }); // 删除布局 ll_audio.findViewById(R.id.iv_del).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AlertDialogUtils.show(context, "删除录音", "确定要删除录音吗?", "删除", "算了", new OkCallBack() { @Override public void onOkClick(DialogInterface dialog, int which) { ll_audio.setVisibility(View.GONE); audioUrl = null; } }, null); } }); TaskUtil.upLoadFile(context, f, new UpLoadListener() { @Override public void onSuccess(String url) { task.setAudioUrl(url); } @Override public void onFailure(int error, String msg) { } }); } } @Override public void onRecordCancel() { } }); } /** * 添加图片 */ private void selectPic() { Intent intent = new Intent(context, AlbumActivity.class); startActivityForResult(intent, REQUES_IMG); } private void setCheckedDay(TextView day, int gap) { int t = (Integer) SP.get(context, "theme", 0); int color = getResources().getColor(R.color.theme_0); if (t == 1) color = getResources().getColor(R.color.theme_1); else if (t == 2) color = getResources().getColor(R.color.theme_2); else if (t == 3) color = getResources().getColor(R.color.theme_3); day_0.setBackgroundColor(color); day_1.setBackgroundColor(color); day_2.setBackgroundColor(color); day_3.setBackgroundColor(color); day_4.setBackgroundColor(color); day_5.setBackgroundColor(color); day_6.setBackgroundColor(color); // day.setBackgroundColor(getResources().getColor(R.color.red_button)); day.setBackgroundDrawable(getResources().getDrawable(R.drawable.red_bg)); Calendar c = Calendar.getInstance(); c.setTimeInMillis(headTime); c.add(Calendar.DAY_OF_YEAR, gap); c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day.getText().toString())); tv_date.setText(new StringBuilder().append(pad(c.get(Calendar.YEAR))).append("/") .append(pad(c.get(Calendar.MONTH) + 1)).append("/").append(pad(c.get(Calendar.DAY_OF_MONTH)))); setTimeAndTip(tv_date.getText() + " " + tv_time.getText()); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { L.d(requestCode + "," + resultCode + "," + data); if (resultCode == RESULT_OK) { if (requestCode == REQUES_IMG) { List<String> imagePathList = data.getStringArrayListExtra(AlbumActivity.INTENT_SELECTED_PICTURE); if (imagePathList.size() <= 0) { return; } File f = new File(imagePathList.get(0)); L.e("照片路径:" + f.getAbsolutePath()); if (f.exists()) { iv.setVisibility(View.VISIBLE); loader.displayImage("file://" + f.getAbsolutePath(), iv, option_pic); uploadPic(f); } } else if (REQUES_FRIEND == requestCode) { User user = (User) data.getSerializableExtra("selectUser"); if (user != null) addFriend(user); else L.e("返回的好友空空"); } } super.onActivityResult(requestCode, resultCode, data); } /** * 上传 * * @param f */ private void uploadPic(File f) { TaskUtil.upLoadFile(context, f, new UpLoadListener() { @Override public void onSuccess(String url) { task.setImageUrl(url); } @Override public void onFailure(int error, String msg) { T.show(context, "上传失败"); } }); } @Override protected void onDestroy() { sendBroadcast(new Intent(Constants.ACTION_DESTORY_PLAYER)); super.onDestroy(); } @Override public void initTitleBar(ViewGroup rl_title, TextView tv_title, ImageButton ib_back, ImageButton ib_right, View shadow) { if (shadow != null) shadow.setVisibility(View.GONE); } @Override public View getContentView() { return View.inflate(context, R.layout.activity_add_task, null); } private void setupRevealBackground(Bundle savedInstanceState) { vRevealBackground = (RevealBackgroundView) findViewById(R.id.vRevealBackground); vRevealBackground.setOnStateChangeListener(this); if (savedInstanceState == null) { final int[] startingLocation = getIntent().getIntArrayExtra("startingLocation"); vRevealBackground.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { vRevealBackground.getViewTreeObserver().removeOnPreDrawListener(this); vRevealBackground.startFromLocation(startingLocation); return false; } }); } else { vRevealBackground.setToFinishedFrame(); } } @Override public void onStateChange(int state) { if (RevealBackgroundView.STATE_FINISHED == state) { titleAnim(); } } /** * 回车保存 */ private class SaveEditActionListener implements TextView.OnEditorActionListener { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { saveTask(); } return true; } } public void xfVoice(View view) { SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(context, mInitListener); //2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类 mIat.setParameter(SpeechConstant.DOMAIN, "iat"); mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); mIat.setParameter(SpeechConstant.ACCENT, "mandarin "); mIat.setParameter(SpeechConstant.ASR_PTT, "0"); //3.开始听写 mIat.startListening(mRecoListener); } /** * 初始化监听器。 */ private InitListener mInitListener = new InitListener() { @Override public void onInit(int code) { if (code != ErrorCode.SUCCESS) { T.show(context, "初始化失败,错误码:" + code); } } }; //听写监听器 private RecognizerListener mRecoListener = new RecognizerListener() { //听写结果回调接口(返回Json格式结果,用户可参见附录12.1); //一般情况下会通过onResults接口多次返回结果,完整的识别内容是多次结果的累加; //关于解析Json的代码可参见MscDemo中JsonParser类; //isLast等于true时会话结束。 public void onResult(RecognizerResult results, boolean isLast) { String text = JsonParser.parseIatResult(results.getResultString()); et_name.append(text); et_name.setSelection(et_name.length()); } //会话发生错误回调接口 public void onError(SpeechError error) { error.getPlainDescription(true);//获取错误码描述 // T.show(context,"网络不给力~"); L.e(error.getErrorDescription()); } //开始录音 public void onBeginOfSpeech() { L.d("onBeginOfSpeech"); ll_recording.setVisibility(View.VISIBLE); } //音量值0~30 public void onVolumeChanged(int volume) { L.d("onVolumeChanged...." + volume); if (volume / 30f >= 0 && volume / 30f <= 1) { // ll_recording.setAlpha(volume / 20f); soundWaveView.setProgress(volume / 30f); } } //结束录音 public void onEndOfSpeech() { L.d("onEndOfSpeech"); ll_recording.setVisibility(View.GONE); } //扩展用接口 public void onEvent(int eventType, int arg1, int arg2, Bundle obj) { } }; private class EditTextChangeListener implements TextWatcher { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { iv_clear.setVisibility(s.length() > 0 ? View.VISIBLE : View.GONE); } } }