| /* | |
| * 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.accessibility; | |
| import static com.android.settings.accessibility.ItemInfoArrayAdapter.ItemInfo; | |
| import android.app.Dialog; | |
| import android.content.Context; | |
| import android.content.DialogInterface; | |
| import android.view.View; | |
| import android.widget.AbsListView; | |
| import android.widget.AdapterView; | |
| import android.widget.ListAdapter; | |
| import android.widget.ListView; | |
| import android.widget.ScrollView; | |
| import androidx.annotation.NonNull; | |
| import androidx.annotation.Nullable; | |
| import androidx.appcompat.app.AlertDialog; | |
| import java.lang.annotation.Retention; | |
| import java.lang.annotation.RetentionPolicy; | |
| import java.util.List; | |
| import java.util.Optional; | |
| /** | |
| * Utility class for creating the edit dialog. | |
| */ | |
| public class AccessibilityDialogUtils { | |
| private static final String TAG = AccessibilityDialogUtils.class.getSimpleName(); | |
| /** Denotes the dialog enums for show dialog. */ | |
| @Retention(RetentionPolicy.SOURCE) | |
| public @interface DialogEnums { | |
| /** | |
| * OPEN: Settings > Accessibility > Downloaded toggle service > Toggle use service to | |
| * enable service. | |
| */ | |
| int ENABLE_WARNING_FROM_TOGGLE = 1002; | |
| /** | |
| * OPEN: Settings > Accessibility > Downloaded toggle service > Shortcut options | |
| * settings. | |
| */ | |
| int ENABLE_WARNING_FROM_SHORTCUT = 1003; | |
| /** | |
| * OPEN: Settings > Accessibility > Downloaded toggle service > Shortcut toggle | |
| */ | |
| int ENABLE_WARNING_FROM_SHORTCUT_TOGGLE = 1004; | |
| /** | |
| * OPEN: Settings > Accessibility > Downloaded toggle service > Toggle use service to | |
| * disable service. | |
| */ | |
| int DISABLE_WARNING_FROM_TOGGLE = 1005; | |
| /** | |
| * OPEN: Settings > Accessibility > Magnification > Toggle user service in button | |
| * navigation. | |
| */ | |
| int ACCESSIBILITY_BUTTON_TUTORIAL = 1006; | |
| /** | |
| * OPEN: Settings > Accessibility > Magnification > Toggle user service in gesture | |
| * navigation. | |
| */ | |
| int GESTURE_NAVIGATION_TUTORIAL = 1007; | |
| /** | |
| * OPEN: Settings > Accessibility > Downloaded toggle service > Toggle user service > Show | |
| * launch tutorial. | |
| */ | |
| int LAUNCH_ACCESSIBILITY_TUTORIAL = 1008; | |
| /** | |
| * OPEN: Settings > Accessibility > Display size and text > Click 'Reset settings' button. | |
| */ | |
| int DIALOG_RESET_SETTINGS = 1009; | |
| /** | |
| * OPEN: Settings > Accessibility > Magnification > Magnification type. | |
| */ | |
| int DIALOG_MAGNIFICATION_MODE = 1010; | |
| /** | |
| * Enable: Settings > Accessibility > Magnification > Magnification shortcut > Advanced > | |
| * Triple tap. | |
| * OPEN: Settings > Accessibility > Magnification > Magnification type > Magnify part of | |
| * screen / Switch between full and partial screen > Save. | |
| */ | |
| int DIALOG_MAGNIFICATION_TRIPLE_TAP_WARNING = 1011; | |
| /** | |
| * OPEN: Settings > Accessibility > Magnification > Cursor following. | |
| */ | |
| int DIALOG_MAGNIFICATION_CURSOR_FOLLOWING_MODE = 1012; | |
| } | |
| /** | |
| * Sets the scroll indicators for dialog view. The indicators appear while content view is | |
| * out of vision for vertical scrolling. | |
| * | |
| * @param view The view contains customized dialog content. Usually it is {@link ScrollView} or | |
| * {@link AbsListView} | |
| */ | |
| private static void setScrollIndicators(@NonNull View view) { | |
| view.setScrollIndicators( | |
| View.SCROLL_INDICATOR_TOP | View.SCROLL_INDICATOR_BOTTOM, | |
| View.SCROLL_INDICATOR_TOP | View.SCROLL_INDICATOR_BOTTOM); | |
| } | |
| /** | |
| * Creates a dialog with the given view. | |
| * | |
| * @param context A valid context | |
| * @param dialogTitle The title of the dialog | |
| * @param customView The customized view | |
| * @param positiveButtonText The text of the positive button | |
| * @param positiveListener This listener will be invoked when the positive button in the dialog | |
| * is clicked | |
| * @param negativeButtonText The text of the negative button | |
| * @param negativeListener This listener will be invoked when the negative button in the dialog | |
| * is clicked | |
| * @return the {@link Dialog} with the given view | |
| */ | |
| @NonNull | |
| public static Dialog createCustomDialog(@NonNull Context context, | |
| @NonNull CharSequence dialogTitle, @Nullable View customView, | |
| @NonNull CharSequence positiveButtonText, | |
| @Nullable DialogInterface.OnClickListener positiveListener, | |
| @NonNull CharSequence negativeButtonText, | |
| @Nullable DialogInterface.OnClickListener negativeListener) { | |
| DialogInterface.OnClickListener doNothingListener = | |
| (DialogInterface dialogInterface, int which) -> {}; | |
| final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context) | |
| .setTitle(dialogTitle) | |
| .setCancelable(true) | |
| .setPositiveButton(positiveButtonText, | |
| Optional.ofNullable(positiveListener).orElse(doNothingListener)) | |
| .setNegativeButton(negativeButtonText, | |
| Optional.ofNullable(negativeListener).orElse(doNothingListener)); | |
| if (customView != null) { | |
| dialogBuilder.setView(customView); | |
| } | |
| final AlertDialog alertDialog = dialogBuilder.create(); | |
| if (customView instanceof ScrollView || customView instanceof AbsListView) { | |
| setScrollIndicators(customView); | |
| } | |
| return alertDialog; | |
| } | |
| /** | |
| * Creates a single choice {@link ListView} with given {@link ItemInfo} list. | |
| * | |
| * @param context A context. | |
| * @param itemInfoList A {@link ItemInfo} list. | |
| * @param itemListener The listener will be invoked when the item is clicked. | |
| */ | |
| @NonNull | |
| public static ListView createSingleChoiceListView(@NonNull Context context, | |
| @NonNull List<? extends ItemInfo> itemInfoList, | |
| @Nullable AdapterView.OnItemClickListener itemListener) { | |
| final ListView list = new ListView(context); | |
| // Set an id to save its state. | |
| list.setId(android.R.id.list); | |
| list.setDivider(/* divider= */ null); | |
| list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); | |
| final ListAdapter adapter = new ItemInfoArrayAdapter<>(context, itemInfoList); | |
| list.setAdapter(adapter); | |
| list.setOnItemClickListener(itemListener); | |
| return list; | |
| } | |
| } |