/** * */ package com.asksven.betterwifionoff; import android.annotation.TargetApi; import android.bluetooth.*; import android.content.Context; import android.content.SharedPreferences; import android.preference.ListPreference; import android.preference.MultiSelectListPreference; import android.preference.PreferenceManager; import android.util.AttributeSet; import android.util.Log; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import com.asksven.android.common.utils.StringUtils; import com.asksven.betterwifionoff.data.Constants; import com.asksven.betterwifionoff.utils.WifiControl; import com.google.ads.e; /** * @author sven * */ public class SsidWhitelistPreference extends MultiSelectListPreference { private static final String SEPARATOR=","; private Context m_context = null; private final static String TAG = "SsidWhitelistPreference"; @TargetApi(11) public SsidWhitelistPreference(Context context, AttributeSet attrs) { super(context, attrs); m_context = context; // retrieve the list of configured access points List<String> whitelistedSsids = new ArrayList<String>(); List<String> ssids = WifiControl.getConfiguredAccessPoints(context); // retrieve the list of witelisted accesspoints SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); String whitelist = sharedPrefs.getString("wifi_whitelist", ""); String[] wl = whitelist.split(","); // start adding the whitelisted enstries for (int i = 0; i < wl.length; i++) { if ((!wl[i].equals("")) && (wl[i] != null)) { String entry = StringUtils.stripLeadingAndTrailingQuotes(wl[i]).trim(); whitelistedSsids.add(entry); Log.i(TAG, "Added whitelist entry: **" + entry + "**"); } } // next add the available ssid not yet liste if (ssids != null) { for (int i = 0; i < ssids.size(); i++) { if (ssids.get(i) != null) { String availableSSID = StringUtils.stripLeadingAndTrailingQuotes(ssids.get(i).trim()); if ((!ssids.get(i).equals("")) && (!whitelistedSsids.contains(availableSSID))) { whitelistedSsids.add(availableSSID); Log.i(TAG, "Added configured SSID entry: **" + availableSSID + "**"); } } else { Log.e(TAG, "ssids contain null object. That is not supposed to happen: " + ssids.toString()); } } } CharSequence[] entries = new CharSequence[whitelistedSsids.size()]; CharSequence[] entryValues = new CharSequence[whitelistedSsids.size()]; for (int i = 0; i < whitelistedSsids.size(); i++) { entries[i] = whitelistedSsids.get(i); entryValues[i] = whitelistedSsids.get(i); } setEntries(entries); setEntryValues(entryValues); } public SsidWhitelistPreference(Context context) { this(context, null); m_context = context; } @TargetApi(11) @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (!positiveResult) { // dialog was canceled: do nothing return; } CharSequence[] entryValues = getEntryValues(); Set selectedValues = getValues(); if (positiveResult && entryValues != null) { StringBuffer value = new StringBuffer(); Iterator<String> it = selectedValues.iterator(); while (it.hasNext()) { String val = it.next(); value.append(val).append(SEPARATOR); } // for ( int i=0; i<entryValues.length; i++ ) // { // value.append(entryValues[i]).append(SEPARATOR); // } String pref = value.toString(); if ( pref.length() > 0 ) { pref = pref.substring(0, pref.length()-SEPARATOR.length()); } SharedPreferences prefs = m_context.getSharedPreferences(Constants.Preferences.name, Context.MODE_MULTI_PROCESS); SharedPreferences.Editor editor = prefs.edit(); editor.putString("wifi_whitelist", pref); editor.commit(); } } }