package com.smit.DeskView.news; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.security.PublicKey; import com.openims.utility.PushServiceUtil; import com.smit.DeskView.commonclass.CommonDataFun; import com.smit.DeskView.commonclass.RequestXml; import com.smit.DeskView.commonclass.NewsMoveParse; import com.smit.DeskView.vodvideo.VODVideoListFragment.VodVideoAdapter; import com.smit.EasyLauncher.R; import android.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.AssetManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.app.ListFragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; public class NewsFragment extends Fragment { private LayoutInflater mInflater = null; private ImageView moreImage; private final static int GET_VOD_VIDEO_XML = 0x800; private final static int PUSH_VOD_VIDEO_XML = 0x801; private final static String Tag = "NewsFragment"; private final static String categoryString="com.smit.DeskView.news.NewsFragment"; public NewsMoveParse mMovieParse = null; private static String VIDEO_ITEM_FILE_DIR = "data/data/com.smit.EasyLauncher/files"; private static String VIDEO_ITEM_FILE = "data/data/com.smit.EasyLauncher/files/news.xml";// �����ļ� FrameLayout vodvideo_flash,vodvideo_loading; private ImageView vodvideo_image_loading; private NewsListFragment newsListFragment; private Button vodvideo_button_flash; private FrameLayout listFrame; public static boolean existInstance = false; RequestXml mThread=null; public final static int SHOW_LAODING=0; public final static int SHOW_FLASH=1; public final static int SHOW_LIST=2; public int curMyStatus=SHOW_LAODING; private BroadcastReceiver loginReceiver,pushReceiver; @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); existInstance = true; setRetainInstance(true); loginReceiver=new InnerReceiver(); pushReceiver=new PushServiceReceiver(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setupView(); if (existInstance) { if(checkWifiIscon()) { requestXml(null,GET_VOD_VIDEO_XML); mHandler.postDelayed(mRunnable, 700); SetCurShow(SHOW_LAODING); }else { String str=ReadVodVideoItemXML(); if (str!=null) { mMovieParse = new NewsMoveParse(str); mMovieParse.parseDataStr(); } if (IsExistvodMove(mMovieParse)) { SetCurShow(SHOW_LIST); //showVodVideoList(); }else { SetCurShow(SHOW_FLASH); } } }else { if (curMyStatus==SHOW_LAODING) { }else{ SetCurShow(curMyStatus); } } existInstance = false; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub mInflater = inflater; return inflater.inflate(R.layout.news_widget_home_page, container, false); // return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onDetach() { // TODO Auto-generated method stub super.onDetach(); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(PushServiceUtil.ACTION_STATUS); getActivity().registerReceiver(loginReceiver, intentFilter); intentFilter=new IntentFilter(); intentFilter.addAction(PushServiceUtil.ACTION_REGISTRATION); intentFilter.addAction(PushServiceUtil.ACTION_RECEIVE); intentFilter.addAction(PushServiceUtil.ACTION_STATUS); intentFilter.addCategory(categoryString); getActivity().registerReceiver(pushReceiver, intentFilter); } @Override public void onStop() { // TODO Auto-generated method stub super.onStop(); getActivity().unregisterReceiver(loginReceiver); getActivity().unregisterReceiver(pushReceiver); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if(mThread!=null){ mThread.stopThread(); mThread=null; } if (mHandler!=null) { mHandler.removeCallbacks(mRunnable); } existInstance=false; } public void setupView() { vodvideo_loading=(FrameLayout)getView().findViewById(R.id.news_loading); vodvideo_image_loading=(ImageView)(getView().findViewById(R.id.news_image_loading)); vodvideo_flash=(FrameLayout)getView().findViewById(R.id.news_flash); vodvideo_button_flash=(Button)getView().findViewById(R.id.news_button_flash); vodvideo_button_flash.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(checkWifiIscon()) { requestXml(null,GET_VOD_VIDEO_XML); mHandler.postDelayed(mRunnable, 1000); SetCurShow(SHOW_LAODING); }else { String str=ReadVodVideoItemXML(); if (str!=null) { mMovieParse = new NewsMoveParse(str); mMovieParse.parseDataStr(); } if (IsExistvodMove(mMovieParse)) { SetCurShow(SHOW_LIST); //showVodVideoList(); }else { SetCurShow(SHOW_FLASH); } } } }); listFrame = (FrameLayout)getView().findViewById(R.id.news_listdragment); moreImage = (ImageView) getView().findViewById(R.id.news_more); moreImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //���� } }); } public void SetCurShow(int curStatus){ switch (curStatus) { case SHOW_LAODING: { listFrame.setVisibility(View.GONE); vodvideo_flash.setVisibility(View.GONE); vodvideo_loading.setVisibility(View.VISIBLE); break; } case SHOW_FLASH:{ listFrame.setVisibility(View.GONE); vodvideo_flash.setVisibility(View.VISIBLE); vodvideo_loading.setVisibility(View.GONE); break; } case SHOW_LIST:{ listFrame.setVisibility(View.VISIBLE); vodvideo_flash.setVisibility(View.GONE); vodvideo_loading.setVisibility(View.GONE); if(!showNewsList()){ SetCurShow(SHOW_FLASH); } break; } default: break; } curMyStatus=curStatus; } private boolean showNewsList() { FragmentManager mFragmentManager=getFragmentManager(); if (mFragmentManager!=null) { newsListFragment = (NewsListFragment) mFragmentManager.findFragmentById(R.id.news_listdragment_fragment); if (newsListFragment == null) { return false; }else { return newsListFragment.ShowCurList(); } }else { return false; } } private String checkNetworkInfo() { ConnectivityManager conMan = (ConnectivityManager) getActivity() .getSystemService(getActivity().CONNECTIVITY_SERVICE); NetworkInfo.State wifi = (conMan .getNetworkInfo(ConnectivityManager.TYPE_WIFI)).getState(); String string = wifi.toString(); return string; } private boolean checkWifiIscon() { String str = checkNetworkInfo(); if (str.equals("CONNECTED")) { return true; } else { return false; } } private Runnable mRunnable = new Runnable() { public void run() { if (GobalFunVar.CUR_PIC<GobalFunVar.LOAD_COUNT-1) { GobalFunVar.CUR_PIC++; }else { GobalFunVar.CUR_PIC=0; } mHandler.postDelayed(mRunnable, 700); vodvideo_image_loading.setBackgroundResource(GobalFunVar.LOAD_PIC[GobalFunVar.CUR_PIC]); } }; public Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case GET_VOD_VIDEO_XML: { if (mThread==null) { return; } String str = (String) msg.obj; if (str != null && str.length() > 0) { mMovieParse = new NewsMoveParse(str); mMovieParse.parseDataStr(); if (mMovieParse!=null && mMovieParse.getItemCount()>0) { WriteVodVideoItemXML(str); SetCurShow(SHOW_LIST); //showVodVideoList(); }else { SetCurShow(SHOW_FLASH); } }else { SetCurShow(SHOW_FLASH); } break; } case PUSH_VOD_VIDEO_XML:{ if (mThread == null) { return; } String str = (String) msg.obj; if (str != null && str.length() > 0) { NewsMoveParse mTmpMovieParse=new NewsMoveParse(str); mTmpMovieParse.parseDataStr(); if (mTmpMovieParse != null && mTmpMovieParse.getItemCount() > 0) { WriteVodVideoItemXML(str); mMovieParse=mTmpMovieParse; SetCurShow(SHOW_LIST); } else { SetCurShow(SHOW_FLASH); } } else { SetCurShow(SHOW_FLASH); } break; } case 2: break; } } }; public void requestXml(String urlString,int Id) { //String Url = CommonDataFun.myServerAddr+"news.do?columnKey=316"; String Url; if (urlString==null) { Url = CommonDataFun.myServerAddr + "latestNews.do"; }else { Url=urlString; } try { URL url = new URL(Url); if (mThread!=null) { mThread.stopThread(); mThread=null; } mThread = new RequestXml(url, mHandler, Id, null); mThread.start(); } catch (Exception e) { } } public String ReadVodVideoItemXML() { InputStream is = null; byte[] data = null; String str = null; File TestItemFile = new File(VIDEO_ITEM_FILE); if (!TestItemFile.exists()) { return null; } try { int length = (int) TestItemFile.length() + 10; data = new byte[length]; is = new BufferedInputStream(new FileInputStream(TestItemFile)); while (is.read(data) != -1); is.close(); } catch (Exception e) { // TODO: handle exception } str = new String(data); return str; } // д������xml�ļ� �ӷ������õ��� public void WriteVodVideoItemXML(String str) { CreateDataPath(VIDEO_ITEM_FILE_DIR); File existFile = new File(VIDEO_ITEM_FILE); if (existFile.exists() && existFile.length() > 0) { existFile.delete(); } File TestItemFile = new File(VIDEO_ITEM_FILE); try { TestItemFile.createNewFile(); } catch (IOException e) { // Log.e("IOException", "exception in createNewFile() method"); Log.e(Tag, e.toString()); } FileOutputStream fileos = null; try { fileos = new FileOutputStream(TestItemFile); } catch (FileNotFoundException e) { // Log.e("FileNotFoundException", "can't create FileOutputStream"); Log.e(Tag, e.toString()); } try { byte buf[] = str.getBytes(); int numread = 0; numread = buf.length; if (numread <= 0) { // break; } else { fileos.write(buf, 0, numread); } fileos.close(); } catch (Exception e) { // Log.e("Exception","error occurred while creating xml file"); Log.e(Tag, e.toString()); } } // ����sd��·�� public void CreateDataPath(String str) { File file = new File(str); if (!file.exists()) { file.mkdirs(); } } public boolean IsExistvodMove(NewsMoveParse mMovieParse){ String str=ReadVodVideoItemXML(); if (str==null||mMovieParse.getItemCount()<=0) { return false; }else { return true; } } public static class GobalFunVar { public static int CUR_PIC=0; public final static int LOAD_COUNT=10; public final static int LOAD_PIC[]={ R.drawable.s0_login_loading_00, R.drawable.s0_login_loading_01, R.drawable.s0_login_loading_02, R.drawable.s0_login_loading_03, R.drawable.s0_login_loading_04, R.drawable.s0_login_loading_05, R.drawable.s0_login_loading_06, R.drawable.s0_login_loading_07, R.drawable.s0_login_loading_08, R.drawable.s0_login_loading_09,}; } //�������� void regPushService(boolean bReg){ Intent regIntent = new Intent(PushServiceUtil.ACTION_SERVICE_REGISTER); if(bReg){ regIntent.putExtra(PushServiceUtil.PUSH_TYPE,PushServiceUtil.PUSH_TYPE_REG); }else{ regIntent.putExtra(PushServiceUtil.PUSH_TYPE,PushServiceUtil.PUSH_TYPE_UNREG); } regIntent.putExtra(PushServiceUtil.PUSH_DEVELOPER, "mtv"); regIntent.putExtra(PushServiceUtil.PUSH_NAME_KEY, "I59ma75nmV67rWdD275jC0SQ2bJDBW5W"); regIntent.putExtra(PushServiceUtil.PUSH_CATEGORY,categoryString); getActivity().startService(regIntent); } //push �㲥 public class PushServiceReceiver extends BroadcastReceiver{ private static final String LOGTAG = "PushServiceReceiver"; private static final String tag = ""; public PushServiceReceiver(){ } @Override public void onReceive(Context context, Intent intent) { Log.d(LOGTAG,tag+"onReceiver"); if(intent.getAction().equals("com.openims.pushService.REGISTRATION")){ handleRegistration(context, intent); }else if(intent.getAction().equals("com.openims.pushService.RECEIVE")){ handleMessage(context, intent); }else if(intent.getAction().equals(PushServiceUtil.ACTION_STATUS)){ handleStatus(context, intent); }else{ Log.e(LOGTAG,tag+"receiver error type"); } //��������������UI���ڲ���Ĺ㲥��Ҳ����startActivity������Ҫע��activityҪ����һ�� //������ģʽΪsingleTask������activity��onNewStart��Intent intent���Ի�����µ� //Intent } //ע��㲥 private void handleRegistration(Context context, Intent intent) { Log.d(LOGTAG,tag+"handleRegistration"); String pushId = intent.getStringExtra(PushServiceUtil.PUSH_ID); String pustStatus = intent.getStringExtra(PushServiceUtil.PUSH_STATUS); boolean bRegOrUnreg = true; if(PushServiceUtil.PUSH_TYPE_UNREG.equals(intent.getStringArrayExtra(PushServiceUtil.PUSH_TYPE))){ bRegOrUnreg = false; } Log.d(LOGTAG,tag+"Registration succuss and Id = " + pushId); Log.d(LOGTAG,tag+"Registration status = " + pustStatus); Log.d(LOGTAG,tag+"Registration Reg or Unreg = " + String.valueOf(bRegOrUnreg)); } //�յ��㲥��Ϣ protected void handleMessage(Context context, Intent intent) { Log.d(LOGTAG,tag+"handleMessage"); Log.d("handleMessage","===========1111111111111111111111============"); Log.d("handleMessage","===========2222222222222222222222============"); Log.d("handleMessage","===========3333333333333333333333============"); Log.d("handleMessage","===========4444444444444444444444============"); Log.d("handleMessage","===========5555555555555555555555============"); String title = intent.getStringExtra(PushServiceUtil.NTFY_TITLE); String ticker = intent.getStringExtra(PushServiceUtil.NTFY_TICKER); String uriString = intent.getStringExtra(PushServiceUtil.NTFY_URI); String message = intent.getStringExtra(PushServiceUtil.NTFY_MESSAGE); if (checkWifiIscon()){ requestXml(uriString,PUSH_VOD_VIDEO_XML); } /* StringBuilder all = new StringBuilder(); all.append("�յ���push���ݣ�ticker").append(ticker). append("\nTitle:").append(title).append("\nUri:"). append(uriString).append("\nMessage:").append(message); Log.d(LOGTAG,tag+"message:"+all); Toast.makeText(context, all, Toast.LENGTH_LONG);*/ } private void handleStatus(Context context, Intent intent) { String status = intent.getStringExtra(PushServiceUtil.PUSH_STATUS); Log.d(LOGTAG,tag+"status:"+status); //Intent intentBroadcast = new Intent(Setting.InnerReceiver.ACTION); //intentBroadcast.putExtra(PushServiceUtil.PUSH_STATUS, status); //context.sendBroadcast(intentBroadcast); } } //��½�㲥 public class InnerReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent){ if(intent.getAction().equals(PushServiceUtil.ACTION_STATUS)){ String status = intent.getStringExtra(PushServiceUtil.PUSH_STATUS); if(status.equals(PushServiceUtil.PUSH_STATUS_LOGIN_SUC)){ regPushService(true); }else if(status.equals(PushServiceUtil.PUSH_STATUS_LOGIN_FAIL) ||status.equals(PushServiceUtil.PUSH_STATUS_CONNECTION_FAIL)){ } } } } }