/** DR Radio 2 is developed by Jacob Nordfalk, Hanafi Mughrabi and Frederik Aagaard. Some parts of the code are loosely based on Sveriges Radio Play for Android. DR Radio 2 for Android is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. DR Radio 2 for Android 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 DR Radio 2 for Android. If not, see <http://www.gnu.org/licenses/>. */ package dk.dr.radio.akt; import android.Manifest; import android.content.pm.PackageManager; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.StatFs; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceActivity; import android.support.v7.widget.Toolbar; import android.text.format.Formatter; import android.view.MenuItem; import android.view.View; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import dk.dr.radio.afspilning.wrapper.AndroidMediaPlayerWrapper; import dk.dr.radio.afspilning.wrapper.Wrapperfabrikering; import dk.dr.radio.data.DRData; import dk.dr.radio.data.HentedeUdsendelser; import dk.dr.radio.data.Lydkilde; import dk.dr.radio.diverse.App; import dk.dr.radio.diverse.Log; import dk.dr.radio.v3.R; public class Indstillinger_akt extends PreferenceActivity implements OnPreferenceChangeListener, Runnable { public static final String åbn_formatindstilling = "åbn_formatindstilling"; private String aktueltLydformat; private ListPreference lydformatlp; Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.indstillinger_akt); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setLogo(R.drawable.dr_logo); toolbar.setTitle(R.string.Indstillinger); // SdkVersion 24 og frem: toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material); toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); App.prefs.edit().putBoolean("fejlsøgning", App.fejlsøgning); addPreferencesFromResource(R.xml.indstillinger); // Find lydformat lydformatlp = (ListPreference) findPreference(Lydkilde.INDST_lydformat); lydformatlp.setEnabled(!DRData.instans.grunddata.udelukHLS); lydformatlp.setOnPreferenceChangeListener(this); aktueltLydformat = lydformatlp.getValue(); // Fix for crash på Android 2.1 - se https://www.bugsense.com/dashboard/project/cd78aa05/errors/1474018028 if (!DRData.instans.hentedeUdsendelser.virker()) { findPreference(HentedeUdsendelser.NØGLE_placeringAfHentedeFiler).setEnabled(false); } else { new AsyncTask() { public String[] visVærdi; public String[] værdi; @Override protected Object doInBackground(Object[] params) { try { ArrayList<File> l = HentedeUdsendelser.findMuligeEksternLagerstier(); visVærdi = new String[l.size()]; værdi = new String[l.size()]; for (int i = 0; i < l.size(); i++) try { File dir = l.get(i); String dirs = dir.toString(); værdi[i] = dirs; visVærdi[i] = dir.getParent() + " " + getString(R.string._ikke_tilgængelig_); // Find ledig plads boolean fandtesFørMkdirs = dir.exists(); dir.mkdirs(); StatFs stat = new StatFs(dirs); long blockSize = stat.getBlockSize(); long availableBlocks = stat.getAvailableBlocks(); if (!fandtesFørMkdirs) dir.delete(); // ryd op visVærdi[i] = dir.getParent() + "\n(" + Formatter.formatFileSize(App.instans, availableBlocks * blockSize) + " " + getString(R.string.ledig)+")"; } catch (Exception e) { Log.e(e); } } catch (Exception ex) { Log.rapporterFejl(ex); // Indsat 17 nov 2014 - fjernes i 2015 } return null; } @Override protected void onPostExecute(Object o) { ListPreference lp = (ListPreference) findPreference(HentedeUdsendelser.NØGLE_placeringAfHentedeFiler); Log.d("Indstillinger_akt placeringAfHentedeFiler " + Arrays.toString(værdi) + Arrays.toString(visVærdi)); lp.setEntries(visVærdi); lp.setEntryValues(værdi); if (visVærdi.length > 0) { if (!App.prefs.contains(HentedeUdsendelser.NØGLE_placeringAfHentedeFiler)) { lp.setValueIndex(0); // Værdi nummer 0 er forvalgt } } else { lp.setEnabled(false); int tilladelse = App.instans.getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, App.instans.getPackageName()); if (tilladelse != PackageManager.PERMISSION_GRANTED) { lp.setSummary(lp.getSummary() + " Du skal give app'en tilladelse til eksternt lager"); } else { lp.setSummary(lp.getSummary() + " " + getString(R.string.Fejl__adgang_til_eksternt_lager_mangler_indsæt_sd_kort_)); } } } }.execute(); } // Statistik må ikke kunne slås fra i produktion findPreference("Rapportér statistik").setEnabled(!App.PRODUKTION); } @Override protected void onStart() { super.onStart(); if (App.fejlsøgning) Log.d(this + " onStart()"); App.instans.aktivitetStartet(this); } @Override protected void onStop() { super.onStop(); if (App.fejlsøgning) Log.d(this + " onStop()"); App.instans.aktivitetStoppet(this); } @Override protected void onDestroy() { super.onDestroy(); App.fejlsøgning = App.prefs.getBoolean("fejlsøgning", false); Wrapperfabrikering.nulstilWrapper(); Wrapperfabrikering.opret(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); } return super.onOptionsItemSelected(item); } public boolean onPreferenceChange(Preference preference, Object newValue) { // På dette tidspunkt er indstillingen ikke gemt endnu, det bliver den // først når metoden har returneret true. // Vi venter derfor med at opdatere afspilleren med det nye lydformat // indtil GUI-tråden er færdig med kaldet til onPreferenceChange() og // klar igen handler.post(this); return true; } public void run() { String nytLydformat = lydformatlp.getValue(); if (nytLydformat.equals(aktueltLydformat)) return; Log.d("Lydformatet blev ændret fra " + aktueltLydformat + " til " + nytLydformat); aktueltLydformat = nytLydformat; DRData drdata = DRData.instans; //String url = drdata.findKanalUrlFraKode(drdata.aktuelKanal); DRData.instans.afspiller.setLydkilde(DRData.instans.afspiller.getLydkilde()); } }