package cn.rongcloud.im.ui.activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import cn.rongcloud.im.SealUserInfoManager;
import cn.rongcloud.im.ui.widget.LoadingDialog;
import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;
/**
* Created by Bob on 15/11/3.
* 会话列表,需要做 2 件事
* 1,push 重连,收到 push 消息的时候,做一下 connect 操作
*/
public class ConversationListActivity extends BaseActivity {
private static final String TAG = ConversationListActivity.class.getSimpleName();
private LoadingDialog mDialog;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sp = getSharedPreferences("config", MODE_PRIVATE);
mDialog = new LoadingDialog(this);
Intent intent = getIntent();
//push
if (intent.getData().getScheme().equals("rong") && intent.getData().getQueryParameter("push") != null) {
//通过intent.getData().getQueryParameter("push") 为true,判断是否是push消息
if (intent.getData().getQueryParameter("push").equals("true")) {
enterActivity();
}
} else {//通知过来
//程序切到后台,收到消息后点击进入,会执行这里
if (RongIM.getInstance().getCurrentConnectionStatus().equals(RongIMClient.ConnectionStatusListener.ConnectionStatus.DISCONNECTED)) {
enterActivity();
} else {
startActivity(new Intent(ConversationListActivity.this, MainActivity.class));
finish();
}
}
}
/**
* 收到 push 消息后,选择进入哪个 Activity
* 如果程序缓存未被清理,进入 MainActivity
* 程序缓存被清理,进入 LoginActivity,重新获取token
* <p/>
* 作用:由于在 manifest 中 intent-filter 是配置在 ConversationListActivity 下面,所以收到消息后点击notifacition 会跳转到 DemoActivity。
* 以跳到 MainActivity 为例:
* 在 ConversationListActivity 收到消息后,选择进入 MainActivity,这样就把 MainActivity 激活了,当你读完收到的消息点击 返回键 时,程序会退到
* MainActivity 页面,而不是直接退回到 桌面。
*/
private void enterActivity() {
String token = sp.getString("loginToken", "");
if (token.equals("default")) {
startActivity(new Intent(ConversationListActivity.this, LoginActivity.class));
finish();
} else {
if (mDialog != null && !mDialog.isShowing()) {
mDialog.show();
}
reconnect(token);
}
}
private void reconnect(String token) {
RongIM.connect(token, new RongIMClient.ConnectCallback() {
@Override
public void onTokenIncorrect() {
Log.e(TAG, "---onTokenIncorrect--");
}
@Override
public void onSuccess(String s) {
Log.i(TAG, "---onSuccess--" + s);
if (mDialog != null)
mDialog.dismiss();
startActivity(new Intent(ConversationListActivity.this, MainActivity.class));
finish();
}
@Override
public void onError(RongIMClient.ErrorCode e) {
Log.e(TAG, "---onError--" + e);
}
});
}
}