From 878b7c8fb20fc16551cd6c84452b1a0abe7673d1 Mon Sep 17 00:00:00 2001 From: Adetunji Dahunsi Date: Fri, 29 May 2020 10:08:24 -0400 Subject: [PATCH] Bumped androidx core and Google Material versions --- app/debugKeystore.properties | 1 - .../java/com/tunjid/androidx/MutedColors.kt | 6 +- .../java/com/tunjid/androidx/Utilities.kt | 2 +- .../androidx/fragments/AdoptDoggoFragment.kt | 2 +- .../androidx/fragments/BleScanFragment.kt | 2 +- .../androidx/fragments/DoggoListFragment.kt | 4 +- .../androidx/fragments/DoggoRankFragment.kt | 13 +- .../fragments/MultipleStacksFragment.kt | 12 +- .../androidx/fragments/RouteFragment.kt | 4 +- .../fragments/SpringAnimationFragment.kt | 5 +- .../java/com/tunjid/androidx/model/Doggo.kt | 2 +- .../java/com/tunjid/androidx/model/Tile.kt | 3 +- .../FragmentTransactionAnimations.kt | 20 +- .../androidx/uidrivers/SpringItemAnimator.kt | 4 +- .../com/tunjid/androidx/uidrivers/UiState.kt | 3 +- .../uidrivers/UiStateAwareChangeBounds.kt | 7 +- .../viewmodels/EndlessTileViewModel.kt | 2 +- app/src/main/res/drawable/ic_add_24dp.xml | 13 +- .../main/res/drawable/ic_arrow_back_24dp.xml | 13 +- .../res/drawable/ic_arrow_down_black_24dp.xml | 4 +- .../drawable/ic_arrow_right_black_24dp.xml | 4 +- .../res/drawable/ic_arrow_up_black_24dp.xml | 10 +- .../main/res/drawable/ic_bluetooth_24dp.xml | 10 +- app/src/main/res/drawable/ic_blur_24dp.xml | 13 +- .../res/drawable/ic_brightness_4_24dp.xml | 13 +- .../main/res/drawable/ic_drag_handle_24dp.xml | 10 +- app/src/main/res/drawable/ic_grid_24dp.xml | 13 +- .../res/drawable/ic_info_outline_24dp.xml | 13 +- .../res/drawable/ic_launcher_foreground.xml | 97 ++++---- .../main/res/drawable/ic_more_vert_24dp.xml | 13 +- app/src/main/res/drawable/ic_restore_24dp.xml | 13 +- .../res/drawable/ic_signal_wifi__24dp.xml | 14 +- app/src/main/res/layout/fragment_ble_scan.xml | 6 +- app/src/main/res/layout/fragment_nsd_scan.xml | 2 +- .../main/res/layout/viewholder_nsd_list.xml | 6 +- app/src/main/res/layout/viewholder_route.xml | 3 +- app/src/main/res/layout/viewholder_scan.xml | 8 +- .../layout/viewholder_spreadsheet_cell.xml | 2 +- .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 4 +- build.gradle | 58 ++--- .../bluetooth/ScanFilterCompatTest.java | 1 + communications/src/main/AndroidManifest.xml | 5 +- .../communications/bluetooth/BLEScanner.java | 9 +- .../bluetooth/BluetoothUuid.java | 3 +- .../bluetooth/ScanFilterCompat.java | 216 +++++++++--------- .../bluetooth/ScanRecordCompat.java | 182 ++++++++------- .../bluetooth/ScanResultCompat.java | 41 ++-- .../communications/nsd/NsdHelper.java | 55 +++-- .../ExampleInstrumentedTest.java | 2 +- constraintlayout/src/main/AndroidManifest.xml | 3 +- .../constraintlayout/ExampleUnitTest.java | 2 +- core/src/androidTest/AndroidManifest.xml | 4 +- .../services/HardServiceConnectionTest.kt | 4 +- gradle.properties | 4 - gradle/wrapper/gradle-wrapper.properties | 4 +- .../material/ExampleInstrumentedTest.java | 2 +- material/src/main/AndroidManifest.xml | 3 +- .../androidx/material/ExampleUnitTest.java | 2 +- .../navigation/NavigationTestActivity.kt | 2 +- navigation/src/main/AndroidManifest.xml | 3 +- .../navigation/SuspendingStackNavigator.kt | 2 +- .../androidx/navigation/ExampleUnitTest.kt | 3 +- .../recyclerview/ExampleInstrumentedTest.java | 2 +- recyclerview/src/main/AndroidManifest.xml | 3 +- .../recyclerview/ComposedEndlessScroller.kt | 2 +- .../recyclerview/ExampleUnitTest.java | 2 +- .../savedstate/ExampleInstrumentedTest.kt | 6 +- savedstate/src/main/AndroidManifest.xml | 3 +- .../androidx/savedstate/ExampleUnitTest.kt | 3 +- .../test/ExampleInstrumentedTest.java | 3 +- .../FragmentVisibleIdlingResource.kt | 2 +- view/src/main/AndroidManifest.xml | 3 +- .../androidx/view/animator/ViewHider.kt | 11 +- .../androidx/view/util/ViewExtensions.kt | 2 +- view/src/main/res/anim/pop_up_fade_in.xml | 8 +- view/src/main/res/anim/pop_up_fade_out.xml | 8 +- view/src/main/res/values/styles.xml | 1 + .../tunjid/androidx/view/ExampleUnitTest.java | 2 +- 79 files changed, 544 insertions(+), 507 deletions(-) diff --git a/app/debugKeystore.properties b/app/debugKeystore.properties index ebde6235..eb113cd0 100644 --- a/app/debugKeystore.properties +++ b/app/debugKeystore.properties @@ -21,7 +21,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # - keystore=debug.jks keystore.password=android keyAlias=androiddebugkey diff --git a/app/src/main/java/com/tunjid/androidx/MutedColors.kt b/app/src/main/java/com/tunjid/androidx/MutedColors.kt index 152a586a..8c11fd01 100644 --- a/app/src/main/java/com/tunjid/androidx/MutedColors.kt +++ b/app/src/main/java/com/tunjid/androidx/MutedColors.kt @@ -24,9 +24,9 @@ object MutedColors { fun random(isDark: Boolean): Int = palette(isDark).random() private fun palette(isDark: Boolean): IntArray = when (isDark) { - true -> darkerMutedColors - else -> mutedColors - } + true -> darkerMutedColors + else -> mutedColors + } } private fun IntArray.circular(index: Int) = this[index % size] diff --git a/app/src/main/java/com/tunjid/androidx/Utilities.kt b/app/src/main/java/com/tunjid/androidx/Utilities.kt index af5a58ce..c2b8b474 100644 --- a/app/src/main/java/com/tunjid/androidx/Utilities.kt +++ b/app/src/main/java/com/tunjid/androidx/Utilities.kt @@ -35,6 +35,6 @@ val Context.isDarkTheme else -> true } -fun Context.divider(orientation: Int)= DividerItemDecoration(this, orientation).apply { +fun Context.divider(orientation: Int) = DividerItemDecoration(this, orientation).apply { setDrawable(drawableAt(R.drawable.bg_divider)?.withTint(themeColorAt(R.attr.colorSurface))!!) } \ No newline at end of file diff --git a/app/src/main/java/com/tunjid/androidx/fragments/AdoptDoggoFragment.kt b/app/src/main/java/com/tunjid/androidx/fragments/AdoptDoggoFragment.kt index 36c85443..825384e4 100644 --- a/app/src/main/java/com/tunjid/androidx/fragments/AdoptDoggoFragment.kt +++ b/app/src/main/java/com/tunjid/androidx/fragments/AdoptDoggoFragment.kt @@ -4,7 +4,6 @@ import android.animation.ArgbEvaluator import android.animation.ValueAnimator import android.graphics.Color import android.os.Bundle -import android.transition.Fade import android.view.View import android.view.ViewGroup import android.widget.ImageView @@ -13,6 +12,7 @@ import androidx.annotation.ColorRes import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.recyclerview.widget.DividerItemDecoration +import androidx.transition.Fade import com.tunjid.androidx.R import com.tunjid.androidx.core.components.args import com.tunjid.androidx.core.content.themeColorAt diff --git a/app/src/main/java/com/tunjid/androidx/fragments/BleScanFragment.kt b/app/src/main/java/com/tunjid/androidx/fragments/BleScanFragment.kt index 2da2bb17..a0db938b 100644 --- a/app/src/main/java/com/tunjid/androidx/fragments/BleScanFragment.kt +++ b/app/src/main/java/com/tunjid/androidx/fragments/BleScanFragment.kt @@ -156,7 +156,7 @@ class BleScanFragment : Fragment(R.layout.fragment_ble_scan) { private fun onMenuItemSelected(item: MenuItem) = when (item.itemId) { R.id.menu_scan -> scanDevices(true) R.id.menu_stop -> scanDevices(false) - else -> super.onOptionsItemSelected(item).let { } + else -> super.onOptionsItemSelected(item).let { } } private fun onBluetoothDeviceClicked(bluetoothDevice: BluetoothDevice) { diff --git a/app/src/main/java/com/tunjid/androidx/fragments/DoggoListFragment.kt b/app/src/main/java/com/tunjid/androidx/fragments/DoggoListFragment.kt index de6bd58b..6291056d 100644 --- a/app/src/main/java/com/tunjid/androidx/fragments/DoggoListFragment.kt +++ b/app/src/main/java/com/tunjid/androidx/fragments/DoggoListFragment.kt @@ -2,8 +2,6 @@ package com.tunjid.androidx.fragments import android.annotation.SuppressLint import android.os.Bundle -import android.transition.Fade -import android.transition.TransitionSet import android.view.View import android.view.View.OnLayoutChangeListener import android.widget.ImageView @@ -15,6 +13,8 @@ import androidx.fragment.app.FragmentTransaction import androidx.interpolator.view.animation.FastOutSlowInInterpolator import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.RecyclerView +import androidx.transition.Fade +import androidx.transition.TransitionSet import com.tunjid.androidx.R import com.tunjid.androidx.core.content.themeColorAt import com.tunjid.androidx.databinding.FragmentDoggoListBinding diff --git a/app/src/main/java/com/tunjid/androidx/fragments/DoggoRankFragment.kt b/app/src/main/java/com/tunjid/androidx/fragments/DoggoRankFragment.kt index 4abb9de9..170df291 100644 --- a/app/src/main/java/com/tunjid/androidx/fragments/DoggoRankFragment.kt +++ b/app/src/main/java/com/tunjid/androidx/fragments/DoggoRankFragment.kt @@ -2,11 +2,6 @@ package com.tunjid.androidx.fragments import android.os.Bundle import android.text.TextUtils -import android.transition.ChangeBounds -import android.transition.ChangeImageTransform -import android.transition.ChangeTransform -import android.transition.TransitionManager -import android.transition.TransitionSet import android.util.Pair import android.view.View import android.view.ViewGroup @@ -22,6 +17,11 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.observe import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.RecyclerView +import androidx.transition.ChangeBounds +import androidx.transition.ChangeImageTransform +import androidx.transition.ChangeTransform +import androidx.transition.TransitionManager +import androidx.transition.TransitionSet import com.tunjid.androidx.R import com.tunjid.androidx.core.components.args import com.tunjid.androidx.core.content.themeColorAt @@ -194,7 +194,8 @@ class DoggoRankFragment : Fragment(R.layout.fragment_doggo_list), var BindingViewHolder.doggoBinder by BindingViewHolder.Prop() private fun BindingViewHolder.bind(isRanking: Boolean, doggo: Doggo) { - val layoutParams = binding.innerConstraintLayout.doggoImage.layoutParams as? ConstraintLayout.LayoutParams ?: return + val layoutParams = binding.innerConstraintLayout.doggoImage.layoutParams as? ConstraintLayout.LayoutParams + ?: return val currentlyInRanking = layoutParams.matchConstraintPercentWidth != 1f val context = binding.root.context diff --git a/app/src/main/java/com/tunjid/androidx/fragments/MultipleStacksFragment.kt b/app/src/main/java/com/tunjid/androidx/fragments/MultipleStacksFragment.kt index 91188989..9e74c159 100644 --- a/app/src/main/java/com/tunjid/androidx/fragments/MultipleStacksFragment.kt +++ b/app/src/main/java/com/tunjid/androidx/fragments/MultipleStacksFragment.kt @@ -4,7 +4,6 @@ import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.text.method.LinkMovementMethod -import android.transition.Transition import android.view.Gravity import android.view.LayoutInflater import android.view.View @@ -15,6 +14,7 @@ import androidx.core.view.children import androidx.core.view.doOnDetach import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction +import androidx.transition.Transition import com.google.android.material.button.MaterialButton import com.google.android.material.chip.ChipGroup import com.google.android.material.transition.MaterialFadeThrough @@ -87,7 +87,7 @@ class MultipleStacksFragment : Fragment(R.layout.fragment_multiple_stack) { intArrayOf(Color.LTGRAY, Color.WHITE) )) } - binding.tabs.doOnDetach { innerNavigator.stackSelectedListener = null } + binding.tabs.doOnDetach { innerNavigator.stackSelectedListener = null } binding.options.setOnCheckedChangeListener { _, checkedId -> transitionOption = checkedId } @@ -137,10 +137,10 @@ class MultipleStacksFragment : Fragment(R.layout.fragment_multiple_stack) { // Casting is necessary for over enthusiastic Kotlin compiler CHECKCAST generation val (enterFrom, exitFrom, enterTo, exitTo) = arrayOf( - if (isSliding) MaterialSharedAxis.create(X, !isForward) else null, - if (isSliding) MaterialSharedAxis.create(X, isForward) else MaterialFadeThrough.create() as Transition, - if (isSliding) MaterialSharedAxis.create(X, isForward) else MaterialFadeThrough.create() as Transition, - if (isSliding) MaterialSharedAxis.create(X, !isForward) else null + if (isSliding) MaterialSharedAxis(X, !isForward) else null, + if (isSliding) MaterialSharedAxis(X, isForward) else MaterialFadeThrough() as Transition, + if (isSliding) MaterialSharedAxis(X, isForward) else MaterialFadeThrough() as Transition, + if (isSliding) MaterialSharedAxis(X, !isForward) else null ) from.apply { enterTransition = enterFrom; exitTransition = exitFrom } diff --git a/app/src/main/java/com/tunjid/androidx/fragments/RouteFragment.kt b/app/src/main/java/com/tunjid/androidx/fragments/RouteFragment.kt index 5df0cced..ef56ef9f 100644 --- a/app/src/main/java/com/tunjid/androidx/fragments/RouteFragment.kt +++ b/app/src/main/java/com/tunjid/androidx/fragments/RouteFragment.kt @@ -42,7 +42,7 @@ import me.everything.android.ui.overscroll.OverScrollDecoratorHelper class RouteFragment : Fragment(R.layout.fragment_route) { private var uiState by activityGlobalUiController() - private val viewModel by viewModels() + private val viewModel by viewModels() private val navigator by activityNavigatorController() private var tabIndex: Int by args() @@ -90,7 +90,7 @@ class RouteFragment : Fragment(R.layout.fragment_route) { if (requireContext().isDarkTheme) MODE_NIGHT_NO else MODE_NIGHT_YES ) - else -> requireActivity().onOptionsItemSelected(item).let { } + else -> requireActivity().onOptionsItemSelected(item).let { } } private fun onRouteClicked(destination: RouteItem.Destination) { diff --git a/app/src/main/java/com/tunjid/androidx/fragments/SpringAnimationFragment.kt b/app/src/main/java/com/tunjid/androidx/fragments/SpringAnimationFragment.kt index 6c023dae..364a7749 100644 --- a/app/src/main/java/com/tunjid/androidx/fragments/SpringAnimationFragment.kt +++ b/app/src/main/java/com/tunjid/androidx/fragments/SpringAnimationFragment.kt @@ -45,6 +45,7 @@ class SpringAnimationFragment : Fragment(R.layout.fragment_spring_animation) { val binding = FragmentSpringAnimationBinding.bind(view) val viewHiders = binding.viewHiders + @Suppress("MoveSuspiciousCallableReferenceIntoParentheses") val springModifiers: List = viewHiders.map { it::configure } @@ -94,10 +95,10 @@ class SpringAnimationFragment : Fragment(R.layout.fragment_spring_animation) { binding.cage.children.forEach { it.setOnClickListener(viewHiders::onButtonClicked) } binding.shrinkMargin.run { - view.spring(MarginProperty.LEFT).addEndListener { _, _, value, _ -> isChecked = value != 0f} + view.spring(MarginProperty.LEFT).addEndListener { _, _, value, _ -> isChecked = value != 0f } } binding.shrinkPadding.run { - binding.cage.spring(PaddingProperty.LEFT).addEndListener { _, _, value, _ -> isChecked = value != 0f} + binding.cage.spring(PaddingProperty.LEFT).addEndListener { _, _, value, _ -> isChecked = value != 0f } } } diff --git a/app/src/main/java/com/tunjid/androidx/model/Doggo.kt b/app/src/main/java/com/tunjid/androidx/model/Doggo.kt index 9d30695e..6dbf5446 100644 --- a/app/src/main/java/com/tunjid/androidx/model/Doggo.kt +++ b/app/src/main/java/com/tunjid/androidx/model/Doggo.kt @@ -52,7 +52,7 @@ class Doggo : Parcelable { companion object { - var transitionDoggo: Doggo? = null + var transitionDoggo: Doggo? = null private val DOGGO_NOUNS = listOf( "F R E N", diff --git a/app/src/main/java/com/tunjid/androidx/model/Tile.kt b/app/src/main/java/com/tunjid/androidx/model/Tile.kt index e81028af..ca8b2e5c 100644 --- a/app/src/main/java/com/tunjid/androidx/model/Tile.kt +++ b/app/src/main/java/com/tunjid/androidx/model/Tile.kt @@ -1,9 +1,8 @@ package com.tunjid.androidx.model -import com.tunjid.androidx.recyclerview.diff.Differentiable - import androidx.annotation.ColorInt import com.tunjid.androidx.MutedColors +import com.tunjid.androidx.recyclerview.diff.Differentiable class Tile private constructor( val number: Int, diff --git a/app/src/main/java/com/tunjid/androidx/uidrivers/FragmentTransactionAnimations.kt b/app/src/main/java/com/tunjid/androidx/uidrivers/FragmentTransactionAnimations.kt index e767f42b..3443a10d 100644 --- a/app/src/main/java/com/tunjid/androidx/uidrivers/FragmentTransactionAnimations.kt +++ b/app/src/main/java/com/tunjid/androidx/uidrivers/FragmentTransactionAnimations.kt @@ -1,11 +1,11 @@ package com.tunjid.androidx.uidrivers -import android.transition.ChangeImageTransform -import android.transition.ChangeTransform -import android.transition.Transition -import android.transition.TransitionSet import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction +import androidx.transition.ChangeImageTransform +import androidx.transition.ChangeTransform +import androidx.transition.Transition +import androidx.transition.TransitionSet import com.google.android.material.transition.MaterialFadeThrough import com.google.android.material.transition.MaterialSharedAxis import com.tunjid.androidx.navigation.MultiStackNavigator @@ -25,11 +25,11 @@ fun MultiStackNavigator.materialFadeThroughTransition(): FragmentTransaction.(In rootFragmentManager.findFragmentByTag(activeIndex.toString())?.apply { enterTransition = null - if (exitTransition !is MaterialFadeThrough) exitTransition = MaterialFadeThrough.create().setDuration(300) + if (exitTransition !is MaterialFadeThrough) exitTransition = MaterialFadeThrough().setDuration(300) } rootFragmentManager.findFragmentByTag(index.toString())?.apply { exitTransition = null - if (enterTransition !is MaterialFadeThrough) enterTransition = MaterialFadeThrough.create().setDuration(300) + if (enterTransition !is MaterialFadeThrough) enterTransition = MaterialFadeThrough().setDuration(300) } } @@ -38,12 +38,12 @@ fun MultiStackNavigator.materialDepthAxisTransition(): FragmentTransaction.(Frag if (current is Navigator.TransactionModifier) current.augmentTransaction(this, incomingFragment) else { current.apply { - enterTransition = MaterialSharedAxis.create(MaterialSharedAxis.Z, false) - exitTransition = MaterialSharedAxis.create(MaterialSharedAxis.Z, true) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) } incomingFragment.apply { - enterTransition = MaterialSharedAxis.create(MaterialSharedAxis.Z, true) - exitTransition = MaterialSharedAxis.create(MaterialSharedAxis.Z, false) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) } } } diff --git a/app/src/main/java/com/tunjid/androidx/uidrivers/SpringItemAnimator.kt b/app/src/main/java/com/tunjid/androidx/uidrivers/SpringItemAnimator.kt index 960cbe91..b6bdcd7b 100644 --- a/app/src/main/java/com/tunjid/androidx/uidrivers/SpringItemAnimator.kt +++ b/app/src/main/java/com/tunjid/androidx/uidrivers/SpringItemAnimator.kt @@ -6,7 +6,9 @@ import android.view.View import androidx.dynamicanimation.animation.DynamicAnimation import androidx.dynamicanimation.animation.FloatPropertyCompat import androidx.dynamicanimation.animation.SpringAnimation -import androidx.dynamicanimation.animation.SpringAnimation.* +import androidx.dynamicanimation.animation.SpringAnimation.ALPHA +import androidx.dynamicanimation.animation.SpringAnimation.TRANSLATION_X +import androidx.dynamicanimation.animation.SpringAnimation.TRANSLATION_Y import androidx.dynamicanimation.animation.SpringForce import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.RecyclerView diff --git a/app/src/main/java/com/tunjid/androidx/uidrivers/UiState.kt b/app/src/main/java/com/tunjid/androidx/uidrivers/UiState.kt index f4d61035..877b4d87 100644 --- a/app/src/main/java/com/tunjid/androidx/uidrivers/UiState.kt +++ b/app/src/main/java/com/tunjid/androidx/uidrivers/UiState.kt @@ -1,4 +1,5 @@ package com.tunjid.androidx.uidrivers + import android.graphics.Color import android.os.Parcel import android.os.Parcelable @@ -132,4 +133,4 @@ data class UiState( } } -private fun emptyCallback() : (T) -> Unit = {} \ No newline at end of file +private fun emptyCallback(): (T) -> Unit = {} \ No newline at end of file diff --git a/app/src/main/java/com/tunjid/androidx/uidrivers/UiStateAwareChangeBounds.kt b/app/src/main/java/com/tunjid/androidx/uidrivers/UiStateAwareChangeBounds.kt index a9d2384a..a0858b15 100644 --- a/app/src/main/java/com/tunjid/androidx/uidrivers/UiStateAwareChangeBounds.kt +++ b/app/src/main/java/com/tunjid/androidx/uidrivers/UiStateAwareChangeBounds.kt @@ -1,8 +1,8 @@ package com.tunjid.androidx.uidrivers import android.graphics.Rect -import android.transition.ChangeBounds -import android.transition.TransitionValues +import androidx.transition.ChangeBounds +import androidx.transition.TransitionValues import com.tunjid.androidx.core.content.unwrapActivity import com.tunjid.androidx.view.util.InsetFlags @@ -10,10 +10,9 @@ class UiStateAwareChangeBounds( private val initial: UiState? ) : ChangeBounds() { - override fun captureEndValues(transitionValues: TransitionValues?) { + override fun captureEndValues(transitionValues: TransitionValues) { super.captureEndValues(transitionValues) - transitionValues ?: return val rect = transitionValues.values[BOUNDS_PROPERTY] as? Rect ?: return val current = transitionValues.uiState diff --git a/app/src/main/java/com/tunjid/androidx/viewmodels/EndlessTileViewModel.kt b/app/src/main/java/com/tunjid/androidx/viewmodels/EndlessTileViewModel.kt index db38d474..05a4afd7 100644 --- a/app/src/main/java/com/tunjid/androidx/viewmodels/EndlessTileViewModel.kt +++ b/app/src/main/java/com/tunjid/androidx/viewmodels/EndlessTileViewModel.kt @@ -30,7 +30,7 @@ class EndlessTileViewModel(application: Application) : AndroidViewModel(applicat fun fetchMore() { disposables.add(Single.fromCallable { - Diff.calculate(tiles, generateTiles()) { oldTiles, addedTiles -> oldTiles + addedTiles} + Diff.calculate(tiles, generateTiles()) { oldTiles, addedTiles -> oldTiles + addedTiles } } .subscribeOn(io()) .observeOn(mainThread()) diff --git a/app/src/main/res/drawable/ic_add_24dp.xml b/app/src/main/res/drawable/ic_add_24dp.xml index e3979cd7..bbda803b 100644 --- a/app/src/main/res/drawable/ic_add_24dp.xml +++ b/app/src/main/res/drawable/ic_add_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_arrow_back_24dp.xml b/app/src/main/res/drawable/ic_arrow_back_24dp.xml index 71d5bbd2..b7c72878 100644 --- a/app/src/main/res/drawable/ic_arrow_back_24dp.xml +++ b/app/src/main/res/drawable/ic_arrow_back_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_arrow_down_black_24dp.xml b/app/src/main/res/drawable/ic_arrow_down_black_24dp.xml index 635e4fc9..4b52fa28 100644 --- a/app/src/main/res/drawable/ic_arrow_down_black_24dp.xml +++ b/app/src/main/res/drawable/ic_arrow_down_black_24dp.xml @@ -1,8 +1,8 @@ + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + android:pathData="M7,14l5,-5 5,5z" /> diff --git a/app/src/main/res/drawable/ic_bluetooth_24dp.xml b/app/src/main/res/drawable/ic_bluetooth_24dp.xml index 1094756b..4b0b71ea 100644 --- a/app/src/main/res/drawable/ic_bluetooth_24dp.xml +++ b/app/src/main/res/drawable/ic_bluetooth_24dp.xml @@ -1,9 +1,9 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + android:pathData="M17.71,7.71L12,2h-1v7.59L6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 11,14.41L11,22h1l5.71,-5.71 -4.3,-4.29 4.3,-4.29zM13,5.83l1.88,1.88L13,9.59L13,5.83zM14.88,16.29L13,18.17v-3.76l1.88,1.88z" /> diff --git a/app/src/main/res/drawable/ic_blur_24dp.xml b/app/src/main/res/drawable/ic_blur_24dp.xml index 38aefdd8..d5a475c2 100644 --- a/app/src/main/res/drawable/ic_blur_24dp.xml +++ b/app/src/main/res/drawable/ic_blur_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_brightness_4_24dp.xml b/app/src/main/res/drawable/ic_brightness_4_24dp.xml index e935f4ba..5f935768 100644 --- a/app/src/main/res/drawable/ic_brightness_4_24dp.xml +++ b/app/src/main/res/drawable/ic_brightness_4_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_drag_handle_24dp.xml b/app/src/main/res/drawable/ic_drag_handle_24dp.xml index 6d9343b3..8a6004bd 100644 --- a/app/src/main/res/drawable/ic_drag_handle_24dp.xml +++ b/app/src/main/res/drawable/ic_drag_handle_24dp.xml @@ -1,9 +1,9 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z" /> diff --git a/app/src/main/res/drawable/ic_grid_24dp.xml b/app/src/main/res/drawable/ic_grid_24dp.xml index bb8c4bbd..e2d5b622 100644 --- a/app/src/main/res/drawable/ic_grid_24dp.xml +++ b/app/src/main/res/drawable/ic_grid_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_info_outline_24dp.xml b/app/src/main/res/drawable/ic_info_outline_24dp.xml index af0d4d06..2465f780 100644 --- a/app/src/main/res/drawable/ic_info_outline_24dp.xml +++ b/app/src/main/res/drawable/ic_info_outline_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 92711d44..976e4708 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -3,52 +3,53 @@ android:height="108dp" android:viewportWidth="1117.0914" android:viewportHeight="1117.091"> - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_more_vert_24dp.xml b/app/src/main/res/drawable/ic_more_vert_24dp.xml index c097d3e4..19703e8e 100644 --- a/app/src/main/res/drawable/ic_more_vert_24dp.xml +++ b/app/src/main/res/drawable/ic_more_vert_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_restore_24dp.xml b/app/src/main/res/drawable/ic_restore_24dp.xml index de25eb44..2418fd6f 100644 --- a/app/src/main/res/drawable/ic_restore_24dp.xml +++ b/app/src/main/res/drawable/ic_restore_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_signal_wifi__24dp.xml b/app/src/main/res/drawable/ic_signal_wifi__24dp.xml index caac288f..24960e6a 100644 --- a/app/src/main/res/drawable/ic_signal_wifi__24dp.xml +++ b/app/src/main/res/drawable/ic_signal_wifi__24dp.xml @@ -1,13 +1,13 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + android:pathData="M12.01,21.49L23.64,7c-0.45,-0.34 -4.93,-4 -11.64,-4C5.28,3 0.81,6.66 0.36,7l11.63,14.49 0.01,0.01 0.01,-0.01z" /> + android:pathData="M3.53,10.95l8.46,10.54 0.01,0.01 0.01,-0.01 8.46,-10.54C20.04,10.62 16.81,8 12,8c-4.81,0 -8.04,2.62 -8.47,2.95z" /> diff --git a/app/src/main/res/layout/fragment_ble_scan.xml b/app/src/main/res/layout/fragment_ble_scan.xml index 2c21a2f7..1bd3a41f 100644 --- a/app/src/main/res/layout/fragment_ble_scan.xml +++ b/app/src/main/res/layout/fragment_ble_scan.xml @@ -9,12 +9,12 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" - android:paddingRight="@dimen/activity_horizontal_margin" - android:paddingTop="@dimen/activity_vertical_margin" /> + android:paddingTop="@dimen/activity_vertical_margin" + android:paddingRight="@dimen/activity_horizontal_margin" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_nsd_scan.xml b/app/src/main/res/layout/fragment_nsd_scan.xml index 04f205c6..1a7c3b81 100644 --- a/app/src/main/res/layout/fragment_nsd_scan.xml +++ b/app/src/main/res/layout/fragment_nsd_scan.xml @@ -10,8 +10,8 @@ android:layout_height="match_parent" /> diff --git a/app/src/main/res/layout/viewholder_nsd_list.xml b/app/src/main/res/layout/viewholder_nsd_list.xml index ff9b61f4..1d7f2c50 100644 --- a/app/src/main/res/layout/viewholder_nsd_list.xml +++ b/app/src/main/res/layout/viewholder_nsd_list.xml @@ -1,8 +1,8 @@ - + android:padding="@dimen/single_margin" /> diff --git a/app/src/main/res/layout/viewholder_route.xml b/app/src/main/res/layout/viewholder_route.xml index 683af0ae..810f0bc5 100755 --- a/app/src/main/res/layout/viewholder_route.xml +++ b/app/src/main/res/layout/viewholder_route.xml @@ -9,8 +9,7 @@ android:layout_marginBottom="@dimen/half_margin" app:cardElevation="1dp"> - diff --git a/app/src/main/res/layout/viewholder_scan.xml b/app/src/main/res/layout/viewholder_scan.xml index 923302ef..5e43ddcf 100644 --- a/app/src/main/res/layout/viewholder_scan.xml +++ b/app/src/main/res/layout/viewholder_scan.xml @@ -1,12 +1,12 @@ - + android:paddingBottom="@dimen/activity_vertical_margin"> diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 7353dbd1..ac94b34f 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 7353dbd1..ac94b34f 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 3f8000b3..4a3dc0af 100644 --- a/build.gradle +++ b/build.gradle @@ -3,14 +3,14 @@ import groovy.json.JsonSlurper // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.61' + ext.kotlin_version = '1.3.72' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.2' + classpath 'com.android.tools.build:gradle:4.0.0' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.6' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" @@ -21,31 +21,31 @@ buildscript { targetSdkVersion = 29 minSdkVersion = 21 - appCompat = 'androidx.appcompat:appcompat:1.1.0' - cardView = 'androidx.cardview:cardview:1.0.0' - constraintLayout = 'androidx.constraintlayout:constraintlayout:1.1.3' - dynamicAnimations = 'androidx.dynamicanimation:dynamicanimation:1.1.0-alpha03' - dynamicAnimationsKtx = 'androidx.dynamicanimation:dynamicanimation-ktx:1.0.0-alpha02' - espressoContrib = 'androidx.test.espresso:espresso-contrib:3.1.0' - espressoCore = 'androidx.test.espresso:espresso-core:3.1.0' - espressoIdlingResource = 'androidx.test.espresso.idling:idling-concurrent:3.1.0' - fragment = 'androidx.fragment:fragment:1.2.4' - fragmentKtx = 'androidx.fragment:fragment-ktx:1.2.4' - kotlin = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - ktxCore = 'androidx.core:core-ktx:1.3.0-rc01' - lifeCycleReactiveStreams = 'androidx.lifecycle:lifecycle-reactivestreams:2.2.0' - lifecycleSavedState = 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0' - lifecycleViewModel = 'androidx.lifecycle:lifecycle-viewmodel:2.2.0' - material = 'com.google.android.material:material:1.2.0-alpha06' - mockitoAndroid = 'org.mockito:mockito-android:2.23.0' - mockitoCore = 'org.mockito:mockito-core:2.23.0' - palette = 'androidx.palette:palette:1.0.0' - recyclerView = 'androidx.recyclerview:recyclerview:1.1.0' - savedState = 'androidx.savedstate:savedstate:1.0.0' - supportAnnotations = 'androidx.annotation:annotation:1.1.0' - swipeRefreshLayout = 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' - testCore = 'androidx.test:core:1.2.0' - viewpager2 = 'androidx.viewpager2:viewpager2:1.0.0' + appCompat = 'androidx.appcompat:appcompat:1.1.0' + cardView = 'androidx.cardview:cardview:1.0.0' + constraintLayout = 'androidx.constraintlayout:constraintlayout:1.1.3' + dynamicAnimations = 'androidx.dynamicanimation:dynamicanimation:1.1.0-alpha03' + dynamicAnimationsKtx = 'androidx.dynamicanimation:dynamicanimation-ktx:1.0.0-alpha02' + espressoContrib = 'androidx.test.espresso:espresso-contrib:3.1.0' + espressoCore = 'androidx.test.espresso:espresso-core:3.1.0' + espressoIdlingResource = 'androidx.test.espresso.idling:idling-concurrent:3.1.0' + fragment = 'androidx.fragment:fragment:1.2.4' + fragmentKtx = 'androidx.fragment:fragment-ktx:1.2.4' + kotlin = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + ktxCore = 'androidx.core:core-ktx:1.3.0' + lifeCycleReactiveStreams = 'androidx.lifecycle:lifecycle-reactivestreams:2.2.0' + lifecycleSavedState = 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0' + lifecycleViewModel = 'androidx.lifecycle:lifecycle-viewmodel:2.2.0' + material = 'com.google.android.material:material:1.2.0-beta01' + mockitoAndroid = 'org.mockito:mockito-android:2.23.0' + mockitoCore = 'org.mockito:mockito-core:2.23.0' + palette = 'androidx.palette:palette:1.0.0' + recyclerView = 'androidx.recyclerview:recyclerview:1.1.0' + savedState = 'androidx.savedstate:savedstate:1.0.0' + supportAnnotations = 'androidx.annotation:annotation:1.1.0' + swipeRefreshLayout = 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' + testCore = 'androidx.test:core:1.2.0' + viewpager2 = 'androidx.viewpager2:viewpager2:1.0.0' // Artifactory publishing params libProps = new Properties() @@ -130,7 +130,7 @@ task incrementalPublish { } connection.connect() - def exists = connection.getResponseCode() == HttpURLConnection.HTTP_OK + def exists = connection.getResponseCode() == HttpURLConnection.HTTP_OK println "pom for ${name} exists on ${url}: ${exists}" return exists @@ -153,7 +153,7 @@ task incrementalPublish { def existsOnGitHub = artifactExists(githubUrl, moduleName, version, true) def existsOnJcenter = artifactExists(jCenterUrl, moduleName, version, false) - def hasJcenterCreds = project.ext.bintrayUser && !project.ext.bintrayUser.empty && project.ext.bintrayApiKey && !project.ext.bintrayApiKey.empty + def hasJcenterCreds = project.ext.bintrayUser && !project.ext.bintrayUser.empty && project.ext.bintrayApiKey && !project.ext.bintrayApiKey.empty def publishGithub = existsOnGitHub != null && !existsOnGitHub def publishJcenter = existsOnJcenter != null && !existsOnJcenter && hasJcenterCreds diff --git a/communications/src/androidTest/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompatTest.java b/communications/src/androidTest/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompatTest.java index 7434229a..a5275939 100644 --- a/communications/src/androidTest/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompatTest.java +++ b/communications/src/androidTest/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompatTest.java @@ -4,6 +4,7 @@ import android.bluetooth.le.ScanFilter; import android.os.Build; import android.os.ParcelUuid; + import androidx.test.runner.AndroidJUnit4; import org.junit.After; diff --git a/communications/src/main/AndroidManifest.xml b/communications/src/main/AndroidManifest.xml index 4f501b98..d3064c3a 100644 --- a/communications/src/main/AndroidManifest.xml +++ b/communications/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ - + + + diff --git a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BLEScanner.java b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BLEScanner.java index 6a69b1a8..7d40a981 100644 --- a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BLEScanner.java +++ b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BLEScanner.java @@ -7,6 +7,7 @@ import android.bluetooth.le.ScanFilter; import android.bluetooth.le.ScanSettings; import android.os.Build; + import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; @@ -53,16 +54,16 @@ public void onScanFailed(int errorCode) { } }; - public static Builder getBuilder(BluetoothAdapter adapter) { - return new Builder(adapter); - } - private BLEScanner(@NonNull BluetoothAdapter bluetoothAdapter) { hasLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; this.bluetoothAdapter = bluetoothAdapter; compatFilters = new ArrayList<>(); } + public static Builder getBuilder(BluetoothAdapter adapter) { + return new Builder(adapter); + } + public boolean isEnabled() { return bluetoothAdapter.isEnabled(); } diff --git a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BluetoothUuid.java b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BluetoothUuid.java index 2f25e3eb..72b4ab43 100644 --- a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BluetoothUuid.java +++ b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/BluetoothUuid.java @@ -61,8 +61,7 @@ public static ParcelUuid parseUuidFrom(byte[] uuidBytes) { if (length == UUID_BYTES_16_BIT) { shortUuid = uuidBytes[0] & 0xFF; shortUuid += (uuidBytes[1] & 0xFF) << 8; - } - else { + } else { shortUuid = uuidBytes[0] & 0xFF; shortUuid += (uuidBytes[1] & 0xFF) << 8; shortUuid += (uuidBytes[2] & 0xFF) << 16; diff --git a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompat.java b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompat.java index dece1d78..79c764ab 100644 --- a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompat.java +++ b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanFilterCompat.java @@ -5,6 +5,7 @@ import android.os.Parcel; import android.os.ParcelUuid; import android.os.Parcelable; + import androidx.annotation.Nullable; import java.util.Arrays; @@ -28,24 +29,87 @@ @SuppressWarnings("WeakerAccess") public final class ScanFilterCompat implements Parcelable { + /** + * A {@link android.os.Parcelable.Creator} to create {@link ScanFilterCompat} from parcel. + */ + public static final Creator + CREATOR = new Creator() { + + @Override + public ScanFilterCompat[] newArray(int size) { + return new ScanFilterCompat[size]; + } + + @Override + public ScanFilterCompat createFromParcel(Parcel in) { + Builder builder = new Builder(); + if (in.readInt() == 1) { + builder.setDeviceName(in.readString()); + } + if (in.readInt() == 1) { + builder.setDeviceAddress(in.readString()); + } + if (in.readInt() == 1) { + ParcelUuid uuid = in.readParcelable(ParcelUuid.class.getClassLoader()); + builder.setServiceUuid(uuid); + if (in.readInt() == 1) { + ParcelUuid uuidMask = in.readParcelable( + ParcelUuid.class.getClassLoader()); + builder.setServiceUuid(uuid, uuidMask); + } + } + if (in.readInt() == 1) { + ParcelUuid servcieDataUuid = + in.readParcelable(ParcelUuid.class.getClassLoader()); + if (in.readInt() == 1) { + int serviceDataLength = in.readInt(); + byte[] serviceData = new byte[serviceDataLength]; + in.readByteArray(serviceData); + if (in.readInt() == 0) { + builder.setServiceData(servcieDataUuid, serviceData); + } else { + int serviceDataMaskLength = in.readInt(); + byte[] serviceDataMask = new byte[serviceDataMaskLength]; + in.readByteArray(serviceDataMask); + builder.setServiceData( + servcieDataUuid, serviceData, serviceDataMask); + } + } + } + + int manufacturerId = in.readInt(); + if (in.readInt() == 1) { + int manufacturerDataLength = in.readInt(); + byte[] manufacturerData = new byte[manufacturerDataLength]; + in.readByteArray(manufacturerData); + if (in.readInt() == 0) { + builder.setManufacturerData(manufacturerId, manufacturerData); + } else { + int manufacturerDataMaskLength = in.readInt(); + byte[] manufacturerDataMask = new byte[manufacturerDataMaskLength]; + in.readByteArray(manufacturerDataMask); + builder.setManufacturerData(manufacturerId, manufacturerData, + manufacturerDataMask); + } + } + + return builder.build(); + } + }; @Nullable private final String mDeviceName; - @Nullable private final String mDeviceAddress; - @Nullable private final ParcelUuid mServiceUuid; @Nullable private final ParcelUuid mServiceUuidMask; - @Nullable private final ParcelUuid mServiceDataUuid; @Nullable private final byte[] mServiceData; @Nullable private final byte[] mServiceDataMask; - private final int mManufacturerId; @Nullable private final byte[] mManufacturerData; @@ -74,6 +138,43 @@ public static Builder getBuilder() { return new Builder(); } + private static boolean equals(Object a, Object b) { + return (a == b) || (a != null && a.equals(b)); + } + + private static boolean deepEquals(Object a, Object b) { + return a == b || !(a == null || b == null) && deepEquals0(a, b); + } + + private static boolean deepEquals0(Object e1, Object e2) { + Class cl1 = e1.getClass().getComponentType(); + Class cl2 = e2.getClass().getComponentType(); + + if (cl1 != cl2) { + return false; + } + if (e1 instanceof Object[]) + return Arrays.deepEquals((Object[]) e1, (Object[]) e2); + else if (cl1 == byte.class) + return Arrays.equals((byte[]) e1, (byte[]) e2); + else if (cl1 == short.class) + return Arrays.equals((short[]) e1, (short[]) e2); + else if (cl1 == int.class) + return Arrays.equals((int[]) e1, (int[]) e2); + else if (cl1 == long.class) + return Arrays.equals((long[]) e1, (long[]) e2); + else if (cl1 == char.class) + return Arrays.equals((char[]) e1, (char[]) e2); + else if (cl1 == float.class) + return Arrays.equals((float[]) e1, (float[]) e2); + else if (cl1 == double.class) + return Arrays.equals((double[]) e1, (double[]) e2); + else if (cl1 == boolean.class) + return Arrays.equals((boolean[]) e1, (boolean[]) e2); + else + return e1.equals(e2); + } + @Override public int describeContents() { return 0; @@ -126,76 +227,6 @@ public void writeToParcel(Parcel dest, int flags) { } } - /** - * A {@link android.os.Parcelable.Creator} to create {@link ScanFilterCompat} from parcel. - */ - public static final Creator - CREATOR = new Creator() { - - @Override - public ScanFilterCompat[] newArray(int size) { - return new ScanFilterCompat[size]; - } - - @Override - public ScanFilterCompat createFromParcel(Parcel in) { - Builder builder = new Builder(); - if (in.readInt() == 1) { - builder.setDeviceName(in.readString()); - } - if (in.readInt() == 1) { - builder.setDeviceAddress(in.readString()); - } - if (in.readInt() == 1) { - ParcelUuid uuid = in.readParcelable(ParcelUuid.class.getClassLoader()); - builder.setServiceUuid(uuid); - if (in.readInt() == 1) { - ParcelUuid uuidMask = in.readParcelable( - ParcelUuid.class.getClassLoader()); - builder.setServiceUuid(uuid, uuidMask); - } - } - if (in.readInt() == 1) { - ParcelUuid servcieDataUuid = - in.readParcelable(ParcelUuid.class.getClassLoader()); - if (in.readInt() == 1) { - int serviceDataLength = in.readInt(); - byte[] serviceData = new byte[serviceDataLength]; - in.readByteArray(serviceData); - if (in.readInt() == 0) { - builder.setServiceData(servcieDataUuid, serviceData); - } - else { - int serviceDataMaskLength = in.readInt(); - byte[] serviceDataMask = new byte[serviceDataMaskLength]; - in.readByteArray(serviceDataMask); - builder.setServiceData( - servcieDataUuid, serviceData, serviceDataMask); - } - } - } - - int manufacturerId = in.readInt(); - if (in.readInt() == 1) { - int manufacturerDataLength = in.readInt(); - byte[] manufacturerData = new byte[manufacturerDataLength]; - in.readByteArray(manufacturerData); - if (in.readInt() == 0) { - builder.setManufacturerData(manufacturerId, manufacturerData); - } - else { - int manufacturerDataMaskLength = in.readInt(); - byte[] manufacturerDataMask = new byte[manufacturerDataMaskLength]; - in.readByteArray(manufacturerDataMask); - builder.setManufacturerData(manufacturerId, manufacturerData, - manufacturerDataMask); - } - } - - return builder.build(); - } - }; - /** * Returns the filter set the device name field of Bluetooth advertisement data. */ @@ -590,41 +621,4 @@ public ScanFilterCompat build() { mManufacturerId, mManufacturerData, mManufacturerDataMask); } } - - private static boolean equals(Object a, Object b) { - return (a == b) || (a != null && a.equals(b)); - } - - private static boolean deepEquals(Object a, Object b) { - return a == b || !(a == null || b == null) && deepEquals0(a, b); - } - - private static boolean deepEquals0(Object e1, Object e2) { - Class cl1 = e1.getClass().getComponentType(); - Class cl2 = e2.getClass().getComponentType(); - - if (cl1 != cl2) { - return false; - } - if (e1 instanceof Object[]) - return Arrays.deepEquals((Object[]) e1, (Object[]) e2); - else if (cl1 == byte.class) - return Arrays.equals((byte[]) e1, (byte[]) e2); - else if (cl1 == short.class) - return Arrays.equals((short[]) e1, (short[]) e2); - else if (cl1 == int.class) - return Arrays.equals((int[]) e1, (int[]) e2); - else if (cl1 == long.class) - return Arrays.equals((long[]) e1, (long[]) e2); - else if (cl1 == char.class) - return Arrays.equals((char[]) e1, (char[]) e2); - else if (cl1 == float.class) - return Arrays.equals((float[]) e1, (float[]) e2); - else if (cl1 == double.class) - return Arrays.equals((double[]) e1, (double[]) e2); - else if (cl1 == boolean.class) - return Arrays.equals((boolean[]) e1, (boolean[]) e2); - else - return e1.equals(e2); - } } diff --git a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanRecordCompat.java b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanRecordCompat.java index 65d7e556..eb2e3b5a 100644 --- a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanRecordCompat.java +++ b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanRecordCompat.java @@ -1,13 +1,12 @@ - - package com.tunjid.androidx.communications.bluetooth; import android.os.ParcelUuid; -import androidx.annotation.Nullable; -import androidx.collection.ArrayMap; import android.util.Log; import android.util.SparseArray; +import androidx.annotation.Nullable; +import androidx.collection.ArrayMap; + import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -60,84 +59,6 @@ public final class ScanRecordCompat { // Raw bytes of scan record. private final byte[] mBytes; - /** - * Returns the advertising flags indicating the discoverable mode and capability of the device. - * Returns -1 if the flag field is not set. - */ - public int getAdvertiseFlags() { - return mAdvertiseFlags; - } - - /** - * Returns a list of service UUIDs within the advertisement that are used to identify the - * bluetooth GATT services. - */ - public List getServiceUuids() { - return mServiceUuids; - } - - /** - * Returns a sparse array of manufacturer identifier and its corresponding manufacturer specific - * data. - */ - public SparseArray getManufacturerSpecificData() { - return mManufacturerSpecificData; - } - - /** - * Returns the manufacturer specific data associated with the manufacturer id. Returns - * {@code null} if the {@code manufacturerId} is not found. - */ - @Nullable - public byte[] getManufacturerSpecificData(int manufacturerId) { - return mManufacturerSpecificData.get(manufacturerId); - } - - /** - * Returns a map of service UUID and its corresponding service data. - */ - public Map getServiceData() { - return mServiceData; - } - - /** - * Returns the service data byte array associated with the {@code serviceUuid}. Returns - * {@code null} if the {@code serviceDataUuid} is not found. - */ - @Nullable - public byte[] getServiceData(ParcelUuid serviceDataUuid) { - if (serviceDataUuid == null) { - return null; - } - return mServiceData.get(serviceDataUuid); - } - - /** - * Returns the transmission power level of the packet in dBm. Returns {@link Integer#MIN_VALUE} - * if the field is not set. This value can be used to calculate the path loss of a received - * packet using the following equation: - *

- * pathloss = txPowerLevel - rssi - */ - public int getTxPowerLevel() { - return mTxPowerLevel; - } - - /** - * Returns the local name of the BLE device. The is a UTF-8 encoded string. - */ - @Nullable - public String getDeviceName() { - return mDeviceName; - } - - /** - * Returns raw bytes of scan record. - */ - public byte[] getBytes() { - return mBytes; - } - private ScanRecordCompat(@Nullable List serviceUuids, SparseArray manufacturerData, Map serviceData, @@ -247,8 +168,7 @@ public static ScanRecordCompat parseFromBytes(byte[] scanRecord) { } return new ScanRecordCompat(serviceUuids, manufacturerData, serviceData, advertiseFlag, txPowerLevel, localName, scanRecord); - } - catch (Exception e) { + } catch (Exception e) { Log.e(TAG, "unable to parse scan record: " + Arrays.toString(scanRecord)); // As the record is invalid, ignore all the parsed results for this packet // and return an empty record with raw scanRecord bytes in results @@ -256,14 +176,6 @@ public static ScanRecordCompat parseFromBytes(byte[] scanRecord) { } } - @Override - public String toString() { - return "ScanRecord [mAdvertiseFlags=" + mAdvertiseFlags + ", mServiceUuids=" + mServiceUuids - + ", mManufacturerSpecificData=" + toString(mManufacturerSpecificData) - + ", mServiceData=" + toString(mServiceData) - + ", mTxPowerLevel=" + mTxPowerLevel + ", mDeviceName=" + mDeviceName + "]"; - } - // Parse service UUIDs. private static int parseServiceUuid(byte[] scanRecord, int currentPos, int dataLength, int uuidLength, List serviceUuids) { @@ -328,4 +240,90 @@ private static String toString(SparseArray array) { buffer.append('}'); return buffer.toString(); } + + /** + * Returns the advertising flags indicating the discoverable mode and capability of the device. + * Returns -1 if the flag field is not set. + */ + public int getAdvertiseFlags() { + return mAdvertiseFlags; + } + + /** + * Returns a list of service UUIDs within the advertisement that are used to identify the + * bluetooth GATT services. + */ + public List getServiceUuids() { + return mServiceUuids; + } + + /** + * Returns a sparse array of manufacturer identifier and its corresponding manufacturer specific + * data. + */ + public SparseArray getManufacturerSpecificData() { + return mManufacturerSpecificData; + } + + /** + * Returns the manufacturer specific data associated with the manufacturer id. Returns + * {@code null} if the {@code manufacturerId} is not found. + */ + @Nullable + public byte[] getManufacturerSpecificData(int manufacturerId) { + return mManufacturerSpecificData.get(manufacturerId); + } + + /** + * Returns a map of service UUID and its corresponding service data. + */ + public Map getServiceData() { + return mServiceData; + } + + /** + * Returns the service data byte array associated with the {@code serviceUuid}. Returns + * {@code null} if the {@code serviceDataUuid} is not found. + */ + @Nullable + public byte[] getServiceData(ParcelUuid serviceDataUuid) { + if (serviceDataUuid == null) { + return null; + } + return mServiceData.get(serviceDataUuid); + } + + /** + * Returns the transmission power level of the packet in dBm. Returns {@link Integer#MIN_VALUE} + * if the field is not set. This value can be used to calculate the path loss of a received + * packet using the following equation: + *

+ * pathloss = txPowerLevel - rssi + */ + public int getTxPowerLevel() { + return mTxPowerLevel; + } + + /** + * Returns the local name of the BLE device. The is a UTF-8 encoded string. + */ + @Nullable + public String getDeviceName() { + return mDeviceName; + } + + /** + * Returns raw bytes of scan record. + */ + public byte[] getBytes() { + return mBytes; + } + + @Override + public String toString() { + return "ScanRecord [mAdvertiseFlags=" + mAdvertiseFlags + ", mServiceUuids=" + mServiceUuids + + ", mManufacturerSpecificData=" + toString(mManufacturerSpecificData) + + ", mServiceData=" + toString(mServiceData) + + ", mTxPowerLevel=" + mTxPowerLevel + ", mDeviceName=" + mDeviceName + "]"; + } } diff --git a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanResultCompat.java b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanResultCompat.java index 51c64cef..cfe7dbc0 100644 --- a/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanResultCompat.java +++ b/communications/src/main/java/com/tunjid/androidx/communications/bluetooth/ScanResultCompat.java @@ -4,6 +4,7 @@ import android.bluetooth.BluetoothDevice; import android.os.Parcel; import android.os.Parcelable; + import androidx.annotation.Nullable; import java.util.Arrays; @@ -15,16 +16,24 @@ */ public final class ScanResultCompat implements Parcelable { + public static final Parcelable.Creator CREATOR = new Creator() { + @Override + public ScanResultCompat createFromParcel(Parcel source) { + return new ScanResultCompat(source); + } + + @Override + public ScanResultCompat[] newArray(int size) { + return new ScanResultCompat[size]; + } + }; // Remote bluetooth device. private BluetoothDevice mDevice; - // Scan record, including advertising data and scan response data. @Nullable private ScanRecordCompat mScanRecordCompat; - // Received signal strength. private int mRssi; - // Device timestamp when the result was last seen. private long mTimestampNanos; @@ -48,20 +57,22 @@ private ScanResultCompat(Parcel in) { readFromParcel(in); } + private static boolean equals(Object a, Object b) { + return (a == b) || (a != null && a.equals(b)); + } + @Override public void writeToParcel(Parcel dest, int flags) { if (mDevice != null) { dest.writeInt(1); mDevice.writeToParcel(dest, flags); - } - else { + } else { dest.writeInt(0); } if (mScanRecordCompat != null) { dest.writeInt(1); dest.writeByteArray(mScanRecordCompat.getBytes()); - } - else { + } else { dest.writeInt(0); } dest.writeInt(mRssi); @@ -140,21 +151,5 @@ public String toString() { + mTimestampNanos + '}'; } - private static boolean equals(Object a, Object b) { - return (a == b) || (a != null && a.equals(b)); - } - - public static final Parcelable.Creator CREATOR = new Creator() { - @Override - public ScanResultCompat createFromParcel(Parcel source) { - return new ScanResultCompat(source); - } - - @Override - public ScanResultCompat[] newArray(int size) { - return new ScanResultCompat[size]; - } - }; - } diff --git a/communications/src/main/java/com/tunjid/androidx/communications/nsd/NsdHelper.java b/communications/src/main/java/com/tunjid/androidx/communications/nsd/NsdHelper.java index 0b45c373..53c75251 100644 --- a/communications/src/main/java/com/tunjid/androidx/communications/nsd/NsdHelper.java +++ b/communications/src/main/java/com/tunjid/androidx/communications/nsd/NsdHelper.java @@ -19,9 +19,10 @@ import android.content.Context; import android.net.nsd.NsdManager; import android.net.nsd.NsdServiceInfo; +import android.util.Log; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import android.util.Log; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -96,6 +97,16 @@ public static Builder getBuilder(Context context) { return new Builder(context); } + public static PrintWriter createPrintWriter(Socket socket) throws IOException { + return new PrintWriter( + new BufferedWriter( + new OutputStreamWriter(socket.getOutputStream())), true); + } + + public static BufferedReader createBufferedReader(Socket socket) throws IOException { + return new BufferedReader(new InputStreamReader(socket.getInputStream())); + } + public NsdManager getNsdManager() { return nsdManager; } @@ -120,16 +131,22 @@ public void resolveService(NsdServiceInfo serviceInfo) { public void stopServiceDiscovery() { for (NsdManager.DiscoveryListener listener : discoveryListeners) { - try { nsdManager.stopServiceDiscovery(listener); } - catch (IllegalArgumentException e) { Log.w(TAG, "Discovery listener not added"); } + try { + nsdManager.stopServiceDiscovery(listener); + } catch (IllegalArgumentException e) { + Log.w(TAG, "Discovery listener not added"); + } } discoveryListeners.clear(); } private void unregisterService() { for (NsdManager.RegistrationListener listener : registrationListeners) { - try { nsdManager.unregisterService(listener); } - catch (IllegalArgumentException e) { Log.w(TAG, "Registration listener not added"); } + try { + nsdManager.unregisterService(listener); + } catch (IllegalArgumentException e) { + Log.w(TAG, "Registration listener not added"); + } } registrationListeners.clear(); } @@ -140,11 +157,13 @@ public void tearDown() { } private Consumer orNull(@Nullable Consumer source) { - return source == null ? ignored -> {} : source; + return source == null ? ignored -> { + } : source; } private BiConsumer orNull(@Nullable BiConsumer source) { - return source == null ? (ignoredA, ignoredB) -> {} : source; + return source == null ? (ignoredA, ignoredB) -> { + } : source; } @NonNull @@ -224,14 +243,14 @@ public void onServiceUnregistered(NsdServiceInfo serviceInfo) { return listener; } - public static PrintWriter createPrintWriter(Socket socket) throws IOException { - return new PrintWriter( - new BufferedWriter( - new OutputStreamWriter(socket.getOutputStream())), true); + @FunctionalInterface + public interface Consumer { + void accept(T t); } - public static BufferedReader createBufferedReader(Socket socket) throws IOException { - return new BufferedReader(new InputStreamReader(socket.getInputStream())); + @FunctionalInterface + public interface BiConsumer { + void accept(T t, U u); } @SuppressWarnings("WeakerAccess") @@ -336,14 +355,4 @@ public NsdHelper build() { unregisterErrorConsumer); } } - - @FunctionalInterface - public interface Consumer { - void accept(T t); - } - - @FunctionalInterface - public interface BiConsumer { - void accept(T t, U u); - } } diff --git a/constraintlayout/src/androidTest/java/com/tunjid/androidx/constraintlayout/ExampleInstrumentedTest.java b/constraintlayout/src/androidTest/java/com/tunjid/androidx/constraintlayout/ExampleInstrumentedTest.java index bae3d117..572f2f6d 100644 --- a/constraintlayout/src/androidTest/java/com/tunjid/androidx/constraintlayout/ExampleInstrumentedTest.java +++ b/constraintlayout/src/androidTest/java/com/tunjid/androidx/constraintlayout/ExampleInstrumentedTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Instrumented test, which will execute on an Android device. diff --git a/constraintlayout/src/main/AndroidManifest.xml b/constraintlayout/src/main/AndroidManifest.xml index 4b8a86a4..facdeca0 100644 --- a/constraintlayout/src/main/AndroidManifest.xml +++ b/constraintlayout/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/constraintlayout/src/test/java/com/tunjid/androidx/constraintlayout/ExampleUnitTest.java b/constraintlayout/src/test/java/com/tunjid/androidx/constraintlayout/ExampleUnitTest.java index a311823d..1c563cb2 100644 --- a/constraintlayout/src/test/java/com/tunjid/androidx/constraintlayout/ExampleUnitTest.java +++ b/constraintlayout/src/test/java/com/tunjid/androidx/constraintlayout/ExampleUnitTest.java @@ -2,7 +2,7 @@ import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Example local unit test, which will execute on the development machine (host). diff --git a/core/src/androidTest/AndroidManifest.xml b/core/src/androidTest/AndroidManifest.xml index c5dfff33..513d00a6 100644 --- a/core/src/androidTest/AndroidManifest.xml +++ b/core/src/androidTest/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/core/src/androidTest/java/com/tunjid/androidx/core/components/services/HardServiceConnectionTest.kt b/core/src/androidTest/java/com/tunjid/androidx/core/components/services/HardServiceConnectionTest.kt index 13af85e5..24c9511a 100644 --- a/core/src/androidTest/java/com/tunjid/androidx/core/components/services/HardServiceConnectionTest.kt +++ b/core/src/androidTest/java/com/tunjid/androidx/core/components/services/HardServiceConnectionTest.kt @@ -11,7 +11,9 @@ import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation import androidx.test.rule.ServiceTestRule import com.tunjid.androidx.core.testclasses.TestService import org.junit.After -import org.junit.Assert.* +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertSame import org.junit.Before import org.junit.Rule import org.junit.Test diff --git a/gradle.properties b/gradle.properties index 9e6fce10..8de50581 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,18 +1,14 @@ # Project-wide Gradle settings. - # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. - # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html - # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. android.enableJetifier=true android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m - # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a6d67379..66e69324 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Jan 28 20:28:32 EST 2020 +#Fri May 29 09:45:09 EDT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/material/src/androidTest/java/com/tunjid/androidx/material/ExampleInstrumentedTest.java b/material/src/androidTest/java/com/tunjid/androidx/material/ExampleInstrumentedTest.java index 5b0c0024..b3cd1357 100644 --- a/material/src/androidTest/java/com/tunjid/androidx/material/ExampleInstrumentedTest.java +++ b/material/src/androidTest/java/com/tunjid/androidx/material/ExampleInstrumentedTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Instrumented test, which will execute on an Android device. diff --git a/material/src/main/AndroidManifest.xml b/material/src/main/AndroidManifest.xml index fd2d230e..c18b77b0 100644 --- a/material/src/main/AndroidManifest.xml +++ b/material/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/material/src/test/java/com/tunjid/androidx/material/ExampleUnitTest.java b/material/src/test/java/com/tunjid/androidx/material/ExampleUnitTest.java index a340c962..08ac9754 100644 --- a/material/src/test/java/com/tunjid/androidx/material/ExampleUnitTest.java +++ b/material/src/test/java/com/tunjid/androidx/material/ExampleUnitTest.java @@ -2,7 +2,7 @@ import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Example local unit test, which will execute on the development machine (host). diff --git a/navigation/src/androidTest/java/com/tunjid/androidx/navigation/NavigationTestActivity.kt b/navigation/src/androidTest/java/com/tunjid/androidx/navigation/NavigationTestActivity.kt index 0cfede8c..b252a706 100644 --- a/navigation/src/androidTest/java/com/tunjid/androidx/navigation/NavigationTestActivity.kt +++ b/navigation/src/androidTest/java/com/tunjid/androidx/navigation/NavigationTestActivity.kt @@ -41,7 +41,7 @@ class NavigationTestActivity : AppCompatActivity() { } } -fun T.waitForIdleSyncAfter(action: T.() -> Unit) { +fun T.waitForIdleSyncAfter(action: T.() -> Unit) { action(this) InstrumentationRegistry.getInstrumentation().waitForIdleSync() } \ No newline at end of file diff --git a/navigation/src/main/AndroidManifest.xml b/navigation/src/main/AndroidManifest.xml index 99cb8637..456b9f21 100644 --- a/navigation/src/main/AndroidManifest.xml +++ b/navigation/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/navigation/src/main/java/com/tunjid/androidx/navigation/SuspendingStackNavigator.kt b/navigation/src/main/java/com/tunjid/androidx/navigation/SuspendingStackNavigator.kt index 1aeb7741..5c382a45 100644 --- a/navigation/src/main/java/com/tunjid/androidx/navigation/SuspendingStackNavigator.kt +++ b/navigation/src/main/java/com/tunjid/androidx/navigation/SuspendingStackNavigator.kt @@ -8,7 +8,7 @@ class SuspendingStackNavigator( private val navigator: StackNavigator ) : SuspendingNavigator by CommonSuspendingNavigator(navigator) { - override suspend fun clear(upToTag: String?, includeMatch: Boolean) = suspendCancellableCoroutine { continuation -> + override suspend fun clear(upToTag: String?, includeMatch: Boolean) = suspendCancellableCoroutine { continuation -> val tag = upToTag ?: navigator.fragmentTags.firstOrNull() ?: "" val index = navigator.fragmentTags.indexOf(tag).let { if (includeMatch) it - 1 else it } val toShow = if (index < 0) null else navigator.find(navigator.fragmentTags[index] ?: "") diff --git a/navigation/src/test/java/com/tunjid/androidx/navigation/ExampleUnitTest.kt b/navigation/src/test/java/com/tunjid/androidx/navigation/ExampleUnitTest.kt index ef6d567a..b89e1c97 100644 --- a/navigation/src/test/java/com/tunjid/androidx/navigation/ExampleUnitTest.kt +++ b/navigation/src/test/java/com/tunjid/androidx/navigation/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package com.tunjid.androidx.navigation +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * diff --git a/recyclerview/src/androidTest/java/com/tunjid/androidx/recyclerview/ExampleInstrumentedTest.java b/recyclerview/src/androidTest/java/com/tunjid/androidx/recyclerview/ExampleInstrumentedTest.java index 7ddd10e8..394f7c4d 100644 --- a/recyclerview/src/androidTest/java/com/tunjid/androidx/recyclerview/ExampleInstrumentedTest.java +++ b/recyclerview/src/androidTest/java/com/tunjid/androidx/recyclerview/ExampleInstrumentedTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Instrumented test, which will execute on an Android device. diff --git a/recyclerview/src/main/AndroidManifest.xml b/recyclerview/src/main/AndroidManifest.xml index 44defef5..d89b153f 100644 --- a/recyclerview/src/main/AndroidManifest.xml +++ b/recyclerview/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/recyclerview/src/main/java/com/tunjid/androidx/recyclerview/ComposedEndlessScroller.kt b/recyclerview/src/main/java/com/tunjid/androidx/recyclerview/ComposedEndlessScroller.kt index 295634d9..5d79567b 100644 --- a/recyclerview/src/main/java/com/tunjid/androidx/recyclerview/ComposedEndlessScroller.kt +++ b/recyclerview/src/main/java/com/tunjid/androidx/recyclerview/ComposedEndlessScroller.kt @@ -22,7 +22,7 @@ internal class ComposedEndlessScroller( override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) - val change = if(orientation == RecyclerView.HORIZONTAL) dx else dy + val change = if (orientation == RecyclerView.HORIZONTAL) dx else dy val layoutManager = recyclerView.layoutManager ?: return if (abs(change) < 3) return diff --git a/recyclerview/src/test/java/com/tunjid/androidx/recyclerview/ExampleUnitTest.java b/recyclerview/src/test/java/com/tunjid/androidx/recyclerview/ExampleUnitTest.java index c9e4ed7b..ceb0fd8e 100644 --- a/recyclerview/src/test/java/com/tunjid/androidx/recyclerview/ExampleUnitTest.java +++ b/recyclerview/src/test/java/com/tunjid/androidx/recyclerview/ExampleUnitTest.java @@ -2,7 +2,7 @@ import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Example local unit test, which will execute on the development machine (host). diff --git a/savedstate/src/androidTest/java/com/tunjid/androidx/savedstate/ExampleInstrumentedTest.kt b/savedstate/src/androidTest/java/com/tunjid/androidx/savedstate/ExampleInstrumentedTest.kt index 84ca2f3b..37e89ada 100644 --- a/savedstate/src/androidTest/java/com/tunjid/androidx/savedstate/ExampleInstrumentedTest.kt +++ b/savedstate/src/androidTest/java/com/tunjid/androidx/savedstate/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package com.tunjid.androidx.savedstate -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.* import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * diff --git a/savedstate/src/main/AndroidManifest.xml b/savedstate/src/main/AndroidManifest.xml index 2c0cd7c6..45177098 100644 --- a/savedstate/src/main/AndroidManifest.xml +++ b/savedstate/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/savedstate/src/test/java/com/tunjid/androidx/savedstate/ExampleUnitTest.kt b/savedstate/src/test/java/com/tunjid/androidx/savedstate/ExampleUnitTest.kt index d60ba13e..780350f9 100644 --- a/savedstate/src/test/java/com/tunjid/androidx/savedstate/ExampleUnitTest.kt +++ b/savedstate/src/test/java/com/tunjid/androidx/savedstate/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.tunjid.androidx.savedstate -import org.junit.Test - import org.junit.Assert.* +import org.junit.Test /** * Example local unit test, which will execute on the development machine (host). diff --git a/test/src/androidTest/java/com/tunjid/androidx/test/ExampleInstrumentedTest.java b/test/src/androidTest/java/com/tunjid/androidx/test/ExampleInstrumentedTest.java index a8606868..9f9719cc 100644 --- a/test/src/androidTest/java/com/tunjid/androidx/test/ExampleInstrumentedTest.java +++ b/test/src/androidTest/java/com/tunjid/androidx/test/ExampleInstrumentedTest.java @@ -1,13 +1,14 @@ package com.tunjid.androidx.test; import android.content.Context; + import androidx.test.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Instrumentation test, which will execute on an Android device. diff --git a/test/src/main/java/com/tunjid/androidx/test/idlingresources/FragmentVisibleIdlingResource.kt b/test/src/main/java/com/tunjid/androidx/test/idlingresources/FragmentVisibleIdlingResource.kt index ce3701df..959ec3de 100644 --- a/test/src/main/java/com/tunjid/androidx/test/idlingresources/FragmentVisibleIdlingResource.kt +++ b/test/src/main/java/com/tunjid/androidx/test/idlingresources/FragmentVisibleIdlingResource.kt @@ -11,7 +11,7 @@ import androidx.fragment.app.FragmentManager */ class FragmentVisibleIdlingResource( fragmentManager: FragmentManager, - private val fragmentTag: String + private val fragmentTag: String ) : BaseFragmentIdlingResource(fragmentManager, fragmentTag) { override fun onFragmentResumed(fm: FragmentManager, f: Fragment) { diff --git a/view/src/main/AndroidManifest.xml b/view/src/main/AndroidManifest.xml index 78059645..5b86af56 100644 --- a/view/src/main/AndroidManifest.xml +++ b/view/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/view/src/main/java/com/tunjid/androidx/view/animator/ViewHider.kt b/view/src/main/java/com/tunjid/androidx/view/animator/ViewHider.kt index b0855c43..ce55b7e2 100644 --- a/view/src/main/java/com/tunjid/androidx/view/animator/ViewHider.kt +++ b/view/src/main/java/com/tunjid/androidx/view/animator/ViewHider.kt @@ -30,10 +30,11 @@ class ViewHider private constructor( private val startAction: () -> Unit = { if (isVisible) view.visibility = View.VISIBLE } private val endAction: () -> Unit = { if (!isVisible) view.visibility = View.GONE } - private val spring: SpringAnimation get() = view.spring( - if (direction == LEFT || direction == RIGHT) SpringAnimation.TRANSLATION_X - else SpringAnimation.TRANSLATION_Y - ) + private val spring: SpringAnimation + get() = view.spring( + if (direction == LEFT || direction == RIGHT) SpringAnimation.TRANSLATION_X + else SpringAnimation.TRANSLATION_Y + ) // These calculations don't take the status bar into account, unlikely to matter however private val displacement: Float @@ -65,7 +66,7 @@ class ViewHider private constructor( fun hide() = toggle(false) - fun configure(options: SpringForce.() -> Unit) = options.invoke(spring.spring) + fun configure(options: SpringForce.() -> Unit) = options.invoke(spring.spring) private fun toggle(visible: Boolean) { if (this.isVisible == visible) return diff --git a/view/src/main/java/com/tunjid/androidx/view/util/ViewExtensions.kt b/view/src/main/java/com/tunjid/androidx/view/util/ViewExtensions.kt index 56ddc7fd..24244c44 100644 --- a/view/src/main/java/com/tunjid/androidx/view/util/ViewExtensions.kt +++ b/view/src/main/java/com/tunjid/androidx/view/util/ViewExtensions.kt @@ -59,7 +59,7 @@ fun View.spring( } inline fun View.getOrPutTag(@IdRes id: Int, initializer: () -> T) = - getTag(id) as? T ?: initializer().also { setTag(id, it) } + getTag(id) as? T ?: initializer().also { setTag(id, it) } /** * An end listener that removes itself when the animation ends diff --git a/view/src/main/res/anim/pop_up_fade_in.xml b/view/src/main/res/anim/pop_up_fade_in.xml index d6440288..facbaf09 100644 --- a/view/src/main/res/anim/pop_up_fade_in.xml +++ b/view/src/main/res/anim/pop_up_fade_in.xml @@ -1,7 +1,9 @@ - + + android:toAlpha="1.0" /> \ No newline at end of file diff --git a/view/src/main/res/anim/pop_up_fade_out.xml b/view/src/main/res/anim/pop_up_fade_out.xml index 6c14feab..5cfa446b 100644 --- a/view/src/main/res/anim/pop_up_fade_out.xml +++ b/view/src/main/res/anim/pop_up_fade_out.xml @@ -1,7 +1,9 @@ - + + android:toAlpha="0.0" /> \ No newline at end of file diff --git a/view/src/main/res/values/styles.xml b/view/src/main/res/values/styles.xml index f1485f10..f61b6ba1 100644 --- a/view/src/main/res/values/styles.xml +++ b/view/src/main/res/values/styles.xml @@ -1,5 +1,6 @@ +