package com.haicaojie.android.util; import android.Manifest; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.service.notification.Condition; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; import com.haicaojie.android.R; import com.haicaojie.android.ShoppingApi; import com.haicaojie.android.ui.main.MainActivity; import com.lcjian.library.util.MobileUtil; import com.lcjian.library.util.SingleToast; import com.lcjian.library.widget.RatioLayout; import com.loopj.android.http.JsonHttpResponseHandler; import com.sina.weibo.sdk.api.MultiImageObject; import com.sina.weibo.sdk.api.TextObject; import com.sina.weibo.sdk.api.WeiboMultiMessage; import com.umeng.socialize.media.UMImage; import java.io.File; import java.util.ArrayList; import java.util.List; public class CustomShareNativeDialog extends Dialog { public CustomShareNativeDialog(Context context) { super(context); } public CustomShareNativeDialog(Context context, int theme) { super(context, theme); } public static class Builder { private Activity context; private String title; private String message; private String sinaMessage; private String url; private String id; private boolean isTrendGoods = false; private ProgressDialog pd; private String sinaUrl; private String imageurl; private UMImage image; private boolean isGoods = false; private String positiveButtonText; private String negativeButtonText; private View contentView; private OnClickListener positiveButtonClickListener; private OnClickListener negativeButtonClickListener; private PermissionsChecker mPermissionsChecker; // 权限检测器 static final String[] PERMISSIONS = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; private static final int REQUEST_CODE = 0; // 请求码 private void startPermissionsActivity() { PermissionsActivity.startActivityForResult(context, REQUEST_CODE, PERMISSIONS); } public Builder(Activity context) { this.context = context; } public Builder setMessage(String message) { this.message = message; return this; } public Builder setSinaMessage(String message) { this.sinaMessage = message; return this; } public Builder setUrl(String Url) { this.url = Url; return this; } public Builder setId(String id) { this.id = id; return this; } public Builder isTrendGoods(boolean isTrendGoods) { this.isTrendGoods = isTrendGoods; return this; } public Builder setLoading(ProgressDialog pd) { this.pd = pd; return this; } public Builder setSinaUrl(String Url) { this.sinaUrl = Url; return this; } /** * Set the Dialog message from resource * * @return */ public Builder setMessage(int message) { this.message = (String) context.getText(message); return this; } /** * Set the Dialog title from resource * * @param title * @return */ public Builder setTitle(int title) { this.title = (String) context.getText(title); return this; } /** * Set the Dialog title from String * * @param title * @return */ public Builder setTitle(String title) { this.title = title; return this; } public Builder setContentView(View v) { this.contentView = v; return this; } public Builder setContentImage(String imageurl) { this.imageurl = imageurl; this.image = new UMImage(context, imageurl); return this; } public Builder setGoodsImgs(List imgs) { this.imgs = imgs; return this; } /** * Set the positive button resource and it's listener * * @param positiveButtonText * @return */ public Builder setPositiveButton(int positiveButtonText, OnClickListener listener) { this.positiveButtonText = (String) context .getText(positiveButtonText); this.positiveButtonClickListener = listener; return this; } public Builder setPositiveButton(String positiveButtonText, OnClickListener listener) { this.positiveButtonText = positiveButtonText; this.positiveButtonClickListener = listener; return this; } public Builder setNegativeButton(int negativeButtonText, OnClickListener listener) { this.negativeButtonText = (String) context .getText(negativeButtonText); this.negativeButtonClickListener = listener; return this; } public Builder setNegativeButton(String negativeButtonText, OnClickListener listener) { this.negativeButtonText = negativeButtonText; this.negativeButtonClickListener = listener; return this; } CustomShareNativeDialog dialog; public CustomShareNativeDialog create() { if (pd != null) { pd.show(); } mPermissionsChecker = new PermissionsChecker(context); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // instantiate the dialog with the custom Theme WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); dialog = new CustomShareNativeDialog(context, R.style.Dialog); View layout = inflater.inflate(R.layout.custom_share_bottom_dialog, null); RatioLayout rl_qq = (RatioLayout) layout.findViewById(R.id.rl_qq); RatioLayout rl_qqzone = (RatioLayout) layout.findViewById(R.id.rl_qqzone); RatioLayout rl_sina = (RatioLayout) layout.findViewById(R.id.rl_sina); RatioLayout rl_friends = (RatioLayout) layout.findViewById(R.id.rl_friends); RatioLayout rl_wxchat = (RatioLayout) layout.findViewById(R.id.rl_wxchat); dialog.addContentView(layout, new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); rl_friends.setRatio(1); rl_wxchat.setRatio(1); rl_qq.setVisibility(View.VISIBLE); rl_qqzone.setVisibility(View.GONE); if (isTrendGoods) { rl_sina.setVisibility(View.GONE); } else { rl_sina.setVisibility(View.VISIBLE); } rl_friends.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { shareImgs(1); } }); rl_qq.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { android.util.Log.i("mResult:", "url" + url + "--message:" + message + "--title:" + title + "--imageurl" + imageurl); shareImgs(2); } }); rl_qqzone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { } }); rl_sina.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { android.util.Log.i("mResult:", "url" + url + "--message:" + message + "--title:" + title + "--imageurl" + imageurl); shareImgs(3); } }); rl_wxchat.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { shareImgs(0); } }); ((RatioLayout) layout.findViewById(R.id.rl_copy_link)) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { ClipData myClip; ClipboardManager manager = (ClipboardManager) context .getSystemService(context.CLIPBOARD_SERVICE); myClip = ClipData.newPlainText("text", url); manager.setPrimaryClip(myClip); Toast.makeText(context, "复制链接成功", Toast.LENGTH_SHORT).show(); } }); // set the cancel button if (negativeButtonText != null) { ((TextView) layout.findViewById(R.id.tv_dialog_cancel)) .setText(negativeButtonText); if (negativeButtonClickListener != null) { ((TextView) layout.findViewById(R.id.tv_dialog_cancel)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { negativeButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.tv_dialog_cancel).setVisibility( View.GONE); } dialog.setContentView(layout); WindowManager.LayoutParams params = dialog.getWindow() .getAttributes(); params.gravity = Gravity.BOTTOM; params.width = width; params.height = WindowManager.LayoutParams.WRAP_CONTENT; dialog.getWindow().setAttributes(params); dialog.setCanceledOnTouchOutside(true); return dialog; } /** * 多张图片分享 platform--0 微信好友 * platform--1 朋友圈 * platform--2 QQ * * @param platfrom */ private List imgs; private List files = new ArrayList<>(); boolean isDownloadFinish = false; String description = ""; String link = ""; private void shareImgs(final int platfrom) { int avilibleValue = 0; if (platfrom == 0 || platfrom == 1) { avilibleValue = Tools.isWeixinAvilible(context); } else if (platfrom == 2) { avilibleValue = Tools.isQQAvilible(context); } else if (platfrom == 3) { avilibleValue = Tools.isSinaAvilible(context); } if ((platfrom == 0 || platfrom == 1) && (avilibleValue == 1 || avilibleValue == 2)) { if (avilibleValue == 2) { Toast.makeText(context, "您还没有安装微信", Toast.LENGTH_SHORT).show(); } } else if (platfrom == 2 && (avilibleValue == 1 || avilibleValue == 2)) { if (avilibleValue == 2) { Toast.makeText(context, "您还没有安装QQ", Toast.LENGTH_SHORT).show(); } } else if (platfrom == 3 && (avilibleValue == 1 || avilibleValue == 2)) { if (avilibleValue == 2) { Toast.makeText(context, "您还没有安装微博", Toast.LENGTH_SHORT).show(); } } else { final ProgressDialog pd = new ProgressDialog(context); pd.setMessage("请稍候..."); pd.show(); String path = context.getExternalCacheDir().getPath() + "/share"; File storageDir = new File(path); if (storageDir.isDirectory()) { try { File files[] = storageDir.listFiles(); for (int i = 0; i < files.length; i++) { // deleteFolderFile(files[i].getAbsolutePath()); files[i].delete(); } if (!storageDir.isDirectory()) { storageDir.delete(); } else { if (storageDir.listFiles().length == 0) { storageDir.delete(); } } } catch (Exception e) { e.printStackTrace(); } } files.clear(); Log.e("imgPath", "图片list的长度:" + imgs.size()); for (int i = 0; i < imgs.size(); i++) { final int j = i; Log.e("imgPath", imgs.get(j)); final Thread thread = new Thread(new Runnable() { @Override public void run() { File file = Tools.saveImageToSdCard(context, imgs.get(j)); if (file == null) { Log.e("imgPath", "图片为空:" + imgs.get(j)); } files.add(file); Log.e("imgPath", "缓存文件夹中图片数量----" + files.size() + "-----图片list的长度:" + imgs.size()); if (files.size() == imgs.size() && !isDownloadFinish) { isDownloadFinish = true; Intent intent = new Intent(); ComponentName comp; if (platfrom == 0) { comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI"); } else if (platfrom == 1) { comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"); intent.putExtra("Kdescription", title); } else { comp = new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity"); } intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType("image/*"); ArrayList imageUris = new ArrayList<>(); String path = context.getExternalCacheDir().getPath() + "/share"; File storageDir = new File(path); for (int i = 0; i < storageDir.listFiles().length; i++) { imageUris.add(Uri.fromFile(storageDir.listFiles()[i])); } if (platfrom == 3) { WeiboMultiMessage weiboMessage = new WeiboMultiMessage(); MultiImageObject multiImageObject = new MultiImageObject(); weiboMessage.textObject = getTextObj(); multiImageObject.setImageList(imageUris); weiboMessage.multiImageObject = multiImageObject; MainActivity.shareHandler.shareMessage(weiboMessage, true); } else { intent.setComponent(comp); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); context.startActivity(intent); } pd.dismiss(); handler.sendEmptyMessage(1); } } }); thread.start(); } } } /** * 创建文本消息对象。 * * @return 文本消息对象。 */ private TextObject getTextObj() { TextObject textObject = new TextObject(); textObject.text = description; textObject.title = title; textObject.actionUrl = link; return textObject; } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (dialog.isShowing()) dialog.dismiss(); ShoppingApi.addShareCount(context, id, new JsonHttpResponseHandler()); } }; } }