diff --git a/app/src/main/java/com/gh/common/util/MessageShareUtils.java b/app/src/main/java/com/gh/common/util/MessageShareUtils.java index 424f841b72..02dec25aec 100644 --- a/app/src/main/java/com/gh/common/util/MessageShareUtils.java +++ b/app/src/main/java/com/gh/common/util/MessageShareUtils.java @@ -45,6 +45,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.lang.ref.WeakReference; import java.util.Date; import java.util.List; @@ -52,12 +53,20 @@ import java.util.List; * Created by khy on 2016/11/8. */ public class MessageShareUtils { + private static MessageShareUtils instance; private IWXAPI mIWXAPI; private Tencent mTencent; + + private WeakReference mActivity; // 用来关闭分享页面 + private Context mContext; // application context + + private PopupWindow mPopupWindow; private Bitmap shareBm; //分享截图 private String picName; - private boolean isPlugin = false; + + + private String[] mArrLabel = {"微信好友", "朋友圈", "QQ好友", "QQ空间", "保存"}; private int[] arrLogo = { R.drawable.share_wechat_logo, R.drawable.share_wechatmoments_logo, @@ -66,14 +75,6 @@ public class MessageShareUtils { R.drawable.share_save }; - private String[] mArrLabel = {"微信好友", "朋友圈", "QQ好友", "QQ空间", "保存"}; - - private PopupWindow mPopupWindow; - - private Context mContext; - - //TODO 干掉activity,将context变成applicationcontext - private Activity mActivity; // 用来关闭分享页面 //QQ或者QQ空间分享回调处理 public IUiListener QqShareListener = new IUiListener() { @Override @@ -84,8 +85,9 @@ public class MessageShareUtils { @Override public void onError(UiError uiError) { // 单分享图片不支持显示未安装弹窗,手动调出 - if (!ShareUtils.isQQClientAvailable(mActivity.getApplication())) { - new TDialog(mActivity, + Activity activity = mActivity.get(); + if (activity != null && !ShareUtils.isQQClientAvailable(activity.getApplication())) { + new TDialog(activity, "", "http://openmobile.qq.com/oauth2.0/m_jump_by_version", null, @@ -100,6 +102,7 @@ public class MessageShareUtils { Utils.toast(mContext, R.string.share_cancel_hint); } }; + // 适配快传成绩单分享 private int contentSize; private int paddTop; @@ -112,8 +115,7 @@ public class MessageShareUtils { private MessageShareUtils(Context context) { mTencent = Tencent.createInstance(Config.TENCENT_APPID, context); //初始化QQ分享 mIWXAPI = WXAPIFactory.createWXAPI(context, Config.WECHAT_APPID); //初始化微信分享 - //TODO changed to application context - mContext = context; + mContext = context.getApplicationContext(); } public static MessageShareUtils getInstance(Context context) { @@ -123,10 +125,6 @@ public class MessageShareUtils { return instance; } - public IWXAPI getIWXAPI() { - return mIWXAPI; - } - public Tencent getTencent() { return mTencent; } @@ -135,7 +133,7 @@ public class MessageShareUtils { this.shareBm = bitmap; this.picName = picName; this.shareType = shareType; - this.mActivity = activity; + this.mActivity = new WeakReference<>(activity); if (shareType == 2) { contentSize = 75; @@ -194,24 +192,16 @@ public class MessageShareUtils { mPopupWindow.setAnimationStyle(R.style.mypopwindow_anim_style); mPopupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0); - contentView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + contentView.setOnClickListener(v -> mPopupWindow.dismiss()); + + contentView.setOnKeyListener((v, keyCode, event) -> { + if (keyCode == KeyEvent.KEYCODE_BACK + && event.getRepeatCount() == 0 + && mPopupWindow != null + && mPopupWindow.isShowing()) { mPopupWindow.dismiss(); } - }); - - contentView.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - - if (keyCode == KeyEvent.KEYCODE_BACK - && event.getRepeatCount() == 0 && mPopupWindow != null - && mPopupWindow.isShowing()) { - mPopupWindow.dismiss(); - } - return false; - } + return false; }); } @@ -225,8 +215,12 @@ public class MessageShareUtils { params.putString(QQShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name)); params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE); - mTencent.shareToQQ( - mActivity, params, QqShareListener); + + Activity activity = mActivity.get(); + if (activity != null) { + mTencent.shareToQQ(activity, params, QqShareListener); + } + if (mPopupWindow == null) return; mPopupWindow.dismiss(); } @@ -241,8 +235,12 @@ public class MessageShareUtils { params.putString(QQShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name)); params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); - mTencent.shareToQQ( - mActivity, params, QqShareListener); + + Activity activity = mActivity.get(); + if (activity != null) { + mTencent.shareToQQ(activity, params, QqShareListener); + } + if (mPopupWindow == null) return; mPopupWindow.dismiss(); } @@ -430,38 +428,35 @@ public class MessageShareUtils { public void onBindViewHolder(final ViewHolder holder, int position) { holder.shareLogo.setImageResource(arrLogo[position]); holder.shareLabel.setText(mArrLabel[position]); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - switch (holder.getPosition()) { - case 0: - wechatSahre(); - if (shareType != 2) { + holder.itemView.setOnClickListener(v -> { + switch (holder.getPosition()) { + case 0: + wechatSahre(); + if (shareType != 2) { // activity.finish(); - } - break; - case 1: - wechatMomentsSahre(); - if (shareType != 2) { + } + break; + case 1: + wechatMomentsSahre(); + if (shareType != 2) { // activity.finish(); - } - break; - case 2: - qqSahre(); - break; - case 3: - qZoneSahre(); - break; - case 4: - String savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/ghzhushou/"; - writeBitmap(savePath, "gh-" + new Date().getTime() + ".jpg", shareBm, true); + } + break; + case 2: + qqSahre(); + break; + case 3: + qZoneSahre(); + break; + case 4: + String savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/ghzhushou/"; + writeBitmap(savePath, "gh-" + new Date().getTime() + ".jpg", shareBm, true); - if (mPopupWindow == null) return; - mPopupWindow.dismiss(); + if (mPopupWindow == null) return; + mPopupWindow.dismiss(); // activity.finish(); - break; + break; - } } }); } diff --git a/app/src/main/java/com/gh/common/util/ShareUtils.java b/app/src/main/java/com/gh/common/util/ShareUtils.java index a8a33f6dd7..a407d32ff8 100644 --- a/app/src/main/java/com/gh/common/util/ShareUtils.java +++ b/app/src/main/java/com/gh/common/util/ShareUtils.java @@ -48,6 +48,7 @@ import com.tencent.tauth.Tencent; import com.tencent.tauth.UiError; import java.io.ByteArrayOutputStream; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -95,9 +96,9 @@ public class ShareUtils { private ShareType mShareType; - private Activity mActivity; + private WeakReference mActivity; - private Context mContext; + private Context mContext; // application context //QQ或者QQ空间分享回调处理 public IUiListener QqShareListener = new IUiListener() { @Override @@ -120,8 +121,7 @@ public class ShareUtils { mTencent = Tencent.createInstance(Config.TENCENT_APPID, context); //初始化QQ分享 mIWXAPI = WXAPIFactory.createWXAPI(context, Config.WECHAT_APPID); //初始化微信分享 WbSdk.install(context, new AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", SCOPE)); - // FIXME 此处严重泄露,把Activity Context 存为static????? - mContext = context; + mContext = context.getApplicationContext(); } public static ShareUtils getInstance(Context context) { @@ -149,17 +149,17 @@ public class ShareUtils { public void showShareWindows(Activity activity, View view, String url, String icon, String shareTitle, String shareSummary, ShareType shareType) { if (activity.isFinishing()) return; - this.mActivity = activity; + this.mActivity = new WeakReference<>(activity); this.shareIcon = icon; this.shareUrl = url; this.mSummary = shareSummary; this.mTitle = shareTitle; this.mShareType = shareType; - View contentView = View.inflate(mActivity, R.layout.share_popup_layout, null); + View contentView = View.inflate(activity, R.layout.share_popup_layout, null); contentView.setFocusable(true); contentView.setFocusableInTouchMode(true); - RecyclerView shareRecyclerView = (RecyclerView) contentView.findViewById(R.id.share_rv); + RecyclerView shareRecyclerView = contentView.findViewById(R.id.share_rv); shareRecyclerView.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 10), DisplayUtils.dip2px(mContext, 20), 0); @@ -198,24 +198,16 @@ public class ShareUtils { e.printStackTrace(); } - contentView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + contentView.setOnClickListener(v -> popupWindow.dismiss()); + + contentView.setOnKeyListener((v, keyCode, event) -> { + if (keyCode == KeyEvent.KEYCODE_BACK + && event.getRepeatCount() == 0 + && popupWindow != null + && popupWindow.isShowing()) { popupWindow.dismiss(); } - }); - - contentView.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - - if (keyCode == KeyEvent.KEYCODE_BACK - && event.getRepeatCount() == 0 && popupWindow != null - && popupWindow.isShowing()) { - popupWindow.dismiss(); - } - return false; - } + return false; }); } @@ -241,7 +233,10 @@ public class ShareUtils { params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, shareIcon); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name)); - mTencent.shareToQQ(mActivity, params, QqShareListener); + Activity activity = mActivity.get(); + if (activity != null) { + mTencent.shareToQQ(activity, params, QqShareListener); + } if (mShareType != ShareType.shareGh) { popupWindow.dismiss(); @@ -384,7 +379,11 @@ public class ShareUtils { params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrls); params.putString(QzoneShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name)); - mTencent.shareToQzone(mActivity, params, QqShareListener); + Activity activity = mActivity.get(); + if (activity != null) { + mTencent.shareToQzone(activity, params, QqShareListener); + } + if (mShareType != ShareType.shareGh) { popupWindow.dismiss(); } @@ -435,9 +434,19 @@ public class ShareUtils { //新浪微博分享 private void sinaWeiboShare() { - Intent intent = WeiBoShareActivity.getWeiboshareIntent(mContext, - shareUrl, shareIcon, mTitle, mSummary, mShareType.toString()); - mContext.startActivity(intent); + + Activity activity = mActivity.get(); + if (activity != null) { + Intent intent = WeiBoShareActivity.getWeiboshareIntent( + activity, + shareUrl, + shareIcon, + mTitle, + mSummary, + mShareType.toString()); + activity.startActivity(intent); + } + if (mShareType != ShareType.shareGh) { popupWindow.dismiss(); @@ -508,53 +517,50 @@ public class ShareUtils { public void onBindViewHolder(final ViewHolder holder, int position) { holder.shareLogo.setImageResource(arrLogo[position]); holder.shareLabel.setText(arrLabel[position]); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - switch (holder.getPosition()) { - case 0: - wechatShare(); - break; - case 1: - wechatMomentsShare(); - break; - case 2: - qqShare(); - break; - case 3: - qZoneShare(); - break; - case 4: - sinaWeiboShare(); - break; - case 5: - shortMessageShare(); - break; - case 6: - if (mShareType == ShareType.askInvite) { - copyLink(mTitle + " - 光环助手" + shareUrl); - } else if (mShareType == ShareType.askNormal) { - copyLink(shareUrl); - } else if (mShareType != ShareType.shareGh) { - copyLink(shareUrl); - } else { - try { - Intent data = IntentUtils.getEmailToGHIntent(); - mContext.startActivity(data); - } catch (Exception e) { - e.printStackTrace(); - Utils.toast(mContext, "设备邮件服务异常,分享失败"); - } + holder.itemView.setOnClickListener(v -> { + switch (holder.getPosition()) { + case 0: + wechatShare(); + break; + case 1: + wechatMomentsShare(); + break; + case 2: + qqShare(); + break; + case 3: + qZoneShare(); + break; + case 4: + sinaWeiboShare(); + break; + case 5: + shortMessageShare(); + break; + case 6: + if (mShareType == ShareType.askInvite) { + copyLink(mTitle + " - 光环助手" + shareUrl); + } else if (mShareType == ShareType.askNormal) { + copyLink(shareUrl); + } else if (mShareType != ShareType.shareGh) { + copyLink(shareUrl); + } else { + try { + Intent data = IntentUtils.getEmailToGHIntent(); + mContext.startActivity(data); + } catch (Exception e) { + e.printStackTrace(); + Utils.toast(mContext, "设备邮件服务异常,分享失败"); } - break; - case 7: - if (mShareType != ShareType.shareGh) { - popupWindow.dismiss(); - } else { - copyLink("推荐光环助手,绿色安全的手游加速助手:" + shareUrl); - } - break; - } + } + break; + case 7: + if (mShareType != ShareType.shareGh) { + popupWindow.dismiss(); + } else { + copyLink("推荐光环助手,绿色安全的手游加速助手:" + shareUrl); + } + break; } }); } diff --git a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java index 52d007743f..dc06cf5a40 100644 --- a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java @@ -94,7 +94,7 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { if (ShareUtils.ShareType.askInvite.name().equals(mShareType) || ShareUtils.ShareType.askNormal.name().equals(mShareType)) { bgBitmap = compressBp; } else { - bgBitmap = ShareUtils.getInstance(WeiBoShareActivity.this).addBackGround(compressBp); + bgBitmap = ShareUtils.getInstance(getApplicationContext()).addBackGround(compressBp); } TextObject textObject = new TextObject(); diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt index 0860d36d7d..875a558971 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt @@ -77,7 +77,7 @@ class QuestionsEditPicAdapter(context: Context, viewModel: QuestionEditViewModel private fun selectPic(activity: Activity) { Matisse.from(activity) - .choose(MimeType.ofImage()) + .choose(MimeType.ofAll()) .countable(true) .addFilter(GhMatisseFilter()) .maxSelectable(10) diff --git a/app/src/main/java/com/gh/gamecenter/subject/rows/SubjectRowsFragment.kt b/app/src/main/java/com/gh/gamecenter/subject/rows/SubjectRowsFragment.kt index 51593368d2..c2641af4af 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/rows/SubjectRowsFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/subject/rows/SubjectRowsFragment.kt @@ -148,7 +148,5 @@ class SubjectRowsFragment : BaseFragment() { mSubjectData.filter = filters mListFragment.refreshPage(mSubjectData.filter, mSubjectData.sort) - } - } \ No newline at end of file