1. The code was not checking whether the settings activity exists before passing in to the SettingCheckboxClass. bug:5038386 Change-Id: Iba4f5e2e5f6f3ed9c0fed5a5103d2e9a34399d97
93 lines
3.4 KiB
Java
93 lines
3.4 KiB
Java
/*
|
|
* Copyright (C) 2011 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.content.Intent;
|
|
import android.preference.CheckBoxPreference;
|
|
import android.util.TypedValue;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.widget.CheckBox;
|
|
import android.widget.ImageView;
|
|
|
|
/**
|
|
* CheckBox preference that optionally shows an icon for launching a settings
|
|
* {@link android.app.Activity}. The settings activity, if intent for launching
|
|
* it was provided, can be stared only if the CheckBox in is checked.
|
|
*/
|
|
public class SettingsCheckBoxPreference extends CheckBoxPreference {
|
|
|
|
// Integer.MIN_VALUE means not initalized
|
|
private static int sDimAlpha = Integer.MIN_VALUE;
|
|
|
|
private final Intent mSettingsIntent;
|
|
|
|
/**
|
|
* Creates a new instance. The constructor is checking whether the
|
|
* settings intent is resolved to an activity and acts accordingly.
|
|
*
|
|
* @param context Context for accessing resources.
|
|
* @param intent Intent to use as settings for the item represented by
|
|
* this preference. Pass <code>null</code> if there is no associated
|
|
* settings activity.
|
|
*/
|
|
public SettingsCheckBoxPreference(Context context, Intent intent) {
|
|
super(context);
|
|
|
|
if (sDimAlpha == Integer.MIN_VALUE) {
|
|
TypedValue outValue = new TypedValue();
|
|
context.getTheme().resolveAttribute(android.R.attr.disabledAlpha, outValue, true);
|
|
sDimAlpha = (int) (outValue.getFloat() * 255);
|
|
}
|
|
|
|
if (intent != null
|
|
&& !context.getPackageManager().queryIntentActivities(intent, 0).isEmpty()) {
|
|
mSettingsIntent = intent;
|
|
} else {
|
|
mSettingsIntent = null;
|
|
}
|
|
|
|
setWidgetLayoutResource(R.layout.preference_settings_checkbox_widget);
|
|
}
|
|
|
|
@Override
|
|
protected void onBindView(View view) {
|
|
super.onBindView(view);
|
|
ImageView settingsButton = (ImageView) view.findViewById(R.id.settings_button);
|
|
if (mSettingsIntent != null) {
|
|
CheckBox checkbox = (CheckBox) view.findViewById(com.android.internal.R.id.checkbox);
|
|
if (checkbox.isChecked()) {
|
|
settingsButton.setOnClickListener(new OnClickListener() {
|
|
public void onClick(View view) {
|
|
getContext().startActivity(mSettingsIntent);
|
|
}
|
|
});
|
|
}
|
|
settingsButton.setVisibility(View.VISIBLE);
|
|
if (checkbox.isChecked() && isEnabled()) {
|
|
settingsButton.setAlpha(255);
|
|
} else {
|
|
settingsButton.setAlpha(sDimAlpha);
|
|
}
|
|
} else {
|
|
settingsButton.setVisibility(View.GONE);
|
|
view.findViewById(R.id.divider).setVisibility(View.GONE);
|
|
}
|
|
}
|
|
}
|