diff --git a/res/layout/screen_pinning_instructions.xml b/res/layout/screen_pinning_instructions.xml
new file mode 100644
index 00000000000..22b2b37aa31
--- /dev/null
+++ b/res/layout/screen_pinning_instructions.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 2064e1951fc..b7b2af0b8d0 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -183,4 +183,7 @@
354dip
+
+ 40dp
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 90fcf5c4f57..a16c7912778 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5768,4 +5768,10 @@
On
Off
+
+
+ Screen pinning
+
+ When this setting is turned on, you can put the device in a state that keeps the current screen in view.\n\nTo pin a screen:\n\n1. Turn this setting on.\n\n2. Open an app.\n\n3. Touch the Recents button.\n\n4. Touch the pin icon.
+
diff --git a/res/xml/security_settings_misc.xml b/res/xml/security_settings_misc.xml
index c8f3e02916f..1fa8b9ae5df 100644
--- a/res/xml/security_settings_misc.xml
+++ b/res/xml/security_settings_misc.xml
@@ -23,10 +23,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/com/android/settings/ScreenPinningSettings.java b/src/com/android/settings/ScreenPinningSettings.java
new file mode 100644
index 00000000000..ada5b178424
--- /dev/null
+++ b/src/com/android/settings/ScreenPinningSettings.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2014 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 java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Switch;
+
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
+import com.android.settings.widget.SwitchBar;
+
+/**
+ * Screen pinning settings.
+ */
+public class ScreenPinningSettings extends SettingsPreferenceFragment
+ implements SwitchBar.OnSwitchChangeListener, Indexable {
+
+ private SwitchBar mSwitchBar;
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ final SettingsActivity activity = (SettingsActivity) getActivity();
+
+ mSwitchBar = activity.getSwitchBar();
+ mSwitchBar.addOnSwitchChangeListener(this);
+ mSwitchBar.show();
+ mSwitchBar.setChecked(isLockToAppEnabled());
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+
+ mSwitchBar.removeOnSwitchChangeListener(this);
+ mSwitchBar.hide();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.screen_pinning_instructions, null);
+ }
+
+ private boolean isLockToAppEnabled() {
+ try {
+ return Settings.System.getInt(getContentResolver(), Settings.System.LOCK_TO_APP_ENABLED)
+ != 0;
+ } catch (SettingNotFoundException e) {
+ return false;
+ }
+ }
+
+ private void setLockToAppEnabled(boolean isEnabled) {
+ Settings.System.putInt(getContentResolver(), Settings.System.LOCK_TO_APP_ENABLED,
+ isEnabled ? 1 : 0);
+ }
+
+ /**
+ * Listens to the state change of the lock-to-app master switch.
+ */
+ @Override
+ public void onSwitchChanged(Switch switchView, boolean isChecked) {
+ setLockToAppEnabled(isChecked);
+ }
+
+ /**
+ * For search
+ */
+ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List getRawDataToIndex(Context context, boolean enabled) {
+ final List result = new ArrayList();
+
+ final Resources res = context.getResources();
+
+ // Add fragment title
+ SearchIndexableRaw data = new SearchIndexableRaw(context);
+ data.title = res.getString(R.string.screen_pinning_title);
+ data.screenTitle = res.getString(R.string.screen_pinning_title);
+ result.add(data);
+
+ // Screen pinning description.
+ data = new SearchIndexableRaw(context);
+ data.title = res.getString(R.string.screen_pinning_description);
+ data.screenTitle = res.getString(R.string.screen_pinning_title);
+ result.add(data);
+
+ return result;
+ }
+ };
+}
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 6961b2a2e8e..30fe74a3ae4 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -17,8 +17,6 @@
package com.android.settings;
-import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-
import android.app.Activity;
import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
@@ -41,6 +39,7 @@ import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
import android.security.KeyStore;
import android.service.trust.TrustAgentService;
import android.telephony.TelephonyManager;
@@ -55,6 +54,8 @@ import com.android.settings.search.SearchIndexableRaw;
import java.util.ArrayList;
import java.util.List;
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+
/**
* Gesture lock pattern settings.
*/
@@ -93,6 +94,7 @@ public class SecuritySettings extends SettingsPreferenceFragment
private static final String KEY_CREDENTIALS_MANAGER = "credentials_management";
private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
private static final String KEY_TRUST_AGENT = "trust_agent";
+ private static final String KEY_SCREEN_PINNING = "screen_pinning_settings";
private DevicePolicyManager mDPM;
@@ -296,6 +298,15 @@ public class SecuritySettings extends SettingsPreferenceFragment
root.findPreference(KEY_SIM_LOCK).setEnabled(false);
}
}
+ try {
+ if (Settings.System.getInt(getContentResolver(), Settings.System.LOCK_TO_APP_ENABLED)
+ != 0) {
+ root.findPreference(KEY_SCREEN_PINNING).setSummary(
+ getResources().getString(R.string.switch_on_text));
+ }
+ } catch (SettingNotFoundException e) {
+ Log.w(TAG, "No Lock-to-app enabled setting", e);
+ }
// Show password
mShowPassword = (CheckBoxPreference) root.findPreference(KEY_SHOW_PASSWORD);
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index ba38d5358e2..96e057e0d63 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -23,6 +23,7 @@ import com.android.settings.DevelopmentSettings;
import com.android.settings.DeviceInfoSettings;
import com.android.settings.DisplaySettings;
import com.android.settings.HomeSettings;
+import com.android.settings.ScreenPinningSettings;
import com.android.settings.PrivacySettings;
import com.android.settings.SecuritySettings;
import com.android.settings.WallpaperTypeSettings;
@@ -129,6 +130,7 @@ public final class Ranking {
// Security
sRankMap.put(SecuritySettings.class.getName(), RANK_SECURITY);
sRankMap.put(ChooseLockGeneric.ChooseLockGenericFragment.class.getName(), RANK_SECURITY);
+ sRankMap.put(ScreenPinningSettings.class.getName(), RANK_SECURITY);
// IMEs
sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index e2b1d489a0d..228381f0843 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -25,6 +25,7 @@ import com.android.settings.DevelopmentSettings;
import com.android.settings.DeviceInfoSettings;
import com.android.settings.DisplaySettings;
import com.android.settings.HomeSettings;
+import com.android.settings.ScreenPinningSettings;
import com.android.settings.PrivacySettings;
import com.android.settings.R;
import com.android.settings.SecuritySettings;
@@ -207,6 +208,13 @@ public final class SearchIndexableResources {
ChooseLockGeneric.ChooseLockGenericFragment.class.getName(),
R.drawable.ic_settings_security));
+ sResMap.put(ScreenPinningSettings.class.getName(),
+ new SearchIndexableResource(
+ Ranking.getRankForClassName(ScreenPinningSettings.class.getName()),
+ NO_DATA_RES_ID,
+ ScreenPinningSettings.class.getName(),
+ R.drawable.ic_settings_security));
+
sResMap.put(InputMethodAndLanguageSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(InputMethodAndLanguageSettings.class.getName()),