/* * Copyright (C) 2015-2016 Willi Ye <williye97@gmail.com> * * This file is part of Kernel Adiutor. * * Kernel Adiutor 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. * * Kernel Adiutor 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 Kernel Adiutor. If not, see <http://www.gnu.org/licenses/>. * */ package com.grarak.kerneladiutor.fragments.kernel; import android.content.Context; import android.os.Vibrator; import com.grarak.kerneladiutor.R; import com.grarak.kerneladiutor.fragments.ApplyOnBootFragment; import com.grarak.kerneladiutor.fragments.RecyclerViewFragment; import com.grarak.kerneladiutor.utils.kernel.misc.Misc; import com.grarak.kerneladiutor.utils.kernel.misc.PowerSuspend; import com.grarak.kerneladiutor.utils.kernel.misc.Vibration; import com.grarak.kerneladiutor.utils.kernel.misc.Wakelocks; import com.grarak.kerneladiutor.views.recyclerview.CardView; import com.grarak.kerneladiutor.views.recyclerview.GenericSelectView; import com.grarak.kerneladiutor.views.recyclerview.RecyclerViewItem; import com.grarak.kerneladiutor.views.recyclerview.SeekBarView; import com.grarak.kerneladiutor.views.recyclerview.SelectView; import com.grarak.kerneladiutor.views.recyclerview.SwitchView; import com.grarak.kerneladiutor.views.recyclerview.TitleView; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created by willi on 29.06.16. */ public class MiscFragment extends RecyclerViewFragment { @Override protected void init() { super.init(); addViewPagerFragment(ApplyOnBootFragment.newInstance(this)); } @Override protected void addItems(List<RecyclerViewItem> items) { if (Vibration.supported()) { vibrationInit(items); } if (Misc.hasLoggerEnable()) { loggerInit(items); } if (Misc.hasCrc()) { crcInit(items); } fsyncInit(items); if (Misc.hasGentleFairSleepers()) { gentlefairsleepersInit(items); } if (Misc.hasArchPower()) { archPowerInit(items); } if (PowerSuspend.supported()) { powersuspendInit(items); } networkInit(items); wakelockInit(items); } private void vibrationInit(List<RecyclerViewItem> items) { final Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); final int min = Vibration.getMin(); int max = Vibration.getMax(); final float offset = (max - min) / 100f; SeekBarView vibration = new SeekBarView(); vibration.setTitle(getString(R.string.vibration_strength)); vibration.setUnit("%"); vibration.setProgress(Math.round((Vibration.get() - min) / offset)); vibration.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() { @Override public void onStop(SeekBarView seekBarView, int position, String value) { Vibration.setVibration(Math.round(position * offset + min), getActivity()); getHandler().postDelayed(new Runnable() { @Override public void run() { if (vibrator != null) { vibrator.vibrate(300); } } }, 250); } @Override public void onMove(SeekBarView seekBarView, int position, String value) { } }); items.add(vibration); } private void loggerInit(List<RecyclerViewItem> items) { SwitchView logger = new SwitchView(); logger.setSummary(getString(R.string.android_logger)); logger.setChecked(Misc.isLoggerEnabled()); logger.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { Misc.enableLogger(isChecked, getActivity()); } }); items.add(logger); } private void crcInit(List<RecyclerViewItem> items) { SwitchView crc = new SwitchView(); crc.setTitle(getString(R.string.crc)); crc.setSummary(getString(R.string.crc_summary)); crc.setChecked(Misc.isCrcEnabled()); crc.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { Misc.enableCrc(isChecked, getActivity()); } }); items.add(crc); } private void fsyncInit(List<RecyclerViewItem> items) { if (Misc.hasFsync()) { SwitchView fsync = new SwitchView(); fsync.setTitle(getString(R.string.fsync)); fsync.setSummary(getString(R.string.fsync_summary)); fsync.setChecked(Misc.isFsyncEnabled()); fsync.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { Misc.enableFsync(isChecked, getActivity()); } }); items.add(fsync); } if (Misc.hasDynamicFsync()) { SwitchView dynamicFsync = new SwitchView(); dynamicFsync.setTitle(getString(R.string.dynamic_fsync)); dynamicFsync.setSummary(getString(R.string.dynamic_fsync_summary)); dynamicFsync.setChecked(Misc.isDynamicFsyncEnabled()); dynamicFsync.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { Misc.enableDynamicFsync(isChecked, getActivity()); } }); items.add(dynamicFsync); } } private void gentlefairsleepersInit(List<RecyclerViewItem> items) { SwitchView gentleFairSleepers = new SwitchView(); gentleFairSleepers.setTitle(getString(R.string.gentlefairsleepers)); gentleFairSleepers.setSummary(getString(R.string.gentlefairsleepers_summary)); gentleFairSleepers.setChecked(Misc.isGentleFairSleepersEnabled()); gentleFairSleepers.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { Misc.enableGentleFairSleepers(isChecked, getActivity()); } }); items.add(gentleFairSleepers); } private void archPowerInit(List<RecyclerViewItem> items) { SwitchView archPower = new SwitchView(); archPower.setTitle(getString(R.string.arch_power)); archPower.setSummary(getString(R.string.arch_power_summary)); archPower.setChecked(Misc.isArchPowerEnabled()); archPower.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { Misc.enableArchPower(isChecked, getActivity()); } }); items.add(archPower); } private void powersuspendInit(List<RecyclerViewItem> items) { if (PowerSuspend.hasMode()) { SelectView mode = new SelectView(); mode.setTitle(getString(R.string.power_suspend_mode)); mode.setSummary(getString(R.string.power_suspend_mode_summary)); mode.setItems(Arrays.asList(getResources().getStringArray(R.array.powersuspend_items))); mode.setItem(PowerSuspend.getMode()); mode.setOnItemSelected(new SelectView.OnItemSelected() { @Override public void onItemSelected(SelectView selectView, int position, String item) { PowerSuspend.setMode(position, getActivity()); } }); items.add(mode); } if (PowerSuspend.hasOldState()) { SwitchView state = new SwitchView(); state.setTitle(getString(R.string.power_suspend_state)); state.setSummary(getString(R.string.power_suspend_state_summary)); state.setChecked(PowerSuspend.isOldStateEnabled()); state.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { PowerSuspend.enableOldState(isChecked, getActivity()); } }); items.add(state); } if (PowerSuspend.hasNewState()) { SeekBarView state = new SeekBarView(); state.setTitle(getString(R.string.power_suspend_state)); state.setSummary(getString(R.string.power_suspend_state_summary)); state.setMax(2); state.setProgress(PowerSuspend.getNewState()); state.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() { @Override public void onStop(SeekBarView seekBarView, int position, String value) { PowerSuspend.setNewState(position, getActivity()); } @Override public void onMove(SeekBarView seekBarView, int position, String value) { } }); items.add(state); } } private void networkInit(List<RecyclerViewItem> items) { CardView networkCard = new CardView(getActivity()); networkCard.setTitle(getString(R.string.network)); try { SelectView tcp = new SelectView(); tcp.setTitle(getString(R.string.tcp)); tcp.setSummary(getString(R.string.tcp_summary)); tcp.setItems(Misc.getTcpAvailableCongestions()); tcp.setItem(Misc.getTcpCongestion()); tcp.setOnItemSelected(new SelectView.OnItemSelected() { @Override public void onItemSelected(SelectView selectView, int position, String item) { Misc.setTcpCongestion(item, getActivity()); } }); networkCard.addItem(tcp); } catch (Exception ignored) { } GenericSelectView hostname = new GenericSelectView(); hostname.setSummary(getString(R.string.hostname)); hostname.setValue(Misc.getHostname()); hostname.setValueRaw(hostname.getValue()); hostname.setOnGenericValueListener(new GenericSelectView.OnGenericValueListener() { @Override public void onGenericValueSelected(GenericSelectView genericSelectView, String value) { Misc.setHostname(value, getActivity()); } }); networkCard.addItem(hostname); items.add(networkCard); } private void wakelockInit(List<RecyclerViewItem> items) { List<RecyclerViewItem> wakelocks = new ArrayList<>(); for (final Wakelocks.Wakelock wakelock : Wakelocks.getWakelocks()) { if (!wakelock.exists()) continue; String description = wakelock.getDescription(getActivity()); SwitchView switchView = new SwitchView(); if (description == null) { switchView.setSummary(wakelock.getTitle(getActivity())); } else { switchView.setTitle(wakelock.getTitle(getActivity())); switchView.setSummary(description); } switchView.setChecked(wakelock.isEnabled()); switchView.addOnSwitchListener(new SwitchView.OnSwitchListener() { @Override public void onChanged(SwitchView switchView, boolean isChecked) { wakelock.enable(isChecked, getActivity()); } }); wakelocks.add(switchView); } if (Wakelocks.hasWlanrxDivider()) { List<String> list = new ArrayList<>(); for (int i = 1; i < 17; i++) { list.add((100 / i) + "%"); } list.add("0%"); SeekBarView wlanrxDivider = new SeekBarView(); wlanrxDivider.setTitle(getString(R.string.wlan_rx_wakelock_divider)); wlanrxDivider.setItems(list); wlanrxDivider.setProgress(Wakelocks.getWlanrxDivider()); wlanrxDivider.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() { @Override public void onStop(SeekBarView seekBarView, int position, String value) { Wakelocks.setWlanrxDivider(position, getActivity()); } @Override public void onMove(SeekBarView seekBarView, int position, String value) { } }); wakelocks.add(wlanrxDivider); } if (Wakelocks.hasWlanctrlDivider()) { List<String> list = new ArrayList<>(); for (int i = 1; i < 17; i++) { list.add((100 / i) + "%"); } list.add("0%"); SeekBarView wlanctrlDivider = new SeekBarView(); wlanctrlDivider.setTitle(getString(R.string.wlan_ctrl_wakelock_divider)); wlanctrlDivider.setItems(list); wlanctrlDivider.setProgress(Wakelocks.getWlanctrlDivider()); wlanctrlDivider.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() { @Override public void onStop(SeekBarView seekBarView, int position, String value) { Wakelocks.setWlanctrlDivider(position, getActivity()); } @Override public void onMove(SeekBarView seekBarView, int position, String value) { } }); wakelocks.add(wlanctrlDivider); } if (Wakelocks.hasMsmHsicDivider()) { List<String> list = new ArrayList<>(); for (int i = 1; i < 17; i++) { list.add((100 / i) + "%"); } list.add("0%"); SeekBarView msmHsicDivider = new SeekBarView(); msmHsicDivider.setTitle(getString(R.string.msm_hsic_wakelock_divider)); msmHsicDivider.setItems(list); msmHsicDivider.setProgress(Wakelocks.getMsmHsicDivider()); msmHsicDivider.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() { @Override public void onStop(SeekBarView seekBarView, int position, String value) { Wakelocks.setMsmHsicDivider(position, getActivity()); } @Override public void onMove(SeekBarView seekBarView, int position, String value) { } }); wakelocks.add(msmHsicDivider); } if (Wakelocks.hasBCMDHDDivider()) { SeekBarView bcmdhdDivider = new SeekBarView(); bcmdhdDivider.setTitle(getString(R.string.bcmdhd_wakelock_divider)); bcmdhdDivider.setMax(9); bcmdhdDivider.setMin(1); bcmdhdDivider.setProgress(Wakelocks.getBCMDHDDivider() - 1); bcmdhdDivider.setOnSeekBarListener(new SeekBarView.OnSeekBarListener() { @Override public void onStop(SeekBarView seekBarView, int position, String value) { Wakelocks.setBCMDHDDivider(position + 1, getActivity()); } @Override public void onMove(SeekBarView seekBarView, int position, String value) { } }); wakelocks.add(bcmdhdDivider); } if (wakelocks.size() > 0) { TitleView wakelockTitle = new TitleView(); wakelockTitle.setText(getString(R.string.wakelock)); items.add(wakelockTitle); items.addAll(wakelocks); } } }