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"