package org.qii.weiciyuan.ui.send;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.AccountBean;
import org.qii.weiciyuan.bean.GeoBean;
import org.qii.weiciyuan.bean.android.MusicInfo;
import org.qii.weiciyuan.dao.location.BaiduGeoCoderDao;
import org.qii.weiciyuan.dao.location.GoogleGeoCoderDao;
import org.qii.weiciyuan.othercomponent.sendweiboservice.SendWeiboService;
import org.qii.weiciyuan.support.database.DraftDBManager;
import org.qii.weiciyuan.support.database.draftbean.StatusDraftBean;
import org.qii.weiciyuan.support.error.WeiboException;
import org.qii.weiciyuan.support.file.FileLocationMethod;
import org.qii.weiciyuan.support.imageutility.ImageEditUtility;
import org.qii.weiciyuan.support.imageutility.ImageUtility;
import org.qii.weiciyuan.support.lib.CheatSheet;
import org.qii.weiciyuan.support.lib.KeyboardControlEditText;
import org.qii.weiciyuan.support.lib.MyAsyncTask;
import org.qii.weiciyuan.support.smileypicker.SmileyPicker;
import org.qii.weiciyuan.support.utils.GlobalContext;
import org.qii.weiciyuan.support.utils.SmileyPickerUtility;
import org.qii.weiciyuan.support.utils.Utility;
import org.qii.weiciyuan.support.utils.ViewUtility;
import org.qii.weiciyuan.ui.interfaces.AbstractAppActivity;
import org.qii.weiciyuan.ui.login.AccountActivity;
import org.qii.weiciyuan.ui.main.MainTimeLineActivity;
import org.qii.weiciyuan.ui.maintimeline.SaveDraftDialog;
import org.qii.weiciyuan.ui.search.AtUserActivity;
import android.app.ActionBar;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
/**
* User: qii
* Date: 12-7-29
*/
public class WriteWeiboActivity extends AbstractAppActivity
implements DialogInterface.OnClickListener,
ClearContentDialog.IClear, SaveDraftDialog.IDraft {
private static final int CAMERA_RESULT = 0;
private static final int PIC_RESULT = 1;
private static final int PIC_RESULT_KK = 2;
public static final int AT_USER = 3;
public static final String ACTION_DRAFT = "org.qii.weiciyuan.DRAFT";
public static final String ACTION_SEND_FAILED = "org.qii.weiciyuan.SEND_FAILED";
private AccountBean accountBean;
protected String token = "";
private StatusDraftBean statusDraftBean;
private String picPath = "";
private Uri imageFileUri = null;
private GeoBean geoBean;
private String location;
private ImageView haveGPS = null;
private KeyboardControlEditText content = null;
private ImageView preview = null;
private SmileyPicker smiley = null;
private RelativeLayout container = null;
private String2PicTask string2PicTask;
private GetGoogleLocationInfo locationTask;
public static Intent newIntent(AccountBean accountBean) {
Intent intent = new Intent(GlobalContext.getInstance(), WriteWeiboActivity.class);
intent.putExtra("token", accountBean.getAccess_token());
intent.putExtra("account", accountBean);
return intent;
}
public static Intent startBecauseSendFailed(Context context,
AccountBean accountBean,
String content,
String picPath,
GeoBean geoBean,
StatusDraftBean statusDraftBean,
String failedReason) {
Intent intent = new Intent(context, WriteWeiboActivity.class);
intent.setAction(WriteWeiboActivity.ACTION_SEND_FAILED);
intent.putExtra("account", accountBean);
intent.putExtra("content", content);
intent.putExtra("failedReason", failedReason);
intent.putExtra("picPath", picPath);
intent.putExtra("geoBean", geoBean);
intent.putExtra("statusDraftBean", statusDraftBean);
return intent;
}
private void handleFailedOperation(Intent intent) {
accountBean = (AccountBean) intent.getParcelableExtra("account");
token = accountBean.getAccess_token();
getActionBar().setSubtitle(accountBean.getUsernick());
String stringExtra = intent.getStringExtra("content");
content.setText(stringExtra);
String failedReason = intent.getStringExtra("failedReason");
content.setError(failedReason);
picPath = intent.getStringExtra("picPath");
if (!TextUtils.isEmpty(picPath)) {
enablePicture();
}
geoBean = (GeoBean) intent.getSerializableExtra("geoBean");
if (geoBean != null) {
enableGeo();
}
statusDraftBean = (StatusDraftBean) intent.getParcelableExtra("statusDraftBean");
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
Uri lastUri = Utility.getLatestCameraPicture(WriteWeiboActivity.this);
if (lastUri != null) {
imageFileUri = lastUri;
createTmpUploadFileFromUri();
return;
}
Toast.makeText(WriteWeiboActivity.this,
getString(R.string.dont_have_the_last_picture), Toast.LENGTH_SHORT).show();
break;
case 1:
imageFileUri = getContentResolver()
.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new ContentValues());
if (imageFileUri != null) {
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
if (Utility.isIntentSafe(WriteWeiboActivity.this, i)) {
startActivityForResult(i, CAMERA_RESULT);
} else {
Toast.makeText(WriteWeiboActivity.this,
getString(R.string.dont_have_camera_app), Toast.LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(WriteWeiboActivity.this, getString(R.string.cant_insert_album),
Toast.LENGTH_SHORT).show();
}
break;
case 2:
if (Utility.isKK()) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
/**
* not all 4.4 version devices have system app which accept Intent.ACTION_OPEN_DOCUMENT
*/
if (Utility.isIntentSafe(WriteWeiboActivity.this, intent)) {
startActivityForResult(intent, PIC_RESULT_KK);
} else {
Intent choosePictureIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(choosePictureIntent, PIC_RESULT);
}
} else {
Intent choosePictureIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(choosePictureIntent, PIC_RESULT);
}
break;
}
}
private void createTmpUploadFileFromUri() {
ConvertUriToCachePathAsyncTaskFragment fragment = ConvertUriToCachePathAsyncTaskFragment
.newInstance(imageFileUri);
getSupportFragmentManager().beginTransaction().add(fragment, "").commit();
}
public void picConvertSucceedKK(String path) {
if (TextUtils.isEmpty(content.getText().toString())) {
content.setText(getString(R.string.share_pic));
content.setSelection(content.getText().toString().length());
}
picPath = path;
enablePicture();
}
private void enablePicture() {
Bitmap bitmap = ImageUtility.getWriteWeiboPictureThumblr(picPath);
if (bitmap != null) {
((ImageButton) findViewById(R.id.menu_add_pic)).setImageBitmap(bitmap);
}
bitmap = ImageUtility.decodeBitmapFromSDCard(picPath, Utility.getScreenWidth(),
Utility.getScreenHeight());
if (bitmap != null) {
preview.setVisibility(View.VISIBLE);
preview.setImageBitmap(bitmap);
}
}
private void disablePicture() {
if (picPath != null) {
new File(picPath).delete();
}
if (content.getText().toString().equals(getString(R.string.share_pic))) {
content.setText("");
}
((ImageButton) findViewById(R.id.menu_add_pic))
.setImageDrawable(getResources().getDrawable(R.drawable.camera_light));
preview.setVisibility(View.INVISIBLE);
preview.setImageBitmap(null);
}
private boolean picture() {
int level = ((ImageButton) findViewById(R.id.menu_add_pic)).getDrawable().getLevel();
return level == 1;
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CAMERA_RESULT:
createTmpUploadFileFromUri();
break;
case PIC_RESULT:
case PIC_RESULT_KK:
imageFileUri = intent.getData();
createTmpUploadFileFromUri();
break;
case AT_USER:
String name = intent.getStringExtra("name");
String ori = content.getText().toString();
int index = content.getSelectionStart();
StringBuilder stringBuilder = new StringBuilder(ori);
stringBuilder.insert(index, name);
content.setText(stringBuilder.toString());
content.setSelection(index + name.length());
break;
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Utility.cancelTasks(string2PicTask, locationTask);
}
protected boolean canShowSaveDraftDialog() {
if (statusDraftBean == null) {
return true;
} else if (!statusDraftBean.getContent().equals(content.getText().toString())) {
return true;
}
return false;
}
@Override
public void onBackPressed() {
if (smiley.isShown()) {
hideSmileyPicker(false);
} else if (!TextUtils.isEmpty(content.getText().toString()) && canShowSaveDraftDialog()) {
SaveDraftDialog dialog = new SaveDraftDialog();
dialog.show(getFragmentManager(), "");
} else {
super.onBackPressed();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("picPath", picPath);
outState.putParcelable("geoBean", geoBean);
outState.putString("location", location);
outState.putParcelable("imageFileUri", imageFileUri);
outState.putParcelable("statusDraftBean", statusDraftBean);
outState.putParcelable("accountBean", accountBean);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null) {
picPath = savedInstanceState.getString("picPath");
if (!TextUtils.isEmpty(picPath)) {
enablePicture();
}
geoBean = (GeoBean) savedInstanceState.getParcelable("geoBean");
location = savedInstanceState.getString("location");
if (geoBean != null && !TextUtils.isEmpty(location)) {
enableGeo();
} else {
disableGeo();
}
imageFileUri = savedInstanceState.getParcelable("imageFileUri");
statusDraftBean = (StatusDraftBean) savedInstanceState.getParcelable("statusDraftBean");
accountBean = (AccountBean) savedInstanceState.getParcelable("accountBean");
token = accountBean.getAccess_token();
getActionBar().setSubtitle(getAccount().getUsernick());
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!GlobalContext.getInstance().checkUserIsLogin()) {
Toast.makeText(this, this.getString(R.string.share_failed_because_of_no_account),
Toast.LENGTH_SHORT).show();
Intent intent = AccountActivity.newIntent();
startActivity(intent);
finish();
return;
}
buildInterface();
if (savedInstanceState == null) {
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (!TextUtils.isEmpty(action)) {
if (action.equals(Intent.ACTION_SEND) && !TextUtils.isEmpty(type)) {
if ("text/plain".equals(type)) {
handleSendText(intent);
} else if (type.startsWith("image/")) {
handleSendImage(intent);
}
} else if (action.equals(WriteWeiboActivity.ACTION_DRAFT)) {
handleDraftOperation(intent);
} else if (action.equals(WriteWeiboActivity.ACTION_SEND_FAILED)) {
handleFailedOperation(intent);
}
} else {
handleNormalOperation(intent);
}
}
}
private void handleDraftOperation(Intent intent) {
accountBean = (AccountBean) intent.getParcelableExtra("account");
token = accountBean.getAccess_token();
getActionBar().setSubtitle(accountBean.getUsernick());
statusDraftBean = (StatusDraftBean) intent.getParcelableExtra("draft");
if (statusDraftBean != null) {
content.setText(statusDraftBean.getContent());
picPath = statusDraftBean.getPic();
geoBean = statusDraftBean.getGps();
if (!TextUtils.isEmpty(picPath)) {
enablePicture();
}
if (geoBean != null) {
if (Utility.isTaskStopped(locationTask)) {
locationTask = new GetGoogleLocationInfo(geoBean);
locationTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
}
}
}
private void handleNormalOperation(Intent intent) {
accountBean = (AccountBean) intent.getParcelableExtra("account");
token = accountBean.getAccess_token();
getActionBar().setSubtitle(accountBean.getUsernick());
String contentStr = intent.getStringExtra("content");
if (!TextUtils.isEmpty(contentStr)) {
content.setText(contentStr + " ");
content.setSelection(content.getText().toString().length());
}
}
private void buildInterface() {
setContentView(R.layout.writeweiboactivity_layout);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setTitle(R.string.write_weibo);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
int avatarWidth = getResources().getDimensionPixelSize(R.dimen.timeline_avatar_width);
int avatarHeight = getResources().getDimensionPixelSize(R.dimen.timeline_avatar_height);
Bitmap bitmap = ImageUtility.getWriteWeiboRoundedCornerPic(
GlobalContext.getInstance().getAccountBean().getInfo().getAvatar_large(),
avatarWidth, avatarHeight, FileLocationMethod.avatar_large);
if (bitmap == null) {
bitmap = ImageUtility.getWriteWeiboRoundedCornerPic(
GlobalContext.getInstance().getAccountBean().getInfo().getProfile_image_url(),
avatarWidth, avatarHeight, FileLocationMethod.avatar_small);
}
if (bitmap != null) {
actionBar.setIcon(new BitmapDrawable(getResources(), bitmap));
}
View title = getLayoutInflater().inflate(R.layout.writeweiboactivity_title_layout, null);
TextView contentNumber = (TextView) title.findViewById(R.id.content_number);
contentNumber.setVisibility(View.GONE);
haveGPS = (ImageView) title.findViewById(R.id.have_gps);
final PopupMenu popupMenu = new PopupMenu(this, haveGPS);
popupMenu.inflate(R.menu.popmenu_gps);
haveGPS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupMenu.show();
}
});
popupMenu.setOnMenuItemClickListener(
new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_view:
StringBuilder geoUriString = new StringBuilder()
.append("geo:" + geoBean.getLat() + "," + geoBean
.getLon());
if (!TextUtils.isEmpty(location)) {
geoUriString.append("?q=").append(location);
}
Uri geoUri = Uri.parse(geoUriString.toString());
Intent mapCall = new Intent(Intent.ACTION_VIEW, geoUri);
if (Utility.isIntentSafe(WriteWeiboActivity.this, mapCall)) {
startActivity(mapCall);
} else {
Toast.makeText(WriteWeiboActivity.this,
R.string.your_device_dont_have_any_map_app_to_open_gps_info,
Toast.LENGTH_SHORT).show();
}
break;
case R.id.menu_delete:
haveGPS.setVisibility(View.GONE);
geoBean = null;
break;
}
return true;
}
});
actionBar.setCustomView(title, new ActionBar.LayoutParams(Gravity.RIGHT));
actionBar.setDisplayShowCustomEnabled(true);
content = ((KeyboardControlEditText) findViewById(R.id.status_new_content));
content.addTextChangedListener(
new TextNumLimitWatcher((TextView) findViewById(R.id.menu_send), content, this));
content.setDrawingCacheEnabled(true);
AutoCompleteAdapter adapter = new AutoCompleteAdapter(this, content,
(ProgressBar) title.findViewById(R.id.have_suggest_progressbar));
content.setAdapter(adapter);
preview = ViewUtility.findViewById(this, R.id.status_image_preview);
View.OnClickListener onClickListener = new BottomButtonClickListener();
findViewById(R.id.menu_at).setOnClickListener(onClickListener);
findViewById(R.id.menu_emoticon).setOnClickListener(onClickListener);
findViewById(R.id.menu_add_pic).setOnClickListener(onClickListener);
findViewById(R.id.menu_send).setOnClickListener(onClickListener);
CheatSheet.setup(WriteWeiboActivity.this, findViewById(R.id.menu_at), R.string.at_other);
CheatSheet.setup(WriteWeiboActivity.this, findViewById(R.id.menu_emoticon),
R.string.add_emoticon);
CheatSheet
.setup(WriteWeiboActivity.this, findViewById(R.id.menu_add_pic), R.string.add_pic);
CheatSheet.setup(WriteWeiboActivity.this, findViewById(R.id.menu_send), R.string.send);
smiley = (SmileyPicker) findViewById(R.id.smiley_picker);
smiley.setEditText(WriteWeiboActivity.this, ((LinearLayout) findViewById(R.id.root_layout)),
content);
container = (RelativeLayout) findViewById(R.id.container);
content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideSmileyPicker(true);
}
});
}
private void getAccountInfo() {
AccountBean account = GlobalContext.getInstance().getAccountBean();
if (account != null) {
accountBean = account;
token = account.getAccess_token();
getActionBar().setSubtitle(account.getUsernick());
}
}
private void handleSendText(Intent intent) {
getAccountInfo();
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (!TextUtils.isEmpty(sharedText)) {
content.setText(sharedText);
content.setSelection(content.getText().toString().length());
}
}
private void handleSendImage(Intent intent) {
handleSendText(intent);
getAccountInfo();
Uri sharedImageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (sharedImageUri != null) {
this.imageFileUri = sharedImageUri;
createTmpUploadFileFromUri();
}
}
private boolean canSend() {
boolean haveContent = !TextUtils.isEmpty(content.getText().toString());
boolean haveToken = !TextUtils.isEmpty(token);
int sum = Utility.length(content.getText().toString());
int num = 140 - sum;
boolean contentNumBelow140 = (num >= 0);
if (haveContent && haveToken && contentNumBelow140) {
return true;
} else {
if (!haveContent && !haveToken) {
Toast.makeText(this,
getString(R.string.content_cant_be_empty_and_dont_have_account),
Toast.LENGTH_SHORT).show();
} else if (!haveContent) {
content.setError(getString(R.string.content_cant_be_empty));
} else if (!haveToken) {
Toast.makeText(this, getString(R.string.dont_have_account), Toast.LENGTH_SHORT)
.show();
}
if (!contentNumBelow140) {
content.setError(getString(R.string.content_words_number_too_many));
}
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actionbar_menu_statusnewactivity, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
String contentStr = content.getText().toString();
if (!TextUtils.isEmpty(contentStr)) {
menu.findItem(R.id.menu_clear).setVisible(true);
} else {
menu.findItem(R.id.menu_clear).setVisible(false);
}
MusicInfo musicInfo = GlobalContext.getInstance().getMusicInfo();
if (!musicInfo.isEmpty()) {
MenuItem musicMenu = menu.findItem(R.id.menu_add_now_playing);
musicMenu.setVisible(true);
musicMenu.setTitle(musicInfo.toString());
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
switch (item.getItemId()) {
case android.R.id.home:
saveToDraft();
InputMethodManager imm = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
}
intent = MainTimeLineActivity.newIntent(getAccount());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
break;
case R.id.menu_topic:
String ori = content.getText().toString();
String topicTag = "##";
content.setText(ori + topicTag);
content.setSelection(content.getText().toString().length() - 1);
break;
case R.id.menu_at:
intent = new Intent(WriteWeiboActivity.this, AtUserActivity.class);
intent.putExtra("token", token);
startActivityForResult(intent, AT_USER);
break;
case R.id.menu_txt_to_pic:
convertStringToBitmap();
break;
case R.id.menu_clear:
clearContentMenu();
break;
case R.id.menu_add_gps:
addLocation();
break;
case R.id.menu_add_now_playing:
MusicInfo musicInfo = GlobalContext.getInstance().getMusicInfo();
if (!musicInfo.isEmpty()) {
content.append(musicInfo.toString());
}
break;
}
return true;
}
public void saveToDraft() {
if (!TextUtils.isEmpty(content.getText().toString())) {
boolean haveDraft = statusDraftBean != null;
boolean isDraftChanged = haveDraft && !statusDraftBean.getContent()
.equals(content.getText().toString());
if (isDraftChanged) {
DraftDBManager.getInstance().remove(statusDraftBean.getId());
DraftDBManager.getInstance()
.insertStatus(content.getText().toString(), geoBean, picPath,
accountBean.getUid());
} else {
DraftDBManager.getInstance()
.insertStatus(content.getText().toString(), geoBean, picPath,
accountBean.getUid());
}
}
finish();
}
private void convertStringToBitmap() {
boolean haveContent = !TextUtils.isEmpty(content.getText().toString());
if (!haveContent) {
content.setError(getString(R.string.content_cant_be_empty));
return;
}
if (Utility.isTaskStopped(string2PicTask)) {
string2PicTask = new String2PicTask();
string2PicTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
}
protected void clearContentMenu() {
ClearContentDialog dialog = new ClearContentDialog();
dialog.show(getFragmentManager(), "");
}
public void clear() {
content.setText("");
}
private void send() {
String value = content.getText().toString();
if (canSend()) {
executeTask(value);
}
}
private void addPic() {
SelectPictureDialog.newInstance().show(getFragmentManager(), "");
}
private void showPic() {
DeleteSelectedPictureDialog.newInstance().show(getFragmentManager(), "");
}
protected void executeTask(String contentString) {
Intent intent = new Intent(WriteWeiboActivity.this, SendWeiboService.class);
intent.putExtra("token", token);
intent.putExtra("picPath", picPath);
intent.putExtra("account", accountBean);
intent.putExtra("content", contentString);
intent.putExtra("geo", geoBean);
intent.putExtra("draft", statusDraftBean);
startService(intent);
finish();
}
@Override
protected void onPause() {
super.onPause();
if (locationListener != null) {
((LocationManager) WriteWeiboActivity.this
.getSystemService(Context.LOCATION_SERVICE)).removeUpdates(locationListener);
}
}
public AccountBean getAccount() {
return accountBean;
}
private class BottomButtonClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.menu_add_gps:
addLocation();
break;
case R.id.menu_add_pic:
if (TextUtils.isEmpty(picPath)) {
addPic();
} else {
showPic();
}
break;
case R.id.menu_emoticon:
if (smiley.isShown()) {
hideSmileyPicker(true);
} else {
showSmileyPicker(
SmileyPickerUtility.isKeyBoardShow(WriteWeiboActivity.this));
}
break;
case R.id.menu_send:
send();
break;
case R.id.menu_at:
Intent intent = new Intent(WriteWeiboActivity.this, AtUserActivity.class);
intent.putExtra("token", token);
startActivityForResult(intent, AT_USER);
break;
}
}
}
private void showSmileyPicker(boolean showAnimation) {
this.smiley.show(WriteWeiboActivity.this, showAnimation);
lockContainerHeight(SmileyPickerUtility.getAppContentHeight(WriteWeiboActivity.this));
}
public void hideSmileyPicker(boolean showKeyBoard) {
if (this.smiley.isShown()) {
if (showKeyBoard) {
//this time softkeyboard is hidden
LinearLayout.LayoutParams localLayoutParams = (LinearLayout.LayoutParams) this
.container.getLayoutParams();
localLayoutParams.height = smiley.getTop();
localLayoutParams.weight = 0.0F;
this.smiley.hide(WriteWeiboActivity.this);
SmileyPickerUtility.showKeyBoard(content);
content.postDelayed(new Runnable() {
@Override
public void run() {
unlockContainerHeightDelayed();
}
}, 200L);
} else {
this.smiley.hide(WriteWeiboActivity.this);
unlockContainerHeightDelayed();
}
}
}
private void lockContainerHeight(int paramInt) {
LinearLayout.LayoutParams localLayoutParams = (LinearLayout.LayoutParams) this.container
.getLayoutParams();
localLayoutParams.height = paramInt;
localLayoutParams.weight = 0.0F;
}
public void unlockContainerHeightDelayed() {
((LinearLayout.LayoutParams) WriteWeiboActivity.this.container.getLayoutParams()).weight
= 1.0F;
}
private void addLocation() {
LocationManager locationManager = (LocationManager) WriteWeiboActivity.this
.getSystemService(Context.LOCATION_SERVICE);
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
&& !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Toast.makeText(WriteWeiboActivity.this, getString(R.string.please_open_gps),
Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(WriteWeiboActivity.this, getString(R.string.gps_is_searching),
Toast.LENGTH_SHORT).show();
if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0,
locationListener);
}
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0,
locationListener);
}
}
private void updateWithNewLocation(Location result) {
haveGPS.setVisibility(View.VISIBLE);
geoBean = new GeoBean();
geoBean.setLatitude(result.getLatitude());
geoBean.setLongitude(result.getLongitude());
if (Utility.isTaskStopped(locationTask)) {
locationTask = new GetGoogleLocationInfo(geoBean);
locationTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
((LocationManager) WriteWeiboActivity.this
.getSystemService(Context.LOCATION_SERVICE)).removeUpdates(locationListener);
}
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
};
private class GetGoogleLocationInfo extends MyAsyncTask<Void, String, String> {
GeoBean geoBean;
public GetGoogleLocationInfo(GeoBean geoBean) {
this.geoBean = geoBean;
}
@Override
protected String doInBackground(Void... params) {
String result = new GoogleGeoCoderDao(WriteWeiboActivity.this, geoBean).get();
if (!TextUtils.isEmpty(result)) {
return result;
}
try {
result = new BaiduGeoCoderDao(geoBean.getLat(), geoBean.getLon()).get();
if (!TextUtils.isEmpty(result)) {
return result;
}
} catch (WeiboException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (!TextUtils.isEmpty(result)) {
Toast.makeText(WriteWeiboActivity.this, result, Toast.LENGTH_SHORT).show();
location = result;
}
enableGeo();
}
}
private void enableGeo() {
haveGPS.setVisibility(View.VISIBLE);
CheatSheet.setup(WriteWeiboActivity.this, haveGPS, location);
}
private void disableGeo() {
haveGPS.setVisibility(View.GONE);
}
private class String2PicTask extends MyAsyncTask<Void, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
content.destroyDrawingCache();
content.buildDrawingCache();
}
@Override
protected String doInBackground(Void... params) {
return ImageEditUtility.convertStringToBitmap(WriteWeiboActivity.this, content);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (!TextUtils.isEmpty(s)) {
imageFileUri = Uri.fromFile(new File(s));
enablePicture();
Toast.makeText(WriteWeiboActivity.this, getString(R.string.convert_successfully),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(WriteWeiboActivity.this, getString(R.string.convert_failed),
Toast.LENGTH_SHORT).show();
}
}
}
public void deletePicture() {
imageFileUri = null;
picPath = null;
disablePicture();
}
}