OSDN Git Service

Allow switchbars to have alternate text
authorJulia Reynolds <juliacr@google.com>
Thu, 21 Dec 2017 18:26:39 +0000 (13:26 -0500)
committerJulia Reynolds <juliacr@google.com>
Tue, 2 Jan 2018 20:34:58 +0000 (15:34 -0500)
For when On and Off aren't descriptive enough.

Bug: 63927402
Test: make -j20 RunSettingsRoboTests
Change-Id: I1e12d8d92dbe2f0a4c5202667cf1a76f0428e048

src/com/android/settings/widget/SwitchBar.java
tests/robotests/src/com/android/settings/widget/SwitchBarTest.java [new file with mode: 0644]

index 3d30638..3c1e7c1 100644 (file)
@@ -64,6 +64,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC
     private TextView mTextView;
     private String mLabel;
     private String mSummary;
+    private int mOnTextId;
+    private int mOffTextId;
 
     private boolean mLoggingIntialized;
     private boolean mDisabledByAdmin;
@@ -102,9 +104,7 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC
 
         mTextView = (TextView) findViewById(R.id.switch_text);
         mTextView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-        mLabel = getResources().getString(R.string.switch_off_text);
         mSummarySpan = new TextAppearanceSpan(mContext, R.style.TextAppearance_Small_SwitchBar);
-        updateText();
         ViewGroup.MarginLayoutParams lp = (MarginLayoutParams) mTextView.getLayoutParams();
         lp.setMarginStart(switchBarMarginStart);
 
@@ -117,6 +117,8 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC
         lp.setMarginEnd(switchBarMarginEnd);
         setBackgroundColor(switchBarBackgroundColor);
 
+        setSwitchBarText(R.string.switch_on_text, R.string.switch_off_text);
+
         addOnSwitchChangeListener(new OnSwitchChangeListener() {
             @Override
             public void onSwitchChanged(Switch switchView, boolean isChecked) {
@@ -139,11 +141,16 @@ public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedC
     }
 
     public void setTextViewLabel(boolean isChecked) {
-        mLabel = getResources()
-                .getString(isChecked ? R.string.switch_on_text : R.string.switch_off_text);
+        mLabel = getResources().getString(isChecked ? mOnTextId : mOffTextId);
         updateText();
     }
 
+    public void setSwitchBarText(int onText, int offText) {
+        mOnTextId = onText;
+        mOffTextId = offText;
+        setTextViewLabel(isChecked());
+    }
+
     public void setSummary(String summary) {
         mSummary = summary;
         updateText();
diff --git a/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java b/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java
new file mode 100644 (file)
index 0000000..c805761
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.widget;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.robolectric.RuntimeEnvironment.application;
+
+import android.content.Context;
+import android.widget.TextView;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SwitchBarTest {
+
+    private Context mContext;
+    private SwitchBar mBar;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        mBar = new SwitchBar(application, Robolectric.buildAttributeSet().build());
+    }
+
+    @Test
+    public void testDefaultLabels() {
+        int defaultOnText = R.string.switch_on_text;
+        int defaultOffText = R.string.switch_off_text;
+        assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText())
+                .isEqualTo(mContext.getString(defaultOffText));
+
+        mBar.setChecked(true);
+        assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText())
+                .isEqualTo(mContext.getString(defaultOnText));
+    }
+
+    @Test
+    public void testCustomLabels() {
+        int onText = R.string.master_clear_progress_text;
+        int offText = R.string.manage_space_text;
+        mBar.setSwitchBarText(onText, offText);
+        assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText())
+                .isEqualTo(mContext.getString(offText));
+
+        mBar.setChecked(true);
+        assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText())
+                .isEqualTo(mContext.getString(onText));
+    }
+}