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

Commit 98ebebdf authored by Rashed Abdel-Tawab's avatar Rashed Abdel-Tawab Committed by Timi Rautamäki
Browse files

SystemUI: Allow using tuner API for LineageSettings

Rebrand to Lineage and add support for custom string settings.
Based on a squash of the following changes:

Author: Steve Kondik <steve@cyngn.com>
Date:   Tue Sep 13 23:46:34 2016 -0700

    systemui: Allow using tuner API for CMSettings

     * Use the prefix "cm:" on the key supplied and it will redirect
       to CMSettings.

    Change-Id: Id4266a568deb8fb32857136990711b5d9d487721

Author: Zhao Wei Liew <zhaoweiliew@gmail.com>
Date:   Thu Oct 13 19:19:03 2016 +0800

    SystemUI: tuner: Allow Tuner API for System settings

    We'd like to modify some AOSP System settings as well.

    Change-Id: I4e2e7bf680f20bce9619ff2adf243d0f8f4a9906

Author: Bruno Martins <bgcngm@gmail.com>
Date:   Mon Sep 17 11:49:27 2018 +0100

    TunerServiceImpl: Add support for Lineage global settings

    Change-Id: I7f3a2e024286f2d7c49e173a7a0bb9a2f486c5d9

Author: Wang Han <416810799@qq.com>
Date:   Thu, 21 May 2020 20:07:32 +0800
    TunerServiceImpl: Prevent Lineage keys from tuner reset

    * This way, we don't need to update tuner blacklist.

    Change-Id: I8d8b356b4a8699483c158610e82f67c0fba652e1

Change-Id: Ide9622ea4c7be371b83ff7ae9a73ce5565423af1
parent 74595039
Loading
Loading
Loading
Loading
+122 −17
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.net.Uri;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.Looper;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Secure;
@@ -46,6 +47,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.util.leak.LeakDetector;

import lineageos.providers.LineageSettings;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -160,32 +163,121 @@ public class TunerServiceImpl extends TunerService {
        setValue(TUNER_VERSION, newVersion);
    }

    private boolean isLineageSetting(String key) {
        return isLineageGlobal(key) || isLineageSystem(key) || isLineageSecure(key);
    }

    private boolean isLineageGlobal(String key) {
        return key.startsWith("lineageglobal:");
    }

    private boolean isLineageSystem(String key) {
        return key.startsWith("lineagesystem:");
    }

    private boolean isLineageSecure(String key) {
        return key.startsWith("lineagesecure:");
    }

    private boolean isSystem(String key) {
        return key.startsWith("system:");
    }

    private String chomp(String key) {
        return key.replaceFirst("^(lineageglobal|lineagesecure|lineagesystem|system):", "");
    }

    @Override
    public String getValue(String setting) {
        if (isLineageGlobal(setting)) {
            return LineageSettings.Global.getString(mContentResolver, chomp(setting));
        } else if (isLineageSecure(setting)) {
            return LineageSettings.Secure.getStringForUser(
                    mContentResolver, chomp(setting), mCurrentUser);
        } else if (isLineageSystem(setting)) {
            return LineageSettings.System.getStringForUser(
                    mContentResolver, chomp(setting), mCurrentUser);
        } else if (isSystem(setting)) {
            return Settings.System.getStringForUser(
                    mContentResolver, chomp(setting), mCurrentUser);
        } else {
            return Settings.Secure.getStringForUser(mContentResolver, setting, mCurrentUser);
        }
    }

    @Override
    public void setValue(String setting, String value) {
        if (isLineageGlobal(setting)) {
            LineageSettings.Global.putString(mContentResolver, chomp(setting), value);
        } else if (isLineageSecure(setting)) {
            LineageSettings.Secure.putStringForUser(
                    mContentResolver, chomp(setting), value, mCurrentUser);
        } else if (isLineageSystem(setting)) {
            LineageSettings.System.putStringForUser(
                    mContentResolver, chomp(setting), value, mCurrentUser);
        } else if (isSystem(setting)) {
            Settings.System.putStringForUser(
                    mContentResolver, chomp(setting), value, mCurrentUser);
        } else {
            Settings.Secure.putStringForUser(mContentResolver, setting, value, mCurrentUser);
        }
    }

    @Override
    public int getValue(String setting, int def) {
        if (isLineageGlobal(setting)) {
            return LineageSettings.Global.getInt(mContentResolver, chomp(setting), def);
        } else if (isLineageSecure(setting)) {
            return LineageSettings.Secure.getIntForUser(
                    mContentResolver, chomp(setting), def, mCurrentUser);
        } else if (isLineageSystem(setting)) {
            return LineageSettings.System.getIntForUser(
                    mContentResolver, chomp(setting), def, mCurrentUser);
        } else if (isSystem(setting)) {
            return Settings.System.getIntForUser(
                    mContentResolver, chomp(setting), def, mCurrentUser);
        } else {
            return Settings.Secure.getIntForUser(mContentResolver, setting, def, mCurrentUser);
        }
    }

    @Override
    public String getValue(String setting, String def) {
        String ret = Secure.getStringForUser(mContentResolver, setting, mCurrentUser);
        String ret;
        if (isLineageGlobal(setting)) {
            ret = LineageSettings.Global.getString(mContentResolver, chomp(setting));
        } else if (isLineageSecure(setting)) {
            ret = LineageSettings.Secure.getStringForUser(
                    mContentResolver, chomp(setting), mCurrentUser);
        } else if (isLineageSystem(setting)) {
            ret = LineageSettings.System.getStringForUser(
                    mContentResolver, chomp(setting), mCurrentUser);
        } else if (isSystem(setting)) {
            ret = Settings.System.getStringForUser(
                    mContentResolver, chomp(setting), mCurrentUser);
        } else {
            ret = Secure.getStringForUser(mContentResolver, setting, mCurrentUser);
        }
        if (ret == null) return def;
        return ret;
    }

    @Override
    public void setValue(String setting, int value) {
        if (isLineageGlobal(setting)) {
            LineageSettings.Global.putInt(mContentResolver, chomp(setting), value);
        } else if (isLineageSecure(setting)) {
            LineageSettings.Secure.putIntForUser(
                    mContentResolver, chomp(setting), value, mCurrentUser);
        } else if (isLineageSystem(setting)) {
            LineageSettings.System.putIntForUser(
                    mContentResolver, chomp(setting), value, mCurrentUser);
        } else if (isSystem(setting)) {
            Settings.System.putIntForUser(mContentResolver, chomp(setting), value, mCurrentUser);
        } else {
            Settings.Secure.putIntForUser(mContentResolver, setting, value, mCurrentUser);
        }
    }

    @Override
    public void addTunable(Tunable tunable, String... keys) {
@@ -203,14 +295,25 @@ public class TunerServiceImpl extends TunerService {
            mTunables.add(tunable);
            mLeakDetector.trackCollection(mTunables, "TunerService.mTunables");
        }
        Uri uri = Settings.Secure.getUriFor(key);
        final Uri uri;
        if (isLineageGlobal(key)) {
            uri = LineageSettings.Global.getUriFor(chomp(key));
        } else if (isLineageSecure(key)) {
            uri = LineageSettings.Secure.getUriFor(chomp(key));
        } else if (isLineageSystem(key)) {
            uri = LineageSettings.System.getUriFor(chomp(key));
        } else if (isSystem(key)) {
            uri = Settings.System.getUriFor(chomp(key));
        } else {
            uri = Settings.Secure.getUriFor(key);
        }
        if (!mListeningUris.containsKey(uri)) {
            mListeningUris.put(uri, key);
            mContentResolver.registerContentObserver(uri, false, mObserver, mCurrentUser);
            mContentResolver.registerContentObserver(uri, false, mObserver,
                    isLineageGlobal(key) ? UserHandle.USER_ALL : mCurrentUser);
        }
        // Send the first state.
        String value = DejankUtils.whitelistIpcs(() -> Settings.Secure
                .getStringForUser(mContentResolver, key, mCurrentUser));
        String value = DejankUtils.whitelistIpcs(() -> getValue(key));
        tunable.onTuningChanged(key, value);
    }

@@ -230,7 +333,9 @@ public class TunerServiceImpl extends TunerService {
        }
        mContentResolver.unregisterContentObserver(mObserver);
        for (Uri uri : mListeningUris.keySet()) {
            mContentResolver.registerContentObserver(uri, false, mObserver, mCurrentUser);
            String key = mListeningUris.get(uri);
            mContentResolver.registerContentObserver(uri, false, mObserver,
                    isLineageGlobal(key) ? UserHandle.USER_ALL : mCurrentUser);
        }
    }

@@ -240,7 +345,7 @@ public class TunerServiceImpl extends TunerService {
        if (tunables == null) {
            return;
        }
        String value = Settings.Secure.getStringForUser(mContentResolver, key, mCurrentUser);
        String value = getValue(key);
        for (Tunable tunable : tunables) {
            tunable.onTuningChanged(key, value);
        }
@@ -248,8 +353,7 @@ public class TunerServiceImpl extends TunerService {

    private void reloadAll() {
        for (String key : mTunableLookup.keySet()) {
            String value = Settings.Secure.getStringForUser(mContentResolver, key,
                    mCurrentUser);
            String value = getValue(key);
            for (Tunable tunable : mTunableLookup.get(key)) {
                tunable.onTuningChanged(key, value);
            }
@@ -268,10 +372,10 @@ public class TunerServiceImpl extends TunerService {

        // A couple special cases.
        for (String key : mTunableLookup.keySet()) {
            if (ArrayUtils.contains(RESET_EXCEPTION_LIST, key)) {
            if (ArrayUtils.contains(RESET_EXCEPTION_LIST, key) || isLineageSetting(key)) {
                continue;
            }
            Settings.Secure.putStringForUser(mContentResolver, key, null, user);
            setValue(key, null);
        }
    }

@@ -323,8 +427,9 @@ public class TunerServiceImpl extends TunerService {
        @Override
        public void onChange(boolean selfChange, java.util.Collection<Uri> uris,
                int flags, int userId) {
            if (userId == mUserTracker.getUserId()) {
            for (Uri u : uris) {
                String key = mListeningUris.get(u);
                if (userId == mUserTracker.getUserId() || isLineageGlobal(key)) {
                    reloadSetting(u);
                }
            }