diff --git a/res/drawable-nodpi/auto_awesome_battery b/res/drawable-nodpi/auto_awesome_battery new file mode 100644 index 00000000000..e69de29bb2d diff --git a/res/layout/smart_battery_header.xml b/res/layout/smart_battery_header.xml deleted file mode 100644 index 960f04ad380..00000000000 --- a/res/layout/smart_battery_header.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - diff --git a/res/layout/video_preference.xml b/res/layout/video_preference.xml index 9ab52ae46f3..55bc7a506df 100644 --- a/res/layout/video_preference.xml +++ b/res/layout/video_preference.xml @@ -23,11 +23,11 @@ android:clipToPadding="false" android:gravity="center" android:minHeight="?android:attr/listPreferredItemHeightSmall" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:orientation="horizontal"> diff --git a/res/raw/auto_awesome_battery.mp4 b/res/raw/auto_awesome_battery.mp4 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/res/xml/smart_battery_detail.xml b/res/xml/smart_battery_detail.xml index e7fb9f798f1..e1246edd980 100644 --- a/res/xml/smart_battery_detail.xml +++ b/res/xml/smart_battery_detail.xml @@ -21,18 +21,16 @@ android:key="smart_battery_detail" android:title="@string/smart_battery_manager_title"> - + + android:summary="@string/smart_battery_summary" + settings:allowDividerAbove="true"/> 0) { - width = (int) (height * mAspectRatio); - } else { - height = (int) (width / mAspectRatio); - } + + width = (int) (height * mAspectRatio); + super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); } diff --git a/src/com/android/settings/widget/VideoPreference.java b/src/com/android/settings/widget/VideoPreference.java index a3ac6a3f76c..03f8f0b4035 100644 --- a/src/com/android/settings/widget/VideoPreference.java +++ b/src/com/android/settings/widget/VideoPreference.java @@ -22,6 +22,7 @@ import android.content.res.TypedArray; import android.graphics.SurfaceTexture; import android.media.MediaPlayer; import android.net.Uri; +import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.util.AttributeSet; @@ -42,10 +43,13 @@ public class VideoPreference extends Preference { private final Context mContext; private Uri mVideoPath; - private MediaPlayer mMediaPlayer; - private boolean mAnimationAvailable; + @VisibleForTesting + MediaPlayer mMediaPlayer; + @VisibleForTesting + boolean mAnimationAvailable; private boolean mVideoReady; private boolean mVideoPaused; + private float mAspectRadio = 1.0f; private int mPreviewResource; public VideoPreference(Context context, AttributeSet attrs) { @@ -73,6 +77,7 @@ public class VideoPreference extends Preference { mMediaPlayer.setOnPreparedListener(mediaPlayer -> mediaPlayer.setLooping(true)); mAnimationAvailable = true; + updateAspectRatio(); } else { setVisible(false); } @@ -94,7 +99,11 @@ public class VideoPreference extends Preference { final TextureView video = (TextureView) holder.findViewById(R.id.video_texture_view); final ImageView imageView = (ImageView) holder.findViewById(R.id.video_preview_image); final ImageView playButton = (ImageView) holder.findViewById(R.id.video_play_button); + final AspectRatioFrameLayout layout = (AspectRatioFrameLayout) holder.findViewById( + R.id.video_container); + imageView.setImageResource(mPreviewResource); + layout.setAspectRatio(mAspectRadio); video.setOnClickListener(v -> { if (mMediaPlayer != null) { @@ -178,4 +187,9 @@ public class VideoPreference extends Preference { return mVideoPaused; } + @VisibleForTesting + void updateAspectRatio() { + mAspectRadio = mMediaPlayer.getVideoWidth() / (float)mMediaPlayer.getVideoHeight(); + } + } diff --git a/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java b/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java index bb55692f55d..59a90c561f4 100644 --- a/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java +++ b/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java @@ -41,7 +41,7 @@ public class AspectRatioFrameLayoutTest { } @Test - public void measure_squareAspectRatio_stretchHeight() { + public void measure_squareAspectRatio_squeezeWidth() { mLayout = new AspectRatioFrameLayout(mContext); int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY); @@ -49,8 +49,8 @@ public class AspectRatioFrameLayoutTest { mLayout.measure(widthMeasureSpec, heightMeasureSpec); - assertThat(mLayout.getMeasuredWidth()).isEqualTo(100); - assertThat(mLayout.getMeasuredHeight()).isEqualTo(100); + assertThat(mLayout.getMeasuredWidth()).isEqualTo(50); + assertThat(mLayout.getMeasuredHeight()).isEqualTo(50); } @Test diff --git a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java new file mode 100644 index 00000000000..fee7bcc1268 --- /dev/null +++ b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java @@ -0,0 +1,73 @@ +/* + * 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.mockito.Mockito.when; + +import android.content.Context; +import android.media.MediaPlayer; +import android.support.v7.preference.PreferenceViewHolder; +import android.view.LayoutInflater; + +import com.android.settings.R; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; + +@RunWith(SettingsRobolectricTestRunner.class) +public class VideoPreferenceTest { + private static final int VIDEO_WIDTH = 100; + private static final int VIDEO_HEIGHT = 150; + @Mock + private MediaPlayer mMediaPlayer; + private Context mContext; + private VideoPreference mVideoPreference; + private PreferenceViewHolder mPreferenceViewHolder; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = RuntimeEnvironment.application; + mVideoPreference = new VideoPreference(mContext, null /* attrs */); + mVideoPreference.mMediaPlayer = mMediaPlayer; + when(mMediaPlayer.getVideoWidth()).thenReturn(VIDEO_WIDTH); + when(mMediaPlayer.getVideoHeight()).thenReturn(VIDEO_HEIGHT); + + mPreferenceViewHolder = PreferenceViewHolder.createInstanceForTests( + LayoutInflater.from(mContext).inflate(R.layout.video_preference, null)); + } + + @Test + public void onBindViewHolder_hasCorrectRatio() { + mVideoPreference.mAnimationAvailable = true; + + mVideoPreference.updateAspectRatio(); + mVideoPreference.onBindViewHolder(mPreferenceViewHolder); + + final AspectRatioFrameLayout layout = + (AspectRatioFrameLayout) mPreferenceViewHolder.findViewById(R.id.video_container); + assertThat(layout.mAspectRatio).isWithin(0.01f).of(VIDEO_WIDTH / (float) VIDEO_HEIGHT); + } +}