Loading app/build.gradle +1 −1 Original line number Original line Diff line number Diff line Loading @@ -20,7 +20,7 @@ android { } } } } dependencies{ dependencies{ implementation 'foundation.e:privacymodule.api:0.4.1' implementation 'foundation.e:privacymodule.api:0.4.3' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } } repositories { repositories { Loading app/src/main/java/foundation/e/trackerfilter/AppTrackerWhitelist.java +52 −1 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,10 @@ package foundation.e.trackerfilter; import android.content.ContentValues; import android.content.ContentValues; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteOpenHelper; Loading @@ -27,7 +31,6 @@ import android.provider.BaseColumns; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import foundation.e.privacymodules.trackers.IBlockTrackersPrivacyModule; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.Tracker; public class AppTrackerWhitelist extends SQLiteOpenHelper{ public class AppTrackerWhitelist extends SQLiteOpenHelper{ Loading @@ -36,6 +39,8 @@ public class AppTrackerWhitelist extends SQLiteOpenHelper{ private static AppTrackerWhitelist sAppTrackerWhitelist; private static AppTrackerWhitelist sAppTrackerWhitelist; private final Context mContext; private final Context mContext; private Object mLock = new Object(); private Object mLock = new Object(); private List<ApplicationInfo> mIgnoredApps; private ArrayList<String> mLauncherAppsList; public AppTrackerWhitelist(Context context) { public AppTrackerWhitelist(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); super(context, DATABASE_NAME, null, DATABASE_VERSION); Loading Loading @@ -196,6 +201,52 @@ public class AppTrackerWhitelist extends SQLiteOpenHelper{ } } } } private boolean isWhitelistable(ApplicationInfo app){ /*if (AppUtils.isInstant(app)) { return false; } else*/ if (hasFlag(app.flags, ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) { return true; } else if (!hasFlag(app.flags, ApplicationInfo.FLAG_SYSTEM)) { return true; } else if (mLauncherAppsList.contains(app.packageName)) { return true; } else if (false/* hasFlag(app.flags, ApplicationInfo.FLAG_SYSTEM)&& app.isHomeApp*/) { return true; } return false; } private static boolean hasFlag(int flags, int flag) { return (flags & flag) != 0; } public List<ApplicationInfo> getWhitelistableApps(boolean ignoredApps){ if(ignoredApps && mIgnoredApps != null) return mIgnoredApps; List<ApplicationInfo> returnApps = new ArrayList<>(); PackageManager pm = mContext.getPackageManager(); mLauncherAppsList = new ArrayList<String>(); Intent i = new Intent(Intent.ACTION_MAIN, null); i.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> allApps = pm.queryIntentActivities(i, 0); for(ResolveInfo ri:allApps) { mLauncherAppsList.add(ri.activityInfo.packageName); } List<ApplicationInfo> apps = mContext.getPackageManager().getInstalledApplications(0); for (ApplicationInfo app : apps) { if(isWhitelistable(app) && ! ignoredApps || ignoredApps && !isWhitelistable(app)) { returnApps.add(app); } } if(ignoredApps) mIgnoredApps = returnApps; return returnApps; } public static AppTrackerWhitelist getInstance(Context ct){ public static AppTrackerWhitelist getInstance(Context ct){ if(sAppTrackerWhitelist == null){ if(sAppTrackerWhitelist == null){ sAppTrackerWhitelist = new AppTrackerWhitelist(ct); sAppTrackerWhitelist = new AppTrackerWhitelist(ct); Loading app/src/main/java/foundation/e/trackerfilter/DNSBlockerRunnable.java +1 −4 Original line number Original line Diff line number Diff line Loading @@ -78,15 +78,12 @@ public class DNSBlockerRunnable implements Runnable { public static void init(Context context){ public static void init(Context context){ if(sSystemApps == null) { if(sSystemApps == null) { sSystemApps = new ArrayList<>(); sSystemApps = new ArrayList<>(); List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0); List<ApplicationInfo> apps = AppTrackerWhitelist.getInstance(context).getWhitelistableApps(true); for (ApplicationInfo app : apps) { for (ApplicationInfo app : apps) { if ((app.flags & (ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_SYSTEM)) > 0) { if(!app.packageName.equals("foundation.e.browser") && !app.packageName.equals("foundation.e.mail")) sSystemApps.add(app.uid); sSystemApps.add(app.uid); } } } } } } } @Override @Override public void run() { public void run() { Loading app/src/main/java/foundation/e/trackerfilter/api/BlockTrackersPrivacyModule.java +13 −3 Original line number Original line Diff line number Diff line Loading @@ -18,14 +18,13 @@ package foundation.e.trackerfilter.api; package foundation.e.trackerfilter.api; import android.content.Context; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.preference.PreferenceManager; import android.preference.PreferenceManager; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import dnsfilter.android.DNSFilterService; import foundation.e.privacymodules.permissions.data.ApplicationDescription; import dnsfilter.android.R; import foundation.e.privacymodules.trackers.IBlockTrackersPrivacyModule; import foundation.e.privacymodules.trackers.IBlockTrackersPrivacyModule; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.trackerfilter.AppTrackerWhitelist; import foundation.e.trackerfilter.AppTrackerWhitelist; Loading Loading @@ -105,6 +104,17 @@ public class BlockTrackersPrivacyModule implements IBlockTrackersPrivacyModule { public void setWhiteListed(int i, boolean b) { public void setWhiteListed(int i, boolean b) { AppTrackerWhitelist.getInstance(mContext).setWhiteListed(i, b); AppTrackerWhitelist.getInstance(mContext).setWhiteListed(i, b); } } @Override public List<ApplicationDescription> getBlockableApps(){ List<ApplicationDescription> returnApps = new ArrayList<>(); for (ApplicationInfo applicationInfo: AppTrackerWhitelist.getInstance(mContext).getWhitelistableApps(false)){ ApplicationDescription description = new ApplicationDescription(applicationInfo.packageName, applicationInfo.uid,mContext.getPackageManager().getApplicationLabel(applicationInfo), mContext.getPackageManager().getApplicationIcon(applicationInfo)); returnApps.add(description); } return returnApps; } public static BlockTrackersPrivacyModule getInstance(Context ct){ public static BlockTrackersPrivacyModule getInstance(Context ct){ if(sBlockTrackersPrivacyModule == null){ if(sBlockTrackersPrivacyModule == null){ Loading Loading
app/build.gradle +1 −1 Original line number Original line Diff line number Diff line Loading @@ -20,7 +20,7 @@ android { } } } } dependencies{ dependencies{ implementation 'foundation.e:privacymodule.api:0.4.1' implementation 'foundation.e:privacymodule.api:0.4.3' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } } repositories { repositories { Loading
app/src/main/java/foundation/e/trackerfilter/AppTrackerWhitelist.java +52 −1 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,10 @@ package foundation.e.trackerfilter; import android.content.ContentValues; import android.content.ContentValues; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteOpenHelper; Loading @@ -27,7 +31,6 @@ import android.provider.BaseColumns; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import foundation.e.privacymodules.trackers.IBlockTrackersPrivacyModule; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.Tracker; public class AppTrackerWhitelist extends SQLiteOpenHelper{ public class AppTrackerWhitelist extends SQLiteOpenHelper{ Loading @@ -36,6 +39,8 @@ public class AppTrackerWhitelist extends SQLiteOpenHelper{ private static AppTrackerWhitelist sAppTrackerWhitelist; private static AppTrackerWhitelist sAppTrackerWhitelist; private final Context mContext; private final Context mContext; private Object mLock = new Object(); private Object mLock = new Object(); private List<ApplicationInfo> mIgnoredApps; private ArrayList<String> mLauncherAppsList; public AppTrackerWhitelist(Context context) { public AppTrackerWhitelist(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); super(context, DATABASE_NAME, null, DATABASE_VERSION); Loading Loading @@ -196,6 +201,52 @@ public class AppTrackerWhitelist extends SQLiteOpenHelper{ } } } } private boolean isWhitelistable(ApplicationInfo app){ /*if (AppUtils.isInstant(app)) { return false; } else*/ if (hasFlag(app.flags, ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) { return true; } else if (!hasFlag(app.flags, ApplicationInfo.FLAG_SYSTEM)) { return true; } else if (mLauncherAppsList.contains(app.packageName)) { return true; } else if (false/* hasFlag(app.flags, ApplicationInfo.FLAG_SYSTEM)&& app.isHomeApp*/) { return true; } return false; } private static boolean hasFlag(int flags, int flag) { return (flags & flag) != 0; } public List<ApplicationInfo> getWhitelistableApps(boolean ignoredApps){ if(ignoredApps && mIgnoredApps != null) return mIgnoredApps; List<ApplicationInfo> returnApps = new ArrayList<>(); PackageManager pm = mContext.getPackageManager(); mLauncherAppsList = new ArrayList<String>(); Intent i = new Intent(Intent.ACTION_MAIN, null); i.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> allApps = pm.queryIntentActivities(i, 0); for(ResolveInfo ri:allApps) { mLauncherAppsList.add(ri.activityInfo.packageName); } List<ApplicationInfo> apps = mContext.getPackageManager().getInstalledApplications(0); for (ApplicationInfo app : apps) { if(isWhitelistable(app) && ! ignoredApps || ignoredApps && !isWhitelistable(app)) { returnApps.add(app); } } if(ignoredApps) mIgnoredApps = returnApps; return returnApps; } public static AppTrackerWhitelist getInstance(Context ct){ public static AppTrackerWhitelist getInstance(Context ct){ if(sAppTrackerWhitelist == null){ if(sAppTrackerWhitelist == null){ sAppTrackerWhitelist = new AppTrackerWhitelist(ct); sAppTrackerWhitelist = new AppTrackerWhitelist(ct); Loading
app/src/main/java/foundation/e/trackerfilter/DNSBlockerRunnable.java +1 −4 Original line number Original line Diff line number Diff line Loading @@ -78,15 +78,12 @@ public class DNSBlockerRunnable implements Runnable { public static void init(Context context){ public static void init(Context context){ if(sSystemApps == null) { if(sSystemApps == null) { sSystemApps = new ArrayList<>(); sSystemApps = new ArrayList<>(); List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0); List<ApplicationInfo> apps = AppTrackerWhitelist.getInstance(context).getWhitelistableApps(true); for (ApplicationInfo app : apps) { for (ApplicationInfo app : apps) { if ((app.flags & (ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_SYSTEM)) > 0) { if(!app.packageName.equals("foundation.e.browser") && !app.packageName.equals("foundation.e.mail")) sSystemApps.add(app.uid); sSystemApps.add(app.uid); } } } } } } } @Override @Override public void run() { public void run() { Loading
app/src/main/java/foundation/e/trackerfilter/api/BlockTrackersPrivacyModule.java +13 −3 Original line number Original line Diff line number Diff line Loading @@ -18,14 +18,13 @@ package foundation.e.trackerfilter.api; package foundation.e.trackerfilter.api; import android.content.Context; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.preference.PreferenceManager; import android.preference.PreferenceManager; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import dnsfilter.android.DNSFilterService; import foundation.e.privacymodules.permissions.data.ApplicationDescription; import dnsfilter.android.R; import foundation.e.privacymodules.trackers.IBlockTrackersPrivacyModule; import foundation.e.privacymodules.trackers.IBlockTrackersPrivacyModule; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.trackerfilter.AppTrackerWhitelist; import foundation.e.trackerfilter.AppTrackerWhitelist; Loading Loading @@ -105,6 +104,17 @@ public class BlockTrackersPrivacyModule implements IBlockTrackersPrivacyModule { public void setWhiteListed(int i, boolean b) { public void setWhiteListed(int i, boolean b) { AppTrackerWhitelist.getInstance(mContext).setWhiteListed(i, b); AppTrackerWhitelist.getInstance(mContext).setWhiteListed(i, b); } } @Override public List<ApplicationDescription> getBlockableApps(){ List<ApplicationDescription> returnApps = new ArrayList<>(); for (ApplicationInfo applicationInfo: AppTrackerWhitelist.getInstance(mContext).getWhitelistableApps(false)){ ApplicationDescription description = new ApplicationDescription(applicationInfo.packageName, applicationInfo.uid,mContext.getPackageManager().getApplicationLabel(applicationInfo), mContext.getPackageManager().getApplicationIcon(applicationInfo)); returnApps.add(description); } return returnApps; } public static BlockTrackersPrivacyModule getInstance(Context ct){ public static BlockTrackersPrivacyModule getInstance(Context ct){ if(sBlockTrackersPrivacyModule == null){ if(sBlockTrackersPrivacyModule == null){ Loading