package cn.bidaround.youtui_template;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
import cn.bidaround.point.YtPoint;
import cn.bidaround.ytcore.YtCore;
import cn.bidaround.ytcore.YtShareListener;
import cn.bidaround.ytcore.data.KeyInfo;
import cn.bidaround.ytcore.data.ShareData;
import cn.bidaround.ytcore.data.YtPlatform;
import cn.bidaround.ytcore.util.CheckConfig;
import cn.bidaround.ytcore.util.CheckShareData;
import cn.bidaround.ytcore.util.Constant;
import cn.bidaround.ytcore.util.Util;
import cn.bidaround.ytcore.util.YtToast;
/**
* 友推模板,用于使用友推分享界面的开发者
*
* @author youtui
* @since 14/6/19
*
*/
public class YtTemplate {
private Activity act;
private int youTuiViewType;
private HashMap<YtPlatform, YtShareListener> listenerMap = new HashMap<YtPlatform, YtShareListener>();
private HashMap<YtPlatform, ShareData> shareDataMap = new HashMap<YtPlatform, ShareData>();
private ShareData shareData;
private ShareData capData;
private ArrayList<String> enList = new ArrayList<String>();
/**分享后分享框是否消失*/
private boolean dismissAfterShare;
private boolean screencapVisible = true;
private boolean hasAct;
private int popwindowHeight;
private static boolean isOnAction = false;
private int animationStyle = 0;
private static String actionName = null;
/** 友推默认的动画效果 */
public static final int ANIMATIONSTYLE_DEFAULT = 0;
/** 系统,无动画效果 */
public static final int ANIMATIONSTYLE_SYSTEM = 1;
public YtTemplate(Activity act, int youTuiViewType, boolean hasAct) {
this.act = act;
this.youTuiViewType = youTuiViewType;
this.hasAct = hasAct;
enList.addAll(KeyInfo.enList);
}
/**
* 为单独的平台添加分享数据
*
* @param platform
* @param shareData
*/
public void addData(YtPlatform platform, ShareData shareData) {
shareDataMap.put(platform, shareData);
}
/**
* 为所有的平台添加分享数据
*
* @param platform
* @param shareData
*/
public void addDatas(ShareData shareData) {
if (KeyInfo.enList != null && KeyInfo.enList.size() > 0) {
for (String str : KeyInfo.enList) {
shareDataMap.put(YtPlatform.getPlatformByName(str), shareData);
}
}
}
/**
* 获取该平台在分享框的位置
*
* @param platform
* @return
*/
public int getIndex(YtPlatform platform) {
return enList.indexOf(platform.getName());
}
public YtPlatform getPlatform(int index) {
String formName = enList.get(index);
for (YtPlatform form : YtPlatform.values()) {
if (formName != null && formName.equals(form.getName()))
return form;
}
return null;
}
public YtPlatform getPlatform(int index, int pageIndex, int itemAmount) {
if (itemAmount == Integer.MAX_VALUE) {
itemAmount = 0;
}
return getPlatform(index + pageIndex * itemAmount);
}
/**
* 获取指定平台的分享信息
*
* @param platform
* @return 指定平台的分享信息
*/
public ShareData getData(YtPlatform platform) {
return shareDataMap.get(platform);
}
/** 移除平台 */
public void removePlatform(YtPlatform platform) {
enList.remove(platform.getName());
}
/**
* 添加分享监听
*
* @param platform
* @param listener
*/
public void addListener(YtPlatform platform, YtShareListener listener) {
listenerMap.put(platform, listener);
}
/**
* 给所有平台添加分享监听
*
* @param platform
* @param listener
*/
public void addListeners(YtShareListener listener) {
if (KeyInfo.enList != null && KeyInfo.enList.size() > 0) {
for (String str : KeyInfo.enList) {
listenerMap.put(YtPlatform.getPlatformByName(str), listener);
}
}
}
/**
* 获得监听事件
*/
public YtShareListener getListener(YtPlatform platform) {
return listenerMap.get(platform);
}
/**如果用户设置有积分,刷新积分项*/
public void refreshPoint(){
if(hasAct){
new Thread(){
public void run() {
YtPoint.refresh(act);
};
}.start();
}
}
/** 调出分享界面 */
public void show() {
if(YtCore.getInstance().isCheckConfig()){
String checkConfigError = YtCore.getInstance().getCheckConfigError();
if(checkConfigError != null){
Toast.makeText(act, checkConfigError, Toast.LENGTH_LONG).show();
return;
}
}
refreshPoint();
// 判断该应用是否设置了活动
if (!isOnAction())
getActionInfo(act);
if (youTuiViewType == YouTuiViewType.BLACK_POPUP)
new BlackGridTemplate(act, hasAct, this, shareData, enList).show();
else if (youTuiViewType == YouTuiViewType.WHITE_LIST)
new WhiteListTemplate(act, hasAct, this, shareData, enList).show();
else if (youTuiViewType == YouTuiViewType.WHITE_GRID)
new WhiteGridTemplate(act, hasAct, this, shareData, enList).show();
else if(youTuiViewType == YouTuiViewType.WHITE_GRID_CENTER)
new WhiteGridCenterTemplate(act, hasAct, this, shareData, enList).show();
}
/** 调出截屏分享界面 */
public void showScreenCap() {
refreshPoint();
// 判断该应用是否设置了活动
if (!isOnAction()) {
getActionInfo(act);
}
TemplateUtil.GetandSaveCurrentImage(act, false);
Intent it = new Intent(act, ScreenCapEditActivity.class);
it.putExtra("viewType", getViewType());
if (shareData != null) {
if (shareData.isAppShare()) {
it.putExtra("target_url", YtCore.getInstance().getTargetUrl());
} else {
it.putExtra("target_url", shareData.getTargetUrl());
}
}
it.putExtra("capdata", getCapData());
it.putExtra("shareData", shareData);
act.startActivity(it);
}
/** 调出分享界面,分享的图片为截屏(替换分享内容中的图片) */
public void showScreenCapShare() {
refreshPoint();
// 判断该应用是否设置了活动
if (!isOnAction()) {
getActionInfo(act);
}
if (youTuiViewType == YouTuiViewType.BLACK_POPUP) {
new BlackGridTemplate(act, hasAct, this, shareData, enList).show();
} else if (youTuiViewType == YouTuiViewType.WHITE_LIST) {
new WhiteListTemplate(act,hasAct, this, shareData, enList).show();
} else if (youTuiViewType == YouTuiViewType.WHITE_GRID) {
new WhiteGridTemplate(act, hasAct, this, shareData, enList).show();
}
}
public String getScreenCapPath() {
return TemplateUtil.getSDCardPath() + "/youtui/yt_screen.png";
}
/**
* 获取分享模板的类型
*
* @return
*/
public int getViewType() {
return youTuiViewType;
}
/**
* 关闭主分享界面
*/
public static void dismiss() {
if(YTBasePopupWindow.getInstance()!=null){
YTBasePopupWindow.getInstance().dismiss();
}
}
/**
* YtTemplate初始化,传入用户id,开发者应该在程序的入口调用,初始化后后续操作才能正常进行
*
* @param act
*/
public static void init(final Activity actvity, String appUserId) {
YtCore.init(actvity, appUserId);
YtPoint.setDefaultListener();
// 判断是否有活动进行
getActionInfo(actvity);
}
/**
* YtTemplate初始化,开发者应该在程序的入口调用,初始化后后续操作才能正常进行
* @param act
*/
public static void init(final Activity actvity) {
init(actvity, null);
}
private static void getActionInfo(final Activity act) {
new Thread() {
public void run() {
String response = YtPoint.isOnAction();
if (response != null) {
try {
JSONObject json = new JSONObject(response);
isOnAction = json.getBoolean("success");
if (isOnAction) {
JSONObject object = json.getJSONObject("object");
setActionName(object.getString("activityName"));
Intent it = new Intent(Constant.BROADCAST_ISONACTION);
act.sendBroadcast(it);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
}.start();
}
/**
* 在应用出口调用,释放内存
*/
public static void release(Context context) {
YtCore.release(context);
}
/**
* 设置是否显示分享成功,分享失败,分享取消的提示
*
* @param visible
*/
public void setToastVisible(boolean visible) {
YtToast.visible = visible;
}
/**
* 的待分享数据,如果开发者没有使用addData(YtPlatform platform, ShareData
* shareData)方法为特定平台设置待分享数据,则平台分享的内容为此处设置的内容
*
* @param shareD
* 该方法用于设置所有平台ata
*/
public void setShareData(ShareData shareData) {
this.shareData = shareData;
if(YtCore.getInstance().isCheckConfig())
CheckShareData.check(shareData);
}
/**
* 获得分享数据
*
* @return
*/
public ShareData getCapData() {
return capData;
}
/**
* 设置分享数据
*
* @param capData
*/
public void setCapData(ShareData capData) {
this.capData = capData;
}
/**
* 是否显示截屏
*
* @return
*/
public boolean isScreencapVisible() {
return screencapVisible;
}
/**
* 设置截屏按钮是否可见
*
* @param screencapVisible
*/
public void setScreencapVisible(boolean screencapVisible) {
this.screencapVisible = screencapVisible;
}
/**
* 判断是否有活动
*
* @return
*/
public boolean isHasAct() {
return hasAct;
}
/**
* 设置是否有活动
*
* @param hasAct
*/
public void setHasAct(boolean hasAct) {
this.hasAct = hasAct;
}
/**
* 获取分享框高度
*
* @return
*/
public int getPopwindowHeight() {
return popwindowHeight;
}
/**
* 设置弹出分享框的高度
*
* @param popwindowHeight
*/
public void setPopwindowHeight(int popwindowHeight) {
this.popwindowHeight = popwindowHeight;
}
public boolean isOnAction() {
return isOnAction;
}
public void setOnAction(boolean isOnAction) {
YtTemplate.isOnAction = isOnAction;
}
/**
* 获得动画效果设置
*
* @return
*/
public int getAnimationStyle() {
return animationStyle;
}
/**
* 设置动画效果 ANIMATIONSTYLE_DEFAULT=0;ANIMATIONSTYLE_SYSTEM=1
*
* @param animationStyle
*/
public void setAnimationStyle(int animationStyle) {
this.animationStyle = animationStyle;
}
public static String getActionName() {
return actionName;
}
public static void setActionName(String actionName) {
YtTemplate.actionName = actionName;
}
/**
* 微信朋友圈分享是否将内容追加到标题;微信分享链接时,只会显示图片和title中的文字描述,文字只显示标题会显得内容很乏味
*/
public void setWxCircleTitleAppendText(boolean isWxTextAsTitle) {
YtCore.isWxCircleTextAsTitle = isWxTextAsTitle;
}
public boolean isDismissAfterShare() {
return dismissAfterShare;
}
public void setDismissAfterShare(boolean dismissAfterShare) {
this.dismissAfterShare = dismissAfterShare;
}
public ArrayList<String> getEnList() {
return enList;
}
public void setEnList(ArrayList<String> enList) {
this.enList = enList;
}
public static void checkConfig(boolean isCheckConfig) {
YtCore.checkConfig(isCheckConfig);
if(isCheckConfig){
if(YtCore.getInstance().isCheckConfig())
new CheckConfig(YtCore.getAppContext()).check();
}
else
Util.clearCheckConfigTime();
}
public void setTemplateType(int youTuiViewType){
this.youTuiViewType = youTuiViewType;
}
}