summaryrefslogtreecommitdiffstats
path: root/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java')
-rw-r--r--src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java b/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java
index 717a101..eb9b904 100644
--- a/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java
+++ b/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java
@@ -28,6 +28,8 @@ import com.cyngn.eleven.utils.ApolloUtils;
import com.cyngn.eleven.utils.MusicUtils;
import com.cyngn.eleven.widgets.BlurScrimImage;
+import java.util.HashSet;
+
/**
* This class is used to display the {@link ViewPager} used to swipe between the
* main {@link Fragment}s used to browse the user's music.
@@ -43,9 +45,16 @@ public abstract class SlidingPanelActivity extends BaseActivity {
None,
}
+ public static interface ISlidingPanelListener {
+ public void onBeginSlide();
+ public void onFinishSlide(SlidingPanelActivity.Panel visiblePanel);
+ }
+
private SlidingUpPanelLayout mFirstPanel;
private SlidingUpPanelLayout mSecondPanel;
protected Panel mTargetNavigatePanel;
+ private HashSet<ISlidingPanelListener> mSlidingPanelListeners
+ = new HashSet<ISlidingPanelListener>();
private final ShowPanelClickListener mShowBrowse = new ShowPanelClickListener(Panel.Browse);
private final ShowPanelClickListener mShowMusicPlayer = new ShowPanelClickListener(Panel.MusicPlayer);
@@ -107,6 +116,8 @@ public abstract class SlidingPanelActivity extends BaseActivity {
} else if (slideOffset < 0.75f) {
getActionBar().show();
}
+
+ onSlide();
}
@Override
@@ -131,6 +142,8 @@ public abstract class SlidingPanelActivity extends BaseActivity {
if (mTargetNavigatePanel == Panel.None) {
mFirstPanel.setSlidingEnabled(false);
}
+
+ onSlide();
}
@Override
@@ -213,6 +226,11 @@ public abstract class SlidingPanelActivity extends BaseActivity {
}
public void showPanel(Panel panel) {
+ // if we are already at our target panel, then don't do anything
+ if (panel == getCurrentPanel()) {
+ return;
+ }
+
// TODO: Add ability to do this instantaneously as opposed to animate
switch (panel) {
case Browse:
@@ -236,13 +254,28 @@ public abstract class SlidingPanelActivity extends BaseActivity {
}
}
+ protected void onSlide() {
+ for (ISlidingPanelListener listener : mSlidingPanelListeners) {
+ listener.onBeginSlide();
+ }
+ }
+
/**
* This checks if we are at our target panel and resets our flag if we are there
*/
protected void checkTargetNavigation() {
- if (mTargetNavigatePanel == getCurrentPanel()) {
+ final Panel currentPanel = getCurrentPanel();
+ // This checks if we are at our target panel and resets our flag if we are there
+ if (mTargetNavigatePanel == currentPanel) {
mTargetNavigatePanel = Panel.None;
}
+
+ // if we are at the target panel
+ if (mTargetNavigatePanel == Panel.None) {
+ for (ISlidingPanelListener listener : mSlidingPanelListeners) {
+ listener.onFinishSlide(currentPanel);
+ }
+ }
}
protected Panel getCurrentPanel() {
@@ -309,4 +342,12 @@ public abstract class SlidingPanelActivity extends BaseActivity {
showPanel(mTargetPanel);
}
}
+
+ public void addSlidingPanelListener(final ISlidingPanelListener listener) {
+ mSlidingPanelListeners.add(listener);
+ }
+
+ public void removeSlidingPanelListener(final ISlidingPanelListener listener) {
+ mSlidingPanelListeners.remove(listener);
+ }
}