170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes/*
270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * Copyright (C) 2015 The Android Open Source Project
370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes *
470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * Licensed under the Apache License, Version 2.0 (the "License");
570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * you may not use this file except in compliance with the License.
670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * You may obtain a copy of the License at
770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes *
870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes *      http://www.apache.org/licenses/LICENSE-2.0
970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes *
1070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * Unless required by applicable law or agreed to in writing, software
1170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * distributed under the License is distributed on an "AS IS" BASIS,
1270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * See the License for the specific language governing permissions and
1470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * limitations under the License.
1570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes */
1670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banespackage com.example.android.supportv7.app;
1770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
1870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport com.example.android.supportv7.R;
1970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
2070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.app.Dialog;
2170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.content.Context;
2270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.os.Bundle;
2370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.support.annotation.Nullable;
2470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.support.v4.view.WindowCompat;
2570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.support.v7.app.AppCompatActivity;
2670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.support.v7.app.AppCompatDialog;
2770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.support.v7.app.AppCompatDialogFragment;
2870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.view.LayoutInflater;
2970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.view.Menu;
3070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.view.MenuInflater;
3170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.view.MenuItem;
3270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.view.View;
3370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.view.ViewGroup;
3470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.widget.Spinner;
3570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banesimport android.widget.Toast;
3670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
3770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes/**
3870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes * This demonstrates idiomatic usage of AppCompatDialogFragment.
3970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes */
4070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banespublic class DialogFragmentUsage extends AppCompatActivity {
4170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
4270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    private Spinner mSpinner;
4370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
4470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    @Override
4570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    protected void onCreate(Bundle savedInstanceState) {
4670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        super.onCreate(savedInstanceState);
4770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        setContentView(R.layout.dialog_usage);
4870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
4970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        mSpinner = (Spinner) findViewById(R.id.spinner_dialogs);
5070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
5170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        // Add an OnClickListener to show our selected dialog
5270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        findViewById(R.id.btn_show_dialog).setOnClickListener(new View.OnClickListener() {
5370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            @Override
5470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            public void onClick(View view) {
5570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes                showSelectedDialog();
5670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            }
5770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        });
5870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    }
5970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
6070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    private void showSelectedDialog() {
6170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        switch (mSpinner.getSelectedItemPosition()) {
6270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            case 0:
6370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes                showSimpleDialog();
6470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes                break;
6570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            case 1:
6670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes                showButtonBarDialog();
6770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes                break;
6870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        }
6970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    }
7070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
7170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    private void showSimpleDialog() {
7270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        MenuDialogFragment fragment = MenuDialogFragment.create(R.layout.dialog_content);
7370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        fragment.show(getSupportFragmentManager(), null);
7470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    }
7570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
7670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    private void showButtonBarDialog() {
7770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        MenuDialogFragment fragment = MenuDialogFragment.create(R.layout.dialog_content_buttons);
7870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        fragment.show(getSupportFragmentManager(), null);
7970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    }
8070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
8170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    /**
8270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes     * A simple {@link AppCompatDialog} implementation which
8370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes     * inflates some items into it's options menu, and shows a toast when one is selected.
8470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes     */
8570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    public static class MenuDialogFragment extends AppCompatDialogFragment {
8670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
8770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        private static final String PARAM_CONTENT_VIEW = "content_view";
8870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
8970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        static MenuDialogFragment create(int contentView) {
9070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            Bundle b = new Bundle();
9170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            b.putInt(PARAM_CONTENT_VIEW, contentView);
9270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
9370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            MenuDialogFragment fragment = new MenuDialogFragment();
9470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            fragment.setArguments(b);
9570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
9670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            return fragment;
9770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        }
9870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
9970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        @Override
10070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        public void onCreate(@Nullable Bundle savedInstanceState) {
10170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            super.onCreate(savedInstanceState);
10270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            setHasOptionsMenu(true);
10370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        }
10470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
10570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        @Nullable
10670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        @Override
10770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
10870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes                @Nullable Bundle savedInstanceState) {
10970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            Bundle args = getArguments();
11070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            int contentView = args.getInt(PARAM_CONTENT_VIEW);
11170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            return inflater.inflate(contentView, container, false);
11270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        }
11370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
11470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        @Override
11570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
11670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            inflater.inflate(R.menu.actions, menu);
11770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        }
11870bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
11970bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        @Override
12070bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        public boolean onOptionsItemSelected(MenuItem item) {
12170bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            Toast.makeText(getActivity(), "Dialog action selected: " + item.getTitle(),
12270bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes                    Toast.LENGTH_SHORT).show();
12370bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes            return true;
12470bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes        }
12570bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes    }
12670bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes
12770bbcd02d3635be1a7a859427adae87a4e7f1c1eChris Banes}
128