import
android.annotation.SuppressLint;
import
android.os.Bundle;
import
android.view.View;
import
android.webkit.URLUtil;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.LinearLayout;
import
android.widget.ProgressBar;
import
android.widget.TextView;
import
android.widget.Toast;
import
androidx.appcompat.app.AppCompatActivity;
import
com.downloader.Error;
import
com.downloader.OnCancelListener;
import
com.downloader.OnDownloadListener;
import
com.downloader.OnPauseListener;
import
com.downloader.OnProgressListener;
import
com.downloader.OnStartOrResumeListener;
import
com.downloader.PRDownloader;
import
com.downloader.Progress;
import
com.downloader.Status;
public
class
MainActivity
extends
AppCompatActivity {
private
EditText editTextUrl;
private
String path;
private
TextView file_downloaded_path, file_name, downloading_percent;
private
ProgressBar progressBar;
private
Button btnStart, btnCancel, buttonDownload;
private
LinearLayout details;
int
downloadID;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PRDownloader.initialize(
this
);
editTextUrl = findViewById(R.id.url_etText);
buttonDownload = findViewById(R.id.btn_download);
file_downloaded_path = findViewById(R.id.txt_url);
file_name = findViewById(R.id.file_name);
progressBar = findViewById(R.id.progress_horizontal);
downloading_percent = findViewById(R.id.downloading_percentage);
btnStart = findViewById(R.id.btn_start);
btnCancel = findViewById(R.id.btn_stop);
details = findViewById(R.id.details_box);
path = Utils.getRootDirPath(
this
);
buttonDownload.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View view) {
String url = editTextUrl.getText().toString().trim();
details.setVisibility(View.VISIBLE);
downloadFile(url);
}
});
}
@SuppressLint
(
"SetTextI18n"
)
private
void
downloadFile(
final
String url) {
btnStart.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View view) {
if
(Status.RUNNING == PRDownloader.getStatus(downloadID)) {
PRDownloader.pause(downloadID);
return
;
}
btnStart.setEnabled(
false
);
if
(Status.PAUSED == PRDownloader.getStatus(downloadID)) {
PRDownloader.resume(downloadID);
return
;
}
String fileName = URLUtil.guessFileName(url,
null
,
null
);
file_name.setText(
"Downloading "
+ fileName);
downloadID = PRDownloader.download(url, path, fileName)
.build()
.setOnStartOrResumeListener(
new
OnStartOrResumeListener() {
@SuppressLint
(
"SetTextI18n"
)
@Override
public
void
onStartOrResume() {
progressBar.setIndeterminate(
false
);
btnStart.setEnabled(
true
);
btnStart.setText(
"Pause"
);
btnCancel.setEnabled(
true
);
Toast.makeText(MainActivity.
this
,
"Downloading started"
, Toast.LENGTH_SHORT).show();
}
})
.setOnPauseListener(
new
OnPauseListener() {
@Override
public
void
onPause() {
btnStart.setText(
"Resume"
);
Toast.makeText(MainActivity.
this
,
"Downloading Paused"
, Toast.LENGTH_SHORT).show();
}
})
.setOnCancelListener(
new
OnCancelListener() {
@Override
public
void
onCancel() {
downloadID =
0
;
btnStart.setText(
"Start"
);
btnCancel.setEnabled(
false
);
progressBar.setProgress(
0
);
downloading_percent.setText(
""
);
progressBar.setIndeterminate(
false
);
Toast.makeText(MainActivity.
this
,
"Downloading Cancelled"
, Toast.LENGTH_SHORT).show();
}
})
.setOnProgressListener(
new
OnProgressListener() {
@Override
public
void
onProgress(Progress progress) {
long
progressPer = progress.currentBytes *
100
/ progress.totalBytes;
progressBar.setProgress((
int
) progressPer);
downloading_percent.setText(Utils.getProgressDisplayLine(progress.currentBytes, progress.totalBytes));
progressBar.setIndeterminate(
false
);
}
})
.start(
new
OnDownloadListener() {
@Override
public
void
onDownloadComplete() {
btnStart.setEnabled(
false
);
btnCancel.setEnabled(
false
);
btnStart.setText(
"Completed"
);
file_downloaded_path.setText(
"File stored at : "
+ path);
Toast.makeText(MainActivity.
this
,
"Downloading Completed"
, Toast.LENGTH_SHORT).show();
}
@Override
public
void
onError(Error error) {
btnStart.setText(
"Start"
);
downloading_percent.setText(
"0"
);
progressBar.setProgress(
0
);
downloadID =
0
;
btnStart.setEnabled(
true
);
btnCancel.setEnabled(
false
);
progressBar.setIndeterminate(
false
);
Toast.makeText(MainActivity.
this
,
"Error Occurred"
, Toast.LENGTH_SHORT).show();
}
});
btnCancel.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View view) {
btnStart.setText(
"Start"
);
PRDownloader.cancel(downloadID);
}
});
}
});
}
}