package com.smit.DeskView.tvlive; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Calendar; import java.util.LinkedList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import com.smit.DeskView.commonclass.AlwaysMarqueeTextView; import com.smit.DeskView.commonclass.TvLiveChannelParse.ItemTvInfo; import com.smit.EasyLauncher.R; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageParser.NewPermissionInfo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.format.Time; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.LayoutInflater; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class TvProgramListActivity extends Activity implements OnClickListener { Button mMonday, mTuesday, mWendesday, mThursday, mFriday, mSaturday, mSunday; ListView mProgramListView; TextView mNoProgramListView; ProgramListAdapter adapter; String path; String tvname; LinkedList<ItemProgramList> allprogram = new LinkedList<ItemProgramList>(); int CurWeek=0,TodayWeek=0,curProgram; boolean isExistprogram=false; private final static String Tag = "TvProgramListActivity"; // String string=getIntent().getExtras().getString("media"); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.tv_programlist); setupView(); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); path = getIntent().getExtras().getString("tvprogramfilepath"); tvname = getIntent().getExtras().getString("tvname"); allprogram.clear(); isExistprogram=getProgramList(); if (isExistprogram) { mMonday.setText(getResources().getString(R.string.monday)+"\n"+allprogram.get(0).item_data); mTuesday.setText(getResources().getString(R.string.tuesday)+"\n"+allprogram.get(1).item_data); mWendesday.setText(getResources().getString(R.string.wednesday)+"\n"+allprogram.get(2).item_data); mThursday.setText(getResources().getString(R.string.thursday)+"\n"+allprogram.get(3).item_data); mFriday.setText(getResources().getString(R.string.friday)+"\n"+allprogram.get(4).item_data); mSaturday.setText(getResources().getString(R.string.saturday)+"\n"+allprogram.get(5).item_data); mSunday.setText(getResources().getString(R.string.sunday)+"\n"+allprogram.get(6).item_data); } CurWeek=getCurWeek(); TodayWeek=CurWeek; curProgram=getCurProgramindex(); View weekView=null; switch (CurWeek) { case 0:{ weekView=mMonday; break; } case 1:{ weekView=mTuesday; break; } case 2:{ weekView=mWendesday; break; } case 3:{ weekView=mThursday; break; } case 4:{ weekView=mFriday; break; } case 5:{ weekView=mSaturday; break; } case 6:{ weekView=mSunday; break; } default: break; } onClick(weekView); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub if (arg0 == mMonday) { mMonday.setSelected(true); mTuesday.setSelected(false); mWendesday.setSelected(false); mThursday.setSelected(false); mFriday.setSelected(false); mSaturday.setSelected(false); mSunday.setSelected(false); CurWeek=0; showProgramList(); } else if (arg0 == mTuesday) { mTuesday.setSelected(true); mMonday.setSelected(false); mWendesday.setSelected(false); mThursday.setSelected(false); mFriday.setSelected(false); mSaturday.setSelected(false); mSunday.setSelected(false); CurWeek=1; showProgramList(); } else if (arg0 == mWendesday) { mWendesday.setSelected(true); mMonday.setSelected(false); mTuesday.setSelected(false); mThursday.setSelected(false); mFriday.setSelected(false); mSaturday.setSelected(false); mSunday.setSelected(false); CurWeek=2; showProgramList(); } else if (arg0 == mThursday) { mThursday.setSelected(true); mMonday.setSelected(false); mTuesday.setSelected(false); mWendesday.setSelected(false); mFriday.setSelected(false); mSaturday.setSelected(false); mSunday.setSelected(false); CurWeek=3; showProgramList(); } else if (arg0 == mFriday) { mFriday.setSelected(true); mMonday.setSelected(false); mTuesday.setSelected(false); mWendesday.setSelected(false); mThursday.setSelected(false); mSaturday.setSelected(false); mSunday.setSelected(false); CurWeek=4; showProgramList(); } else if (arg0 == mSaturday) { mSaturday.setSelected(true); mMonday.setSelected(false); mTuesday.setSelected(false); mWendesday.setSelected(false); mThursday.setSelected(false); mFriday.setSelected(false); mSunday.setSelected(false); CurWeek=5; showProgramList(); } else if (arg0 == mSunday) { mSunday.setSelected(true); mMonday.setSelected(false); mTuesday.setSelected(false); mWendesday.setSelected(false); mThursday.setSelected(false); mFriday.setSelected(false); mSaturday.setSelected(false); CurWeek=6; showProgramList(); } } void showProgramList(){ if(isExistprogram&&CurWeek<=allprogram.size()){ mProgramListView.setVisibility(View.VISIBLE); mNoProgramListView.setVisibility(View.GONE); adapter=new ProgramListAdapter(this); mProgramListView.setAdapter(adapter); }else { mNoProgramListView.setVisibility(View.VISIBLE); mProgramListView.setVisibility(View.GONE); mNoProgramListView.setText(R.string.noprogram); } } private void setupView() { mMonday = (Button) findViewById(R.id.monday); mMonday.setOnClickListener(this); mTuesday = (Button) findViewById(R.id.tuesday); mTuesday.setOnClickListener(this); mWendesday = (Button) findViewById(R.id.wednesday); mWendesday.setOnClickListener(this); mThursday = (Button) findViewById(R.id.thursday); mThursday.setOnClickListener(this); mFriday = (Button) findViewById(R.id.friday); mFriday.setOnClickListener(this); mSaturday = (Button) findViewById(R.id.saturday); mSaturday.setOnClickListener(this); mSunday = (Button) findViewById(R.id.sunday); mSunday.setOnClickListener(this); mProgramListView=(ListView)findViewById(R.id.programlist); mNoProgramListView=(TextView)findViewById(R.id.noprogramlist); } public int getCurWeek(){ Calendar calendar = Calendar.getInstance(); int week = calendar.get(Calendar.DAY_OF_WEEK); if (week>=2) { week-=2; }else if (week==1) { week=6; } return week; } public int GetCurTime() { Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); Time m_time=new Time(); m_time.setToNow(); return m_time.hour * 60 + m_time.minute; } public String GetCurData() { Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); String string = null; string = String.format("%d/%02d/%02d", (int) (year % 100), month, day); return string; } // ȡ��Ŀ��Ϣ public boolean getProgramList() { boolean nRet=false; do { try { InputStream is = null; byte[] data = null; String str = null; File file = new File(path); if (!file.exists()) { break; } int length = (int) file.length() + 10; data = new byte[length]; is = new BufferedInputStream(new FileInputStream(file)); while (is.read(data) != -1) ; is.close(); str = new String(data); ByteArrayInputStream stream = new ByteArrayInputStream( str.getBytes()); InputSource mInputSource = new InputSource(stream); DocumentBuilderFactory dbf = DocumentBuilderFactory .newInstance(); DocumentBuilder dbuilder = dbf.newDocumentBuilder(); Document doc = dbuilder.parse(mInputSource); NodeList n = doc.getElementsByTagName("entry"); int itemcount = n.getLength(); if (itemcount <= 0) { break; } for (int i = 0; i < itemcount; i++) {// ����entry ItemProgramList curList = new ItemProgramList(); Node item = n.item(i); if (!item.hasChildNodes()) { continue; } NamedNodeMap Attributes = item.getAttributes(); Node timeNode = Attributes.getNamedItem("date"); String timeValue = timeNode.getNodeValue(); curList.item_data = timeValue; Node weekNode = Attributes.getNamedItem("day"); String weekValue = weekNode.getNodeValue(); curList.item_week = weekValue; NodeList nodeList = item.getChildNodes(); int len = nodeList.getLength(); if (len <= 0) { continue; } for (int j = 0; j < len; j++) { // item Node tempNodeFront = nodeList.item(j); int frontTime = 0; String programString = null; NodeList List = tempNodeFront.getChildNodes(); for (int k = 0; k < List.getLength(); k++) {// item // child Node tmpnode; Node tempNode = List.item(k); String tempStr = tempNode.getNodeName(); if (tempStr.equals("time")) { tmpnode = tempNode.getChildNodes().item(0); if (tmpnode != null) { curList.item_time.add(tmpnode.getNodeValue()); //String[] lunars = tmpnode.getNodeValue().split(":"); //frontTime = Integer.parseInt(lunars[0])* 60 + Integer.parseInt(lunars[1]); } else { } } else if (tempStr.equals("program")) { curList.item_program.add(tempNode.getChildNodes().item(0).getNodeValue()); //programString = tempNode.getChildNodes().item(0).getNodeValue(); } } } allprogram.add(curList); } nRet=true; } catch (Exception e) { Log.e(Tag, "======" + e.toString() + "======"); } } while (false); return nRet; } public int getCurProgramindex(){ int curIndex=0; ItemProgramList itemProgramList; do { if (allprogram==null) { break; } if (TodayWeek>=allprogram.size()) { break; } int frontTime = 0, behindTime = 0; int SystemTime = GetCurTime(); itemProgramList=allprogram.get(TodayWeek); int timecount=itemProgramList.item_time.size()-1; int i=0; for (i = 0; i < timecount; i++) { String[] lunars1 = itemProgramList.item_time.get(i).split(":"); frontTime = Integer.parseInt(lunars1[0])* 60+ Integer.parseInt(lunars1[1]); String[] lunars2 = itemProgramList.item_time.get(i+1).split(":"); behindTime = Integer.parseInt(lunars2[0])* 60+ Integer.parseInt(lunars2[1]); if (SystemTime >= frontTime && SystemTime < behindTime) { curIndex=i; break; } } if (i==timecount) { curIndex=timecount; }else { } } while (false); return curIndex; } public class ProgramListAdapter extends BaseAdapter { Context mContext; public ProgramListAdapter(Context context) { // TODO Auto-generated constructor stub mContext=context; } public int getCount() { return allprogram.get(CurWeek).item_time.size(); } public Object getItem(int position) { return null; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { TextView program_time, program_tv; if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(mContext); convertView = inflater.inflate(R.layout.tv_programlist_item, null); } ItemProgramList curItem = allprogram.get(CurWeek); program_time = (TextView) convertView.findViewById(R.id.tv_program_time); program_time.setText(curItem.item_time.get(position)); program_tv = (TextView) convertView.findViewById(R.id.tv_program_program); program_tv.setText(curItem.item_program.get(position)); if (TodayWeek==CurWeek&&curProgram==position) { program_time.setTextColor(Color.YELLOW); program_tv.setTextColor(Color.YELLOW); }else { program_time.setTextColor(Color.WHITE); program_tv.setTextColor(Color.WHITE); } return convertView; } } // һ���Ŀ��Ϣ public class ItemProgramList { public LinkedList<String> item_time = null; public LinkedList<String> item_program = null; public String item_data = null; public String item_week = null; public ItemProgramList() { item_time = new LinkedList<String>(); item_program = new LinkedList<String>(); } } }