package com.netease.nim.uikit.team.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.netease.nim.uikit.R;
import com.netease.nim.uikit.common.activity.UI;
import com.netease.nim.uikit.common.util.string.StringTextWatcher;
import com.netease.nim.uikit.model.ToolBarOptions;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.ResponseCode;
import com.netease.nimlib.sdk.team.TeamService;
import com.netease.nimlib.sdk.team.constant.TeamFieldEnum;
/**
* 群属性
* Created by hzxuwen on 2015/4/10.
*/
public class TeamPropertySettingActivity extends UI implements View.OnClickListener {
private static final String EXTRA_TID = "EXTRA_TID";
public static final String EXTRA_DATA = "EXTRA_DATA";
private static final String EXTRA_FIELD = "EXTRA_FIELD";
// view
private EditText editText;
// data
private String teamId;
private TeamFieldEnum filed;
private String initialValue;
/**
* 修改群某一个属性公用界面
* @param activity
* @param teamId
* @param field
* @param initialValue
* @param requestCode
*/
public static void start(Activity activity, String teamId, TeamFieldEnum field, String initialValue, int requestCode) {
Intent intent = new Intent();
intent.setClass(activity, TeamPropertySettingActivity.class);
intent.putExtra(EXTRA_TID, teamId);
intent.putExtra(EXTRA_DATA, initialValue);
intent.putExtra(EXTRA_FIELD, field);
activity.startActivityForResult(intent, requestCode);
}
/**
* 修改群某一个属性公用界面
* @param context
* @param teamId
* @param field
* @param initialValue
*/
public static void start(Context context, String teamId, TeamFieldEnum field, String initialValue) {
Intent intent = new Intent();
intent.setClass(context, TeamPropertySettingActivity.class);
intent.putExtra(EXTRA_TID, teamId);
intent.putExtra(EXTRA_DATA, initialValue);
intent.putExtra(EXTRA_FIELD, field);
context.startActivity(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nim_team_name_activity);
ToolBarOptions options = new ToolBarOptions();
setToolBar(R.id.toolbar, options);
findViews();
parseIntent();
TextView toolbarView = findView(R.id.action_bar_right_clickable_textview);
toolbarView.setText(R.string.save);
toolbarView.setOnClickListener(this);
}
private void parseIntent() {
teamId = getIntent().getStringExtra(EXTRA_TID);
filed = (TeamFieldEnum) getIntent().getSerializableExtra(EXTRA_FIELD);
initialValue = getIntent().getStringExtra(EXTRA_DATA);
initData();
}
private void initData() {
int limit = 0;
switch (filed) {
case Name:
setTitle(R.string.team_settings_name);
editText.setHint(R.string.team_settings_set_name);
limit = 64;
break;
case Introduce:
setTitle(R.string.team_introduce);
editText.setHint(R.string.team_introduce_hint);
limit = 512;
break;
case Extension:
setTitle(R.string.team_extension);
editText.setHint(R.string.team_extension_hint);
limit = 65535;
break;
}
if (!TextUtils.isEmpty(initialValue)) {
editText.setText(initialValue);
editText.setSelection(initialValue.length());
}
editText.addTextChangedListener(new StringTextWatcher(limit, editText));
}
private void findViews() {
editText = (EditText) findViewById(R.id.discussion_name);
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
return keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP;
}
});
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE
|| (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
complete();
return true;
} else {
return false;
}
}
});
showKeyboardDelayed(editText);
LinearLayout backgroundLayout = (LinearLayout) findViewById(R.id.background);
backgroundLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showKeyboard(false);
}
});
}
@Override
public void onClick(View v) {
int i = v.getId();
if (i == R.id.action_bar_right_clickable_textview) {
showKeyboard(false);
complete();
} else {
}
}
/**
* 点击保存
*/
private void complete() {
if (filed == TeamFieldEnum.Name) {
if (TextUtils.isEmpty(editText.getText().toString())) {
Toast.makeText(this, R.string.not_allow_empty, Toast.LENGTH_SHORT).show();
} else {
char[] s = editText.getText().toString().toCharArray();
int i;
for (i = 0; i < s.length; i++) {
if (String.valueOf(s[i]).equals(" ")) {
Toast.makeText(this, R.string.now_allow_space, Toast.LENGTH_SHORT).show();
break;
}
}
if (i == s.length) {
saveTeamProperty();
}
}
} else {
if (TextUtils.equals(editText.getText().toString(), initialValue)) {
showKeyboard(false);
finish();
} else if (TextUtils.isEmpty(teamId)) {
saved();
} else {
saveTeamProperty();
}
}
}
private void saved() {
Intent intent = new Intent();
intent.putExtra(EXTRA_DATA, editText.getText().toString());
setResult(Activity.RESULT_OK, intent);
showKeyboard(false);
finish();
}
/**
* 保存设置
*/
private void saveTeamProperty() {
if(teamId == null) { // 讨论组创建时,设置群名称
Intent intent = new Intent();
intent.putExtra(EXTRA_DATA, editText.getText().toString());
setResult(Activity.RESULT_OK, intent);
finish();
} else {
NIMClient.getService(TeamService.class).updateTeam(teamId, filed, editText.getText().toString()).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
Toast.makeText(TeamPropertySettingActivity.this, R.string.update_success, Toast.LENGTH_SHORT).show();
saved();
}
@Override
public void onFailed(int code) {
if (code == ResponseCode.RES_TEAM_ENACCESS) {
Toast.makeText(TeamPropertySettingActivity.this, R.string.no_permission, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(TeamPropertySettingActivity.this, String.format(getString(R.string.update_failed), code),
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onException(Throwable exception) {
}
});
}
}
@Override
public void onBackPressed() {
showKeyboard(false);
super.onBackPressed();
}
}