package com.sdsmdg.harjot.MusicDNA.fragments.EqualizerFragment; import android.content.Context; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.SwitchCompat; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CompoundButton; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.db.chart.model.LineSet; import com.db.chart.renderer.AxisRenderer; import com.db.chart.view.ChartView; import com.db.chart.view.LineChartView; import com.github.amlcurran.showcaseview.ShowcaseView; import com.github.amlcurran.showcaseview.targets.ViewTarget; import com.sdsmdg.harjot.MusicDNA.customviews.AnalogController; import com.sdsmdg.harjot.MusicDNA.activities.HomeActivity; import com.sdsmdg.harjot.MusicDNA.MusicDNAApplication; import com.sdsmdg.harjot.MusicDNA.fragments.PlayerFragment.PlayerFragment; import com.sdsmdg.harjot.MusicDNA.R; import com.sdsmdg.harjot.MusicDNA.activities.SplashActivity; import com.squareup.leakcanary.RefWatcher; import java.util.ArrayList; /** * A simple {@link Fragment} subclass. */ public class EqualizerFragment extends Fragment { ImageView backBtn; TextView fragTitle; SwitchCompat equalizerSwitch; LineSet dataset; LineChartView chart; Paint paint; float[] points; int y = 0; ImageView spinnerDropDownIcon; short numberOfFrequencyBands; LinearLayout mLinearLayout; SeekBar[] seekBarFinal = new SeekBar[5]; AnalogController bassController, reverbController; Spinner presetSpinner; FrameLayout equalizerBlocker; ShowcaseView showCase; Context ctx; onCheckChangedListener mCallback; public interface onCheckChangedListener { void onCheckChanged(boolean isChecked); } public EqualizerFragment() { // Required empty public constructor } @Override public void onAttach(Context context) { super.onAttach(context); ctx = context; mCallback = (onCheckChangedListener) context; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_equalizer, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); backBtn = (ImageView) view.findViewById(R.id.equalizer_back_btn); backBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); fragTitle = (TextView) view.findViewById(R.id.equalizer_fragment_title); if (SplashActivity.tf4 != null) fragTitle.setTypeface(SplashActivity.tf4); equalizerSwitch = (SwitchCompat) view.findViewById(R.id.equalizer_switch); equalizerSwitch.setChecked(HomeActivity.isEqualizerEnabled); equalizerSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mCallback.onCheckChanged(isChecked); } }); spinnerDropDownIcon = (ImageView) view.findViewById(R.id.spinner_dropdown_icon); spinnerDropDownIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { presetSpinner.performClick(); } }); presetSpinner = (Spinner) view.findViewById(R.id.equalizer_preset_spinner); equalizerBlocker = (FrameLayout) view.findViewById(R.id.equalizerBlocker); if (HomeActivity.isEqualizerEnabled) { equalizerBlocker.setVisibility(View.GONE); } else { equalizerBlocker.setVisibility(View.VISIBLE); } chart = (LineChartView) view.findViewById(R.id.lineChart); paint = new Paint(); dataset = new LineSet(); bassController = (AnalogController) view.findViewById(R.id.controllerBass); reverbController = (AnalogController) view.findViewById(R.id.controller3D); bassController.setLabel("BASS"); reverbController.setLabel("3D"); bassController.circlePaint2.setColor(HomeActivity.themeColor); bassController.linePaint.setColor(HomeActivity.themeColor); bassController.invalidate(); reverbController.circlePaint2.setColor(HomeActivity.themeColor); bassController.linePaint.setColor(HomeActivity.themeColor); reverbController.invalidate(); if (!HomeActivity.isEqualizerReloaded) { int x = 0; if (PlayerFragment.bassBoost != null) { try { x = ((PlayerFragment.bassBoost.getRoundedStrength() * 19) / 1000); } catch (Exception e) { e.printStackTrace(); } } if (PlayerFragment.presetReverb != null) { try { y = (PlayerFragment.presetReverb.getPreset() * 19) / 6; } catch (Exception e) { e.printStackTrace(); } } if (x == 0) { bassController.setProgress(1); } else { bassController.setProgress(x); } if (y == 0) { reverbController.setProgress(1); } else { reverbController.setProgress(y); } } else { int x = ((HomeActivity.bassStrength * 19) / 1000); y = (HomeActivity.reverbPreset * 19) / 6; if (x == 0) { bassController.setProgress(1); } else { bassController.setProgress(x); } if (y == 0) { reverbController.setProgress(1); } else { reverbController.setProgress(y); } } bassController.setOnProgressChangedListener(new AnalogController.onProgressChangedListener() { @Override public void onProgressChanged(int progress) { HomeActivity.bassStrength = (short) (((float) 1000 / 19) * (progress)); try { PlayerFragment.bassBoost.setStrength(HomeActivity.bassStrength); HomeActivity.equalizerModel.setBassStrength(HomeActivity.bassStrength); } catch (Exception e) { e.printStackTrace(); } } }); reverbController.setOnProgressChangedListener(new AnalogController.onProgressChangedListener() { @Override public void onProgressChanged(int progress) { HomeActivity.reverbPreset = (short) ((progress * 6) / 19); HomeActivity.equalizerModel.setReverbPreset(HomeActivity.reverbPreset); try { PlayerFragment.presetReverb.setPreset(HomeActivity.reverbPreset); } catch (Exception e) { e.printStackTrace(); } y = progress; } }); mLinearLayout = (LinearLayout) view.findViewById(R.id.equalizerContainer); TextView equalizerHeading = new TextView(getContext()); equalizerHeading.setText("Equalizer"); equalizerHeading.setTextSize(20); equalizerHeading.setGravity(Gravity.CENTER_HORIZONTAL); numberOfFrequencyBands = 5; points = new float[numberOfFrequencyBands]; final short lowerEqualizerBandLevel = PlayerFragment.mEqualizer.getBandLevelRange()[0]; final short upperEqualizerBandLevel = PlayerFragment.mEqualizer.getBandLevelRange()[1]; for (short i = 0; i < numberOfFrequencyBands; i++) { final short equalizerBandIndex = i; final TextView frequencyHeaderTextView = new TextView(getContext()); frequencyHeaderTextView.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT )); frequencyHeaderTextView.setGravity(Gravity.CENTER_HORIZONTAL); frequencyHeaderTextView.setTextColor(Color.parseColor("#FFFFFF")); frequencyHeaderTextView.setText((PlayerFragment.mEqualizer.getCenterFreq(equalizerBandIndex) / 1000) + "Hz"); LinearLayout seekBarRowLayout = new LinearLayout(getContext()); seekBarRowLayout.setOrientation(LinearLayout.VERTICAL); TextView lowerEqualizerBandLevelTextView = new TextView(getContext()); lowerEqualizerBandLevelTextView.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT )); lowerEqualizerBandLevelTextView.setTextColor(Color.parseColor("#FFFFFF")); lowerEqualizerBandLevelTextView.setText((lowerEqualizerBandLevel / 100) + "dB"); TextView upperEqualizerBandLevelTextView = new TextView(getContext()); lowerEqualizerBandLevelTextView.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT )); upperEqualizerBandLevelTextView.setTextColor(Color.parseColor("#FFFFFF")); upperEqualizerBandLevelTextView.setText((upperEqualizerBandLevel / 100) + "dB"); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT ); layoutParams.weight = 1; SeekBar seekBar = new SeekBar(getContext()); TextView textView = new TextView(getContext()); switch (i) { case 0: seekBar = (SeekBar) view.findViewById(R.id.seekBar1); textView = (TextView) view.findViewById(R.id.textView1); break; case 1: seekBar = (SeekBar) view.findViewById(R.id.seekBar2); textView = (TextView) view.findViewById(R.id.textView2); break; case 2: seekBar = (SeekBar) view.findViewById(R.id.seekBar3); textView = (TextView) view.findViewById(R.id.textView3); break; case 3: seekBar = (SeekBar) view.findViewById(R.id.seekBar4); textView = (TextView) view.findViewById(R.id.textView4); break; case 4: seekBar = (SeekBar) view.findViewById(R.id.seekBar5); textView = (TextView) view.findViewById(R.id.textView5); break; } seekBarFinal[i] = seekBar; seekBar.getProgressDrawable().setColorFilter(new PorterDuffColorFilter(Color.DKGRAY, PorterDuff.Mode.SRC_IN)); seekBar.getThumb().setColorFilter(new PorterDuffColorFilter(HomeActivity.themeColor, PorterDuff.Mode.SRC_IN)); seekBar.setId(i); // seekBar.setLayoutParams(layoutParams); seekBar.setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel); textView.setText(frequencyHeaderTextView.getText()); textView.setTextColor(Color.WHITE); textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); if (HomeActivity.isEqualizerReloaded) { points[i] = HomeActivity.seekbarpos[i] - lowerEqualizerBandLevel; dataset.addPoint(frequencyHeaderTextView.getText().toString(), points[i]); seekBar.setProgress(HomeActivity.seekbarpos[i] - lowerEqualizerBandLevel); } else { points[i] = PlayerFragment.mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel; dataset.addPoint(frequencyHeaderTextView.getText().toString(), points[i]); seekBar.setProgress(PlayerFragment.mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel); HomeActivity.seekbarpos[i] = PlayerFragment.mEqualizer.getBandLevel(equalizerBandIndex); HomeActivity.isEqualizerReloaded = true; } seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { PlayerFragment.mEqualizer.setBandLevel(equalizerBandIndex, (short) (progress + lowerEqualizerBandLevel)); points[seekBar.getId()] = PlayerFragment.mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel; HomeActivity.seekbarpos[seekBar.getId()] = (progress + lowerEqualizerBandLevel); HomeActivity.equalizerModel.getSeekbarpos()[seekBar.getId()] = (progress + lowerEqualizerBandLevel); dataset.updateValues(points); chart.notifyDataUpdate(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { presetSpinner.setSelection(0); HomeActivity.presetPos = 0; HomeActivity.equalizerModel.setPresetPos(0); } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } equalizeSound(); paint.setColor(Color.parseColor("#555555")); paint.setStrokeWidth((float) (1.10 * HomeActivity.ratio)); dataset.setColor(HomeActivity.themeColor); dataset.setSmooth(true); dataset.setThickness(5); chart.setXAxis(false); chart.setYAxis(false); chart.setYLabels(AxisRenderer.LabelPosition.NONE); chart.setXLabels(AxisRenderer.LabelPosition.NONE); chart.setGrid(ChartView.GridType.NONE, 7, 10, paint); chart.setAxisBorderValues(-300, 3300); chart.addData(dataset); chart.show(); Button mEndButton = new Button(getContext()); mEndButton.setBackgroundColor(HomeActivity.themeColor); mEndButton.setTextColor(Color.WHITE); showCase = new ShowcaseView.Builder(getActivity()) .blockAllTouches() .singleShot(4) .setStyle(R.style.CustomShowcaseTheme) .useDecorViewAsParent() .replaceEndButton(mEndButton) .setContentTitlePaint(HomeActivity.tp) .setTarget(new ViewTarget(R.id.showcase_view_equalizer, getActivity())) .setContentTitle("Presets") .setContentText("Use one of the available presets") .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(R.id.equalizerContainer, getActivity())); showCase.setContentTitle("Equalizer Controls"); showCase.setContentText("Use the seekbars to control the Individual frequencies"); showCase.setButtonPosition(HomeActivity.lps); showCase.setButtonText("Next"); break; case 2: showCase.setTarget(new ViewTarget(R.id.controllerBass, getActivity())); showCase.setContentTitle("Bass and Reverb"); showCase.setContentText("Use these controls to control Bass and Reverb"); showCase.setButtonPosition(HomeActivity.lps); showCase.setButtonText("Done"); break; case 3: showCase.hide(); break; } } }); } public void equalizeSound() { ArrayList<String> equalizerPresetNames = new ArrayList<>(); ArrayAdapter<String> equalizerPresetSpinnerAdapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item, equalizerPresetNames); equalizerPresetSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); equalizerPresetNames.add("Custom"); for (short i = 0; i < PlayerFragment.mEqualizer.getNumberOfPresets(); i++) { equalizerPresetNames.add(PlayerFragment.mEqualizer.getPresetName(i)); } presetSpinner.setAdapter(equalizerPresetSpinnerAdapter); presetSpinner.setDropDownWidth((HomeActivity.screen_width * 3) / 4); if (HomeActivity.isEqualizerReloaded && HomeActivity.presetPos != 0) { // correctPosition = false; presetSpinner.setSelection(HomeActivity.presetPos); } presetSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { try { if (position != 0) { PlayerFragment.mEqualizer.usePreset((short) (position - 1)); HomeActivity.presetPos = position; short numberOfFreqBands = 5; final short lowerEqualizerBandLevel = PlayerFragment.mEqualizer.getBandLevelRange()[0]; for (short i = 0; i < numberOfFreqBands; i++) { seekBarFinal[i].setProgress(PlayerFragment.mEqualizer.getBandLevel(i) - lowerEqualizerBandLevel); points[i] = PlayerFragment.mEqualizer.getBandLevel(i) - lowerEqualizerBandLevel; HomeActivity.seekbarpos[i] = PlayerFragment.mEqualizer.getBandLevel(i); HomeActivity.equalizerModel.getSeekbarpos()[i] = PlayerFragment.mEqualizer.getBandLevel(i); } dataset.updateValues(points); chart.notifyDataUpdate(); } } catch (Exception e) { Toast.makeText(ctx, "Error while updating Equalizer", Toast.LENGTH_SHORT).show(); } HomeActivity.equalizerModel.setPresetPos(position); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } @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 setBlockerVisibility(int visibility) { equalizerBlocker.setVisibility(visibility); } }