package com.yeokm1.nussocprintandroid.fragments;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.ipaulpro.afilechooser.utils.FileUtils;
import com.yeokm1.nussocprintandroid.R;
import com.yeokm1.nussocprintandroid.core.MyApplication;
import com.yeokm1.nussocprintandroid.core.Storage;
import com.yeokm1.nussocprintandroid.print_activities.printing.PrintingActivity;
import com.yeokm1.nussocprintandroid.print_activities.StatusActivity;
import java.util.List;
public class PrintFragment extends Fragment {
private Spinner printerSpinner;
private Spinner pagesPerSheetSpinner;
private EditText pageRangeStart;
private EditText pageRangeEnd;
private boolean pageRange = false;
private TextView filePathView;
private static final int REQUEST_CHOOSER = 1234;
private static final String TAG = "PrintFragment";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_print, container, false);
filePathView = (TextView) view.findViewById(R.id.print_filename_textview);
pagesPerSheetSpinner = (Spinner) view.findViewById(R.id.printer_page_sheet_spinner);
printerSpinner = (Spinner) view.findViewById(R.id.print_printer_names);
pageRangeStart = (EditText) view.findViewById(R.id.print_page_range_start);
pageRangeEnd = (EditText) view.findViewById(R.id.print_page_range_end);
List<String> printerList = Storage.getInstance().getPrinterList();
ArrayAdapter<String> printerAdapter = new ArrayAdapter<String>(getActivity(), R.layout.printing_progress_item, printerList);
printerSpinner.setAdapter(printerAdapter);
String[] pagesArray = getResources().getStringArray(R.array.printer_page_sheet_options);
ArrayAdapter<String> pagesAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.printing_progress_item, pagesArray);
pagesPerSheetSpinner.setAdapter(pagesAdapter);
Button statusButton = (Button) view.findViewById(R.id.print_status_button);
statusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startStatusActivity();
}
});
Button printButton = (Button) view.findViewById(R.id.print_print_button);
printButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startPrinting();
}
});
Button browseButton = (Button) view.findViewById(R.id.print_browse_button);
browseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startFileChooser();
}
});
RadioGroup pageRangeRadioGroup = (RadioGroup) view.findViewById(R.id.print_page_range_radiogroup);
pageRangeRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId){
case R.id.print_page_range_all_text: showRangeFields(false);
break;
case R.id.print_page_range_custom_text:
//Fall through
default : showRangeFields(true);
}
}
});
showRangeFields(false);
refreshDocumentPathIntoTextView();
return view;
}
public void showRangeFields(boolean showFields){
pageRange = showFields;
pageRangeStart.setEnabled(showFields);
pageRangeEnd.setEnabled(showFields);
}
public void startFileChooser(){
Intent getContentIntent = FileUtils.createGetContentIntent();
Intent intent = Intent.createChooser(getContentIntent, getString(R.string.print_select_a_document));
startActivityForResult(intent, REQUEST_CHOOSER);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CHOOSER:
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
((MyApplication) getActivity().getApplication()).setCurrentDocumentUri(uri);
refreshDocumentPathIntoTextView();
}
break;
}
}
private void refreshDocumentPathIntoTextView(){
String filePath = ((MyApplication) getActivity().getApplication()).getCurrentDocumentPath();
if(filePath != null) {
String filename = Uri.parse(filePath).getLastPathSegment();
filePathView.setText(filename);
}
}
public void startStatusActivity(){
Intent intent = new Intent(getActivity(), StatusActivity.class);
startActivity(intent);
}
public void startPrinting(){
Storage storage = Storage.getInstance();
String username = storage.getUsername();
String password = storage.getPassword();
String server = storage.getServer();
if(username.length() == 0 || password.length() == 0){
showToast(R.string.misc_missing_credential);
return;
}
if(server.length() == 0){
showToast(R.string.misc_missing_server);
return;
}
String filePath = ((MyApplication) getActivity().getApplication()).getCurrentDocumentPath();
if(filePath == null){
showToast(R.string.print_no_file_selected_yet);
return;
}
String printerName = printerSpinner.getSelectedItem().toString();
String pagesPerSheetStr = pagesPerSheetSpinner.getSelectedItem().toString();
int pagesPerSheet = Integer.parseInt(pagesPerSheetStr);
String startRangeStr = pageRangeStart.getText().toString();
String endRangeStr = pageRangeEnd.getText().toString();
Intent intent = new Intent(getActivity(), PrintingActivity.class);
intent.putExtra(PrintingActivity.INTENT_FILE_PATH, filePath);
intent.putExtra(PrintingActivity.INTENT_PRINTER_NAME, printerName);
intent.putExtra(PrintingActivity.INTENT_PAGES_PER_SHEET, pagesPerSheet);
if(pageRange){
try {
int startNumber = Integer.parseInt(startRangeStr);
int endNumber = Integer.parseInt(endRangeStr);
if(startNumber == 0 || endNumber == 0
|| startNumber > endNumber) {
throw new NumberFormatException();
}
intent.putExtra(PrintingActivity.INTENT_PAGE_START_RANGE, startNumber);
intent.putExtra(PrintingActivity.INTENT_PAGE_END_RANGE, endNumber);
} catch(NumberFormatException e){
showToast(R.string.print_invalid_page_range);
return;
}
}
startActivity(intent);
}
public void showToast(int stringId){
Toast.makeText(getActivity(), stringId, Toast.LENGTH_SHORT).show();
}
}