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

Commit 7bfe7803 authored by Rashed Abdel-Tawab's avatar Rashed Abdel-Tawab Committed by Bruno Martins
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

Change-Id: Ide9622ea4c7be371b83ff7ae9a73ce5565423af1
parent b586ed08
Loading
Loading
Loading
Loading
+116 −14
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Secure;
@@ -40,6 +41,8 @@ import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.util.leak.LeakDetector;

import lineageos.providers.LineageSettings;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
@@ -140,32 +143,117 @@ public class TunerServiceImpl extends TunerService {
        setValue(TUNER_VERSION, newVersion);
    }

    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) {
@@ -183,13 +271,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 = Settings.Secure.getStringForUser(mContentResolver, key, mCurrentUser);
        String value = getValue(key);
        tunable.onTuningChanged(key, value);
    }

@@ -209,7 +309,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);
        }
    }

@@ -219,7 +321,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);
        }
@@ -227,8 +329,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);
            }
@@ -251,7 +352,7 @@ public class TunerServiceImpl extends TunerService {
            if (ArrayUtils.contains(RESET_BLACKLIST, key)) {
                continue;
            }
            Settings.Secure.putStringForUser(mContentResolver, key, null, user);
            setValue(key, null);
        }
    }

@@ -262,7 +363,8 @@ public class TunerServiceImpl extends TunerService {

        @Override
        public void onChange(boolean selfChange, Uri uri, int userId) {
            if (userId == ActivityManager.getCurrentUser()) {
            String key = mListeningUris.get(uri);
            if (userId == ActivityManager.getCurrentUser() || isLineageGlobal(key)) {
                reloadSetting(uri);
            }
        }