Add Screen pinning back to settings
Adds a basic screen for screen pinning (previously lock-to-app) to settings that describes the feature and allows it to be turned on and off. Bug: 16378448 Depends on Ide333463f86310eacb7a1d8b6dc7b1aea8722713 for Settings constant Change-Id: Id3ef8471794aa01de20efeb947bed95c50d6b954
This commit is contained in:
39
res/layout/screen_pinning_instructions.xml
Normal file
39
res/layout/screen_pinning_instructions.xml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?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>
|
@@ -183,4 +183,7 @@
|
|||||||
<!-- CryptKeeper pattern size for tablet -->
|
<!-- CryptKeeper pattern size for tablet -->
|
||||||
<dimen name="crypt_keeper_pattern_size">354dip</dimen>
|
<dimen name="crypt_keeper_pattern_size">354dip</dimen>
|
||||||
|
|
||||||
|
<!-- Screen pinning textview paddings -->
|
||||||
|
<dimen name="screen_pinning_textview_padding">40dp</dimen>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -5768,4 +5768,10 @@
|
|||||||
<!-- Switch On/Off -->
|
<!-- Switch On/Off -->
|
||||||
<string name="switch_on_text">On</string>
|
<string name="switch_on_text">On</string>
|
||||||
<string name="switch_off_text">Off</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>
|
</resources>
|
||||||
|
@@ -23,10 +23,13 @@
|
|||||||
<Preference android:key="sim_lock_settings"
|
<Preference android:key="sim_lock_settings"
|
||||||
android:title="@string/sim_lock_settings_category"
|
android:title="@string/sim_lock_settings_category"
|
||||||
android:persistent="false">
|
android:persistent="false">
|
||||||
|
|
||||||
<intent android:action="android.intent.action.MAIN"
|
<intent android:action="android.intent.action.MAIN"
|
||||||
android:targetPackage="com.android.settings"
|
android:targetPackage="com.android.settings"
|
||||||
android:targetClass="com.android.settings.IccLockSettings"/>
|
android:targetClass="com.android.settings.IccLockSettings"/>
|
||||||
|
|
||||||
</Preference>
|
</Preference>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/security_passwords_title"
|
<PreferenceCategory android:title="@string/security_passwords_title"
|
||||||
@@ -35,6 +38,7 @@
|
|||||||
<CheckBoxPreference android:key="show_password"
|
<CheckBoxPreference android:key="show_password"
|
||||||
android:title="@string/show_password"
|
android:title="@string/show_password"
|
||||||
android:persistent="false"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:key="device_admin_category"
|
<PreferenceCategory android:key="device_admin_category"
|
||||||
@@ -58,11 +62,13 @@
|
|||||||
android:summaryOff="@string/verify_applications_summary"
|
android:summaryOff="@string/verify_applications_summary"
|
||||||
android:summaryOn="@string/verify_applications_summary"
|
android:summaryOn="@string/verify_applications_summary"
|
||||||
android:persistent="false" />
|
android:persistent="false" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:key="credentials_management"
|
<PreferenceCategory android:key="credentials_management"
|
||||||
android:title="@string/credentials_title"
|
android:title="@string/credentials_title"
|
||||||
android:persistent="false">
|
android:persistent="false">
|
||||||
|
|
||||||
<Preference android:key="credential_storage_type"
|
<Preference android:key="credential_storage_type"
|
||||||
android:title="@string/credential_storage_type"
|
android:title="@string/credential_storage_type"
|
||||||
style="?android:attr/preferenceInformationStyle"
|
style="?android:attr/preferenceInformationStyle"
|
||||||
@@ -78,28 +84,42 @@
|
|||||||
android:title="@string/credentials_install"
|
android:title="@string/credentials_install"
|
||||||
android:summary="@string/credentials_install_summary"
|
android:summary="@string/credentials_install_summary"
|
||||||
android:persistent="false">
|
android:persistent="false">
|
||||||
|
|
||||||
<intent android:action="android.credentials.INSTALL"
|
<intent android:action="android.credentials.INSTALL"
|
||||||
android:targetPackage="com.android.certinstaller"
|
android:targetPackage="com.android.certinstaller"
|
||||||
android:targetClass="com.android.certinstaller.CertInstallerMain"/>
|
android:targetClass="com.android.certinstaller.CertInstallerMain"/>
|
||||||
|
|
||||||
</Preference>
|
</Preference>
|
||||||
|
|
||||||
<Preference android:key="credentials_reset"
|
<Preference android:key="credentials_reset"
|
||||||
android:title="@string/credentials_reset"
|
android:title="@string/credentials_reset"
|
||||||
android:summary="@string/credentials_reset_summary"
|
android:summary="@string/credentials_reset_summary"
|
||||||
android:persistent="false">
|
android:persistent="false">
|
||||||
|
|
||||||
<intent android:action="com.android.credentials.RESET"
|
<intent android:action="com.android.credentials.RESET"
|
||||||
android:targetPackage="com.android.settings"
|
android:targetPackage="com.android.settings"
|
||||||
android:targetClass="com.android.settings.CredentialStorage"/>
|
android:targetClass="com.android.settings.CredentialStorage"/>
|
||||||
|
|
||||||
</Preference>
|
</Preference>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:key="advanced_security"
|
<PreferenceCategory android:key="advanced_security"
|
||||||
android:title="@string/advanced_security_title"
|
android:title="@string/advanced_security_title"
|
||||||
android:persistent="false">
|
android:persistent="false">
|
||||||
|
|
||||||
<Preference android:key="manage_trust_agents"
|
<Preference android:key="manage_trust_agents"
|
||||||
android:title="@string/manage_trust_agents"
|
android:title="@string/manage_trust_agents"
|
||||||
android:summary="@string/manage_trust_agents_summary"
|
android:summary="@string/manage_trust_agents_summary"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:fragment="com.android.settings.AdvancedSecuritySettings"/>
|
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>
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
118
src/com/android/settings/ScreenPinningSettings.java
Normal file
118
src/com/android/settings/ScreenPinningSettings.java
Normal file
@@ -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<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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@@ -17,8 +17,6 @@
|
|||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
|
|
||||||
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
@@ -41,6 +39,7 @@ import android.preference.PreferenceGroup;
|
|||||||
import android.preference.PreferenceScreen;
|
import android.preference.PreferenceScreen;
|
||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.provider.Settings.SettingNotFoundException;
|
||||||
import android.security.KeyStore;
|
import android.security.KeyStore;
|
||||||
import android.service.trust.TrustAgentService;
|
import android.service.trust.TrustAgentService;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
@@ -55,6 +54,8 @@ import com.android.settings.search.SearchIndexableRaw;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gesture lock pattern settings.
|
* 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 KEY_CREDENTIALS_MANAGER = "credentials_management";
|
||||||
private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
|
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_TRUST_AGENT = "trust_agent";
|
||||||
|
private static final String KEY_SCREEN_PINNING = "screen_pinning_settings";
|
||||||
|
|
||||||
private DevicePolicyManager mDPM;
|
private DevicePolicyManager mDPM;
|
||||||
|
|
||||||
@@ -296,6 +298,15 @@ public class SecuritySettings extends SettingsPreferenceFragment
|
|||||||
root.findPreference(KEY_SIM_LOCK).setEnabled(false);
|
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
|
// Show password
|
||||||
mShowPassword = (CheckBoxPreference) root.findPreference(KEY_SHOW_PASSWORD);
|
mShowPassword = (CheckBoxPreference) root.findPreference(KEY_SHOW_PASSWORD);
|
||||||
|
@@ -23,6 +23,7 @@ import com.android.settings.DevelopmentSettings;
|
|||||||
import com.android.settings.DeviceInfoSettings;
|
import com.android.settings.DeviceInfoSettings;
|
||||||
import com.android.settings.DisplaySettings;
|
import com.android.settings.DisplaySettings;
|
||||||
import com.android.settings.HomeSettings;
|
import com.android.settings.HomeSettings;
|
||||||
|
import com.android.settings.ScreenPinningSettings;
|
||||||
import com.android.settings.PrivacySettings;
|
import com.android.settings.PrivacySettings;
|
||||||
import com.android.settings.SecuritySettings;
|
import com.android.settings.SecuritySettings;
|
||||||
import com.android.settings.WallpaperTypeSettings;
|
import com.android.settings.WallpaperTypeSettings;
|
||||||
@@ -129,6 +130,7 @@ public final class Ranking {
|
|||||||
// Security
|
// Security
|
||||||
sRankMap.put(SecuritySettings.class.getName(), RANK_SECURITY);
|
sRankMap.put(SecuritySettings.class.getName(), RANK_SECURITY);
|
||||||
sRankMap.put(ChooseLockGeneric.ChooseLockGenericFragment.class.getName(), RANK_SECURITY);
|
sRankMap.put(ChooseLockGeneric.ChooseLockGenericFragment.class.getName(), RANK_SECURITY);
|
||||||
|
sRankMap.put(ScreenPinningSettings.class.getName(), RANK_SECURITY);
|
||||||
|
|
||||||
// IMEs
|
// IMEs
|
||||||
sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
|
sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
|
||||||
|
@@ -25,6 +25,7 @@ import com.android.settings.DevelopmentSettings;
|
|||||||
import com.android.settings.DeviceInfoSettings;
|
import com.android.settings.DeviceInfoSettings;
|
||||||
import com.android.settings.DisplaySettings;
|
import com.android.settings.DisplaySettings;
|
||||||
import com.android.settings.HomeSettings;
|
import com.android.settings.HomeSettings;
|
||||||
|
import com.android.settings.ScreenPinningSettings;
|
||||||
import com.android.settings.PrivacySettings;
|
import com.android.settings.PrivacySettings;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SecuritySettings;
|
import com.android.settings.SecuritySettings;
|
||||||
@@ -207,6 +208,13 @@ public final class SearchIndexableResources {
|
|||||||
ChooseLockGeneric.ChooseLockGenericFragment.class.getName(),
|
ChooseLockGeneric.ChooseLockGenericFragment.class.getName(),
|
||||||
R.drawable.ic_settings_security));
|
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(),
|
sResMap.put(InputMethodAndLanguageSettings.class.getName(),
|
||||||
new SearchIndexableResource(
|
new SearchIndexableResource(
|
||||||
Ranking.getRankForClassName(InputMethodAndLanguageSettings.class.getName()),
|
Ranking.getRankForClassName(InputMethodAndLanguageSettings.class.getName()),
|
||||||
|
Reference in New Issue
Block a user