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