package com.tianxia.app.healthworld.infomation; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.View.OnCreateContextMenuListener; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.feedback.NotificationType; import com.feedback.UMFeedbackService; import com.tianxia.app.healthworld.AppApplication; import com.tianxia.app.healthworld.AppApplicationApi; import com.tianxia.app.healthworld.cache.ConfigCache; import com.tianxia.app.healthworld.model.StatusInfo; import com.tianxia.app.healthworld.R; import com.tianxia.lib.baseworld.activity.AdapterActivity; import com.tianxia.lib.baseworld.BaseApplication; import com.tianxia.lib.baseworld.main.MainTabFrame; import com.tianxia.lib.baseworld.sync.http.AsyncHttpClient; import com.tianxia.lib.baseworld.sync.http.AsyncHttpResponseHandler; import com.tianxia.lib.baseworld.upgrade.AppUpgradeService; import com.tianxia.lib.baseworld.utils.DownloadUtils; import com.tianxia.lib.baseworld.utils.EmptyViewUtils; import com.tianxia.lib.baseworld.utils.FileUtils; import com.tianxia.lib.baseworld.utils.PreferencesUtils; import com.tianxia.lib.baseworld.utils.StringUtils; import com.tianxia.lib.baseworld.widget.RefreshListView; import com.tianxia.lib.baseworld.widget.RefreshListView.RefreshListener; import com.tianxia.widget.image.SmartImageView; import com.waps.AppConnect; import com.waps.AdView; import com.waps.UpdatePointsNotifier; import java.io.File; import java.text.DateFormatSymbols; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class InfomationTabActivity extends AdapterActivity<StatusInfo> implements RefreshListener, UpdatePointsNotifier{ private SmartImageView mItemAvatar; private TextView mItemName; private TextView mItemDate; private TextView mItemText; private SimpleDateFormat mSinaWeiboDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", new DateFormatSymbols(Locale.US)); private SimpleDateFormat mSimpleDateFormat; private int pageIndex = 0; private AdView mAdView; private int mLatestVersionCode = 0; private String mLatestVersionUpdate = null; private String mLatestVersionDownload = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setInfomationList(); UMFeedbackService.enableNewReplyNotification(this, NotificationType.NotificationBar); mSimpleDateFormat = new SimpleDateFormat("MM-dd hh:mm"); //获取积分 AppConnect.getInstance(this).getPoints(this); listView .setOnCreateContextMenuListener(this); } private void setInfomationList() { String cacheConfigString = ConfigCache.getUrlCache(AppApplicationApi.INFOMATION_URL); if (cacheConfigString != null) { showInfomationList(cacheConfigString); checkNewVersion(); } else { AsyncHttpClient client = new AsyncHttpClient(); client.get(AppApplicationApi.INFOMATION_URL, new AsyncHttpResponseHandler(){ @Override public void onStart() { } @Override public void onSuccess(String result){ ConfigCache.setUrlCache(result, AppApplicationApi.INFOMATION_URL); showInfomationList(result); checkNewVersion(); } @Override public void onFailure(Throwable arg0) { listView.setAdapter(null); showFailEmptyView(); } }); } } private void moreInfomationList(int pageIndex) { String cacheConfigString = ConfigCache.getUrlCache(AppApplicationApi.INFOMATION_PAGE_URL + pageIndex + ".json"); if (cacheConfigString != null) { showInfomationList(cacheConfigString); } else { AsyncHttpClient client = new AsyncHttpClient(); client.get(AppApplicationApi.INFOMATION_PAGE_URL + pageIndex + ".json", new AsyncHttpResponseHandler(){ @Override public void onSuccess(String result){ showInfomationList(result); ((RefreshListView)listView).finishFootView(); } @Override public void onFailure(Throwable arg0) { ((RefreshListView)listView).finishFootView(); Toast.makeText(InfomationTabActivity.this, R.string.app_loading_fail, Toast.LENGTH_SHORT).show(); arg0.printStackTrace(); } }); } } private void showInfomationList(String result) { try { JSONObject statusConfig = new JSONObject(result); mLatestVersionCode = statusConfig.optInt("version-code"); mLatestVersionUpdate = statusConfig.optString("version-update"); mLatestVersionDownload = AppApplication.mDomain + statusConfig.optString("version-download"); if (mLatestVersionDownload != null) { AppApplication.mApkDownloadUrl = mLatestVersionDownload; } JSONArray statusList = statusConfig.getJSONArray("statuses"); StatusInfo statusInfo = null; for (int i = statusList.length() - 1; i >= 0; i--) { statusInfo = new StatusInfo(); statusInfo.created = statusList.getJSONObject(i).optString("created_at"); statusInfo.avatar = statusList.getJSONObject(i).getString("avatar"); statusInfo.name = statusList.getJSONObject(i).getString("name"); statusInfo.author = statusList.getJSONObject(i).getString("author"); statusInfo.text = statusList.getJSONObject(i).getString("text"); statusInfo.id = statusList.getJSONObject(i).getLong("id"); listData.add(statusInfo); } if (pageIndex == 0) { adapter = new Adapter(InfomationTabActivity.this); listView.setAdapter(adapter); } else { adapter.notifyDataSetChanged(); } pageIndex = statusConfig.getInt("page"); if (pageIndex == 1) { //if pageIndex == 1 means the page is the last page //so do not need show More FooterView any more ((RefreshListView)listView).removeFootView(); } } catch (JSONException e) { e.printStackTrace(); } } @Override protected void setLayoutView() { setContentView(R.layout.infomation_tab_activity); setListView(R.id.infomation_tab_list); ((RefreshListView) listView).setOnRefreshListener(this); showLoadingEmptyView(); } @Override protected View getView(int position, View convertView) { View view = convertView; if(view == null){ view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.infomation_tab_list_item, null); } mItemAvatar = (SmartImageView) view.findViewById(R.id.item_avatar); mItemAvatar.setImageUrl(listData.get(position).avatar, R.drawable.icon, 0); mItemName = (TextView) view.findViewById(R.id.item_name); mItemName.setText(listData.get(position).name); mItemName.getPaint().setFakeBoldText(true); mItemDate = (TextView) view.findViewById(R.id.item_date); String dateString = listData.get(position).created; if ( dateString != null && !"".equals(dateString)) { try { Date date = mSinaWeiboDateFormat.parse(dateString); int second = (int)(System.currentTimeMillis() - date.getTime())/1000; if (second > 3600 && second <= 86400 ) { mItemDate.setText(second/3600 + "小时前"); } else if (second > 59 && second <= 3600) { mItemDate.setText(second/60 + "分钟前"); } else if (second <= 59) { mItemDate.setText(second + "秒前"); } else { mItemDate.setText(mSimpleDateFormat.format(date)); } } catch (ParseException e) { e.printStackTrace(); } } else { mItemDate.setText(""); } mItemText = (TextView) view.findViewById(R.id.item_text); mItemText.setText(listData.get(position).text); return view; } @Override protected void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle(getString(R.string.info_options)); menu.add(0, 1, 1, getString(R.string.info_options_share)); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: //get item position ContextMenuInfo info = item.getMenuInfo(); AdapterView.AdapterContextMenuInfo contextMenuInfo = (AdapterContextMenuInfo) info; int position = contextMenuInfo.position - 1; Intent intent=new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.info_options_share_title)); intent.putExtra(Intent.EXTRA_TEXT, listData.get(position).text); startActivity(Intent.createChooser(intent, getString(R.string.setting_share_app_title))); break; default: break; } return super.onContextItemSelected(item); } @Override public Object refreshing() { String result = null; if (AppApplication.mSdcardDataDir == null) { AppApplication.mSdcardDataDir = Environment.getExternalStorageDirectory().getPath() + "/healthworld/config/"; } File file = new File(AppApplication.mSdcardDataDir + "/" + StringUtils.replaceUrlWithPlus(AppApplicationApi.INFOMATION_URL)); if (file.exists() && file.isFile()) { file.delete(); } try { DownloadUtils.download(AppApplicationApi.INFOMATION_URL, file, false, null); result = FileUtils.readTextFile(file); } catch (Exception e) { e.printStackTrace(); } return result; } @Override public void refreshed(Object obj) { if (obj != null) { listData.clear(); pageIndex = 0; ((RefreshListView)listView).addFootView(); showInfomationList((String)obj); } }; @Override public void more() { if (pageIndex > 1) { moreInfomationList(pageIndex - 1); } else { Toast.makeText(this, "加载完毕", Toast.LENGTH_SHORT).show(); ((RefreshListView)listView).removeFootView(); } } @Override public void onBackPressed() { ((BaseApplication)getApplication()).exitApp(getParent()); } public void checkNewVersion(){ if (BaseApplication.mVersionCode < mLatestVersionCode && BaseApplication.mShowUpdate) { new AlertDialog.Builder(this) .setTitle(R.string.check_new_version) .setMessage(mLatestVersionUpdate) .setPositiveButton(R.string.app_upgrade_confirm, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(InfomationTabActivity.this, AppUpgradeService.class); intent.putExtra("downloadUrl", mLatestVersionDownload); startService(intent); } }) .setNegativeButton(R.string.app_upgrade_cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create() .show(); BaseApplication.mShowUpdate = false; } } private static final int NO_AD_SPEND_PER_DAY = 25; //process the ad show //获取成功 @Override public void getUpdatePoints(String currencyName, int pointTotal) { final LinearLayout container =(LinearLayout)findViewById(R.id.AdLinearLayout); if (pointTotal < NO_AD_SPEND_PER_DAY) { runOnUiThread(new Runnable () { public void run() { try { mAdView = new AdView(InfomationTabActivity.this,container); mAdView.DisplayAd(); } catch (Exception e) { container.setVisibility(View.GONE); e.printStackTrace(); } } }); } else { long last_time = PreferencesUtils.getLongPreference(this, AppApplicationApi.SHARE_CREDITS, AppApplicationApi.SHARE_CREDITS_LAST_TIME, 0); if (System.currentTimeMillis() - last_time > 1000*60*60*24) { //spent 15 credits will keep no ad one day AppConnect.getInstance(InfomationTabActivity.this).spendPoints(NO_AD_SPEND_PER_DAY, InfomationTabActivity.this); PreferencesUtils.setLongPreference(this, AppApplicationApi.SHARE_CREDITS, AppApplicationApi.SHARE_CREDITS_LAST_TIME, System.currentTimeMillis()); } } } //获取失败 @Override public void getUpdatePointsFailed(String error) { } }