package com.thankcreate.care.lab;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer.Orientation;
import org.achartengine.renderer.XYSeriesRenderer;
import com.thankcreate.care.App;
import com.thankcreate.care.R;
import com.thankcreate.care.R.layout;
import com.thankcreate.care.R.menu;
import com.thankcreate.care.tool.misc.MathTool;
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.thankcreate.care.viewmodel.ItemViewModel;
import com.umeng.analytics.MobclickAgent;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Menu;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class LabTimelineActivity extends LabShareActivity {
private LinearLayout layout;
private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();
private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
private GraphicalView mChartView;
private ImageView imageViewAvatar;
private TextView textName;
private TextView textAward;
String herName;
String avatar;
int param1;
int param2;
int param3;
int param4;
String mostActiveTime;
String award;
int max;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lab_timeline);
initActionBar();
initControl();
analysis();
MobclickAgent.onEvent(this, "LabTimelineActivity");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_lab_timeline, menu);
return false;
}
@Override
protected void initActionBar() {
super.initActionBar();
actionBar.setTitle("发贴时段");
}
private void initControl() {
layout = (LinearLayout) findViewById(R.id.chart);
imageViewAvatar = (ImageView) findViewById(R.id.lab_avatar);
textName = (TextView) findViewById(R.id.lab_name);
textAward = (TextView) findViewById(R.id.lab_award);
}
private void analysis() {
Boolean res = getData();
if(res)
refreshChart();
}
private boolean getData()
{
String myName= MiscTool.getMyName();
herName = MiscTool.getHerName();
if(StringTool.isNullOrEmpty(myName))
{
ToastHelper.show("请先至少登陆一个帐户");
finish();
return false;
}
if(StringTool.isNullOrEmpty(herName))
{
ToastHelper.show("请先至少关注一个帐户");
finish();
return false;
}
textName.setText(herName);
App.getDrawableManager().fetchDrawableOnThread(MiscTool.getHerIconUrl(), imageViewAvatar);
for(ItemViewModel item : App.mainViewModel.items)
{
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(item.time);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (hour >= 8 && hour < 12)
{
param1++;
}
else if (hour >= 12 && hour < 18)
{
param2++;
}
else if (hour >= 18 && hour < 24)
{
param3++;
}
else if (hour >= 0 && hour < 8)
{
param4++;
}
}
max = MathTool.getMaxValue(new int[]{param1, param2, param3, param4});
mostActiveTime = MathTool.getMaxLable(
new String[]{"上午", "下午" , "晚上", "凌晨"},
new int[]{param1, param2, param3, param4});
award = MathTool.getMaxLable(
new String[]{"正常得近乎无聊", "睡完午觉就无所事事的家伙" , "月色下的吟游者", "程序员"},
new int[]{param1, param2, param3, param4});
textAward.setText(award);
return true;
}
private void refreshChart() {
String[] titles = new String[] { "发贴数" };
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { param1, param2, param3, param4 });
int[] colors = new int[] {Color.argb(0xBB, 0xFF, 0x9D, 0x00) };
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND };
XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
setChartSettings(renderer, " ",
"时间段", "发贴数", 0.5, 4.5, 0, max + 5, Color.GRAY,
Color.LTGRAY);
renderer.setXLabels(1);
renderer.setYLabels(4);
renderer.setBarSpacing(0.5f);
renderer.setYLabelsAlign(Align.LEFT);
renderer.addXTextLabel(1, "上午");
renderer.addXTextLabel(2, "下午");
renderer.addXTextLabel(3, "晚上");
renderer.addXTextLabel(4, "凌晨");
renderer.setOrientation(Orientation.HORIZONTAL);
renderer.setClickEnabled(false);
renderer.setZoomEnabled(false,false);
renderer.setPanEnabled(false,false);
renderer.setAntialiasing(false);
renderer.setShowLegend(false);
renderer.setShowGrid(true);
renderer.setPointSize(10);
// top left bottom right
renderer.setMargins(new int[] { 5, 20, 5, 20 });
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = (XYSeriesRenderer) renderer.getSeriesRendererAt(i);
r.setLineWidth(5);
r.setFillPoints(true);
}
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.TRANSPARENT);
renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
mChartView = ChartFactory.getLineChartView(this,
buildBarDataset(titles, values), renderer);
mChartView
.setBackgroundResource(R.drawable.bitmap_bkg_tile_timeline);
layout.setBackgroundResource(R.drawable.bitmap_bkg_tile_timeline);
layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
}
@Override
protected String getShareTextSinaWeibo() {
int pencentage = 0;
try {
// 因为崩溃上报发现这里可能会有除0异常,所以最好还是catch起来
pencentage = max * 100 / (param1 + param2 + param3 + param4);
} catch (Exception e) {
pencentage = 0;
}
herName = MiscTool.getHerName(EntryType.SinaWeibo);
String preContentString = String.format("据消息人士透露,@%s 最活跃的时间是在%s,此段时间中的发贴量占全部发贴的%d%%, 获得了成就【%s】",
herName, mostActiveTime, pencentage, award);
return preContentString;
}
@Override
protected String getShareTextRenren() {
int pencentage = max * 100 / (param1 + param2 + param3 + param4);
herName = MiscTool.getHerName(EntryType.Renren);
String herID = MiscTool.getHerID(EntryType.Renren);
String preContentString = String.format("据消息人士透露,@%s(%s) 最活跃的时间是在%s,此段时间中的发贴量占全部发贴的%d%%, 获得了成就【%s】",
herName, herID, mostActiveTime, pencentage, award);
return preContentString;
}
@Override
protected String getShareTextDouban() {
int pencentage = max * 100 / (param1 + param2 + param3 + param4);
herName = MiscTool.getHerName(EntryType.Douban);
String preContentString = String.format("据消息人士透露,@%s 最活跃的时间是在%s,此段时间中的发贴量占全部发贴的%d%%, 获得了成就【%s】",
herName, mostActiveTime, pencentage, award);
return preContentString;
}
}