package com.introspy.config; import android.os.Bundle; import android.util.Log; import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; public class ApplicationFilter extends UpdateAppList { private Boolean _alwaysOverwriteConfig = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { _context = this.getActivity().getApplicationContext(); updateAppList(); ListAdapter myListAdapter = new ArrayAdapter<String>( getActivity(), R.layout.list_item, _completeAppList); setListAdapter(myListAdapter); } catch (Exception e) { Log.w("Introspy", "error: " + e); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.listfragment, container, false); } @Override public void onListItemClick(ListView l, View v, int position, long id) { try { _lastItemSelected = _appList.get(position); int count = getListView().getCount(); SparseBooleanArray sparseBooleanArray = getListView().getCheckedItemPositions(); _lastItemChecked = false; for (int i = 0; i < count; i++){ if (sparseBooleanArray.get(i) && i == position) { _lastItemChecked = true; } } // commit the change to preferences _sp.edit().putBoolean(_lastItemSelected, _lastItemChecked).commit(); } catch (Exception e) { Log.w("IntrospyConfig", "Error:onListItemClick:" + e + "\n SP: "+ _sp); } InjectConfig.getInstance().writeConfig(_lastItemChecked, _lastItemSelected, _context); InjectConfig.getInstance().commit(); } @Override public void onStart() { super.onStart(); try { _sp = _context.getSharedPreferences("ApplicationFilter", 0); Boolean setup = _sp.getBoolean("Enabled", false); if (setup == false) { _sp.edit().putBoolean("Enabled", true).commit(); for(String item : _appList) { _sp.edit().putBoolean(item, false).commit(); } final ListView list = getListView(); for (int i = 0; i < getListAdapter().getCount(); i++) { list.setItemChecked(i, false); } } // create preferences with the appDir as key // TODO: uninstalled apps are never cleaned // it does not create a bug because installed apps // are compared against what is in the preferences // but it keeps an history of all apps ever installed // ..no time to change this behavior else { final ListView list = getListView(); for (int i = 0; i < _appList.size(); i++) { String appDir = _appList.get(i); Boolean checked = _sp.getBoolean(appDir, false); list.setItemChecked(i, checked); // overwrite / remove the config file even if preferences // state otherwise because the tester may remove/add it if (_alwaysOverwriteConfig) { InjectConfig.getInstance().writeConfig( checked, appDir, _context); } } if (_alwaysOverwriteConfig) InjectConfig.getInstance().commit(); } } catch (Exception e) { Log.w("IntrospyConfig", "Error: " + e); } } }