summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/profiles
diff options
context:
space:
mode:
authorDiogo Ferreira <defer@cyngn.com>2014-12-03 15:02:57 +0000
committerSteve Kondik <steve@cyngn.com>2015-11-13 09:01:09 +0100
commit9897751d02be1f51caeb5a8d9647c1f8ae7a03ff (patch)
tree3c98ece0a058da3a7d880d326210a5dd83167682 /src/com/android/settings/profiles
parent1bf1d26827d35dca4564c4195bf86bc629c1e93b (diff)
downloadpackages_apps_Settings-9897751d02be1f51caeb5a8d9647c1f8ae7a03ff.zip
packages_apps_Settings-9897751d02be1f51caeb5a8d9647c1f8ae7a03ff.tar.gz
packages_apps_Settings-9897751d02be1f51caeb5a8d9647c1f8ae7a03ff.tar.bz2
privacy: Actually set the blacklist preference
The preference was not being set, which caused this code to throw an NPE on devices without telephony when opening the privacy preferences. This bug also affects devices with telephony in that the preference doesn't update its text. I also got rid of the null check because the preference always exists, the null check is pointless and ended up hiding this bug. Change-Id: I95555d44349700a8f29a71a2f2ee9aedf419b49b Settings: Fix blacklist settings crash Change-Id: Idd261aa9f8e2867312aaaece26150671b177994c Settings: materialize Blacklist settings * Add a FAB * Add a (generic system) enable/disable switch bar Change-Id: I0984bf6769abef48cc7e0a643c2bdd73219954fc Signed-off-by: Roman Birg <roman@cyngn.com> Settings: add a way to open blacklist settings externally Opening the activity doesn't theme the switch bar - an alias works. Change-Id: I78efb382f4f1f4d208f122fedb0d71a86b515405 Signed-off-by: Roman Birg <roman@cyngn.com> blacklist: make it possible to unblacklist phone/messages via checkboxes Change-Id: I7d982d17818efe065e4e22f2a86a46493672584a Settings: fix blacklist settings crash On a device rotate, the MultiSelectListPreference would try and restore its state since the preferences aren't persisted. Clear the persisted flag so the MultiSelectPreference doesn't try and restore the states, as they get populated in onResume(). Change-Id: I0d0304e2367ade66e35ae7df432575d13ed0993e Signed-off-by: Roman Birg <roman@cyngn.com> Settings : Update blacklist strings Change-Id: I08ea4405f41f86a9eaf7bae74cbb61fa1fb0c8aa (cherry picked from commit 6d8cc2c697752a1357915ea88651b2fe220a54ba) Settings : Add input checks for blacklist input There can be situations where user enters invalid input. Ensure that is handled. Repro : 1. Add new blacklist entry 2. Enter / 3. Press ok 4. Enjoy crash issue-id: CYNGNOS-980 Change-Id: Ica90ac835f374569123e679ba39c3caa7179ef65 Settings : Fix blacklist delete number crash issue-id : HAM-795 Change-Id: I25306b3d4bead5487f039c3f51b631b1ef88b18d
Diffstat (limited to 'src/com/android/settings/profiles')
-rw-r--r--src/com/android/settings/profiles/ProfileEnabler.java158
-rw-r--r--src/com/android/settings/profiles/ProfilesList.java16
-rw-r--r--src/com/android/settings/profiles/ProfilesSettings.java19
3 files changed, 32 insertions, 161 deletions
diff --git a/src/com/android/settings/profiles/ProfileEnabler.java b/src/com/android/settings/profiles/ProfileEnabler.java
deleted file mode 100644
index 8bf450c..0000000
--- a/src/com/android/settings/profiles/ProfileEnabler.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * 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.profiles;
-
-import cyanogenmod.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.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 cyanogenmod.providers.CMSettings;
-
-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;
-
- private boolean mStateMachineEvent;
-
- public ProfileEnabler(Context context, SwitchBar switchBar) {
- mContext = context;
- mSwitchBar = switchBar;
- 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;
- }
-
- private void setSwitchState() {
- boolean enabled = CMSettings.System.getInt(mContext.getContentResolver(),
- CMSettings.System.SYSTEM_PROFILES_ENABLED, 1) == 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(),
- CMSettings.System.SYSTEM_PROFILES_ENABLED, isChecked ? 1 : 0);
-
- // Send a broadcast intent to the world
- // TODO Enabling or disabling profiles should be at ProfileManager, not here
- Intent intent=new Intent(ProfileManager.PROFILES_STATE_CHANGED_ACTION);
- intent.putExtra(
- ProfileManager.EXTRA_PROFILES_STATE,
- isChecked ?
- 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(CMSettings.System.getUriFor(
- CMSettings.System.SYSTEM_PROFILES_ENABLED), false, this);
- update();
- }
-
- void unobserve() {
- ContentResolver resolver = mContext.getContentResolver();
- resolver.unregisterContentObserver(this);
- }
-
- @Override
- public void onChange(boolean selfChange) {
- update();
- }
-
- public void update() {
- setSwitchState();
- }
- }
-}
diff --git a/src/com/android/settings/profiles/ProfilesList.java b/src/com/android/settings/profiles/ProfilesList.java
index 250051a..34e53a0 100644
--- a/src/com/android/settings/profiles/ProfilesList.java
+++ b/src/com/android/settings/profiles/ProfilesList.java
@@ -26,9 +26,12 @@ import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.View;
+import android.widget.ListView;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -59,6 +62,19 @@ public class ProfilesList extends SettingsPreferenceFragment implements
refreshList();
}
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ // Add a footer to avoid a situation where the FAB would cover the last
+ // item's options in a non-scrollable listview.
+ ListView listView = getListView();
+ View footer = LayoutInflater.from(getActivity())
+ .inflate(R.layout.empty_list_entry_footer, listView, false);
+ listView.addFooterView(footer);
+ listView.setFooterDividersEnabled(false);
+ footer.setOnClickListener(null);
+ }
+
public void refreshList() {
PreferenceScreen plist = getPreferenceScreen();
plist.removeAll();
diff --git a/src/com/android/settings/profiles/ProfilesSettings.java b/src/com/android/settings/profiles/ProfilesSettings.java
index 59078ae..cf6c161 100644
--- a/src/com/android/settings/profiles/ProfilesSettings.java
+++ b/src/com/android/settings/profiles/ProfilesSettings.java
@@ -50,11 +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 cyanogenmod.providers.CMSettings;
import java.util.UUID;
-public class ProfilesSettings extends SettingsPreferenceFragment {
+public class ProfilesSettings extends SettingsPreferenceFragment
+ implements BaseSystemSettingSwitchBar.SwitchBarChangeCallback {
private static final String TAG = "ProfilesSettings";
public static final String EXTRA_PROFILE = "Profile";
@@ -67,7 +69,7 @@ public class ProfilesSettings extends SettingsPreferenceFragment {
private final BroadcastReceiver mReceiver;
private ProfileManager mProfileManager;
- private ProfileEnabler mProfileEnabler;
+ private BaseSystemSettingSwitchBar mProfileEnabler;
private ViewPager mViewPager;
private TextView mEmptyText;
@@ -156,7 +158,8 @@ public class ProfilesSettings extends SettingsPreferenceFragment {
public void onStart() {
super.onStart();
final SettingsActivity activity = (SettingsActivity) getActivity();
- mProfileEnabler = new ProfileEnabler(activity, activity.getSwitchBar());
+ mProfileEnabler = new BaseSystemSettingSwitchBar(activity, activity.getSwitchBar(),
+ CMSettings.System.SYSTEM_PROFILES_ENABLED, true, this);
}
@Override
@@ -231,6 +234,16 @@ public class ProfilesSettings extends SettingsPreferenceFragment {
mEmptyText.setVisibility(mEnabled ? View.GONE : View.VISIBLE);
}
+ @Override
+ public void onEnablerChanged(boolean isEnabled) {
+ Intent intent = new Intent(ProfileManager.PROFILES_STATE_CHANGED_ACTION);
+ intent.putExtra(ProfileManager.EXTRA_PROFILES_STATE,
+ isEnabled ?
+ ProfileManager.PROFILES_STATE_ENABLED :
+ ProfileManager.PROFILES_STATE_DISABLED);
+ getActivity().sendBroadcast(intent);
+ }
+
class ProfilesPagerAdapter extends FragmentStatePagerAdapter {
Fragment[] frags = { new ProfilesList() };
String[] titles = { getString(R.string.profile_profiles_manage) };