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

Commit 28944cbd authored by Richard Ledley's avatar Richard Ledley
Browse files

Add flag to control blocking Smart Replies for apps targeting an Android version below P.

Bug: 73802997

Test: atest SmartReplyConstantsTest

Change-Id: Id340cba09da7931ff6a4689802b3a5f594852a72
parent 0f0d1ab1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -12210,6 +12210,7 @@ public final class Settings {
         *
         * <pre>
         * enabled                         (boolean)
         * requires_targeting_p            (boolean)
         * max_squeeze_remeasure_attempts  (int)
         * </pre>
         * @see com.android.systemui.statusbar.policy.SmartReplyConstants
+3 −0
Original line number Diff line number Diff line
@@ -479,6 +479,9 @@
    <!-- Smart replies in notifications: Whether smart replies in notifications are enabled. -->
    <bool name="config_smart_replies_in_notifications_enabled">true</bool>

    <!-- Smart replies in notifications: Whether we disable the feature unless the app targets P -->
    <bool name="config_smart_replies_in_notifications_requires_targeting_p">true</bool>

    <!-- Smart replies in notifications: Maximum number of times SmartReplyView will try to find a
         better (narrower) line-break for a double-line smart reply button. -->
    <integer name="config_smart_replies_in_notifications_max_squeeze_remeasure_attempts">3</integer>
+3 −1
Original line number Diff line number Diff line
@@ -1196,7 +1196,9 @@ public class NotificationContentView extends FrameLayout {
            return;
        }

        boolean enableSmartReplies = mSmartReplyConstants.isEnabled();
        boolean enableSmartReplies = (mSmartReplyConstants.isEnabled()
                && (!mSmartReplyConstants.requiresTargetingP()
                    || entry.targetSdk >= Build.VERSION_CODES.P));

        boolean hasRemoteInput = false;
        RemoteInput remoteInputWithChoices = null;
+14 −0
Original line number Diff line number Diff line
@@ -33,13 +33,16 @@ public final class SmartReplyConstants extends ContentObserver {
    private static final String TAG = "SmartReplyConstants";

    private static final String KEY_ENABLED = "enabled";
    private static final String KEY_REQUIRES_TARGETING_P = "requires_targeting_p";
    private static final String KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS =
            "max_squeeze_remeasure_attempts";

    private final boolean mDefaultEnabled;
    private final boolean mDefaultRequiresP;
    private final int mDefaultMaxSqueezeRemeasureAttempts;

    private boolean mEnabled;
    private boolean mRequiresTargetingP;
    private int mMaxSqueezeRemeasureAttempts;

    private final Context mContext;
@@ -52,6 +55,8 @@ public final class SmartReplyConstants extends ContentObserver {
        final Resources resources = mContext.getResources();
        mDefaultEnabled = resources.getBoolean(
                R.bool.config_smart_replies_in_notifications_enabled);
        mDefaultRequiresP = resources.getBoolean(
                R.bool.config_smart_replies_in_notifications_requires_targeting_p);
        mDefaultMaxSqueezeRemeasureAttempts = resources.getInteger(
                R.integer.config_smart_replies_in_notifications_max_squeeze_remeasure_attempts);

@@ -75,6 +80,7 @@ public final class SmartReplyConstants extends ContentObserver {
                Log.e(TAG, "Bad smart reply constants", e);
            }
            mEnabled = mParser.getBoolean(KEY_ENABLED, mDefaultEnabled);
            mRequiresTargetingP = mParser.getBoolean(KEY_REQUIRES_TARGETING_P, mDefaultRequiresP);
            mMaxSqueezeRemeasureAttempts = mParser.getInt(
                    KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS, mDefaultMaxSqueezeRemeasureAttempts);
        }
@@ -85,6 +91,14 @@ public final class SmartReplyConstants extends ContentObserver {
        return mEnabled;
    }

    /**
     * Returns whether smart replies in notifications should be disabled when the app targets a
     * version of Android older than P.
     */
    public boolean requiresTargetingP() {
        return mRequiresTargetingP;
    }

    /**
     * Returns the maximum number of times {@link SmartReplyView#onMeasure(int, int)} will try to
     * find a better (narrower) line-break for a double-line smart reply button.
+11 −0
Original line number Diff line number Diff line
@@ -73,6 +73,17 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
        assertFalse(mConstants.isEnabled());
    }

    @Test
    public void testRequiresTargetingPConfig() {
        overrideSetting("enabled=true,requires_targeting_p=false");
        triggerConstantsOnChange();
        assertEquals(false, mConstants.requiresTargetingP());

        overrideSetting("enabled=true");
        triggerConstantsOnChange();
        assertEquals(true, mConstants.requiresTargetingP());
    }

    @Test
    public void testGetMaxSqueezeRemeasureAttemptsWithNoConfig() {
        assertTrue(mConstants.isEnabled());