diff options
author | LuK1337 <priv.luk@gmail.com> | 2015-11-14 12:15:06 +0100 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2015-11-16 09:59:44 -0800 |
commit | 3c1d84924359e14ccb8ce4f52fc784f93d1610f3 (patch) | |
tree | 8c6193340c6a0414a697b1a49062cdd2bb36305c /src | |
parent | b1ecf934285b2f93a90af0138707ce41c3ea2ae4 (diff) | |
download | packages_apps_Settings-3c1d84924359e14ccb8ce4f52fc784f93d1610f3.zip packages_apps_Settings-3c1d84924359e14ccb8ce4f52fc784f93d1610f3.tar.gz packages_apps_Settings-3c1d84924359e14ccb8ce4f52fc784f93d1610f3.tar.bz2 |
Fix profiles toggle
* Also implement CMBaseSystemSettingSwitchBar used for it.
Change-Id: I1109cf06066a6c5f57044a484b0af6bbb38dc1b1
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/settings/cyanogenmod/CMBaseSystemSettingSwitchBar.java | 156 | ||||
-rw-r--r-- | src/com/android/settings/profiles/ProfilesSettings.java | 8 |
2 files changed, 160 insertions, 4 deletions
diff --git a/src/com/android/settings/cyanogenmod/CMBaseSystemSettingSwitchBar.java b/src/com/android/settings/cyanogenmod/CMBaseSystemSettingSwitchBar.java new file mode 100644 index 0000000..1f46738 --- /dev/null +++ b/src/com/android/settings/cyanogenmod/CMBaseSystemSettingSwitchBar.java @@ -0,0 +1,156 @@ +/* +* Copyright (C) 2015 The CyanogenMod 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.cyanogenmod; + +import android.content.ContentResolver; +import android.content.Context; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.Handler; +import android.widget.Switch; +import com.android.settings.widget.SwitchBar; + +import cyanogenmod.providers.CMSettings; + +public class CMBaseSystemSettingSwitchBar implements SwitchBar.OnSwitchChangeListener { + private Context mContext; + private SwitchBar mSwitchBar; + private SettingsObserver mSettingsObserver; + private boolean mListeningToOnSwitchChange = false; + + private boolean mStateMachineEvent; + + private final String mSettingKey; + private final int mDefaultState; + + private final SwitchBarChangeCallback mCallback; + public interface SwitchBarChangeCallback { + public void onEnablerChanged(boolean isEnabled); + } + + public CMBaseSystemSettingSwitchBar(Context context, SwitchBar switchBar, String key, + boolean defaultState, SwitchBarChangeCallback callback) { + mContext = context; + mSwitchBar = switchBar; + mSettingKey = key; + mDefaultState = defaultState ? 1 : 0; + mCallback = callback; + mSettingsObserver = new SettingsObserver(new Handler()); + setupSwitchBar(); + } + + public void setupSwitchBar() { + setSwitchState(); + if (!mListeningToOnSwitchChange) { + mSwitchBar.addOnSwitchChangeListener(this); + mListeningToOnSwitchChange = true; + } + mSwitchBar.show(); + } + + public void teardownSwitchBar() { + if (mListeningToOnSwitchChange) { + mSwitchBar.removeOnSwitchChangeListener(this); + mListeningToOnSwitchChange = false; + } + mSwitchBar.hide(); + } + + public void resume(Context context) { + mContext = context; + if (!mListeningToOnSwitchChange) { + mSwitchBar.addOnSwitchChangeListener(this); + mSettingsObserver.observe(); + + mListeningToOnSwitchChange = true; + } + } + + public void pause() { + if (mListeningToOnSwitchChange) { + mSwitchBar.removeOnSwitchChangeListener(this); + mSettingsObserver.unobserve(); + + mListeningToOnSwitchChange = false; + } + } + + private void setSwitchBarChecked(boolean checked) { + mStateMachineEvent = true; + mSwitchBar.setChecked(checked); + mStateMachineEvent = false; + if (mCallback != null) { + mCallback.onEnablerChanged(checked); + } + } + + private void setSwitchState() { + boolean enabled = CMSettings.System.getInt(mContext.getContentResolver(), + mSettingKey, mDefaultState) == 1; + mStateMachineEvent = true; + setSwitchBarChecked(enabled); + mStateMachineEvent = false; + } + + @Override + public void onSwitchChanged(Switch switchView, boolean isChecked) { + //Do nothing if called as a result of a state machine event + if (mStateMachineEvent) { + return; + } + + // Handle a switch change + CMSettings.System.putInt(mContext.getContentResolver(), + mSettingKey, isChecked ? 1 : 0); + + if (mCallback != null) { + mCallback.onEnablerChanged(isChecked); + } + } + + class SettingsObserver extends ContentObserver { + SettingsObserver(Handler handler) { + super(handler); + } + + void observe() { + ContentResolver resolver = mContext.getContentResolver(); + resolver.registerContentObserver(CMSettings.System.getUriFor( + mSettingKey), false, this); + update(); + } + + void unobserve() { + ContentResolver resolver = mContext.getContentResolver(); + resolver.unregisterContentObserver(this); + } + + @Override + public void onChange(boolean selfChange) { + update(); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + update(); + } + + public void update() { + setSwitchState(); + } + } +} diff --git a/src/com/android/settings/profiles/ProfilesSettings.java b/src/com/android/settings/profiles/ProfilesSettings.java index cf6c161..957cf82 100644 --- a/src/com/android/settings/profiles/ProfilesSettings.java +++ b/src/com/android/settings/profiles/ProfilesSettings.java @@ -50,13 +50,13 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SubSettings; import com.android.settings.Utils; -import com.android.settings.cyanogenmod.BaseSystemSettingSwitchBar; +import com.android.settings.cyanogenmod.CMBaseSystemSettingSwitchBar; import cyanogenmod.providers.CMSettings; import java.util.UUID; public class ProfilesSettings extends SettingsPreferenceFragment - implements BaseSystemSettingSwitchBar.SwitchBarChangeCallback { + implements CMBaseSystemSettingSwitchBar.SwitchBarChangeCallback { private static final String TAG = "ProfilesSettings"; public static final String EXTRA_PROFILE = "Profile"; @@ -69,7 +69,7 @@ public class ProfilesSettings extends SettingsPreferenceFragment private final BroadcastReceiver mReceiver; private ProfileManager mProfileManager; - private BaseSystemSettingSwitchBar mProfileEnabler; + private CMBaseSystemSettingSwitchBar mProfileEnabler; private ViewPager mViewPager; private TextView mEmptyText; @@ -158,7 +158,7 @@ public class ProfilesSettings extends SettingsPreferenceFragment public void onStart() { super.onStart(); final SettingsActivity activity = (SettingsActivity) getActivity(); - mProfileEnabler = new BaseSystemSettingSwitchBar(activity, activity.getSwitchBar(), + mProfileEnabler = new CMBaseSystemSettingSwitchBar(activity, activity.getSwitchBar(), CMSettings.System.SYSTEM_PROFILES_ENABLED, true, this); } |