1c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn/*
2c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * Copyright (C) 2011 The Android Open Source Project
3c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn *
4c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
5c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * you may not use this file except in compliance with the License.
6c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * You may obtain a copy of the License at
7c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn *
8c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
9c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn *
10c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * Unless required by applicable law or agreed to in writing, software
11c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
12c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * See the License for the specific language governing permissions and
14c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn * limitations under the License.
15c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn */
16c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
17c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornpackage com.example.android.supportv4.app;
18c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
19c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport com.example.android.supportv4.R;
20c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
21c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.support.v4.app.DialogFragment;
22c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.support.v4.app.Fragment;
23c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.support.v4.app.FragmentActivity;
24c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.support.v4.app.FragmentTransaction;
25c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
26c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.os.Bundle;
27c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.view.LayoutInflater;
28c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.view.View;
29c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.view.View.OnClickListener;
30c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.view.ViewGroup;
31c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.widget.Button;
32c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornimport android.widget.TextView;
33c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
34c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackbornpublic class FragmentDialogSupport extends FragmentActivity {
35c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    int mStackLevel = 0;
36c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
37c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    @Override
38c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    protected void onCreate(Bundle savedInstanceState) {
39c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        super.onCreate(savedInstanceState);
40c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        setContentView(R.layout.fragment_dialog);
41c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
42c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        View tv = findViewById(R.id.text);
43c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        ((TextView)tv).setText("Example of displaying dialogs with a DialogFragment.  "
44c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                + "Press the show button below to see the first dialog; pressing "
45c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                + "successive show buttons will display other dialog styles as a "
46c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                + "stack, with dismissing or back going to the previous dialog.");
47c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
48c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        // Watch for button clicks.
49c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        Button button = (Button)findViewById(R.id.show);
50c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        button.setOnClickListener(new OnClickListener() {
51c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            public void onClick(View v) {
52c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                showDialog();
53c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            }
54c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        });
55c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
56c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        if (savedInstanceState != null) {
57c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            mStackLevel = savedInstanceState.getInt("level");
58c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        }
59c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    }
60c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
61c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    @Override
62c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    public void onSaveInstanceState(Bundle outState) {
63c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        super.onSaveInstanceState(outState);
64c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        outState.putInt("level", mStackLevel);
65c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    }
66c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
67c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn//BEGIN_INCLUDE(add_dialog)
68c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    void showDialog() {
69c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        mStackLevel++;
70c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
71c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        // DialogFragment.show() will take care of adding the fragment
72c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        // in a transaction.  We also want to remove any currently showing
73c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        // dialog, so make our own transaction and take care of that here.
74c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
75c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
76c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        if (prev != null) {
77c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            ft.remove(prev);
78c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        }
79c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        ft.addToBackStack(null);
80c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
81c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        // Create and show the dialog.
82c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
83c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        newFragment.show(ft, "dialog");
84c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    }
85c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn//END_INCLUDE(add_dialog)
86c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
87c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    static String getNameForNum(int num) {
88c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        switch ((num-1)%6) {
89c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 1: return "STYLE_NO_TITLE";
90c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 2: return "STYLE_NO_FRAME";
91c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 3: return "STYLE_NO_INPUT (this window can't receive input, so "
92c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                    + "you will need to press the bottom show button)";
93c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 4: return "STYLE_NORMAL with dark fullscreen theme";
94c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 5: return "STYLE_NORMAL with light theme";
95c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 6: return "STYLE_NO_TITLE with light theme";
96c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 7: return "STYLE_NO_FRAME with light theme";
97c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            case 8: return "STYLE_NORMAL with light fullscreen theme";
98c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        }
99c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        return "STYLE_NORMAL";
100c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    }
101c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
102c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn//BEGIN_INCLUDE(dialog)
103c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    public static class MyDialogFragment extends DialogFragment {
104c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        int mNum;
105c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
106c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        /**
107c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn         * Create a new instance of MyDialogFragment, providing "num"
108c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn         * as an argument.
109c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn         */
110c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        static MyDialogFragment newInstance(int num) {
111c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            MyDialogFragment f = new MyDialogFragment();
112c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
113c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            // Supply num input as an argument.
114c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            Bundle args = new Bundle();
115c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            args.putInt("num", num);
116c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            f.setArguments(args);
117c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
118c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            return f;
119c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        }
120c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
121c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        @Override
122c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        public void onCreate(Bundle savedInstanceState) {
123c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            super.onCreate(savedInstanceState);
124c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            mNum = getArguments().getInt("num");
125c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
126c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            // Pick a style based on the num.
127c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            int style = DialogFragment.STYLE_NORMAL, theme = 0;
128c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            switch ((mNum-1)%6) {
129c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 1: style = DialogFragment.STYLE_NO_TITLE; break;
130c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 2: style = DialogFragment.STYLE_NO_FRAME; break;
131c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 3: style = DialogFragment.STYLE_NO_INPUT; break;
132c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 4: style = DialogFragment.STYLE_NORMAL; break;
133c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 5: style = DialogFragment.STYLE_NO_TITLE; break;
134c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 6: style = DialogFragment.STYLE_NO_FRAME; break;
135c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 7: style = DialogFragment.STYLE_NORMAL; break;
136c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            }
137c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            switch ((mNum-1)%6) {
138c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 2: theme = android.R.style.Theme_Panel; break;
139c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 4: theme = android.R.style.Theme; break;
140c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 5: theme = android.R.style.Theme_Light; break;
141c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 6: theme = android.R.style.Theme_Light_Panel; break;
142c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                case 7: theme = android.R.style.Theme_Light; break;
143c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            }
144c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            setStyle(style, theme);
145c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        }
146c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
147c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        @Override
148c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        public View onCreateView(LayoutInflater inflater, ViewGroup container,
149c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                Bundle savedInstanceState) {
150c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            View v = inflater.inflate(R.layout.fragment_dialog, container, false);
151c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            View tv = v.findViewById(R.id.text);
152c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            ((TextView)tv).setText("Dialog #" + mNum + ": using style "
153c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                    + getNameForNum(mNum));
154c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
155c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            // Watch for button clicks.
156c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            Button button = (Button)v.findViewById(R.id.show);
157c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            button.setOnClickListener(new OnClickListener() {
158c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                public void onClick(View v) {
159c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                    // When button is clicked, call up to owning activity.
160c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                    ((FragmentDialogSupport)getActivity()).showDialog();
161c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn                }
162c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            });
163c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn
164c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn            return v;
165c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn        }
166c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn    }
167c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn//END_INCLUDE(dialog)
168c644c91b91b83a6b400a57b02671f4ef7b7a810bDianne Hackborn}
169