Merge "Add interface for homepapge swipe to dismiss."

This commit is contained in:
TreeHugger Robot
2019-03-27 06:21:26 +00:00
committed by Android (Google) Code Review
3 changed files with 82 additions and 3 deletions

View File

@@ -28,6 +28,7 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardRenderer; import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardRenderer;
import com.android.settings.homepage.contextualcards.slices.SwipeDismissalDelegate.DismissalItemTouchHelperListener;
import com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer; import com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer;
import java.util.ArrayList; import java.util.ArrayList;
@@ -35,7 +36,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class ContextualCardsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> public class ContextualCardsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
implements ContextualCardUpdateListener { implements ContextualCardUpdateListener, DismissalItemTouchHelperListener {
static final int SPAN_COUNT = 2; static final int SPAN_COUNT = 2;
private static final String TAG = "ContextualCardsAdapter"; private static final String TAG = "ContextualCardsAdapter";
@@ -136,4 +137,9 @@ public class ContextualCardsAdapter extends RecyclerView.Adapter<RecyclerView.Vi
//TODO(b/119465242): flickering conditional cards after collapsing/expanding //TODO(b/119465242): flickering conditional cards after collapsing/expanding
} }
@Override
public void onSwiped(int position) {
}
} }

View File

@@ -27,9 +27,11 @@ import android.view.ViewGroup;
import androidx.loader.app.LoaderManager; import androidx.loader.app.LoaderManager;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment; import com.android.settings.core.InstrumentedFragment;
import com.android.settings.homepage.contextualcards.slices.SwipeDismissalDelegate;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
public class ContextualCardsFragment extends InstrumentedFragment implements public class ContextualCardsFragment extends InstrumentedFragment implements
@@ -41,6 +43,7 @@ public class ContextualCardsFragment extends InstrumentedFragment implements
private GridLayoutManager mLayoutManager; private GridLayoutManager mLayoutManager;
private ContextualCardsAdapter mContextualCardsAdapter; private ContextualCardsAdapter mContextualCardsAdapter;
private ContextualCardManager mContextualCardManager; private ContextualCardManager mContextualCardManager;
private ItemTouchHelper mItemTouchHelper;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -63,16 +66,20 @@ public class ContextualCardsFragment extends InstrumentedFragment implements
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
final Context context = getContext();
final View rootView = inflater.inflate(R.layout.settings_homepage, container, false); final View rootView = inflater.inflate(R.layout.settings_homepage, container, false);
mCardsContainer = rootView.findViewById(R.id.card_container); mCardsContainer = rootView.findViewById(R.id.card_container);
mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT, mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT,
GridLayoutManager.VERTICAL, false /* reverseLayout */); GridLayoutManager.VERTICAL, false /* reverseLayout */);
mCardsContainer.setLayoutManager(mLayoutManager); mCardsContainer.setLayoutManager(mLayoutManager);
mContextualCardsAdapter = new ContextualCardsAdapter(getContext(), mContextualCardsAdapter = new ContextualCardsAdapter(context, this /* lifecycleOwner */,
this /* lifecycleOwner */, mContextualCardManager); mContextualCardManager);
mCardsContainer.setAdapter(mContextualCardsAdapter); mCardsContainer.setAdapter(mContextualCardsAdapter);
mContextualCardManager.setListener(mContextualCardsAdapter); mContextualCardManager.setListener(mContextualCardsAdapter);
mCardsContainer.setListener(this); mCardsContainer.setListener(this);
mItemTouchHelper = new ItemTouchHelper(
new SwipeDismissalDelegate(context, mContextualCardsAdapter));
mItemTouchHelper.attachToRecyclerView(mCardsContainer);
return rootView; return rootView;
} }

View File

@@ -0,0 +1,66 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.homepage.contextualcards.slices;
import android.content.Context;
import android.graphics.Canvas;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
public class SwipeDismissalDelegate extends ItemTouchHelper.Callback {
private static final String TAG = "DismissItemTouchHelper";
public interface DismissalItemTouchHelperListener {
void onSwiped(int position);
}
private final Context mContext;
private final DismissalItemTouchHelperListener mListener;
public SwipeDismissalDelegate(Context context, DismissalItemTouchHelperListener listener) {
mContext = context;
mListener = listener;
}
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder) {
return 0;
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder,
@NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
mListener.onSwiped(viewHolder.getAdapterPosition());
}
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
boolean isCurrentlyActive) {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}