package com.kitty.poclient.fragment.store; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.DownloadManager; import android.app.DownloadManager.Request; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.support.v4.app.Fragment; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.Button; import android.widget.ExpandableListView; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.kitty.poclient.R; import com.kitty.poclient.activity.AlbumInfoActivity; import com.kitty.poclient.activity.WebListenActivity; import com.kitty.poclient.bean.LocalAlbum; import com.kitty.poclient.common.Constant; import com.kitty.poclient.common.UpnpApp; import com.kitty.poclient.common.ViewFactory; import com.kitty.poclient.common.WatchDog; import com.kitty.poclient.dao.AlbumDao; import com.kitty.poclient.dao.MusicDao; import com.kitty.poclient.data.VirtualData; import com.kitty.poclient.domain.Album; import com.kitty.poclient.domain.AlbumDetail; import com.kitty.poclient.domain.Disk; import com.kitty.poclient.domain.Music; import com.kitty.poclient.domain.MusicDetail; import com.kitty.poclient.fragment.TabWebFragment.TitlebarUpdateFragment; import com.kitty.poclient.http.HttpGetter; import com.kitty.poclient.http.HttpPoster; import com.kitty.poclient.interfaces.NobleMan; import com.kitty.poclient.interfaces.SelfReloader; import com.kitty.poclient.thread.Pools; import com.kitty.poclient.upnp.BoxControl; import com.kitty.poclient.upnp.Player; import com.kitty.poclient.util.BitmapUtil; import com.kitty.poclient.util.Collector; import com.kitty.poclient.util.JsonUtil; import com.kitty.poclient.util.MediaUtil; import com.kitty.poclient.util.LoadImageAysnc.ImageCallBack; import com.kitty.poclient.widget.CustomToast; import com.kitty.poclient.widget.StandardCustomDialog; //notifyData,连接中断,确定,getResources().getString(R.string.freeBtnText),divider,getView,完成购买,购买成功 public class WebAlbumDetailFragment extends Fragment implements NobleMan, TitlebarUpdateFragment, SelfReloader { private final String TAG = "WebAlbumDetailFragment"; private Context context; /* * 控件 */ private View view; private LinearLayout llLoading; private LinearLayout llNoData; private LinearLayout llContent; private LinearLayout llDataLoadFailed; private FrameLayout flAlbumInfo; private ImageView ivAlbumCover; private TextView tvAlbumName; private TextView tvArtistName; private Button btnBuy; private Button btnIntroduction; private ExpandableListView expandablelistview; private BaseExpandableListAdapter adapter; private StandardCustomDialog dialog = null; private TextView tvPublishtime; private TextView tvLanguage; private TextView tvText; /* * 数据 */ private long albumId = -1L; private AlbumDetail albumdetail; // private AlbumDetail localAlbumdetail; private String albumName = ""; private List<Disk> diskli; // private List<Disk> localDisks; // private int location = -1;// 0=在云端,5=在本地 // private int albumLocationState = -1; private List<HashMap<Long, Integer>> musicsStateList; private Map<String, Music> refetchingMusicMap = new HashMap<String, Music>(); // private Bitmap bitmap; private String imgUrl; private ImageLoader loader; private DisplayImageOptions options; private double balance = -1L; private long idToBuy = -1L; private Music musicToBuy = null; private int groupPositionInListen = -1; private int childPositionInListen = -1; private boolean albumIsBought = false; private boolean albumIsForSale = false; private boolean btnBuyIsActuallyBtnRefetch = false;// 购买按钮是否实际执行缓存云音乐功能 /* * handler&receivers */ private final int MSG_BALANCE_4_MUSIC = 1; private final int MSG_BALANCE_4_ALBUM = 2; private final int MSG_PURCHASE_SUCCESS = 3; private final int MSG_PURCHASE_SUCCESS_MUSIC = 4; private final int MSG_DATA_GOT_ALBUMDETAIL = 5; private final int MSG_DATA_LOAD_FAILD = 6; private final int MSG_MUSIC_DETAIL_GOT = 7; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_BALANCE_4_MUSIC: balance = msg.getData().getDouble("balance", -1L); int groupPosition = msg.getData().getInt("groupPosition", -1); int childPosition = msg.getData().getInt("childPosition", -1); if (groupPosition != -1 && childPosition != -1) { launchWebBuy(groupPosition, childPosition); } else { // CustomToast.makeText(context, "未能获取商品信息", // Toast.LENGTH_SHORT).show(); UpnpApp.mainHandler.showAlert(R.string.album_data_error); Log.e(TAG, UpnpApp.mainHandler.getString(R.string.album_data_error)); } break; case MSG_BALANCE_4_ALBUM: balance = msg.getData().getDouble("balance", -1L); if (albumdetail.getAlbumId() != -1) { launchWebBuy(); } else { CustomToast.makeText(context, "未能获取商品信息", Toast.LENGTH_SHORT).show(); } break; case MSG_PURCHASE_SUCCESS: // notifyBoxToSyn();// 通知盒子更新数据 WatchDog.hasNewBought = true;// 本地数据更新标记 albumIsBought = true; // btnBuy.setText(getResources().getString(R.string.willCache)); // btnBuy.setEnabled(false); adapter.notifyDataSetChanged(); break; case MSG_PURCHASE_SUCCESS_MUSIC: // notifyBoxToSyn();// 通知盒子更新数据 WatchDog.hasNewBought = true;// 本地数据更新标记 // if (musicToBuy != null) { // // musicToBuy.setPurchaseState("已购买"); // musicToBuy = null; // } Log.e(TAG, "handle success msg: WatchDog.purchasingMusics=" + WatchDog.purchasingMusics); adapter.notifyDataSetChanged(); break; case MSG_DATA_GOT_ALBUMDETAIL: if (albumdetail == null || albumdetail.getDisklist() == null || albumdetail.getDisklist().size() == 0) { showNoData(); } else { endLoding(); // setAlbumPurchaseStateII(); initView(); } break; case MSG_DATA_LOAD_FAILD: uiShowDataLoadFailed(); break; case MSG_MUSIC_DETAIL_GOT: String json = (String) msg.obj; MusicDetail mDetail = new JsonUtil().getMusicDetail(json); new MediaUtil(getActivity()).playAudio(mDetail.getListenUrl()); break; } super.handleMessage(msg); } }; private BroadcastReceiver buyMusicReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.e(TAG, "buyMusicReceiver onReceive: groupPositionInListen=" + groupPositionInListen + " childPositionInListen=" + childPositionInListen); if (groupPositionInListen != -1 && childPositionInListen != -1) { getBalanceNLanunchBuy(groupPositionInListen, childPositionInListen); } } }; public WebAlbumDetailFragment() { } protected void endLoding() { llLoading.setVisibility(View.GONE); llNoData.setVisibility(View.GONE); llContent.setVisibility(View.VISIBLE); llDataLoadFailed.setVisibility(View.GONE); } protected void showNoData() { llLoading.setVisibility(View.GONE); llContent.setVisibility(View.GONE); llNoData.setVisibility(View.VISIBLE); llDataLoadFailed.setVisibility(View.GONE); } protected void uiShowDataLoadFailed() { Log.e("BUG953", TAG + "uiShowDataLoadFailed"); llContent.setVisibility(View.GONE); llLoading.setVisibility(View.GONE); llNoData.setVisibility(View.GONE); llDataLoadFailed.setVisibility(View.VISIBLE); View loadFailureView = new ViewFactory().createLoadFailureView(this); llDataLoadFailed.removeAllViews(); llDataLoadFailed.addView(loadFailureView); } protected void notifyBoxToSyn() { new BoxControl().notifyBoxToSyn(); } public WebAlbumDetailFragment(Context context, long albumId, String albumName, String imgUrl, int location, AlbumDetail albumDetail) { this.context = context; // this.bitmap = bitmap; this.imgUrl = imgUrl; // this.location = location; this.albumId = albumId; this.albumName = albumName; this.albumdetail = albumDetail; if (location != -1) { albumIsBought = true; } loader = ImageLoader.getInstance(); options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.pic).cacheInMemory(true).cacheOnDisc(true).considerExifParams(true).bitmapConfig(Bitmap.Config.RGB_565).build(); } @Override public void onAttach(Activity activity) { Log.e(TAG, "onAttach"); super.onAttach(activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.e(TAG, "onCreateView"); updateTitlebar(); view = LayoutInflater.from(UpnpApp.context).inflate(R.layout.web_album_detail, null); view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); initComponents(); startLoading(); // getData(); // initView(); initListeners(); registerReceivers(); return view; } @Override public void onStart() { getData(); super.onStart(); } private void startLoading() { llLoading.setVisibility(View.VISIBLE); llNoData.setVisibility(View.GONE); llContent.setVisibility(View.GONE); llDataLoadFailed.setVisibility(View.GONE); AnimationDrawable ad = (AnimationDrawable) getResources().getDrawable(R.anim.animatior_list); llLoading.findViewById(R.id.iv_loading).setBackgroundDrawable(ad); ad.start(); } private void getData() { // if (location == -1) { // getDataFromWeb(); // } else { // getDataFromLocal(); // } getDataFromWeb(); } private void getDataFromWeb() { if (albumId != -1) { Pools.executorService1.submit(new Runnable() { @Override public void run() { String json = new HttpGetter(context).getAlbumDetail(albumId); if (!(new JsonUtil().validate(json))) { return; } albumdetail = new JsonUtil().getAlbumDetail(albumId, json); handler.sendEmptyMessage(MSG_DATA_GOT_ALBUMDETAIL); } }); } } private void getDataFromLocal() { handler.sendEmptyMessage(MSG_DATA_GOT_ALBUMDETAIL); } @Override public void onResume() { super.onResume(); // ((TabWebActivity) // ExitApplication.getInstance().getTabWebActivity()).activate(); WatchDog.currentSelfReloader = this; } @Override public void onPause() { if (WatchDog.hasNewBought) { notifyBoxToSyn(); UpnpApp.mainHandler.showInfo(R.string.store_syn_new_music_info); } // 同步云音乐 if (refetchingMusicMap.size() != 0) { UpnpApp.mainHandler.showInfo(R.string.store_syn_cloud_music_info); BoxControl bc = new BoxControl(); int i = 0; String ids = ""; for (String key : refetchingMusicMap.keySet()) { Music music = refetchingMusicMap.get(key); if (i == 0) { VirtualData.setMusicContainerAlbumLocal(music);// 包装该单曲的专辑须同步设置为在本地 i++; } ids += "," + music.getId(); } ids = ids.substring(1); bc.notifyBoxUpdateCloud(ids, 5);// 通知盒子同步取回的音乐 bc = null; } super.onPause(); } @Override public void onDestroyView() { Log.e(TAG, "onDestroyView"); unregisterReceivers(); WatchDog.albumDetailBgBitmapDrawable = null; super.onDestroyView(); } @Override public void onDestroy() { Log.e(TAG, "onDestroy"); super.onDestroy(); } @Override public void onDetach() { Log.e(TAG, "onDetach"); // recycleBitmaps(); super.onDetach(); } private void initComponents() { llLoading = (LinearLayout) view.findViewById(R.id.ll_loading); llNoData = (LinearLayout) view.findViewById(R.id.ll_no_data); llContent = (LinearLayout) view.findViewById(R.id.ll_content); llDataLoadFailed = (LinearLayout) view.findViewById(R.id.ll_dataload_failed); flAlbumInfo = (FrameLayout) view.findViewById(R.id.fl_album_info); // flAlbumInfo.setVisibility(View.GONE); ivAlbumCover = (ImageView) view.findViewById(R.id.iv_album_cover); tvAlbumName = (TextView) view.findViewById(R.id.tv_album_name); tvArtistName = (TextView) view.findViewById(R.id.tv_artist_name); btnBuy = (Button) view.findViewById(R.id.btn_buy); // 专辑简介控件 tvLanguage = (TextView) view.findViewById(R.id.tv_language); tvPublishtime = (TextView) view.findViewById(R.id.tv_publishtime); tvText = (TextView) view.findViewById(R.id.tv_text); btnIntroduction = (Button) view.findViewById(R.id.btn_introduction); expandablelistview = (ExpandableListView) view.findViewById(R.id.expandlistview); expandablelistview.setGroupIndicator(null); } private void initListeners() { //收藏该专辑 btnBuy.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { collectAlbum(); } }); btnIntroduction.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showAlbumIntroduction(); } }); } protected void showAlbumIntroduction() { ArrayList<String> paramList = createAlbumInfoParamList(); Intent intent = new Intent(getActivity(), AlbumInfoActivity.class); intent.putStringArrayListExtra("paramList", paramList); getActivity().startActivity(intent); } private ArrayList<String> createAlbumInfoParamList() { ArrayList<String> list = new ArrayList<String>(); list.add(albumdetail.getArtistName()); list.add(albumdetail.getPublishTime()); list.add(albumdetail.getLanguage()); list.add(albumdetail.getCompanyName()); list.add(albumdetail.getIntroduction()); return list; } private void playMusic(String uri) { Player p = new Player(); p.play(uri); } private void initView() { diskli = albumdetail.getDisklist(); // localAlbumdetail = new AlbumDao().getAlbumDetailData(albumId); // 显示图片、名称、演出者 // ivAlbumCover.setImageBitmap(bitmap); loader.displayImage(imgUrl, ivAlbumCover, options); tvAlbumName.setText(albumdetail.getAlbumname()); tvArtistName.setText(albumdetail.getArtistName()); /* * if (bitmap.equals(Constant.albumCover)) { downloadImage(); } */ initBackgroundImg(); // initBtnBuy(); initMusicsListView(); initIntroduction(); } private void initBackgroundImg() { // 根据imgUrl拿到图片 // 截取图片中部 // 获得模糊后的图片 // 设置为背景图 new Thread(new Runnable() { @Override public void run() { // String path = // android.os.Environment.getExternalStorageDirectory().getAbsolutePath() // + "/testpics/"; // Bitmap bmp = BitmapUtil.loadImageFromUrl(imgUrl, 15); // bmp = BitmapUtil.cutBitmap(bmp); // BitmapDrawable bd = new BitmapDrawable(bmp); // WatchDog.albumDetailBgBitmapDrawable = bd; WatchDog.albumDetailBgBitmapDrawable = BitmapUtil.createBlurryBitmapDrawable(imgUrl); if (WatchDog.albumDetailBgBitmapDrawable == null) { return; } handler.post(new Runnable() { @Override public void run() { flAlbumInfo.setBackgroundDrawable(WatchDog.albumDetailBgBitmapDrawable); } }); } }).start(); } private void initMusicsListView() { adapter = new BaseExpandableListAdapter() { HashMap<String, Integer> childBtnBuyFuncitonMap = new HashMap<String, Integer>();// 0=购买,-1=同步云音乐 TextView getTextView() { AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64); TextView textView = new TextView(WebAlbumDetailFragment.this.context); textView.setLayoutParams(lp); textView.setBackgroundResource(R.color.groupview_bg); textView.setGravity(Gravity.CENTER_VERTICAL); textView.setPadding(40, 0, 0, 0); textView.setTextSize(30); textView.setTextColor(Color.WHITE); return textView; } // 重写expandlistadapter中的各个方法 @Override public int getGroupCount() { return diskli != null ? diskli.size() : 0; } @Override public int getChildrenCount(int groupPosition) { if (diskli != null) { if (diskli.get(groupPosition) != null) { List<Music> li = diskli.get(groupPosition).getMusicList(); if (li != null) { return li.size(); } } } return 0; } @Override public Object getGroup(int groupPosition) { return diskli.get(groupPosition).getName(); } @Override public Object getChild(int groupPosition, int childPosition) { if (diskli != null) { if (diskli.get(groupPosition) != null) { List<Music> li = diskli.get(groupPosition).getMusicList(); if (li != null) { return li.get(childPosition).getName(); } } } return null; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(context).inflate(R.layout.albums_group_item_for_web, null); TextView tvDiscNo = (TextView) convertView.findViewById(R.id.tv_disc_no); tvDiscNo.setText("Disc" + (groupPosition + 1)); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildHolder holder; List<Music> li = diskli.get(groupPosition).getMusicList(); Music music = albumdetail.getDisklist().get(groupPosition).getMusicList().get(childPosition); Long musicId = music.getId(); boolean btnBuyEnabled = false; String btnBuyText = ""; childBtnBuyFuncitonMap.put(groupPosition + childPosition + "", 0); if (convertView == null || convertView.getTag() == null) { convertView = LayoutInflater.from(context).inflate(R.layout.web_musics_item, null); holder = new ChildHolder(convertView); convertView.setTag(holder); if (li == null) { return convertView; } } else { holder = (ChildHolder) convertView.getTag(); } // 显示单曲编号、名称、演出者 holder.tvNum.setText((childPosition + 1) + ""); holder.tvName.setText(li.get(childPosition).getName()); holder.tvArtist.setText("null".equals(li.get(childPosition).getArtistName()) ? "未知演出者" : li.get(childPosition).getArtistName()); final String btnBuyText2 = btnBuyText; final boolean btnBuyEnabled2 = btnBuyEnabled; // 收藏单曲 holder.btnListen.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { musicToBuy = (Music) diskli.get(groupPosition).getMusicList().get(childPosition); playLocally(musicToBuy.getId()); } }); // 收藏单曲 holder.btnBuy.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { musicToBuy = (Music) diskli.get(groupPosition).getMusicList().get(childPosition); collectMusic(musicToBuy.getId()); } }); return convertView; } private String[] setMusicLocationStateII(Long musicId, String btnBuyText, boolean btnBuyEnabled, ChildHolder holder, int groupPosition, int childPosition, List<Music> li) { int locationState = new MusicDao().getMusicStateById(musicId); switch (locationState) { case Constant.LOCATION_STATE_LOCAL: btnBuyText = "在本地"; btnBuyEnabled = false; break; case Constant.LOCATION_STATE_REMOTE: if (refetchingMusicMap.containsKey(groupPosition + childPosition + "")) { btnBuyText = getResources().getString(R.string.willCache); btnBuyEnabled = false; } else { btnBuyText = "在云端"; btnBuyEnabled = true; } childBtnBuyFuncitonMap.put(groupPosition + childPosition + "", -1); break; case -1:// 未购买 String[] textAndState = setUnboughtMusic(musicId, btnBuyText, btnBuyEnabled, holder, groupPosition, childPosition, li); btnBuyText = textAndState[0]; btnBuyEnabled = Boolean.parseBoolean(textAndState[1]); break; } holder.btnBuy.setText(btnBuyText); holder.btnBuy.setEnabled(btnBuyEnabled); return new String[] { btnBuyText, btnBuyEnabled + "" }; } private String[] setUnboughtMusic(Long musicId, String btnBuyText, boolean btnBuyEnabled, ChildHolder holder, int groupPosition, int childPosition, List<Music> li) { String[] results = new String[2]; // 整张专辑为缓存中,或缓存中的单曲包含该单曲时,显示缓存中 // Log.e(TAG, "getview: WatchDog.purchasingMusics=" + // WatchDog.purchasingMusics); // Log.e(TAG, "getview: musicId=" + musicId); if (WatchDog.purchasingAlbums.containsKey(albumId) || WatchDog.purchasingMusics.containsKey(musicId)) { btnBuyText = getResources().getString(R.string.willCache); btnBuyEnabled = false; // Log.e(TAG, "getview: 缓存中已设置"); } // json数据中的状态值为45时显示为不单卖 else if ("45".equals(li.get(childPosition).getPurchaseState())) { btnBuyText = "不单卖"; btnBuyEnabled = false; } // json数据中的状态值为30时显示为即将上架 else if ("10".equals(li.get(childPosition).getPurchaseState()) || "30".equals(li.get(childPosition).getPurchaseState()) || "35".equals(li.get(childPosition).getPurchaseState()) || "40".equals(li.get(childPosition).getPurchaseState())) { btnBuyText = "即将上架"; btnBuyEnabled = false; } // 其它状态显示价格 else { String price = li.get(childPosition).getPrice(); if (!price.equals("0.0")) { btnBuyText = "¥ " + li.get(childPosition).getPrice() + "0"; } else { btnBuyText = getResources().getString(R.string.freeBtnText); } btnBuyEnabled = true; } results[0] = btnBuyText; results[1] = btnBuyEnabled + ""; return results; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }; expandablelistview.setAdapter(adapter); for (int i = 0; i < adapter.getGroupCount(); i++) { expandablelistview.expandGroup(i); } } private void initIntroduction() { if (isAdded()) { tvLanguage.setText(getResources().getString(R.string.album_introduciton_language) + albumdetail.getLanguage()); tvPublishtime.setText(getResources().getString(R.string.album_introduciton_publishtime) + albumdetail.getPublishTime()); tvText.setText(albumdetail.getIntroduction()); } } private void setAlbumPurchaseStateII() { int purchaseState = new AlbumDao().getAlbumStateById(albumId, albumdetail.getMusicCount()); switch (purchaseState) { case 5: albumIsBought = true; btnBuy.setText("在本地"); btnBuy.setEnabled(false); break; case 0: albumIsBought = true; btnBuy.setText("在云端"); btnBuy.setEnabled(false); break; case -1: albumIsBought = false; btnBuy.setText("¥ " + albumdetail.getPrice() + "0"); btnBuy.setEnabled(true); break; } } protected void downloadImage() { Pools.executorService2.submit(new Runnable() { @Override public void run() { String imageKey = albumdetail.getSmallImg() + "150"; BitmapUtil.loadImageAysnc.loadImageNohandler(imageKey, albumdetail.getSmallImg(), 150, false, new ImageCallBack() { // 得到专辑封面后刷新界面 @Override public void imageLoaded(final Bitmap bitmap) { handler.post(new Runnable() { @Override public void run() { ivAlbumCover.setImageBitmap(bitmap); } }); } }); } }); } /* * private void launchWebListen(int groupPosition, int childPosition) { // * 发起试听 Music music = (Music) * diskli.get(groupPosition).getMusicList().get(childPosition); String uri = * music.getMediaurl(); if (!uri.startsWith("xxbox://listen?id=")) { uri = * "xxbox://listen?id=" + music.getId(); } playMusic(uri); * * Intent intent = new Intent(getActivity(), WebListenActivity.class); * intent.putExtra("musicName", music.getName()); intent.putExtra("artist", * music.getArtistName()); intent.putExtra("bitmap", bitmap); * intent.putExtra("musicIsBought", music.getPurchaseState()); * intent.putExtra("price", music.getPrice().equals("0.0") ? * getResources().getString(R.string.freeBtnText) : "¥ " + music.getPrice() * + "0"); getActivity().startActivity(intent); } */ private void launchWebListen(int groupPosition, int childPosition, String btnBuyText, boolean btnBuyEnabled) { // 发起试听 Music music = (Music) diskli.get(groupPosition).getMusicList().get(childPosition); String uri = music.getMediaurl(); if (!uri.startsWith("xxbox://listen?id=")) { uri = "xxbox://listen?id=" + music.getId(); } playMusic(uri); Intent intent = new Intent(getActivity(), WebListenActivity.class); intent.putExtra("musicName", music.getName()); intent.putExtra("artist", music.getArtistName()); // intent.putExtra("bitmap", bitmap); intent.putExtra("imgUrl", imgUrl); intent.putExtra("musicIsBought", music.getPurchaseState()); intent.putExtra("btnBuyText", btnBuyText); intent.putExtra("btnBuyEnabled", btnBuyEnabled); intent.putExtra("isFromAlbum", true); UpnpApp.mainHandler.showInfo(R.string.store_listen_music_loading_info); getActivity().startActivity(intent); } private void launchWebBuy(int groupPosition, int childPosition) { // 发起购买 // Music music = (Music) // diskli.get(groupPosition).getMusicList().get(childPosition); musicToBuy = (Music) diskli.get(groupPosition).getMusicList().get(childPosition); if (balance != -1L) { String msg = musicToBuy.getName() + " \n价格:" + musicToBuy.getPrice() + "\t当前余额:" + balance + " 元\n\n确认购买吗?"; idToBuy = musicToBuy.getId(); if (idToBuy != -1 && Double.parseDouble(musicToBuy.getPrice()) != 0) { showPurchaseReassureDialog(Constant.ordertype_audio, msg); } else if (idToBuy != -1 && Double.parseDouble(musicToBuy.getPrice()) == 0) { buy(Constant.ordertype_audio, idToBuy); } else { // CustomToast.makeText(context, "未能获取商品信息", // Toast.LENGTH_SHORT).show(); UpnpApp.mainHandler.showAlert(R.string.album_data_error); Log.e(TAG, UpnpApp.mainHandler.getString(R.string.album_data_error)); } balance = -1L;// 归零余额以备下一次查询 } else { CustomToast.makeText(context, "未能读取余额,请检查您的网络", Toast.LENGTH_SHORT).show(); } } private void launchWebBuy() { // 发起购买 if (balance != -1) { String msg = albumdetail.getAlbumname() + " \n价格:" + albumdetail.getPrice() + "\t当前余额:" + balance + " 元\n\n确认购买吗?"; idToBuy = albumdetail.getAlbumId(); if (idToBuy != -1 && albumdetail.getPrice() != 0) { showPurchaseReassureDialog(Constant.ordertype_album, msg); } else if (idToBuy != -1 && albumdetail.getPrice() == 0) { buy(Constant.ordertype_album, idToBuy); } else { // CustomToast.makeText(context, "未能获取商品信息", // Toast.LENGTH_SHORT).show(); UpnpApp.mainHandler.showAlert(R.string.album_data_error); Log.e(TAG, UpnpApp.mainHandler.getString(R.string.album_data_error)); } balance = -1L;// 归零余额以备下一次查询 } else { // CustomToast.makeText(context, "未能读取余额,请检查您的网络", // Toast.LENGTH_SHORT).show(); UpnpApp.mainHandler.showAlert(R.string.store_balance_read_alert); Log.e(TAG, UpnpApp.mainHandler.getString(R.string.store_balance_read_alert)); } } private void getBalanceNLanunchBuy(final int groupPosition, final int childPosition) { Pools.executorService1.submit(new Runnable() { @Override public void run() { String json = new HttpGetter(context).getBalance(); double _balance = new JsonUtil().getBalance(json); Message msg = new Message(); msg.what = MSG_BALANCE_4_MUSIC; Bundle bundle = new Bundle(); bundle.putDouble("balance", _balance); bundle.putInt("groupPosition", groupPosition); bundle.putInt("childPosition", childPosition); msg.setData(bundle); handler.sendMessage(msg); } }); } private void refetchRemoteMusic(final int groupPosition, final int childPosition) { Music music = (Music) diskli.get(groupPosition).getMusicList().get(childPosition); refetchingMusicMap.put(groupPosition + childPosition + "", music); adapter.notifyDataSetChanged(); showBuyResultDialog("操作成功\n\n即将为您缓存曲目"); } private void getBalanceNLanunchBuy() { Pools.executorService1.submit(new Runnable() { @Override public void run() { String json = new HttpGetter(context).getBalance(); double _balance = new JsonUtil().getBalance(json); Message msg = new Message(); msg.what = MSG_BALANCE_4_ALBUM; Bundle bundle = new Bundle(); bundle.putDouble("balance", _balance); msg.setData(bundle); handler.sendMessage(msg); } }); } private void clearDialog() { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); dialog = null; } } private void showPurchaseReassureDialog(final String ordertype, String msg) { clearDialog(); final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(context); builder.setTitle("确认购买"); builder.setMessage(msg); builder.setNegativeButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showBuyingDialog(); buy(ordertype, idToBuy); } }); builder.setPositiveButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialog = builder.create(); dialog.show(); } private void showBuyingDialog() { clearDialog(); final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(context); builder.setTitle("正在购买"); builder.setMessage(null); AnimationDrawable ad = (AnimationDrawable) getResources().getDrawable(R.anim.animatior_searchbox_list); String str = "正在购买..."; LinearLayout llContent = createDialogContent(ad, str); builder.setContentView(llContent); dialog = builder.create(); dialog.show(); } private void showBuyResultDialog(String msg) { clearDialog(); final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(context); builder.setTitle("完成购买"); builder.setMessage(msg); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialog = builder.create(); dialog.show(); } protected void buy(final String ordertype, final long id) { Pools.executorService1.submit(new Runnable() { @Override public void run() { Looper.prepare(); String json = new HttpPoster().buyAlbumOrMusic(ordertype, id); String resultcode = new JsonUtil().getOrderFeedback(json); finishThisBuy(ordertype, id, resultcode); Looper.loop(); } }); } protected void finishThisBuy(String ordertype, long id, String resultcode) { if ("30".equals(resultcode)) { // showBuyResultDialog("操作成功\n\n即将为您缓存曲目"); if (ordertype.equals(Constant.ordertype_album)) { WatchDog.purchasingAlbums.put(id, 0); handler.sendEmptyMessage(MSG_PURCHASE_SUCCESS);// 通知主线程发起同步 } else if (ordertype.equals(Constant.ordertype_audio)) { WatchDog.purchasingMusics.put(id, 0); handler.sendEmptyMessage(MSG_PURCHASE_SUCCESS_MUSIC);// 通知主线程发起同步 } } else if ("1".equals(resultcode)) { // 提示余额不足 showBuyResultDialog("购买失败:余额不足"); } else if ("5".equals(resultcode)) { // 提示已购买 showBuyResultDialog("购买失败:您已经购买了该商品"); if (ordertype.equals(Constant.ordertype_album)) { handler.sendEmptyMessage(MSG_PURCHASE_SUCCESS);// 通知主线程发起同步 } else if (ordertype.equals(Constant.ordertype_audio)) { handler.sendEmptyMessage(MSG_PURCHASE_SUCCESS_MUSIC);// 通知主线程发起同步 } } else if ("10".equals(resultcode)) { // 不是在售商品 showBuyResultDialog("购买失败:不是在售商品"); } else if ("15".equals(resultcode)) { // 绑定用户无效 showBuyResultDialog("购买失败:不是有效用户"); } else if ("20".equals(resultcode)) { // 密码错误 showBuyResultDialog("购买失败:密码错误"); } else if ("25".equals(resultcode)) { // 未知错误 showBuyResultDialog("购买失败:未知错误"); } else if ("-1".equals(resultcode)) { // 通信失败 showBuyResultDialog("购买失败:通信失败"); } } protected LinearLayout createDialogContent(Drawable drawable, String str) { LinearLayout llContent = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.common_dialog_content, null); ImageView iv = (ImageView) llContent.findViewById(R.id.iv_common); TextView tv = (TextView) llContent.findViewById(R.id.tv_common); iv.setBackgroundDrawable(drawable); if (drawable instanceof AnimationDrawable) { ((AnimationDrawable) drawable).start(); } tv.setText(str); return llContent; } private void registerReceivers() { Log.e(TAG, "registerReceivers"); context.registerReceiver(buyMusicReceiver, new IntentFilter("buyAlbumMusicReceiver")); // context.registerReceiver(webDetailPageUpdateUIReceiver, new // IntentFilter("webDetailPageUpdateUIReceiver")); // context.registerReceiver(collectTheFuckingGarbageReceiver, new // IntentFilter("collectTheFuckingGarbageReceiver")); } private void unregisterReceivers() { Log.e(TAG, "unregisterReceivers"); // context.unregisterReceiver(updateListReceiver); context.unregisterReceiver(buyMusicReceiver); // context.unregisterReceiver(webDetailPageUpdateUIReceiver); // context.unregisterReceiver(collectTheFuckingGarbageReceiver); } private boolean isThisListPlaying(List<Music> list) { if (WatchDog.currentList == null) { return false; } else { String name1 = list.get(0).getName(); String name2 = WatchDog.currentList.get(0).getName(); return name1.equals(name2); } } class ChildHolder { private TextView tvNum; private TextView tvName; private TextView tvArtist; private Button btnBuy; private Button btnListen; private LinearLayout llListen; private boolean btnBuyFunctionB = false; ChildHolder(View convertView) { tvNum = (TextView) convertView.findViewById(R.id.tv_num); tvName = (TextView) convertView.findViewById(R.id.tv_music_name); tvArtist = (TextView) convertView.findViewById(R.id.tv_music_artist); btnBuy = (Button) convertView.findViewById(R.id.btn_buy); btnListen = (Button) convertView.findViewById(R.id.btn_listen); llListen = (LinearLayout) convertView.findViewById(R.id.ll_listen); } } @Override public void letsSeeHeaven() { albumdetail = null; diskli = null; } @Override public void recordCurrentDataAndPosition() { // TODO Auto-generated method stub } @Override public void getSavedDataAndPosition() { // TODO Auto-generated method stub } @Override public int getFistVisiblePosition() { return -1; } @Override public int getLastVisiblePosition() { return -1; } @Override public void recycleBitmaps() { // if (bitmap!=null && !bitmap.equals(Constant.albumCover)) { // bitmap.recycle(); // } } @Override public void updateTitlebar() { WatchDog.tabWebFragment.setPopbackable(true); } @Override public void onDataLoadFailed() { Log.e("BUG953", TAG + "onDataLoadFailed"); handler.sendEmptyMessage(MSG_DATA_LOAD_FAILD); } @Override public void reload() { Log.e("BUG953", TAG + "reload"); startLoading(); getData(); } private void playLocally(Long musicId) { new MediaUtil(context).playLocally(musicId); } private void collectAlbum(){ new Thread(new Runnable() { @Override public void run() { Album album=new Album(); album.setId(albumdetail.getAlbumId()); album.setName(albumName); album.setImgUrl(imgUrl); new Collector().collectAlbum(album); } }).start(); } private void collectMusic(final Long musicId) { Toast.makeText(context, "collectMusic...", Toast.LENGTH_SHORT).show(); new Thread(new Runnable() { @Override public void run() { // 拿到MusicDetail和下载地址 String json = new HttpGetter(context).getMusicDetail(musicId); System.out.println("jsonMusicDetail=" + json); MusicDetail mDetail = new JsonUtil().getMusicDetail(json); // String fileName = mDetail.getName() + ".mp3"; // // DownloadManager从url中下载文件到指定文件夹 // downloadFile(url, fileName); Music music=new Music(); music.setId(musicId); music.setName(mDetail.getName()); music.setArtistName(mDetail.getArtist()); music.setImgUrl(mDetail.getImgUrl()); music.setPlay_time(mDetail.getDuration()); music.setUri(mDetail.getListenUrl()); new Collector().collectMusic(music); } }).start(); } private void downloadFile(String url, String fileName) { File destinationDir = new File(Constant.MUSIC_DOWNLOAD_PATH); if (!destinationDir.exists()) { System.out.println("create destinationDir"); destinationDir.mkdirs(); } File destinationFile = new File(Constant.MUSIC_DOWNLOAD_PATH + fileName); String serviceString = Context.DOWNLOAD_SERVICE; DownloadManager downloadManager; downloadManager = (DownloadManager) UpnpApp.context.getSystemService(serviceString); DownloadManager.Request request = new Request(Uri.parse(url)); request.setDestinationUri(Uri.fromFile(destinationFile)); long originReference = downloadManager.enqueue(request); System.out.println("task originReference=" + fileName); } }