package net.wigle.wigleandroid; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import android.content.SharedPreferences; import net.wigle.wigleandroid.model.Network; import net.wigle.wigleandroid.model.NetworkType; /** * filter matchers */ public final class FilterMatcher { private static boolean isFilterOn( final SharedPreferences prefs, final String prefix ) { return prefs.getBoolean( prefix + ListFragment.PREF_MAPF_ENABLED, true ); } public static Matcher getFilterMatcher( final SharedPreferences prefs, final String prefix ) { final String regex = prefs.getString( prefix + ListFragment.PREF_MAPF_REGEX, "" ); Matcher matcher = null; if ( isFilterOn( prefs, prefix ) && regex != null && ! "".equals(regex) ) { try { Pattern pattern = Pattern.compile( regex, Pattern.CASE_INSENSITIVE ); matcher = pattern.matcher( "" ); } catch ( PatternSyntaxException ex ) { MainActivity.error("regex pattern exception: " + ex); } } return matcher; } public static boolean isOk( final Matcher matcher, final SharedPreferences prefs, final String prefix, final Network network ) { if ( ! isFilterOn( prefs, prefix ) ) { return true; } if ( matcher != null ) { matcher.reset(network.getSsid()); final boolean invert = prefs.getBoolean( prefix + ListFragment.PREF_MAPF_INVERT, false ); final boolean matches = matcher.find(); if ( ! matches && ! invert) { return false; } else if ( matches && invert ) { return false; } } if ( NetworkType.WIFI.equals( network.getType() ) ) { switch ( network.getCrypto() ) { case Network.CRYPTO_NONE: if ( ! prefs.getBoolean( prefix + ListFragment.PREF_MAPF_OPEN, true ) ) { return false; } break; case Network.CRYPTO_WEP: if ( ! prefs.getBoolean( prefix + ListFragment.PREF_MAPF_WEP, true ) ) { return false; } break; case Network.CRYPTO_WPA: if ( ! prefs.getBoolean( prefix + ListFragment.PREF_MAPF_WPA, true ) ) { return false; } break; default: MainActivity.error( "unhandled crypto: " + network ); } } else if (!prefs.getBoolean(prefix + ListFragment.PREF_MAPF_CELL, true)) { return false; } return true; } }