1d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project 3d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 4d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * you may not use this file except in compliance with the License. 6d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * You may obtain a copy of the License at 7d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 8d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * http://www.apache.org/licenses/LICENSE-2.0 9d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * 10d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * Unless required by applicable law or agreed to in writing, software 11d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * See the License for the specific language governing permissions and 14d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase * limitations under the License. 15d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase */ 16d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.recyclerview.widget; 18d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 19d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.app.Activity; 20d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport android.os.Bundle; 21959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyarimport android.support.test.runner.MonitoringInstrumentation; 221a2a95faea3d32075b8506f13f6d6f8292db51b6Yigit Boyarimport android.view.WindowManager; 23d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 24959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyarpublic class TestActivity extends Activity { 25959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar // This is not great but the only way to do this until test runner adds support to not kill 26959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar // activities after tests. 27959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar private static final String TEST_RUNNER = 28959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar MonitoringInstrumentation.class.getCanonicalName() + "$" + MonitoringInstrumentation 29959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar .ActivityFinisher.class.getSimpleName(); 30a90fb62f06861beb3af9f9b3356ef0bb0685547cYigit Boyar private volatile TestedFrameLayout mContainer; 31959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar boolean mVisible; 32959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar boolean mAllowFinish; 33d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase 34d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase @Override 35d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase protected void onCreate(Bundle savedInstanceState) { 36d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase super.onCreate(savedInstanceState); 37320463c1cf5f8e50cce340df195b60835fe23002Aurimas Liutikas overridePendingTransition(0, 0); 38320463c1cf5f8e50cce340df195b60835fe23002Aurimas Liutikas 39f129f1b050d2542a91fe8175eac30183beb07b41Chris Banes mContainer = new TestedFrameLayout(this); 401a2a95faea3d32075b8506f13f6d6f8292db51b6Yigit Boyar getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 41959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 42d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase setContentView(mContainer); 43619ac016831a5ad75c2e0921c9036b6f030a9e63Yigit Boyar getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 44d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase } 45320463c1cf5f8e50cce340df195b60835fe23002Aurimas Liutikas 46a90fb62f06861beb3af9f9b3356ef0bb0685547cYigit Boyar public TestedFrameLayout getContainer() { 47a90fb62f06861beb3af9f9b3356ef0bb0685547cYigit Boyar return mContainer; 48a90fb62f06861beb3af9f9b3356ef0bb0685547cYigit Boyar } 49a90fb62f06861beb3af9f9b3356ef0bb0685547cYigit Boyar 50959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar @Override 51959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar protected void onPause() { 52959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar super.onPause(); 53959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar mVisible = false; 54959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar } 55959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar 56959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar @Override 57959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar public void onResume() { 58959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar super.onResume(); 59959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar mVisible = true; 60959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar } 61959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar 62320463c1cf5f8e50cce340df195b60835fe23002Aurimas Liutikas @Override 63320463c1cf5f8e50cce340df195b60835fe23002Aurimas Liutikas public void finish() { 64959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar if (!mAllowFinish) { 65959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); 66959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar // this is terrible but easy workaround for selective finishing 67959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar for (StackTraceElement element : stackTrace) { 68959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar 69959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar if (TEST_RUNNER.equals(element.getClassName())) { 70959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar // don't allow activity finisher to finish this. 71959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar return; 72959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar } 73959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar } 74959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar } 75320463c1cf5f8e50cce340df195b60835fe23002Aurimas Liutikas super.finish(); 76959f4c0fac89425a8a9842e82fc180ec736fffacYigit Boyar } 77d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase} 78