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