ActivityGroup.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.app;
18
19import java.util.HashMap;
20
21import android.content.Intent;
22import android.os.Bundle;
23import android.util.Log;
24
25/**
26 * A screen that contains and runs multiple embedded activities.
27 */
28public class ActivityGroup extends Activity {
29    private static final String TAG = "ActivityGroup";
30    private static final String STATES_KEY = "android:states";
31    static final String PARENT_NON_CONFIG_INSTANCE_KEY = "android:parent_non_config_instance";
32
33    /**
34     * This field should be made private, so it is hidden from the SDK.
35     * {@hide}
36     */
37    protected LocalActivityManager mLocalActivityManager;
38
39    public ActivityGroup() {
40        this(true);
41    }
42
43    public ActivityGroup(boolean singleActivityMode) {
44        mLocalActivityManager = new LocalActivityManager(this, singleActivityMode);
45    }
46
47    @Override
48    protected void onCreate(Bundle savedInstanceState) {
49        super.onCreate(savedInstanceState);
50        Bundle states = savedInstanceState != null
51                ? (Bundle) savedInstanceState.getBundle(STATES_KEY) : null;
52        mLocalActivityManager.dispatchCreate(states);
53    }
54
55    @Override
56    protected void onResume() {
57        super.onResume();
58        mLocalActivityManager.dispatchResume();
59    }
60
61    @Override
62    protected void onSaveInstanceState(Bundle outState) {
63        super.onSaveInstanceState(outState);
64        Bundle state = mLocalActivityManager.saveInstanceState();
65        if (state != null) {
66            outState.putBundle(STATES_KEY, state);
67        }
68    }
69
70    @Override
71    protected void onPause() {
72        super.onPause();
73        mLocalActivityManager.dispatchPause(isFinishing());
74    }
75
76    @Override
77    protected void onStop() {
78        super.onStop();
79        mLocalActivityManager.dispatchStop();
80    }
81
82    @Override
83    protected void onDestroy() {
84        super.onDestroy();
85        mLocalActivityManager.dispatchDestroy(isFinishing());
86    }
87
88    /**
89     * Returns a HashMap mapping from child activity ids to the return values
90     * from calls to their onRetainNonConfigurationInstance methods.
91     *
92     * {@hide}
93     */
94    @Override
95    public HashMap<String,Object> onRetainNonConfigurationChildInstances() {
96        return mLocalActivityManager.dispatchRetainNonConfigurationInstance();
97    }
98
99    public Activity getCurrentActivity() {
100        return mLocalActivityManager.getCurrentActivity();
101    }
102
103    public final LocalActivityManager getLocalActivityManager() {
104        return mLocalActivityManager;
105    }
106
107    @Override
108    void dispatchActivityResult(String who, int requestCode, int resultCode,
109            Intent data) {
110        if (who != null) {
111            Activity act = mLocalActivityManager.getActivity(who);
112            /*
113            if (Config.LOGV) Log.v(
114                TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode
115                + ", resCode=" + resultCode + ", data=" + data
116                + ", rec=" + rec);
117            */
118            if (act != null) {
119                act.onActivityResult(requestCode, resultCode, data);
120                return;
121            }
122        }
123        super.dispatchActivityResult(who, requestCode, resultCode, data);
124    }
125}
126
127
128