diff --git a/res/values/strings.xml b/res/values/strings.xml index 11aa84cbd9f..12fb356ac04 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8272,7 +8272,7 @@ Time and data spent in each app on your device - Network traffic logs on your device + Most recent network traffic log Most recent bug report diff --git a/res/xml/enterprise_privacy_settings.xml b/res/xml/enterprise_privacy_settings.xml index e6246c2c43b..a8deb911b3e 100644 --- a/res/xml/enterprise_privacy_settings.xml +++ b/res/xml/enterprise_privacy_settings.xml @@ -27,7 +27,6 @@ @@ -36,12 +35,12 @@ android:title="@string/enterprise_privacy_installed_packages" settings:multiLine="true"/> @@ -57,58 +57,70 @@ diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java b/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java index ed9dd947079..e988fdadf19 100644 --- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java +++ b/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java @@ -80,6 +80,20 @@ public interface DevicePolicyManagerWrapper { int getPermissionGrantState(@Nullable ComponentName admin, String packageName, String permission); + /** + * Calls {@code DevicePolicyManager.isSecurityLoggingEnabled()}. + * + * @see android.app.admin.DevicePolicyManager#isSecurityLoggingEnabled + */ + boolean isSecurityLoggingEnabled(@Nullable ComponentName admin); + + /** + * Calls {@code DevicePolicyManager.isNetworkLoggingEnabled()}. + * + * @see android.app.admin.DevicePolicyManager#isNetworkLoggingEnabled + */ + boolean isNetworkLoggingEnabled(@Nullable ComponentName admin); + /** * Calls {@code DevicePolicyManager.getLastSecurityLogRetrievalTime()}. * diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java b/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java index 647b4a75b5e..2d379d95ad7 100644 --- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java +++ b/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java @@ -19,6 +19,7 @@ package com.android.settings.enterprise; import android.annotation.NonNull; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; +import android.os.SystemProperties; import android.os.UserHandle; import android.support.annotation.Nullable; @@ -67,6 +68,18 @@ public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrappe return mDpm.getPermissionGrantState(admin, packageName, permission); } + @Override + public boolean isSecurityLoggingEnabled(@Nullable ComponentName admin) { + // TODO(b/36584321): Switch to DevicePolicyManager#isSecurityLoggingEnabled once that is + // callable by the system. + return SystemProperties.getBoolean("persist.logd.security", false); + } + + @Override + public boolean isNetworkLoggingEnabled(@Nullable ComponentName admin) { + return mDpm.isNetworkLoggingEnabled(admin); + } + @Override public long getLastSecurityLogRetrievalTime() { return mDpm.getLastSecurityLogRetrievalTime(); diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java index 447886595ac..4ad0f2e796c 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java @@ -63,6 +63,16 @@ public interface EnterprisePrivacyFeatureProvider { */ Date getLastNetworkLogRetrievalTime(); + /** + * Returns whether security logging is currently enabled. + */ + boolean isSecurityLoggingEnabled(); + + /** + * Returns whether network logging is currently enabled. + */ + boolean isNetworkLoggingEnabled(); + /** * Returns whether the Device Owner in the primary user set an always-on VPN. */ diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 69eaa2e40ab..6d038dc0407 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -131,6 +131,16 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe return timestamp < 0 ? null : new Date(timestamp); } + @Override + public boolean isSecurityLoggingEnabled() { + return mDpm.isSecurityLoggingEnabled(null); + } + + @Override + public boolean isNetworkLoggingEnabled() { + return mDpm.isNetworkLoggingEnabled(null); + } + @Override public boolean isAlwaysOnVpnSetInPrimaryUser() { return VpnUtils.isAlwaysOnVpnSet(mCm, MY_USER_ID); diff --git a/src/com/android/settings/enterprise/NetworkLogsPreferenceController.java b/src/com/android/settings/enterprise/NetworkLogsPreferenceController.java index d7da5256675..fd87bbe5fb8 100644 --- a/src/com/android/settings/enterprise/NetworkLogsPreferenceController.java +++ b/src/com/android/settings/enterprise/NetworkLogsPreferenceController.java @@ -30,6 +30,12 @@ public class NetworkLogsPreferenceController extends AdminActionPreferenceContro return mFeatureProvider.getLastNetworkLogRetrievalTime(); } + @Override + public boolean isAvailable() { + return mFeatureProvider.isNetworkLoggingEnabled() || + mFeatureProvider.getLastNetworkLogRetrievalTime() != null; + } + @Override public String getPreferenceKey() { return KEY_NETWORK_LOGS; diff --git a/src/com/android/settings/enterprise/SecurityLogsPreferenceController.java b/src/com/android/settings/enterprise/SecurityLogsPreferenceController.java index 60baa6331c2..482b014fa24 100644 --- a/src/com/android/settings/enterprise/SecurityLogsPreferenceController.java +++ b/src/com/android/settings/enterprise/SecurityLogsPreferenceController.java @@ -30,6 +30,12 @@ public class SecurityLogsPreferenceController extends AdminActionPreferenceContr return mFeatureProvider.getLastSecurityLogRetrievalTime(); } + @Override + public boolean isAvailable() { + return mFeatureProvider.isSecurityLoggingEnabled() || + mFeatureProvider.getLastSecurityLogRetrievalTime() != null; + } + @Override public String getPreferenceKey() { return KEY_SECURITY_LOGS; diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminActionPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminActionPreferenceControllerBaseTest.java index 64422426cf7..b5d6b7ac69b 100644 --- a/tests/robotests/src/com/android/settings/enterprise/AdminActionPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/AdminActionPreferenceControllerBaseTest.java @@ -21,11 +21,14 @@ import android.content.Context; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.annotation.Config; import java.util.Date; +import static com.google.common.truth.Truth.assertThat; + /** * Tests for {@link AdminActionPreferenceControllerBase}. */ @@ -47,6 +50,11 @@ public final class AdminActionPreferenceControllerBaseTest extends mDate = date; } + @Test + public void testIsAvailable() { + assertThat(mController.isAvailable()).isTrue(); + } + @Override public String getPreferenceKey() { return null; diff --git a/tests/robotests/src/com/android/settings/enterprise/BugReportsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/BugReportsPreferenceControllerTest.java index ae1e264992c..b9c838bdbe5 100644 --- a/tests/robotests/src/com/android/settings/enterprise/BugReportsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/BugReportsPreferenceControllerTest.java @@ -20,11 +20,13 @@ import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; +import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.annotation.Config; import java.util.Date; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; /** @@ -47,6 +49,11 @@ public final class BugReportsPreferenceControllerTest extends .thenReturn(date); } + @Test + public void testIsAvailable() { + assertThat(mController.isAvailable()).isTrue(); + } + @Override public String getPreferenceKey() { return "bug_reports"; diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java index 2afcab9b448..8d78ef7ef2a 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -176,6 +176,24 @@ public final class EnterprisePrivacyFeatureProviderImplTest { assertThat(mProvider.getLastNetworkLogRetrievalTime()).isEqualTo(TIMESTAMP); } + @Test + public void testIsSecurityLoggingEnabled() { + when(mDevicePolicyManager.isSecurityLoggingEnabled(null)).thenReturn(false); + assertThat(mProvider.isSecurityLoggingEnabled()).isFalse(); + + when(mDevicePolicyManager.isSecurityLoggingEnabled(null)).thenReturn(true); + assertThat(mProvider.isSecurityLoggingEnabled()).isTrue(); + } + + @Test + public void testIsNetworkLoggingEnabled() { + when(mDevicePolicyManager.isNetworkLoggingEnabled(null)).thenReturn(false); + assertThat(mProvider.isNetworkLoggingEnabled()).isFalse(); + + when(mDevicePolicyManager.isNetworkLoggingEnabled(null)).thenReturn(true); + assertThat(mProvider.isNetworkLoggingEnabled()).isTrue(); + } + @Test public void testIsAlwaysOnVpnSetInPrimaryUser() { when(mConnectivityManger.getAlwaysOnVpnPackageForUser(MY_USER_ID)).thenReturn(null); diff --git a/tests/robotests/src/com/android/settings/enterprise/NetworkLogsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/NetworkLogsPreferenceControllerTest.java index fe9fcf6efdb..33360cc04a7 100644 --- a/tests/robotests/src/com/android/settings/enterprise/NetworkLogsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/NetworkLogsPreferenceControllerTest.java @@ -20,11 +20,13 @@ import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; +import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.annotation.Config; import java.util.Date; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; /** @@ -47,6 +49,22 @@ public final class NetworkLogsPreferenceControllerTest extends .thenReturn(date); } + @Test + public void testIsAvailable() { + setDate(null); + when(mFeatureFactory.enterprisePrivacyFeatureProvider.isNetworkLoggingEnabled()) + .thenReturn(false); + assertThat(mController.isAvailable()).isFalse(); + + setDate(new Date()); + assertThat(mController.isAvailable()).isTrue(); + + setDate(null); + when(mFeatureFactory.enterprisePrivacyFeatureProvider.isNetworkLoggingEnabled()) + .thenReturn(true); + assertThat(mController.isAvailable()).isTrue(); + } + @Override public String getPreferenceKey() { return "network_logs"; diff --git a/tests/robotests/src/com/android/settings/enterprise/SecurityLogsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/SecurityLogsPreferenceControllerTest.java index b260d61d433..1205b0bb4c3 100644 --- a/tests/robotests/src/com/android/settings/enterprise/SecurityLogsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/SecurityLogsPreferenceControllerTest.java @@ -20,11 +20,13 @@ import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; +import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.annotation.Config; import java.util.Date; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; /** @@ -47,6 +49,22 @@ public final class SecurityLogsPreferenceControllerTest extends .thenReturn(date); } + @Test + public void testIsAvailable() { + setDate(null); + when(mFeatureFactory.enterprisePrivacyFeatureProvider.isSecurityLoggingEnabled()) + .thenReturn(false); + assertThat(mController.isAvailable()).isFalse(); + + setDate(new Date()); + assertThat(mController.isAvailable()).isTrue(); + + setDate(null); + when(mFeatureFactory.enterprisePrivacyFeatureProvider.isSecurityLoggingEnabled()) + .thenReturn(true); + assertThat(mController.isAvailable()).isTrue(); + } + @Override public String getPreferenceKey() { return "security_logs";