package com.sdsmdg.harjot.MusicDNA.fragments.ViewSavedDNAsFragment; import android.app.Dialog; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.os.Handler; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.util.Base64; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.github.amlcurran.showcaseview.ShowcaseView; import com.github.amlcurran.showcaseview.targets.ViewTarget; import com.sdsmdg.harjot.MusicDNA.clickitemtouchlistener.ClickItemTouchListener; import com.sdsmdg.harjot.MusicDNA.activities.HomeActivity; import com.sdsmdg.harjot.MusicDNA.models.SavedDNA; import com.sdsmdg.harjot.MusicDNA.MusicDNAApplication; import com.sdsmdg.harjot.MusicDNA.R; import com.sdsmdg.harjot.MusicDNA.activities.SplashActivity; import com.sdsmdg.harjot.MusicDNA.utilities.CommonUtils; import com.sdsmdg.harjot.MusicDNA.utilities.FileUtils; import com.sdsmdg.harjot.MusicDNA.visualizers.VisualizerView2; import com.squareup.leakcanary.RefWatcher; import java.util.ArrayList; /** * A simple {@link Fragment} subclass. */ public class ViewSavedDNA extends Fragment { RecyclerView viewDnaRecycler; ViewSavedDnaRecyclerAdapter vdAdapter; LinearLayoutManager mLayoutManager2; VisualizerView2 mVisualizerView2; ImageView shareIcon, saveToStorageIcon; LinearLayout noSavedContent; ShowcaseView showCase; boolean addTextToImage = false; int selectedDNA = 0; View bottomMarginLayout; ImageView backBtn; TextView fragmentTitle; public ViewSavedDNA() { // Required empty public constructor } @Override public void onAttach(Context context) { super.onAttach(context); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_view_saved_dn, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); backBtn = (ImageView) view.findViewById(R.id.view_saved_dna_back_btn); backBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); fragmentTitle = (TextView) view.findViewById(R.id.view_saved_dna_fragment_title); if (SplashActivity.tf4 != null) fragmentTitle.setTypeface(SplashActivity.tf4); bottomMarginLayout = view.findViewById(R.id.bottom_margin_layout); if (HomeActivity.isReloaded) bottomMarginLayout.getLayoutParams().height = 0; else bottomMarginLayout.getLayoutParams().height = CommonUtils.dpTopx(65, getContext()); mVisualizerView2 = (VisualizerView2) view.findViewById(R.id.saved_dna_visualizer); viewDnaRecycler = (RecyclerView) view.findViewById(R.id.saved_dna_recycler); noSavedContent = (LinearLayout) view.findViewById(R.id.no_saved_dnas); if (SplashActivity.tf4 != null) ((TextView) view.findViewById(R.id.no_saved_content_text)).setTypeface(SplashActivity.tf4); if (HomeActivity.savedDNAs == null || HomeActivity.savedDNAs.getSavedDNAs().size() == 0) { noSavedContent.setVisibility(View.VISIBLE); mVisualizerView2.setVisibility(View.INVISIBLE); viewDnaRecycler.setVisibility(View.INVISIBLE); } else { noSavedContent.setVisibility(View.GONE); mVisualizerView2.setVisibility(View.VISIBLE); viewDnaRecycler.setVisibility(View.VISIBLE); } if (HomeActivity.savedDNAs != null) vdAdapter = new ViewSavedDnaRecyclerAdapter(HomeActivity.savedDNAs.getSavedDNAs(), getContext(), this); else vdAdapter = new ViewSavedDnaRecyclerAdapter(new ArrayList<SavedDNA>(), getContext(), this); mLayoutManager2 = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false); viewDnaRecycler.setLayoutManager(mLayoutManager2); viewDnaRecycler.setItemAnimator(new DefaultItemAnimator()); viewDnaRecycler.setAdapter(vdAdapter); final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { if (HomeActivity.savedDNAs.getSavedDNAs().size() > 0) { SavedDNA dna = HomeActivity.savedDNAs.getSavedDNAs().get(selectedDNA); selectedDNA = 0; HomeActivity.tempSavedDNA = dna; Bitmap bmp = bitmapFromBase64String(dna.getBase64encodedBitmap()); mVisualizerView2.setBmp(bmp); mVisualizerView2.update(); } } }, 350); viewDnaRecycler.addOnItemTouchListener(new ClickItemTouchListener(viewDnaRecycler) { @Override public boolean onClick(RecyclerView parent, View view, int position, long id) { vdAdapter.notifyItemChanged(selectedDNA); selectedDNA = position; vdAdapter.notifyItemChanged(selectedDNA); SavedDNA dna = HomeActivity.savedDNAs.getSavedDNAs().get(position); selectedDNA = position; HomeActivity.tempSavedDNA = dna; Bitmap bmp = bitmapFromBase64String(dna.getBase64encodedBitmap()); mVisualizerView2.setBmp(bmp); mVisualizerView2.update(); return true; } @Override public boolean onLongClick(RecyclerView parent, View view, final int position, long id) { PopupMenu popup = new PopupMenu(getContext(), view); popup.getMenuInflater().inflate(R.menu.save_dna_popup, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if (item.getTitle().equals("View")) { vdAdapter.notifyItemChanged(selectedDNA); selectedDNA = position; vdAdapter.notifyItemChanged(selectedDNA); SavedDNA dna = HomeActivity.savedDNAs.getSavedDNAs().get(position); selectedDNA = position; HomeActivity.tempSavedDNA = dna; Bitmap bmp = bitmapFromBase64String(dna.getBase64encodedBitmap()); mVisualizerView2.setBmp(bmp); mVisualizerView2.update(); } else if (item.getTitle().equals("Delete")) { HomeActivity.savedDNAs.getSavedDNAs().remove(position); vdAdapter.notifyItemRemoved(position); if (position == selectedDNA) { if (position > 0) { selectedDNA = position - 1; } else if (position == 0) { if (HomeActivity.savedDNAs.getSavedDNAs().size() == 0) { noSavedContent.setVisibility(View.VISIBLE); new HomeActivity.SaveTheDNAs().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); return true; } else { selectedDNA = 0; } } SavedDNA dna = HomeActivity.savedDNAs.getSavedDNAs().get(selectedDNA); HomeActivity.tempSavedDNA = dna; Bitmap bmp = bitmapFromBase64String(dna.getBase64encodedBitmap()); mVisualizerView2.setBmp(bmp); mVisualizerView2.update(); } new HomeActivity.SaveTheDNAs().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } return true; } }); popup.show(); return true; } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } }); shareIcon = (ImageView) view.findViewById(R.id.share_icon); saveToStorageIcon = (ImageView) view.findViewById(R.id.save_to_storage_icon); shareIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (HomeActivity.tempSavedDNA != null) { showDialog(1); } } }); saveToStorageIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (HomeActivity.tempSavedDNA != null) { showDialog(0); } } }); Button mEndButton = new Button(getContext()); mEndButton.setBackgroundColor(HomeActivity.themeColor); mEndButton.setTextColor(Color.WHITE); if (HomeActivity.savedDNAs.getSavedDNAs().size() > 0) { showCase = new ShowcaseView.Builder(getActivity()) .blockAllTouches() .singleShot(5) .setStyle(R.style.CustomShowcaseTheme) .useDecorViewAsParent() .replaceEndButton(mEndButton) .setContentTitlePaint(HomeActivity.tp) .setTarget(new ViewTarget(R.id.visualizer_alt_showcase, getActivity())) .setContentTitle("Saved DNAs") .setContentText("View all your saved DNAs here") .build(); showCase.setButtonText("Next"); showCase.setButtonPosition(HomeActivity.lps); showCase.overrideButtonClick(new View.OnClickListener() { int count1 = 0; @Override public void onClick(View v) { count1++; switch (count1) { case 1: showCase.setTarget(new ViewTarget(shareIcon.getId(), getActivity())); showCase.setContentTitle("Share DNA"); showCase.setContentText("Share the DNA as an image with your friends"); showCase.setButtonPosition(HomeActivity.lps); showCase.setButtonText("Next"); break; case 2: showCase.setTarget(new ViewTarget(saveToStorageIcon.getId(), getActivity())); showCase.setContentTitle("Save DNA"); showCase.setContentText("Save the DNA as an image to your internal storage"); showCase.setButtonPosition(HomeActivity.lps); showCase.setButtonText("Done"); break; case 3: showCase.hide(); break; } } }); } } @Override public void onResume() { super.onResume(); mLayoutManager2.scrollToPositionWithOffset(0, 0); } public void showDialog(int type) { if (type == 0) { final Dialog dialog = new Dialog(getContext()); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.save_image_dialog); TextView titleText = (TextView) dialog.findViewById(R.id.dialog_title); titleText.setText("Save as Image"); if (SplashActivity.tf4 != null) titleText.setTypeface(SplashActivity.tf4); // set the custom dialog components - text, image and button final EditText text = (EditText) dialog.findViewById(R.id.save_image_filename_text); text.setText(HomeActivity.tempSavedDNA.getName()); text.setBackgroundTintList(ColorStateList.valueOf(HomeActivity.themeColor)); Button btn = (Button) dialog.findViewById(R.id.save_image_btn); btn.setBackgroundColor(HomeActivity.themeColor); CheckBox cb = (CheckBox) dialog.findViewById(R.id.text_checkbox); cb.setChecked(addTextToImage); cb.setButtonTintList(ColorStateList.valueOf(HomeActivity.themeColor)); cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { addTextToImage = isChecked; } }); // if button is clicked, close the custom dialog btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (text.getText().toString().trim().equals("")) { text.setError("Enter Filename"); } else { mVisualizerView2.drawText(text.getText().toString(), addTextToImage); mVisualizerView2.setDrawingCacheEnabled(true); FileUtils.saveBitmapAsImage(mVisualizerView2.getDrawingCache(), text.getText().toString()); mVisualizerView2.dropText(); mVisualizerView2.setDrawingCacheEnabled(false); dialog.dismiss(); } } }); dialog.show(); } else if (type == 1) { final Dialog dialog = new Dialog(getContext()); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.save_image_dialog); TextView titleText = (TextView) dialog.findViewById(R.id.dialog_title); titleText.setText("Share as Image"); if (SplashActivity.tf4 != null) titleText.setTypeface(SplashActivity.tf4); // set the custom dialog components - text, image and button final EditText text = (EditText) dialog.findViewById(R.id.save_image_filename_text); text.setText(HomeActivity.tempSavedDNA.getName()); text.setBackgroundTintList(ColorStateList.valueOf(HomeActivity.themeColor)); Button btn = (Button) dialog.findViewById(R.id.save_image_btn); btn.setBackgroundColor(HomeActivity.themeColor); btn.setText("SHARE"); CheckBox cb = (CheckBox) dialog.findViewById(R.id.text_checkbox); cb.setChecked(addTextToImage); cb.setButtonTintList(ColorStateList.valueOf(HomeActivity.themeColor)); cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { addTextToImage = isChecked; } }); // if button is clicked, close the custom dialog btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (text.getText().toString().trim().equals("")) { text.setError("Enter Text"); } else { mVisualizerView2.drawText(text.getText().toString(), addTextToImage); mVisualizerView2.setDrawingCacheEnabled(true); FileUtils.shareBitmapAsImage(mVisualizerView2.getDrawingCache(), text.getText().toString(), getContext()); mVisualizerView2.dropText(); mVisualizerView2.setDrawingCacheEnabled(false); dialog.dismiss(); } } }); dialog.show(); } } @Override public void onDestroyView() { super.onDestroyView(); RefWatcher refWatcher = MusicDNAApplication.getRefWatcher(getContext()); refWatcher.watch(this); } @Override public void onDestroy() { super.onDestroy(); RefWatcher refWatcher = MusicDNAApplication.getRefWatcher(getContext()); refWatcher.watch(this); } public boolean isShowcaseVisible() { return (showCase != null && showCase.isShowing()); } public void hideShowcase() { showCase.hide(); } public void setVisualizerVisibility(int visibility) { mVisualizerView2.setVisibility(visibility); } public int getSelectedDNAnumber() { return selectedDNA; } public Bitmap bitmapFromBase64String(String input) { byte[] decodedBytes = Base64.decode(input, 0); return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length); } }