summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJian Jin <jinjian@google.com>2020-10-13 16:03:08 -0700
committerJian Jin <jinjian@google.com>2020-10-20 10:27:28 -0700
commitd320bd0bdedd928f25afe7ddd4318006a155c96a (patch)
tree9ab6b80ba636cb9579edfee4dada5952ccb43d5e
parent9983a290a9711daeadb30109c2386cf908b7388b (diff)
downloadsetupwizard-d320bd0bdedd928f25afe7ddd4318006a155c96a.tar.gz
DO NOT MERGE - Support RTL in Toolbar
FR: http://b/169277517 Bug: 169277517,170675319 Test: CarSetupWizardLibRoboTests Change-Id: I7f31cb76b5165a44fd0d2593c2f4f9ab5eeac26f (cherry picked from commit 04ea5697503248165dd3fa1029c07602386f9b06)
-rw-r--r--library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java23
-rw-r--r--library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java3
-rw-r--r--library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java4
-rw-r--r--library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java13
-rw-r--r--library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java25
-rw-r--r--library/main/tests/robotests/src/com/android/car/setupwizardlib/shadows/ShadowConfiguration.java51
6 files changed, 110 insertions, 9 deletions
diff --git a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
index 526a5ca..e36980c 100644
--- a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
+++ b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
@@ -60,6 +60,8 @@ import java.util.Objects;
class CarSetupWizardBaseLayout extends LinearLayout {
private static final String TAG = CarSetupWizardBaseLayout.class.getSimpleName();
private static final int INVALID_COLOR = 0;
+ // For mirroring an image
+ private static final float IMAGE_MIRROR_ROTATION = 180.0f;
private View mBackButton;
private View mTitleBar;
@@ -164,15 +166,22 @@ class CarSetupWizardBaseLayout extends LinearLayout {
}
LayoutInflater inflater = LayoutInflater.from(getContext());
- inflater.inflate(R.layout.car_setup_wizard_layout, this);
+ View view = inflater.inflate(R.layout.car_setup_wizard_layout, this);
+ // The layout will not be mirrored in RTL
+ view.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
- // Set the back button visibility based on the custom attribute.
setBackButton(findViewById(R.id.back_button));
Drawable drawable = mPartnerConfigHelper.getDrawable(
getContext(), PartnerConfig.CONFIG_TOOLBAR_BUTTON_ICON_BACK);
if (drawable != null) {
((ImageView) mBackButton).setImageDrawable(drawable);
}
+
+ if (shouldMirrorNavIcons()) {
+ Log.v(TAG, "Mirroring navigation icons");
+ mBackButton.setRotation(IMAGE_MIRROR_ROTATION);
+ }
+
setBackButtonVisible(showBackButton);
// Se the title bar.
@@ -520,7 +529,6 @@ class CarSetupWizardBaseLayout extends LinearLayout {
return;
}
int direction = TextUtils.getLayoutDirectionFromLocale(locale);
- setLayoutDirection(direction);
mToolbarTitle.setTextLocale(locale);
mToolbarTitle.setLayoutDirection(direction);
@@ -625,6 +633,15 @@ class CarSetupWizardBaseLayout extends LinearLayout {
}
}
+ @VisibleForTesting
+ boolean shouldMirrorNavIcons() {
+ return getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
+ && mPartnerConfigHelper.getBoolean(
+ getContext(),
+ PartnerConfig.CONFIG_TOOLBAR_NAV_ICON_MIRRORING_IN_RTL,
+ true);
+ }
+
/** Sets button type face with partner overlay if exists */
private void setButtonTypeFace(TextView button) {
String fontFamily = mPartnerConfigHelper.getString(
diff --git a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java
index 00c0ea3..27ea753 100644
--- a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java
+++ b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java
@@ -28,6 +28,9 @@ public enum PartnerConfig {
CONFIG_TOOLBAR_BUTTON_ICON_BACK(
PartnerConfigKey.KEY_TOOLBAR_BUTTON_ICON_BACK, ResourceType.DRAWABLE),
+ CONFIG_TOOLBAR_NAV_ICON_MIRRORING_IN_RTL(
+ PartnerConfigKey.KEY_TOOLBAR_NAV_BUTTON_MIRRORING_IN_RTL, ResourceType.BOOLEAN),
+
CONFIG_TOOLBAR_BUTTON_FONT_FAMILY(
PartnerConfigKey.KEY_TOOLBAR_BUTTON_FONT_FAMILY, ResourceType.STRING),
diff --git a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java
index 32caceb..8556fa7 100644
--- a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java
+++ b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java
@@ -26,6 +26,7 @@ import java.lang.annotation.RetentionPolicy;
PartnerConfigKey.KEY_IMMERSIVE_MODE,
PartnerConfigKey.KEY_TOOLBAR_BG_COLOR,
PartnerConfigKey.KEY_TOOLBAR_BUTTON_ICON_BACK,
+ PartnerConfigKey.KEY_TOOLBAR_NAV_BUTTON_MIRRORING_IN_RTL,
PartnerConfigKey.KEY_TOOLBAR_BUTTON_FONT_FAMILY,
PartnerConfigKey.KEY_TOOLBAR_BUTTON_PADDING_HORIZONTAL,
PartnerConfigKey.KEY_TOOLBAR_BUTTON_PADDING_VERTICAL,
@@ -54,6 +55,9 @@ public @interface PartnerConfigKey {
String KEY_TOOLBAR_BUTTON_ICON_BACK = "suw_compat_toolbar_button_icon_back";
+ String KEY_TOOLBAR_NAV_BUTTON_MIRRORING_IN_RTL =
+ "suw_compat_toolbar_nav_button_mirroring_in_rtl";
+
String KEY_TOOLBAR_BUTTON_FONT_FAMILY = "suw_compat_toolbar_button_font_family";
String KEY_TOOLBAR_BUTTON_TEXT_SIZE = "suw_compat_toolbar_button_text_size";
diff --git a/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java b/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java
index ee6c8db..0cb667b 100644
--- a/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java
+++ b/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java
@@ -108,14 +108,14 @@ public class CarDrivingStateMonitor implements
* Starts the monitor listening to driving state changes.
*/
public synchronized void startMonitor() {
- if (isVerboseLoggable()) {
- Log.v(TAG, "Starting monitor");
- }
mMonitorStartedCount++;
if (mMonitorStartedCount == 0) {
+ Log.w(TAG, "MonitorStartedCount was negative");
return;
}
mHandler.removeCallbacks(mDisconnectRunnable);
+ Log.i(TAG, String.format(
+ "Starting monitor, MonitorStartedCount = %d", mMonitorStartedCount));
if (mCar != null) {
if (mCar.isConnected()) {
try {
@@ -189,12 +189,13 @@ public class CarDrivingStateMonitor implements
}
private void disconnectCarMonitor() {
- if (isVerboseLoggable()) {
- Log.v(TAG, "Timeout finished, disconnecting Car Monitor");
- }
if (mMonitorStartedCount > 0) {
+ if (isVerboseLoggable()) {
+ Log.v(TAG, "MonitorStartedCount > 0, do nothing");
+ }
return;
}
+ Log.i(TAG, "Disconnecting Car Monitor");
try {
if (mRestrictionsManager != null) {
mRestrictionsManager.unregisterListener();
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
index 6ec0c28..cd62072 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
@@ -37,6 +37,7 @@ import com.android.car.setupwizardlib.partner.PartnerConfig;
import com.android.car.setupwizardlib.partner.ResourceEntry;
import com.android.car.setupwizardlib.robolectric.BaseRobolectricTest;
import com.android.car.setupwizardlib.robolectric.TestHelper;
+import com.android.car.setupwizardlib.shadows.ShadowConfiguration;
import org.junit.Before;
import org.junit.Test;
@@ -45,6 +46,7 @@ import org.mockito.Mockito;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.Shadows;
+import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowTextView;
import org.robolectric.util.ReflectionHelpers;
@@ -56,6 +58,7 @@ import java.util.Locale;
* Tests for the CarSetupWizardCompatLayout
*/
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowConfiguration.class)
public class CarSetupWizardCompatLayoutTest extends BaseRobolectricTest {
private static final Locale LOCALE_EN_US = new Locale("en", "US");
// Hebrew locale can be used to test RTL.
@@ -532,6 +535,28 @@ public class CarSetupWizardCompatLayoutTest extends BaseRobolectricTest {
assertThat(secondaryButton.getTextSize()).isWithin(TOLERANCE).of(EXCEPTED_TEXT_SIZE);
}
+ @Test
+ public void test_shouldNotMirrorNavIcons_inLtr() {
+ Activity activity = Robolectric.buildActivity(CarSetupWizardLayoutTestActivity.class)
+ .create()
+ .get();
+
+ CarSetupWizardCompatLayout layout = activity.findViewById(R.id.car_setup_wizard_layout);
+ assertThat(layout.shouldMirrorNavIcons()).isFalse();
+ }
+
+ @Test
+ public void test_shouldMirrorNavIcons_inRtl() {
+ application.getResources().getConfiguration().setLocale(LOCALE_IW_IL);
+
+ Activity activity = Robolectric.buildActivity(CarSetupWizardLayoutTestActivity.class)
+ .create()
+ .get();
+
+ CarSetupWizardCompatLayout layout = activity.findViewById(R.id.car_setup_wizard_layout);
+ assertThat(layout.shouldMirrorNavIcons()).isTrue();
+ }
+
private void setupFakeContentProvider() {
FakeOverrideContentProvider.installDefaultProvider();
}
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/shadows/ShadowConfiguration.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/shadows/ShadowConfiguration.java
new file mode 100644
index 0000000..39057be
--- /dev/null
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/shadows/ShadowConfiguration.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2020 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.car.setupwizardlib.shadows;
+
+import android.content.res.Configuration;
+import android.view.View;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+import java.util.Locale;
+
+/**
+ * Shadow class for {@link Configuration}.
+ */
+@Implements(Configuration.class)
+public class ShadowConfiguration {
+
+ private static final Locale HEBREW_LOCALE = new Locale("iw", "IL");
+ private int mLayoutDir = View.LAYOUT_DIRECTION_LTR;
+
+ /**
+ * Set the layout direction from a {@link Locale}.
+ */
+ @Implementation
+ public void setLayoutDirection(Locale locale) {
+ if (locale.getLanguage().equals(HEBREW_LOCALE.getLanguage())) {
+ mLayoutDir = View.LAYOUT_DIRECTION_RTL;
+ }
+ }
+
+ /** Returs the layout direction */
+ @Implementation
+ public int getLayoutDirection() {
+ return mLayoutDir;
+ }
+}