Remove policy transparency for cross-profile calendar setting

We will likely deprecate this setting in the next release, to be
replaced by usage of 'connected work and personal apps'. However, we are
keeping it in this release as it's still possible that a lightweight
calendar access API could be useful, if the admin and user approvals are
combined.

For now, the error message that refers to cross-profile calendar when
the setting is disabled is confusing admins, since we're not
recommending usage of this API at this time.

Remove the setting when it is disabled, rather than showing policy
transparency.

Fixes: 143477431
Test: manual
Change-Id: I65573a5ba892e12a4dabcdf23541f33516db0a8a
This commit is contained in:
Alex Kershaw
2020-03-31 11:37:53 +01:00
parent ef28e9b75f
commit c364f5d95d
6 changed files with 0 additions and 159 deletions

View File

@@ -10545,9 +10545,6 @@
<string name="cross_profile_calendar_title">Cross-profile calendar</string> <string name="cross_profile_calendar_title">Cross-profile calendar</string>
<!-- [CHAR LIMIT=NONE] Setting description. If the user turns on this setting, they can see their work events on their personal calendar. --> <!-- [CHAR LIMIT=NONE] Setting description. If the user turns on this setting, they can see their work events on their personal calendar. -->
<string name="cross_profile_calendar_summary">Show work events on your personal calendar</string> <string name="cross_profile_calendar_summary">Show work events on your personal calendar</string>
<!-- [CHAR LIMIT=NONE] The preference summary when cross-profile calendar is restricted. -->
<string name="cross_profile_calendar_restricted_summary">Your organization doesn\u2019t allow personal apps to access your work calendar</string>
<!-- Time in hours --> <!-- Time in hours -->
<plurals name="hours"> <plurals name="hours">

View File

@@ -32,18 +32,10 @@
settings:useAdditionalSummary="true" settings:useAdditionalSummary="true"
settings:controller="com.android.settings.accounts.ContactSearchPreferenceController"/> settings:controller="com.android.settings.accounts.ContactSearchPreferenceController"/>
<!-- Only one of these preferences will be visible at a time, depending on
CrossProfileCalendarPreferenceController#isCrossProfileCalendarDisallowedByAdmin -->
<SwitchPreference <SwitchPreference
android:key="cross_profile_calendar" android:key="cross_profile_calendar"
android:summary="@string/cross_profile_calendar_summary" android:summary="@string/cross_profile_calendar_summary"
android:title="@string/cross_profile_calendar_title" android:title="@string/cross_profile_calendar_title"
settings:controller="com.android.settings.accounts.CrossProfileCalendarPreferenceController"/> settings:controller="com.android.settings.accounts.CrossProfileCalendarPreferenceController"/>
<Preference
android:key="cross_profile_calendar_disabled"
android:summary="@string/cross_profile_calendar_restricted_summary"
android:title="@string/cross_profile_calendar_title"
android:enabled="false"
settings:controller="com.android.settings.accounts.CrossProfileCalendarDisabledPreferenceController"/>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -1,47 +0,0 @@
/*
* Copyright (C) 2019 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.accounts;
import static com.android.settings.accounts.CrossProfileCalendarPreferenceController.isCrossProfileCalendarDisallowedByAdmin;
import android.content.Context;
import android.os.UserHandle;
import com.android.settings.core.BasePreferenceController;
public class CrossProfileCalendarDisabledPreferenceController extends BasePreferenceController {
private UserHandle mManagedUser;
public void setManagedUser(UserHandle managedUser) {
mManagedUser = managedUser;
}
public CrossProfileCalendarDisabledPreferenceController(Context context,
String preferenceKey) {
super(context, preferenceKey);
}
@Override
public int getAvailabilityStatus() {
if (mManagedUser != null
&& isCrossProfileCalendarDisallowedByAdmin(
mContext, mManagedUser.getIdentifier())) {
return AVAILABLE;
}
return DISABLED_FOR_USER;
}
}

View File

@@ -79,7 +79,6 @@ public class ManagedProfileSettings extends DashboardFragment {
use(WorkModePreferenceController.class).setManagedUser(mManagedUser); use(WorkModePreferenceController.class).setManagedUser(mManagedUser);
use(ContactSearchPreferenceController.class).setManagedUser(mManagedUser); use(ContactSearchPreferenceController.class).setManagedUser(mManagedUser);
use(CrossProfileCalendarPreferenceController.class).setManagedUser(mManagedUser); use(CrossProfileCalendarPreferenceController.class).setManagedUser(mManagedUser);
use(CrossProfileCalendarDisabledPreferenceController.class).setManagedUser(mManagedUser);
} }
@Override @Override

View File

@@ -1,99 +0,0 @@
/*
* Copyright (C) 2018 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.accounts;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.DISABLED_FOR_USER;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.robolectric.RuntimeEnvironment.application;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.os.UserHandle;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowDevicePolicyManager;
import java.util.Collections;
@RunWith(RobolectricTestRunner.class)
public class CrossProfileCalendarDisabledPreferenceControllerTest {
private static final String PREF_KEY = "cross_profile_calendar_disabled";
private static final int MANAGED_USER_ID = 10;
private static final String TEST_PACKAGE_NAME = "com.test";
private static final ComponentName TEST_COMPONENT_NAME = new ComponentName("test", "test");
@Mock
private UserHandle mManagedUser;
private Context mContext;
private CrossProfileCalendarDisabledPreferenceController mController;
private ShadowDevicePolicyManager mDpm;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mController = new CrossProfileCalendarDisabledPreferenceController(mContext, PREF_KEY);
mController.setManagedUser(mManagedUser);
mDpm = Shadows.shadowOf(application.getSystemService(DevicePolicyManager.class));
when(mManagedUser.getIdentifier()).thenReturn(MANAGED_USER_ID);
doReturn(mContext).when(mContext).createPackageContextAsUser(
any(String.class), anyInt(), any(UserHandle.class));
}
@Test
public void getAvailabilityStatus_noPackageAllowed_shouldBeAvailable() {
mDpm.setProfileOwner(TEST_COMPONENT_NAME);
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
public void getAvailabilityStatus_somePackagesAllowed_shouldBeDisabledForUser() {
mDpm.setProfileOwner(TEST_COMPONENT_NAME);
mDpm.setCrossProfileCalendarPackages(TEST_COMPONENT_NAME,
Collections.singleton(TEST_PACKAGE_NAME));
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_FOR_USER);
}
@Test
public void getAvailabilityStatus_allPackagesAllowed_shouldBeDisabledForUser() {
mDpm.setProfileOwner(TEST_COMPONENT_NAME);
mDpm.setCrossProfileCalendarPackages(TEST_COMPONENT_NAME, null);
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_FOR_USER);
}
}

View File

@@ -150,7 +150,6 @@ Cool color temperature;color_temperature
Copyright;copyright Copyright;copyright
Correction mode;type Correction mode;type
Cross-profile calendar;cross_profile_calendar Cross-profile calendar;cross_profile_calendar
Cross-profile calendar;cross_profile_calendar_disabled
Current screen saver;current_screensaver Current screen saver;current_screensaver
Custom;zen_custom Custom;zen_custom
Custom restrictions;zen_mode_block_settings_page Custom restrictions;zen_mode_block_settings_page