BaseTestActivity.java revision 3de8a4e8305507475d7890205184946a25cf45e7
1/*
2 * Copyright (C) 2015 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 androidx.appcompat.testutils;
18
19import android.os.Bundle;
20import android.view.KeyEvent;
21import android.view.Menu;
22import android.view.MenuItem;
23import android.view.WindowManager;
24
25import androidx.annotation.NonNull;
26import androidx.annotation.Nullable;
27import androidx.appcompat.app.AppCompatCallback;
28import androidx.appcompat.test.R;
29import androidx.appcompat.view.ActionMode;
30import androidx.testutils.RecreatedAppCompatActivity;
31
32public abstract class BaseTestActivity extends RecreatedAppCompatActivity {
33
34    private Menu mMenu;
35
36    private KeyEvent mOnKeyDownEvent;
37    private KeyEvent mOnKeyUpEvent;
38    private KeyEvent mOnKeyShortcutEvent;
39
40    private MenuItem mOptionsItemSelected;
41
42    private boolean mOnMenuOpenedCalled;
43    private boolean mOnPanelClosedCalled;
44
45    private boolean mShouldPopulateOptionsMenu = true;
46
47    private boolean mOnBackPressedCalled;
48    private boolean mDestroyed;
49
50    private AppCompatCallback mAppCompatCallback;
51
52    @Override
53    protected void onCreate(Bundle savedInstanceState) {
54        super.onCreate(savedInstanceState);
55        overridePendingTransition(0, 0);
56        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
57        final int contentView = getContentViewLayoutResId();
58        if (contentView > 0) {
59            setContentView(contentView);
60        }
61        onContentViewSet();
62        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
63    }
64
65    @Override
66    public void finish() {
67        super.finish();
68        overridePendingTransition(0, 0);
69    }
70
71    protected abstract int getContentViewLayoutResId();
72
73    protected void onContentViewSet() {
74    }
75
76    @Override
77    public boolean onOptionsItemSelected(MenuItem item) {
78        mOptionsItemSelected = item;
79        return super.onOptionsItemSelected(item);
80    }
81
82    @Override
83    public boolean onMenuOpened(int featureId, Menu menu) {
84        mOnMenuOpenedCalled = true;
85        return super.onMenuOpened(featureId, menu);
86    }
87
88    @Override
89    public void onPanelClosed(int featureId, Menu menu) {
90        mOnPanelClosedCalled = true;
91        super.onPanelClosed(featureId, menu);
92    }
93
94    @Override
95    public boolean onKeyDown(int keyCode, KeyEvent event) {
96        mOnKeyDownEvent = event;
97        return super.onKeyDown(keyCode, event);
98    }
99
100    @Override
101    public boolean onKeyUp(int keyCode, KeyEvent event) {
102        mOnKeyUpEvent = event;
103        return super.onKeyUp(keyCode, event);
104    }
105
106    @Override
107    public boolean onKeyShortcut(int keyCode, KeyEvent event) {
108        mOnKeyShortcutEvent = event;
109        return super.onKeyShortcut(keyCode, event);
110    }
111
112    public KeyEvent getInvokedKeyShortcutEvent() {
113        return mOnKeyShortcutEvent;
114    }
115
116    public boolean wasOnMenuOpenedCalled() {
117        return mOnMenuOpenedCalled;
118    }
119
120    public boolean wasOnPanelClosedCalled() {
121        return mOnPanelClosedCalled;
122    }
123
124    public KeyEvent getInvokedKeyDownEvent() {
125        return mOnKeyDownEvent;
126    }
127
128    public KeyEvent getInvokedKeyUpEvent() {
129        return mOnKeyUpEvent;
130    }
131
132    @Override
133    public boolean onCreateOptionsMenu(Menu menu) {
134        mMenu = menu;
135        if (mShouldPopulateOptionsMenu) {
136            getMenuInflater().inflate(R.menu.sample_actions, menu);
137            return true;
138        } else {
139            menu.clear();
140            return super.onCreateOptionsMenu(menu);
141        }
142    }
143
144    public MenuItem getOptionsItemSelected() {
145        return mOptionsItemSelected;
146    }
147
148    public void reset() {
149        mOnKeyUpEvent = null;
150        mOnKeyDownEvent = null;
151        mOnKeyShortcutEvent = null;
152        mOnMenuOpenedCalled = false;
153        mOnPanelClosedCalled = false;
154        mMenu = null;
155        mOptionsItemSelected = null;
156    }
157
158    public void setShouldPopulateOptionsMenu(boolean populate) {
159        mShouldPopulateOptionsMenu = populate;
160        if (mMenu != null) {
161            supportInvalidateOptionsMenu();
162        }
163    }
164
165    @Override
166    protected void onDestroy() {
167        super.onDestroy();
168        mDestroyed = true;
169    }
170
171    @Override
172    public void onBackPressed() {
173        super.onBackPressed();
174        mOnBackPressedCalled = true;
175    }
176
177    public boolean wasOnBackPressedCalled() {
178        return mOnBackPressedCalled;
179    }
180
181    public Menu getMenu() {
182        return mMenu;
183    }
184
185    @Override
186    public boolean isDestroyed() {
187        return mDestroyed;
188    }
189
190    @Override
191    public void onSupportActionModeStarted(@NonNull ActionMode mode) {
192        if (mAppCompatCallback != null) {
193            mAppCompatCallback.onSupportActionModeStarted(mode);
194        }
195    }
196
197    @Override
198    public void onSupportActionModeFinished(@NonNull ActionMode mode) {
199        if (mAppCompatCallback != null) {
200            mAppCompatCallback.onSupportActionModeFinished(mode);
201        }
202    }
203
204    @Nullable
205    @Override
206    public ActionMode onWindowStartingSupportActionMode(@NonNull ActionMode.Callback callback) {
207        if (mAppCompatCallback != null) {
208            return mAppCompatCallback.onWindowStartingSupportActionMode(callback);
209        }
210        return super.onWindowStartingSupportActionMode(callback);
211    }
212
213    public void setAppCompatCallback(AppCompatCallback callback) {
214        mAppCompatCallback = callback;
215    }
216}
217