Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ceab6412 authored by Alexandre Roux's avatar Alexandre Roux
Browse files

getBlockableApps

parent ec6216b9
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -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 {
+52 −1
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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{
@@ -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);
@@ -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);
+1 −4
Original line number Original line Diff line number Diff line
@@ -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() {
+13 −3
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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){