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