Fixed
Status Update
Comments
yb...@google.com <yb...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit b55fe68edc02b253b908a1c7c2e98350ba67afe4
Author: Ian Lake <ilake@google.com>
Date: Wed Aug 12 14:21:57 2020
Ignore Animations/Animator when Transitions run
For a given Fragment, a single owner for its
transition from visible to non-visible is needed
to avoid conflicts as different systems try to
influence the same set of properties.
This has two consequences:
- Animations (which work at the parent container level)
will interfere if there are *any* Transitions run.
- Animators will interfere if there are any Transitions
run on that specific Fragment.
By tracking which Transitions were started and using
that information to selectively ignore conflicting
Animations/Animators, we can avoid visual artifacts.
Test: updated tests pass
BUG: 149569323
Change-Id: I9e5169ffd36853c3dfbd7f217837a74674a9508d
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionAnimTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
https://android-review.googlesource.com/1398530
Branch: androidx-master-dev
commit b55fe68edc02b253b908a1c7c2e98350ba67afe4
Author: Ian Lake <ilake@google.com>
Date: Wed Aug 12 14:21:57 2020
Ignore Animations/Animator when Transitions run
For a given Fragment, a single owner for its
transition from visible to non-visible is needed
to avoid conflicts as different systems try to
influence the same set of properties.
This has two consequences:
- Animations (which work at the parent container level)
will interfere if there are *any* Transitions run.
- Animators will interfere if there are any Transitions
run on that specific Fragment.
By tracking which Transitions were started and using
that information to selectively ignore conflicting
Animations/Animators, we can avoid visual artifacts.
Test: updated tests pass
BUG: 149569323
Change-Id: I9e5169ffd36853c3dfbd7f217837a74674a9508d
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionAnimTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
ke...@gmail.com <ke...@gmail.com> #3
There are two parallel systems in Android - the Animation
system and the Animator
system (which the Transition
system is built on top of). With this change and Fragment 1.3.0-alpha08, no Animation
will run if there are any Transitions kicked off at the same time and no Animator
will run on Fragments that have Transitions directly associated with them (either via an enter/exit transition or as part of a shared element transition).
ya...@google.com <ya...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-master-dev
commit fa55358f7f2870bf05ef5cce12d2b4e2d86732aa
Author: Ian Lake <ilake@google.com>
Date: Mon Sep 14 11:30:52 2020
Ignore Animations when Animators run
As a continuation of the work in b/149569323 ,
we now prioritize running Animators over running
Animations. This avoids cases where both are
running simultaneously.
As Animations and Animators are now properly
decoupled, we can use animator.cancel() when
our CancelationSignal is triggered instead of
using clearAnimation().
Test: all tests pass, updated FragmentAnimatorTest passes
BUG: 167579557
Change-Id: I7b3f5c1cc1355e02ff770838cb485d659dfb1619
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
https://android-review.googlesource.com/1427449
Branch: androidx-master-dev
commit fa55358f7f2870bf05ef5cce12d2b4e2d86732aa
Author: Ian Lake <ilake@google.com>
Date: Mon Sep 14 11:30:52 2020
Ignore Animations when Animators run
As a continuation of the work in
we now prioritize running Animators over running
Animations. This avoids cases where both are
running simultaneously.
As Animations and Animators are now properly
decoupled, we can use animator.cancel() when
our CancelationSignal is triggered instead of
using clearAnimation().
Test: all tests pass, updated FragmentAnimatorTest passes
BUG: 167579557
Change-Id: I7b3f5c1cc1355e02ff770838cb485d659dfb1619
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
ke...@gmail.com <ke...@gmail.com> #5
I catch the exception again. As you can see below. but I have see that that error only happen when I run clearAllTables in Main Thread.
I know that we should not do that, and when I run clearAllTables in a background thread it runs without errors.
So I believe that the exception gives a wrong message.
04-02 07:04:06.133 4197-4197/br.com.mobilesales.influxlexical E/AndroidRuntime: FATAL EXCEPTION: main
Process: br.com.mobilesales.influxlexical, PID: 4197
java.lang.IllegalStateException: Cannot perform this operation because there is no current transaction.
at android.database.sqlite.SQLiteSession.throwIfNoTransaction(SQLiteSession.java:915)
at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:398)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:524)
at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.endTransaction(FrameworkSQLiteDatabase.java:90)
at android.arch.persistence.room.RoomDatabase.endTransaction(RoomDatabase.java:261)
at br.com.mobilesales.influxlexical.data.source.local.AppDatabase_Impl.clearAllTables(AppDatabase_Impl.java:355)
at br.com.mobilesales.influxlexical.InfluxLexicalApplication$override.logoffUser(InfluxLexicalApplication.java:154)
at br.com.mobilesales.influxlexical.InfluxLexicalApplication$override.access$dispatch(InfluxLexicalApplication.java)
at br.com.mobilesales.influxlexical.InfluxLexicalApplication.logoffUser(InfluxLexicalApplication.java)
at br.com.mobilesales.influxlexical.MainActivity.onOptionsItemSelected(MainActivity.kt:247)
at android.app.Activity.onMenuItemSelected(Activity.java:3204)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:380)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:63)
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:203)
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:780)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:963)
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:624)
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:150)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
I know that we should not do that, and when I run clearAllTables in a background thread it runs without errors.
So I believe that the exception gives a wrong message.
04-02 07:04:06.133 4197-4197/br.com.mobilesales.influxlexical E/AndroidRuntime: FATAL EXCEPTION: main
Process: br.com.mobilesales.influxlexical, PID: 4197
java.lang.IllegalStateException: Cannot perform this operation because there is no current transaction.
at android.database.sqlite.SQLiteSession.throwIfNoTransaction(SQLiteSession.java:915)
at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:398)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:524)
at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.endTransaction(FrameworkSQLiteDatabase.java:90)
at android.arch.persistence.room.RoomDatabase.endTransaction(RoomDatabase.java:261)
at br.com.mobilesales.influxlexical.data.source.local.AppDatabase_Impl.clearAllTables(AppDatabase_Impl.java:355)
at br.com.mobilesales.influxlexical.InfluxLexicalApplication$override.logoffUser(InfluxLexicalApplication.java:154)
at br.com.mobilesales.influxlexical.InfluxLexicalApplication$override.access$dispatch(InfluxLexicalApplication.java)
at br.com.mobilesales.influxlexical.InfluxLexicalApplication.logoffUser(InfluxLexicalApplication.java)
at br.com.mobilesales.influxlexical.MainActivity.onOptionsItemSelected(MainActivity.kt:247)
at android.app.Activity.onMenuItemSelected(Activity.java:3204)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:380)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:63)
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:203)
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:780)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:963)
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:624)
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:150)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
ya...@google.com <ya...@google.com> #6
clearAllTables is not supposed to be run in a main thread. It is annotated with @WorkerThread, and you should always run it in a background thread.
Description
Version used: 1.1.0-beta1
Devices/Android versions reproduced on: Emulator/ Nexus 5x/ Android 8
When I call clearAllTables from Room, it say that I need a Transaction to do that, but when I create the transaction it throws the error below.
Code below:
appDatabase.beginTransaction();
appDatabase.clearAllTables();
appDatabase.endTransaction();
03-29 13:45:36.580 11888-13324/br.com.mobilesales.influxlexical E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1
Process: br.com.mobilesales.influxlexical, PID: 11888
android.database.sqlite.SQLiteException: cannot VACUUM from within a transaction (code 1)
at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:735)
at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1754)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1682)
at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.execSQL(FrameworkSQLiteDatabase.java:242)
at br.com.mobilesales.influxlexical.data.source.local.AppDatabase_Impl.clearAllTables(AppDatabase_Impl.java:360)
at br.com.mobilesales.influxlexical.InfluxLexicalApplication$1.run(InfluxLexicalApplication.java:152)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)