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