package com.talk.demo; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.Set; import org.json.JSONException; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import com.faizmalkani.floatingactionbutton.FloatingActionButton; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.talk.demo.core.RecordManager; import com.talk.demo.daily.DailyEditActivity; import com.talk.demo.types.Group; import com.talk.demo.types.News; import com.talk.demo.util.Constant; import com.talk.demo.util.NetworkUtilities; import com.talk.demo.util.TalkUtil; public class DailyFragment extends Fragment implements OnItemClickListener { private static String TAG = "DailyFragment"; private PullToRefreshListView pullToRefreshView; private FloatingActionButton btn_new; private RecordManager recordManager; private LinkedList<String> daily_record; private DailyListAdapter adapter; private LinkedList<String> mListItems; private SharedPreferences mass_sp; private Editor editor; // add for debug public DailyFragment() { } public DailyFragment(RecordManager recordMgr) { daily_record = new LinkedList<String>(); recordManager = recordMgr; } /* private void diamondDialog() { AlertDialog.Builder builder = new Builder(getActivity()); builder.setTitle("新进宝石一枚"); builder.setMessage("宝石可以用于解锁锁定时光:)"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } */ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_daily, container, false); // Set a listener to be invoked when the list should be refreshed. pullToRefreshView = (PullToRefreshListView)rootView.findViewById(R.id.daily_list); mass_sp = getActivity().getSharedPreferences(Constant.NEWS_ID, getActivity().MODE_PRIVATE); editor = mass_sp.edit(); if(isExpired()) { // async to load news new GetDataTask().execute(); } btn_new = (FloatingActionButton)rootView.findViewById(R.id.btn_new); btn_new.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_DOWN: btn_new.setPressed(true); break; case MotionEvent.ACTION_UP: if(!btn_new.isFocusable()) { Log.d(TAG, "test...."); Intent intent = new Intent(getActivity(),DailyEditActivity.class); getActivity().startActivity(intent); getActivity().overridePendingTransition(R.anim.in_from_bottom, R.anim.keep_unchanage); } btn_new.setPressed(false); break; case MotionEvent.ACTION_CANCEL: btn_new.setPressed(false); default: break; } return true; } }); pullToRefreshView.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { // Do work to refresh the list here. new GetDataTask().execute(); } }); initListView(); return rootView; } @Override public void onAttach(Activity activity) { super.onAttach(activity); } /* * expire conditions : 1. first use; 2. news are out of date */ private boolean isExpired() { boolean expire = false; String default_time = "2012-6-30"; String eTime = mass_sp.getString(Constant.EXPIRED_TIME, default_time); if(eTime.equals(default_time) || TalkUtil.isOutDate(eTime)) { Log.d(TAG, "all are expired, need to update"); expire = true; } return expire; } public LinkedList<String> initDataList() { Log.d(TAG, "init data list"); if(!daily_record.isEmpty()) { daily_record.clear(); } // check today title, and update mass_sp = getActivity().getSharedPreferences(Constant.NEWS_ID, getActivity().MODE_PRIVATE); Set<String> allNews = mass_sp.getStringSet(Constant.NEWS_CONTENT, null); if(allNews != null) { daily_record.clear(); Iterator<String> it = allNews.iterator(); while (it.hasNext()) { String value = it.next(); Log.d(TAG, "temp is "+value); daily_record.add(value); } } return daily_record; } public void initListView() { if(pullToRefreshView == null) return; mListItems = initDataList(); adapter = new DailyListAdapter(getActivity(), mListItems); pullToRefreshView.setAdapter(adapter); pullToRefreshView.setOnItemClickListener(this); } private class GetDataTask extends AsyncTask<Void, Void, Group<News>> { Group<News> getDataList = new Group<News>(); @Override protected Group<News> doInBackground(Void... params) { // Simulates a background job. try { getDataList = NetworkUtilities.todayNews(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return getDataList; } @Override protected void onPostExecute(Group<News> result) { Set<String> values = new HashSet<String>(); if(result != null && !result.isEmpty()) { mListItems.clear(); for(int i=0;i<result.size();i++) { values.add(result.get(i).getNewsContent()); mListItems.add(result.get(i).getNewsContent()); editor.putString(Constant.CREATE_TIME, result.get(i).getCreateTime()).commit(); editor.putString(Constant.EXPIRED_TIME, result.get(i).getExpiredTime()).commit(); } adapter.notifyDataSetChanged(); editor.putStringSet(Constant.NEWS_CONTENT, values).commit(); } // Call onRefreshComplete when the list has been refreshed. pullToRefreshView.onRefreshComplete(); super.onPostExecute(result); } } @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { String valueContent = parent.getItemAtPosition(position).toString(); Intent mIntent = new Intent(getActivity(), DailyEditActivity.class); Bundle mBundle = new Bundle(); mBundle.putString("precontent", valueContent); mIntent.putExtras(mBundle); startActivity(mIntent); } @Override public void onPause() { super.onPause(); } @Override public void onResume() { super.onResume(); Log.d(TAG, "on Resume"); initDataList(); adapter.notifyDataSetChanged(); //Todo:get today latest } }