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;
+ }
}