diff options
Diffstat (limited to 'src/com/android/settings/DreamSettings.java')
-rw-r--r-- | src/com/android/settings/DreamSettings.java | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/src/com/android/settings/DreamSettings.java b/src/com/android/settings/DreamSettings.java new file mode 100644 index 0000000..d9953aa --- /dev/null +++ b/src/com/android/settings/DreamSettings.java @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2010 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 static android.provider.Settings.Secure.SCREENSAVER_ENABLED; +import static android.provider.Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK; + +import android.app.ActionBar; +import android.app.Activity; +import android.app.ActivityManagerNative; +import android.app.admin.DevicePolicyManager; +import android.content.ContentResolver; +import android.content.Context; +import android.content.res.Configuration; +import android.database.ContentObserver; +import android.os.Bundle; +import android.os.Handler; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.preference.CheckBoxPreference; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.util.Log; +import android.view.Gravity; +import android.view.IWindowManager; +import android.widget.CompoundButton; +import android.widget.Switch; + +import java.util.ArrayList; + +public class DreamSettings extends SettingsPreferenceFragment { + private static final String TAG = "DreamSettings"; + + private static final String KEY_ACTIVATE_ON_DOCK = "activate_on_dock"; + + private CheckBoxPreference mActivateOnDockPreference; + + private Switch mEnableSwitch; + private Enabler mEnabler; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + addPreferencesFromResource(R.xml.dream_settings); + + mActivateOnDockPreference = (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_DOCK); + + final Activity activity = getActivity(); + + mEnableSwitch = new Switch(activity); + + if (activity instanceof PreferenceActivity) { + PreferenceActivity preferenceActivity = (PreferenceActivity) activity; + // note: we do not check onIsHidingHeaders() or onIsMultiPane() because there's no + // switch in the left-hand pane to control this; we need to show the ON/OFF in our + // fragment every time + final int padding = activity.getResources().getDimensionPixelSize( + R.dimen.action_bar_switch_padding); + mEnableSwitch.setPadding(0, 0, padding, 0); + activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, + ActionBar.DISPLAY_SHOW_CUSTOM); + activity.getActionBar().setCustomView(mEnableSwitch, new ActionBar.LayoutParams( + ActionBar.LayoutParams.WRAP_CONTENT, + ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.RIGHT)); + activity.getActionBar().setTitle(R.string.screensaver_settings_title); + } + + mEnabler = new Enabler(activity, mEnableSwitch); + } + + public static boolean isScreenSaverEnabled(Context context) { + return 0 != Settings.Secure.getInt( + context.getContentResolver(), SCREENSAVER_ENABLED, 1); + } + + public static void setScreenSaverEnabled(Context context, boolean enabled) { + Settings.Secure.putInt( + context.getContentResolver(), SCREENSAVER_ENABLED, enabled ? 1 : 0); + } + + public static class Enabler implements CompoundButton.OnCheckedChangeListener { + private final Context mContext; + private Switch mSwitch; + + public Enabler(Context context, Switch switch_) { + mContext = context; + setSwitch(switch_); + } + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + setScreenSaverEnabled(mContext, isChecked); + } + public void setSwitch(Switch switch_) { + if (mSwitch == switch_) return; + if (mSwitch != null) mSwitch.setOnCheckedChangeListener(null); + mSwitch = switch_; + mSwitch.setOnCheckedChangeListener(this); + + final boolean enabled = isScreenSaverEnabled(mContext); + mSwitch.setChecked(enabled); + } + public void pause() { + mSwitch.setOnCheckedChangeListener(null); + } + public void resume() { + mSwitch.setOnCheckedChangeListener(this); + } + } + + @Override + public void onResume() { + if (mEnabler != null) { + mEnabler.resume(); + } + + final boolean currentActivateOnDock = 0 != Settings.Secure.getInt(getContentResolver(), + SCREENSAVER_ACTIVATE_ON_DOCK, 1); + mActivateOnDockPreference.setChecked(currentActivateOnDock); + super.onResume(); + } + + @Override + public void onPause() { + if (mEnabler != null) { + mEnabler.pause(); + } + + super.onPause(); + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (preference == mActivateOnDockPreference) { + Settings.Secure.putInt(getContentResolver(), + SCREENSAVER_ACTIVATE_ON_DOCK, + mActivateOnDockPreference.isChecked() ? 1 : 0); + } + return super.onPreferenceTreeClick(preferenceScreen, preference); + } +} |