11404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard/*
21404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * Copyright (C) 2013 The Android Open Source Project
31404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard *
41404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * Licensed under the Apache License, Version 2.0 (the "License");
51404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * you may not use this file except in compliance with the License.
61404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * You may obtain a copy of the License at
71404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard *
81404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard *      http://www.apache.org/licenses/LICENSE-2.0
91404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard *
101404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * Unless required by applicable law or agreed to in writing, software
111404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * distributed under the License is distributed on an "AS IS" BASIS,
121404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * See the License for the specific language governing permissions and
141404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard * limitations under the License.
151404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard */
161404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
171404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardpackage com.android.inputmethod.latin;
181404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
191404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport com.android.inputmethod.latin.settings.Settings;
201404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
211404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport android.content.pm.ApplicationInfo;
221404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport android.content.pm.PackageManager;
231404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport android.os.Build.VERSION_CODES;
241404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport android.test.suitebuilder.annotation.LargeTest;
251404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport android.view.inputmethod.EditorInfo;
261404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
271404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard@LargeTest
281404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardpublic class AppWorkaroundsTests extends InputTestsBase {
291404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    String packageNameOfAppBeforeJellyBean;
301404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    String packageNameOfAppAfterJellyBean;
311404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
321404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    @Override
331404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    protected void setUp() throws Exception {
341404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        // NOTE: this will fail if there is no app installed that targets an SDK
351404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        // before Jelly Bean. For the moment, it's fine.
361404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        final PackageManager pm = getContext().getPackageManager();
371404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        for (ApplicationInfo ai : pm.getInstalledApplications(0 /* flags */)) {
381404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard            if (ai.targetSdkVersion < VERSION_CODES.JELLY_BEAN) {
391404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard                packageNameOfAppBeforeJellyBean = ai.packageName;
401404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard            } else {
411404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard                packageNameOfAppAfterJellyBean = ai.packageName;
421404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard            }
431404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        }
441404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        super.setUp();
451404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    }
461404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
471404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    // We want to test if the app package info is correctly retrieved by LatinIME. Since it
481404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    // asks this information to the package manager from the package name, and that it takes
491404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    // the package name from the EditorInfo, all we have to do it put the correct package
501404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    // name in the editor info.
511404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    // To this end, our base class InputTestsBase offers a hook for us to touch the EditorInfo.
521404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    // We override this hook to write the package name that we need.
531404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    @Override
541404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    protected EditorInfo enrichEditorInfo(final EditorInfo ei) {
551404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        if ("testBeforeJellyBeanTrue".equals(getName())) {
561404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard            ei.packageName = packageNameOfAppBeforeJellyBean;
571404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        } else if ("testBeforeJellyBeanFalse".equals(getName())) {
581404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard            ei.packageName = packageNameOfAppAfterJellyBean;
591404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        }
601404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        return ei;
611404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    }
621404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
631404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    public void testBeforeJellyBeanTrue() {
641404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        assertTrue("Couldn't successfully detect this app targets < Jelly Bean (package is "
651404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard                + packageNameOfAppBeforeJellyBean + ")",
661404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard                Settings.getInstance().getCurrent().isBeforeJellyBean());
671404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    }
681404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard
691404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    public void testBeforeJellyBeanFalse() {
701404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard        assertFalse("Couldn't successfully detect this app targets >= Jelly Bean (package is "
711404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard                + packageNameOfAppAfterJellyBean + ")",
721404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard                Settings.getInstance().getCurrent().isBeforeJellyBean());
731404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard    }
741404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard}