diff --git a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java
index 1852946c02..1deb25d9a6 100644
--- a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java
+++ b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java
@@ -60,6 +60,7 @@
import javax.inject.Inject;
import static com.keylesspalace.tusky.settings.PrefKeys.APP_THEME;
+import static com.keylesspalace.tusky.util.ActivityExtensions.supportsOverridingActivityTransitions;
public abstract class BaseActivity extends AppCompatActivity implements Injectable {
@@ -78,9 +79,9 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && getIntent().getBooleanExtra(OPEN_WITH_SLIDE_IN, false)) {
- overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, R.anim.slide_from_right, R.anim.slide_to_left);
- overrideActivityTransition(OVERRIDE_TRANSITION_CLOSE, R.anim.slide_from_left, R.anim.slide_to_right);
+ if (supportsOverridingActivityTransitions() && activityTransitionWasRequested()) {
+ overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, R.anim.activity_open_enter, R.anim.activity_open_exit);
+ overrideActivityTransition(OVERRIDE_TRANSITION_CLOSE, R.anim.actitivity_close_enter, R.anim.activity_close_exit);
}
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
@@ -111,6 +112,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
requesters = new HashMap<>();
}
+ private boolean activityTransitionWasRequested() {
+ return getIntent().getBooleanExtra(OPEN_WITH_SLIDE_IN, false);
+ }
+
@Override
protected void attachBaseContext(Context newBase) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(newBase);
@@ -189,8 +194,8 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item) {
public void finish() {
super.finish();
// if this activity was opened with slide-in, close it with slide out
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE && getIntent().getBooleanExtra(OPEN_WITH_SLIDE_IN, false)) {
- overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right);
+ if (!supportsOverridingActivityTransitions() && activityTransitionWasRequested()) {
+ overridePendingTransition(R.anim.actitivity_close_enter, R.anim.activity_close_exit);
}
}
diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
index 0b6e54b3b6..92691dfd6d 100644
--- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
@@ -109,6 +109,7 @@ import com.keylesspalace.tusky.util.hide
import com.keylesspalace.tusky.util.reduceSwipeSensitivity
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
+import com.keylesspalace.tusky.util.supportsOverridingActivityTransitions
import com.keylesspalace.tusky.util.unsafeLazy
import com.keylesspalace.tusky.util.updateShortcut
import com.keylesspalace.tusky.util.viewBinding
@@ -978,7 +979,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
}
startActivity(intent)
finish()
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ if (supportsOverridingActivityTransitions()) {
overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, R.anim.explode, R.anim.explode)
} else {
@Suppress("DEPRECATION")
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt
index 06484d2453..1cdadd20e0 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt
@@ -126,7 +126,7 @@ class LoginActivity : BaseActivity(), Injectable {
override fun finish() {
super.finish()
if (isAdditionalLogin() || isAccountMigration()) {
- overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right)
+ overridePendingTransition(R.anim.actitivity_close_enter, R.anim.activity_close_exit)
}
}
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt
index c608f102a7..ac402fddf9 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt
@@ -115,10 +115,10 @@ class PreferencesActivity :
fragment.setTargetFragment(caller, 0)
supportFragmentManager.commit {
setCustomAnimations(
- R.anim.slide_from_right,
- R.anim.slide_to_left,
- R.anim.slide_from_left,
- R.anim.slide_to_right
+ R.anim.activity_open_enter,
+ R.anim.activity_open_exit,
+ R.anim.actitivity_close_enter,
+ R.anim.activity_close_exit
)
replace(R.id.fragment_container, fragment)
addToBackStack(null)
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt
index cb6eeb46e6..93fe05cd0f 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt
@@ -16,7 +16,11 @@
package com.keylesspalace.tusky.components.preference
import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
import androidx.preference.PreferenceFragmentCompat
+import com.google.android.material.color.MaterialColors
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.di.Injectable
import com.keylesspalace.tusky.settings.AccountPreferenceDataStore
@@ -31,6 +35,17 @@ class TabFilterPreferencesFragment : PreferenceFragmentCompat(), Injectable {
@Inject
lateinit var accountPreferenceDataStore: AccountPreferenceDataStore
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ // Give view a background color so transitions show up correctly
+ return super.onCreateView(inflater, container, savedInstanceState).also { view ->
+ view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.colorBackground))
+ }
+ }
+
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
makePreferenceScreen {
preferenceCategory(R.string.title_home) { category ->
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/viewthread/ViewThreadFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/viewthread/ViewThreadFragment.kt
index ab7b840205..dc1d91ce3b 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/viewthread/ViewThreadFragment.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/viewthread/ViewThreadFragment.kt
@@ -429,10 +429,10 @@ class ViewThreadFragment :
parentFragmentManager.commit {
setCustomAnimations(
- R.anim.slide_from_right,
- R.anim.slide_to_left,
- R.anim.slide_from_left,
- R.anim.slide_to_right
+ R.anim.activity_open_enter,
+ R.anim.activity_open_exit,
+ R.anim.actitivity_close_enter,
+ R.anim.activity_close_exit
)
replace(R.id.fragment_container, viewEditsFragment, "ViewEditsFragment_$id")
addToBackStack(null)
diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.kt b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.kt
index 73617ae41c..8072a684a4 100644
--- a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.kt
@@ -84,7 +84,7 @@ abstract class SFragment : Fragment(), Injectable {
override fun startActivity(intent: Intent) {
super.startActivity(intent)
- requireActivity().overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left)
+ requireActivity().overridePendingTransition(R.anim.activity_open_enter, R.anim.activity_open_exit)
}
override fun onAttach(context: Context) {
diff --git a/app/src/main/java/com/keylesspalace/tusky/util/ActivityExensions.kt b/app/src/main/java/com/keylesspalace/tusky/util/ActivityExensions.kt
index df34fcdf3e..bfe27ecd77 100644
--- a/app/src/main/java/com/keylesspalace/tusky/util/ActivityExensions.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/util/ActivityExensions.kt
@@ -13,9 +13,13 @@ fun Activity.startActivityWithSlideInAnimation(intent: Intent) {
// so we pass a flag that BaseActivity will respect.
intent.putExtra(BaseActivity.OPEN_WITH_SLIDE_IN, true)
startActivity(intent)
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ if (!supportsOverridingActivityTransitions()) {
// the old api needs to be called by the activity that starts the transition
@Suppress("DEPRECATION")
- overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left)
+ overridePendingTransition(R.anim.activity_open_enter, R.anim.activity_open_exit)
}
}
+
+fun supportsOverridingActivityTransitions(): Boolean {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
+}
diff --git a/app/src/main/res/anim/actitivity_close_enter.xml b/app/src/main/res/anim/actitivity_close_enter.xml
new file mode 100644
index 0000000000..2c08910bf9
--- /dev/null
+++ b/app/src/main/res/anim/actitivity_close_enter.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/app/src/main/res/anim/activity_close_exit.xml b/app/src/main/res/anim/activity_close_exit.xml
new file mode 100644
index 0000000000..feb59397d7
--- /dev/null
+++ b/app/src/main/res/anim/activity_close_exit.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/anim/activity_open_enter.xml b/app/src/main/res/anim/activity_open_enter.xml
new file mode 100644
index 0000000000..f2bd3cc943
--- /dev/null
+++ b/app/src/main/res/anim/activity_open_enter.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/anim/activity_open_exit.xml b/app/src/main/res/anim/activity_open_exit.xml
new file mode 100644
index 0000000000..2c08910bf9
--- /dev/null
+++ b/app/src/main/res/anim/activity_open_exit.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/app/src/main/res/anim/fast_out_extra_slow_in.xml b/app/src/main/res/anim/fast_out_extra_slow_in.xml
new file mode 100644
index 0000000000..f419778d0d
--- /dev/null
+++ b/app/src/main/res/anim/fast_out_extra_slow_in.xml
@@ -0,0 +1,18 @@
+
+
+
diff --git a/app/src/main/res/anim/slide_from_left.xml b/app/src/main/res/anim/slide_from_left.xml
deleted file mode 100644
index 5c7fe52277..0000000000
--- a/app/src/main/res/anim/slide_from_left.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_from_right.xml b/app/src/main/res/anim/slide_from_right.xml
deleted file mode 100644
index 3c595d04bf..0000000000
--- a/app/src/main/res/anim/slide_from_right.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_to_left.xml b/app/src/main/res/anim/slide_to_left.xml
deleted file mode 100644
index 21688e2ca2..0000000000
--- a/app/src/main/res/anim/slide_to_left.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_to_right.xml b/app/src/main/res/anim/slide_to_right.xml
deleted file mode 100644
index 8ded764f78..0000000000
--- a/app/src/main/res/anim/slide_to_right.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
\ No newline at end of file