package com.yeokm1.nussocprintandroid.print_activities;
import android.app.Activity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.yeokm1.nussocprintandroid.R;
import com.yeokm1.nussocprintandroid.core.Storage;
import com.yeokm1.nussocprintandroid.network.ConnectionTask;
import java.util.List;
public class StatusActivity extends FatDialogActivity {
private RefreshStatusTask refreshTask;
private DeleteTask deleteTask;
private TextView outputView;
private Button refreshStatusButton;
private Button deleteButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status);
resizeDialogWindow();
outputView = (TextView) findViewById(R.id.status_output);
outputView.setMovementMethod(new ScrollingMovementMethod());
outputView.setClickable(false); // Both Clickable and LongClickable
outputView.setLongClickable(false); // after setting the MovementMeathod
refreshStatusButton = (Button) findViewById(R.id.status_refresh_button);
refreshStatusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startRefreshTask();
}
});
deleteButton = (Button) findViewById(R.id.status_delete_jobs_button);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startDeleteTask();
}
});
}
public void startRefreshTask(){
stopDeleteTask();
if(refreshTask == null){
refreshTask = new RefreshStatusTask(this);
refreshTask.execute("");
}
}
public void startDeleteTask(){
stopRefreshTask();
if(deleteTask == null){
deleteTask = new DeleteTask(this);
deleteTask.execute("");
}
}
public void stopDeleteTask(){
if(deleteTask != null){
deleteTask.cancel(false);
deleteTask = null;
}
}
public void stopRefreshTask(){
if(refreshTask != null){
refreshTask.cancel(false);
refreshTask = null;
}
}
@Override
public void onBackPressed(){
stopRefreshTask();
stopDeleteTask();
finish();
}
class RefreshStatusTask extends ConnectionTask {
final String FORMAT_PRINTER_COMMAND = "lpq -P %s";
final String FORMAT_PRINTER_OUTPUT = getString(R.string.status_refresh_format_printer_output);
final String TEXT_NO_JOB = getString(R.string.status_refresh_printer_queue_empty);
public RefreshStatusTask(Activity activity){
super(activity);
}
@Override
protected String doInBackground(String... params) {
StringBuilder builder = new StringBuilder();
String connecting = activity.getString(R.string.misc_connecting_to_server);
publishProgress(connecting);
try {
startConnection();
List<String> printerList = Storage.getInstance().getPrinterList();
for(String printer : printerList){
if(isCancelled()){
break;
}
String command = String.format(FORMAT_PRINTER_COMMAND, printer);
String commandOutput = connection.runCommand(command);
String lineToShowToUI;
if("no entries\n".equals(commandOutput)){
lineToShowToUI = String.format(FORMAT_PRINTER_OUTPUT, printer, TEXT_NO_JOB);
} else {
lineToShowToUI = String.format(FORMAT_PRINTER_OUTPUT, printer, commandOutput);
}
builder.append(lineToShowToUI);
publishProgress(builder.toString());
}
} catch (Exception e){
publishProgress(e.getMessage());
}
disconnect();
return null;
}
@Override
protected void onProgressUpdate(String... progress){
if(outputView != null){
outputView.setText(progress[0]);
}
}
@Override
protected void onPostExecute(String output){
super.onPostExecute(output);
refreshTask = null;
}
}
class DeleteTask extends ConnectionTask {
final String FORMAT_PRINTER_COMMAND = "lprm -P %s -";
final String FORMAT_DELETION_OUTPUT = getString(R.string.status_delete_format_status);
final String DELETION_COMMAND_SENT_TO_ALL = getString(R.string.status_delete_finished);
public DeleteTask(Activity activity){
super(activity);
}
@Override
protected String doInBackground(String... params) {
StringBuilder builder = new StringBuilder();
String connecting = activity.getString(R.string.misc_connecting_to_server);
publishProgress(connecting);
try {
startConnection();
List<String> printerList = Storage.getInstance().getPrinterList();
for(String printer : printerList){
if(isCancelled()){
break;
}
String command = String.format(FORMAT_PRINTER_COMMAND, printer);
connection.runCommand(command);
String lineToShowToUI = String.format(FORMAT_DELETION_OUTPUT, printer);
builder.append(lineToShowToUI);
publishProgress(builder.toString());
}
if(!isCancelled()){
builder.append(DELETION_COMMAND_SENT_TO_ALL);
publishProgress(builder.toString());
}
} catch (Exception e){
publishProgress(e.getMessage());
}
disconnect();
return null;
}
@Override
protected void onProgressUpdate(String... progress){
if(outputView != null){
outputView.setText(progress[0]);
}
}
@Override
protected void onPostExecute(String output){
super.onPostExecute(output);
deleteTask = null;
}
}
}