diff --git a/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java b/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java
index 65d04bc8c..4c7ac440e 100644
--- a/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java
@@ -579,8 +579,7 @@ public class VideoItemDetailFragment extends Fragment {
}
args.putString(DownloadDialog.TITLE, info.title);
- DownloadDialog downloadDialog = new DownloadDialog();
- downloadDialog.setArguments(args);
+ DownloadDialog downloadDialog = DownloadDialog.newInstance(args);
downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog");
} catch (Exception e) {
Toast.makeText(VideoItemDetailFragment.this.getActivity(),
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index c53b4abb1..526eaba6f 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -1,19 +1,28 @@
package org.schabi.newpipe.download;
import android.Manifest;
-import android.app.Dialog;
+import android.content.ComponentName;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
-import android.support.annotation.NonNull;
+import android.os.IBinder;
+import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.DialogFragment;
import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.Toolbar;
import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.SeekBar;
+import android.widget.TextView;
import org.schabi.newpipe.App;
import org.schabi.newpipe.NewPipeSettings;
@@ -23,6 +32,10 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
+import us.shandian.giga.get.DownloadManager;
+import us.shandian.giga.service.DownloadManagerService;
+
+
/**
* Created by Christian Schabesberger on 21.09.15.
*
@@ -51,83 +64,126 @@ public class DownloadDialog extends DialogFragment {
public static final String FILE_SUFFIX_VIDEO = "file_suffix_video";
public static final String AUDIO_URL = "audio_url";
public static final String VIDEO_URL = "video_url";
- private Bundle arguments;
- @NonNull
+ private DownloadManager mManager;
+ private DownloadManagerService.DMBinder mBinder;
+
+ private ServiceConnection mConnection = new ServiceConnection() {
+
+ @Override
+ public void onServiceConnected(ComponentName p1, IBinder binder) {
+ mBinder = (DownloadManagerService.DMBinder) binder;
+ mManager = mBinder.getDownloadManager();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName p1) {
+
+ }
+ };
+
+
+ public DownloadDialog() {
+
+ }
+
+ public static DownloadDialog newInstance(Bundle args)
+ {
+ DownloadDialog dialog = new DownloadDialog();
+ dialog.setArguments(args);
+ dialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
+ return dialog;
+ }
+
@Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- arguments = getArguments();
- super.onCreateDialog(savedInstanceState);
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+
if(ContextCompat.checkSelfPermission(this.getContext(),Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle(R.string.download_dialog_title);
- // If no audio stream available
+ Intent i = new Intent();
+ i.setClass(getContext(), DownloadManagerService.class);
+ getContext().startService(i);
+ getContext().bindService(i, mConnection, Context.BIND_AUTO_CREATE);
+
+
+ return inflater.inflate(R.layout.dialog_url, container);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ Bundle arguments = getArguments();
+ final Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
+ final EditText name = (EditText) view.findViewById(R.id.file_name);
+ final TextView tCount = (TextView) view.findViewById(R.id.threads_count);
+ final SeekBar threads = (SeekBar) view.findViewById(R.id.threads);
+
+ toolbar.setTitle(R.string.download_dialog_title);
+ toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp);
+ toolbar.inflateMenu(R.menu.dialog_url);
+ toolbar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ getDialog().dismiss();
+ }
+ });
+
+ threads.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+
+ @Override
+ public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
+ tCount.setText(String.valueOf(progress + 1));
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar p1) {
+
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar p1) {
+
+ }
+ });
+
+ checkDownloadOptions();
+
+ //int def = mPrefs.getInt("threads", 4);
+ int def = 3;
+ threads.setProgress(def - 1);
+ tCount.setText(String.valueOf(def));
+
+ name.setText(createFileName(arguments.getString(TITLE)));
+
+
+ toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ if (item.getItemId() == R.id.okay) {
+ download();
+ return true;
+ } else {
+ return false;
+ }
+ }
+ });
+
+ }
+
+ protected void checkDownloadOptions(){
+ View view = getView();
+ Bundle arguments = getArguments();
+ CheckBox audio = (CheckBox) view.findViewById(R.id.audio);
+ CheckBox video = (CheckBox) view.findViewById(R.id.video);
+
if(arguments.getString(AUDIO_URL) == null) {
- builder.setItems(R.array.download_options_no_audio, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Context context = getActivity();
- String title = arguments.getString(TITLE);
- switch (which) {
- case 0: // Video
- download(arguments.getString(VIDEO_URL),
- title,
- arguments.getString(FILE_SUFFIX_VIDEO),
- NewPipeSettings.getVideoDownloadFolder(context),context);
- break;
- default:
- Log.d(TAG, "lolz");
- }
- }
- });
- // If no video stream available
+ audio.setVisibility(View.GONE);
} else if(arguments.getString(VIDEO_URL) == null) {
- builder.setItems(R.array.download_options_no_video, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Context context = getActivity();
- String title = arguments.getString(TITLE);
- switch (which) {
- case 0: // Audio
- download(arguments.getString(AUDIO_URL),
- title,
- arguments.getString(FILE_SUFFIX_AUDIO),
- NewPipeSettings.getAudioDownloadFolder(context),context);
- break;
- default:
- Log.d(TAG, "lolz");
- }
- }
- });
- //if both streams ar available
- } else {
- builder.setItems(R.array.download_options, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Context context = getActivity();
- String title = arguments.getString(TITLE);
- switch (which) {
- case 0: // Video
- download(arguments.getString(VIDEO_URL),
- title,
- arguments.getString(FILE_SUFFIX_VIDEO),
- NewPipeSettings.getVideoDownloadFolder(context), context);
- break;
- case 1:
- download(arguments.getString(AUDIO_URL),
- title,
- arguments.getString(FILE_SUFFIX_AUDIO),
- NewPipeSettings.getAudioDownloadFolder(context), context);
- break;
- default:
- Log.d(TAG, "lolz");
- }
- }
- });
+ video.setVisibility(View.GONE);
}
- return builder.create();
}
/**
@@ -148,6 +204,40 @@ public class DownloadDialog extends DialogFragment {
return nameToTest;
}
+
+ //download audio, video or both?
+ private void download()
+ {
+ View view = getView();
+ Bundle arguments = getArguments();
+ final EditText name = (EditText) view.findViewById(R.id.file_name);
+ final SeekBar threads = (SeekBar) view.findViewById(R.id.threads);
+ CheckBox audio = (CheckBox) view.findViewById(R.id.audio);
+ CheckBox video = (CheckBox) view.findViewById(R.id.video);
+
+ String fName = name.getText().toString().trim();
+
+ while (mBinder == null);
+
+ if(audio.isChecked()){
+ int res = mManager.startMission(
+ arguments.getString(AUDIO_URL),
+ fName + arguments.getString(FILE_SUFFIX_AUDIO),
+ threads.getProgress() + 1);
+ mBinder.onMissionAdded(mManager.getMission(res));
+ }
+
+ if(video.isChecked()){
+ int res = mManager.startMission(
+ arguments.getString(VIDEO_URL),
+ fName + arguments.getString(FILE_SUFFIX_VIDEO),
+ threads.getProgress() + 1);
+ mBinder.onMissionAdded(mManager.getMission(res));
+ }
+ getDialog().dismiss();
+
+ }
+
private void download(String url, String title,
String fileSuffix, File downloadDir, Context context) {
diff --git a/app/src/main/res/layout/dialog_url.xml b/app/src/main/res/layout/dialog_url.xml
index 46a816282..fb61888fd 100644
--- a/app/src/main/res/layout/dialog_url.xml
+++ b/app/src/main/res/layout/dialog_url.xml
@@ -1,7 +1,7 @@
-
-
+
-
+
-
+ android:text="@string/audio" />