--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/instructions_area"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingStart="@dimen/screen_margin_sides"
+ android:paddingEnd="@dimen/screen_margin_sides">
+
+ <TextView
+ android:id="@+id/screen_pinning_description"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:paddingTop="@dimen/screen_pinning_textview_padding"
+ android:text="@string/screen_pinning_description"
+ android:textAppearance="@style/TextAppearance.Medium"
+ />
+
+</LinearLayout>
<!-- CryptKeeper pattern size for tablet -->
<dimen name="crypt_keeper_pattern_size">354dip</dimen>
+ <!-- Screen pinning textview paddings -->
+ <dimen name="screen_pinning_textview_padding">40dp</dimen>
+
</resources>
<!-- Switch On/Off -->
<string name="switch_on_text">On</string>
<string name="switch_off_text">Off</string>
+
+ <!-- [CHAR LIMIT=28] Screen pinning title -->
+ <string name="screen_pinning_title">Screen pinning</string>
+ <!-- [CHAR LIMIT=300] Screen pinning description -->
+ <string name="screen_pinning_description">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.</string>
+
</resources>
<Preference android:key="sim_lock_settings"
android:title="@string/sim_lock_settings_category"
android:persistent="false">
+
<intent android:action="android.intent.action.MAIN"
android:targetPackage="com.android.settings"
android:targetClass="com.android.settings.IccLockSettings"/>
+
</Preference>
+
</PreferenceCategory>
<PreferenceCategory android:title="@string/security_passwords_title"
<CheckBoxPreference android:key="show_password"
android:title="@string/show_password"
android:persistent="false"/>
+
</PreferenceCategory>
<PreferenceCategory android:key="device_admin_category"
android:summaryOff="@string/verify_applications_summary"
android:summaryOn="@string/verify_applications_summary"
android:persistent="false" />
+
</PreferenceCategory>
<PreferenceCategory android:key="credentials_management"
android:title="@string/credentials_title"
android:persistent="false">
+
<Preference android:key="credential_storage_type"
android:title="@string/credential_storage_type"
style="?android:attr/preferenceInformationStyle"
android:title="@string/credentials_install"
android:summary="@string/credentials_install_summary"
android:persistent="false">
+
<intent android:action="android.credentials.INSTALL"
android:targetPackage="com.android.certinstaller"
android:targetClass="com.android.certinstaller.CertInstallerMain"/>
+
</Preference>
<Preference android:key="credentials_reset"
android:title="@string/credentials_reset"
android:summary="@string/credentials_reset_summary"
android:persistent="false">
+
<intent android:action="com.android.credentials.RESET"
android:targetPackage="com.android.settings"
android:targetClass="com.android.settings.CredentialStorage"/>
+
</Preference>
+
</PreferenceCategory>
<PreferenceCategory android:key="advanced_security"
android:title="@string/advanced_security_title"
android:persistent="false">
+
<Preference android:key="manage_trust_agents"
android:title="@string/manage_trust_agents"
android:summary="@string/manage_trust_agents_summary"
android:persistent="false"
android:fragment="com.android.settings.AdvancedSecuritySettings"/>
+
+ <PreferenceScreen
+ android:key="screen_pinning_settings"
+ android:title="@string/screen_pinning_title"
+ android:summary="@string/switch_off_text"
+ android:fragment="com.android.settings.ScreenPinningSettings"/>
+
</PreferenceCategory>
+
</PreferenceScreen>
--- /dev/null
+/*
+ * 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<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+ final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+
+ 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;
+ }
+ };
+}
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;
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;
import java.util.ArrayList;
import java.util.List;
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+
/**
* Gesture lock pattern settings.
*/
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;
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);
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;
// 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);
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;
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()),