/* * Copyright (C) 2013 - 2014 Alexander "Evisceration" Martinz * * 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 3 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, see <http://www.gnu.org/licenses/>. * */ package org.namelessrom.devicecontrol.modules.performance.sub; import android.os.AsyncTask; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceScreen; import android.support.annotation.NonNull; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import org.namelessrom.devicecontrol.DeviceConstants; import org.namelessrom.devicecontrol.R; import org.namelessrom.devicecontrol.hardware.KsmUtils; import org.namelessrom.devicecontrol.models.BootupConfig; import org.namelessrom.devicecontrol.preferences.AwesomeTogglePreference; import org.namelessrom.devicecontrol.preferences.CustomPreference; import org.namelessrom.devicecontrol.utils.DialogHelper; import org.namelessrom.devicecontrol.utils.Utils; import org.namelessrom.devicecontrol.views.AttachPreferenceFragment; import java.util.ArrayList; import java.util.List; public class KsmFragment extends AttachPreferenceFragment implements Preference.OnPreferenceChangeListener { //---------------------------------------------------------------------------------------------- private PreferenceScreen mRoot; //---------------------------------------------------------------------------------------------- private CustomPreference mFullScans; private CustomPreference mPagesShared; private CustomPreference mPagesSharing; private CustomPreference mPagesUnshared; private CustomPreference mPagesVolatile; //---------------------------------------------------------------------------------------------- private AwesomeTogglePreference mEnable; private AwesomeTogglePreference mDefer; private CustomPreference mPagesToScan; private CustomPreference mSleep; @Override protected int getFragmentId() { return DeviceConstants.ID_KSM; } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.extras_ksm); setHasOptionsMenu(true); mRoot = getPreferenceScreen(); PreferenceCategory category; String tmpString; //------------------------------------------------------------------------------------------ // KSM-Informations //------------------------------------------------------------------------------------------ category = (PreferenceCategory) findPreference("ksm_info"); if (category != null) { mFullScans = (CustomPreference) findPreference("ksm_full_scans"); if (mFullScans != null) { if (!Utils.fileExists(KsmUtils.KSM_FULL_SCANS)) { category.removePreference(mFullScans); } } mPagesShared = (CustomPreference) findPreference("ksm_pages_shared"); if (mPagesShared != null) { if (!Utils.fileExists(KsmUtils.KSM_PAGES_SHARED)) { category.removePreference(mPagesShared); } } mPagesSharing = (CustomPreference) findPreference("ksm_pages_sharing"); if (mPagesSharing != null) { if (!Utils.fileExists(KsmUtils.KSM_PAGES_SHARING)) { category.removePreference(mPagesSharing); } } mPagesUnshared = (CustomPreference) findPreference("ksm_pages_unshared"); if (mPagesUnshared != null) { if (!Utils.fileExists(KsmUtils.KSM_PAGES_UNSHARED)) { category.removePreference(mPagesUnshared); } } mPagesVolatile = (CustomPreference) findPreference("ksm_pages_volatile"); if (mPagesVolatile != null) { if (!Utils.fileExists(KsmUtils.KSM_PAGES_VOLATILE)) { category.removePreference(mPagesVolatile); } } new RefreshTask().execute(); } removeIfEmpty(category); //------------------------------------------------------------------------------------------ // KSM-Tweakables //------------------------------------------------------------------------------------------ category = (PreferenceCategory) findPreference("ksm_settings"); if (category != null) { mEnable = (AwesomeTogglePreference) findPreference("ksm_run"); if (mEnable != null) { if (mEnable.isSupported()) { mEnable.initValue(); mEnable.setOnPreferenceChangeListener(this); } else { category.removePreference(mEnable); } } mDefer = (AwesomeTogglePreference) findPreference("ksm_deferred"); if (mDefer != null) { if (mDefer.isSupported()) { mDefer.initValue(); mDefer.setOnPreferenceChangeListener(this); } else { category.removePreference(mDefer); } } mPagesToScan = (CustomPreference) findPreference("ksm_pages_to_scan"); if (mPagesToScan != null) { if (Utils.fileExists(KsmUtils.KSM_PAGES_TO_SCAN)) { tmpString = Utils.readOneLine(KsmUtils.KSM_PAGES_TO_SCAN); mPagesToScan.setSummary(tmpString); } else { category.removePreference(mPagesToScan); } } mSleep = (CustomPreference) findPreference("ksm_sleep"); if (mSleep != null) { if (Utils.fileExists(KsmUtils.KSM_SLEEP)) { tmpString = Utils.readOneLine(KsmUtils.KSM_SLEEP); mSleep.setSummary(tmpString); } else { category.removePreference(mSleep); } } } removeIfEmpty(category); isSupported(mRoot, getActivity()); } private void removeIfEmpty(final PreferenceCategory preferenceCategory) { if (mRoot != null && preferenceCategory.getPreferenceCount() == 0) { mRoot.removePreference(preferenceCategory); } } @Override public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen, @NonNull final Preference preference) { if (mPagesToScan == preference) { final String title = String.valueOf(mPagesToScan.getTitle()); final int currentProgress = Utils.parseInt(Utils.readOneLine(KsmUtils.KSM_PAGES_TO_SCAN)); DialogHelper.openSeekbarDialog(getActivity(), currentProgress, title, 1, 1024, preference, KsmUtils.KSM_PAGES_TO_SCAN, BootupConfig.CATEGORY_EXTRAS); return true; } else if (mSleep == preference) { final String title = String.valueOf(mSleep.getTitle()); final int currentProgress = Utils.parseInt(Utils.readOneLine(KsmUtils.KSM_SLEEP)); DialogHelper.openSeekbarDialog(getActivity(), currentProgress, title, 50, 5000, preference, KsmUtils.KSM_SLEEP, BootupConfig.CATEGORY_EXTRAS); return true; } return false; } @Override public boolean onPreferenceChange(final Preference preference, final Object o) { if (mEnable == preference) { mEnable.writeValue((Boolean) o); return true; } else if (mDefer == preference) { mDefer.writeValue((Boolean) o); return true; } return false; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_refresh, menu); } @Override public boolean onOptionsItemSelected(final MenuItem item) { final int id = item.getItemId(); switch (id) { case R.id.menu_action_refresh: new RefreshTask().execute(); break; } return false; } private class RefreshTask extends AsyncTask<Void, Void, List<String>> { @Override protected List<String> doInBackground(Void... params) { final ArrayList<String> list = new ArrayList<>(); list.add(Utils.readOneLine(KsmUtils.KSM_FULL_SCANS)); // 0 list.add(Utils.readOneLine(KsmUtils.KSM_PAGES_SHARED)); // 1 list.add(Utils.readOneLine(KsmUtils.KSM_PAGES_SHARING)); // 2 list.add(Utils.readOneLine(KsmUtils.KSM_PAGES_UNSHARED)); // 3 list.add(Utils.readOneLine(KsmUtils.KSM_PAGES_VOLATILE)); // 4 return list; } @Override protected void onPostExecute(final List<String> strings) { if (isAdded()) { String tmp; if (mFullScans != null) { tmp = strings.get(0); mFullScans.setSummary(tmp); } if (mPagesShared != null) { tmp = strings.get(1); mPagesShared.setSummary(tmp); } if (mPagesSharing != null) { tmp = strings.get(2); mPagesSharing.setSummary(tmp); } if (mPagesUnshared != null) { tmp = strings.get(3); mPagesUnshared.setSummary(tmp); } if (mPagesVolatile != null) { tmp = strings.get(4); mPagesVolatile.setSummary(tmp); } } } } }