Add instruction video to Screen Magnification a.k.a. Tap to Zoom screen.

Change-Id: Id02796ea44e48fe04351c9ea6bda66526f77a5cf
This commit is contained in:
Noah Wang
2016-01-20 20:47:21 -08:00
parent 802d22e159
commit c14ed74482
6 changed files with 171 additions and 3 deletions

View File

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