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

Commit e35b0e57 authored by William Xiao's avatar William Xiao Committed by Android (Google) Code Review
Browse files

Merge changes I518e12dd,I42027724 into main

* changes:
  Implement setting to restrict dream to wireless charging
  Clean up use_battery_changed_broadcast flag
parents 73b1354b 3fa7d763
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -339,6 +339,10 @@ message PowerServiceSettingsAndConfigurationDumpProto {
    optional sint32 attentive_timeout_config_ms = 38;
    // The attentive warning duration config value in milliseconds.
    optional sint32 attentive_warning_duration_config_ms = 39;
    // Whether dreams should be activated when device is postured (stationary and upright)
    optional bool are_dreams_activate_while_postured_setting = 40;
    // True if dreams should only be activated while wireless charging.
    optional bool are_dreams_activate_only_while_wireless_charging = 41;
}

message BatterySaverStateMachineProto {
+0 −1
Original line number Diff line number Diff line
@@ -256,7 +256,6 @@ java_library_static {
        "core_os_flags_lib",
        "connectivity_flags_lib",
        "device_config_service_flags_java",
        "dreams_flags_lib",
        "aconfig_new_storage_flags_lib",
        "powerstats_flags_lib",
        "MmdProperties",
+0 −11
Original line number Diff line number Diff line
aconfig_declarations {
    name: "dreams_flags",
    package: "com.android.server.dreams",
    container: "system",
    srcs: ["*.aconfig"],
}

java_aconfig_library {
    name: "dreams_flags_lib",
    aconfig_declarations: "dreams_flags",
}
+43 −22
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.service.dreams.Flags.allowDreamWhenPostured;
import static android.service.dreams.Flags.cleanupDreamSettingsOnUninstall;
import static android.service.dreams.Flags.dreamHandlesBeingObscured;
import static android.service.dreams.Flags.dreamsV2;

import static com.android.server.wm.ActivityInterceptorCallback.DREAM_MANAGER_ORDERED_ID;

@@ -140,6 +141,7 @@ public final class DreamManagerService extends SystemService {
    private final boolean mDreamsActivatedOnChargeByDefault;
    private final boolean mDreamsActivatedOnDockByDefault;
    private final boolean mDreamsActivatedOnPosturedByDefault;
    private final boolean mOnlyDreamOnWirelessChargingDefault;
    private final boolean mKeepDreamingWhenUnpluggingDefault;
    private final boolean mDreamsDisabledByAmbientModeSuppressionConfig;

@@ -153,8 +155,14 @@ public final class DreamManagerService extends SystemService {
    private SettingsObserver mSettingsObserver;
    private boolean mDreamsEnabledSetting;
    @WhenToDream private int mWhenToDream;

    /**
     * If true, the user has enabled the setting to only dream when charging wirelessly.
     */
    private boolean mOnlyDreamOnWirelessChargingSetting;
    private boolean mIsDocked;
    private boolean mIsCharging;
    private boolean mIsWirelessCharging;
    private boolean mIsPostured;

    // A temporary dream component that, when present, takes precedence over user configured dream
@@ -201,11 +209,9 @@ public final class DreamManagerService extends SystemService {
    private final BroadcastReceiver mChargingReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Flags.useBatteryChangedBroadcast()) {
            mIsCharging = mBatteryManagerInternal.isPowered(BatteryManager.BATTERY_PLUGGED_ANY);
            } else {
                mIsCharging = (BatteryManager.ACTION_CHARGING.equals(intent.getAction()));
            }
            mIsWirelessCharging = mBatteryManagerInternal.isPowered(
                    BatteryManager.BATTERY_PLUGGED_WIRELESS);
        }
    };

@@ -276,17 +282,15 @@ public final class DreamManagerService extends SystemService {
                com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
        mDreamsActivatedOnPosturedByDefault = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_dreamsActivatedOnPosturedByDefault);
        // TODO(b/407768891): use default config when added.
        mOnlyDreamOnWirelessChargingDefault = false;
        mSettingsObserver = new SettingsObserver(mHandler);
        mKeepDreamingWhenUnpluggingDefault = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_keepDreamingWhenUnplugging);
        mDreamsDisabledByAmbientModeSuppressionConfig = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig);

        if (Flags.useBatteryChangedBroadcast()) {
        mBatteryManagerInternal = getLocalService(BatteryManagerInternal.class);
        } else {
            mBatteryManagerInternal = null;
        }
    }

    @Override
@@ -317,13 +321,8 @@ public final class DreamManagerService extends SystemService {
                    mDockStateReceiver, new IntentFilter(Intent.ACTION_DOCK_EVENT));

            IntentFilter chargingIntentFilter = new IntentFilter();
            if (Flags.useBatteryChangedBroadcast()) {
            chargingIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
            chargingIntentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
            } else {
                chargingIntentFilter.addAction(BatteryManager.ACTION_CHARGING);
                chargingIntentFilter.addAction(BatteryManager.ACTION_DISCHARGING);
            }
            mContext.registerReceiver(mChargingReceiver, chargingIntentFilter);

            mSettingsObserver = new SettingsObserver(mHandler);
@@ -339,10 +338,15 @@ public final class DreamManagerService extends SystemService {
            mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
                            Settings.Secure.SCREENSAVER_ENABLED),
                    false, mSettingsObserver, UserHandle.USER_ALL);
            mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
                            Settings.Secure.SCREENSAVER_RESTRICT_TO_WIRELESS_CHARGING),
                    false, mSettingsObserver, UserHandle.USER_ALL);

            // We don't get an initial broadcast for the batter state, so we have to initialize
            // We don't get an initial broadcast for the battery state, so we have to initialize
            // directly from BatteryManager.
            mIsCharging = mContext.getSystemService(BatteryManager.class).isCharging();
            mIsCharging = mBatteryManagerInternal.isPowered(BatteryManager.BATTERY_PLUGGED_ANY);
            mIsWirelessCharging = mBatteryManagerInternal.isPowered(
                    BatteryManager.BATTERY_PLUGGED_WIRELESS);

            updateWhenToDreamSettings();
        }
@@ -403,6 +407,10 @@ public final class DreamManagerService extends SystemService {
            pw.println("mDreamsActivatedOnChargeByDefault=" + mDreamsActivatedOnChargeByDefault);
            pw.println("mDreamsActivatedOnPosturedByDefault="
                    + mDreamsActivatedOnPosturedByDefault);
            pw.println("mOnlyDreamOnWirelessChargingSetting="
                    + mOnlyDreamOnWirelessChargingSetting);
            pw.println("mOnlyDreamOnWirelessChargingDefault="
                    + mOnlyDreamOnWirelessChargingDefault);
            pw.println("mIsDocked=" + mIsDocked);
            pw.println("mIsCharging=" + mIsCharging);
            pw.println("mWhenToDream=" + mWhenToDream);
@@ -420,12 +428,16 @@ public final class DreamManagerService extends SystemService {
        synchronized (mLock) {
            final ContentResolver resolver = mContext.getContentResolver();

            mOnlyDreamOnWirelessChargingSetting = Settings.Secure.getIntForUser(resolver,
                    Settings.Secure.SCREENSAVER_RESTRICT_TO_WIRELESS_CHARGING,
                    mOnlyDreamOnWirelessChargingDefault ? 1 : 0, UserHandle.USER_CURRENT) != 0;

            mWhenToDream = DREAM_DISABLED;

            if ((Settings.Secure.getIntForUser(resolver,
            if (Settings.Secure.getIntForUser(resolver,
                    Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
                    mDreamsActivatedOnChargeByDefault ? 1 : 0,
                    UserHandle.USER_CURRENT) != 0)) {
                    UserHandle.USER_CURRENT) != 0) {
                mWhenToDream |= DREAM_ON_CHARGE;
            }

@@ -509,14 +521,23 @@ public final class DreamManagerService extends SystemService {

    private boolean dreamConditionActiveInternalLocked() {
        if ((mWhenToDream & DREAM_ON_CHARGE) == DREAM_ON_CHARGE) {
            if (dreamsV2() && mOnlyDreamOnWirelessChargingSetting) {
                return mIsWirelessCharging;
            } else {
                return mIsCharging;
            }
        }

        if ((mWhenToDream & DREAM_ON_DOCK) == DREAM_ON_DOCK) {
            // Don't check wireless charging on dock as wireless charging is mutually exclusive with
            // docking.
            return mIsDocked;
        }

        if ((mWhenToDream & DREAM_ON_POSTURED) == DREAM_ON_POSTURED) {
            if (dreamsV2() && mOnlyDreamOnWirelessChargingSetting && !mIsWirelessCharging) {
                return false;
            }
            return mIsPostured;
        }

+0 −12
Original line number Diff line number Diff line
package: "com.android.server.dreams"
container: "system"

flag {
    name: "use_battery_changed_broadcast"
    namespace: "communal"
    description: "Use ACTION_BATTERY_CHANGED broadcast to track charging state"
    bug: "329125239"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
 No newline at end of file
Loading