12decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan/* 22decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * Copyright (C) 2018 The Android Open Source Project 32decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * 42decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * Licensed under the Apache License, Version 2.0 (the "License"); 52decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * you may not use this file except in compliance with the License. 62decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * You may obtain a copy of the License at 72decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * 82decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * http://www.apache.org/licenses/LICENSE-2.0 92decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * 102decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * Unless required by applicable law or agreed to in writing, software 112decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * distributed under the License is distributed on an "AS IS" BASIS, 122decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * See the License for the specific language governing permissions and 142decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan * limitations under the License. 152decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan */ 162decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanpackage com.android.internal.globalactions; 172decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 182decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.app.Dialog; 192decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.content.Context; 202decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.content.DialogInterface; 212decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.os.Bundle; 222decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.util.TypedValue; 232decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.view.accessibility.AccessibilityEvent; 242decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.view.KeyEvent; 252decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport android.widget.ListView; 262decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanimport com.android.internal.app.AlertController; 272decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 282decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan/** A dialog that lists the given Action items to be user selectable. */ 292decbf7ae429c67008e836960bdc40a838f4be52Michael Kwanpublic final class ActionsDialog extends Dialog implements DialogInterface { 302decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan private final Context mContext; 312decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan private final AlertController mAlert; 322decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan private final ActionsAdapter mAdapter; 332decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 342decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan public ActionsDialog(Context context, AlertController.AlertParams params) { 352decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan super(context, getDialogTheme(context)); 362decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan mContext = getContext(); 372decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan mAlert = AlertController.create(mContext, this, getWindow()); 382decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan mAdapter = (ActionsAdapter) params.mAdapter; 392decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan params.apply(mAlert); 402decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 412decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 422decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan private static int getDialogTheme(Context context) { 432decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan TypedValue outValue = new TypedValue(); 442decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan context.getTheme().resolveAttribute(com.android.internal.R.attr.alertDialogTheme, 452decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan outValue, true); 462decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan return outValue.resourceId; 472decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 482decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 492decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan @Override 502decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan protected void onStart() { 512decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan super.setCanceledOnTouchOutside(true); 522decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan super.onStart(); 532decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 542decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 552decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan public ListView getListView() { 562decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan return mAlert.getListView(); 572decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 582decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 592decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan @Override 602decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan protected void onCreate(Bundle savedInstanceState) { 612decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan super.onCreate(savedInstanceState); 622decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan mAlert.installContent(); 632decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 642decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 652decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan @Override 662decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 672decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { 682decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan for (int i = 0; i < mAdapter.getCount(); ++i) { 692decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan CharSequence label = 702decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan mAdapter.getItem(i).getLabelForAccessibility(getContext()); 712decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan if (label != null) { 722decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan event.getText().add(label); 732decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 742decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 752decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 762decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan return super.dispatchPopulateAccessibilityEvent(event); 772decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 782decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 792decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan @Override 802decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan public boolean onKeyDown(int keyCode, KeyEvent event) { 812decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan if (mAlert.onKeyDown(keyCode, event)) { 822decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan return true; 832decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 842decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan return super.onKeyDown(keyCode, event); 852decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 862decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan 872decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan @Override 882decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan public boolean onKeyUp(int keyCode, KeyEvent event) { 892decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan if (mAlert.onKeyUp(keyCode, event)) { 902decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan return true; 912decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 922decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan return super.onKeyUp(keyCode, event); 932decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan } 942decbf7ae429c67008e836960bdc40a838f4be52Michael Kwan} 95