/*
* Created by Angel Leon (@gubatron), Alden Torres (aldenml)
* Copyright (c) 2011-2014, FrostWire(R). All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.bt.download.android.gui.adapters;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.*;
import com.frostwire.transfers.TransferItem;
import com.frostwire.transfers.TransferState;
import org.apache.commons.io.FilenameUtils;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.bt.download.android.R;
import com.bt.download.android.core.ConfigurationManager;
import com.bt.download.android.core.Constants;
import com.bt.download.android.core.MediaType;
import com.bt.download.android.gui.NetworkManager;
import com.bt.download.android.gui.adapters.menu.BrowsePeerMenuAction;
import com.bt.download.android.gui.adapters.menu.CancelMenuAction;
import com.bt.download.android.gui.adapters.menu.OpenMenuAction;
import com.bt.download.android.gui.adapters.menu.PauseDownloadMenuAction;
import com.bt.download.android.gui.adapters.menu.ResumeDownloadMenuAction;
import com.bt.download.android.gui.transfers.BittorrentDownload;
import com.bt.download.android.gui.transfers.DownloadTransfer;
import com.bt.download.android.gui.transfers.HttpDownload;
import com.bt.download.android.gui.transfers.PeerHttpDownload;
import com.bt.download.android.gui.transfers.PeerHttpUpload;
import com.bt.download.android.gui.transfers.SoundcloudDownload;
import com.bt.download.android.gui.transfers.TorrentFetcherDownload;
import com.bt.download.android.gui.transfers.Transfer;
import com.bt.download.android.gui.transfers.YouTubeDownload;
import com.bt.download.android.gui.util.UIUtils;
import com.bt.download.android.gui.views.MenuAction;
import com.bt.download.android.gui.views.MenuAdapter;
import com.bt.download.android.gui.views.MenuBuilder;
import com.frostwire.uxstats.UXAction;
import com.frostwire.uxstats.UXStats;
/**
*
* @author gubatron
* @author aldenml
*
*/
public class TransferListAdapter extends BaseExpandableListAdapter {
private static final String TAG = "FW.TransferListAdapter";
private final WeakReference<Context> context;
private final OnClickListener viewOnClickListener;
private final ViewOnLongClickListener viewOnLongClickListener;
private final OpenOnClickListener playOnClickListener;
/** Keep track of all dialogs ever opened so we dismiss when we leave to avoid memleaks */
private final List<Dialog> dialogs;
private List<Transfer> list;
private final Map<String,String> TRANSFER_STATE_STRING_MAP = new Hashtable<String,String>();
public TransferListAdapter(Context context, List<Transfer> list) {
this.context = new WeakReference<Context>(context);
this.viewOnClickListener = new ViewOnClickListener();
this.viewOnLongClickListener = new ViewOnLongClickListener();
this.playOnClickListener = new OpenOnClickListener();
this.dialogs = new ArrayList<Dialog>();
this.list = list.equals(Collections.emptyList()) ? new ArrayList<Transfer>() : list;
initTransferStateStringMap();
}
private void initTransferStateStringMap() {
Context c = context.get();
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.QUEUED_FOR_CHECKING), c.getString(R.string.queued_for_checking));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.CHECKING), c.getString(R.string.checking_ellipsis));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.DOWNLOADING_METADATA), c.getString(R.string.downloading_metadata));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.DOWNLOADING_TORRENT), c.getString(R.string.torrent_fetcher_download_status_downloading_torrent));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.DOWNLOADING), c.getString(R.string.azureus_manager_item_downloading));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.FINISHED), c.getString(R.string.azureus_peer_manager_status_finished));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.SEEDING), c.getString(R.string.azureus_manager_item_seeding));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.ALLOCATING), c.getString(R.string.azureus_manager_item_allocating));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.PAUSED), c.getString(R.string.azureus_manager_item_paused));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.ERROR), c.getString(R.string.azureus_manager_item_error));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.ERROR_MOVING_INCOMPLETE), c.getString(R.string.error_moving_incomplete));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.ERROR_HASH_MD5), c.getString(R.string.error_wrong_md5_hash));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.ERROR_SIGNATURE), c.getString(R.string.error_wrong_signature));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.ERROR_NOT_ENOUGH_PEERS), c.getString(R.string.error_not_enough_peers));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.STOPPED), c.getString(R.string.azureus_manager_item_stopped));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.PAUSING), c.getString(R.string.pausing));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.CANCELING), c.getString(R.string.canceling));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.CANCELED), c.getString(R.string.torrent_fetcher_download_status_canceled));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.WAITING), c.getString(R.string.waiting));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.COMPLETE), c.getString(R.string.peer_http_download_status_complete));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.UPLOADING), c.getString(R.string.peer_http_upload_status_uploading));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.UNCOMPRESSING), c.getString(R.string.http_download_status_uncompressing));
TRANSFER_STATE_STRING_MAP.put(String.valueOf(TransferState.DEMUXING), c.getString(R.string.transfer_status_demuxing));
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return list.get(groupPosition).getItems().get(childPosition);
}
public TransferItem getChildItem(int groupPosition, int childPosition) {
return list.get(groupPosition).getItems().get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
TransferItem item = getChildItem(groupPosition, childPosition);
if (convertView == null) {
convertView = View.inflate(context.get(), R.layout.view_transfer_item_list_item, null);
convertView.setOnClickListener(viewOnClickListener);
convertView.setOnLongClickListener(viewOnLongClickListener);
}
try {
initTouchFeedback(convertView, item);
populateChildView(convertView, item);
} catch (Throwable e) {
Log.e(TAG, "Fatal error getting view: " + e.getMessage());
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
int size = list.get(groupPosition).getItems().size();
return size <= 1 ? 0 : size;
}
@Override
public Object getGroup(int groupPosition) {
return list.get(groupPosition);
}
public Transfer getGroupItem(int groupPosition) {
return list.get(groupPosition);
}
@Override
public int getGroupCount() {
return list.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
Transfer item = getGroupItem(groupPosition);
if (convertView == null || convertView instanceof TextView) {
// convertView could be a dummy view due to an issue with the slide menu layout request order
try {
convertView = View.inflate(context.get(), R.layout.view_transfer_list_item, null);
} catch (Throwable e) {
// creating a dummy view to avoid a force close due to a NPE
// next time the "if" will try to recover the actual layout
convertView = new TextView(context.get());
((TextView) convertView).setText("Rendering error");
}
}
try {
boolean clickable = item.getItems().size() == 0;
convertView.setOnClickListener(clickable ? viewOnClickListener : null);
convertView.setOnLongClickListener(clickable ? viewOnLongClickListener : null);
convertView.setClickable(clickable);
convertView.setLongClickable(clickable);
setupGroupIndicator(convertView, isExpanded, item);
convertView.setTag(item);
populateGroupView(convertView, item);
} catch (Throwable e) {
Log.e(TAG, "Fatal error getting the group view: " + e.getMessage(), e);
}
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
public void updateList(List<Transfer> g) {
list = g;
notifyDataSetChanged();
}
public void dismissDialogs() {
for (Dialog dialog : dialogs) {
try {
dialog.dismiss();
} catch (Throwable e) {
Log.w(TAG, "Error dismissing dialog", e);
}
}
}
@SuppressWarnings("unchecked")
protected static <TView extends View> TView findView(View view, int id) {
return (TView) view.findViewById(id);
}
protected void populateGroupView(View view, Transfer transfer) {
if (transfer instanceof BittorrentDownload) {
populateBittorrentDownload(view, (BittorrentDownload) transfer);
} else if (transfer instanceof PeerHttpDownload) {
populatePeerDownload(view, (PeerHttpDownload) transfer);
} else if (transfer instanceof PeerHttpUpload) {
populatePeerUpload(view, (PeerHttpUpload) transfer);
} else if (transfer instanceof HttpDownload) {
populateHttpDownload(view, (HttpDownload) transfer);
} else if (transfer instanceof YouTubeDownload) {
populateYouTubeDownload(view, (YouTubeDownload) transfer);
} else if (transfer instanceof SoundcloudDownload) {
populateSoundcloudDownload(view, (SoundcloudDownload) transfer);
}
}
protected void populateChildView(View view, TransferItem item) {
populateBittorrentDownloadItem(view, item);
}
protected MenuAdapter getMenuAdapter(View view) {
Object tag = view.getTag();
String title = "";
List<MenuAction> items = new ArrayList<MenuAction>();
if (tag instanceof BittorrentDownload) {
BittorrentDownload download = (BittorrentDownload) tag;
title = download.getDisplayName();
//If it's a torrent download with a single file, we should be able to open it.
if (download.isComplete()) {
TransferItem transferItem = download.getItems().get(0);
String path = transferItem.getFile().getAbsolutePath();
String mimeType = UIUtils.getMimeType(path);
items.add(new OpenMenuAction(context.get(), path, mimeType));
}
if (!download.isComplete() || ConfigurationManager.instance().getBoolean(Constants.PREF_KEY_TORRENT_SEED_FINISHED_TORRENTS)) {
if (download.isPausable()) {
items.add(new PauseDownloadMenuAction(context.get(), download));
} else if (download.isResumable()) {
boolean wifiIsUp = NetworkManager.instance().isDataWIFIUp();
boolean bittorrentOnMobileData = ConfigurationManager.instance().getBoolean(Constants.PREF_KEY_NETWORK_USE_MOBILE_DATA);
if (wifiIsUp || (!wifiIsUp && bittorrentOnMobileData)) {
if (!download.isComplete()) {
items.add(new ResumeDownloadMenuAction(context.get(), download, R.string.resume_torrent_menu_action));
} else {
//let's see if we can seed...
boolean seedTorrents = ConfigurationManager.instance().getBoolean(Constants.PREF_KEY_TORRENT_SEED_FINISHED_TORRENTS);
boolean seedTorrentsOnWifiOnly = ConfigurationManager.instance().getBoolean(Constants.PREF_KEY_TORRENT_SEED_FINISHED_TORRENTS_WIFI_ONLY);
if ((seedTorrents && !seedTorrentsOnWifiOnly) ||
(seedTorrents && seedTorrentsOnWifiOnly && wifiIsUp)) {
items.add(new ResumeDownloadMenuAction(context.get(), download, R.string.seed));
}
}
}
}
}
items.add(new CancelMenuAction(context.get(), download, !download.isComplete()));
} else if (tag instanceof DownloadTransfer) {
DownloadTransfer download = (DownloadTransfer) tag;
title = download.getDisplayName();
boolean errored = download.getStatus() != null && getStatusFromResId(download.getStatus()).contains("Error");
boolean openMenu = false;
openMenu |= !errored && download.isComplete() && (tag instanceof HttpDownload || tag instanceof PeerHttpDownload || tag instanceof YouTubeDownload || tag instanceof SoundcloudDownload);
if (openMenu) {
items.add(new OpenMenuAction(context.get(), download.getDisplayName(), download.getSavePath().getAbsolutePath(), extractMime(download)));
}
if (download instanceof PeerHttpDownload) {
PeerHttpDownload pdownload = (PeerHttpDownload) download;
items.add(new BrowsePeerMenuAction(context.get(), pdownload.getPeer()));
}
items.add(new CancelMenuAction(context.get(), download, !openMenu));
} else if (tag instanceof PeerHttpUpload) {
PeerHttpUpload upload = (PeerHttpUpload) tag;
title = upload.getDisplayName();
items.add(new CancelMenuAction(context.get(), upload, false));
}
return items.size() > 0 ? new MenuAdapter(context.get(), title, items) : null;
}
protected String extractMime(DownloadTransfer download) {
if (download instanceof PeerHttpDownload) {
return ((PeerHttpDownload) download).getFD().mime;
} else {
return UIUtils.getMimeType(download.getSavePath().getAbsolutePath());
}
}
protected Dialog trackDialog(Dialog dialog) {
dialogs.add(dialog);
return dialog;
}
private void setupGroupIndicator(View view, boolean expanded, Transfer item) {
ImageView groupIndicator = findView(view, R.id.view_transfer_list_item_group_indicator);
if (groupIndicator != null) {
if (item.getItems().size() <= 1) {
//show the file type for the only file there is
String extension = null;
String path = null;
if (item instanceof BittorrentDownload) {
BittorrentDownload bItem = (BittorrentDownload) item;
if (bItem.getItems().size() > 0) {
TransferItem transferItem = bItem.getItems().get(0);
path = transferItem.getFile().getAbsolutePath();
extension = FilenameUtils.getExtension(path);
}
} else if (item instanceof DownloadTransfer) {
DownloadTransfer transferItem = (DownloadTransfer) item;
if (transferItem.getSavePath() != null) {
path = transferItem.getSavePath().getAbsolutePath();
extension = FilenameUtils.getExtension(path);
}
} else if (item instanceof PeerHttpUpload) {
PeerHttpUpload transferItem = (PeerHttpUpload) item;
path = transferItem.getFD().filePath;
extension = FilenameUtils.getExtension(path);
}
if (extension != null && extension.equals("apk")) {
try {
//Apk apk = new Apk(context,path);
//TODO: Get the APK Icon so we can show the APK icon on the transfer manager once
//it's finished downloading, or as it's uploading to another peer.
//apk.getDrawable(id);
//in the meantime, just hardcode it
groupIndicator.setImageResource(R.drawable.browse_peer_application_icon_selector_menu);
} catch (Throwable e) {
groupIndicator.setImageResource(R.drawable.browse_peer_application_icon_selector_menu);
}
} else {
groupIndicator.setImageResource(getFileTypeIconId(extension));
}
} else {
groupIndicator.setImageResource(expanded ? R.drawable.transfer_menuitem_minus : R.drawable.transfer_menuitem_plus);
}
}
}
private void initTouchFeedback(View v, TransferItem item) {
v.setOnClickListener(viewOnClickListener);
v.setOnLongClickListener(viewOnLongClickListener);
v.setTag(item);
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
int count = vg.getChildCount();
for (int i = 0; i < count; i++) {
View child = vg.getChildAt(i);
initTouchFeedback(child, item);
}
}
}
private void populateBittorrentDownload(View view, BittorrentDownload download) {
TextView title = findView(view, R.id.view_transfer_list_item_title);
ProgressBar progress = findView(view, R.id.view_transfer_list_item_progress);
TextView status = findView(view, R.id.view_transfer_list_item_status);
TextView speed = findView(view, R.id.view_transfer_list_item_speed);
TextView size = findView(view, R.id.view_transfer_list_item_size);
ImageView buttonAction = findView(view, R.id.view_transfer_list_item_button_action);
TextView seeds = findView(view, R.id.view_transfer_list_item_seeds);
TextView peers = findView(view, R.id.view_transfer_list_item_peers);
seeds.setText(context.get().getString(R.string.seeds_n, download.getSeeds()));
peers.setText(context.get().getString(R.string.peers_n, download.getPeers()));
title.setText(download.getDisplayName());
progress.setProgress(download.getProgress());
status.setText(TRANSFER_STATE_STRING_MAP.get(download.getStatus()));
speed.setText(UIUtils.getBytesInHuman(download.getDownloadSpeed()) + "/s");
size.setText(UIUtils.getBytesInHuman(download.getSize()));
buttonAction.setTag(download);
buttonAction.setOnClickListener(viewOnClickListener);
}
private void populatePeerDownload(View view, PeerHttpDownload download) {
TextView title = findView(view, R.id.view_transfer_list_item_title);
ProgressBar progress = findView(view, R.id.view_transfer_list_item_progress);
TextView status = findView(view, R.id.view_transfer_list_item_status);
TextView speed = findView(view, R.id.view_transfer_list_item_speed);
TextView size = findView(view, R.id.view_transfer_list_item_size);
TextView seeds = findView(view, R.id.view_transfer_list_item_seeds);
TextView peers = findView(view, R.id.view_transfer_list_item_peers);
ImageView buttonAction = findView(view, R.id.view_transfer_list_item_button_action);
seeds.setText("");
peers.setText("");
title.setText(download.getDisplayName());
progress.setProgress(download.getProgress());
status.setText(getStatusFromResId(download.getStatus()));
speed.setText(UIUtils.getBytesInHuman(download.getDownloadSpeed()) + "/s");
size.setText(UIUtils.getBytesInHuman(download.getSize()));
buttonAction.setTag(download);
buttonAction.setOnClickListener(viewOnClickListener);
}
private void populatePeerUpload(View view, PeerHttpUpload upload) {
TextView title = findView(view, R.id.view_transfer_list_item_title);
ProgressBar progress = findView(view, R.id.view_transfer_list_item_progress);
TextView status = findView(view, R.id.view_transfer_list_item_status);
TextView speed = findView(view, R.id.view_transfer_list_item_speed);
TextView size = findView(view, R.id.view_transfer_list_item_size);
TextView seeds = findView(view, R.id.view_transfer_list_item_seeds);
TextView peers = findView(view, R.id.view_transfer_list_item_peers);
ImageView buttonAction = findView(view, R.id.view_transfer_list_item_button_action);
seeds.setText("");
peers.setText("");
title.setText(upload.getDisplayName());
progress.setProgress(upload.getProgress());
status.setText(getStatusFromResId(upload.getStatus()));
speed.setText(UIUtils.getBytesInHuman(upload.getUploadSpeed()) + "/s");
size.setText(UIUtils.getBytesInHuman(upload.getSize()));
buttonAction.setTag(upload);
buttonAction.setOnClickListener(viewOnClickListener);
}
private void populateHttpDownload(View view, HttpDownload download) {
TextView title = findView(view, R.id.view_transfer_list_item_title);
ProgressBar progress = findView(view, R.id.view_transfer_list_item_progress);
TextView status = findView(view, R.id.view_transfer_list_item_status);
TextView speed = findView(view, R.id.view_transfer_list_item_speed);
TextView size = findView(view, R.id.view_transfer_list_item_size);
TextView seeds = findView(view, R.id.view_transfer_list_item_seeds);
TextView peers = findView(view, R.id.view_transfer_list_item_peers);
ImageView buttonAction = findView(view, R.id.view_transfer_list_item_button_action);
seeds.setText("");
peers.setText("");
title.setText(download.getDisplayName());
progress.setProgress(download.getProgress());
status.setText(getStatusFromResId(download.getStatus()));
speed.setText(UIUtils.getBytesInHuman(download.getDownloadSpeed()) + "/s");
size.setText(UIUtils.getBytesInHuman(download.getSize()));
buttonAction.setTag(download);
buttonAction.setOnClickListener(viewOnClickListener);
}
private void populateBittorrentDownloadItem(View view, TransferItem item) {
ImageView icon = findView(view, R.id.view_transfer_item_list_item_icon);
TextView title = findView(view, R.id.view_transfer_item_list_item_title);
ProgressBar progress = findView(view, R.id.view_transfer_item_list_item_progress);
TextView size = findView(view, R.id.view_transfer_item_list_item_size);
ImageButton buttonPlay = findView(view, R.id.view_transfer_item_list_item_button_play);
icon.setImageResource(getFileTypeIconId(FilenameUtils.getExtension(item.getFile().getAbsolutePath())));
title.setText(item.getDisplayName());
progress.setProgress(item.getProgress());
size.setText(UIUtils.getBytesInHuman(item.getSize()));
buttonPlay.setTag(item);
buttonPlay.setVisibility(item.isComplete() ? View.VISIBLE : View.GONE);
buttonPlay.setOnClickListener(playOnClickListener);
}
private void populateYouTubeDownload(View view, YouTubeDownload download) {
TextView title = findView(view, R.id.view_transfer_list_item_title);
ProgressBar progress = findView(view, R.id.view_transfer_list_item_progress);
TextView status = findView(view, R.id.view_transfer_list_item_status);
TextView speed = findView(view, R.id.view_transfer_list_item_speed);
TextView size = findView(view, R.id.view_transfer_list_item_size);
TextView seeds = findView(view, R.id.view_transfer_list_item_seeds);
TextView peers = findView(view, R.id.view_transfer_list_item_peers);
ImageView buttonAction = findView(view, R.id.view_transfer_list_item_button_action);
seeds.setText("");
peers.setText("");
title.setText(download.getDisplayName());
progress.setProgress(download.getProgress());
status.setText(getStatusFromResId(download.getStatus()));
speed.setText(UIUtils.getBytesInHuman(download.getDownloadSpeed()) + "/s");
size.setText(UIUtils.getBytesInHuman(download.getSize()));
buttonAction.setTag(download);
buttonAction.setOnClickListener(viewOnClickListener);
}
private void populateSoundcloudDownload(View view, SoundcloudDownload download) {
TextView title = findView(view, R.id.view_transfer_list_item_title);
ProgressBar progress = findView(view, R.id.view_transfer_list_item_progress);
TextView status = findView(view, R.id.view_transfer_list_item_status);
TextView speed = findView(view, R.id.view_transfer_list_item_speed);
TextView size = findView(view, R.id.view_transfer_list_item_size);
TextView seeds = findView(view, R.id.view_transfer_list_item_seeds);
TextView peers = findView(view, R.id.view_transfer_list_item_peers);
ImageView buttonAction = findView(view, R.id.view_transfer_list_item_button_action);
seeds.setText("");
peers.setText("");
title.setText(download.getDisplayName());
progress.setProgress(download.getProgress());
status.setText(getStatusFromResId(download.getStatus()));
speed.setText(UIUtils.getBytesInHuman(download.getDownloadSpeed()) + "/s");
size.setText(UIUtils.getBytesInHuman(download.getSize()));
buttonAction.setTag(download);
buttonAction.setOnClickListener(viewOnClickListener);
}
private String getStatusFromResId(String str) {
String s = "";
try {
s = context.get().getString(Integer.parseInt(str));
} catch (Throwable e) {
// ignore
}
return s;
}
private static int getFileTypeIconId(String ext) {
MediaType mt = MediaType.getMediaTypeForExtension(ext);
if (mt == null) {
return R.drawable.question_mark;
}
if (mt.equals(MediaType.getApplicationsMediaType())) {
return R.drawable.browse_peer_application_icon_selector_menu;
} else if (mt.equals(MediaType.getAudioMediaType())) {
return R.drawable.browse_peer_audio_icon_selector_menu;
} else if (mt.equals(MediaType.getDocumentMediaType())) {
return R.drawable.browse_peer_document_icon_selector_menu;
} else if (mt.equals(MediaType.getImageMediaType())) {
return R.drawable.browse_peer_picture_icon_selector_menu;
} else if (mt.equals(MediaType.getVideoMediaType())) {
return R.drawable.browse_peer_video_icon_selector_menu;
} else if (mt.equals(MediaType.getTorrentMediaType())) {
return R.drawable.browse_peer_torrent_icon_selector_menu;
} else {
return R.drawable.question_mark;
}
}
private final class ViewOnClickListener implements OnClickListener {
public void onClick(View v) {
try {
MenuAdapter adapter = getMenuAdapter(v);
if (adapter != null) {
trackDialog(new MenuBuilder(adapter).show());
return;
}
} catch (Throwable e) {
Log.e(TAG, "Failed to create the menu", e);
}
}
}
private final class ViewOnLongClickListener implements OnLongClickListener {
public boolean onLongClick(View v) {
try {
MenuAdapter adapter = getMenuAdapter(v);
if (adapter != null) {
trackDialog(new MenuBuilder(adapter).show());
return true;
}
} catch (Throwable e) {
Log.e(TAG, "Failed to create the menu");
}
return false;
}
}
private final class OpenOnClickListener implements OnClickListener {
public void onClick(View v) {
TransferItem item = (TransferItem) v.getTag();
boolean canOpen = false;
canOpen |= item.isComplete();
if (canOpen) {
File savePath = item.getFile();
if (savePath != null) {
if (savePath.exists()) {
UIUtils.openFile(context.get(), savePath);
} else {
UIUtils.showShortMessage(context.get(), R.string.cant_open_file_does_not_exist, savePath.getName());
}
}
}
}
}
}