diff --git a/hover-demo-nonfullscreen/src/main/java/io/mattcarroll/hoverdemonon_fullscreen/DemoHoverMenuService.java b/hover-demo-nonfullscreen/src/main/java/io/mattcarroll/hoverdemonon_fullscreen/DemoHoverMenuService.java index cfdfea8..587f113 100755 --- a/hover-demo-nonfullscreen/src/main/java/io/mattcarroll/hoverdemonon_fullscreen/DemoHoverMenuService.java +++ b/hover-demo-nonfullscreen/src/main/java/io/mattcarroll/hoverdemonon_fullscreen/DemoHoverMenuService.java @@ -60,4 +60,14 @@ protected HoverMenuAdapter createHoverMenuAdapter() { protected Navigator createNavigator() { return new DefaultNavigator(getApplicationContext(), false); } + + @Override + public void onHoverMenuCollapsed() { + Log.d(TAG, "onHoverMenuCollapsed() called"); + } + + @Override + public void onHoverMenuExpanded() { + Log.d(TAG, "onHoverMenuExpanded() called"); + } } diff --git a/hover/build.gradle b/hover/build.gradle index ce45f77..72f4cab 100644 --- a/hover/build.gradle +++ b/hover/build.gradle @@ -4,7 +4,7 @@ version = '0.9.7' android { compileSdkVersion 23 - buildToolsVersion "23.0.0" + buildToolsVersion "23.0.3" defaultConfig { minSdkVersion 15 diff --git a/hover/src/main/AndroidManifest.xml b/hover/src/main/AndroidManifest.xml index 35a16a3..00a19a9 100644 --- a/hover/src/main/AndroidManifest.xml +++ b/hover/src/main/AndroidManifest.xml @@ -4,8 +4,4 @@ - - - - diff --git a/hover/src/main/java/io/mattcarroll/hover/HoverMenu.java b/hover/src/main/java/io/mattcarroll/hover/HoverMenu.java index 3a05012..b6cff42 100755 --- a/hover/src/main/java/io/mattcarroll/hover/HoverMenu.java +++ b/hover/src/main/java/io/mattcarroll/hover/HoverMenu.java @@ -58,7 +58,16 @@ public interface HoverMenu { void removeOnExitListener(@NonNull OnExitListener onExitListener); + void addOnCollapseAndExpandListener(@NonNull OnCollapseAndExpandListener onCollapseAndExpandListener); + + void removeOnCollapseAndExpandListener(@NonNull OnCollapseAndExpandListener onCollapseAndExpandListener); + interface OnExitListener { void onExitByUserRequest(); } + + interface OnCollapseAndExpandListener { + void onHoverMenuCollapsed(); + void onHoverMenuExpanded(); + } } diff --git a/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/view/ViewHoverMenu.java b/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/view/ViewHoverMenu.java index c433d70..4c752f4 100644 --- a/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/view/ViewHoverMenu.java +++ b/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/view/ViewHoverMenu.java @@ -50,6 +50,25 @@ public class ViewHoverMenu extends FrameLayout implements HoverMenu { private HoverMenuAdapter mAdapter; private SharedPreferences mPrefs; private Set mOnExitListeners = new HashSet<>(); + private Set mOnCollapseAndExpandListeners = new HashSet<>(); + + private HoverMenuView.HoverMenuTransitionListener mHoverMenuTransitionListener = new HoverMenuView.HoverMenuTransitionListener() { + @Override + public void onCollapsing() { } + + @Override + public void onCollapsed() { + notifyOnCollapsedListeners(); + } + + @Override + public void onExpanding() {} + + @Override + public void onExpanded() { + notifyOnExpandedListeners(); + } + }; public ViewHoverMenu(Context context) { this(context, null); @@ -131,6 +150,7 @@ public void expandMenu() { @Override public void collapseMenu() { + mHoverMenuView.setHoverMenuTransitionListener(mHoverMenuTransitionListener); mHoverMenuView.collapse(); } @@ -144,6 +164,28 @@ public void removeOnExitListener(@NonNull OnExitListener onExitListener) { mOnExitListeners.remove(onExitListener); } + @Override + public void addOnCollapseAndExpandListener(@NonNull OnCollapseAndExpandListener onCollapseAndExpandListener) { + mOnCollapseAndExpandListeners.add(onCollapseAndExpandListener); + } + + @Override + public void removeOnCollapseAndExpandListener(@NonNull OnCollapseAndExpandListener onCollapseAndExpandListener) { + mOnCollapseAndExpandListeners.remove(onCollapseAndExpandListener); + } + + private void notifyOnCollapsedListeners() { + for (OnCollapseAndExpandListener listener : mOnCollapseAndExpandListeners) { + listener.onHoverMenuCollapsed(); + } + } + + private void notifyOnExpandedListeners() { + for (OnCollapseAndExpandListener listener : mOnCollapseAndExpandListeners) { + listener.onHoverMenuExpanded(); + } + } + private void notifyOnExitListeners() { for (OnExitListener listener : mOnExitListeners) { listener.onExitByUserRequest(); diff --git a/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/HoverMenuService.java b/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/HoverMenuService.java index 10f45b4..8eeffd7 100755 --- a/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/HoverMenuService.java +++ b/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/HoverMenuService.java @@ -38,7 +38,7 @@ * is no {@code Activity} to associate with the {@code HoverMenu}'s UI. This {@code Service} is the * application's link to the device's {@code Window} to display the {@code HoverMenu}. */ -public abstract class HoverMenuService extends Service { +public abstract class HoverMenuService extends Service implements HoverMenu.OnCollapseAndExpandListener { private static final String TAG = "HoverMenuService"; @@ -71,6 +71,7 @@ public void onCreate() { .restoreVisualState(loadPreferredLocation()) .build(); mHoverMenu.addOnExitListener(mWindowHoverMenuMenuExitListener); + mHoverMenu.addOnCollapseAndExpandListener(this); } @Override @@ -134,6 +135,22 @@ protected void onHoverMenuExitingByUserRequest() { // Hook for subclasses. } + /** + * Hook method for subclasses to take action when HoverMenu collapses. + */ + @Override + public void onHoverMenuCollapsed() { + // Hook for subclasses. + } + + /** + * Hook method for subclasses to take action when HoverMenu expands. + */ + @Override + public void onHoverMenuExpanded() { + // Hook for subclasses. + } + private void savePreferredLocation() { String memento = mHoverMenu.getVisualState(); mPrefs.edit().putString(PREF_HOVER_MENU_VISUAL_STATE, memento).apply(); diff --git a/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/WindowHoverMenu.java b/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/WindowHoverMenu.java index f54b57d..19d0f53 100755 --- a/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/WindowHoverMenu.java +++ b/hover/src/main/java/io/mattcarroll/hover/defaulthovermenu/window/WindowHoverMenu.java @@ -45,6 +45,7 @@ public class WindowHoverMenu implements HoverMenu { private boolean mIsShowingHoverMenu; // Are we currently display mHoverMenuView? private boolean mIsInDragMode; // If we're not in drag mode then we're in menu mode. private Set mOnExitListeners = new HashSet<>(); + private Set mOnCollapseAndExpandListeners = new HashSet<>(); private HoverMenuView.HoverMenuTransitionListener mHoverMenuTransitionListener = new HoverMenuView.HoverMenuTransitionListener() { @Override @@ -57,6 +58,7 @@ public void onCollapsed() { // take over. We do this so that touch events outside the drag area can propagate to // applications on screen. mWindowViewController.makeUntouchable(mHoverMenuView); + notifyOnCollapsedListeners(); } @Override @@ -67,6 +69,7 @@ public void onExpanding() { @Override public void onExpanded() { mWindowViewController.makeTouchable(mHoverMenuView); + notifyOnExpandedListeners(); } }; @@ -190,6 +193,28 @@ public void removeOnExitListener(@NonNull OnExitListener onExitListener) { mOnExitListeners.remove(onExitListener); } + @Override + public void addOnCollapseAndExpandListener(@NonNull OnCollapseAndExpandListener onCollapseAndExpandListener) { + mOnCollapseAndExpandListeners.add(onCollapseAndExpandListener); + } + + @Override + public void removeOnCollapseAndExpandListener(@NonNull OnCollapseAndExpandListener onCollapseAndExpandListener) { + mOnCollapseAndExpandListeners.remove(onCollapseAndExpandListener); + } + + private void notifyOnCollapsedListeners() { + for (OnCollapseAndExpandListener listener : mOnCollapseAndExpandListeners) { + listener.onHoverMenuCollapsed(); + } + } + + private void notifyOnExpandedListeners() { + for (OnCollapseAndExpandListener listener : mOnCollapseAndExpandListeners) { + listener.onHoverMenuExpanded(); + } + } + private void notifyOnExitListeners() { for (OnExitListener listener : mOnExitListeners) { listener.onExitByUserRequest(); diff --git a/hoverdemo/build.gradle b/hoverdemo/build.gradle index 9625b91..daa5803 100644 --- a/hoverdemo/build.gradle +++ b/hoverdemo/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion "23.0.0" + buildToolsVersion "23.0.3" defaultConfig { applicationId "io.mattcarroll.hover.hoverdemo"