From f631efeca91c49cdd07807ca87802661a38717bf Mon Sep 17 00:00:00 2001 From: Martijn Brekhof Date: Thu, 3 May 2018 12:04:04 +0200 Subject: [PATCH] Fixed issue with running many instrumentation tests (#536) During tests, activities were not closed properly causing increasing memory usage, which resulted in failing tests because of out of memory errors. This has been fixed by using the test orchestrator which runs each test in its own instrumentation instance. Removed the instrumentationTest flavor and replaced it by using the default debug build type. The flavor was used to keep the required permissions during testing separate from release versions. This can also be accomplished using the debug build type. The PagerSlidingTabStrip from astuetz doesn't work with the new android build tools. As the project seems dead, I replaced it with PagerTabStrip from the support library. --- .travis.yml | 6 +- app/build.gradle | 120 +++++++----------- app/proguardTest-rules.pro | 8 -- .../kore/testhelpers/EspressoTestUtils.java | 18 +-- .../java/org/xbmc/kore/testhelpers/Utils.java | 2 + .../kore/testhelpers/action/ViewActions.java | 40 ++++++ .../AndroidManifest.xml | 0 app/src/{testUtils => debug}/README.md | 0 .../assets/Addons.GetAddons.json | 0 .../assets/AudioLibrary.GetAlbums.json | 0 .../assets/AudioLibrary.GetArtists.json | 0 .../assets/AudioLibrary.GetGenres.json | 0 .../assets/AudioLibrary.GetSongs.json | 0 .../assets/Video.Details.Movie.json | 0 .../assets/VideoLibrary.GetEpisodes.json | 0 .../assets/VideoLibrary.GetMusicVideos.json | 0 .../assets/VideoLibrary.GetSeasons.json | 0 .../assets/VideoLibrary.GetTVShows.json | 0 .../org/xbmc/kore/testutils/CursorUtils.java | 0 .../org/xbmc/kore/testutils/Database.java | 0 .../org/xbmc/kore/testutils/FileUtils.java | 0 .../org/xbmc/kore/testutils/TestUtils.java | 0 .../testutils/eventserver/EventPacket.java | 0 .../eventserver/EventPacketBUTTON.java | 0 .../eventserver/MockEventServer.java | 0 .../testutils/tcpserver/MockTcpServer.java | 0 .../tcpserver/handlers/AddonsHandler.java | 0 .../handlers/ApplicationHandler.java | 0 .../tcpserver/handlers/InputHandler.java | 0 .../JSONConnectionHandlerManager.java | 0 .../tcpserver/handlers/JSONRPCHandler.java | 0 .../tcpserver/handlers/PlayerHandler.java | 0 .../handlers/jsonrpc/JsonResponse.java | 0 .../tcpserver/handlers/jsonrpc/JsonUtils.java | 0 .../jsonrpc/nodes/AudioDetailsNode.java | 0 .../jsonrpc/nodes/SubtitleDetailsNode.java | 0 .../jsonrpc/nodes/VideoDetailsNode.java | 0 .../jsonrpc/response/methods/Addons.java | 0 .../jsonrpc/response/methods/Application.java | 0 .../jsonrpc/response/methods/JSONRPC.java | 0 .../jsonrpc/response/methods/Player.java | 0 .../response/notifications/Application.java | 0 .../response/notifications/Player.java | 0 app/src/instrumentationTest/README.md | 5 - .../xbmc/kore/ui/AbstractTabsFragment.java | 5 - .../ui/sections/audio/MusicListFragment.java | 7 - .../main/res/drawable/ic_sunny_white_24dp.xml | 2 +- .../layout/fragment_default_view_pager.xml | 16 ++- app/src/main/res/layout/now_playing_panel.xml | 4 +- .../main/res/transition-v21/media_details.xml | 4 +- app/src/main/res/values/styles.xml | 9 -- build.gradle | 9 +- gradle/wrapper/gradle-wrapper.properties | 4 +- tools/jenkins/buildsteps/build-release | 2 +- tools/jenkins/buildsteps/package | 4 +- 55 files changed, 120 insertions(+), 145 deletions(-) delete mode 100644 app/proguardTest-rules.pro rename app/src/{instrumentationTest => debug}/AndroidManifest.xml (100%) rename app/src/{testUtils => debug}/README.md (100%) rename app/src/{testUtils => debug}/assets/Addons.GetAddons.json (100%) rename app/src/{testUtils => debug}/assets/AudioLibrary.GetAlbums.json (100%) rename app/src/{testUtils => debug}/assets/AudioLibrary.GetArtists.json (100%) rename app/src/{testUtils => debug}/assets/AudioLibrary.GetGenres.json (100%) rename app/src/{testUtils => debug}/assets/AudioLibrary.GetSongs.json (100%) rename app/src/{testUtils => debug}/assets/Video.Details.Movie.json (100%) rename app/src/{testUtils => debug}/assets/VideoLibrary.GetEpisodes.json (100%) rename app/src/{testUtils => debug}/assets/VideoLibrary.GetMusicVideos.json (100%) rename app/src/{testUtils => debug}/assets/VideoLibrary.GetSeasons.json (100%) rename app/src/{testUtils => debug}/assets/VideoLibrary.GetTVShows.json (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/CursorUtils.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/Database.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/FileUtils.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/TestUtils.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/eventserver/EventPacket.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/eventserver/EventPacketBUTTON.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/eventserver/MockEventServer.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/MockTcpServer.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/AddonsHandler.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/ApplicationHandler.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/InputHandler.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONConnectionHandlerManager.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONRPCHandler.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/PlayerHandler.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonResponse.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonUtils.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/AudioDetailsNode.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/SubtitleDetailsNode.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/VideoDetailsNode.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Addons.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Application.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/JSONRPC.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Player.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Application.java (100%) rename app/src/{testUtils => debug}/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Player.java (100%) delete mode 100644 app/src/instrumentationTest/README.md mode change 100644 => 100755 tools/jenkins/buildsteps/build-release mode change 100644 => 100755 tools/jenkins/buildsteps/package diff --git a/.travis.yml b/.travis.yml index 4848ed2..965f0e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,9 +14,9 @@ android: # "tools" always refers to the latest build tools version. Remove this # when travis is able to parse "build-tools-23.0.3" correctly. # See https://github.com/travis-ci/travis-ci/issues/5036 - - tools + # - tools # needed build tools - - build-tools-26.0.2 + - build-tools-27.0.3 # The SDK version used to compile your project - android-26 @@ -27,4 +27,4 @@ android: before_script: script: - - ./gradlew lintFullRelease testFullDebugUnitTest assembleFullRelease + - ./gradlew assembleRelease lintRelease testDebugUnitTest diff --git a/app/build.gradle b/app/build.gradle index 6a800d3..60f7a80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ def getVersionName = { -> android { compileSdkVersion 26 - buildToolsVersion "26.0.2" + buildToolsVersion "27.0.3" defaultConfig { applicationId "org.xbmc.kore" @@ -20,6 +20,8 @@ android { targetSdkVersion 26 versionCode 19 versionName = getVersionName() + vectorDrawables.useSupportLibrary = true + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } File keystoreFile = file('keystore.properties') @@ -38,38 +40,22 @@ android { } } - sourceSets { - fullDebug { - assets.srcDirs += 'src/testUtils/assets' - } - test { - java.srcDirs += 'src/testUtils/java' - } - androidTest { - java.srcDirs += 'src/testUtils/java' - } - instrumentationTest { - assets.srcDirs += 'src/testUtils/assets' - } - } +// sourceSets { +// test { +// java.srcDirs += 'src/testUtils/java' +// assets.srcDirs += 'src/testUtils/assets' +// } +// androidTest { +// java.srcDirs += 'src/testUtils/java' +// assets.srcDirs += 'src/testUtils/assets' +// } +// } - productFlavors { - full { - } - - instrumentationTest { - applicationId "org.xbmc.kore.instrumentationtest" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - proguardFiles 'proguardTest-rules.pro' - } + testOptions { + execution 'ANDROID_TEST_ORCHESTRATOR' } buildTypes { -// debug { -// minifyEnabled true -// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' -// } - release { if (keystoreFile.exists()) { signingConfig signingConfigs.release @@ -86,7 +72,7 @@ android { //The xml launcher icon introduced in API 26 causes lint to generate //an error that the icon is not a PNG format //This reduces the error to a warning - warning 'IconLauncherFormat' +// warning 'IconLauncherFormat' } // allprojects { @@ -111,66 +97,56 @@ ext { } dependencies { - compile "com.android.support:support-v4:${supportLibVersion}" - compile "com.android.support:appcompat-v7:${supportLibVersion}" - compile "com.android.support:cardview-v7:${supportLibVersion}" - compile "com.android.support:preference-v14:${supportLibVersion}" - compile "com.android.support:support-v13:${supportLibVersion}" - compile "com.android.support:design:${supportLibVersion}" + implementation "com.android.support:support-v4:${supportLibVersion}" + implementation "com.android.support:appcompat-v7:${supportLibVersion}" + implementation "com.android.support:cardview-v7:${supportLibVersion}" + implementation "com.android.support:preference-v14:${supportLibVersion}" + implementation "com.android.support:support-v13:${supportLibVersion}" + implementation "com.android.support:design:${supportLibVersion}" - compile 'com.fasterxml.jackson.core:jackson-databind:2.5.2' - compile 'com.jakewharton:butterknife:8.8.1' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.5.2' + implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' - compile 'com.squareup.okhttp:okhttp:2.3.0' - compile 'com.squareup.picasso:picasso:2.5.2' - compile 'de.greenrobot:eventbus:2.4.0' - compile 'org.jmdns:jmdns:3.5.1' - compile 'com.astuetz:pagerslidingtabstrip:1.0.1' - compile 'at.blogc:expandabletextview:1.0.3' - compile 'com.sothree.slidinguppanel:library:3.3.1' + implementation 'com.squareup.okhttp:okhttp:2.3.0' + implementation 'com.squareup.picasso:picasso:2.5.2' + implementation 'de.greenrobot:eventbus:2.4.0' + implementation 'org.jmdns:jmdns:3.5.1' + implementation 'at.blogc:expandabletextview:1.0.3' + implementation 'com.sothree.slidinguppanel:library:3.3.1' - androidTestCompile 'com.android.support.test:runner:1.0.1' - androidTestCompile 'com.android.support.test:rules:1.0.1' - androidTestCompile 'org.hamcrest:hamcrest-library:1.3' - androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1' - androidTestCompile "com.android.support:support-v13:${supportLibVersion}" - instrumentationTestCompile 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test:rules:1.0.1' + androidTestUtil 'com.android.support.test:orchestrator:1.0.1' + androidTestImplementation 'org.hamcrest:hamcrest-library:1.3' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + androidTestImplementation "com.android.support:support-v13:${supportLibVersion}" + androidTestImplementation 'junit:junit:4.12' - testCompile 'org.robolectric:robolectric:3.1.1' - testCompile 'junit:junit:4.12' - - compile fileTree(dir: 'libs', include: ['*.jar']) + testImplementation 'org.robolectric:robolectric:3.1.1' + debugImplementation 'junit:junit:4.12' + implementation fileTree(dir: 'libs', include: ['*.jar']) } -// Get the path to ADB. Required when running tests directly from Android Studio. -// Source: http://stackoverflow.com/a/26771087/112705 -def adb = android.getAdbExe().toString() - -// Source: http://stackoverflow.com/q/29908110/112705 +def adb = android.getAdbExecutable().toString() afterEvaluate { - task grantAnimationPermissionDev(type: Exec, dependsOn: 'installInstrumentationTestDebug') { + task grantAnimationPermissionDev(type: Exec, dependsOn: installDebug) { doFirst { - println("Executing: $adb shell pm grant $android.productFlavors.instrumentationTest.applicationId android.permission.SET_ANIMATION_SCALE") - commandLine "$adb shell pm grant $android.productFlavors.instrumentationTest.applicationId android.permission.SET_ANIMATION_SCALE".split(' ') + println("Executing: $adb shell pm grant $android.defaultConfig.applicationId android.permission.SET_ANIMATION_SCALE") + commandLine "$adb shell pm grant $android.defaultConfig.applicationId android.permission.SET_ANIMATION_SCALE".split(' ') } } - - // When launching individual tests from Android Studio, it seems that only the assemble tasks - // get called directly, not the install* versions tasks.each { task -> - if (task.name.startsWith('assembleInstrumentationTestDebugAndroidTest')) { + if (task.name.startsWith('connectedDebugAndroidTest')) { task.dependsOn grantAnimationPermissionDev } } } /** - * Android gradle plugin 2.3.x contains a bug where the assets for fullDebug - * are not copied. The task assembleFullDebug does copy the required assets, - * so this dependency fixes the issue. + * Makes sure assets are copied before running the unit tests */ tasks.whenTaskAdded { task -> - if (task.name.contains("compileFullDebugUnitTestSources")) { - task.dependsOn assembleFullDebug + if (task.name.contains("testDebugUnitTest")) { + task.dependsOn assembleDebug } } \ No newline at end of file diff --git a/app/proguardTest-rules.pro b/app/proguardTest-rules.pro deleted file mode 100644 index 2d97617..0000000 --- a/app/proguardTest-rules.pro +++ /dev/null @@ -1,8 +0,0 @@ --keep class org.junit.** { *; } --dontwarn org.junit.** - --keep class junit.** { *; } --dontwarn junit.** - --keep class sun.misc.** { *; } --dontwarn sun.misc.** \ No newline at end of file diff --git a/app/src/androidTest/java/org/xbmc/kore/testhelpers/EspressoTestUtils.java b/app/src/androidTest/java/org/xbmc/kore/testhelpers/EspressoTestUtils.java index c744d6d..37cd756 100644 --- a/app/src/androidTest/java/org/xbmc/kore/testhelpers/EspressoTestUtils.java +++ b/app/src/androidTest/java/org/xbmc/kore/testhelpers/EspressoTestUtils.java @@ -39,8 +39,6 @@ import static android.support.test.espresso.Espresso.openActionBarOverflowOrOpti import static android.support.test.espresso.Espresso.pressBack; import static android.support.test.espresso.action.ViewActions.clearText; import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.action.ViewActions.swipeLeft; -import static android.support.test.espresso.action.ViewActions.swipeRight; import static android.support.test.espresso.action.ViewActions.typeText; import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist; import static android.support.test.espresso.assertion.ViewAssertions.matches; @@ -209,24 +207,10 @@ public class EspressoTestUtils { /** * Clicks on tab that contains the text given by stringResourceId. - * If the click fails tries again after a swipe left. If the click fails - * after that try once more after swiping right two times. The first swipe right - * is performed to negate the previous swipe left. * @param stringResourceId text displayed in Tab that should be clicked */ public static void clickTab(int stringResourceId) { - try { - onView(withText(stringResourceId)).perform(click()); - } catch (Exception e1) { - try { - onView(withId(R.id.pager_tab_strip)).perform(swipeLeft()); - onView(withText(stringResourceId)).perform(click()); - } catch (Exception e2) { - onView(withId(R.id.pager_tab_strip)).perform(swipeRight()); - onView(withId(R.id.pager_tab_strip)).perform(swipeRight()); - onView(withText(stringResourceId)).perform(click()); - } - } + onView(withId(R.id.pager)).perform(ViewActions.setCurrentViewPagerItem(stringResourceId)); } /** diff --git a/app/src/androidTest/java/org/xbmc/kore/testhelpers/Utils.java b/app/src/androidTest/java/org/xbmc/kore/testhelpers/Utils.java index df49507..42f18e3 100644 --- a/app/src/androidTest/java/org/xbmc/kore/testhelpers/Utils.java +++ b/app/src/androidTest/java/org/xbmc/kore/testhelpers/Utils.java @@ -117,6 +117,8 @@ public class Utils { int permStatus = context.checkCallingOrSelfPermission(ANIMATION_PERMISSION); if (permStatus == PackageManager.PERMISSION_GRANTED) { setSystemAnimationsScale(DEFAULT); + } else { + LogUtils.LOGD(TAG, "disableAnimations: permission " + ANIMATION_PERMISSION + " not granted"); } } diff --git a/app/src/androidTest/java/org/xbmc/kore/testhelpers/action/ViewActions.java b/app/src/androidTest/java/org/xbmc/kore/testhelpers/action/ViewActions.java index 1bda9f9..5aca193 100644 --- a/app/src/androidTest/java/org/xbmc/kore/testhelpers/action/ViewActions.java +++ b/app/src/androidTest/java/org/xbmc/kore/testhelpers/action/ViewActions.java @@ -25,6 +25,8 @@ import android.support.test.espresso.action.Press; import android.support.test.espresso.action.ScrollToAction; import android.support.test.espresso.util.HumanReadables; import android.support.test.espresso.util.TreeIterables; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; import android.view.View; import android.widget.SeekBar; @@ -157,4 +159,42 @@ public final class ViewActions { } }; } + + public static ViewAction setCurrentViewPagerItem(final int pageTitleResourceId) { + return new ViewAction() { + + @Override + public Matcher getConstraints() { + return new TypeSafeMatcher() { + @Override + protected boolean matchesSafely(View item) { + return item instanceof ViewPager; + } + + @Override + public void describeTo(Description description) { + description.appendText("is a SeekBar."); + } + }; + } + + @Override + public String getDescription() { + return null; + } + + @Override + public void perform(UiController uiController, View view) { + ViewPager viewPager = (ViewPager) view; + String expectedTitle = view.getResources().getString(pageTitleResourceId); + PagerAdapter pagerAdapter = viewPager.getAdapter(); + for(int i = 0; i < pagerAdapter.getCount(); i++) { + if (expectedTitle.contentEquals(pagerAdapter.getPageTitle(i))) { + viewPager.setCurrentItem(i); + return; + } + } + } + }; + } } diff --git a/app/src/instrumentationTest/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml similarity index 100% rename from app/src/instrumentationTest/AndroidManifest.xml rename to app/src/debug/AndroidManifest.xml diff --git a/app/src/testUtils/README.md b/app/src/debug/README.md similarity index 100% rename from app/src/testUtils/README.md rename to app/src/debug/README.md diff --git a/app/src/testUtils/assets/Addons.GetAddons.json b/app/src/debug/assets/Addons.GetAddons.json similarity index 100% rename from app/src/testUtils/assets/Addons.GetAddons.json rename to app/src/debug/assets/Addons.GetAddons.json diff --git a/app/src/testUtils/assets/AudioLibrary.GetAlbums.json b/app/src/debug/assets/AudioLibrary.GetAlbums.json similarity index 100% rename from app/src/testUtils/assets/AudioLibrary.GetAlbums.json rename to app/src/debug/assets/AudioLibrary.GetAlbums.json diff --git a/app/src/testUtils/assets/AudioLibrary.GetArtists.json b/app/src/debug/assets/AudioLibrary.GetArtists.json similarity index 100% rename from app/src/testUtils/assets/AudioLibrary.GetArtists.json rename to app/src/debug/assets/AudioLibrary.GetArtists.json diff --git a/app/src/testUtils/assets/AudioLibrary.GetGenres.json b/app/src/debug/assets/AudioLibrary.GetGenres.json similarity index 100% rename from app/src/testUtils/assets/AudioLibrary.GetGenres.json rename to app/src/debug/assets/AudioLibrary.GetGenres.json diff --git a/app/src/testUtils/assets/AudioLibrary.GetSongs.json b/app/src/debug/assets/AudioLibrary.GetSongs.json similarity index 100% rename from app/src/testUtils/assets/AudioLibrary.GetSongs.json rename to app/src/debug/assets/AudioLibrary.GetSongs.json diff --git a/app/src/testUtils/assets/Video.Details.Movie.json b/app/src/debug/assets/Video.Details.Movie.json similarity index 100% rename from app/src/testUtils/assets/Video.Details.Movie.json rename to app/src/debug/assets/Video.Details.Movie.json diff --git a/app/src/testUtils/assets/VideoLibrary.GetEpisodes.json b/app/src/debug/assets/VideoLibrary.GetEpisodes.json similarity index 100% rename from app/src/testUtils/assets/VideoLibrary.GetEpisodes.json rename to app/src/debug/assets/VideoLibrary.GetEpisodes.json diff --git a/app/src/testUtils/assets/VideoLibrary.GetMusicVideos.json b/app/src/debug/assets/VideoLibrary.GetMusicVideos.json similarity index 100% rename from app/src/testUtils/assets/VideoLibrary.GetMusicVideos.json rename to app/src/debug/assets/VideoLibrary.GetMusicVideos.json diff --git a/app/src/testUtils/assets/VideoLibrary.GetSeasons.json b/app/src/debug/assets/VideoLibrary.GetSeasons.json similarity index 100% rename from app/src/testUtils/assets/VideoLibrary.GetSeasons.json rename to app/src/debug/assets/VideoLibrary.GetSeasons.json diff --git a/app/src/testUtils/assets/VideoLibrary.GetTVShows.json b/app/src/debug/assets/VideoLibrary.GetTVShows.json similarity index 100% rename from app/src/testUtils/assets/VideoLibrary.GetTVShows.json rename to app/src/debug/assets/VideoLibrary.GetTVShows.json diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/CursorUtils.java b/app/src/debug/java/org/xbmc/kore/testutils/CursorUtils.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/CursorUtils.java rename to app/src/debug/java/org/xbmc/kore/testutils/CursorUtils.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/Database.java b/app/src/debug/java/org/xbmc/kore/testutils/Database.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/Database.java rename to app/src/debug/java/org/xbmc/kore/testutils/Database.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/FileUtils.java b/app/src/debug/java/org/xbmc/kore/testutils/FileUtils.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/FileUtils.java rename to app/src/debug/java/org/xbmc/kore/testutils/FileUtils.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/TestUtils.java b/app/src/debug/java/org/xbmc/kore/testutils/TestUtils.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/TestUtils.java rename to app/src/debug/java/org/xbmc/kore/testutils/TestUtils.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/eventserver/EventPacket.java b/app/src/debug/java/org/xbmc/kore/testutils/eventserver/EventPacket.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/eventserver/EventPacket.java rename to app/src/debug/java/org/xbmc/kore/testutils/eventserver/EventPacket.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/eventserver/EventPacketBUTTON.java b/app/src/debug/java/org/xbmc/kore/testutils/eventserver/EventPacketBUTTON.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/eventserver/EventPacketBUTTON.java rename to app/src/debug/java/org/xbmc/kore/testutils/eventserver/EventPacketBUTTON.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/eventserver/MockEventServer.java b/app/src/debug/java/org/xbmc/kore/testutils/eventserver/MockEventServer.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/eventserver/MockEventServer.java rename to app/src/debug/java/org/xbmc/kore/testutils/eventserver/MockEventServer.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/MockTcpServer.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/MockTcpServer.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/MockTcpServer.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/MockTcpServer.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/AddonsHandler.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/AddonsHandler.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/AddonsHandler.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/AddonsHandler.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/ApplicationHandler.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/ApplicationHandler.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/ApplicationHandler.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/ApplicationHandler.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/InputHandler.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/InputHandler.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/InputHandler.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/InputHandler.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONConnectionHandlerManager.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONConnectionHandlerManager.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONConnectionHandlerManager.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONConnectionHandlerManager.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONRPCHandler.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONRPCHandler.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONRPCHandler.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/JSONRPCHandler.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/PlayerHandler.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/PlayerHandler.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/PlayerHandler.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/PlayerHandler.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonResponse.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonResponse.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonResponse.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonResponse.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonUtils.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonUtils.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonUtils.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/JsonUtils.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/AudioDetailsNode.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/AudioDetailsNode.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/AudioDetailsNode.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/AudioDetailsNode.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/SubtitleDetailsNode.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/SubtitleDetailsNode.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/SubtitleDetailsNode.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/SubtitleDetailsNode.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/VideoDetailsNode.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/VideoDetailsNode.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/VideoDetailsNode.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/nodes/VideoDetailsNode.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Addons.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Addons.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Addons.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Addons.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Application.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Application.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Application.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Application.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/JSONRPC.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/JSONRPC.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/JSONRPC.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/JSONRPC.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Player.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Player.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Player.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/methods/Player.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Application.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Application.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Application.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Application.java diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Player.java b/app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Player.java similarity index 100% rename from app/src/testUtils/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Player.java rename to app/src/debug/java/org/xbmc/kore/testutils/tcpserver/handlers/jsonrpc/response/notifications/Player.java diff --git a/app/src/instrumentationTest/README.md b/app/src/instrumentationTest/README.md deleted file mode 100644 index e98b7f8..0000000 --- a/app/src/instrumentationTest/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Resources required for the instrumentation tests in [androidTest](../androidTest) - -**Note**: do not put any tests here! Put local tests -that DO NOT need to be executed on an android device in [test](../test). -Put tests that DO need to run on an android device in [androidTest](../androidTest). diff --git a/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java b/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java index acc1f5f..58a1390 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java @@ -23,8 +23,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.astuetz.PagerSlidingTabStrip; - import org.xbmc.kore.R; import org.xbmc.kore.utils.LogUtils; import org.xbmc.kore.utils.SharedElementTransition; @@ -39,7 +37,6 @@ abstract public class AbstractTabsFragment extends AbstractFragment implements SharedElementTransition.SharedElement { private static final String TAG = LogUtils.makeLogTag(AbstractTabsFragment.class); - @BindView(R.id.pager_tab_strip) PagerSlidingTabStrip pagerTabStrip; @BindView(R.id.pager) ViewPager viewPager; private Unbinder unbinder; @@ -64,8 +61,6 @@ abstract public class AbstractTabsFragment extends AbstractFragment unbinder = ButterKnife.bind(this, root); viewPager.setAdapter(createTabsAdapter(getDataHolder())); - pagerTabStrip.setViewPager(viewPager); - return root; } diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java index ce45ccf..9c2744a 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java @@ -16,24 +16,17 @@ package org.xbmc.kore.ui.sections.audio; import android.os.Bundle; -import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.astuetz.PagerSlidingTabStrip; - import org.xbmc.kore.R; import org.xbmc.kore.ui.AbstractCursorListFragment; -import org.xbmc.kore.ui.AbstractFragment; import org.xbmc.kore.ui.AbstractTabsFragment; import org.xbmc.kore.utils.LogUtils; import org.xbmc.kore.utils.TabsAdapter; -import butterknife.ButterKnife; -import butterknife.BindView; - /** * Container for the various music lists */ diff --git a/app/src/main/res/drawable/ic_sunny_white_24dp.xml b/app/src/main/res/drawable/ic_sunny_white_24dp.xml index 40b768f..bdd8ba8 100644 --- a/app/src/main/res/drawable/ic_sunny_white_24dp.xml +++ b/app/src/main/res/drawable/ic_sunny_white_24dp.xml @@ -2,5 +2,5 @@ - + diff --git a/app/src/main/res/layout/fragment_default_view_pager.xml b/app/src/main/res/layout/fragment_default_view_pager.xml index 46b7f73..098fc4b 100644 --- a/app/src/main/res/layout/fragment_default_view_pager.xml +++ b/app/src/main/res/layout/fragment_default_view_pager.xml @@ -21,15 +21,17 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + android:layout_height="match_parent"> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/now_playing_panel.xml b/app/src/main/res/layout/now_playing_panel.xml index 7eef5b4..004e82f 100644 --- a/app/src/main/res/layout/now_playing_panel.xml +++ b/app/src/main/res/layout/now_playing_panel.xml @@ -52,7 +52,7 @@ android:paddingLeft="@dimen/small_padding" android:paddingRight="@dimen/small_padding" android:textAppearance="@style/TextAppearance.Notification.Title" - android:maxLines="1" + android:singleLine="true" android:ellipsize="marquee" android:fadingEdge="horizontal" android:gravity="center_vertical"/> @@ -64,7 +64,7 @@ android:paddingLeft="@dimen/small_padding" android:paddingRight="@dimen/small_padding" android:textAppearance="@style/TextAppearance.Notification.Details" - android:maxLines="1" + android:singleLine="true" android:ellipsize="marquee" android:fadingEdge="horizontal" android:gravity="center_vertical"/> diff --git a/app/src/main/res/transition-v21/media_details.xml b/app/src/main/res/transition-v21/media_details.xml index a6cb737..89fa2e5 100644 --- a/app/src/main/res/transition-v21/media_details.xml +++ b/app/src/main/res/transition-v21/media_details.xml @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f49b25c..0f16a12 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -101,15 +101,6 @@ @style/TextAppearance.AppCompat.Subhead ?attr/colorPrimary @color/white - @android:color/transparent - @color/white - - - @color/white_dim_50pct - 0dp - 2dp - false - true