/* * Copyright (C) 2012 yueyueniao * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.suan.weclient.fragment.mass; import android.app.Dialog; import android.content.Context; import android.content.res.Configuration; import android.graphics.Color; import android.graphics.Rect; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.suan.weclient.R; import com.suan.weclient.activity.MainActivity; import com.suan.weclient.adapter.FaceGridAdapter; import com.suan.weclient.fragment.BaseFragment; import com.suan.weclient.util.GlobalContext; import com.suan.weclient.util.Util; import com.suan.weclient.util.data.DataManager; import com.suan.weclient.util.data.bean.MaterialBean; import com.suan.weclient.util.data.bean.UserBean; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.text.EmotionHandler; import com.suan.weclient.util.text.FaceItem; import com.suan.weclient.util.text.SpanUtil; import com.suan.weclient.view.Face.FaceGridView; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; public class MassTextFragment extends BaseFragment { private DataManager mDataManager; private EditText contentEditText; private TextView textAmountTextView; private Dialog dialog; private ImageView faceShowButton; private View view; private EmotionHandler emotionHandler; private FaceGridView faceGridView; private LinearLayout faceLayout; /* total */ private TextView massLeftNumTextView; private Button sendButton; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.mass_text_layout, null); /* init data */ MainActivity mainActivity = (MainActivity) getActivity(); mDataManager = ((GlobalContext) mainActivity.getApplicationContext()).getDataManager(); initWidgets(); initWidgetsEvent(); initListener(); return view; } private void onKeyboardOpen() { faceShowButton.setSelected(false); faceLayout.setVisibility(View.GONE); } private void onKeyboardClose() { } private void initListener() { mDataManager.addLoginListener(new DataManager.LoginListener() { @Override public void onLogin(final UserBean userBean) { // TODO Auto-generated method stub setMassLeft(); } }); mDataManager.addMassDataGetListener(new DataManager.MassDataGetListener() { @Override public void onGet(UserBean userBean) { setMassLeft(); } }); } private void initWidgets() { view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { private boolean wasOpened; private final Rect r = new Rect(); @Override public void onGlobalLayout() { view.getWindowVisibleDisplayFrame(r); int heightDiff = view.getRootView().getHeight() - (r.bottom - r.top); boolean isOpen = heightDiff > 100; if (isOpen == wasOpened) { return; } wasOpened = isOpen; if (heightDiff > 100) { onKeyboardOpen(); } else { onKeyboardClose(); } } }); contentEditText = (EditText) view.findViewById(R.id.mass_text_edit_mass); contentEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { faceLayout.setVisibility(View.GONE); faceShowButton.setSelected(false); } else { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(contentEditText.getWindowToken(), 0); } } }); faceLayout = (LinearLayout) view.findViewById(R.id.mass_text_layout_face); HashMap<String, String> faceMap = SpanUtil.getFaceMap(); Set<String> keySet = faceMap.keySet(); ArrayList<FaceItem> pageFaceItems = new ArrayList<FaceItem>(); for (String nowKey : keySet) { pageFaceItems.add(new FaceItem(nowKey, faceMap.get(nowKey))); } FaceGridAdapter faceGridAdapter = new FaceGridAdapter(getActivity(), pageFaceItems, new FaceGridView.InputFaceListener() { @Override public void onInput(String key) { emotionHandler.insert(key); } }); faceGridView = (FaceGridView) view.findViewById(R.id.mass_text_face_grid_view); faceGridView.setAdapter(faceGridAdapter); emotionHandler = new EmotionHandler(contentEditText); textAmountTextView = (TextView) view.findViewById(R.id.mass_text_text_num); faceShowButton = (ImageView) view.findViewById(R.id.mass_text_button_face_show); faceShowButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (faceLayout.getVisibility() != View.VISIBLE) { faceLayout.setVisibility(View.VISIBLE); InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(contentEditText.getWindowToken(), 0); faceShowButton.setSelected(true); } else { faceLayout.setVisibility(View.GONE); faceShowButton.setSelected(false); } } }); massLeftNumTextView = (TextView) view .findViewById(R.id.mass_text_left_num); sendButton = (Button) view.findViewById(R.id.mass_button_send); setMassLeft(); sendButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (mDataManager.getUserGroup().size() == 0) { sendButton.setSelected(true); } else { if (mDataManager.getCurrentUser().getMassLeft() <= 0) { sendButton.setSelected(true); } else { sendButton.setSelected(false); dialogEnsureMass(); } } } ; }); } @Override public void onResume() { super.onResume(); faceShowButton.setSelected(false); faceLayout.setVisibility(View.GONE); } private void dialogEnsureMass() { String content = contentEditText.getText().toString(); if (content.length() == 0) { Toast.makeText(getActivity(), "请输入内容", Toast.LENGTH_SHORT).show(); return; } dialog = Util.createEnsureDialog(new OnClickListener() { @Override public void onClick(View v) { mass(); dialog.dismiss(); } }, true, getActivity(), "群发确认", "确认群发此消息", true); dialog.show(); } private void mass() { String massContent = contentEditText.getText().toString(); mDataManager.doLoadingStart("发送中", WechatManager.DIALOG_POP_CANCELABLE); MaterialBean textBean = new MaterialBean(massContent); textBean.setContent(massContent); mDataManager.getWechatManager().mass(mDataManager.getCurrentPosition(), textBean, new WechatManager.OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub contentEditText.setText(""); mDataManager.doPopEnsureDialog(false, true, "恭喜", "群发成功", new DataManager.DialogSureClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mDataManager.doDismissAllDialog(); } }); mDataManager.getCurrentUser().setMassLeft(mDataManager.getCurrentUser().getMassLeft() - 1); setMassLeft(); } }); } public void setMassLeft() { String typeString = ""; switch (mDataManager.getCurrentUser().getUserType()) { case UserBean.USER_TYPE_SUBSTRICTION: typeString = "今天"; break; case UserBean.USER_TYPE_SERVICE: typeString = "本月"; break; } if (mDataManager.getUserGroup().size() == 0) { massLeftNumTextView.setText("你" + typeString + "还能群发 " + 0 + " 条消息"); } else { massLeftNumTextView.setText("你" + typeString + "还能群发 " + mDataManager.getCurrentUser().getMassLeft() + " 条消息"); } if (mDataManager.getUserGroup().size() == 0) { sendButton.setSelected(true); } else { if (mDataManager.getCurrentUser().getMassLeft() <= 0) { sendButton.setSelected(true); } else { sendButton.setSelected(false); } } } private void initWidgetsEvent() { textAmountTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (contentEditText.getText().length() > 0) { popClearEnsure(); } else { } } }); contentEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub textAmountTextView.setTextColor(Color.rgb(0, 0, 0)); textAmountTextView.setText(s.length() + " x"); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); } private void popClearEnsure() { dialog = Util.createEnsureDialog(new OnClickListener() { @Override public void onClick(View v) { contentEditText.setText(""); dialog.cancel(); } }, true, getActivity(), "删除内容", "删除当前编辑的内容?", true); dialog.show(); } public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } }