107
107
import java .security .cert .CertificateException ;
108
108
import java .security .cert .CertificateFactory ;
109
109
import java .security .cert .X509Certificate ;
110
+ import java .text .DateFormat ;
111
+ import java .text .ParseException ;
112
+ import java .text .SimpleDateFormat ;
110
113
import java .util .ArrayList ;
111
114
import java .util .Arrays ;
112
115
import java .util .Collections ;
116
+ import java .util .Date ;
113
117
import java .util .HashSet ;
114
118
import java .util .List ;
115
119
import java .util .Set ;
@@ -204,6 +208,7 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
204
208
private static final String CREATE_AND_MANAGE_USER_KEY = "create_and_manage_user" ;
205
209
private static final String DELEGATED_CERT_INSTALLER_KEY = "manage_cert_installer" ;
206
210
private static final String DEVICE_OWNER_STATUS_KEY = "device_owner_status" ;
211
+ private static final String SECURITY_PATCH_KEY = "security_patch" ;
207
212
private static final String DISABLE_CAMERA_KEY = "disable_camera" ;
208
213
private static final String DISABLE_KEYGUARD = "disable_keyguard" ;
209
214
private static final String DISABLE_SCREEN_CAPTURE_KEY = "disable_screen_capture" ;
@@ -269,6 +274,7 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
269
274
private static final String WIFI_CONFIG_LOCKDOWN_ON = "1" ;
270
275
private static final String WIFI_CONFIG_LOCKDOWN_OFF = "0" ;
271
276
private static final String SAFETYNET_ATTEST = "safetynet_attest" ;
277
+ private static final String SECURITY_PATCH_FORMAT = "yyyy-MM-dd" ;
272
278
273
279
private static final String BATTERY_PLUGGED_ANY = Integer .toString (
274
280
BatteryManager .BATTERY_PLUGGED_AC |
@@ -290,7 +296,7 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
290
296
NETWORK_STATS_KEY , DELEGATED_CERT_INSTALLER_KEY , DISABLE_STATUS_BAR ,
291
297
REENABLE_STATUS_BAR , DISABLE_KEYGUARD , REENABLE_KEYGUARD , START_KIOSK_MODE ,
292
298
SET_PERMISSION_POLICY_KEY , MANAGE_APP_PERMISSIONS_KEY ,STAY_ON_WHILE_PLUGGED_IN ,
293
- WIFI_CONFIG_LOCKDOWN_ENABLE_KEY
299
+ WIFI_CONFIG_LOCKDOWN_ENABLE_KEY , SECURITY_PATCH_KEY
294
300
};
295
301
296
302
private static String [] NYC_PLUS_PREFERENCES = {
@@ -442,6 +448,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
442
448
disableIncompatibleManagementOptionsInCurrentProfile ();
443
449
disableIncompatibleManagementOptionsByApiLevel ();
444
450
451
+ loadSecurityPatch ();
445
452
reloadCameraDisableUi ();
446
453
reloadScreenCaptureDisableUi ();
447
454
reloadMuteAudioUi ();
@@ -1402,6 +1409,26 @@ public void onClick(DialogInterface dialogInterface, int i) {
1402
1409
.show ();
1403
1410
}
1404
1411
1412
+ @ TargetApi (Build .VERSION_CODES .M )
1413
+ private void loadSecurityPatch () {
1414
+ Preference securityPatchPreference = findPreference (SECURITY_PATCH_KEY );
1415
+ if (!securityPatchPreference .isEnabled ()) {
1416
+ return ;
1417
+ }
1418
+
1419
+ String buildSecurityPatch = Build .VERSION .SECURITY_PATCH ;
1420
+ final Date date ;
1421
+ try {
1422
+ date = new SimpleDateFormat (SECURITY_PATCH_FORMAT ).parse (buildSecurityPatch );
1423
+ } catch (ParseException e ) {
1424
+ securityPatchPreference .setSummary (
1425
+ getString (R .string .invalid_security_patch , buildSecurityPatch ));
1426
+ return ;
1427
+ }
1428
+ String display = DateFormat .getDateInstance (DateFormat .MEDIUM ).format (date );
1429
+ securityPatchPreference .setSummary (display );
1430
+ }
1431
+
1405
1432
@ TargetApi (Build .VERSION_CODES .LOLLIPOP )
1406
1433
private void reloadCameraDisableUi () {
1407
1434
boolean isCameraDisabled = mDevicePolicyManager .getCameraDisabled (mAdminComponentName );
0 commit comments