diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4a37e2b41e1..4d169c561fe 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1486,6 +1486,7 @@ diff --git a/res/drawable/ic_redo_24.xml b/res/drawable/ic_redo_24.xml new file mode 100644 index 00000000000..21a2020f90a --- /dev/null +++ b/res/drawable/ic_redo_24.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/res/layout-land/request_manage_credentials.xml b/res/layout-land/request_manage_credentials.xml index 0c7bded8a99..fbe0bd0fbad 100644 --- a/res/layout-land/request_manage_credentials.xml +++ b/res/layout-land/request_manage_credentials.xml @@ -123,11 +123,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/request_manage_credentials_more" + android:textColor="?android:attr/colorBackground" android:theme="@style/Theme.CollapsingToolbar.Settings" app:backgroundTint="?android:attr/colorAccent" app:elevation="3dp" app:icon="@drawable/ic_arrow_downward" - app:iconTint="?android:attr/textColorPrimary" + app:iconTint="?android:attr/colorBackground" app:layout_anchor="@id/apps_list" app:layout_anchorGravity="bottom|center" /> diff --git a/res/layout-sw600dp/request_manage_credentials.xml b/res/layout-sw600dp/request_manage_credentials.xml index f8cf5596f03..42facd3e13f 100644 --- a/res/layout-sw600dp/request_manage_credentials.xml +++ b/res/layout-sw600dp/request_manage_credentials.xml @@ -97,11 +97,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/request_manage_credentials_more" + android:textColor="?android:attr/colorBackground" android:theme="@style/Theme.CollapsingToolbar.Settings" app:backgroundTint="?android:attr/colorAccent" app:elevation="3dp" app:icon="@drawable/ic_arrow_downward" - app:iconTint="?android:attr/textColorPrimary" + app:iconTint="?android:attr/colorBackground" app:layout_anchor="@id/apps_list" app:layout_anchorGravity="bottom|center" /> diff --git a/res/layout/request_manage_credentials.xml b/res/layout/request_manage_credentials.xml index c8167b6ac1d..ee697f7c2e3 100644 --- a/res/layout/request_manage_credentials.xml +++ b/res/layout/request_manage_credentials.xml @@ -67,11 +67,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/request_manage_credentials_more" + android:textColor="?android:attr/colorBackground" app:layout_anchor="@id/apps_list" app:layout_anchorGravity="bottom|center" app:elevation="3dp" app:icon="@drawable/ic_arrow_downward" - app:iconTint="?android:attr/textColorPrimary" + app:iconTint="?android:attr/colorBackground" app:backgroundTint="?android:attr/colorAccent" android:theme="@style/Theme.CollapsingToolbar.Settings"/> diff --git a/res/values/strings.xml b/res/values/strings.xml index 9f176e3d5fe..90deae50a34 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6865,7 +6865,11 @@ Uninstall certificates - Remove + Remove app + + Remove this app? + + This app won\u2019t manage certificates, but it will stay on your device. Any certificates installed by the app will be uninstalled. %d URL @@ -7487,7 +7491,7 @@ Enable - Remove + Uninstall Trust diff --git a/res/values/styles.xml b/res/values/styles.xml index 35080e51bda..633a7b05a81 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -823,21 +823,18 @@ google-sans-medium 14sp false - ?android:attr/textColorPrimary diff --git a/src/com/android/settings/security/CredentialManagementAppButtonsController.java b/src/com/android/settings/security/CredentialManagementAppButtonsController.java index b296f379a55..250dd133e81 100644 --- a/src/com/android/settings/security/CredentialManagementAppButtonsController.java +++ b/src/com/android/settings/security/CredentialManagementAppButtonsController.java @@ -16,8 +16,11 @@ package com.android.settings.security; +import android.app.Dialog; import android.app.admin.DevicePolicyEventLogger; +import android.app.settings.SettingsEnums; import android.content.Context; +import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.RemoteException; @@ -25,12 +28,15 @@ import android.security.IKeyChainService; import android.security.KeyChain; import android.stats.devicepolicy.DevicePolicyEnums; import android.util.Log; +import android.view.View; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; +import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settingslib.widget.ActionButtonsPreference; import java.util.concurrent.ExecutorService; @@ -48,9 +54,16 @@ public class CredentialManagementAppButtonsController extends BasePreferenceCont private final Handler mHandler = new Handler(Looper.getMainLooper()); private boolean mHasCredentialManagerPackage; private Fragment mFragment; + private final int mRemoveIcon; public CredentialManagementAppButtonsController(Context context, String preferenceKey) { super(context, preferenceKey); + if (context.getResources().getConfiguration().getLayoutDirection() + == View.LAYOUT_DIRECTION_RTL) { + mRemoveIcon = R.drawable.ic_redo_24; + } else { + mRemoveIcon = R.drawable.ic_undo_24; + } } public void setParentFragment(Fragment fragment) { @@ -84,8 +97,8 @@ public class CredentialManagementAppButtonsController extends BasePreferenceCont .setButton1Icon(R.drawable.ic_upload) .setButton1OnClickListener(view -> uninstallCertificates()) .setButton2Text(R.string.remove_credential_management_app) - .setButton2Icon(R.drawable.ic_delete) - .setButton2OnClickListener(view -> removeCredentialManagementApp()); + .setButton2Icon(mRemoveIcon) + .setButton2OnClickListener(view -> showRemoveCredentialManagementAppDialog()); } } @@ -103,18 +116,54 @@ public class CredentialManagementAppButtonsController extends BasePreferenceCont }); } - private void removeCredentialManagementApp() { - mExecutor.execute(() -> { - try { - IKeyChainService service = KeyChain.bind(mContext).getService(); - service.removeCredentialManagementApp(); - DevicePolicyEventLogger - .createEvent(DevicePolicyEnums.CREDENTIAL_MANAGEMENT_APP_REMOVED) - .write(); - mFragment.getActivity().finish(); - } catch (InterruptedException | RemoteException e) { - Log.e(TAG, "Unable to remove the credential management app"); - } - }); + private void showRemoveCredentialManagementAppDialog() { + final RemoveCredentialManagementAppDialog dialog = + RemoveCredentialManagementAppDialog.newInstance(); + dialog.show(mFragment.getParentFragmentManager(), + RemoveCredentialManagementAppDialog.class.getName()); } -} + + /** + * Implements an AlertDialog for confirming that a user wants to remove the credential + * management app. The app will no longer be able to manage certificates, but it will stay on + * the device. All certificates installed by the credential management app will be uninstalled. + */ + public static class RemoveCredentialManagementAppDialog extends InstrumentedDialogFragment { + + public static RemoveCredentialManagementAppDialog newInstance() { + return new RemoveCredentialManagementAppDialog(); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new AlertDialog.Builder(getContext(), R.style.Theme_AlertDialog) + .setTitle(R.string.remove_credential_management_app_dialog_title) + .setMessage(R.string.remove_credential_management_app_dialog_message) + .setPositiveButton(R.string.remove_credential_management_app, + (dialog, which) -> removeCredentialManagementApp()) + .setNegativeButton(R.string.cancel, (dialog, which) -> dismiss()) + .create(); + } + + private void removeCredentialManagementApp() { + final ExecutorService executor = Executors.newSingleThreadExecutor(); + executor.execute(() -> { + try { + IKeyChainService service = KeyChain.bind(getContext()).getService(); + service.removeCredentialManagementApp(); + DevicePolicyEventLogger + .createEvent(DevicePolicyEnums.CREDENTIAL_MANAGEMENT_APP_REMOVED) + .write(); + getParentFragment().getActivity().finish(); + } catch (InterruptedException | RemoteException e) { + Log.e(TAG, "Unable to remove the credential management app"); + } + }); + } + + @Override + public int getMetricsCategory() { + return SettingsEnums.CREDENTIAL_MANAGEMENT_APP_REMOVE_APP; + } + } +} \ No newline at end of file diff --git a/src/com/android/settings/security/RequestManageCredentials.java b/src/com/android/settings/security/RequestManageCredentials.java index cda97da17d3..1a8da671a2c 100644 --- a/src/com/android/settings/security/RequestManageCredentials.java +++ b/src/com/android/settings/security/RequestManageCredentials.java @@ -288,7 +288,7 @@ public class RequestManageCredentials extends Activity { // On down scroll, hide text in floating action button by setting // extended to false. if (dy > 0 && mExtendedFab.getVisibility() == View.VISIBLE) { - mExtendedFab.setExtended(false); + mExtendedFab.shrink(); } if (isRecyclerScrollable()) { mExtendedFab.show();