package com.wise.sharesdk;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import com.wise.wawc.R;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Typeface;
import android.os.Message;
import android.os.Handler.Callback;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Toast;
import cn.sharesdk.framework.FakeActivity;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.framework.TitleLayout;
import cn.sharesdk.framework.utils.UIHandler;
/** 执行图文分享的页面,此页面不支持微信平台的分享 */
public class EditPage extends FakeActivity implements OnClickListener, TextWatcher, Callback {
private static final int MAX_TEXT_COUNT = 140;
private static final int MSG_PLATFORM_LIST_GOT = 1;
private HashMap<String, Object> reqData;
private OnekeyShare parent;
private LinearLayout llPage;
private TitleLayout llTitle;
// 文本编辑框
private EditText etContent;
// 字数计算器
private TextView tvCounter;
// 别针图片
private ImageView ivPin;
// 输入区域的图片
private ImageView ivImage;
private Bitmap image;
private boolean shareImage;
private LinearLayout llPlat;
private LinearLayout llAt;
// 平台列表
private Platform[] platformList;
private View[] views;
// 设置显示模式为Dialog模式
private boolean dialogMode;
public void setShareData(HashMap<String, Object> data) {
reqData = data;
}
public void setParent(OnekeyShare parent) {
this.parent = parent;
}
/** 设置显示模式为Dialog模式 */
public void setDialogMode() {
dialogMode = true;
}
public void setActivity(Activity activity) {
super.setActivity(activity);
if (dialogMode) {
activity.setTheme(android.R.style.Theme_Dialog);
activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
}
}
public void onCreate() {
if (reqData == null) {
finish();
return;
}
initPageView();
activity.setContentView(llPage);
onTextChanged(etContent.getText(), 0, etContent.length(), 0);
// 获取平台列表并过滤微信
new Thread(){
public void run() {
platformList = ShareSDK.getPlatformList(activity);
if (platformList == null) {
return;
}
ArrayList<Platform> list = new ArrayList<Platform>();
for (Platform plat : platformList) {
String name = plat.getName();
if (ShareCore.isUseClientToShare(activity, name)) {
continue;
}
list.add(plat);
}
platformList = new Platform[list.size()];
for (int i = 0; i < platformList.length; i++) {
platformList[i] = list.get(i);
}
UIHandler.sendEmptyMessage(MSG_PLATFORM_LIST_GOT, EditPage.this);
}
}.start();
}
private void initPageView() {
llPage = new LinearLayout(getContext());
llPage.setBackgroundColor(0xff323232);
llPage.setOrientation(LinearLayout.VERTICAL);
// 标题栏
llTitle = new TitleLayout(getContext());
llTitle.setBackgroundResource(R.drawable.title_back);
llTitle.getBtnBack().setOnClickListener(this);
llTitle.getTvTitle().setText(R.string.multi_share);
llTitle.getBtnRight().setVisibility(View.VISIBLE);
llTitle.getBtnRight().setText(R.string.share);
llTitle.getBtnRight().setOnClickListener(this);
llTitle.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
llPage.addView(llTitle);
FrameLayout flPage = new FrameLayout(getContext());
LinearLayout.LayoutParams lpFl = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
lpFl.weight = 1;
flPage.setLayoutParams(lpFl);
llPage.addView(flPage);
// 页面主体
LinearLayout llBody = new LinearLayout(getContext());
llBody.setOrientation(LinearLayout.VERTICAL);
FrameLayout.LayoutParams lpLl = new FrameLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
lpLl.gravity = Gravity.LEFT | Gravity.TOP;
llBody.setLayoutParams(lpLl);
flPage.addView(llBody);
// 别针图片
ivPin = new ImageView(getContext());
ivPin.setImageResource(R.drawable.pin);
int dp_80 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 80);
int dp_36 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 36);
FrameLayout.LayoutParams lpPin = new FrameLayout.LayoutParams(dp_80, dp_36);
lpPin.topMargin = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 6);
lpPin.gravity = Gravity.RIGHT | Gravity.TOP;
ivPin.setLayoutParams(lpPin);
flPage.addView(ivPin);
ImageView ivShadow = new ImageView(getContext());
ivShadow.setBackgroundResource(R.drawable.title_shadow);
ivShadow.setImageResource(R.drawable.title_shadow);
FrameLayout.LayoutParams lpSd = new FrameLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
ivShadow.setLayoutParams(lpSd);
flPage.addView(ivShadow);
LinearLayout llInput = new LinearLayout(getContext());
llInput.setMinimumHeight(cn.sharesdk.framework.utils.R.dipToPx(getContext(), 150));
llInput.setBackgroundResource(R.drawable.edittext_back);
LinearLayout.LayoutParams lpInput = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
int dp_3 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 3);
lpInput.setMargins(dp_3, dp_3, dp_3, dp_3);
lpInput.weight = 1;
llInput.setLayoutParams(lpInput);
llBody.addView(llInput);
// 平台Logo列表
LinearLayout llToolBar = new LinearLayout(getContext());
llToolBar.setBackgroundResource(R.drawable.share_tb_back);
LinearLayout.LayoutParams lpTb = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
int dp_4 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 4);
lpTb.setMargins(dp_4, 0, dp_4, dp_4);
llToolBar.setLayoutParams(lpTb);
llBody.addView(llToolBar);
LinearLayout llContent = new LinearLayout(getContext());
llContent.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams lpEt = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
lpEt.weight = 1;
llContent.setLayoutParams(lpEt);
llInput.addView(llContent);
// 文字输入区域
etContent = new EditText(getContext());
etContent.setGravity(Gravity.LEFT | Gravity.TOP);
etContent.setBackgroundDrawable(null);
etContent.setText(String.valueOf(reqData.get("text")));
etContent.addTextChangedListener(this);
etContent.setLayoutParams(lpEt);
llContent.addView(etContent);
String platform = String.valueOf(reqData.get("platform"));
checkAtMth(llContent, platform);
int dp_74 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 74);
int dp_16 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 16);
String imagePath = String.valueOf(reqData.get("imagePath"));
if(!TextUtils.isEmpty(imagePath) && new File(imagePath).exists()){
LinearLayout llRight = new LinearLayout(getContext());
llRight.setOrientation(LinearLayout.VERTICAL);
llRight.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
llInput.addView(llRight);
// 输入区域的图片
ivImage = new ImageView(getContext());
ivImage.setBackgroundResource(R.drawable.btn_back_nor);
ivImage.setScaleType(ScaleType.CENTER_INSIDE);
ivImage.setVisibility(View.GONE);
ivImage.setVisibility(View.VISIBLE);
try {
shareImage = true;
image = cn.sharesdk.framework.utils.R.getBitmap(imagePath);
ivImage.setImageBitmap(image);
} catch(Throwable t) {
System.gc();
try {
image = cn.sharesdk.framework.utils.R.getBitmap(imagePath, 2);
ivImage.setImageBitmap(image);
} catch(Throwable t1) {
t1.printStackTrace();
shareImage = false;
}
}
ivImage.setPadding(dp_4, dp_4, dp_4, dp_4);
LinearLayout.LayoutParams lpImage = new LinearLayout.LayoutParams(dp_74, dp_74);
int dp_8 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 8);
lpImage.setMargins(0, dp_16, dp_8, 0);
ivImage.setLayoutParams(lpImage);
llRight.addView(ivImage);
if(!shareImage){
ivPin.setVisibility(View.GONE);
ivImage.setVisibility(View.GONE);
}
ivImage.setOnClickListener(this);
}else {
shareImage = false;
ivPin.setVisibility(View.GONE);
}
// 输入区域的图片
if(shareImage){
Button btn = new Button(getContext());
btn.setTag("img_cancel");
btn.setOnClickListener(this);
btn.setBackgroundResource(R.drawable.img_cancel);
int dp_20 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 20);
int dp_83 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 83);
int dp_13 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 13);
FrameLayout.LayoutParams lpBtn = new FrameLayout.LayoutParams(dp_20, dp_20);
lpBtn.topMargin = dp_83;
lpBtn.rightMargin = dp_13;
lpBtn.gravity = Gravity.RIGHT | Gravity.TOP;
btn.setPadding(dp_4, dp_4, dp_4, dp_4);
btn.setLayoutParams(lpBtn);
flPage.addView(btn);
}
// 字数统计
tvCounter = new TextView(getContext());
tvCounter.setText(String.valueOf(MAX_TEXT_COUNT));
tvCounter.setTextColor(0xffcfcfcf);
tvCounter.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
tvCounter.setTypeface(Typeface.DEFAULT_BOLD);
FrameLayout.LayoutParams lpCounter = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpCounter.bottomMargin = dp_74;
lpCounter.gravity = Gravity.RIGHT | Gravity.BOTTOM;
tvCounter.setPadding(0, 0, dp_16, 0);
tvCounter.setLayoutParams(lpCounter);
flPage.addView(tvCounter);
TextView tvShareTo = new TextView(getContext());
tvShareTo.setText(R.string.share_to);
tvShareTo.setTextColor(0xffcfcfcf);
tvShareTo.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
int dp_9 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 9);
LinearLayout.LayoutParams lpShareTo = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpShareTo.gravity = Gravity.CENTER_VERTICAL;
lpShareTo.setMargins(dp_9, 0, 0, 0);
tvShareTo.setLayoutParams(lpShareTo);
llToolBar.addView(tvShareTo);
HorizontalScrollView sv = new HorizontalScrollView(getContext());
sv.setHorizontalScrollBarEnabled(false);
sv.setHorizontalFadingEdgeEnabled(false);
LinearLayout.LayoutParams lpSv = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpSv.setMargins(dp_9, dp_9, dp_9, dp_9);
sv.setLayoutParams(lpSv);
llToolBar.addView(sv);
llPlat = new LinearLayout(getContext());
llPlat.setLayoutParams(new HorizontalScrollView.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
sv.addView(llPlat);
}
// 进新浪微博、腾讯微博、Facebook和Twitter支持At功能
private void checkAtMth(LinearLayout llInput, String platform) {
if ("SinaWeibo".equals(platform) || "TencentWeibo".equals(platform)
|| "Facebook".equals(platform) || "Twitter".equals(platform)) {
llAt= new LinearLayout(getContext());
FrameLayout.LayoutParams lpAt = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpAt.leftMargin = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 10);
lpAt.bottomMargin = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 10);
lpAt.gravity = Gravity.LEFT | Gravity.BOTTOM;
llAt.setLayoutParams(lpAt);
llAt.setOnClickListener(this);
llInput.addView(llAt);
TextView tvAt = new TextView(getContext());
tvAt.setBackgroundResource(R.drawable.btn_back_nor);
int dp_32 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 32);
tvAt.setLayoutParams(new LinearLayout.LayoutParams(dp_32, dp_32));
tvAt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
tvAt.setText("@");
int dp_2 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 2);
tvAt.setPadding(0, 0, 0, dp_2);
tvAt.setTypeface(Typeface.DEFAULT_BOLD);
tvAt.setTextColor(0xff000000);
tvAt.setGravity(Gravity.CENTER);
llAt.addView(tvAt);
TextView tvName = new TextView(getContext());
tvName.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
tvName.setTextColor(0xff000000);
String text = getContext().getString(R.string.list_friends, getName(platform));
tvName.setText(text);
LinearLayout.LayoutParams lpName = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpName.gravity = Gravity.CENTER_VERTICAL;
tvName.setLayoutParams(lpName);
llAt.addView(tvName);
}
}
private String getName(String platform) {
if (platform == null) {
return "";
}
int resId = cn.sharesdk.framework.utils.R.getStringRes(getContext(), platform);
return getContext().getString(resId);
}
public void onClick(View v) {
if (v.equals(ivImage)) {
if (image != null && !image.isRecycled()) {
PicViewer pv = new PicViewer();
pv.setImageBitmap(image);
pv.show(activity, null);
}
return;
}
if (v.equals(llTitle.getBtnBack())) {
Platform plat = null;
for (int i = 0; i < views.length; i++) {
if (views[i].getVisibility() == View.INVISIBLE) {
plat = platformList[i];
break;
}
}
// 取消分享的统计
if (plat != null) {
ShareSDK.logDemoEvent(5, plat);
}
finish();
return;
}
// 取消分享的统计
if (v.equals(llTitle.getBtnRight())) {
String text = etContent.getText().toString();
reqData.put("text", text);
if(!shareImage){
reqData.put("imagePath", null);
}
HashMap<Platform, HashMap<String, Object>> editRes
= new HashMap<Platform, HashMap<String,Object>>();
boolean selected = false;
for (int i = 0; i < views.length; i++) {
if (views[i].getVisibility() != View.VISIBLE) {
editRes.put(platformList[i], reqData);
selected = true;
}
}
if (selected) {
if (parent != null) {
parent.share(editRes);
}
finish();
}
else {
Toast.makeText(getContext(), R.string.select_one_plat_at_least,
Toast.LENGTH_SHORT).show();
}
return;
}
if (v.equals(llAt)) {
FollowList subPage = new FollowList();
String platform = String.valueOf(reqData.get("platform"));
subPage.setPlatform(ShareSDK.getPlatform(activity, platform));
subPage.setBackPage(this);
subPage.show(activity, null);
return;
}
// 取消分享图片
if("img_cancel".equals(v.getTag())){
v.setVisibility(View.GONE);
ivPin.setVisibility(View.GONE);
ivImage.setVisibility(View.GONE);
shareImage = false;
}
if (v instanceof FrameLayout) {
((FrameLayout) v).getChildAt(1).performClick();
return;
}
if (v.getVisibility() == View.INVISIBLE) {
v.setVisibility(View.VISIBLE);
}
else {
v.setVisibility(View.INVISIBLE);
}
}
public boolean handleMessage(Message msg) {
switch(msg.what) {
case MSG_PLATFORM_LIST_GOT: {
afterPlatformListGot();
}
break;
}
return false;
}
/** 显示平台列表 */
public void afterPlatformListGot() {
String name = String.valueOf(reqData.get("platform"));
int size = platformList == null ? 0 : platformList.length;
views = new View[size];
final int dp_36 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 36);
LinearLayout.LayoutParams lpItem = new LinearLayout.LayoutParams(dp_36, dp_36);
final int dp_9 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 9);
lpItem.setMargins(0, 0, dp_9, 0);
FrameLayout.LayoutParams lpMask = new FrameLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
lpMask.gravity = Gravity.LEFT | Gravity.TOP;
int selection = 0;
for (int i = 0; i < size; i++) {
FrameLayout fl = new FrameLayout(getContext());
fl.setLayoutParams(lpItem);
if (i >= size - 1) {
fl.setLayoutParams(new LinearLayout.LayoutParams(dp_36, dp_36));
}
llPlat.addView(fl);
fl.setOnClickListener(this);
ImageView iv = new ImageView(getContext());
iv.setScaleType(ScaleType.CENTER_INSIDE);
iv.setImageBitmap(getPlatLogo(platformList[i]));
iv.setLayoutParams(new FrameLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
fl.addView(iv);
views[i] = new View(getContext());
views[i].setBackgroundColor(0xcfffffff);
views[i].setOnClickListener(this);
if (name != null && name.equals(platformList[i].getName())) {
views[i].setVisibility(View.INVISIBLE);
selection = i;
// 编辑分享内容的统计
ShareSDK.logDemoEvent(3, platformList[i]);
}
views[i].setLayoutParams(lpMask);
fl.addView(views[i]);
}
final int postSel = selection;
UIHandler.sendEmptyMessageDelayed(0, 333, new Callback() {
public boolean handleMessage(Message msg) {
HorizontalScrollView hsv = (HorizontalScrollView)llPlat.getParent();
hsv.scrollTo(postSel * (dp_36 + dp_9), 0);
return false;
}
});
}
private Bitmap getPlatLogo(Platform plat) {
if (plat == null) {
return null;
}
String name = plat.getName();
if (name == null) {
return null;
}
String resName = "logo_" + plat.getName();
int resId = cn.sharesdk.framework.utils.R.getResId(R.drawable.class, resName);
return BitmapFactory.decodeResource(activity.getResources(), resId);
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
int remain = MAX_TEXT_COUNT - etContent.length();
tvCounter.setText(String.valueOf(remain));
tvCounter.setTextColor(remain > 0 ? 0xffcfcfcf : 0xffff0000);
}
public void afterTextChanged(Editable s) {
}
public void onResult(ArrayList<String> selected) {
StringBuilder sb = new StringBuilder();
for (String sel : selected) {
sb.append('@').append(sel).append(' ');
}
etContent.append(sb.toString());
}
}