19fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn/*
29fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project
39fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn *
49fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
59fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * you may not use this file except in compliance with the License.
69fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * You may obtain a copy of the License at
79fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn *
89fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
99fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn *
109fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
119fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
129fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * See the License for the specific language governing permissions and
149fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn * limitations under the License.
159fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn */
169fd3b6e9933096ad992dcc2212fdce99ce80b597Dianne Hackborn
1768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornpackage com.example.android.apis.app;
1868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
1968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport com.example.android.apis.R;
2068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
2168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.app.Activity;
2268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.app.Fragment;
2368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.app.FragmentTransaction;
2468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.content.Intent;
2568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.os.Bundle;
2668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.text.Editable;
2768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.view.LayoutInflater;
2868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.view.View;
2968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.view.View.OnClickListener;
3045ae9c3def3e67e866172b4dd8ae10cf759f77abAndrew Stadlerimport android.view.ViewGroup;
3168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.widget.Button;
3268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.widget.FrameLayout;
3368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornimport android.widget.TextView;
3468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
3568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackbornpublic class FragmentReceiveResult extends Activity {
3645ae9c3def3e67e866172b4dd8ae10cf759f77abAndrew Stadler
3768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn    @Override
3868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn    protected void onCreate(Bundle savedInstanceState) {
3968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        super.onCreate(savedInstanceState);
4068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
4168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                ViewGroup.LayoutParams.MATCH_PARENT,
4268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                ViewGroup.LayoutParams.MATCH_PARENT);
4368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        FrameLayout frame = new FrameLayout(this);
4468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        frame.setId(R.id.simple_fragment);
4568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        setContentView(frame, lp);
4668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
4768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        if (savedInstanceState == null) {
4868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            // Do first time initialization -- add fragment.
4968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            Fragment newFragment = new ReceiveResultFragment();
500d11c9c34501a9a9dedee1092fd63af218dc28c8Dianne Hackborn            FragmentTransaction ft = getFragmentManager().beginTransaction();
51165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn            ft.add(R.id.simple_fragment, newFragment).commit();
5268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        }
5368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn    }
5445ae9c3def3e67e866172b4dd8ae10cf759f77abAndrew Stadler
55165ca04d0e05db466442be38110d4cc16e7f7618Dianne Hackborn    public static class ReceiveResultFragment extends Fragment {
5668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        // Definition of the one requestCode we use for receiving resuls.
5768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        static final private int GET_CODE = 0;
5845ae9c3def3e67e866172b4dd8ae10cf759f77abAndrew Stadler
5968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        private TextView mResults;
6045ae9c3def3e67e866172b4dd8ae10cf759f77abAndrew Stadler
6168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        private OnClickListener mGetListener = new OnClickListener() {
6268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            public void onClick(View v) {
6368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // Start the activity whose result we want to retrieve.  The
6468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // result will come back with request code GET_CODE.
6568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                Intent intent = new Intent(getActivity(), SendResult.class);
6668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                startActivityForResult(intent, GET_CODE);
6768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            }
6868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        };
6968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
7068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        @Override
7168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        public void onCreate(Bundle savedInstanceState) {
7268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            super.onCreate(savedInstanceState);
7368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        }
7468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
7568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        @Override
7668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        public void onSaveInstanceState(Bundle outState) {
7768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            super.onSaveInstanceState(outState);
7868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        }
7968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
8045ae9c3def3e67e866172b4dd8ae10cf759f77abAndrew Stadler        @Override
8168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        public View onCreateView(LayoutInflater inflater, ViewGroup container,
8268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                Bundle savedInstanceState) {
8368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            View v = inflater.inflate(R.layout.receive_result, container, false);
8468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
8568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            // Retrieve the TextView widget that will display results.
8668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            mResults = (TextView)v.findViewById(R.id.results);
8768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
8868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            // This allows us to later extend the text buffer.
8968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            mResults.setText(mResults.getText(), TextView.BufferType.EDITABLE);
9068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
9168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            // Watch for button clicks.
9268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            Button getButton = (Button)v.findViewById(R.id.get);
9368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            getButton.setOnClickListener(mGetListener);
9468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
9568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            return v;
9668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        }
9745ae9c3def3e67e866172b4dd8ae10cf759f77abAndrew Stadler
9868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        /**
9968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn         * This method is called when the sending activity has finished, with the
10068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn         * result it supplied.
10168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn         */
10268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        @Override
10368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        public void onActivityResult(int requestCode, int resultCode, Intent data) {
10468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            // You can use the requestCode to select between multiple child
10568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            // activities you may have started.  Here there is only one thing
10668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            // we launch.
10768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            if (requestCode == GET_CODE) {
10868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
10968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // We will be adding to our text.
11068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                Editable text = (Editable)mResults.getText();
11168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
11268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // This is a standard resultCode that is sent back if the
11368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // activity doesn't supply an explicit result.  It will also
11468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // be returned if the activity failed to launch.
11568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                if (resultCode == RESULT_CANCELED) {
11668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                    text.append("(cancelled)");
11768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
11868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // Our protocol with the sending activity is that it will send
11968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                // text in 'data' as its result.
12068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                } else {
12168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                    text.append("(okay ");
12268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                    text.append(Integer.toString(resultCode));
12368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                    text.append(") ");
12468f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                    if (data != null) {
12568f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                        text.append(data.getAction());
12668f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                    }
12768f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                }
12868f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn
12968f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn                text.append("\n");
13068f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn            }
13168f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn        }
13268f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn    }
13368f9ae5d188be9ba24871604b1ac9b412c86d6e8Dianne Hackborn}
134