From 783718fffee2a7b6e05cc337d0f45bc94f89f76d Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 13 Oct 2015 16:45:28 -0400 Subject: [PATCH] Fix crash language & input settings Bug: 24576551 Change-Id: Ifb717689c862193cf06c23de52b3fb68f910db3c --- .../preference_dialog_seekbar_material.xml | 37 ++++++++++ .../settings/CustomDialogPreference.java | 10 +++ .../settings/PointerSpeedPreference.java | 6 +- .../settings/SeekBarDialogPreference.java | 70 +++++++++++++++++++ 4 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 res/layout/preference_dialog_seekbar_material.xml create mode 100644 src/com/android/settings/SeekBarDialogPreference.java diff --git a/res/layout/preference_dialog_seekbar_material.xml b/res/layout/preference_dialog_seekbar_material.xml new file mode 100644 index 00000000000..09b963a8f99 --- /dev/null +++ b/res/layout/preference_dialog_seekbar_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + diff --git a/src/com/android/settings/CustomDialogPreference.java b/src/com/android/settings/CustomDialogPreference.java index 0b1c8bfbe3d..edd5416fad0 100644 --- a/src/com/android/settings/CustomDialogPreference.java +++ b/src/com/android/settings/CustomDialogPreference.java @@ -23,6 +23,7 @@ import android.os.Bundle; import android.support.v14.preference.PreferenceDialogFragment; import android.support.v7.preference.DialogPreference; import android.util.AttributeSet; +import android.view.View; public class CustomDialogPreference extends DialogPreference { @@ -62,6 +63,9 @@ public class CustomDialogPreference extends DialogPreference { protected void onClick(DialogInterface dialog, int which) { } + protected void onBindDialogView(View view) { + } + private void setFragment(CustomPreferenceDialogFragment fragment) { mFragment = fragment; } @@ -92,6 +96,12 @@ public class CustomDialogPreference extends DialogPreference { getCustomizablePreference().onDialogClosed(positiveResult); } + @Override + protected void onBindDialogView(View view) { + super.onBindDialogView(view); + getCustomizablePreference().onBindDialogView(view); + } + @Override public void onClick(DialogInterface dialog, int which) { super.onClick(dialog, which); diff --git a/src/com/android/settings/PointerSpeedPreference.java b/src/com/android/settings/PointerSpeedPreference.java index 3f40f9a70eb..c259e2617cf 100644 --- a/src/com/android/settings/PointerSpeedPreference.java +++ b/src/com/android/settings/PointerSpeedPreference.java @@ -20,11 +20,9 @@ import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.hardware.input.InputManager; -import android.os.Bundle; import android.os.Handler; import android.os.Parcel; import android.os.Parcelable; -import android.preference.SeekBarDialogPreference; import android.provider.Settings; import android.util.AttributeSet; import android.view.View; @@ -53,8 +51,8 @@ public class PointerSpeedPreference extends SeekBarDialogPreference implements } @Override - protected void showDialog(Bundle state) { - super.showDialog(state); + protected void onClick() { + super.onClick(); getContext().getContentResolver().registerContentObserver( Settings.System.getUriFor(Settings.System.POINTER_SPEED), true, diff --git a/src/com/android/settings/SeekBarDialogPreference.java b/src/com/android/settings/SeekBarDialogPreference.java new file mode 100644 index 00000000000..a40df55d441 --- /dev/null +++ b/src/com/android/settings/SeekBarDialogPreference.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2007 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; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.SeekBar; + +/** + * Based on frameworks/base/core/java/android/preference/SeekBarDialogPreference.java + * except uses support lib preferences. + */ +public class SeekBarDialogPreference extends CustomDialogPreference { + private final Drawable mMyIcon; + + public SeekBarDialogPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setDialogLayoutResource(R.layout.preference_dialog_seekbar_material); + + createActionButtons(); + + // Steal the XML dialogIcon attribute's value + mMyIcon = getDialogIcon(); + + setDialogIcon(null); + } + + public SeekBarDialogPreference(Context context) { + this(context, null); + } + + // Allow subclasses to override the action buttons + public void createActionButtons() { + setPositiveButtonText(android.R.string.ok); + setNegativeButtonText(android.R.string.cancel); + } + + @Override + protected void onBindDialogView(View view) { + super.onBindDialogView(view); + + final ImageView iconView = (ImageView) view.findViewById(android.R.id.icon); + if (mMyIcon != null) { + iconView.setImageDrawable(mMyIcon); + } else { + iconView.setVisibility(View.GONE); + } + } + + protected static SeekBar getSeekBar(View dialogView) { + return (SeekBar) dialogView.findViewById(R.id.seekbar); + } +}