package com.garethevans.church.opensongtablet; import android.annotation.SuppressLint; import android.app.Activity; import android.app.DialogFragment; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.media.ThumbnailUtils; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RelativeLayout; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import java.io.File; import java.net.URLEncoder; public class PopUpCustomSlideFragment extends DialogFragment { static PopUpCustomSlideFragment newInstance() { PopUpCustomSlideFragment frag; frag = new PopUpCustomSlideFragment(); return frag; } public interface MyInterface { void addSlideToSet(); } private MyInterface mListener; @Override @SuppressWarnings("deprecation") public void onAttach(Activity activity) { mListener = (MyInterface) activity; super.onAttach(activity); } @Override public void onDetach() { mListener = null; super.onDetach(); } // Declare views static View V; static RadioGroup customRadioGroup; static RadioButton noteRadioButton; static RadioButton slideRadioButton; static RadioButton imageRadioButton; static RadioButton scriptureRadioButton; static TextView slideTitleTextView; static TextView slideContentTextView; static EditText slideTitleEditText; static EditText slideContentEditText; static Button customSlideCancel; static Button customSlideAdd; static Button loadReusableButton; static CheckBox saveReusableCheckBox; static Button addPageButton; static TableLayout slideImageTable; static CheckBox loopCheckBox; static TextView timeTextView; static EditText timeEditText; static TextView warningTextView; static LinearLayout reusable_LinearLayout; static LinearLayout searchBible_LinearLayout; static RelativeLayout slideDetails_RelativeLayout; static EditText bibleSearch; static EditText bibleVersion; static Button searchBibleGateway_Button; static WebView bibleGateway_WebView; static Button grabVerse_Button; static ProgressBar searchBible_progressBar; // Declare variables used static String whattype = "note"; @SuppressLint("SetJavaScriptEnabled") @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setTitle(getActivity().getResources().getString(R.string.add_custom_slide)); V = inflater.inflate(R.layout.popup_customslidecreator, container, false); // Initialise the basic views customRadioGroup = (RadioGroup) V.findViewById(R.id.customRadioGroup); noteRadioButton = (RadioButton) V.findViewById(R.id.noteRadioButton); slideRadioButton = (RadioButton) V.findViewById(R.id.slideRadioButton); imageRadioButton = (RadioButton) V.findViewById(R.id.imageRadioButton); scriptureRadioButton = (RadioButton) V.findViewById(R.id.scriptureRadioButton); slideTitleTextView = (TextView) V.findViewById(R.id.slideTitleTextView); slideContentTextView = (TextView) V.findViewById(R.id.slideContentTextView); slideTitleEditText = (EditText) V.findViewById(R.id.slideTitleEditText); slideContentEditText = (EditText) V.findViewById(R.id.slideContentEditText); customSlideCancel = (Button) V.findViewById(R.id.customSlideCancel); customSlideAdd = (Button) V.findViewById(R.id.customSlideAdd); addPageButton = (Button) V.findViewById(R.id.addPageButton); loadReusableButton = (Button) V.findViewById(R.id.loadReusableButton); saveReusableCheckBox = (CheckBox) V.findViewById(R.id.saveReusableCheckBox); slideImageTable = (TableLayout) V.findViewById(R.id.slideImageTable); loopCheckBox = (CheckBox) V.findViewById(R.id.loopCheckBox); timeTextView = (TextView) V.findViewById(R.id.timeTextView); timeEditText = (EditText) V.findViewById(R.id.timeEditText); warningTextView = (TextView) V.findViewById(R.id.warningTextView); reusable_LinearLayout = (LinearLayout) V.findViewById(R.id.reusable_LinearLayout); searchBible_LinearLayout = (LinearLayout) V.findViewById(R.id.searchBible_LinearLayout); slideDetails_RelativeLayout = (RelativeLayout) V.findViewById(R.id.slideDetails_RelativeLayout); bibleSearch = (EditText) V.findViewById(R.id.bibleSearch); bibleVersion = (EditText) V.findViewById(R.id.bibleVersion); searchBibleGateway_Button = (Button) V.findViewById(R.id.searchBibleGateway_Button); bibleGateway_WebView = (WebView) V.findViewById(R.id.bibleGateway_WebView); grabVerse_Button = (Button) V.findViewById(R.id.grabVerse_Button); grabVerse_Button.setVisibility(View.GONE); searchBible_progressBar = (ProgressBar) V.findViewById(R.id.searchBible_progressBar); searchBible_progressBar.setVisibility(View.GONE); bibleGateway_WebView.setVisibility(View.GONE); bibleGateway_WebView.getSettings().getJavaScriptEnabled(); bibleGateway_WebView.getSettings().setJavaScriptEnabled(true); bibleGateway_WebView.getSettings().setDomStorageEnabled(true); bibleGateway_WebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); bibleGateway_WebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); grabVerse_Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { searchBible_progressBar.setVisibility(View.VISIBLE); bibleGateway_WebView.setVisibility(View.GONE); grabVerse_Button.setVisibility(View.GONE); BibleGateway.grabBibleText(getActivity().getApplicationContext(), bibleGateway_WebView.getUrl()); } }); searchBibleGateway_Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { searchBible_progressBar.setVisibility(View.VISIBLE); searchBible(); } }); if (FullscreenActivity.whattodo.contains("customreusable_")) { updateFields(); } else { // By default we want to make a brief note/placeholder noteRadioButton.setChecked(true); FullscreenActivity.whattodo = "customnote"; slideRadioButton.setChecked(false); imageRadioButton.setChecked(false); scriptureRadioButton.setChecked(false); saveReusableCheckBox.setChecked(false); switchViewToNote(); } // Set button listeners addPageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (whattype.equals("slide")) { String newText = slideContentEditText.getText().toString().trim() + "\n---\n"; newText = newText.trim() + "\n"; slideContentEditText.setText(newText); } else if (whattype.equals("image")) { // Call file browser Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.setType("file/"); try { startActivityForResult(i, 0); } catch (Exception e) { e.printStackTrace(); FullscreenActivity.myToastMessage = getResources().getString(R.string.no_filemanager); ShowToast.showToast(getActivity()); try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.estrongs.android.pop"))); } catch (Exception anfe) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=com.estrongs.android.pop"))); } } } } }); customSlideCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); customSlideAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FullscreenActivity.noteorslide = whattype; String text = slideContentEditText.getText().toString().trim(); FullscreenActivity.customreusable = saveReusableCheckBox.isChecked(); String imagecontents; if (whattype.equals("image")) { imagecontents = ""; // Go through images in list and extract the full location and the filename Log.d("table", "getChildCount=" + slideImageTable.getChildCount()); for (int r = 0; r < slideImageTable.getChildCount(); r++) { // Look for image file location if (slideImageTable.getChildAt(r) instanceof TableRow) { TextView tv = (TextView) ((TableRow) slideImageTable.getChildAt(r)).getChildAt(0); String tv_text = tv.getText().toString(); imagecontents = imagecontents + tv_text + "\n"; } } while (imagecontents.contains("\n\n")) { imagecontents = imagecontents.replace("\n\n", "\n"); } imagecontents = imagecontents.trim(); String[] individual_images = imagecontents.split("\n"); // Prepare the lyrics text = ""; for (int t = 0; t < individual_images.length; t++) { text = text + "[" + FullscreenActivity.image + "_" + (t + 1) + "]\n" + individual_images[t] + "\n\n"; } text = text.trim(); } else { imagecontents = ""; } FullscreenActivity.customslide_title = slideTitleEditText.getText().toString(); FullscreenActivity.customslide_content = text; FullscreenActivity.customimage_list = imagecontents; FullscreenActivity.customimage_loop = "" + loopCheckBox.isChecked() + ""; FullscreenActivity.customimage_time = timeEditText.getText().toString(); // Check the slide has a title. If not, use _ if (FullscreenActivity.customslide_title == null || FullscreenActivity.customslide_title.equals("") || FullscreenActivity.customslide_title.isEmpty()) { FullscreenActivity.customslide_title = "_"; } mListener.addSlideToSet(); dismiss(); } }); loadReusableButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // This reopens the choose backgrounds popupFragment dismiss(); DialogFragment newFragment = PopUpFileChooseFragment.newInstance(); newFragment.show(getFragmentManager(), "dialog"); } }); customRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if (noteRadioButton.isChecked()) { switchViewToNote(); } else if (slideRadioButton.isChecked()) { switchViewToSlide(); } else if (scriptureRadioButton.isChecked()) { switchViewToScripture(); } else { switchViewToImage(); } } }); return V; } public void updateFields() { Log.d("d","FullscreenActivity.whattodo="+FullscreenActivity.whattodo); switch (FullscreenActivity.whattodo) { case "customreusable_note": // Fill in the details noteRadioButton.setChecked(true); slideRadioButton.setChecked(false); imageRadioButton.setChecked(false); scriptureRadioButton.setChecked(false); switchViewToNote(); slideTitleEditText.setText(FullscreenActivity.customslide_title); slideContentEditText.setText(FullscreenActivity.customslide_content); break; case "customreusable_scripture": // Fill in the details noteRadioButton.setChecked(false); slideRadioButton.setChecked(false); imageRadioButton.setChecked(false); scriptureRadioButton.setChecked(true); switchViewToScripture(); slideTitleEditText.setText(FullscreenActivity.customslide_title); slideContentEditText.setText(FullscreenActivity.customslide_content); break; case "customreusable_slide": // Fill in the details noteRadioButton.setChecked(false); slideRadioButton.setChecked(true); imageRadioButton.setChecked(false); scriptureRadioButton.setChecked(false); switchViewToSlide(); slideTitleEditText.setText(FullscreenActivity.customslide_title); slideContentEditText.setText(FullscreenActivity.customslide_content); timeEditText.setText(FullscreenActivity.customimage_time); if (FullscreenActivity.customimage_loop.equals("true")) { loopCheckBox.setChecked(true); } else { loopCheckBox.setChecked(false); } break; case "customreusable_image": // Fill in the details noteRadioButton.setChecked(false); slideRadioButton.setChecked(false); imageRadioButton.setChecked(true); scriptureRadioButton.setChecked(false); switchViewToImage(); slideTitleEditText.setText(FullscreenActivity.customslide_title); slideContentEditText.setText(""); timeEditText.setText(FullscreenActivity.customimage_time); if (FullscreenActivity.customimage_loop.equals("true")) { loopCheckBox.setChecked(true); } else { loopCheckBox.setChecked(false); } // Now parse the list of images... String imgs[] = FullscreenActivity.customimage_list.split("\n"); slideImageTable.removeAllViews(); for (String img : imgs) { addRow(img); } break; } } public static void switchViewToNote() { whattype = "note"; FullscreenActivity.whattodo ="customnote"; grabVerse_Button.setVisibility(View.GONE); reusable_LinearLayout.setVisibility(View.VISIBLE); searchBible_LinearLayout.setVisibility(View.GONE); slideDetails_RelativeLayout.setVisibility(View.VISIBLE); addPageButton.setVisibility(View.GONE); slideContentEditText.setVisibility(View.VISIBLE); slideImageTable.setVisibility(View.GONE); loopCheckBox.setVisibility(View.GONE); timeTextView.setVisibility(View.GONE); timeEditText.setVisibility(View.GONE); warningTextView.setVisibility(View.GONE); } public static void switchViewToScripture() { whattype = "scripture"; grabVerse_Button.setVisibility(View.GONE); searchBible_progressBar.setVisibility(View.GONE); FullscreenActivity.whattodo ="customscripture"; reusable_LinearLayout.setVisibility(View.GONE); searchBible_LinearLayout.setVisibility(View.VISIBLE); slideDetails_RelativeLayout.setVisibility(View.GONE); addPageButton.setVisibility(View.GONE); slideContentEditText.setVisibility(View.VISIBLE); slideImageTable.setVisibility(View.GONE); loopCheckBox.setVisibility(View.GONE); timeTextView.setVisibility(View.GONE); timeEditText.setVisibility(View.GONE); warningTextView.setVisibility(View.GONE); bibleSearch.setVisibility(View.VISIBLE); bibleVersion.setVisibility(View.VISIBLE); } public static void switchViewToSlide() { whattype = "slide"; FullscreenActivity.whattodo ="customslide"; grabVerse_Button.setVisibility(View.GONE); reusable_LinearLayout.setVisibility(View.VISIBLE); searchBible_LinearLayout.setVisibility(View.GONE); slideDetails_RelativeLayout.setVisibility(View.VISIBLE); addPageButton.setVisibility(View.VISIBLE); slideContentEditText.setVisibility(View.VISIBLE); slideImageTable.setVisibility(View.GONE); loopCheckBox.setVisibility(View.VISIBLE); timeTextView.setVisibility(View.VISIBLE); timeEditText.setVisibility(View.VISIBLE); warningTextView.setVisibility(View.GONE); } public static void switchViewToImage() { whattype = "image"; FullscreenActivity.whattodo ="customimage"; grabVerse_Button.setVisibility(View.GONE); reusable_LinearLayout.setVisibility(View.VISIBLE); searchBible_LinearLayout.setVisibility(View.GONE); slideDetails_RelativeLayout.setVisibility(View.VISIBLE); addPageButton.setVisibility(View.VISIBLE); slideContentEditText.setVisibility(View.GONE); slideImageTable.setVisibility(View.VISIBLE); loopCheckBox.setVisibility(View.VISIBLE); timeTextView.setVisibility(View.VISIBLE); timeEditText.setVisibility(View.VISIBLE); warningTextView.setVisibility(View.VISIBLE); } @Override public void onStart() { super.onStart(); // safety check if (getDialog() == null) { return; } getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (intent!=null) { Uri uri = intent.getData(); Cursor cursor = null; String fullpath = null; try { String[] proj = { MediaStore.Images.Media.DATA }; cursor = getActivity().getContentResolver().query(uri, proj, null, null, null); int column_index; if (cursor != null) { column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); try { cursor.moveToFirst(); fullpath = cursor.getString(column_index); } catch (Exception e) { e.printStackTrace(); } } } finally { if (cursor != null) { cursor.close(); } } if (requestCode==0) { // Create a new row in the table // Each row has the file name, an image thumbnail and a delete button if (fullpath!=null) { addRow(fullpath); } } } } @SuppressLint("SetJavaScriptEnabled") public void searchBible() { // Prepare the search strings String whattosearch = bibleSearch.getText().toString(); String whatversion = bibleVersion.getText().toString(); try { whattosearch = URLEncoder.encode(bibleSearch.getText().toString(), "UTF-8"); whatversion = URLEncoder.encode(bibleVersion.getText().toString(), "UTF-8"); } catch (Exception e) { e.printStackTrace(); } bibleGateway_WebView.getSettings().setJavaScriptEnabled(true); String webaddress = "https://www.biblegateway.com/quicksearch/?quicksearch="+whattosearch+"&qs_version="+whatversion; bibleGateway_WebView.loadUrl(webaddress); bibleGateway_WebView.setVisibility(View.VISIBLE); bibleGateway_WebView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { searchBible_progressBar.setVisibility(View.GONE); if (url.contains("passage")) { grabVerse_Button.setVisibility(View.VISIBLE); } } }); } public void addRow(String fullpath) { TableRow row = new TableRow(getActivity()); TableLayout.LayoutParams layoutRow = new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT); row.setLayoutParams(layoutRow); row.setHorizontalGravity(Gravity.CENTER_HORIZONTAL); row.setTag(fullpath); TextView filename = new TextView(getActivity()); filename.setText(fullpath); filename.setTextSize(0.0f); // Make it take up no space (user doesn't need to see it). filename.setVisibility(View.GONE); ImageView thumbnail = new ImageView(getActivity()); Bitmap ThumbImage; Resources res = getResources(); BitmapDrawable bd; File checkfile = new File(fullpath); if (!checkfile.exists()) { Drawable notfound = getResources().getDrawable(R.drawable.notfound); thumbnail.setImageDrawable(notfound); } else { ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(fullpath), 200, 150); bd = new BitmapDrawable(res, ThumbImage); thumbnail.setImageDrawable(bd); } thumbnail.setBackgroundDrawable(getResources().getDrawable(R.drawable.presenter_box_black)); thumbnail.setMaxWidth(200); thumbnail.setMaxHeight(150); TableRow.LayoutParams layoutImage = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); layoutImage.width = 200; layoutImage.height = 150; thumbnail.setLayoutParams(layoutImage); ImageButton delete = new ImageButton (getActivity()); delete.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_discard)); delete.setTag(fullpath + "_delete"); delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String rowtag = v.getTag().toString(); rowtag = rowtag.replace("_delete", ""); try { slideImageTable.removeView(getView().findViewWithTag(rowtag)); } catch (Exception e) { // oh well Log.d("error", "No table row with this tag"); } Log.d("remove", "rowtag=" + rowtag); } }); row.addView(filename); row.addView(thumbnail); row.addView(delete); slideImageTable.addView(row); } public static void addScripture() { if (!FullscreenActivity.scripture_title.equals("") && !FullscreenActivity.scripture_verse.equals("")) { searchBible_progressBar.setVisibility(View.GONE); grabVerse_Button.setVisibility(View.GONE); slideTitleEditText.setText(FullscreenActivity.scripture_title); slideContentEditText.setText(FullscreenActivity.scripture_verse); reusable_LinearLayout.setVisibility(View.GONE); searchBible_LinearLayout.setVisibility(View.GONE); slideDetails_RelativeLayout.setVisibility(View.VISIBLE); } } }