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

Commit a5b9d663 authored by Jernej Virag's avatar Jernej Virag
Browse files

Move several content observer registrations to background

Moves several content observer registrations to background using new
async APIs to prevent content observer jank.

Bug: 327558308
Flag: com.android.systemui.register_content_observers_async
Test: built, unit tested, checked panther
Change-Id: I748b645b57480442664fba0a7d1e366d5c30c233
parent 1d1a9c34
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.internal.R;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLoggerImpl;
import com.android.systemui.Flags;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.statusbar.phone.DozeParameters;
@@ -426,7 +427,11 @@ public class DozeSensors {
        }

        if (!anyListening) {
            if (Flags.registerContentObserversAsync()) {
                mSecureSettings.unregisterContentObserverAsync(mSettingsObserver);
            } else {
                mSecureSettings.unregisterContentObserverSync(mSettingsObserver);
            }
        } else if (!mSettingRegistered) {
            for (TriggerSensor s : mTriggerSensors) {
                s.registerSettingsObserver(mSettingsObserver);
@@ -750,10 +755,15 @@ public class DozeSensors {

        public void registerSettingsObserver(ContentObserver settingsObserver) {
            if (mConfigured && !TextUtils.isEmpty(mSetting)) {
                if (Flags.registerContentObserversAsync()) {
                    mSecureSettings.registerContentObserverForUserAsync(
                            mSetting, mSettingsObserver, UserHandle.USER_ALL);
                } else {
                    mSecureSettings.registerContentObserverForUserSync(
                            mSetting, mSettingsObserver, UserHandle.USER_ALL);
                }
            }
        }

        protected String triggerEventToString(TriggerEvent event) {
            if (event == null) return null;
+14 −4
Original line number Diff line number Diff line
@@ -137,14 +137,24 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
        public void startObserving() {
            if (!mObserving) {
                mObserving = true;
                if (Flags.registerContentObserversAsync()) {
                    mSecureSettings.registerContentObserverForUserAsync(
                            BRIGHTNESS_MODE_URI,
                            false, this, UserHandle.USER_ALL);
                } else {
                    mSecureSettings.registerContentObserverForUserSync(
                            BRIGHTNESS_MODE_URI,
                            false, this, UserHandle.USER_ALL);
                }
            }
        }

        public void stopObserving() {
            if (Flags.registerContentObserversAsync()) {
                mSecureSettings.unregisterContentObserverAsync(this);
            } else {
                mSecureSettings.unregisterContentObserverSync(this);
            }
            mObserving = false;
        }

+7 −1
Original line number Diff line number Diff line
@@ -16,12 +16,12 @@
package com.android.systemui.util.settings

import android.annotation.UserIdInt
import android.annotation.WorkerThread
import android.content.ContentResolver
import android.database.ContentObserver
import android.net.Uri
import android.os.UserHandle
import android.provider.Settings.SettingNotFoundException
import androidx.annotation.WorkerThread
import com.android.app.tracing.TraceUtils.trace
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.settings.SettingsProxy.Companion.parseFloat
@@ -67,6 +67,7 @@ interface UserSettingsProxy : SettingsProxy {
        } else userTracker.userId
    }

    @WorkerThread
    override fun registerContentObserverSync(uri: Uri, settingsObserver: ContentObserver) {
        registerContentObserverForUserSync(uri, settingsObserver, userId)
    }
@@ -83,6 +84,7 @@ interface UserSettingsProxy : SettingsProxy {
        }

    /** Convenience wrapper around [ContentResolver.registerContentObserver].' */
    @WorkerThread
    override fun registerContentObserverSync(
        uri: Uri,
        notifyForDescendants: Boolean,
@@ -120,6 +122,7 @@ interface UserSettingsProxy : SettingsProxy {
     *
     * Implicitly calls [getUriFor] on the passed in name.
     */
    @WorkerThread
    fun registerContentObserverForUserSync(
        name: String,
        settingsObserver: ContentObserver,
@@ -160,6 +163,7 @@ interface UserSettingsProxy : SettingsProxy {
        }

    /** Convenience wrapper around [ContentResolver.registerContentObserver] */
    @WorkerThread
    fun registerContentObserverForUserSync(
        uri: Uri,
        settingsObserver: ContentObserver,
@@ -222,6 +226,7 @@ interface UserSettingsProxy : SettingsProxy {
     *
     * Implicitly calls [getUriFor] on the passed in name.
     */
    @WorkerThread
    fun registerContentObserverForUserSync(
        name: String,
        notifyForDescendants: Boolean,
@@ -281,6 +286,7 @@ interface UserSettingsProxy : SettingsProxy {
    }

    /** Convenience wrapper around [ContentResolver.registerContentObserver] */
    @WorkerThread
    fun registerContentObserverForUserSync(
        uri: Uri,
        notifyForDescendants: Boolean,