From 1bfd6fe97dd1e73999f4db9995c1cc4958f14f3b Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Mon, 13 Aug 2018 20:32:45 -0300 Subject: [PATCH] Android - People - Sliding panel (for users actions) --- android/app/build.gradle | 2 + .../hifiinterface/MainActivity.java | 12 +++++- .../fragment/FriendsFragment.java | 39 +++++++++++++++++++ .../hifiinterface/view/UserListAdapter.java | 19 ++++++++- .../src/main/res/layout/fragment_friends.xml | 30 ++++++++------ android/app/src/main/res/values/strings.xml | 3 ++ android/build.gradle | 1 + 7 files changed, 93 insertions(+), 13 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index d5058a7f40..a32ab20f6c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -144,5 +144,7 @@ dependencies { compile 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'com.squareup.picasso:picasso:2.71828' + compile 'com.sothree.slidinguppanel:library:3.4.0' + implementation fileTree(include: ['*.jar'], dir: 'libs') } diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java index 220a69381d..d259e18ee7 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java @@ -150,7 +150,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On private void loadFragment(Fragment fragment, String title, boolean addToBackStack) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); - ft.replace(R.id.content_frame, fragment); + ft.replace(R.id.content_frame, fragment, getString(R.string.tagFragmentPeople)); + if (addToBackStack) { ft.addToBackStack(title); } @@ -297,6 +298,15 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On @Override public void onBackPressed() { + // if a fragment needs to internally manage back presses.. + FragmentManager fm = getFragmentManager(); + Fragment friendsFragment = fm.findFragmentByTag(getString(R.string.tagFragmentPeople)); + if (friendsFragment != null && friendsFragment instanceof FriendsFragment) { + if (((FriendsFragment) friendsFragment).onBackPressed()) { + return; + } + } + int index = getFragmentManager().getBackStackEntryCount() - 1; if (index > 0) { super.onBackPressed(); diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/FriendsFragment.java b/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/FriendsFragment.java index e70ecfbc57..2cd80bcca9 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/FriendsFragment.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/FriendsFragment.java @@ -10,6 +10,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.sothree.slidinguppanel.SlidingUpPanelLayout; + import io.highfidelity.hifiinterface.R; import io.highfidelity.hifiinterface.view.UserListAdapter; @@ -20,7 +22,9 @@ public class FriendsFragment extends Fragment { public native String nativeGetAccessToken(); private RecyclerView mUsersView; + private View mUserActions; private UserListAdapter mUsersAdapter; + private SlidingUpPanelLayout mSlidingUpPanelLayout; public FriendsFragment() { // Required empty public constructor @@ -45,9 +49,44 @@ public class FriendsFragment extends Fragment { GridLayoutManager gridLayoutMgr = new GridLayoutManager(getContext(), numberOfColumns); mUsersView.setLayoutManager(gridLayoutMgr); mUsersAdapter = new UserListAdapter(getContext(), accessToken); + + mUserActions = rootView.findViewById(R.id.userActionsLayout); + + mSlidingUpPanelLayout = rootView.findViewById(R.id.sliding_layout); + mSlidingUpPanelLayout.setPanelHeight(0); + mUsersAdapter.setClickListener(new UserListAdapter.ItemClickListener() { + @Override + public void onItemClick(View view, int position, UserListAdapter.User user) { + // 1. 'select' user + // .. + // 2. adapt options + // .. + // 3. show + mSlidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED); + } + }); mUsersView.setAdapter(mUsersAdapter); + mSlidingUpPanelLayout.setFadeOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mSlidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); + } + }); + return rootView; } + /** + * Processes the back pressed event and returns true if it was managed by this Fragment + * @return + */ + public boolean onBackPressed() { + if (mSlidingUpPanelLayout.getPanelState().equals(SlidingUpPanelLayout.PanelState.EXPANDED)) { + mSlidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); + return true; + } else { + return false; + } + } } diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/view/UserListAdapter.java b/android/app/src/main/java/io/highfidelity/hifiinterface/view/UserListAdapter.java index 202fd82c8b..ad3a5cc136 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/view/UserListAdapter.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/view/UserListAdapter.java @@ -34,6 +34,7 @@ public class UserListAdapter extends RecyclerView.Adapter mUsers = new ArrayList<>(); + private ItemClickListener mClickListener; public UserListAdapter(Context c, String accessToken) { mContext = c; @@ -99,7 +100,7 @@ public class UserListAdapter extends RecyclerView.Adapter - + android:gravity="bottom" + sothree:umanoShadowHeight="4dp" + android:background="@color/backgroundLight"> + + android:layout_width="match_parent" + android:layout_height="match_parent" /> - + + + + diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index d5da2f857b..ea4e59a35a 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -24,4 +24,7 @@ Privacy Policy Your Last Location Online + + + tagFragmentPeople diff --git a/android/build.gradle b/android/build.gradle index bc39c30472..6ecdd34542 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -28,6 +28,7 @@ allprojects { repositories { jcenter() google() + mavenCentral() } }