package com.hanju.video.app.ui.recent;
|
|
import android.database.Cursor;
|
import android.net.Uri;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.os.Environment;
|
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.ListFragment;
|
import android.view.MotionEvent;
|
import android.view.View;
|
import android.view.View.OnClickListener;
|
import android.widget.Button;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
import android.widget.ToggleButton;
|
import android.widget.LinearLayout.LayoutParams;
|
|
import com.mozillaonline.providers.DownloadManager;
|
import com.umeng.analytics.MobclickAgent;
|
import com.hanju.video.app.R;
|
import com.hanju.video.app.db.DownloadTable;
|
import com.hanju.video.app.ui.BaseActivity;
|
import com.hanju.video.app.ui.recent.DownLoadAdapter.IGetDeleteCallback;
|
import com.hanju.video.app.ui.recent.DownLoadAdapter.IGetSelectStatus;
|
import com.hanju.video.app.util.ui.StatusBarUtil;
|
|
public class DownLoadActivity extends BaseActivity implements OnClickListener,
|
IGetDeleteCallback, IGetSelectStatus {
|
|
private TextView tv_top_bar_left;
|
private TextView tv_top_bar_middle;
|
private ToggleButton tv_top_bar_right;
|
|
private Button btn_episode_more;
|
|
private LinearLayout ll_recent_bottom;
|
|
private Button btn_select_all;
|
|
private Button btn_delete_item;
|
|
@Override
|
public boolean onTouchEvent(MotionEvent event) {
|
return super.onTouchEvent(event);
|
}
|
|
@Override
|
protected void onCreate(Bundle arg0) {
|
super.onCreate(arg0);
|
setContentView(R.layout.download_group_activity);
|
StatusBarUtil.init(this);
|
tv_top_bar_left = findViewById(R.id.tv_top_bar_left);
|
tv_top_bar_middle = findViewById(R.id.tv_top_bar_middle);
|
tv_top_bar_right = findViewById(R.id.btn_delete);
|
ll_recent_bottom = findViewById(R.id.ll_recent_bottom);
|
btn_select_all = findViewById(R.id.btn_select_all);
|
btn_delete_item = findViewById(R.id.btn_delete_item);
|
btn_episode_more = findViewById(R.id.btn_episode_more);
|
|
btn_select_all.setOnClickListener(this);
|
btn_delete_item.setOnClickListener(this);
|
btn_episode_more.setOnClickListener(this);
|
|
tv_top_bar_left.setOnClickListener(this);
|
tv_top_bar_middle.setText(getIntent().getStringExtra("video_name"));
|
tv_top_bar_right.setOnClickListener(this);
|
|
DownloadGroupFragment fragment = new DownloadGroupFragment();
|
fragment.setDeleteCallback(this);
|
fragment.setSelectStatus(this);
|
Bundle args = new Bundle();
|
args.putString("video_id", getIntent().getStringExtra("video_id"));
|
fragment.setArguments(args);
|
|
getSupportFragmentManager()
|
.beginTransaction()
|
.replace(R.id.fl_download_fragment_container, fragment,
|
"DownloadGroupFragment").commitAllowingStateLoss();
|
}
|
|
boolean isSelected = false;
|
boolean isdown = false;
|
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()) {
|
case R.id.tv_top_bar_left: {
|
onBackPressed();
|
}
|
break;
|
case R.id.btn_delete: {
|
boolean noData = false;
|
Fragment fragment = getSupportFragmentManager().findFragmentByTag(
|
"DownloadGroupFragment");
|
if (fragment != null && fragment.isResumed()) {
|
((DownloadGroupFragment) fragment).toggleSelectedMode();
|
noData = ((DownloadGroupFragment) fragment).getCount() == 0;
|
}
|
ll_recent_bottom
|
.setVisibility(ll_recent_bottom.getVisibility() == View.VISIBLE ? View.GONE
|
: (noData ? View.GONE : View.VISIBLE));
|
}
|
break;
|
case R.id.btn_select_all: {
|
isSelected = !isSelected;
|
if (isSelected) {
|
btn_select_all.setText("全不选");
|
} else {
|
btn_select_all.setText("全选");
|
}
|
Fragment fragment = getSupportFragmentManager().findFragmentByTag(
|
"DownloadGroupFragment");
|
if (fragment != null && fragment.isResumed()) {
|
((DownloadGroupFragment) fragment).selectAll(isSelected);
|
}
|
}
|
break;
|
case R.id.btn_delete_item: {
|
Fragment fragment = getSupportFragmentManager().findFragmentByTag(
|
"DownloadGroupFragment");
|
if (fragment != null && fragment.isResumed()) {
|
((DownloadGroupFragment) fragment).deleteDownload();
|
btn_delete_item.setText("删除");
|
}
|
ll_recent_bottom.postDelayed(new Runnable() {
|
|
@Override
|
public void run() {
|
updateView();
|
}
|
}, 200);
|
}
|
break;
|
case R.id.btn_episode_more: {
|
btn_episode_more.setVisibility(View.GONE);
|
tv_top_bar_right.setClickable(false);
|
// getSupportFragmentManager()
|
// .beginTransaction()
|
// .setCustomAnimations(R.anim.slide_in_from_bottom,
|
// R.anim.slide_out_to_bottom)
|
// .replace(
|
// R.id.fl_download_fragment_container,
|
// VideoEpisodeFragment3
|
// .newInstance((VideoInfo) getIntent()
|
// .getSerializableExtra("video_info")))
|
// .addToBackStack("VideoEpisodeFragment3")
|
// .commitAllowingStateLoss();
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
|
private void updateView() {
|
boolean noData = false;
|
Fragment fragment = getSupportFragmentManager().findFragmentByTag(
|
"DownloadGroupFragment");
|
if (fragment != null && fragment.isResumed()) {
|
noData = ((DownloadGroupFragment) fragment).getCount() == 0;
|
if (noData) {
|
((DownloadGroupFragment) fragment).toggleSelectedMode();
|
}
|
}
|
ll_recent_bottom.setVisibility(noData ? View.GONE : View.VISIBLE);
|
if (ll_recent_bottom.isShown()) {
|
} else {
|
btn_delete_item.setText("删除");
|
if (isSelected) {
|
isSelected = false;
|
btn_select_all.setText("全选");
|
}
|
}
|
if (noData) {
|
finish();
|
}
|
}
|
|
@Override
|
public void onBackPressed() {
|
updateMore();
|
super.onBackPressed();
|
}
|
|
public void updateMore() {
|
btn_episode_more.setVisibility(View.VISIBLE);
|
tv_top_bar_right.setClickable(true);
|
}
|
|
public static class DownloadGroupFragment extends ListFragment {
|
|
private DownloadManager mDownloadManager;
|
|
private Cursor mDateSortedCursor;
|
|
private DownLoadAdapter mDownLoadAdapter;
|
private IGetDeleteCallback getdeleteNumber = null;
|
private IGetSelectStatus status = null;
|
|
public void setSelectStatus(IGetSelectStatus status) {
|
this.status = status;
|
if (mDownLoadAdapter != null)
|
mDownLoadAdapter.setSelectStatus(status);
|
}
|
|
public void setDeleteCallback(IGetDeleteCallback getdeleteNumber) {
|
this.getdeleteNumber = getdeleteNumber;
|
if (mDownLoadAdapter != null)
|
mDownLoadAdapter.setDeleteCallback(getdeleteNumber);
|
}
|
|
@Override
|
public void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
|
mDownloadManager = new DownloadManager(getActivity()
|
.getContentResolver(), getActivity().getPackageName());
|
mDownloadManager.setAccessAllDownloads(true);
|
}
|
|
@Override
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
super.onViewCreated(view, savedInstanceState);
|
getListView().setDividerHeight(1);
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
MobclickAgent.onPageStart("电视剧多集下载");
|
Cursor cursor = getActivity().getContentResolver().query(
|
DownloadTable.CONTENT_URI, null,
|
DownloadTable.VIDEO_ID + " = ? ",
|
new String[] { getArguments().getString("video_id") },
|
DownloadTable.VIDEO_DETAIL_ID + " ASC");// 查询cursor
|
long[] ids = new long[cursor.getCount()];
|
int i = 0;
|
while (cursor.moveToNext()) {
|
ids[i++] = cursor.getLong(cursor
|
.getColumnIndex(DownloadTable.TASK_ID));// 控制ids顺序,实现顺序显示
|
}
|
cursor.close();
|
|
DownloadManager.Query baseQuery = new DownloadManager.Query()
|
.setOnlyIncludeVisibleInDownloadsUi(true)
|
.orderBy(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP,
|
DownloadManager.Query.ORDER_ASCENDING)
|
.setFilterById(ids);
|
|
// downloadprovider中helpers类parseStatement方法报错syntax error, expected
|
// column name
|
try {
|
mDateSortedCursor = mDownloadManager.query(baseQuery);
|
} catch (Exception e) {
|
Toast.makeText(getActivity(), "数据库异常", Toast.LENGTH_LONG)
|
.show();
|
}
|
|
mDownLoadAdapter = new DownLoadAdapter(getActivity(),
|
mDateSortedCursor, true);
|
if (getdeleteNumber != null)
|
mDownLoadAdapter.setDeleteCallback(getdeleteNumber);
|
if (status != null)
|
mDownLoadAdapter.setSelectStatus(status);
|
setListAdapter(mDownLoadAdapter);
|
|
((DownLoadActivity) getActivity()).updateMore();
|
}
|
|
public void deleteDownload() {
|
if (mDownLoadAdapter != null) {
|
if (!mDownLoadAdapter.getSelectedIds().isEmpty()) {
|
for (Long downloadId : mDownLoadAdapter.getSelectedIds()) {
|
deleteDownload(downloadId);
|
}
|
} else {
|
Toast.makeText(getActivity(), "请选择要删除的记录",
|
Toast.LENGTH_LONG).show();
|
}
|
}
|
}
|
|
/**
|
* Delete a download from the Download Manager.
|
*/
|
private void deleteDownload(long downloadId) {
|
getActivity().getContentResolver().delete(
|
DownloadTable.CONTENT_URI, DownloadTable.TASK_ID + " = ? ",
|
new String[] { String.valueOf(downloadId) });
|
if (moveToDownload(downloadId)) {
|
int status = mDateSortedCursor.getInt(mDateSortedCursor
|
.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS));
|
boolean isComplete = status == DownloadManager.STATUS_SUCCESSFUL
|
|| status == DownloadManager.STATUS_FAILED;
|
String localUri = mDateSortedCursor
|
.getString(mDateSortedCursor
|
.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_URI));
|
if (isComplete && localUri != null) {
|
String path = Uri.parse(localUri).getPath();
|
if (path.startsWith(Environment
|
.getExternalStorageDirectory().getPath())) {
|
mDownloadManager.markRowDeleted(downloadId);
|
return;
|
}
|
}
|
}
|
mDownloadManager.remove(downloadId);
|
}
|
|
/**
|
* Move {@link #mDateSortedCursor} to the download with the given ID.
|
*
|
* @return true if the specified download ID was found; false otherwise
|
*/
|
private boolean moveToDownload(long downloadId) {
|
for (mDateSortedCursor.moveToFirst(); !mDateSortedCursor
|
.isAfterLast(); mDateSortedCursor.moveToNext()) {
|
if (mDateSortedCursor.getLong(mDateSortedCursor
|
.getColumnIndexOrThrow(DownloadManager.COLUMN_ID)) == downloadId) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
if (mDateSortedCursor != null) {
|
mDateSortedCursor.close();
|
}
|
if (mDownLoadAdapter != null && mDownLoadAdapter.mCursor != null) {
|
mDownLoadAdapter.mCursor.close();
|
}
|
}
|
|
public void toggleSelectedMode() {
|
mDownLoadAdapter
|
.setSelectedMode(!mDownLoadAdapter.isSelectedMode());
|
}
|
|
public void selectAll(boolean isSelected) {
|
mDownLoadAdapter.selectAll(isSelected);
|
}
|
|
public int getCount() {
|
return mDownLoadAdapter.getCount();
|
}
|
}
|
|
@Override
|
public void onGetNum(int count) {
|
if (count == 0) {
|
btn_delete_item.setText("删除");
|
} else {
|
btn_delete_item.setText("删除(" + count + ")");
|
}
|
}
|
|
@Override
|
public void onGetStatus(boolean status) {
|
if (status) {
|
btn_episode_more.setVisibility(View.GONE);
|
} else {
|
btn_episode_more.setVisibility(View.VISIBLE);
|
}
|
}
|
}
|