/** Copyright (C) 2013 Louis Teboul (a.k.a Androguide) * * admin@pimpmyrom.org || louisteboul@gmail.com * http://pimpmyrom.org || http://androguide.fr * 71 quai Clémenceau, 69300 Caluire-et-Cuire, FRANCE. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. **/ package com.androguide.honamicontrol.soundcontrol; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.support.v7.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.androguide.honamicontrol.R; import com.androguide.honamicontrol.cards.CardDoubleSeekBar; import com.androguide.honamicontrol.cards.CardDoubleSeekBarPA; import com.androguide.honamicontrol.cards.CardSeekBarSC; import com.androguide.honamicontrol.helpers.CPUHelper; import com.androguide.honamicontrol.helpers.Helpers; import com.androguide.honamicontrol.soundcontrol.SoundControlInterface; import com.fima.cardsui.objects.Card; import com.fima.cardsui.objects.CardStack; import com.fima.cardsui.views.CardTextStripe; import com.fima.cardsui.views.CardUI; import java.util.ArrayList; public class SoundFragment extends Fragment implements SoundControlInterface { private static ActionBarActivity fa; private static ArrayList<Card> mCards = new ArrayList<Card>(); private static CardUI mCardUI; private static SharedPreferences bootPrefs; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.cardsui, container, false); fa = (ActionBarActivity) super.getActivity(); fa.getSupportActionBar().setDisplayHomeAsUpEnabled(true); fa.getSupportActionBar().setHomeButtonEnabled(true); bootPrefs = fa.getSharedPreferences("BOOT_PREFS", 0); assert ll != null; mCardUI = (CardUI) (ll.findViewById(R.id.cardsui)); createCards(); return ll; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.sound_control, menu); SharedPreferences p = fa.getSharedPreferences("SOUND_CONTROL", 0); if (p.getBoolean("LINKED", true)) menu.getItem(0).setChecked(true); else menu.getItem(0).setChecked(false); } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.link_seekbars: SharedPreferences soundPrefs = fa.getSharedPreferences("SOUND_CONTROL", 0); if (item.isChecked()) { item.setChecked(false); soundPrefs.edit().putBoolean("LINKED", false).commit(); } else { item.setChecked(true); soundPrefs.edit().putBoolean("LINKED", true).commit(); } break; } return super.onOptionsItemSelected(item); } public static void recreateCards() { mCardUI.clearCards(); createCards(); } private static void createCards() { String sectionColor = fa.getString(R.string.sound_control_color); mCardUI.addStack(new CardStack("")); if (!Helpers.doesFileExist(FAUX_SC_VERSION)) { mCardUI.addCard(new CardTextStripe( fa.getString(R.string.unsupported), fa.getString(R.string.sound_control_unsupported), "#C74B46", "#C74B46", false) ); } else { String[] headphoneGains = CPUHelper.readOneLineNotRoot(FAUX_SC_HEADPHONE).split(" "); int headphoneGainLeft = Integer.valueOf(headphoneGains[0]); if (headphoneGainLeft > 100) headphoneGainLeft -= 256; int headphoneGainRight = Integer.valueOf(headphoneGains[1]); if (headphoneGainRight > 100) headphoneGainRight -= 256; final CardDoubleSeekBar headphoneCard = new CardDoubleSeekBar( fa.getString(R.string.sc_headphone_digital_gain), fa.getString(R.string.sc_headphone_digital_gain_desc), sectionColor, "", FAUX_SC_HEADPHONE, 40, headphoneGainLeft + 30, headphoneGainRight + 30, fa, null ); mCards.add(headphoneCard); mCardUI.addCard(headphoneCard); String[] headphonePAGains = CPUHelper.readOneLineNotRoot(FAUX_SC_HEADPHONE_POWERAMP).split(" "); int headphonePAGainLeft = Integer.valueOf(headphonePAGains[0]); int headphonePAGainRight = Integer.valueOf(headphonePAGains[1]); CardDoubleSeekBarPA headphonePaCard = new CardDoubleSeekBarPA( fa.getString(R.string.sc_headphone_analog_gain), fa.getString(R.string.sc_headphone_analog_gain_desc), sectionColor, "", FAUX_SC_HEADPHONE_POWERAMP, 12, headphonePAGainLeft , headphonePAGainRight, fa, null ); mCards.add(headphonePaCard); mCardUI.addCard(headphonePaCard); String[] speakerGains = CPUHelper.readOneLineNotRoot(FAUX_SC_SPEAKER).split(" "); int speakerGainLeft = Integer.valueOf(speakerGains[0]); if (speakerGainLeft > 100) speakerGainLeft -= 256; int speakerGainRight = Integer.valueOf(speakerGains[1]); if (speakerGainRight > 100) speakerGainRight -= 256; CardDoubleSeekBar speakerCard = new CardDoubleSeekBar( fa.getString(R.string.sc_speaker_gain), fa.getString(R.string.sc_speaker_gain_desc), fa.getString(R.string.sound_control_color), "", FAUX_SC_SPEAKER, 40, speakerGainLeft + 30, speakerGainRight + 30, fa, null ); mCards.add(speakerCard); mCardUI.addCard(speakerCard); int micGain = Integer.valueOf(CPUHelper.readOneLine(FAUX_SC_MIC)); if (micGain > 100) micGain -= 256; CardSeekBarSC micCard = new CardSeekBarSC( fa.getString(R.string.sc_mic_gain), fa.getString(R.string.sc_mic_gain_desc), fa.getString(R.string.sound_control_color), "", FAUX_SC_MIC, 40, micGain + 30, fa, new ActionMode.Callback() { private Boolean isApplied = false; @Override public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { MenuInflater inflater = actionMode.getMenuInflater(); inflater.inflate(R.menu.contextual_menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.cancel: actionMode.finish(); break; case R.id.apply: isApplied = true; SharedPreferences prefs = fa.getSharedPreferences("syskernelsound_control_3gpl_mic_gain", 0); int toApply = prefs.getInt("VALUE", 0); Helpers.CMDProcessorWrapper.runSuCommand( "busybox echo 0 > " + FAUX_SC_LOCKED + "\n" + "busybox echo " + toApply + " " + Helpers.getSoundCountrolBitRepresentation(toApply, 0) + " > " + FAUX_SC_MIC + "\n" + "busybox echo 1 > " + FAUX_SC_LOCKED); bootPrefs.edit().putString("SC_MIC", toApply + " " + Helpers.getSoundCountrolBitRepresentation(toApply, 0)).commit(); actionMode.finish(); } return false; } @Override public void onDestroyActionMode(ActionMode actionMode) { if (!isApplied) { mCardUI.clearCards(); createCards(); } } } ); mCards.add(micCard); mCardUI.addCard(micCard); int camMicGain = Integer.valueOf(CPUHelper.readOneLine(FAUX_SC_CAM_MIC)); if (camMicGain > 100) camMicGain -= 256; CardSeekBarSC camCard = new CardSeekBarSC( fa.getString(R.string.sc_cam_mic_gain), fa.getString(R.string.sc_cam_mic_gain_desc), fa.getString(R.string.sound_control_color), "", FAUX_SC_CAM_MIC, 40, camMicGain + 30, fa, new ActionMode.Callback() { private Boolean isApplied = false; @Override public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { MenuInflater inflater = actionMode.getMenuInflater(); inflater.inflate(R.menu.contextual_menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.cancel: actionMode.finish(); break; case R.id.apply: isApplied = true; SharedPreferences prefs = fa.getSharedPreferences("syskernelsound_control_3gpl_cam_mic_gain", 0); int toApply = prefs.getInt("VALUE", 0); Helpers.CMDProcessorWrapper.runSuCommand( "busybox echo 0 > " + FAUX_SC_LOCKED + "\n" + "busybox echo " + toApply + " " + Helpers.getSoundCountrolBitRepresentation(toApply, 0) + " > " + FAUX_SC_CAM_MIC + "\n" + "busybox echo 1 > " + FAUX_SC_LOCKED); bootPrefs.edit().putString("SC_CAM_MIC", toApply + " " + Helpers.getSoundCountrolBitRepresentation(toApply, 0)).commit(); actionMode.finish(); break; } return false; } @Override public void onDestroyActionMode(ActionMode actionMode) { if (!isApplied) { mCardUI.clearCards(); createCards(); } } } ); mCards.add(camCard); mCardUI.addCard(camCard); } mCardUI.refresh(); } }