/**
* Copyright (C) 2016 Hyphenate Inc. All rights reserved.
*
* 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.fanxin.huangfangyi.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fanxin.huangfangyi.DemoHelper;
import com.fanxin.huangfangyi.db.UserDao;
import com.fanxin.huangfangyi.domain.RobotUser;
import com.fanxin.huangfangyi.main.activity.ChatActivity;
import com.hyphenate.EMValueCallBack;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMContact;
import com.fanxin.huangfangyi.R;
import com.hyphenate.exceptions.HyphenateException;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class RobotsActivity extends BaseActivity {
public static final String TAG = RobotsActivity.class.getSimpleName();
private ListView mListView;
private List<RobotUser> robotList = new ArrayList<RobotUser>();
private RobotAdapter adapter;
private InputMethodManager inputMethodManager;
private View progressBar;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.em_fragment_robots);
inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mListView = (ListView) findViewById(R.id.list);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);
swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light,
android.R.color.holo_orange_light, android.R.color.holo_red_light);
progressBar = findViewById(R.id.progress_bar);
swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
getRobotNamesFromServer();
}
});
Map<String, RobotUser> robotMap = DemoHelper.getInstance().getRobotList();
if (robotMap != null) {
robotList.addAll(robotMap.values());
} else {
progressBar.setVisibility(View.VISIBLE);
getRobotNamesFromServer();
}
adapter = new RobotAdapter(this, 1, robotList);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
RobotUser user = (RobotUser) parent.getItemAtPosition(position);
Intent intent = new Intent();
intent.setClass(RobotsActivity.this, ChatActivity.class);
intent.putExtra("userId", user.getUsername());
startActivity(intent);
}
});
mListView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (getWindow().getAttributes().softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) {
if (getCurrentFocus() != null)
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
}
private void getRobotNamesFromServer() {
asyncGetRobotNamesFromServer(new EMValueCallBack<List<EMContact>>() {
@Override
public void onSuccess(final List<EMContact> value) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
Map<String, RobotUser> mMap = new HashMap<String, RobotUser>();
for (EMContact item : value) {
RobotUser user = new RobotUser(item.getUsername());
user.setNick(item.getNick());
user.setInitialLetter("#");
mMap.put(item.getUsername(), user);
}
robotList.clear();
robotList.addAll(mMap.values());
// save it in cache
DemoHelper.getInstance().setRobotList(mMap);
// save it in database
UserDao dao = new UserDao(RobotsActivity.this);
dao.saveRobotUser(robotList);
adapter.notifyDataSetChanged();
}
});
}
@Override
public void onError(int error, String errorMsg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(false);
progressBar.setVisibility(View.GONE);
}
});
}
});
}
private void asyncGetRobotNamesFromServer(final EMValueCallBack<List<EMContact>> callback) {
new Thread(new Runnable() {
@Override
public void run() {
try {
List<EMContact> mList = EMClient.getInstance().getRobotsFromServer();
callback.onSuccess(mList);
} catch (HyphenateException e) {
e.printStackTrace();
callback.onError(e.getErrorCode(), e.toString());
}
}
}).start();
}
class RobotAdapter extends ArrayAdapter<RobotUser> {
private LayoutInflater inflater;
public RobotAdapter(Context context, int res, List<RobotUser> robots) {
super(context, res, robots);
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.em_row_robots, null);
}
((TextView) convertView.findViewById(R.id.name)).setText(getItem(position).getNick());
return convertView;
}
}
}