[FM] FM text is truncated when the device is in landscape position
Open the Fm Radio app and play one radio station ->
Tap on favorite -> Tilt the device in landscape mode
and observe => Respective radio station added to favorites
, FM text is truncated in landscape mode.
The fix is to let FM text not be truncated in landscape
mode.
Bug 18268527
Review: https://partner-android-review.git.corp.google.com/#/c/187901
Signed-off-by: Benson Huang <benson.huang@mediatek.com>
Change-Id: I88b0013f7e0077707aa30fcc42b66a006ec90de2
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index db4c05a..d9af8b6 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -31,8 +31,8 @@
<!-- first region target text size and margin -->
<dimen name="fm_frequency_text_size_first_target">20dp</dimen>
<dimen name="fm_station_name_text_size_first_target">14dp</dimen>
- <dimen name="fm_description_margin_top_first_target">0dp</dimen>
- <dimen name="fm_frequency_margin_top_first_target">0dp</dimen>
+ <dimen name="fm_description_margin_top_first_target">10dp</dimen>
+ <dimen name="fm_frequency_margin_top_first_target">10dp</dimen>
<dimen name="fm_station_name_margin_top_first_target">8dp</dimen>
<dimen name="fm_station_rds_margin_top_first_target">-14dp</dimen>
<dimen name="fm_control_buttons_margin_top_first_target">8dp</dimen>
diff --git a/src/com/android/fmradio/views/FmScroller.java b/src/com/android/fmradio/views/FmScroller.java
index 8b0bdaa..143cd34 100644
--- a/src/com/android/fmradio/views/FmScroller.java
+++ b/src/com/android/fmradio/views/FmScroller.java
@@ -1097,7 +1097,7 @@
// Text view
private TextView mFrequencyText;
- private TextView mFmDescrptionText;
+ private TextView mFmDescriptionText;
private TextView mStationNameText;
@@ -1133,7 +1133,7 @@
mFullHeight = mDisplayMetrics.heightPixels - mStatusBarHeight;
mFrequencyText = (TextView) findViewById(R.id.station_value);
- mFmDescrptionText = (TextView) findViewById(R.id.text_fm);
+ mFmDescriptionText = (TextView) findViewById(R.id.text_fm);
mStationNameText = (TextView) findViewById(R.id.station_name);
mStationRdsText = (TextView) findViewById(R.id.station_rds);
mControlView = findViewById(R.id.rl_imgbtnpart);
@@ -1159,11 +1159,15 @@
protected int mTargetHeight;
// start text size and margin
+ protected float mFmDescriptionTextSizeStart;
+
protected float mFrequencyStartTextSize;
protected float mStationNameTextSizeStart;
- protected float mFmDescrptionMarginTopStart;
+ protected float mFmDescriptionMarginTopStart;
+
+ protected float mFmDescriptionStartPaddingLeft;
protected float mFrequencyMarginTopStart;
@@ -1174,11 +1178,13 @@
protected float mControlViewMarginTopStart;
// target text size and margin
+ protected float mFmDescriptionTextSizeTarget;
+
protected float mFrequencyTextSizeTarget;
protected float mStationNameTextSizeTarget;
- protected float mFmDescrptionMarginTopTarget;
+ protected float mFmDescriptionMarginTopTarget;
protected float mFrequencyMarginTopTarget;
@@ -1195,7 +1201,7 @@
protected float mPlayButtonHeight;
// Padding adjust rate as linear
- protected float mFmDescrptionPaddingRate;
+ protected float mFmDescriptionPaddingRate;
protected float mFrequencyPaddingRate;
@@ -1210,6 +1216,8 @@
// Text size adjust rate as linear
// adjust from first to target critical height
+ protected float mFmDescriptionTextSizeRate;
+
protected float mFrequencyTextSizeRate;
// adjust before first critical height
@@ -1219,11 +1227,12 @@
Resources res = mContext.getResources();
mTargetHeight = mFirstTargetHeight;
// init start
+ mFmDescriptionTextSizeStart = res.getDimension(R.dimen.fm_description_text_size);
mFrequencyStartTextSize = res.getDimension(R.dimen.fm_frequency_text_size_start);
mStationNameTextSizeStart = res
.getDimension(R.dimen.fm_station_name_text_size_start);
// first view, margin refer to parent
- mFmDescrptionMarginTopStart = res
+ mFmDescriptionMarginTopStart = res
.getDimension(R.dimen.fm_description_margin_top_start) + mActionBarHeight;
mFrequencyMarginTopStart = res.getDimension(R.dimen.fm_frequency_margin_top_start);
mStationNameMarginTopStart = res
@@ -1235,13 +1244,17 @@
// init target
mFrequencyTextSizeTarget = res
.getDimension(R.dimen.fm_frequency_text_size_first_target);
+ mFmDescriptionTextSizeTarget = mFrequencyTextSizeTarget;
mStationNameTextSizeTarget = res
.getDimension(R.dimen.fm_station_name_text_size_first_target);
- mFmDescrptionMarginTopTarget = res
+ mFmDescriptionMarginTopTarget = res
.getDimension(R.dimen.fm_description_margin_top_first_target);
+ mFmDescriptionStartPaddingLeft = mFrequencyText.getPaddingLeft();
// first view, margin refer to parent if not in landscape
if (!mIsLandscape) {
- mFmDescrptionMarginTopTarget += mActionBarHeight;
+ mFmDescriptionMarginTopTarget += mActionBarHeight;
+ } else {
+ mFrequencyMarginTopStart += mActionBarHeight + mFmDescriptionTextSizeStart;
}
mFrequencyMarginTopTarget = res
.getDimension(R.dimen.fm_frequency_margin_top_first_target);
@@ -1253,12 +1266,14 @@
.getDimension(R.dimen.fm_control_buttons_margin_top_first_target);
// init text size and margin adjust rate
int scrollHeight = mFullHeight - mTargetHeight;
+ mFmDescriptionTextSizeRate =
+ (mFmDescriptionTextSizeStart - mFmDescriptionTextSizeTarget) / scrollHeight;
mFrequencyTextSizeRate = (mFrequencyStartTextSize - mFrequencyTextSizeTarget)
/ scrollHeight;
mStationNameTextSizeRate = (mStationNameTextSizeStart - mStationNameTextSizeTarget)
/ scrollHeight;
- mFmDescrptionPaddingRate =
- (mFmDescrptionMarginTopStart - mFmDescrptionMarginTopTarget)
+ mFmDescriptionPaddingRate =
+ (mFmDescriptionMarginTopStart - mFmDescriptionMarginTopTarget)
/ scrollHeight;
mFrequencyPaddingRate = (mFrequencyMarginTopStart - mFrequencyMarginTopTarget)
/ scrollHeight;
@@ -1286,9 +1301,9 @@
float lastHeight = 0;
float newTextSize;
// 1.FM description (margin)
- newMargin = getNewSize(currentHeight, mTargetHeight, mFmDescrptionMarginTopTarget,
- mFmDescrptionPaddingRate);
- lastHeight = setNewPadding(mFmDescrptionText, newMargin);
+ newMargin = getNewSize(currentHeight, mTargetHeight, mFmDescriptionMarginTopTarget,
+ mFmDescriptionPaddingRate);
+ lastHeight = setNewPadding(mFmDescriptionText, newMargin);
// 2. frequency text (text size and margin)
newTextSize = getNewSize(currentHeight, mTargetHeight, mFrequencyTextSizeTarget,
mFrequencyTextSizeRate);
@@ -1322,27 +1337,48 @@
float newMargin = 0;
float lastHeight = 0;
float newTextSize;
- // 1. FM description (alpha and margin)
- float alpha = 0f;
- int offset = (int) ((mFullHeight - currentHeight) / mDensity);// dip
- if (offset <= 0) {
- alpha = 1f;
- } else if (offset <= 16) {
- alpha = 1 - offset / 16f;
- }
- mFmDescrptionText.setAlpha(alpha);
- newMargin = getNewSize(currentHeight, mTargetHeight, mFmDescrptionMarginTopTarget,
- mFmDescrptionPaddingRate);
- lastHeight = setNewPadding(mFmDescrptionText, newMargin);
- // 2. frequency text (text size and margin)
+ // 1. FM description (color, alpha and margin)
+ newMargin = getNewSize(currentHeight, mTargetHeight, mFmDescriptionMarginTopTarget,
+ mFmDescriptionPaddingRate);
+ setNewPadding(mFmDescriptionText, newMargin);
+
+ newTextSize = getNewSize(currentHeight, mTargetHeight, mFmDescriptionTextSizeTarget,
+ mFmDescriptionTextSizeRate);
+ mFmDescriptionText.setTextSize(newTextSize / mDensity);
+ boolean reachTop = (mSecondTargetHeight == getHeaderHeight());
+ mFmDescriptionText.setTextColor(reachTop ? Color.WHITE
+ : getResources().getColor(R.color.text_fm_color));
+ mFmDescriptionText.setAlpha(reachTop ? 0.87f : 1.0f);
+
+ // 2. frequency text (text size, padding and margin)
newTextSize = getNewSize(currentHeight, mTargetHeight, mFrequencyTextSizeTarget,
mFrequencyTextSizeRate);
mFrequencyText.setTextSize(newTextSize / mDensity);
newMargin = getNewSize(currentHeight, mTargetHeight, mFrequencyMarginTopTarget,
mFrequencyPaddingRate);
- lastHeight = setNewPadding(mFrequencyText, newMargin + lastHeight);
+ // Move frequency text like "103.7" from middle to action bar in landscape,
+ // or opposite direction. For example:
+ // ************************* *************************
+ // * * * FM 103.7 *
+ // * FM * <--> * *
+ // * 103.7 * * *
+ // ************************* *************************
+ // "FM", "103.7" and other subviews are in a RelativeLayout (id actionbar_parent)
+ // in main_header.xml. The position is controlled by the padding of each subview.
+ // Because "FM" and "103.7" move up, we need to change the padding top and change
+ // the padding left of "103.7".
+ // The padding between "FM" and "103.7" is 0.2 (e.g. paddingRate) times
+ // the length of "FM" string length.
+ float paddingRate = 0.2f;
+ float addPadding = (((1 + paddingRate) * computeFmDescriptionWidth())
+ * (mFullHeight - currentHeight)) / (mFullHeight - mTargetHeight);
+ mFrequencyText.setPadding((int) (addPadding + mFmDescriptionStartPaddingLeft),
+ (int) (newMargin), mFrequencyText.getPaddingRight(),
+ mFrequencyText.getPaddingBottom());
+ lastHeight = newMargin + lastHeight + mFrequencyText.getTextSize();
// If frequency text move to action bar, change it to bold
setNewTypefaceForFrequencyText();
+
// 3. station name (text size and margin)
newTextSize = getNewSize(currentHeight, mTargetHeight, mStationNameTextSizeTarget,
mStationNameTextSizeRate);
@@ -1385,6 +1421,12 @@
mPlayButtonPaddingRate);
setNewPadding(mPlayButtonView, newMargin);
}
+
+ // Compute the text "FM" width
+ private float computeFmDescriptionWidth() {
+ Paint paint = mFmDescriptionText.getPaint();
+ return (float) paint.measureText(mFmDescriptionText.getText().toString());
+ }
}
private class SecondRangeAdjuster extends FirstRangeAdjuster {
@@ -1396,7 +1438,7 @@
.getDimension(R.dimen.fm_frequency_text_size_first_target);
mStationNameTextSizeStart = res
.getDimension(R.dimen.fm_station_name_text_size_first_target);
- mFmDescrptionMarginTopStart = res
+ mFmDescriptionMarginTopStart = res
.getDimension(R.dimen.fm_description_margin_top_first_target)
+ mActionBarHeight;// first view, margin refer to parent
mFrequencyMarginTopStart = res
@@ -1412,7 +1454,7 @@
.getDimension(R.dimen.fm_frequency_text_size_second_target);
mStationNameTextSizeTarget = res
.getDimension(R.dimen.fm_station_name_text_size_second_target);
- mFmDescrptionMarginTopTarget = res
+ mFmDescriptionMarginTopTarget = res
.getDimension(R.dimen.fm_description_margin_top_second_target);
mFrequencyMarginTopTarget = res
.getDimension(R.dimen.fm_frequency_margin_top_second_target);
@@ -1430,8 +1472,9 @@
mStationNameTextSizeRate =
(mStationNameTextSizeStart - mStationNameTextSizeTarget)
/ scrollHeight;
- mFmDescrptionPaddingRate =
- (mFmDescrptionMarginTopStart - mFmDescrptionMarginTopTarget)
+ mFmDescriptionPaddingRate =
+ (mFmDescriptionMarginTopStart - mFmDescriptionMarginTopTarget)
+
/ scrollHeight;
mFrequencyPaddingRate = (mFrequencyMarginTopStart - mFrequencyMarginTopTarget)
/ scrollHeight;
@@ -1463,10 +1506,10 @@
} else if (offset <= 16) {
alpha = 1 - offset / 16f;
}
- mFmDescrptionText.setAlpha(alpha);
- newMargin = getNewSize(currentHeight, mTargetHeight, mFmDescrptionMarginTopTarget,
- mFmDescrptionPaddingRate);
- lastHeight = setNewPadding(mFmDescrptionText, newMargin);
+ mFmDescriptionText.setAlpha(alpha);
+ newMargin = getNewSize(currentHeight, mTargetHeight, mFmDescriptionMarginTopTarget,
+ mFmDescriptionPaddingRate);
+ lastHeight = setNewPadding(mFmDescriptionText, newMargin);
// 2. frequency text (text size and margin)
newTextSize = getNewSize(currentHeight, mTargetHeight, mFrequencyTextSizeTarget,
mFrequencyTextSizeRate);