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

Commit e385b0c2 authored by Oliver Scott's avatar Oliver Scott Committed by Michael Bestas
Browse files

Enable Restricted Networking Mode and allowlist INTERNET apps by default

* Handles fresh installs and upgrade scenarios
* Replaces network isolation feature

Change-Id: Ia35ba7cdc07ed9f49c09e2dd5275bfc233d9efe2
parent 3c27619f
Loading
Loading
Loading
Loading
+43 −2
Original line number Diff line number Diff line
@@ -17,8 +17,12 @@

package org.lineageos.lineagesettings;

import android.Manifest;
import android.app.AppGlobals;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -26,9 +30,13 @@ import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDoneException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.net.ConnectivitySettingsManager;
import android.os.Environment;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -38,6 +46,10 @@ import lineageos.providers.LineageSettings;
import org.lineageos.internal.util.FileUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * The LineageDatabaseHelper allows creation of a database to store Lineage specific settings for a user
@@ -48,7 +60,7 @@ public class LineageDatabaseHelper extends SQLiteOpenHelper{
    private static final boolean LOCAL_LOGV = false;

    private static final String DATABASE_NAME = "lineagesettings.db";
    private static final int DATABASE_VERSION = 14;
    private static final int DATABASE_VERSION = 15;

    private static final String DATABASE_NAME_OLD = "cmsettings.db";

@@ -389,6 +401,13 @@ public class LineageDatabaseHelper extends SQLiteOpenHelper{
            }
            upgradeVersion = 14;
        }

        if (upgradeVersion < 15) {
            if (mUserHandle == UserHandle.USER_OWNER) {
                loadRestrictedNetworkingModeSetting();
            }
            upgradeVersion = 15;
        }
        // *** Remember to update DATABASE_VERSION above!
    }

@@ -527,12 +546,34 @@ public class LineageDatabaseHelper extends SQLiteOpenHelper{
            stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
                    + " VALUES(?,?);");
            // Global
            // this is a placeholder
            loadRestrictedNetworkingModeSetting();
        } finally {
            if (stmt != null) stmt.close();
        }
    }

    private void loadRestrictedNetworkingModeSetting() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.RESTRICTED_NETWORKING_MODE, 1);
        try {
            List<PackageInfo> packages = new ArrayList<>();
            for (UserInfo userInfo : UserManager.get(mContext).getAliveUsers()) {
                packages.addAll(
                        AppGlobals.getPackageManager().getPackagesHoldingPermissions(
                                new String[]{Manifest.permission.INTERNET},
                                PackageManager.MATCH_UNINSTALLED_PACKAGES,
                                userInfo.id
                        ).getList());
            }
            Set<Integer> uids = packages.stream().map(
                    packageInfo -> packageInfo.applicationInfo.uid)
                    .collect(Collectors.toSet());
            ConnectivitySettingsManager.setUidsAllowedOnRestrictedNetworks(mContext, uids);
        } catch (RemoteException e) {
            Log.e(TAG, "Failed to set uids allowed on restricted networks");
        }
    }

    /**
     * Loads a region locked string setting into a database table. If the resource for the specific
     * mcc is not found, the setting is loaded from the default resources.