/** * $id$ * Copyright 2011-2012 Renren Inc. All rights reserved. */ package com.renren.api.connect.android.status; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.renren.api.connect.android.AsyncRenren; import com.renren.api.connect.android.AuthorizationHelper; import com.renren.api.connect.android.R; import com.renren.api.connect.android.Util; import com.renren.api.connect.android.common.AbstractRenrenRequestActivity; import com.renren.api.connect.android.common.AbstractRequestListener; import com.renren.api.connect.android.exception.RenrenAuthError; import com.renren.api.connect.android.exception.RenrenError; import com.renren.api.connect.android.view.ProfileNameView; import com.renren.api.connect.android.view.ProfilePhotoView; import com.renren.api.connect.android.view.RenrenAuthListener; /** * 发布新鲜事的窗口 * * 使用时需要在AndroidManifest.xml中声明此Activity, * 并在使用前,将renren对象以Parcel方式传递给该activity,例如: * <p>Intent intent = new Intent(activityA, StatusPubActivity.class); * <p>Bundle bundle = new Bundle(); * <p>bundle.putParcelable(Renren.RENREN_LABEL, renren); * <p>... * <p>intent.putExtras(bundle); * <p>activityA.startActivity(intent); * 若需传入Status对象进行编辑和发送,则需要使用类似上述方式将Status对象以Parcel方式 * 传递给该activity * * @author Shaofeng Wang (shaofeng.wang@renren-inc.com) */ public class StatusPubActivity extends AbstractRenrenRequestActivity { private static final int PROGRESS_DIALOG = 1; /** * 取消按钮 */ private Button cancelButton; /** * 发布按钮 */ private Button publishButton; /** * 字数统计 */ private TextView chCounterText; /** * 状态编辑区域 */ private EditText statusEdit; /** * 待编辑和发布的状态 */ private StatusSetRequestParam status; private ProgressDialog progressDialog; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.renren_sdk_status_pub); handler = new Handler(getMainLooper()); initStatus(); if (renren == null) { showToast(this.getString(R.string.renren_sdk_object_init_error)); return; } AuthorizationHelper.check(renren, this, StatusHelper.PUBLISH_STATUS_PERMISSIONS, new RenrenAuthListener() { @Override public void onComplete(Bundle values) { initComponents(); } @Override public void onRenrenAuthError( RenrenAuthError renrenAuthError) { showToast(StatusPubActivity.this .getString(R.string.renren_sdk_status_publish_failed)); StatusPubActivity.this.finish(); } @Override public void onCancelLogin() { StatusPubActivity.this.finish(); } @Override public void onCancelAuth(Bundle values) { StatusPubActivity.this.finish(); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //响应返回键 if(keyCode == KeyEvent.KEYCODE_BACK) { finish(); } return super.onKeyDown(keyCode, event); } @Override protected Dialog onCreateDialog(int id) { switch(id) { case PROGRESS_DIALOG: progressDialog = new ProgressDialog(this); progressDialog.setMessage(this.getString(R.string.renren_sdk_publish_status_hint)); } return super.onCreateDialog(id); } /** * 初始化状态信息 */ private void initStatus() { Intent intent = getIntent(); if (intent.hasExtra(StatusSetRequestParam.STATUS_LABEL)) { status = intent.getParcelableExtra(StatusSetRequestParam.STATUS_LABEL); } else { Bundle bundle = intent.getExtras(); if (bundle != null && bundle.containsKey(StatusSetRequestParam.STATUS_LABEL)) { status = bundle.getParcelable(StatusSetRequestParam.STATUS_LABEL); } else { status = new StatusSetRequestParam(""); } } } /** * 初始化界面各元素及其响应事件 */ private void initComponents() { ProfilePhotoView profilePhotoView = (ProfilePhotoView) findViewById(R.id.renren_sdk_profile_photo); profilePhotoView.setUid(renren.getCurrentUid()); ProfileNameView profileNameView = (ProfileNameView) findViewById(R.id.renren_sdk_profile_name); profileNameView.setUid(renren.getCurrentUid(), renren); chCounterText = (TextView)findViewById(R.id.renren_sdk_status_ch_counter); statusEdit = (EditText) findViewById(R.id.renren_sdk_status_edit_text); statusEdit.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { status.setStatus(statusEdit.getText().toString()); chCounterText.setText(status.getStatus().length() + "/" + StatusSetRequestParam.MAX_LENGTH); } }); if(status != null) { statusEdit.setText(status.getStatus()); chCounterText.setText(status.getStatus().length() + "/" + StatusSetRequestParam.MAX_LENGTH); } cancelButton = (Button)findViewById(R.id.renren_sdk_status_cancel); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); publishButton = (Button)findViewById(R.id.renren_sdk_status_publish); publishButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(status == null || status.getStatus() == null || status.getStatus().trim().length() == 0) { showToast(StatusPubActivity.this.getString(R.string.renren_sdk_publish_null_status_alert)); } else { publish(); } } }); } /** * 发布状态 */ private void publish() { showDialog(PROGRESS_DIALOG); AsyncRenren aRr = new AsyncRenren(renren); //若超出长度则截短到240字 if(status.getStatus()!= null && status.getStatus().length() > StatusSetRequestParam.MAX_LENGTH) { status = status.trim(); } aRr.publishStatus(status, new AbstractRequestListener<StatusSetResponseBean>() { @Override public void onRenrenError(RenrenError renrenError) { if(renrenError != null) { Util.logger(renrenError.getMessage()); } else { Util.logger("Unknown Error in status publish process."); } showToast(StatusPubActivity.this .getString(R.string.renren_sdk_status_publish_failed)); StatusPubActivity.this.finish(); } @Override public void onFault(Throwable fault) { if(fault != null) { Log.i("DEBUG", "onFault"); Util.logger(fault.getMessage()); } else { Util.logger("Unknown fault in status publish process."); } showToast(StatusPubActivity.this .getString(R.string.renren_sdk_status_publish_failed)); StatusPubActivity.this.finish(); } @Override public void onComplete(StatusSetResponseBean bean) { showToast(StatusPubActivity.this .getString(R.string.renren_sdk_status_publish_success)); StatusPubActivity.this.finish(); } }, true); } private void showToast(final String message) { handler.post(new Runnable() { @Override public void run() { Toast.makeText(StatusPubActivity.this, message, Toast.LENGTH_SHORT).show(); } }); } @Override protected void onStop() { removeDialog(PROGRESS_DIALOG); super.onStop(); } }