package com.dsht.kerneltweaker.fragments; import java.io.IOException; import java.util.List; import java.util.concurrent.TimeoutException; import android.app.Fragment; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.dsht.kerneltweaker.CustomBaseAdapter; import com.dsht.kerneltweaker.Helpers; import com.dsht.kerneltweaker.MainActivity; import com.dsht.kerneltweaker.PresetsBaseAdapter; import com.dsht.kerneltweaker.R; import com.dsht.kerneltweaker.database.DataItem; import com.dsht.kerneltweaker.database.DatabaseHandler; import com.dsht.kernetweaker.cmdprocessor.CMDProcessor; import com.dsht.settings.SettingsFragment; import com.stericson.RootTools.RootTools; import com.stericson.RootTools.exceptions.RootDeniedException; import com.stericson.RootTools.execution.CommandCapture; public class LowMemoryKillerFragment extends Fragment { private static final String MINFREE_FILE = "/sys/module/lowmemorykiller/parameters/minfree"; private String[] values; private CustomBaseAdapter mAdapter; private Context mContext; private MenuItem boot; private DatabaseHandler db = MainActivity.db; private List<DataItem> items; private String category = "lmk"; private String color; private ListView list; private String[] names; private String[] summaries; private final static String[] presets = { "512,1024,1280,2048,3072,4096", "1024,2048,2560,4096,6144,8192", "1024,2048,4096,8192,12288,16384", "2048,4096,8192,16384,24576,32768", "2048,4096,8192,16384,24576,32768" }; private static final String[] presetsNames = { "Very Light", "Light", "Medium", "Aggressive", "Very Aggressive" }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity(); setHasOptionsMenu(true); items = db.getAllItems(); color = getResources().getStringArray(R.array.menu_colors)[4]; Helpers.setPermissions(MINFREE_FILE); setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View v = inflater.inflate(R.layout.lmk_layout, container,false); list = (ListView) v.findViewById(R.id.list); values = getMinFreeValues(); names = mContext.getResources().getStringArray(R.array.lmk_titles); summaries = mContext.getResources().getStringArray(R.array.lmk_descs); mAdapter = new CustomBaseAdapter(mContext, values, names, summaries, MINFREE_FILE, color, db); list.setAdapter(mAdapter); View footer = inflater.inflate(R.layout.lmk_footer, null, false); LinearLayout ll = (LinearLayout) footer.findViewById(R.id.preset_layout); addPresets(ll, inflater); list.addFooterView(footer); MainActivity.menu.toggle(true); return v; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_lmk, menu); boot = (MenuItem) menu.findItem(R.id.action_boot); for (DataItem item : items) { if(item.getName().contains(MINFREE_FILE)) { boot.setChecked(true); break; } boot.setChecked(false); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.action_boot: if(item.isChecked()) { db.deleteItemByName("'"+MINFREE_FILE+"'"); item.setChecked(false); }else { db.deleteItemByName("'"+MINFREE_FILE+"'"); db.addItem(new DataItem("'"+MINFREE_FILE+"'", buildString(mAdapter.getValues()), "LOW MEMORY KILLER", category)); item.setChecked(true); } return true; } return false; } private String[] getMinFreeValues() { String content = Helpers.readFileViaShell(MINFREE_FILE, false); Log.d("CONTENT", content); String[] vals = content.trim().replace("\n", "").split(","); return vals; } public String buildString(String[] values) { String builded = ""; for(int i = 0; i<values.length; i++) { if(i!=values.length-1) { builded+=values[i]+","; }else { builded+=values[i]; } } return builded; } private void addPresets(LinearLayout ll, LayoutInflater inflater) { for(int i = 0; i < presetsNames.length; i++) { SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext); View child = inflater.inflate(R.layout.list_item, null, false); TextView title = (TextView) child.findViewById(android.R.id.text1); final TextView summary = (TextView) child.findViewById(android.R.id.text2); title.setText(presetsNames[i]); summary.setText(presets[i]); if(mPrefs.getBoolean(SettingsFragment.KEY_ENABLE_GLOBAL, false)) { int color = mPrefs.getInt(SettingsFragment.KEY_GLOBAL_COLOR, Color.parseColor("#FFFFFF")); title.setTextColor(color); }else if(mPrefs.getBoolean(SettingsFragment.KEY_ENABLE_PERSONAL, false)) { int col = MainActivity.mPrefs.getInt(SettingsFragment.KEY_LMK, Color.parseColor("#ff0099cc")); title.setTextColor(col); } else { int color = Color.parseColor( mContext.getResources().getStringArray(R.array.menu_colors)[6]); title.setTextColor(color); } child.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub CMDProcessor.runSuCommand("echo \""+ summary.getText().toString() + "\" > "+ MINFREE_FILE ); values = getMinFreeValues(); mAdapter = new CustomBaseAdapter(mContext, values, names, summaries, MINFREE_FILE, color, db); list.setAdapter(mAdapter); } }); ll.addView(child); } } }