diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/documentsui/dirlist/AnimationView.java | 43 | ||||
-rw-r--r-- | src/com/android/documentsui/dirlist/DirectoryFragment.java | 24 |
2 files changed, 62 insertions, 5 deletions
diff --git a/src/com/android/documentsui/dirlist/AnimationView.java b/src/com/android/documentsui/dirlist/AnimationView.java index d17bddf98..5813085b3 100644 --- a/src/com/android/documentsui/dirlist/AnimationView.java +++ b/src/com/android/documentsui/dirlist/AnimationView.java @@ -16,19 +16,22 @@ package com.android.documentsui.dirlist; -import androidx.annotation.IntDef; -import androidx.fragment.app.FragmentTransaction; +import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled; import android.content.Context; import android.os.Bundle; import android.util.AttributeSet; import android.widget.LinearLayout; +import androidx.annotation.IntDef; +import androidx.fragment.app.FragmentTransaction; + import com.android.documentsui.R; import com.android.documentsui.base.Shared; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; /** * This class exists solely to support animated transition of our directory fragment. @@ -51,6 +54,8 @@ public class AnimationView extends LinearLayout { public static final int ANIM_LEAVE = 3; public static final int ANIM_ENTER = 4; + private final ArrayList<OnSizeChangedListener> mOnSizeChangedListeners = new ArrayList<>(); + private float mPosition = 0f; // The distance the animation will cover...currently matches the height of the @@ -65,11 +70,45 @@ public class AnimationView extends LinearLayout { super(context, attrs); } + /** + * A listener of the onSizeChanged method. + */ + public interface OnSizeChangedListener { + /** + * Called on the View's onSizeChanged. + */ + void onSizeChanged(); + } + + /** + * Adds a listener of the onSizeChanged method. + */ + public void addOnSizeChangedListener(OnSizeChangedListener listener) { + if (isUseMaterial3FlagEnabled()) { + mOnSizeChangedListeners.add(listener); + } + } + + /** + * Removes a listener of the onSizeChanged method. + */ + public void removeOnSizeChangedListener(OnSizeChangedListener listener) { + if (isUseMaterial3FlagEnabled()) { + mOnSizeChangedListeners.remove(listener); + } + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mSpan = h; setPosition(mPosition); + if (isUseMaterial3FlagEnabled()) { + for (int i = mOnSizeChangedListeners.size() - 1; i >= 0; --i) { + mOnSizeChangedListeners.get(i).onSizeChanged(); + } + } } public float getPosition() { diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java index 2ea906a60..2911d04e9 100644 --- a/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -108,6 +108,7 @@ import com.android.documentsui.clipping.ClipStore; import com.android.documentsui.clipping.DocumentClipper; import com.android.documentsui.clipping.UrisSupplier; import com.android.documentsui.dirlist.AnimationView.AnimationType; +import com.android.documentsui.dirlist.AnimationView.OnSizeChangedListener; import com.android.documentsui.picker.PickActivity; import com.android.documentsui.services.FileOperation; import com.android.documentsui.services.FileOperationService; @@ -188,7 +189,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On private SelectionMetadata mSelectionMetadata; private KeyInputHandler mKeyListener; private @Nullable DragHoverListener mDragHoverListener; - private View mRootView; + private AnimationView mRootView; private IconHelper mIconHelper; private SwipeRefreshLayout mRefreshLayout; private RecyclerView mRecView; @@ -416,13 +417,27 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On || Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE.equals(action); } + private OnSizeChangedListener mOnSizeChangedListener = + new AnimationView.OnSizeChangedListener() { + @Override + public void onSizeChanged() { + if (isUseMaterial3FlagEnabled() && mState.derivedMode != MODE_LIST) { + // Update the grid layout when the window size changes. + updateLayout(mState.derivedMode); + } + } + }; + @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mHandler = new Handler(Looper.getMainLooper()); mActivity = (BaseActivity) getActivity(); - mRootView = inflater.inflate(R.layout.fragment_directory, container, false); + mRootView = (AnimationView) inflater.inflate(R.layout.fragment_directory, container, false); + if (isUseMaterial3FlagEnabled()) { + mRootView.addOnSizeChangedListener(mOnSizeChangedListener); + } mProgressBar = mRootView.findViewById(R.id.progressbar); assert mProgressBar != null; @@ -497,6 +512,10 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On mModel.removeUpdateListener(mAdapter.getModelUpdateListener()); setPreDrawListenerEnabled(false); + if (isUseMaterial3FlagEnabled()) { + mRootView.removeOnSizeChangedListener(mOnSizeChangedListener); + } + super.onDestroyView(); } @@ -809,7 +828,6 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On if (mLayout != null) { mLayout.setSpanCount(mColumnCount); } - int pad = getDirectoryPadding(mode); mAppBarHeight = getAppBarLayoutHeight(); mSaveLayoutHeight = getSaveLayoutHeight(); |