diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 956477b3854..0a72b752df7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1342,6 +1342,11 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 60febe7dff3..381ef57828e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5880,6 +5880,16 @@
VPN & app user certificate
Wi\u2011Fi certificate
+
+ Your privacy is at risk
+
+ CA certificates are used by websites, apps, and VPNs for encryption. Only install CA certificates from organizations you trust. \n\n If you install a CA certificate, the certificate owner could access your information, such as passwords, messages, or credit card details, from websites you visit or apps you use - even if that information is encrypted.
+
+ Don\u2019t install
+
+ Install anyways
+
+ Certificate not installed
Emergency dialing signal
diff --git a/res/xml/install_certificate_from_storage.xml b/res/xml/install_certificate_from_storage.xml
index 0116713204c..0cf4a36e46d 100644
--- a/res/xml/install_certificate_from_storage.xml
+++ b/res/xml/install_certificate_from_storage.xml
@@ -28,11 +28,8 @@
android:title="@string/ca_certificate">
-
-
+ android:targetPackage="com.android.settings"
+ android:targetClass="com.android.settings.security.InstallCaCertificateWarning">
diff --git a/src/com/android/settings/security/InstallCaCertificateWarning.java b/src/com/android/settings/security/InstallCaCertificateWarning.java
new file mode 100644
index 00000000000..701d9f46432
--- /dev/null
+++ b/src/com/android/settings/security/InstallCaCertificateWarning.java
@@ -0,0 +1,83 @@
+/*
+ * 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.security;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.security.Credentials;
+import android.view.View;
+import android.widget.Toast;
+
+import com.android.settings.R;
+
+import com.google.android.setupcompat.template.FooterBarMixin;
+import com.google.android.setupcompat.template.FooterButton;
+import com.google.android.setupdesign.GlifLayout;
+
+/**
+ * Creates a warning dialog explaining the consequences of installing a CA certificate
+ * This is displayed before a CA certificate can be installed from Settings.
+ */
+public class InstallCaCertificateWarning extends Activity {
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.ca_certificate_warning_dialog);
+ final GlifLayout layout = findViewById(R.id.setup_wizard_layout);
+
+ final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
+ mixin.setSecondaryButton(
+ new FooterButton.Builder(this)
+ .setText(R.string.ca_certificate_warning_install_anyway)
+ .setListener(installCaCertificate())
+ .setButtonType(FooterButton.ButtonType.OTHER)
+ .setTheme(R.style.SudGlifButton_Secondary)
+ .build()
+ );
+
+ mixin.setPrimaryButton(
+ new FooterButton.Builder(this)
+ .setText(R.string.ca_certificate_warning_dont_install)
+ .setListener(returnToInstallCertificateFromStorage())
+ .setButtonType(FooterButton.ButtonType.NEXT)
+ .setTheme(R.style.SudGlifButton_Primary)
+ .build()
+ );
+ }
+
+ private View.OnClickListener installCaCertificate() {
+ return v -> {
+ final Intent intent = new Intent();
+ intent.setAction(Credentials.INSTALL_ACTION);
+ intent.putExtra(Credentials.EXTRA_CERTIFICATE_USAGE, Credentials.CERTIFICATE_USAGE_CA);
+ startActivity(intent);
+ finish();
+ };
+ }
+
+ private View.OnClickListener returnToInstallCertificateFromStorage() {
+ return v -> {
+ Toast.makeText(this, R.string.cert_not_installed, Toast.LENGTH_SHORT).show();
+ finish();
+ };
+ }
+
+}