Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ddc8440a authored by Kevin Chang's avatar Kevin Chang Committed by Android (Google) Code Review
Browse files

Merge "Change disable accessibility service dialog layout"

parents 4ac6f1a7 ee15fa1c
Loading
Loading
Loading
Loading
+0 −71
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ 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
  -->

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textDirection="locale"
    android:scrollbarStyle="outsideOverlay"
    android:gravity="top">

    <LinearLayout
        android:theme="@style/Theme.AlertDialog"
        style="@style/AccessibilityDialog">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center_horizontal"
            android:paddingTop="32dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <TextView
                android:id="@+id/permissionDialog_disable_title"
                style="@style/AccessibilityDialogTitle" />

            <TextView
                android:id="@+id/permissionDialog_disable_message"
                android:gravity="center"
                android:text="@string/accessibility_service_warning_description"
                style="@style/AccessibilityDialogDescription" />

        </LinearLayout>
            <!-- Buttons on bottom of dialog -->
            <LinearLayout
                style="@style/AccessibilityDialogButtonList">

                <Space
                    style="@style/AccessibilityDialogButtonBarSpace"/>

                <Button
                    android:id="@+id/permission_disable_stop_button"
                    android:text="@string/accessibility_dialog_button_stop"
                    style="@style/AccessibilityDialogButton" />

                <Button
                    android:id="@+id/permission_disable_cancel_button"
                    android:text="@string/accessibility_dialog_button_cancel"
                    style="@style/AccessibilityDialogButton" />

            </LinearLayout>

    </LinearLayout>

</ScrollView>
+9 −29
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.os.storage.StorageManager;
import android.text.BidiFormatter;
@@ -77,10 +78,16 @@ public class AccessibilityServiceWarning {
    }

    public static Dialog createDisableDialog(Activity parentActivity,
            AccessibilityServiceInfo info, View.OnClickListener listener) {
            AccessibilityServiceInfo info, DialogInterface.OnClickListener listener) {
        final AlertDialog ad = new AlertDialog.Builder(parentActivity)
                .setView(createDisableDialogContentView(parentActivity, info, listener))
                .setTitle(parentActivity.getString(R.string.disable_service_title,
                        info.getResolveInfo().loadLabel(parentActivity.getPackageManager())))
                .setMessage(parentActivity.getString(R.string.disable_service_message,
                        parentActivity.getString(R.string.accessibility_dialog_button_stop),
                        getServiceName(parentActivity, info)))
                .setCancelable(true)
                .setPositiveButton(R.string.accessibility_dialog_button_stop, listener)
                .setNegativeButton(R.string.accessibility_dialog_button_cancel, listener)
                .create();

        return ad;
@@ -148,33 +155,6 @@ public class AccessibilityServiceWarning {
        return content;
    }

    private static View createDisableDialogContentView(Context context,
            AccessibilityServiceInfo info, View.OnClickListener listener) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);

        View content = inflater.inflate(R.layout.disable_accessibility_service_dialog_content,
                null);

        TextView permissionDialogTitle = content.findViewById(R.id.permissionDialog_disable_title);
        permissionDialogTitle.setText(context.getString(R.string.disable_service_title,
                getServiceName(context, info)));
        TextView permissionDialogMessage = content
                .findViewById(R.id.permissionDialog_disable_message);
        permissionDialogMessage.setText(context.getString(R.string.disable_service_message,
                context.getString(R.string.accessibility_dialog_button_stop),
                getServiceName(context, info)));

        Button permissionAllowButton = content.findViewById(
                R.id.permission_disable_stop_button);
        Button permissionDenyButton = content.findViewById(
                R.id.permission_disable_cancel_button);
        permissionAllowButton.setOnClickListener(listener);
        permissionDenyButton.setOnClickListener(listener);

        return content;
    }

    // Get the service name and bidi wrap it to protect from bidi side effects.
    private static CharSequence getServiceName(Context context, AccessibilityServiceInfo info) {
        final Locale locale = context.getResources().getConfiguration().getLocales().get(0);
+40 −30
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
@@ -49,8 +50,7 @@ import com.android.settingslib.accessibility.AccessibilityUtils;

import java.util.List;

public class ToggleAccessibilityServicePreferenceFragment
        extends ToggleFeaturePreferenceFragment implements View.OnClickListener {
public class ToggleAccessibilityServicePreferenceFragment extends ToggleFeaturePreferenceFragment {

    private static final int DIALOG_ID_ENABLE_WARNING = 1;
    private static final int DIALOG_ID_DISABLE_WARNING = 2;
@@ -72,6 +72,42 @@ public class ToggleAccessibilityServicePreferenceFragment

    private Dialog mDialog;

    private final View.OnClickListener mViewOnClickListener =
            (View view) -> {
                if (view.getId() == R.id.permission_enable_allow_button) {
                    if (isFullDiskEncrypted()) {
                        String title = createConfirmCredentialReasonMessage();
                        Intent intent = ConfirmDeviceCredentialActivity.createIntent(title, null);
                        startActivityForResult(intent,
                                ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION);
                    } else {
                        handleConfirmServiceEnabled(true);
                        if (isServiceSupportAccessibilityButton()) {
                            showDialog(DIALOG_ID_LAUNCH_ACCESSIBILITY_TUTORIAL);
                        }
                    }
                } else if (view.getId() == R.id.permission_enable_deny_button) {
                    handleConfirmServiceEnabled(false);
                } else {
                    throw new IllegalArgumentException();
                }
                mDialog.dismiss();
            };

    private final DialogInterface.OnClickListener mDialogInterfaceOnClickListener =
            (DialogInterface dialog, int which) -> {
                switch (which) {
                    case DialogInterface.BUTTON_POSITIVE:
                        handleConfirmServiceEnabled(false);
                        break;
                    case DialogInterface.BUTTON_NEGATIVE:
                        handleConfirmServiceEnabled(true);
                        break;
                    default:
                        throw new IllegalArgumentException();
                }
            };

    @Override
    public int getMetricsCategory() {
        return SettingsEnums.ACCESSIBILITY_SERVICE;
@@ -137,7 +173,7 @@ public class ToggleAccessibilityServicePreferenceFragment
                    return null;
                }
                mDialog = AccessibilityServiceWarning
                        .createCapabilitiesDialog(getActivity(), info, this);
                        .createCapabilitiesDialog(getActivity(), info, mViewOnClickListener);
                break;
            }
            case DIALOG_ID_DISABLE_WARNING: {
@@ -146,7 +182,7 @@ public class ToggleAccessibilityServicePreferenceFragment
                    return null;
                }
                mDialog = AccessibilityServiceWarning
                        .createDisableDialog(getActivity(), info, this);
                        .createDisableDialog(getActivity(), info, mDialogInterfaceOnClickListener);
                break;
            }
            case DIALOG_ID_LAUNCH_ACCESSIBILITY_TUTORIAL: {
@@ -210,32 +246,6 @@ public class ToggleAccessibilityServicePreferenceFragment
        }
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.permission_enable_allow_button) {
            if (isFullDiskEncrypted()) {
                String title = createConfirmCredentialReasonMessage();
                Intent intent = ConfirmDeviceCredentialActivity.createIntent(title, null);
                startActivityForResult(intent,
                        ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION);
            } else {
                handleConfirmServiceEnabled(true);
                if (isServiceSupportAccessibilityButton()) {
                    showDialog(DIALOG_ID_LAUNCH_ACCESSIBILITY_TUTORIAL);
                }
            }
        } else if (view.getId() == R.id.permission_enable_deny_button) {
            handleConfirmServiceEnabled(false);
        } else if (view.getId() == R.id.permission_disable_stop_button) {
            handleConfirmServiceEnabled(false);
        } else if (view.getId() == R.id.permission_disable_cancel_button) {
            handleConfirmServiceEnabled(true);
        } else {
            throw new IllegalArgumentException();
        }
        mDialog.dismiss();
    }

    private boolean isGestureNavigateEnabled() {
        return getContext().getResources().getInteger(
                com.android.internal.R.integer.config_navBarInteractionMode)