@Override
 public void onLocationUpdate(LocationInfo location, long costTime, int locator) {
   if (location == null) {
     return;
   }
   latitude = location.getLatitude();
   longitude = location.getLongitude();
   locationName = location.toString();
   userPrefs.setCurrentLocation(longitude, latitude, locationName);
   locationTextView.setText(String.format("%s (%.3f, %.3f)", locationName, longitude, latitude));
   weatherUpdated = false;
   satelliteUpdated = false;
   StatManager.getInstance().sendLocationStat(location, costTime, locator);
   updateButton.performClick();
 }
 @Override
 public void onTaskFinished(Object sender, TaskFinishedEvent event) {
   Log.d("deepsky", "Task finished");
   TaskContext taskContext = event.getContext();
   String response = (String) taskContext.get(WeatherTask.KEY_RESULT);
   long totalDelay =
       (Long) taskContext.get(Task.KEY_END_TIME)
           - (Long) taskContext.get(Task.KEY_START_TIME);
   long serverDelay = -1;
   try {
     JSONObject jsonObject = new JSONObject(response);
     serverDelay = jsonObject.getLong("delay");
     createWeatherView(jsonObject.getJSONObject("data"), true);
   } catch (JSONException e) {
     Toast.makeText(getApplicationContext(), R.string.toast_data_error, Toast.LENGTH_SHORT)
         .show();
   } finally {
     refreshDialog.dismiss();
   }
   StatManager.getInstance().sendWeatherStat(totalDelay, serverDelay);
 }
 @Override
 public void onTaskFinished(Object sender, TaskFinishedEvent event) {
   Log.d("deepsky", "Task finished");
   TaskContext taskContext = event.getContext();
   String response = (String) taskContext.get(SatelliteTask.KEY_RESULT);
   long delay =
       (Long) taskContext.get(Task.KEY_END_TIME)
           - (Long) taskContext.get(Task.KEY_START_TIME);
   cacheManager.createSatelliteCache(longitude, latitude, response);
   try {
     JSONObject data = new JSONObject(response);
     SatelliteView sv = new SatelliteView(context, satelliteView);
     sv.setData(data);
     satelliteUpdated = true;
   } catch (JSONException e) {
     Toast.makeText(context, R.string.toast_data_error, Toast.LENGTH_SHORT).show();
   } finally {
     refreshDialog.dismiss();
   }
   StatManager.getInstance().sendSatelliteStat(delay);
 }
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.context = this;
    this.cacheManager = CacheManager.getInstance(context);
    this.reportMode = MODE_WEATHER;
    this.exitTime = 0L;

    this.reportsViewPager = (CustomerViewPager) findViewById(R.id.viewpager_reports);
    this.updateButton = (ImageButton) findViewById(R.id.button_update);
    this.locationButton = (ImageButton) findViewById(R.id.button_location);
    this.settingsButton = (ImageButton) findViewById(R.id.button_settings);
    this.switchReportButton = (ImageButton) findViewById(R.id.button_switch_report);
    this.updatetimeTextView = (TextView) findViewById(R.id.textview_updatetime);
    this.locationTextView = (TextView) findViewById(R.id.textview_location);

    LayoutInflater inflater = LayoutInflater.from(context);
    weatherView = inflater.inflate(R.layout.linearlayout_weather, null);
    satelliteView = inflater.inflate(R.layout.linearlayout_satellite, null);
    this.forecastScrollView =
        (HorizontalScrollView) weatherView.findViewById(R.id.scrollview_forecast);
    this.templabelTextView = (TextView) weatherView.findViewById(R.id.textview_templabel);

    reportsViewList = new ArrayList<View>();
    reportsViewList.add(weatherView);
    reportsViewList.add(satelliteView);

    reportsViewPager.setScrollable(false);
    reportsViewPager.setSwitchDuration(700);
    reportsViewPager.setAdapter(pagerAdapter);

    this.refreshDialog = DialogManager.createRefreshDialog(context);
    loadSettings();
    StatManager.getInstance().sendStartApp(null);
    UmengUpdateAgent.update(this);
  }