From 16870fcbb94b8b79bed012b2c8116f6a13bb9f42 Mon Sep 17 00:00:00 2001 From: m2049r Date: Sun, 14 Mar 2021 11:49:47 +0100 Subject: [PATCH] Receive & send transition --- .../com/m2049r/xmrwallet/ReceiveFragment.java | 7 ++++ .../com/m2049r/xmrwallet/WalletActivity.java | 41 ++++++++++--------- .../com/m2049r/xmrwallet/WalletFragment.java | 36 +++++++++------- .../xmrwallet/fragment/send/SendFragment.java | 8 +++- app/src/main/res/layout/fragment_receive.xml | 3 +- app/src/main/res/layout/fragment_send.xml | 3 +- app/src/main/res/layout/fragment_wallet.xml | 2 + app/src/main/res/values/strings.xml | 4 ++ 8 files changed, 68 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/m2049r/xmrwallet/ReceiveFragment.java b/app/src/main/java/com/m2049r/xmrwallet/ReceiveFragment.java index 2c0276a..684f30a 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/ReceiveFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/ReceiveFragment.java @@ -50,6 +50,7 @@ import androidx.core.view.MenuItemCompat; import androidx.fragment.app.Fragment; import com.google.android.material.textfield.TextInputLayout; +import com.google.android.material.transition.MaterialContainerTransform; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; @@ -64,6 +65,7 @@ import com.m2049r.xmrwallet.model.Wallet; import com.m2049r.xmrwallet.model.WalletManager; import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.MoneroThreadPoolExecutor; +import com.m2049r.xmrwallet.util.ThemeHelper; import com.m2049r.xmrwallet.widget.ExchangeView; import com.m2049r.xmrwallet.widget.Toolbar; @@ -244,6 +246,11 @@ public class ReceiveFragment extends Fragment { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); + final MaterialContainerTransform transform = new MaterialContainerTransform(); + transform.setDrawingViewId(R.id.fragment_container); + transform.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration)); + transform.setAllContainerColors(ThemeHelper.getThemedColor(getContext(), R.attr.colorSurface)); + setSharedElementEnterTransition(transform); } private ShareActionProvider shareActionProvider; diff --git a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java index 9973f54..4932521 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java +++ b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java @@ -43,7 +43,6 @@ import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.navigation.NavigationView; @@ -60,9 +59,9 @@ import com.m2049r.xmrwallet.model.TransactionInfo; import com.m2049r.xmrwallet.model.Wallet; import com.m2049r.xmrwallet.model.WalletManager; import com.m2049r.xmrwallet.service.WalletService; -import com.m2049r.xmrwallet.util.ThemeHelper; import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.MoneroThreadPoolExecutor; +import com.m2049r.xmrwallet.util.ThemeHelper; import com.m2049r.xmrwallet.widget.Toolbar; import java.util.ArrayList; @@ -542,8 +541,8 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste } @Override - public void onSendRequest() { - replaceFragment(SendFragment.newInstance(uri), null, null); + public void onSendRequest(View view) { + replaceFragmentWithTransition(view, SendFragment.newInstance(uri), null, null); uri = null; // only use uri once } @@ -832,8 +831,18 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste if (extras != null) { newFragment.setArguments(extras); } + int transition; + if (newFragment instanceof TxFragment) + transition = R.string.tx_details_transition_name; + else if (newFragment instanceof ReceiveFragment) + transition = R.string.receive_transition_name; + else if (newFragment instanceof SendFragment) + transition = R.string.send_transition_name; + else + throw new IllegalStateException("expecting known transition"); + getSupportFragmentManager().beginTransaction() - .addSharedElement(view, getString(R.string.tx_details_transition_name)) + .addSharedElement(view, getString(transition)) .replace(R.id.fragment_container, newFragment) .addToBackStack(stackName) .commit(); @@ -843,10 +852,11 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste if (extras != null) { newFragment.setArguments(extras); } - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.replace(R.id.fragment_container, newFragment); - transaction.addToBackStack(stackName); - transaction.commit(); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.fragment_container, newFragment) + .addToBackStack(stackName) + .commit(); } private void onWalletDetails() { @@ -983,20 +993,13 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste } @Override - public void onWalletReceive() { - startReceive(getWallet().getAddress()); - } - - void startReceive(String address) { + public void onWalletReceive(View view) { + final String address = getWallet().getAddress(); Timber.d("startReceive()"); Bundle b = new Bundle(); b.putString("address", address); b.putString("name", getWalletName()); - startReceiveFragment(b); - } - - void startReceiveFragment(Bundle extras) { - replaceFragment(new ReceiveFragment(), null, extras); + replaceFragmentWithTransition(view, new ReceiveFragment(), null, b); Timber.d("ReceiveFragment placed"); } diff --git a/app/src/main/java/com/m2049r/xmrwallet/WalletFragment.java b/app/src/main/java/com/m2049r/xmrwallet/WalletFragment.java index eee13d9..16ea23a 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/WalletFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/WalletFragment.java @@ -36,6 +36,7 @@ import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; @@ -104,6 +105,13 @@ public class WalletFragment extends Fragment Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_wallet, container, false); + final MaterialElevationScale exitTransition = new MaterialElevationScale(false); + exitTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration)); + setExitTransition(exitTransition); + final MaterialElevationScale reenterTransition = new MaterialElevationScale(true); + reenterTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration)); + setReenterTransition(reenterTransition); + ivStreetGunther = view.findViewById(R.id.ivStreetGunther); tvStreetView = view.findViewById(R.id.tvStreetView); llBalance = view.findViewById(R.id.llBalance); @@ -169,18 +177,8 @@ public class WalletFragment extends Fragment recyclerView.addOnItemTouchListener(swipeTouchListener); - bSend.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - activityCallback.onSendRequest(); - } - }); - bReceive.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - activityCallback.onWalletReceive(); - } - }); + bSend.setOnClickListener(v -> activityCallback.onSendRequest(v)); + bReceive.setOnClickListener(v -> activityCallback.onWalletReceive(v)); sCurrency.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override @@ -203,6 +201,16 @@ public class WalletFragment extends Fragment return view; } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + postponeEnterTransition(); + view.getViewTreeObserver().addOnPreDrawListener(() -> { + startPostponedEnterTransition(); + return true; + }); + } + void showBalance(String balance) { tvBalance.setText(balance); final boolean streetMode = activityCallback.isStreetMode(); @@ -483,7 +491,7 @@ public class WalletFragment extends Fragment long getDaemonHeight(); //mBoundService.getDaemonHeight(); - void onSendRequest(); + void onSendRequest(View view); void onTxDetailsRequest(View view, TransactionInfo info); @@ -497,7 +505,7 @@ public class WalletFragment extends Fragment String getTxKey(String txId); - void onWalletReceive(); + void onWalletReceive(View view); boolean hasWallet(); diff --git a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java index 903aff0..6e6539b 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java @@ -36,6 +36,7 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.viewpager.widget.ViewPager; +import com.google.android.material.transition.MaterialContainerTransform; import com.m2049r.xmrwallet.OnBackPressedListener; import com.m2049r.xmrwallet.OnUriScannedListener; import com.m2049r.xmrwallet.R; @@ -49,6 +50,7 @@ import com.m2049r.xmrwallet.layout.SpendViewPager; import com.m2049r.xmrwallet.model.PendingTransaction; import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.Notice; +import com.m2049r.xmrwallet.util.ThemeHelper; import com.m2049r.xmrwallet.widget.DotBar; import com.m2049r.xmrwallet.widget.Toolbar; @@ -538,10 +540,14 @@ public class SendFragment extends Fragment enableNavigation(); } - @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); + final MaterialContainerTransform transform = new MaterialContainerTransform(); + transform.setDrawingViewId(R.id.fragment_container); + transform.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration)); + transform.setAllContainerColors(ThemeHelper.getThemedColor(getContext(), R.attr.colorSurface)); + setSharedElementEnterTransition(transform); } @Override diff --git a/app/src/main/res/layout/fragment_receive.xml b/app/src/main/res/layout/fragment_receive.xml index 69e52d2..f3cee81 100644 --- a/app/src/main/res/layout/fragment_receive.xml +++ b/app/src/main/res/layout/fragment_receive.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:transitionName="@string/receive_transition_name"> + android:orientation="vertical" + android:transitionName="@string/send_transition_name">