OSDN Git Service

Merge "Fix Screen Magnification recursive draw" am: 4e7846fbe4
authorgaochong <gaochong@xiaomi.com>
Mon, 19 Jun 2017 17:12:41 +0000 (17:12 +0000)
committerandroid-build-merger <android-build-merger@google.com>
Mon, 19 Jun 2017 17:12:41 +0000 (17:12 +0000)
am: db233c6e88

Change-Id: If8a23a012e0b7a82dc0c6a7d349a15310b4eb43e

1  2 
src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java

@@@ -20,29 -20,29 +20,29 @@@ 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.AudioManager;
  import android.media.MediaPlayer;
  import android.media.MediaPlayer.OnPreparedListener;
  import android.net.Uri;
 +import android.os.Bundle;
 +import android.provider.Settings;
  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.ViewTreeObserver;
  import android.view.ViewTreeObserver.OnGlobalLayoutListener;
  import android.view.WindowManager;
  import android.widget.ImageView;
 -import android.widget.MediaController;
  import android.widget.RelativeLayout.LayoutParams;
 +import android.widget.Switch;
  import android.widget.VideoView;
 -import com.android.internal.logging.MetricsProto.MetricsEvent;
 +
 +import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
  import com.android.settings.R;
 -import com.android.settings.widget.ToggleSwitch;
 -import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener;
 +import com.android.settings.widget.SwitchBar;
  
 -public class ToggleScreenMagnificationPreferenceFragment extends ToggleFeaturePreferenceFragment {
 +public class ToggleScreenMagnificationPreferenceFragment extends
 +        ToggleFeaturePreferenceFragment implements SwitchBar.OnSwitchChangeListener {
  
      protected class VideoPreference extends Preference {
          private ImageView mVideoBackgroundView;
                  }
              });
  
 -            videoView.setVideoURI(Uri.parse(String.format("%s://%s/%s",
 -                    ContentResolver.SCHEME_ANDROID_RESOURCE,
 -                    getPrefContext().getPackageName(),
 -                    R.raw.accessibility_screen_magnification)));
 +            // Make sure the VideoView does not request audio focus.
 +            videoView.setAudioFocusRequest(AudioManager.AUDIOFOCUS_NONE);
 +
 +            // Resolve and set the video content
 +            Bundle args = getArguments();
 +            if ((args != null) && args.containsKey(
 +                    AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID)) {
 +                videoView.setVideoURI(Uri.parse(String.format("%s://%s/%s",
 +                        ContentResolver.SCHEME_ANDROID_RESOURCE,
 +                        getPrefContext().getPackageName(),
 +                        args.getInt(AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID))));
 +            }
 +
              // Make sure video controls (e.g. for pausing) are not displayed.
              videoView.setMediaController(null);
  
                      videoView.setLayoutParams(videoLp);
                      videoView.invalidate();
                      videoView.start();
+                     mVideoBackgroundView.getViewTreeObserver()
+                             .removeOnGlobalLayoutListener(mLayoutListener);
                  }
              };
  
      }
  
      protected VideoPreference mVideoPreference;
 +    protected Preference mConfigWarningPreference;
 +
 +    private boolean mLaunchFromSuw = false;
 +    private boolean mInitialSetting = false;
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          mVideoPreference = new VideoPreference(getPrefContext());
          mVideoPreference.setSelectable(false);
          mVideoPreference.setPersistent(false);
 -        mVideoPreference.setLayoutResource(R.layout.video_preference);
 +        mVideoPreference.setLayoutResource(R.layout.magnification_video_preference);
 +
 +        mConfigWarningPreference = new Preference(getPrefContext());
 +        mConfigWarningPreference.setSelectable(false);
 +        mConfigWarningPreference.setPersistent(false);
 +        mConfigWarningPreference.setVisible(false);
 +        mConfigWarningPreference.setIcon(R.drawable.ic_warning_24dp);
  
          final PreferenceScreen preferenceScreen = getPreferenceManager().getPreferenceScreen();
          preferenceScreen.setOrderingAsAdded(false);
          mVideoPreference.setOrder(0);
          mSummaryPreference.setOrder(1);
 +        mConfigWarningPreference.setOrder(2);
          preferenceScreen.addPreference(mVideoPreference);
 +        preferenceScreen.addPreference(mConfigWarningPreference);
 +    }
 +
 +    @Override
 +    public void onResume() {
 +        super.onResume();
 +
 +        VideoView videoView = (VideoView) getView().findViewById(R.id.video);
 +        if (videoView != null) {
 +            videoView.start();
 +        }
 +
 +        updateConfigurationWarningIfNeeded();
 +    }
 +
 +    @Override
 +    public int getMetricsCategory() {
 +        // TODO: Distinguish between magnification modes
 +        return MetricsEvent.ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION;
 +    }
 +
 +    @Override
 +    public void onSwitchChanged(Switch switchView, boolean isChecked) {
 +        onPreferenceToggled(mPreferenceKey, isChecked);
      }
  
      @Override
      protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
 -        // Do nothing.
 +        Settings.Secure.putInt(getContentResolver(), preferenceKey, enabled ? 1 : 0);
 +        updateConfigurationWarningIfNeeded();
      }
  
      @Override
      protected void onInstallSwitchBarToggleSwitch() {
          super.onInstallSwitchBarToggleSwitch();
 -        mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
 -            @Override
 -            public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
 -                mSwitchBar.setCheckedInternal(checked);
 -                getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked);
 -                onPreferenceToggled(mPreferenceKey, checked);
 -                return false;
 -            }
 -        });
 +
 +        mSwitchBar.setCheckedInternal(
 +                Settings.Secure.getInt(getContentResolver(), mPreferenceKey, 0) == 1);
 +        mSwitchBar.addOnSwitchChangeListener(this);
      }
  
      @Override
 -    public void onResume() {
 -        super.onResume();
 +    protected void onRemoveSwitchBarToggleSwitch() {
 +        super.onRemoveSwitchBarToggleSwitch();
 +        mSwitchBar.removeOnSwitchChangeListener(this);
 +    }
  
 -        // Temporarily enable Magnification on this screen if it's disabled.
 -        if (Settings.Secure.getInt(getContentResolver(),
 -                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 0) {
 -            setMagnificationEnabled(1);
 +    @Override
 +    protected void onProcessArguments(Bundle arguments) {
 +        super.onProcessArguments(arguments);
 +        if (arguments == null) {
 +            return;
          }
  
 -        VideoView videoView = (VideoView) getView().findViewById(R.id.video);
 -        if (videoView != null) {
 -            videoView.start();
 +        if (arguments.containsKey(AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID)) {
 +            mVideoPreference.setVisible(true);
 +            final int resId = arguments.getInt(
 +                    AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID);
 +        } else {
 +            mVideoPreference.setVisible(false);
          }
 -    }
  
 -    @Override
 -    public void onPause() {
 -        super.onPause();
 -        if (!mToggleSwitch.isChecked()) {
 -            setMagnificationEnabled(0);
 +        if (arguments.containsKey(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW)) {
 +            mLaunchFromSuw = arguments.getBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW);
          }
 -    }
  
 -    private void setMagnificationEnabled(int enabled) {
 -        Settings.Secure.putInt(getContentResolver(),
 -                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled);
 +        if (arguments.containsKey(AccessibilitySettings.EXTRA_CHECKED)) {
 +            mInitialSetting = arguments.getBoolean(AccessibilitySettings.EXTRA_CHECKED);
 +        }
      }
  
 -    @Override
 -    protected int getMetricsCategory() {
 -        return MetricsEvent.ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION;
 +    private void updateConfigurationWarningIfNeeded() {
 +        final CharSequence warningMessage =
 +                MagnificationPreferenceFragment.getConfigurationWarningStringForSecureSettingsKey(
 +                        mPreferenceKey, getPrefContext());
 +        if (warningMessage != null) {
 +            mConfigWarningPreference.setSummary(warningMessage);
 +        }
 +        mConfigWarningPreference.setVisible(warningMessage != null);
      }
  
      private static int getScreenWidth(Context context) {