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

Commit 973e858a authored by Roman Birg's avatar Roman Birg
Browse files

Return of Silent mode (1/2)



- Adds ability to replace "None" with "Silent" in the Volume panel

- Right now, it will behave exactly the same as "None",
except allow alarms to go through

Change-Id: Icee44a7114e9529d139c52e5e37e3ec747cec336
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent effc8834
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -3501,6 +3501,13 @@ public final class Settings {
         */
        public static final String LIVE_DISPLAY_HINTED = "live_display_hinted";

        /**
         * Whether "None" mode will act as "Silent"
         * Effectively allowing alarms to always use the alarm stream volume when true.
         * @hide
         */
        public static final String NONE_IS_SILENT = "none_is_silent";

        /**
         * Settings to backup. This is here so that it's in the same place as the settings
         * keys and easy to update.
+6 −0
Original line number Diff line number Diff line
@@ -119,4 +119,10 @@

    <!-- Screen pinning dialog description (for devices without navbar) -->
    <string name="screen_pinning_description_no_navbar">This keeps it in view until you unpin. Touch and hold the Back button to unpin.</string>

    <!-- Interruption level: None. [CHAR LIMIT=20] -->
    <string name="interruption_level_silent">Silent</string>

    <!-- Zen mode: No interruptions title, with a warning about alarms. [CHAR LIMIT=60] -->
    <string name="zen_silent_with_warning">No interruptions, except alarms.</string>
</resources>
+15 −2
Original line number Diff line number Diff line
@@ -66,7 +66,12 @@ public class SegmentedButtons extends LinearLayout {
        fireOnSelected();
    }

    public void addButton(int labelResId, int iconResId, Object value) {
    public void addButton(int labelResId, int iconResId, Object value, int index) {
        View viewAtIndex = getChildAt(index);
        if (viewAtIndex != null) {
            removeView(viewAtIndex);
        }

        final Button b = (Button) mInflater.inflate(R.layout.segmented_button, this, false);
        b.setTag(LABEL_RES_KEY, labelResId);
        b.setText(labelResId);
@@ -76,7 +81,11 @@ public class SegmentedButtons extends LinearLayout {
            lp.leftMargin = lp.rightMargin = 0; // first button has no margin
        }
        b.setLayoutParams(lp);
        if (index < 0) {
            addView(b);
        } else {
            addView(b, index);
        }
        b.setTag(value);
        b.setOnClickListener(mClick);
        Interaction.register(b, new Interaction.Callback() {
@@ -87,6 +96,10 @@ public class SegmentedButtons extends LinearLayout {
        });
    }

    public void addButton(int labelResId, int iconResId, Object value) {
        addButton(labelResId, iconResId, value, -1);
    }

    public void updateLocale() {
        for (int i = 0; i < getChildCount(); i++) {
            final Button b = (Button) getChildAt(i);
+22 −4
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.service.notification.Condition;
@@ -115,6 +116,7 @@ public class ZenModePanel extends LinearLayout {
    private Condition mSessionExitCondition;
    private Condition[] mConditions;
    private Condition mTimeCondition;
    private boolean mNoneIsSilent;

    public ZenModePanel(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -149,6 +151,7 @@ public class ZenModePanel extends LinearLayout {
        pw.print("  mExpanded="); pw.println(mExpanded);
        pw.print("  mSessionZen="); pw.println(mSessionZen);
        pw.print("  mAttachedZen="); pw.println(mAttachedZen);
        pw.print("  mNoneIsSilent="); pw.println(mNoneIsSilent);
        mTransitionHelper.dump(fd, pw, args);
    }

@@ -157,8 +160,7 @@ public class ZenModePanel extends LinearLayout {
        super.onFinishInflate();

        mZenButtons = (SegmentedButtons) findViewById(R.id.zen_buttons);
        mZenButtons.addButton(R.string.interruption_level_none, R.drawable.ic_zen_none,
                Global.ZEN_MODE_NO_INTERRUPTIONS);
        addNoneOrSilentButton();
        mZenButtons.addButton(R.string.interruption_level_priority, R.drawable.ic_zen_important,
                Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
        mZenButtons.addButton(R.string.interruption_level_all, R.drawable.ic_zen_all,
@@ -211,6 +213,15 @@ public class ZenModePanel extends LinearLayout {
        return transition;
    }

    private void addNoneOrSilentButton() {
        if (mZenButtons != null) {
            mZenButtons.addButton(mNoneIsSilent ? R.string.interruption_level_silent
                            : R.string.interruption_level_none,
                    R.drawable.ic_zen_none,
                    Global.ZEN_MODE_NO_INTERRUPTIONS, 0);
        }
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
@@ -403,6 +414,12 @@ public class ZenModePanel extends LinearLayout {
        final boolean zenImportant = zen == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
        final boolean zenNone = zen == Global.ZEN_MODE_NO_INTERRUPTIONS;
        final boolean expanded = !mHidden && mExpanded;
        final boolean noneIsSilent =  Settings.System.getIntForUser(mContext.getContentResolver(),
                Settings.System.NONE_IS_SILENT, 0, UserHandle.USER_CURRENT) == 1;
        if (noneIsSilent != mNoneIsSilent) {
            mNoneIsSilent = noneIsSilent;
            addNoneOrSilentButton();
        }

        mZenButtons.setVisibility(mHidden ? GONE : VISIBLE);
        mZenSubhead.setVisibility(!mHidden && !zenOff ? VISIBLE : GONE);
@@ -412,7 +429,8 @@ public class ZenModePanel extends LinearLayout {
        mZenConditions.setVisibility(!zenOff && expanded ? VISIBLE : GONE);

        if (zenNone) {
            mZenSubheadExpanded.setText(R.string.zen_no_interruptions_with_warning);
            mZenSubheadExpanded.setText(mNoneIsSilent ? R.string.zen_silent_with_warning
                    : R.string.zen_no_interruptions_with_warning);
            mZenSubheadCollapsed.setText(mExitConditionText);
        } else if (zenImportant) {
            mZenSubheadExpanded.setText(R.string.zen_important_interruptions);
@@ -848,7 +866,7 @@ public class ZenModePanel extends LinearLayout {
        }

        public boolean isNoneDangerous() {
            return mNoneSelected < mNoneDangerousThreshold;
            return mNoneSelected < mNoneDangerousThreshold && !mNoneIsSilent;
        }

        public void trackNoneSelected() {
+3 −1
Original line number Diff line number Diff line
@@ -1054,6 +1054,7 @@ public class NotificationManagerService extends SystemService {
            mDisableNotificationEffects = true;
        }
        mZenModeHelper.readZenModeFromSetting();
        mZenModeHelper.readSilentModeFromSetting();
        mInterruptionFilter = mZenModeHelper.getZenModeListenerInterruptionFilter();

        mUserProfiles.updateCache(getContext());
@@ -1725,7 +1726,8 @@ public class NotificationManagerService extends SystemService {
        if (mDisableNotificationEffects) {
            return "booleanState";
        }
        if ((mListenerHints & HINT_HOST_DISABLE_EFFECTS) != 0) {
        if ((mListenerHints & HINT_HOST_DISABLE_EFFECTS) != 0
                && !mZenModeHelper.getIsNoneSilent()) {
            return "listenerHints";
        }
        if (mCallState != TelephonyManager.CALL_STATE_IDLE && !mZenModeHelper.isCall(record)) {
Loading