diff options
Diffstat (limited to 'src/com/android/settings/profiles/ProfileEnabler.java')
-rw-r--r-- | src/com/android/settings/profiles/ProfileEnabler.java | 123 |
1 files changed, 102 insertions, 21 deletions
diff --git a/src/com/android/settings/profiles/ProfileEnabler.java b/src/com/android/settings/profiles/ProfileEnabler.java index 0540dbe..487adc9 100644 --- a/src/com/android/settings/profiles/ProfileEnabler.java +++ b/src/com/android/settings/profiles/ProfileEnabler.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 The CyanogenMod Project + * 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. @@ -17,51 +17,102 @@ package com.android.settings.profiles; import android.app.ProfileManager; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; +import android.database.ContentObserver; +import android.net.NetworkInfo; +import android.net.Uri; +import android.net.wifi.SupplicantState; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Handler; +import android.os.Message; import android.provider.Settings; -import android.widget.CompoundButton; import android.widget.Switch; +import android.widget.Toast; +import com.android.settings.R; +import com.android.settings.WirelessSettings; +import com.android.settings.search.Index; +import com.android.settings.widget.SwitchBar; +import com.android.settings.wifi.WifiSettings; + +import java.util.concurrent.atomic.AtomicBoolean; + +public class ProfileEnabler implements SwitchBar.OnSwitchChangeListener { + private Context mContext; + private SwitchBar mSwitchBar; + private SettingsObserver mSettingsObserver; + private boolean mListeningToOnSwitchChange = false; -public class ProfileEnabler implements CompoundButton.OnCheckedChangeListener { - private final Context mContext; - private Switch mSwitch; private boolean mStateMachineEvent; - public ProfileEnabler(Context context, Switch switch_) { + public ProfileEnabler(Context context, SwitchBar switchBar) { mContext = context; - mSwitch = switch_; + mSwitchBar = switchBar; + mSettingsObserver = new SettingsObserver(new Handler()); + setupSwitchBar(); } - public void resume() { - mSwitch.setOnCheckedChangeListener(this); + 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() { - mSwitch.setOnCheckedChangeListener(null); + if (mListeningToOnSwitchChange) { + mSwitchBar.removeOnSwitchChangeListener(this); + mSettingsObserver.unobserve(); + + mListeningToOnSwitchChange = false; + } } - public void setSwitch(Switch switch_) { - if (mSwitch == switch_) return; - mSwitch.setOnCheckedChangeListener(null); - mSwitch = switch_; - mSwitch.setOnCheckedChangeListener(this); - setSwitchState(); + private void setSwitchBarChecked(boolean checked) { + mStateMachineEvent = true; + mSwitchBar.setChecked(checked); + mStateMachineEvent = false; } private void setSwitchState() { boolean enabled = Settings.System.getInt(mContext.getContentResolver(), Settings.System.SYSTEM_PROFILES_ENABLED, 1) == 1; mStateMachineEvent = true; - mSwitch.setChecked(enabled); + setSwitchBarChecked(enabled); mStateMachineEvent = false; } - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + @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 Settings.System.putInt(mContext.getContentResolver(), Settings.System.SYSTEM_PROFILES_ENABLED, isChecked ? 1 : 0); @@ -72,10 +123,40 @@ public class ProfileEnabler implements CompoundButton.OnCheckedChangeListener { intent.putExtra( ProfileManager.EXTRA_PROFILES_STATE, isChecked ? - ProfileManager.PROFILES_STATE_ENABLED : - ProfileManager.PROFILES_STATE_DISABLED); + ProfileManager.PROFILES_STATE_ENABLED : + ProfileManager.PROFILES_STATE_DISABLED); mContext.sendBroadcast(intent); - } + class SettingsObserver extends ContentObserver { + SettingsObserver(Handler handler) { + super(handler); + } + + void observe() { + ContentResolver resolver = mContext.getContentResolver(); + resolver.registerContentObserver(Settings.System.getUriFor( + Settings.System.SYSTEM_PROFILES_ENABLED), 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(); + } + } } |