package com.sogouchat.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.sogouchat.R;
import com.sogouchat.SogouChatApp;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.style.ImageSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.animation.TranslateAnimation;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.AbsListView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.sogouchat.bean.TelNode;
import com.sogouchat.widget.KeyboardLayout;
import com.sogouchat.widget.KeyboardLayout.onKybdsChangeListener;
import com.sogouchat.widget.ContactEditText;
public class CreateActivity extends Activity implements OnCheckedChangeListener, OnItemClickListener, TextWatcher {
private static final String TAG = "NewSmsActivity";
private ImageButton mBtnBack;
private ImageButton mBtnSelect;
private ImageButton mBtnSend;
private View mPageTitle;
private View mPageBottom;
private ListView mListView;
private boolean mGridVisible;
private GridView mGridView;
private TextView mGridName;;
private TextView mListName;
private EditContactListAdapter mAdapter;
private SogouChatApp mApp;
private ContactEditText mContactEdit;
private EditText mContentEdit;
private boolean mToSearch;
private boolean mManuChange;
public ArrayList<TelNode> mSelectList;
private ImageView mQuickSearchBar;
private ImageView mQuickSearchThumb;
private ImageView mTipIcon;
private LinearLayout mQuickTip;
private TextView mTipText;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mApp = (SogouChatApp)getApplication();
mApp.mCreate = this;
mToSearch = false;
mGridVisible = true;
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_create);
mContactEdit = (ContactEditText)findViewById(R.id.edit_contact);
mContentEdit = (EditText)findViewById(R.id.edit_content);
mBtnBack = (ImageButton) findViewById(R.id.btn_back);
mBtnSelect = (ImageButton) findViewById(R.id.btn_select);
mBtnSend = (ImageButton) findViewById(R.id.btn_send);
mPageTitle = findViewById(R.id.create_page_title);
mPageBottom = findViewById(R.id.create_page_bottom);
mListName = (TextView) findViewById(R.id.create_list_name);
mGridName = (TextView) findViewById(R.id.create_grid_name);
mApp = (SogouChatApp)getApplication();
mSelectList = mApp.mSelectList;
mContactEdit.addTextChangedListener(this );
setupRecentGrid();
setupAllList();
setupAlphaView();
mGridName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mGridVisible = !mGridVisible;
if (mGridVisible) mGridView.setVisibility(View.VISIBLE);
else mGridView.setVisibility(View.GONE);
}
});
mBtnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(CreateActivity.this, SlidingActivity.class);
CreateActivity.this.startActivity(intent);
}
});
mBtnSelect.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent = new Intent();
// intent.setClass(CreateActivity.this, ContactSelectActivity.class);
// CreateActivity.this.startActivity(intent);
// setupSelectView(mToEdit);
}
});
KeyboardLayout mainView = (KeyboardLayout) findViewById(R.id.keyboardLayout1);
mainView.setOnkbdStateListener(new onKybdsChangeListener() {
public void onKeyBoardStateChange(int state) {
switch (state) {
case KeyboardLayout.KEYBOARD_STATE_HIDE:
if (mContactEdit.isFocused()) {
// &&!mPageBottom.isShown() && mToEdit ){
mPageBottom.setVisibility(View.VISIBLE);
}
Toast.makeText(getApplicationContext(), "软键盘隐藏",
Toast.LENGTH_SHORT).show();
break;
case KeyboardLayout.KEYBOARD_STATE_SHOW:
if (mContactEdit.isFocused()) {
mPageBottom.setVisibility(View.INVISIBLE);
}
Toast.makeText(getApplicationContext(), "软键盘弹起",
Toast.LENGTH_SHORT).show();
break;
}
}
});
mBtnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(CreateActivity.this, SlidingActivity.class);
CreateActivity.this.startActivity(intent);
}
});
}
public void onResume() {
super.onResume();
Bundle bd = this.getIntent().getExtras();
if (bd != null){
String transfTxt = bd.getString("content");
if (transfTxt.length()>0) {
mContentEdit.setText(transfTxt);
}
}
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e("FHT", "onConfigurationChanged:");
}
protected void setupSearchView(boolean toSearch) {
if (toSearch){
//open the all mode
mListName.setText("匹配联系人");
// remove title bar
mPageTitle.setVisibility(View.GONE);
mPageBottom.setVisibility(View.GONE);
mListView.setVisibility(View.VISIBLE);
mGridView.setVisibility(View.GONE);
mGridName.setVisibility(View.GONE);
}
else{
//open the recent mode
mListName.setText("全部联系人");
// add title bar
mPageTitle.setVisibility(View.VISIBLE);
mPageBottom.setVisibility(View.VISIBLE);
mListView.setVisibility(View.VISIBLE);
mGridView.setVisibility(View.GONE);
mGridName.setVisibility(View.VISIBLE);
mGridVisible = false;
}
mToSearch = !mToSearch;
}
private void setupAlphaView() {
// TODO Auto-generated method stub
mQuickSearchBar = (ImageView) findViewById(R.id.quick_search_bar);
mQuickSearchThumb = (ImageView) findViewById(R.id.quick_search_thumb);
mQuickTip = (LinearLayout) findViewById(R.id.toast_container);
mTipText = (TextView) findViewById(R.id.toast_text);
mTipIcon = (ImageView) findViewById(R.id.toast_image);
mQuickSearchBar.setVisibility(View.VISIBLE);
mQuickSearchThumb.setVisibility(View.VISIBLE);
mQuickTip.setVisibility(View.VISIBLE);
mTipText.setVisibility(View.INVISIBLE);
mTipIcon.setVisibility(View.INVISIBLE);
mQuickSearchBar.setClickable(true);
mQuickSearchBar.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_MOVE) {
TranslateAnimation animation = new TranslateAnimation(0, 0,
event.getY(), event.getY());
animation.setFillAfter(false);
animation.setDuration(1);
animation.setFillBefore(false);
mQuickSearchThumb.startAnimation(animation);
int nTop = mQuickSearchBar.getTop();
int nBottom = mQuickSearchBar.getBottom();
float nBtw = (nBottom - nTop) / 30f;
int nIndex = (int) ((event.getY() - nTop + nBtw / 2) / nBtw);
// ViewGroup.LayoutParams para = mQuickSearchThumb.getLayoutParams();
// para.height = 300;
// para.width = 300;
// mQuickSearchThumb.setLayoutParams(para);
// mQuickSearchThumb.setPadding( mQuickSearchThumb.getPaddingLeft(), (int) (mQuickSearchThumb.getPaddingTop()+event.getY()),
// mQuickSearchThumb.getPaddingRight(), mQuickSearchThumb.getPaddingBottom());
//
// mQuickSearchThumb.setVisibility(View.VISIBLE);
mQuickTip.setVisibility(View.VISIBLE);
nIndex--;
String strText = "";
if (0 < nIndex && nIndex < 27) {
// a-z
strText = String.valueOf((char) ('A'+ nIndex) );
int alphaIndex1 = mAdapter.getAlphaIndex(nIndex);
mListView.setSelection(alphaIndex1);
mTipText.setText(strText);
mTipIcon.setVisibility(View.GONE);
mTipText.setVisibility(View.VISIBLE);
} else if (nIndex == 0) {
mListView.setSelection(0);
mTipIcon.setVisibility(View.VISIBLE);
mTipText.setVisibility(View.GONE);
// search
} else if (nIndex == 27) {
// #
strText = "#";
int alphaIndex = mAdapter.getAlphaIndex(26);
mListView.setSelection(alphaIndex);
// strText += (""+event.getY());
mTipText.setText(strText);
mTipIcon.setVisibility(View.GONE);
mTipText.setVisibility(View.VISIBLE);
}
}
if (event.getAction() == MotionEvent.ACTION_CANCEL
|| event.getAction() == MotionEvent.ACTION_UP) {
mQuickSearchThumb.setVisibility(View.GONE);
mQuickTip.setVisibility(View.GONE);
}
return false;
}
});
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
Log.i("CreateActivity", "Item clicked: " + id);
TelNode tel = mAdapter.getData().get(position);
CheckBox check = (CheckBox) view.findViewById(R.id.checkBox_contact);
mManuChange = true;
if (!mSelectList.contains(tel)) {
mContactEdit.insertTel( tel );
if (check!= null) check.setChecked(true);
}
else{
if (check!= null) check.setChecked(false);
mContactEdit.removeTel( tel );
}
mManuChange = false;
}
private void setupRecentGrid(){
mGridView = (GridView) findViewById(R.id.edit_recent_grid);
// mGridView.setVisibility(View.VISIBLE);
//TODO Most List
mApp.setupOftenContactsData();
List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();
for (int i = 0; i < mApp.mOftenContacts.size(); i++) {
Map<String, Object> item = new HashMap<String, Object>();
item.put("name", mApp.mOftenContacts.get(i).mName);
items.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.item_recent_grid, new String[]{"name"}, new int[]{R.id.recent_name});
mGridView.setAdapter(adapter);
mGridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
TelNode tel = mApp.mOftenContacts.get(position);
mManuChange = true;
if (!mSelectList.contains(tel)) {
mContactEdit.insertTel( tel );
} else {
mContactEdit.removeTel( tel );
}
mManuChange = false;
}
});
}
private void setupAllList(){
mListView = (ListView) findViewById(R.id.edit_contact_list);
mAdapter = new EditContactListAdapter(this, mApp);
mAdapter.setupList();
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
mListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
break;
case OnScrollListener.SCROLL_STATE_FLING:
break;
}
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromInputMethod(mContactEdit.getWindowToken(), 0);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) { //监控/拦截/屏蔽返回键
if (mToSearch){
setupSearchView(false);
mToSearch = false;
return true;
}
} else if(keyCode == KeyEvent.KEYCODE_MENU) {
//监控/拦截菜单键
} else if(keyCode == KeyEvent.KEYCODE_HOME) {
//由于Home键为系统键,此处不能捕获,需要重写onAttachedToWindow()
}
return super.onKeyDown(keyCode, event);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
String content = mContactEdit.getText().toString();
if (mManuChange) return;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
String content = mContactEdit.getText().toString();
if (mManuChange) return;
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if (mManuChange)
return;
String key = mContactEdit.getKeyWord();
if (key.length() > 0) {
mManuChange = true;
mContactEdit.moveKey();
mManuChange = false;
}
filterList();
}
private void filterList(){
String key = mContactEdit.getKeyWord();
if (key.length()>0){
//open the search mode
mToSearch = true;
setupSearchView(true);
mAdapter.setupFilter(key);
} else {
mToSearch = false;
//open the recent mode
setupSearchView(false);
mAdapter.setupList();
mAdapter.notifyDataSetChanged();
}
}
}