diff --git a/app/src/main/java/com/example/android/sunshine/app/DetailActivity.java b/app/src/main/java/com/example/android/sunshine/app/DetailActivity.java index a23c185..f223f49 100644 --- a/app/src/main/java/com/example/android/sunshine/app/DetailActivity.java +++ b/app/src/main/java/com/example/android/sunshine/app/DetailActivity.java @@ -16,6 +16,7 @@ package com.example.android.sunshine.app; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.AppCompatActivity; @@ -37,6 +38,7 @@ public class DetailActivity extends AppCompatActivity { Bundle arguments = new Bundle(); arguments.putParcelable(DetailFragment.DETAIL_URI, getIntent().getData()); + arguments.putBoolean(DetailFragment.DETAIL_TRANSITION_ANIMATION, true); DetailFragment fragment = new DetailFragment(); fragment.setArguments(arguments); @@ -44,6 +46,9 @@ public class DetailActivity extends AppCompatActivity { getSupportFragmentManager().beginTransaction() .add(R.id.weather_detail_container, fragment) .commit(); + + // Being here means we are in animation mode + supportPostponeEnterTransition(); } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/android/sunshine/app/DetailFragment.java b/app/src/main/java/com/example/android/sunshine/app/DetailFragment.java index 2dcd7b8..c6162a7 100644 --- a/app/src/main/java/com/example/android/sunshine/app/DetailFragment.java +++ b/app/src/main/java/com/example/android/sunshine/app/DetailFragment.java @@ -48,11 +48,13 @@ public class DetailFragment extends Fragment implements LoaderManager.LoaderCall private static final String LOG_TAG = DetailFragment.class.getSimpleName(); static final String DETAIL_URI = "URI"; + static final String DETAIL_TRANSITION_ANIMATION = "DTA"; private static final String FORECAST_SHARE_HASHTAG = " #SunshineApp"; private String mForecast; private Uri mUri; + private boolean mTransitionAnimation; private static final int DETAIL_LOADER = 0; @@ -108,6 +110,7 @@ public class DetailFragment extends Fragment implements LoaderManager.LoaderCall Bundle arguments = getArguments(); if (arguments != null) { mUri = arguments.getParcelable(DetailFragment.DETAIL_URI); + mTransitionAnimation = arguments.getBoolean(DetailFragment.DETAIL_TRANSITION_ANIMATION, false); } View rootView = inflater.inflate(R.layout.fragment_detail_start, container, false); @@ -265,7 +268,7 @@ public class DetailFragment extends Fragment implements LoaderManager.LoaderCall Toolbar toolbarView = (Toolbar) getView().findViewById(R.id.toolbar); // We need to start the enter transition after the data has loaded - if (activity instanceof DetailActivity) { + if ( mTransitionAnimation ) { activity.supportStartPostponedEnterTransition(); if ( null != toolbarView ) { diff --git a/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java b/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java index 95cb45d..7c8b370 100644 --- a/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java +++ b/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java @@ -21,6 +21,7 @@ import android.os.Build; import android.os.Bundle; import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -145,6 +146,10 @@ public class ForecastAdapter extends RecyclerView.Adapter 0 ) { + if ( data.getCount() == 0 ) { + getActivity().supportStartPostponedEnterTransition(); + } else { mRecyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { @@ -330,6 +341,9 @@ public class ForecastFragment extends Fragment implements LoaderManager.LoaderCa if ( null != vh && mAutoSelectView ) { mForecastAdapter.selectView( vh ); } + if ( mHoldForTransition ) { + getActivity().supportStartPostponedEnterTransition(); + } return true; } return false; @@ -339,6 +353,8 @@ public class ForecastFragment extends Fragment implements LoaderManager.LoaderCa } + + @Override public void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/example/android/sunshine/app/MainActivity.java b/app/src/main/java/com/example/android/sunshine/app/MainActivity.java index 6b2e276..6460c9e 100644 --- a/app/src/main/java/com/example/android/sunshine/app/MainActivity.java +++ b/app/src/main/java/com/example/android/sunshine/app/MainActivity.java @@ -26,11 +26,13 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import com.example.android.sunshine.app.sync.SunshineSyncAdapter; import com.google.android.gms.common.ConnectionResult; @@ -161,7 +163,7 @@ public class MainActivity extends AppCompatActivity implements ForecastFragment. } @Override - public void onItemSelected(Uri contentUri) { + public void onItemSelected(Uri contentUri, ForecastAdapter.ForecastAdapterViewHolder vh) { if (mTwoPane) { // In two-pane mode, show the detail view in this activity by // adding or replacing the detail fragment using a @@ -180,7 +182,8 @@ public class MainActivity extends AppCompatActivity implements ForecastFragment. .setData(contentUri); ActivityOptionsCompat activityOptions = - ActivityOptionsCompat.makeSceneTransitionAnimation(this); + ActivityOptionsCompat.makeSceneTransitionAnimation(this, + new Pair(vh.mIconView, getString(R.string.detail_icon_transition_name))); ActivityCompat.startActivity(this, intent, activityOptions.toBundle()); } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 65f7c25..f25be28 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -15,9 +15,11 @@ --> diff --git a/app/src/main/res/layout/detail_today_grid.xml b/app/src/main/res/layout/detail_today_grid.xml index a2b5646..03e4c4c 100644 --- a/app/src/main/res/layout/detail_today_grid.xml +++ b/app/src/main/res/layout/detail_today_grid.xml @@ -49,7 +49,8 @@ android:maxWidth="@dimen/today_icon" app:layout_columnWeight="1" app:layout_gravity="fill_horizontal" - tools:src="@drawable/art_clouds" /> + tools:src="@drawable/art_clouds" + android:transitionName="@string/detail_icon_transition_name"/> + android:duration="250"> diff --git a/app/src/main/res/transition-land-v21/details_window_return_transition.xml b/app/src/main/res/transition-land-v21/details_window_return_transition.xml index a870284..8662f00 100644 --- a/app/src/main/res/transition-land-v21/details_window_return_transition.xml +++ b/app/src/main/res/transition-land-v21/details_window_return_transition.xml @@ -16,7 +16,7 @@ --> + android:duration="250"> diff --git a/app/src/main/res/transition-v21/details_window_enter_transition.xml b/app/src/main/res/transition-v21/details_window_enter_transition.xml index a16e386..74a71b4 100644 --- a/app/src/main/res/transition-v21/details_window_enter_transition.xml +++ b/app/src/main/res/transition-v21/details_window_enter_transition.xml @@ -16,7 +16,7 @@ --> + android:duration="250"> diff --git a/app/src/main/res/transition-v21/details_window_return_transition.xml b/app/src/main/res/transition-v21/details_window_return_transition.xml index 4a8664f..cf7009e 100644 --- a/app/src/main/res/transition-v21/details_window_return_transition.xml +++ b/app/src/main/res/transition-v21/details_window_return_transition.xml @@ -16,7 +16,7 @@ --> + android:duration="250"> diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 85563af..23c756f 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -21,5 +21,6 @@ + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1263e48..ccd978c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -211,4 +211,8 @@ Hurricane Unknown (%1$s) + + + TN_DetailIcon + \ No newline at end of file