content: /*
   * 官网地站:http://www.mob.com
   * 技术支持QQ: 4006852216
   * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）
   *
   * Copyright (c) 2013年 mob.com. All rights reserved.
   */
  
  package cn.sharesdk.onekeyshare.themes.classic;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  
  import android.graphics.drawable.ColorDrawable;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.view.ViewGroup.LayoutParams;
  import android.view.animation.Animation;
  import android.view.animation.TranslateAnimation;
  import android.widget.LinearLayout;
  import android.widget.TextView;
  import cn.sharesdk.framework.CustomPlatform;
  import cn.sharesdk.framework.Platform;
  import cn.sharesdk.framework.Platform.ShareParams;
  import cn.sharesdk.framework.ShareSDK;
  import cn.sharesdk.onekeyshare.CustomerLogo;
  import cn.sharesdk.onekeyshare.OnekeySharePage;
  import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;
  
  import com.mob.tools.gui.MobViewPager;
  import com.mob.tools.utils.R;
  
  /** 九宫格的抽象类 */
  public abstract class PlatformPage extends OnekeySharePage {
  	private ClassicTheme impl;
  	/** 点击九格宫，展示编辑界面，要执行的子线程 */
  	private Runnable beforeFinish;
  	/** 九宫格显示时的动画 */
  	private Animation animShow;
  	/** 九宫格隐藏时的动画 */
  	private Animation animHide;
  	private LinearLayout llPanel;
  	private boolean finished;
  
  	public PlatformPage(OnekeyShareThemeImpl impl) {
  		super(impl);
  		this.impl = R.forceCast(impl);
  	}
  
  	public void onCreate() {
  		activity.getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000));
  		initAnims();
  
  		LinearLayout llPage = new LinearLayout(activity);
  		llPage.setOrientation(LinearLayout.VERTICAL);
  		activity.setContentView(llPage);
  
  		TextView vTop = new TextView(activity);
  		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
  				LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
  		lp.weight = 1;
  		vTop.setOnClickListener(new OnClickListener() {
  			public void onClick(View v) {
  				finish();
  			}
  		});
  		llPage.addView(vTop, lp);
  
  		llPanel = new LinearLayout(activity);
  		llPanel.setOrientation(LinearLayout.VERTICAL);
  		lp = new LinearLayout.LayoutParams(
  				LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
  		llPanel.setAnimation(animShow);
  		llPage.addView(llPanel, lp);
  
  		MobViewPager mvp = new MobViewPager(activity);
  		ArrayList<Object> cells = collectCells();
  		PlatformPageAdapter adapter = newAdapter(cells);
  		lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getPanelHeight());
  		llPanel.addView(mvp, lp);
  
  		IndicatorView vInd = new IndicatorView(activity);
  		lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getBottomHeight());
  		llPanel.addView(vInd, lp);
  
  		vInd.setScreenCount(adapter.getCount());
  		vInd.onScreenChange(0, 0);
  		adapter.setIndicator(vInd);
  		mvp.setAdapter(adapter);
  	}
  
  	protected abstract PlatformPageAdapter newAdapter(ArrayList<Object> cells);
  
  	protected ArrayList<Object> collectCells() {
  		ArrayList<Object> cells = new ArrayList<Object>();
  
  		Platform[] platforms = ShareSDK.getPlatformList();
  		if (platforms == null) {
  			platforms = new Platform[0];
  		}
  		HashMap<String, String> hides = getHiddenPlatforms();
  		if (hides == null) {
  			hides = new HashMap<String, String>();
  		}
  		for (Platform p : platforms) {
  			if (!hides.containsKey(p.getName())) {
  				cells.add(p);
  			}
  		}
  
  		ArrayList<CustomerLogo> customers = getCustomerLogos();
  		if (customers != null && customers.size() > 0) {
  			cells.addAll(customers);
  		}
  
  		return cells;
  	}
  
  	public final void showEditPage(final Platform platform) {
  		beforeFinish = new Runnable() {
  			public void run() {
  				boolean isSilent = isSilent();
  				boolean isCustomPlatform = platform instanceof CustomPlatform;
  				boolean isUseClientToShare = isUseClientToShare(platform);
  				if (isSilent || isCustomPlatform || isUseClientToShare) {
  					shareSilently(platform);
  				} else {
  					ShareParams sp = formateShareData(platform);
  					if (sp != null) {
  						// 编辑分享内容的统计
  						ShareSDK.logDemoEvent(3, null);
  						if (getCustomizeCallback() != null) {
  							getCustomizeCallback().onShare(platform, sp);
  						}
  						impl.showEditPage(activity, platform, sp);
  					}
  				}
  			}
  		};
  		finish();
  	}
  
  	public final void performCustomLogoClick(final View v, final CustomerLogo logo) {
  		beforeFinish = new Runnable() {
  			public void run() {
  				logo.listener.onClick(v);
  			}
  		};
  		finish();
  	}
  
  	private void initAnims() {
  		animShow = new TranslateAnimation(
  				Animation.RELATIVE_TO_SELF, 0,
  				Animation.RELATIVE_TO_SELF, 0,
  				Animation.RELATIVE_TO_SELF, 1,
  				Animation.RELATIVE_TO_SELF, 0);
  		animShow.setDuration(300);
  
  		animHide = new TranslateAnimation(
  				Animation.RELATIVE_TO_SELF, 0,
  				Animation.RELATIVE_TO_SELF, 0,
  				Animation.RELATIVE_TO_SELF, 0,
  				Animation.RELATIVE_TO_SELF, 1);
  		animHide.setDuration(300);
  	}
  
  	public boolean onFinish() {
  		if (finished) {
  			finished = false;
  			return false;
  		}
  
  		animHide.setAnimationListener(new Animation.AnimationListener() {
  			public void onAnimationStart(Animation animation) {
  
  			}
  
  			public void onAnimationRepeat(Animation animation) {
  
  			}
  
  			public void onAnimationEnd(Animation animation) {
  				if (beforeFinish == null) {
  					// 取消分享菜单的统计
  					ShareSDK.logDemoEvent(2, null);
  				} else {
  					beforeFinish.run();
  					beforeFinish = null;
  				}
  
  				finished = true;
  				finish();
  			}
  		});
  		llPanel.clearAnimation();
  		llPanel.setAnimation(animHide);
  		llPanel.setVisibility(View.GONE);
  		return true;
  	}
  
  }
  