diff --git a/res/drawable/accessibility_screen_magnification_background.xml b/res/drawable/accessibility_screen_magnification_background.xml new file mode 100644 index 00000000000..e22cfece1df --- /dev/null +++ b/res/drawable/accessibility_screen_magnification_background.xml @@ -0,0 +1,31 @@ + + + + + + + diff --git a/res/layout/text_description_preference.xml b/res/layout/text_description_preference.xml index d71f078b236..6b8594b87f0 100644 --- a/res/layout/text_description_preference.xml +++ b/res/layout/text_description_preference.xml @@ -13,11 +13,10 @@ See the License for the specific language governing permissions and limitations under the License. --> - diff --git a/res/layout/video_preference.xml b/res/layout/video_preference.xml new file mode 100644 index 00000000000..a6fde768c9a --- /dev/null +++ b/res/layout/video_preference.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/res/raw/accessibility_screen_magnification.mp4 b/res/raw/accessibility_screen_magnification.mp4 new file mode 100644 index 00000000000..1e60fc5c0bd Binary files /dev/null and b/res/raw/accessibility_screen_magnification.mp4 differ diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 30aa52f7f19..12bdfaabf7e 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -268,4 +268,11 @@ 240dp + + + 750dp + 383dp + 170dp + 311dp + 40dp diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 80719b29dd3..041fed8704e 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -16,15 +16,111 @@ package com.android.settings.accessibility; +import android.content.ContentResolver; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Point; +import android.os.Bundle; import android.provider.Settings; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnPreparedListener; +import android.net.Uri; +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceScreen; +import android.support.v7.preference.PreferenceViewHolder; +import android.view.Display; +import android.view.Gravity; +import android.view.WindowManager; +import android.widget.MediaController; +import android.widget.RelativeLayout; +import android.widget.VideoView; import com.android.internal.logging.MetricsProto.MetricsEvent; +import com.android.settings.R; import com.android.settings.widget.ToggleSwitch; import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener; public class ToggleScreenMagnificationPreferenceFragment extends ToggleFeaturePreferenceFragment { + protected class VideoPreference extends Preference { + public VideoPreference(Context context) { + super(context); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder view) { + super.onBindViewHolder(view); + view.setDividerAllowedAbove(false); + view.setDividerAllowedBelow(false); + final RelativeLayout background = + (RelativeLayout) view.findViewById(R.id.video_background); + final VideoView videoView = (VideoView) view.findViewById(R.id.video); + + // Hacky adjustment for using VideoView in recycle view and positioning + // it on the background image + Resources res = getPrefContext().getResources(); + final int backgroundWidth = res.getDimensionPixelSize( + R.dimen.screen_magnification_video_background_width); + final int backgroundHeight = res.getDimensionPixelSize( + R.dimen.screen_magnification_video_background_height); + final int videoWidth = res.getDimensionPixelSize( + R.dimen.screen_magnification_video_width); + final int videoHeight = res.getDimensionPixelSize( + R.dimen.screen_magnification_video_height); + final int videoMarginTop = res.getDimensionPixelSize( + R.dimen.screen_magnification_video_margin_top); + final int screenWidth = getScreenWidth(getPrefContext()); + + RelativeLayout.LayoutParams videoLp = new RelativeLayout.LayoutParams( + screenWidth * videoWidth / backgroundWidth, + screenWidth * videoHeight / backgroundWidth); + videoLp.setMargins(0, screenWidth * videoMarginTop / backgroundWidth, 0, 0); + videoView.setLayoutParams(videoLp); + + RelativeLayout.LayoutParams backgroundLp = new RelativeLayout.LayoutParams( + screenWidth, + screenWidth * backgroundHeight / backgroundWidth); + background.setLayoutParams(backgroundLp); + background.setBackgroundResource( + R.drawable.accessibility_screen_magnification_background); + background.setGravity(Gravity.CENTER_HORIZONTAL); + + // Loop the video. + videoView.setOnPreparedListener(new OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mediaPlayer) { + mediaPlayer.setLooping(true); + } + }); + + videoView.setVideoURI(Uri.parse(String.format("%s://%s/%s", + ContentResolver.SCHEME_ANDROID_RESOURCE, + getPrefContext().getPackageName(), + R.raw.accessibility_screen_magnification))); + videoView.setMediaController(new MediaController(getPrefContext())); + videoView.start(); + } + } + + protected VideoPreference mVideoPreference; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mVideoPreference = new VideoPreference(getPrefContext()); + mVideoPreference.setSelectable(false); + mVideoPreference.setPersistent(false); + mVideoPreference.setLayoutResource(R.layout.video_preference); + + final PreferenceScreen preferenceScreen = getPreferenceManager().getPreferenceScreen(); + preferenceScreen.setOrderingAsAdded(false); + mVideoPreference.setOrder(0); + mSummaryPreference.setOrder(1); + preferenceScreen.addPreference(mVideoPreference); + } + @Override protected void onPreferenceToggled(String preferenceKey, boolean enabled) { // Do nothing. @@ -34,7 +130,7 @@ public class ToggleScreenMagnificationPreferenceFragment protected void onInstallSwitchBarToggleSwitch() { super.onInstallSwitchBarToggleSwitch(); mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { - @Override + @Override public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { mSwitchBar.setCheckedInternal(checked); getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked); @@ -72,4 +168,12 @@ public class ToggleScreenMagnificationPreferenceFragment protected int getMetricsCategory() { return MetricsEvent.ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION; } + + private static int getScreenWidth(Context context) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + return size.x; + } }