diff --git a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java index 71a4fe0..2c93a79 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java @@ -588,6 +588,11 @@ public class DummyActivity extends Activity { } // TODO: Cases for other types SettingsManager.getInstance().applyAll(); + if (mIsProfileOwner) { + // Refresh profile policies because + // settings may have been changed + Utility.enforceWorkProfilePolicies(this); + } finish(); } } diff --git a/app/src/main/java/net/typeblog/shelter/ui/SettingsFragment.java b/app/src/main/java/net/typeblog/shelter/ui/SettingsFragment.java index 8cb07a9..dc0f274 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SettingsFragment.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SettingsFragment.java @@ -32,6 +32,7 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer private static final String SETTINGS_PATREON = "settings_patreon"; private static final String SETTINGS_CROSS_PROFILE_FILE_CHOOSER = "settings_cross_profile_file_chooser"; private static final String SETTINGS_CAMERA_PROXY = "settings_camera_proxy"; + private static final String SETTINGS_BLOCK_CONTACTS_SEARCHING = "settings_block_contacts_searching"; private static final String SETTINGS_AUTO_FREEZE_SERVICE = "settings_auto_freeze_service"; private static final String SETTINGS_AUTO_FREEZE_DELAY = "settings_auto_freeze_delay"; private static final String SETTINGS_SKIP_FOREGROUND = "settings_dont_freeze_foreground"; @@ -41,6 +42,7 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer private CheckBoxPreference mPrefCrossProfileFileChooser = null; private CheckBoxPreference mPrefCameraProxy = null; + private CheckBoxPreference mPrefBlockContactsSearching = null; private CheckBoxPreference mPrefAutoFreezeService = null; private CheckBoxPreference mPrefSkipForeground = null; @@ -78,6 +80,9 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer mPrefCameraProxy = (CheckBoxPreference) findPreference(SETTINGS_CAMERA_PROXY); mPrefCameraProxy.setChecked(mManager.getCameraProxyEnabled()); mPrefCameraProxy.setOnPreferenceChangeListener(this); + mPrefBlockContactsSearching = (CheckBoxPreference) findPreference(SETTINGS_BLOCK_CONTACTS_SEARCHING); + mPrefBlockContactsSearching.setChecked(mManager.getBlockContactsSearchingEnabled()); + mPrefBlockContactsSearching.setOnPreferenceChangeListener(this); // === Services === mPrefAutoFreezeService = (CheckBoxPreference) findPreference(SETTINGS_AUTO_FREEZE_SERVICE); @@ -185,6 +190,9 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer } else if (preference == mPrefCameraProxy) { mManager.setCameraProxyEnabled(((boolean) newState)); return true; + } else if (preference == mPrefBlockContactsSearching) { + mManager.setBlockContactsSearchingEnabled((boolean) newState); + return true; } else if (preference == mPrefAutoFreezeService) { mManager.setAutoFreezeServiceEnabled((boolean) newState); return true; diff --git a/app/src/main/java/net/typeblog/shelter/util/LocalStorageManager.java b/app/src/main/java/net/typeblog/shelter/util/LocalStorageManager.java index 5a460be..0753a1c 100644 --- a/app/src/main/java/net/typeblog/shelter/util/LocalStorageManager.java +++ b/app/src/main/java/net/typeblog/shelter/util/LocalStorageManager.java @@ -17,6 +17,7 @@ public class LocalStorageManager { public static final String PREF_DONT_FREEZE_FOREGROUND = "dont_freeze_foreground"; public static final String PREF_AUTO_FREEZE_DELAY = "auto_freeze_delay"; public static final String PREF_CAMERA_PROXY = "camera_proxy"; + public static final String PREF_BLOCK_CONTACTS_SEARCHING = "block_contacts_searching"; private static final String LIST_DIVIDER = ","; diff --git a/app/src/main/java/net/typeblog/shelter/util/SettingsManager.java b/app/src/main/java/net/typeblog/shelter/util/SettingsManager.java index 88bc63f..e72b7cb 100644 --- a/app/src/main/java/net/typeblog/shelter/util/SettingsManager.java +++ b/app/src/main/java/net/typeblog/shelter/util/SettingsManager.java @@ -92,6 +92,17 @@ public class SettingsManager { return mStorage.getBoolean(LocalStorageManager.PREF_CAMERA_PROXY); } + // Set the blocked state of cross-profile contacts searching + public void setBlockContactsSearchingEnabled(boolean enabled) { + mStorage.setBoolean(LocalStorageManager.PREF_BLOCK_CONTACTS_SEARCHING, enabled); + syncSettingsToProfileBool(LocalStorageManager.PREF_BLOCK_CONTACTS_SEARCHING, enabled); + } + + // Get the blocked state of cross-profile contacts searching + public boolean getBlockContactsSearchingEnabled() { + return mStorage.getBoolean(LocalStorageManager.PREF_BLOCK_CONTACTS_SEARCHING); + } + // Set the enabled state of the auto freeze service // This does NOT need to be synchronized nor applied across profile public void setAutoFreezeServiceEnabled(boolean enabled) { diff --git a/app/src/main/java/net/typeblog/shelter/util/Utility.java b/app/src/main/java/net/typeblog/shelter/util/Utility.java index f8f35d3..8a48849 100644 --- a/app/src/main/java/net/typeblog/shelter/util/Utility.java +++ b/app/src/main/java/net/typeblog/shelter/util/Utility.java @@ -199,6 +199,10 @@ public class Utility { browsableDefaultIntentFilter, DevicePolicyManager.FLAG_PARENT_CAN_ACCESS_MANAGED); + // Block contacts searching optionally + manager.setCrossProfileContactsSearchDisabled(adminComponent, + SettingsManager.getInstance().getBlockContactsSearchingEnabled()); + manager.setProfileEnabled(adminComponent); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ae67c98..a95a5dc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -55,6 +55,8 @@ When enabled, you\'ll be able to browse / view / pick / copy files in Shelter from main profile and vice-versa, ONLY through Documents UI (named Files or Documents on your launcher) or apps with Documents UI support (they only gain temporary access to files you choose in Documents UI), while still pertaining the filesystem isolation. Image Chooser as Fake Camera Present a fake camera app to other apps, allowing you to choose an arbitrary image from Documents UI (and File Shuttle if enabled) as the taken picture. This enables File Shuttle for any app that supports invoking other camera apps to take a picture, even if they don\'t support Documents UI natively. + Block Contacts Searching + Deny access from main profile to contacts inside work profile. Services Auto Freeze Service When the screen is locked, automatically freeze apps launched from \"Unfreeze & Launch Shortcut\". diff --git a/app/src/main/res/xml/preferences_settings.xml b/app/src/main/res/xml/preferences_settings.xml index 0fdf6a6..3365308 100644 --- a/app/src/main/res/xml/preferences_settings.xml +++ b/app/src/main/res/xml/preferences_settings.xml @@ -15,6 +15,11 @@ android:title="@string/settings_camera_proxy" android:summary="@string/settings_camera_proxy_desc" /> + +