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";