10bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei/*
20bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * Copyright (C) 2016 The Android Open Source Project
30bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei *
40bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * Licensed under the Apache License, Version 2.0 (the "License");
50bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * you may not use this file except in compliance with the License.
60bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * You may obtain a copy of the License at
70bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei *
80bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei *      http://www.apache.org/licenses/LICENSE-2.0
90bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei *
100bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * Unless required by applicable law or agreed to in writing, software
110bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * distributed under the License is distributed on an "AS IS" BASIS,
120bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * See the License for the specific language governing permissions and
140bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei * limitations under the License.
150bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei */
160bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleipackage com.android.settings.tests;
170bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
18acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shankaimport android.app.ActivityManager;
190bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.content.Context;
200bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.content.Intent;
210bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.provider.Settings;
220bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.support.test.InstrumentationRegistry;
230bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.support.test.filters.SmallTest;
240bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.support.test.runner.AndroidJUnit4;
250bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.support.test.uiautomator.By;
260bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.support.test.uiautomator.UiDevice;
270bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport android.support.test.uiautomator.Until;
280bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport org.junit.After;
290bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport org.junit.Before;
300bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport org.junit.Test;
310bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleiimport org.junit.runner.RunWith;
320bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
330bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei@RunWith(AndroidJUnit4.class)
340bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei@SmallTest
350bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyuleipublic class SettingsRestoreAfterCloseTest {
360bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    private static final String PACKAGE_SETTINGS = "com.android.settings";
370bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    private static final int TIME_OUT = 2000;
380bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
390bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    private boolean mAlwaysFinish;
400bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
410bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    @Before
420bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    public void setUp() throws Exception {
430bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        // To make sure when we press home button, the activity will be destroyed by OS
440bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        Context context = InstrumentationRegistry.getContext();
450bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        mAlwaysFinish = Settings.Global.getInt(
460bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei                context.getContentResolver(), Settings.Global
470bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei                .ALWAYS_FINISH_ACTIVITIES, 0)
480bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei                != 0;
490bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
50acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shanka        ActivityManager.getService().setAlwaysFinish(true);
510bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    }
520bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
530bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    @After
540bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    public void tearDown() throws Exception {
55acb1a61f3f1309fadbf762f4273fc6f641927586Sudheer Shanka        ActivityManager.getService().setAlwaysFinish(mAlwaysFinish);
560bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    }
570bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
580bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    @Test
590bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    public void testRtlStability_AppCloseAndReOpen_shouldNotCrash() throws Exception {
600bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
610bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        final UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation
620bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei                ());
630bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        uiDevice.pressHome();
640bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
650bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        // Open the settings app
660bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        startSettingsMainActivity(uiDevice);
670bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
680bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        // Press home button
690bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        uiDevice.pressHome();
700bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        final String launcherPackage = uiDevice.getLauncherPackageName();
710bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        uiDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), TIME_OUT);
720bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
730bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        // Open the settings again
740bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        startSettingsMainActivity(uiDevice);
750bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    }
760bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei
770bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    private void startSettingsMainActivity(UiDevice uiDevice) {
780bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        Context context = InstrumentationRegistry.getContext();
790bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
800bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei        uiDevice.wait(Until.hasObject(By.pkg(PACKAGE_SETTINGS).depth(0)), TIME_OUT);
810bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei    }
820bfee2799d8512b9ac1431ff9b481c42ee0f8fe8jackqdyulei}
83