From ee41a36a62b17e85684905ec9ed8e3d691e3530e Mon Sep 17 00:00:00 2001 From: Denis Karmyshakov Date: Wed, 9 Jan 2019 14:58:11 +0300 Subject: [PATCH] Static fixes --- BuildScripts | 2 +- build.gradle | 5 +- lifecycle-rx/build.gradle | 2 +- lifecycle/build.gradle | 2 +- navigation/build.gradle | 2 +- .../fragments/ViewControllerFragment.kt | 73 ++++++------------- .../viewcontrollers/ViewController.kt | 16 ++-- sample/build.gradle | 3 +- sample/src/main/res/layout/activity_main.xml | 12 +-- templates/build.gradle | 4 +- 10 files changed, 44 insertions(+), 77 deletions(-) diff --git a/BuildScripts b/BuildScripts index c8e8b1f..15ca24b 160000 --- a/BuildScripts +++ b/BuildScripts @@ -1 +1 @@ -Subproject commit c8e8b1f521316083a4a49c36b0a3e7af84026e7c +Subproject commit 15ca24b0ac2078fe4a9994290dc69d9aea2630b9 diff --git a/build.gradle b/build.gradle index c0c8b9a..5c53f25 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.3.0' + ext.kotlin_version = '1.3.11' repositories { google() jcenter() @@ -9,7 +9,7 @@ buildscript { classpath 'com.android.tools.build:gradle:3.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'de.aaschmid:gradle-cpd-plugin:1.1' - classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.0-RC10" + classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.0-RC12" } } @@ -28,6 +28,7 @@ task clean(type: Delete) { ext { versions = [ compileSdk : 28, + appcompat : '1.0.2', androidx : '1.0.0', material : '1.0.0', lifecycle : '2.0.0', diff --git a/lifecycle-rx/build.gradle b/lifecycle-rx/build.gradle index b0f99e2..4d58f46 100644 --- a/lifecycle-rx/build.gradle +++ b/lifecycle-rx/build.gradle @@ -16,7 +16,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "androidx.appcompat:appcompat:$versions.androidx" + implementation "androidx.appcompat:appcompat:$versions.appcompat" implementation "androidx.lifecycle:lifecycle-extensions:$versions.lifecycle" diff --git a/lifecycle/build.gradle b/lifecycle/build.gradle index f58b253..72b36d0 100644 --- a/lifecycle/build.gradle +++ b/lifecycle/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "androidx.appcompat:appcompat:$versions.androidx" + implementation "androidx.appcompat:appcompat:$versions.appcompat" implementation "androidx.lifecycle:lifecycle-extensions:$versions.lifecycle" } diff --git a/navigation/build.gradle b/navigation/build.gradle index 8f92c86..d8d1b2b 100644 --- a/navigation/build.gradle +++ b/navigation/build.gradle @@ -20,6 +20,6 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "androidx.appcompat:appcompat:$versions.androidx" + implementation "androidx.appcompat:appcompat:$versions.appcompat" } diff --git a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.kt b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.kt index 95f6609..80acb2e 100644 --- a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.kt +++ b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.kt @@ -25,7 +25,6 @@ import android.content.Intent import android.os.Bundle import android.os.Parcel import android.os.Parcelable -import android.os.SystemClock import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater @@ -33,14 +32,11 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.view.animation.Animation -import androidx.annotation.CallSuper import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle import ru.touchin.roboswag.components.navigation.BuildConfig import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewController -import ru.touchin.roboswag.core.log.LcGroup -import kotlin.IllegalArgumentException /** * Created by Gavriil Sitnikov on 21/10/2015. @@ -49,24 +45,14 @@ import kotlin.IllegalArgumentException * @param Type of object which is representing it's fragment state; * @param Type of [FragmentActivity] where fragment could be attached to. */ -@Suppress("UNCHECKED_CAST") -class ViewControllerFragment : Fragment() { +@Suppress("detekt.TooManyFunctions", "UNCHECKED_CAST") +open class ViewControllerFragment : Fragment() { companion object { private const val VIEW_CONTROLLER_CLASS_EXTRA = "VIEW_CONTROLLER_CLASS_EXTRA" private const val VIEW_CONTROLLER_STATE_EXTRA = "VIEW_CONTROLLER_STATE_EXTRA" - private var acceptableUiCalculationTime: Long = 100 - - /** - * Sets acceptable UI calculation time so there will be warnings in logs if ViewController's inflate/layout actions will take more than that time. - * It's 100ms by default. - */ - fun setAcceptableUiCalculationTime(acceptableUiCalculationTime: Long) { - ViewControllerFragment.acceptableUiCalculationTime = acceptableUiCalculationTime - } - /** * Creates [Bundle] which will store state. * @@ -92,8 +78,7 @@ class ViewControllerFragment } } - lateinit var state: TState - private set + lateinit var state: TState private set private var viewController: ViewController? = null private var pendingActivityResult: ActivityResult? = null @@ -133,15 +118,18 @@ class ViewControllerFragment override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - if (viewController != null && pendingActivityResult != null) { - viewController!!.onActivityResult(pendingActivityResult!!.requestCode, pendingActivityResult!!.resultCode, pendingActivityResult!!.data) + val activityResult = pendingActivityResult + if (viewController != null && activityResult != null) { + viewController?.onActivityResult(activityResult.requestCode, activityResult.resultCode, activityResult.data) pendingActivityResult = null } } - override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? = viewController?.onCreateAnimation(transit, enter, nextAnim) + override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? = + viewController?.onCreateAnimation(transit, enter, nextAnim) - override fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? = viewController?.onCreateAnimator(transit, enter, nextAnim) + override fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? = + viewController?.onCreateAnimator(transit, enter, nextAnim) override fun onViewStateRestored(savedInstanceState: Bundle?) { super.onViewStateRestored(savedInstanceState) @@ -161,8 +149,7 @@ class ViewControllerFragment * Called when fragment is moved in started state and it's [.isMenuVisible] sets to true. * Usually it is indicating that user can't see fragment on screen and useful to track analytics events. */ - @CallSuper - protected fun onAppear() { + private fun onAppear() { appeared = true viewController?.onAppear() } @@ -178,13 +165,11 @@ class ViewControllerFragment } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - super.onCreateOptionsMenu(menu, inflater) viewController?.onCreateOptionsMenu(menu, inflater) } - override fun onOptionsItemSelected(item: MenuItem): Boolean = viewController != null - && viewController!!.onOptionsItemSelected(item) - || super.onOptionsItemSelected(item) + override fun onOptionsItemSelected(item: MenuItem): Boolean = + viewController?.onOptionsItemSelected(item) == true || super.onOptionsItemSelected(item) override fun onPause() { super.onPause() @@ -201,8 +186,7 @@ class ViewControllerFragment * Called when fragment is moved in stopped state or it's [.isMenuVisible] sets to false. * Usually it is indicating that user can't see fragment on screen and useful to track analytics events. */ - @CallSuper - protected fun onDisappear() { + private fun onDisappear() { appeared = false viewController?.onDisappear() } @@ -216,10 +200,8 @@ class ViewControllerFragment } override fun onDestroyView() { - if (viewController != null) { - viewController!!.onDestroy() - viewController = null - } + viewController?.onDestroy() + viewController = null super.onDestroyView() } @@ -256,24 +238,11 @@ class ViewControllerFragment throw IllegalStateException("There should be single constructor for $viewControllerClass") } val constructor = viewControllerClass.constructors[0] - try { - return when (constructor.parameterTypes.size) { - 2 -> constructor.newInstance(creationContext, savedInstanceState) - 3 -> constructor.newInstance(this, creationContext, savedInstanceState) - else -> throw IllegalArgumentException("Wrong constructor parameters count: ${constructor.parameterTypes.size}") - } as ViewController - } finally { - checkCreationTime(if (BuildConfig.DEBUG) SystemClock.elapsedRealtime() else 0) - } - } - - private fun checkCreationTime(creationTime: Long) { - if (BuildConfig.DEBUG) { - val creationPeriod = SystemClock.elapsedRealtime() - creationTime - if (creationPeriod > acceptableUiCalculationTime) { - LcGroup.UI_METRICS.w("Creation of %s took too much: %dms", viewControllerClass, creationPeriod) - } - } + return when (constructor.parameterTypes.size) { + 1 -> constructor.newInstance(creationContext) + 2 -> constructor.newInstance(creationContext, savedInstanceState) + else -> throw IllegalArgumentException("Wrong constructor parameters count: ${constructor.parameterTypes.size}") + } as ViewController } override fun toString(): String = "${super.toString()} ViewController: $viewControllerClass" diff --git a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/viewcontrollers/ViewController.kt b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/viewcontrollers/ViewController.kt index 4b2189c..ac26c6b 100644 --- a/navigation/src/main/java/ru/touchin/roboswag/components/navigation/viewcontrollers/ViewController.kt +++ b/navigation/src/main/java/ru/touchin/roboswag/components/navigation/viewcontrollers/ViewController.kt @@ -58,16 +58,18 @@ import ru.touchin.roboswag.core.log.LcGroup * @param Type of activity where such [ViewController] could be; * @param Type of state; */ -@Suppress("PMD.UnusedFormalParameter", "UNCHECKED_CAST") +@Suppress("detekt.TooManyFunctions", "UNCHECKED_CAST") open class ViewController( creationContext: CreationContext, - savedInstanceState: Bundle?, @LayoutRes layoutRes: Int ) : LifecycleOwner { val activity: TActivity = creationContext.activity as TActivity + val fragment: ViewControllerFragment = creationContext.fragment as ViewControllerFragment + val state = fragment.state + val view: View = creationContext.inflater.inflate(layoutRes, creationContext.container, false) private val lifecycleRegistry = LifecycleRegistry(this) @@ -185,7 +187,7 @@ open class ViewController( * [FragmentTransaction.setCustomAnimations], or * 0 if neither was called. The value will depend on the current operation. */ - fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? = null + open fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? = null /** * Called when a fragment loads an animator. This will be called when @@ -203,13 +205,13 @@ open class ViewController( * [FragmentTransaction.setCustomAnimations], or * 0 if neither was called. The value will depend on the current operation. */ - fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? = null + open fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? = null /** * Calls when [ViewController] saved state has been restored into the view hierarchy. * Happens at [ViewControllerFragment.onViewStateRestored]. */ - fun onViewStateRestored(savedInstanceState: Bundle?) = Unit + open fun onViewStateRestored(savedInstanceState: Bundle?) = Unit /** * Calls when [ViewController] have started. @@ -263,7 +265,7 @@ open class ViewController( * Try not to use such method for saving state but use [ViewControllerFragment.state] from [.getFragment]. */ @CallSuper - fun onSaveInstanceState(savedInstanceState: Bundle) { + open fun onSaveInstanceState(savedInstanceState: Bundle) { LcGroup.UI_LIFECYCLE.i(Lc.getCodePoint(this)) } @@ -271,7 +273,7 @@ open class ViewController( * Called when fragment is moved in stopped state or it's [.getFragment] sets to false. * Usually it is indicating that user can't see fragment on screen and useful to track analytics events. */ - fun onDisappear() { + open fun onDisappear() { LcGroup.UI_LIFECYCLE.i(Lc.getCodePoint(this)) } diff --git a/sample/build.gradle b/sample/build.gradle index 95ee2d2..744fac0 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -24,8 +24,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "androidx.appcompat:appcompat:$versions.androidx" - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2' + implementation "androidx.appcompat:appcompat:$versions.appcompat" } ext.buildScriptsDir = "$rootDir/BuildScripts" diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 421cf25..6316346 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,7 +1,6 @@ - + android:layout_gravity="center" + android:text="Hello World!"/> - + diff --git a/templates/build.gradle b/templates/build.gradle index 19913e2..90b764f 100644 --- a/templates/build.gradle +++ b/templates/build.gradle @@ -19,11 +19,11 @@ dependencies { api project(":api-logansquare") api project(":navigation") - api 'androidx.multidex:multidex:2.0.0' + api 'androidx.multidex:multidex:2.0.1' api 'net.danlew:android.joda:2.9.9.4' - implementation "androidx.appcompat:appcompat:$versions.androidx" + implementation "androidx.appcompat:appcompat:$versions.appcompat" implementation("com.crashlytics.sdk.android:crashlytics:$versions.crashlytics@aar") { transitive = true