package com.kitty.poclient.fragment; import java.util.List; import android.app.Activity; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.AnimationDrawable; 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.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; //import com.dfim.app.fragment.store.PurchasedFragment; import android.widget.Toast; import com.kitty.poclient.R; import com.kitty.poclient.activity.MainActivity; import com.kitty.poclient.common.Constant; import com.kitty.poclient.common.UpnpApp; import com.kitty.poclient.common.WatchDog; import com.kitty.poclient.dao.SearchHistoryDao; import com.kitty.poclient.domain.Album; import com.kitty.poclient.domain.AlbumDetail; import com.kitty.poclient.domain.Artist; import com.kitty.poclient.domain.ColumnDetail; import com.kitty.poclient.domain.Music; import com.kitty.poclient.domain.SearchDataObject; import com.kitty.poclient.fragment.store.ArtistDetailFragment; import com.kitty.poclient.fragment.store.ArtistsFragment; import com.kitty.poclient.fragment.store.BotiquesFragmentII; import com.kitty.poclient.fragment.store.ColumnDetailFragment; import com.kitty.poclient.fragment.store.GenresFragment; import com.kitty.poclient.fragment.store.PurseFragment; import com.kitty.poclient.fragment.store.SearchFragment; import com.kitty.poclient.fragment.store.TestFragment; import com.kitty.poclient.fragment.store.ThemesFragment; import com.kitty.poclient.fragment.store.TopDetailFragment; import com.kitty.poclient.fragment.store.TopsFragment139; import com.kitty.poclient.fragment.store.WebAlbumDetailFragment; import com.kitty.poclient.fragment.store.WebPackDetailFragment; import com.kitty.poclient.http.HttpPoster; import com.kitty.poclient.interfaces.OnCurrentPlayingStateChangedListener; import com.kitty.poclient.thread.Pools; import com.kitty.poclient.util.JsonUtil; public class TabWebFragment extends TabFragment implements OnCurrentPlayingStateChangedListener { private static final String TAG = TabWebFragment.class.getSimpleName() + " "; public static boolean IS_ALIVE = false; public final static int TITLE_STYLE_NORMAL = 1; public final static int TITLE_STYLE_SEARCH = 2; public static final int BOUTIQUES = 0; public static final int TOP100 = 1; public static final int ARTISTS = 2; public static final int GENRES = 3; public static final int THEMES = 4; public static final int MYPURSE = 5; public static final int PURCHASED = 6; public static final int TEST = 7; private Fragment botiquesFragment; private TopsFragment139 topsFragment; private ArtistsFragment artistsFragment; private GenresFragment genresFragment; private ThemesFragment themesFragment; private PurseFragment purseFragment; // private PurchasedFragment purchasedFragment; private TestFragment testFragment; private SearchFragment searchFragment; private String[] menuItems; private static int currentPosition = BOUTIQUES; private View view; public static LinearLayout llTitleNormal; public static LinearLayout llTitleSearch; public static View loadFailureView; public static EditText etSearch; public static ImageButton ibClear; private TextView tabTitle; private ImageButton btnMenuOrBack; private ImageButton btnPlayer; private FragmentManager tabWebFragmentManager; // private Bitmap albumBitmap;// 用于跳转专辑详情页 private String imgUrl;// 用于跳转并购买后刷新本地专辑界面 public boolean popbackable = false;// 当前是否支持回退 private ColumnDetail botiqueDetail;// 用于跳转子栏目详情页 public static String currentMenuItem = "精品聚焦"; public static InputMethodManager imm; private final int MSG_SHOW_SEARCH_RESULT = 4; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_SHOW_SEARCH_RESULT: showSearchResult((SearchDataObject) msg.obj); break; } } }; private void registerReceivers() { } private void unregisterReceivers() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.e(TAG, "onCreateView"); view = inflater.inflate(R.layout.layout_tab_main, null); initComponents(); initListeners(); initEtSearch(); initData(); // setContentFragment(new BotiquesFragment()); setContentFragment(menuItems[currentPosition], currentPosition); registerReceivers(); WatchDog.tabWebFragment = this; WatchDog.cpsListeners.add(this); return view; } @Override public void onAttach(Activity activity) { super.onAttach(activity); Fragment parentFragment = getParentFragment(); if (parentFragment instanceof TabFragment.OnTitleClickListener) { this.listener = (TabFragment.OnTitleClickListener) parentFragment; } } @Override public void onCreate(Bundle savedInstanceState) { tabWebFragmentManager = getChildFragmentManager(); super.onCreate(savedInstanceState); } @Override public void onDetach() { unregisterReceivers(); super.onDetach(); } @Override public void onResume() { IS_ALIVE = true; super.onResume(); onCurrentPlayingStateChanged(); } @Override public void onPause() { IS_ALIVE = false; super.onPause(); } private void initComponents() { llTitleNormal = (LinearLayout) view.findViewById(R.id.ll_title_normal); llTitleSearch = (LinearLayout) view.findViewById(R.id.ll_title_search); etSearch = (EditText) view.findViewById(R.id.et_search); ibClear = (ImageButton) view.findViewById(R.id.ib_clear); tabTitle = (TextView) view.findViewById(R.id.tv_title); btnMenuOrBack = (ImageButton) view.findViewById(R.id.btn_menu); btnPlayer = (ImageButton) view.findViewById(R.id.btn_player); ((MainActivity) getActivity()).btnPlayer = btnPlayer; ((MainActivity) getActivity()).refreshPlayStatus(); } protected void reloadCurrentFragment() { WatchDog.currentSelfReloader.reload(); } private void initListeners() { btnMenuOrBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (listener == null) { return; } if (popbackable) { System.out.println("btnMenuOrBack onClick popbackable"); tabWebFragmentManager.popBackStack(); } else { System.out.println("btnMenuOrBack onClick unpopbackable"); listener.onMenuClick(); } } }); btnPlayer.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onPlayerClick(); } } }); } private void initData() { menuItems = getActivity().getResources().getStringArray(R.array.sliding_menu_web); tabTitle.setText(menuItems[currentPosition]); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } public void setContentFragment(String title, int position) { System.out.println(TAG + "setContentFragment(" + title + "," + position + ")"); setTitle(title); displayMenuButtonImage(); currentPosition = position; switch (position) { case BOUTIQUES: setContentFragment(getBotiquesFragment()); break; case TOP100: setContentFragment(getTopsFragment()); break; case ARTISTS: setContentFragment(getArtistsFragment()); break; case GENRES: setContentFragment(getGenresFragment()); break; case THEMES: setContentFragment(getThemesFragment()); break; case MYPURSE: setContentFragment(getPurseFragment()); break; // case PURCHASED: // setContentFragment(getPurchasedFragment()); // break; case TEST: setContentFragment(getTestFragment()); break; } } public void setTitle(String title) { tabTitle.setText(title); } private void displayBackButtonImage() { btnMenuOrBack.setImageResource(R.drawable.btn_back); } private void displayMenuButtonImage() { btnMenuOrBack.setImageResource(R.drawable.btn_menu); } private void setContentFragment(Fragment fragment) { setContentFragment(fragment, false, null); } public void setSearchFragment() { setContentFragment(getSearchFragment(), true, "SearchFragment"); } private void setContentFragment(Fragment fragment, boolean addToBackStack, String name) { FragmentTransaction ft = tabWebFragmentManager.beginTransaction(); ft.replace(R.id.fragment_stub, fragment); Log.i(TAG, "total fragments " + tabWebFragmentManager.getBackStackEntryCount()); if (addToBackStack) { ft.addToBackStack(name); } else { WatchDog.flagInColumnDetail = false;// 去到首页时取消栏目详情数据的数据缓存 } ft.commit(); } private Fragment getBotiquesFragment() { if (null == botiquesFragment) { botiquesFragment = new BotiquesFragmentII(); } else { } return botiquesFragment; } private TopsFragment139 getTopsFragment() { if (null == topsFragment) { topsFragment = new TopsFragment139(getActivity()); } return topsFragment; } private ArtistsFragment getArtistsFragment() { if (null == artistsFragment) { artistsFragment = new ArtistsFragment(getActivity()); } return artistsFragment; } private GenresFragment getGenresFragment() { if (null == genresFragment) { genresFragment = new GenresFragment(getActivity()); } return genresFragment; } private ThemesFragment getThemesFragment() { if (null == themesFragment) { themesFragment = new ThemesFragment(getActivity()); } return themesFragment; } private PurseFragment getPurseFragment() { if (null == purseFragment) { purseFragment = new PurseFragment(getActivity()); } return purseFragment; } // private PurchasedFragment getPurchasedFragment() { // if (null == purchasedFragment) { // } // purchasedFragment = new PurchasedFragment(getActivity()); // return purchasedFragment; // } private TestFragment getTestFragment() { if (null == testFragment) { } testFragment = new TestFragment(getActivity()); return testFragment; } private SearchFragment getSearchFragment() { if (null == searchFragment) { } searchFragment = new SearchFragment(getActivity()); return searchFragment; } public void showAlbumContentReceiverOnReceive(Intent intent) { long albumId = intent.getLongExtra("albumId", -1L);// String albumName = intent.getStringExtra("albumName"); String _imgUrl = intent.getStringExtra("imgUrl"); imgUrl = _imgUrl; showAlbumContent(albumId, albumName, imgUrl); } public void showAlbumContent(final long albumId, String albumName, String imgUrl) { goAlbumDetail(albumId, albumName, imgUrl, -1, null); } public void goAlbumDetail(long albumId, String albumName, String imgUrl, int location, AlbumDetail albumDetail) {// 须区分是在二级界面呈现,还是三级界面呈现 WebAlbumDetailFragment albumDetailFragment = new WebAlbumDetailFragment(getActivity(), albumId, albumName, imgUrl, location, albumDetail); setContentFragment(albumDetailFragment, true, "WebAlbumDetailFragment"); setTitle(albumName); } public void setPopbackable(boolean popbackable) { this.popbackable = popbackable; if (popbackable) { displayBackButtonImage(); } else { displayMenuButtonImage(); } } public interface TitlebarUpdateFragment { public void updateTitlebar(); } public void showBotiqueContentReceiverOnReceive(Intent intent) { long botiqueId = intent.getLongExtra("botiqueId", -1L); String botiqueName = intent.getStringExtra("botiqueName"); showBotiqueContent(botiqueId, botiqueName); } protected void showBotiqueContent(final long botiqueId, final String botiqueName) { botiqueDetail = null; if (botiqueId != -1) { goColumnDetail(botiqueDetail, botiqueId, botiqueName); } } public void goColumnDetail(ColumnDetail columnDetail, long columnId, String columnName) { ColumnDetailFragment columnDetailFragment = new ColumnDetailFragment(getActivity(), columnDetail, columnId, columnName); setContentFragment(columnDetailFragment, true, "ColumnDetailFragment"); setTitle(columnName); } public void showTopContent(final long topId, final String topName) { ColumnDetail columnDetail = null; if (topId != -1) { goColumnDetail139(columnDetail, topId, topName); } } public void goColumnDetail139(ColumnDetail columnDetail, long columnId, String columnName) { TopDetailFragment columnDetailFragment = new TopDetailFragment(getActivity(), columnDetail, columnId, columnName); setContentFragment(columnDetailFragment, true, "ColumnDetailFragment"); setTitle(columnName); } public void goArtistDetail(Artist artist) { ArtistDetailFragment artistDetailFragment = new ArtistDetailFragment(getActivity(), artist); setContentFragment(artistDetailFragment, true, "ArtistDetailFragment"); setTitle(artist.getName()); } public void goPackDetail(long packId, String packName, int musicCount, String imgUrl) { WebPackDetailFragment packDetailFragment = new WebPackDetailFragment(getActivity(), packId, packName, musicCount, imgUrl); setContentFragment(packDetailFragment, true, "WebPackDetailFragment"); setTitle(packName); } public void useTitleStyle(int titleStyle) { switch (titleStyle) { case TITLE_STYLE_SEARCH: llTitleNormal.setVisibility(View.GONE); llTitleSearch.setVisibility(View.VISIBLE); break; case TITLE_STYLE_NORMAL: llTitleNormal.setVisibility(View.VISIBLE); llTitleSearch.setVisibility(View.GONE); break; default: llTitleNormal.setVisibility(View.VISIBLE); llTitleSearch.setVisibility(View.GONE); break; } } public void initEtSearch() { imm = (InputMethodManager) etSearch.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(etSearch, InputMethodManager.SHOW_FORCED); etSearch.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus && "".equals(etSearch.getText().toString()) && !WatchDog.flagInSearchResult) {// 由详情返回搜索列表时不要显示历史记录 Log.e("BUG959", TAG + "etSearch onFocusChange"); searchFragmentShowHistory(); } } }); etSearch.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { // 更新搜索记录 if (etSearch.hasFocus()) { Log.e("BUG959", TAG + "etSearch afterTextChanged"); searchFragmentShowHistory(); } } }); ibClear.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("ibclear onclick"); etSearch.setText(""); etSearch.requestFocus(); showSoftInput(); } }); } protected void searchFragmentShowHistory() { Log.e("BUG959", TAG + "searchFragmentShowHistory"); searchFragment.showHistory(etSearch.getText().toString()); } public void showSoftInput() { // imm = (InputMethodManager) // etSearch.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(etSearch, InputMethodManager.SHOW_FORCED); } public void hideSoftInput() { imm.hideSoftInputFromWindow(etSearch.getWindowToken(), 0); } public void search() { if (etSearch.getText().toString() != null && !etSearch.getText().toString().trim().equals("")) { hideSoftInput();// source not found showSearchLoading(); searchFragment.setKeyword(etSearch.getText().toString()); search(etSearch.getText().toString()); saveSearchText(etSearch.getText().toString()); } else { // UpnpApp.showToastMessage(getResources().getString(R.string.inputShouldntBeEmpty)); UpnpApp.mainHandler.showAlert(R.string.store_search_input_empty_alert); } } protected void search(final String inputStr) { Pools.executorService1.submit(new Runnable() { @Override public void run() { System.out.println("search(...):inputStr=" + inputStr); String json1 = new HttpPoster().search(inputStr, Constant.SEARCH_TYPE_ALBUMS); String json5 = new HttpPoster().search(inputStr, Constant.SEARCH_TYPE_MUSICS); String json10 = new HttpPoster().search(inputStr, Constant.SEARCH_TYPE_ARTISTS); if (!(new JsonUtil().validate(json1)) && !(new JsonUtil().validate(json5)) && !(new JsonUtil().validate(json10))) { // showNoData(); return; } else { // SearchDataObject sdo = new // JsonUtil().getSearchDataAll(json); List<Album> albums = new JsonUtil().getSearchDataAlbums(json1); List<Music> musics = new JsonUtil().getSearchDataMusics(json5); List<Artist> artists = new JsonUtil().getSearchDataArtists(json10); SearchDataObject sdo = new SearchDataObject(); sdo.setAlbums(albums); sdo.setMusics(musics); sdo.setArtists(artists); Message msg = handler.obtainMessage(MSG_SHOW_SEARCH_RESULT); msg.obj = sdo; handler.sendMessage(msg); } } }); } private void saveSearchText(final String string) { new Thread(new Runnable() { @Override public void run() { new SearchHistoryDao().insertSearchRecord(string); } }).start(); } protected void showSearchLoading() { searchFragment.showSearchLoading(); } protected void showSearchResult(SearchDataObject sdo) { System.out.println("searchResultFragment.getSdo().getAlbums().size()=" + searchFragment.getSdo().getAlbums().size()); if (searchFragment.getSdo().getAlbums().size() != 0 || searchFragment.getSdo().getMusics().size() != 0 || searchFragment.getSdo().getArtists().size() != 0) { // 多次搜索时释放上一次搜索的图片 searchFragment.setSdo(sdo);// null pointer searchFragment.showSearchResult(); searchFragment.update(); } else { // 第一次搜索 searchFragment.setSdo(sdo);// null pointer searchFragment.showSearchResult(); } focusOnContent(); } public void focusOnContent() { System.out.println(TAG + " focusOnContent"); ((LinearLayout) view.findViewById(R.id.fragment_stub)).requestFocus(); } public void clearEtSearch() { etSearch.setText(""); } public void shortenEtText() { Log.e(TAG, "shortenEtText"); String str = etSearch.getText().toString(); if (str.length() > 0) { str = str.substring(0, str.length() - 1); setEtText(str); } // if(etSearch.getText().toString().equals("")){ // searchFragment.showHistory(); // } } public static int getCurrentPosition() { return currentPosition; } public void setEtText(String str) { etSearch.setText(str); etSearch.setSelection(str.length()); } @Override public void onCurrentPlayingStateChanged() { if (PlayerFragment.PLAYING.equals(WatchDog.currentState)) { AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.anim.playing); btnPlayer.setImageDrawable(animationDrawable); animationDrawable.start(); } else { btnPlayer.setImageDrawable(getResources().getDrawable(R.drawable.btn_player)); } } }