package com.thankcreate.care.lab; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Date; import java.util.List; import org.achartengine.chart.PointStyle; import org.achartengine.model.CategorySeries; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.renderer.SimpleSeriesRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import com.markupartist.android.widget.ActionBar; import com.markupartist.android.widget.ActionBar.Action; import com.thankcreate.care.App; import com.thankcreate.care.BaseActivity; import com.thankcreate.care.R; import com.thankcreate.care.status.StatusPostActivity; import com.thankcreate.care.status.StatusDetailActivity; import com.thankcreate.care.tool.misc.DateTool; import com.thankcreate.care.tool.misc.MiscTool; import com.thankcreate.care.tool.misc.StringTool; import com.thankcreate.care.tool.ui.ToastHelper; import com.thankcreate.care.viewmodel.EntryType; import com.umeng.analytics.MobclickAgent; import com.weibo.sdk.android.Oauth2AccessToken; import com.weibo.sdk.android.api.StatusesAPI; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Typeface; import android.os.Bundle; import android.util.Log; import android.view.View; /** * 这个类主要是用来实现所有奇怪的地方页面共用的actionbar上的分享功能 * @author ThankCreate */ public abstract class LabShareActivity extends BaseActivity { protected ActionBar actionBar; // 在alert框中选中的那个发布源的索引值 private int sourceSelected = 0; private int[] typeArray = {EntryType.SinaWeibo, EntryType.Renren, EntryType.Douban}; private String screenshotURL; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int tp = MiscTool.getFirstFoundLoginType(); for(int i = 0; i< typeArray.length; i++) { if(typeArray[i] == tp) sourceSelected = i; } } /** * 子类的initActionBar方法必须先调用此父类方法 */ protected void initActionBar() { actionBar = (ActionBar) findViewById(R.id.actionbar); actionBar.addActionRight(new Action() { @Override public void performAction(View view) { shareClicked(); MobclickAgent.onEvent(LabShareActivity.this, "LabShareClick"); } @Override public int getDrawable() { return R.drawable.thumb_share; } }); addActionBarBackButton(actionBar); } protected String getNameForShort(String rawName) { try { if(StringTool.isNullOrEmpty(rawName)) return ""; if(rawName.length() <= 7) return rawName; return rawName.substring(0,7) + "..."; } catch (Exception e) { return ""; } } private void takeScreenShot() { Bitmap bitmap; View v1 = actionBar.getRootView(); v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); Date date = new Date(); String sigDate = DateTool.getDateSig(date); File myDir = App.getAppContext().getCacheDir(); File imageFile = new File(myDir , sigDate + ".png"); screenshotURL = imageFile.toString(); try { FileOutputStream fout = new FileOutputStream(imageFile); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fout); fout.flush(); fout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); screenshotURL = ""; } catch (IOException e) { e.printStackTrace(); screenshotURL = ""; } } private void shareClicked() { preShare(); takeScreenShot(); new AlertDialog.Builder(this) .setIcon(R.drawable.thumb_share) .setTitle("选择发布源") .setSingleChoiceItems(R.array.array_post_source_choose, sourceSelected, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { sourceSelected = whichButton; } }) .setPositiveButton(R.string.dialog_confirm, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { if(sourceSelected == 0) shareToSinaWeibo(); else if(sourceSelected == 1) shareToRenren(); else if(sourceSelected == 2) shareToDouban(); } }) .setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Log.i("btnIndex", String.valueOf(whichButton)); } }) .create().show(); } private void shareToSinaWeibo() { if(!MiscTool.isAuthValid(EntryType.SinaWeibo)) { ToastHelper.show("新浪微博尚未登陆,或者登陆已过期~"); return; } gotoStatusPostPage(EntryType.SinaWeibo); } private void shareToRenren() { if(!MiscTool.isAuthValid(EntryType.Renren)) { ToastHelper.show("人人帐号尚未登陆,或者登陆已过期~"); return; } gotoStatusPostPage(EntryType.Renren); } private void shareToDouban() { if(!MiscTool.isAuthValid(EntryType.Douban)) { ToastHelper.show("豆瓣帐号尚未登陆,或者登陆已过期~"); return; } gotoStatusPostPage(EntryType.Douban); } private void gotoStatusPostPage(int type) { Intent intent = new Intent(); intent.setClass(this, StatusPostActivity.class); intent.putExtra("type", type); intent.putExtra("preContent", getShareText(type)); intent.putExtra("imageURL", screenshotURL); startActivity(intent); } protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); setRenderer(renderer, colors, styles); return renderer; } protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) { renderer.setAxisTitleTextSize(16); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(15); renderer.setPointSize(5f); renderer.setMargins(new int[] { 20, 30, 15, 20 }); int length = colors.length; for (int i = 0; i < length; i++) { XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(colors[i]); r.setPointStyle(styles[i]); renderer.addSeriesRenderer(r); } } protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setAxisTitleTextSize(20); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(20); renderer.setLegendTextSize(20); int length = colors.length; for (int i = 0; i < length; i++) { SimpleSeriesRenderer r = new SimpleSeriesRenderer(); r.setColor(colors[i]); renderer.addSeriesRenderer(r); } return renderer; } protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) { renderer.setChartTitle(title); renderer.setXTitle(xTitle); renderer.setYTitle(yTitle); renderer.setXAxisMin(xMin); renderer.setXAxisMax(xMax); renderer.setYAxisMin(yMin); renderer.setYAxisMax(yMax); renderer.setAxesColor(axesColor); renderer.setLabelsColor(labelsColor); } protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) { XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); int length = titles.length; for (int i = 0; i < length; i++) { CategorySeries series = new CategorySeries(titles[i]); double[] v = values.get(i); int seriesLength = v.length; for (int k = 0; k < seriesLength; k++) { series.add(v[k]); } dataset.addSeries(series.toXYSeries()); } return dataset; } private String getShareText(int type) { if (type == EntryType.SinaWeibo) { return getShareTextSinaWeibo(); } else if (type == EntryType.Renren) { return getShareTextRenren(); } else if (type == EntryType.Douban) { return getShareTextDouban(); } return ""; } protected void preShare() { // default do nothing } protected abstract String getShareTextSinaWeibo(); protected abstract String getShareTextRenren(); protected abstract String getShareTextDouban(); }