Skip to content
This repository has been archived by the owner on Jan 10, 2023. It is now read-only.

Expanded/Collapsed listeners #50

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
}
2 changes: 1 addition & 1 deletion hover/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = '0.9.7'

android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
buildToolsVersion "23.0.3"

defaultConfig {
minSdkVersion 15
Expand Down
4 changes: 0 additions & 4 deletions hover/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,4 @@
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

<application android:allowBackup="false">

</application>

</manifest>
9 changes: 9 additions & 0 deletions hover/src/main/java/io/mattcarroll/hover/HoverMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,25 @@ public class ViewHoverMenu extends FrameLayout implements HoverMenu {
private HoverMenuAdapter mAdapter;
private SharedPreferences mPrefs;
private Set<OnExitListener> mOnExitListeners = new HashSet<>();
private Set<OnCollapseAndExpandListener> mOnCollapseAndExpandListeners = new HashSet<>();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you change the implementation to a CopyOnWriteArraySet to avoid possible concurrency issues?


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);
Expand Down Expand Up @@ -131,6 +150,7 @@ public void expandMenu() {

@Override
public void collapseMenu() {
mHoverMenuView.setHoverMenuTransitionListener(mHoverMenuTransitionListener);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's this for?

mHoverMenuView.collapse();
}

Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand Down Expand Up @@ -71,6 +71,7 @@ public void onCreate() {
.restoreVisualState(loadPreferredLocation())
.build();
mHoverMenu.addOnExitListener(mWindowHoverMenuMenuExitListener);
mHoverMenu.addOnCollapseAndExpandListener(this);
}

@Override
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<OnExitListener> mOnExitListeners = new HashSet<>();
private Set<OnCollapseAndExpandListener> mOnCollapseAndExpandListeners = new HashSet<>();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you change the implementation to a CopyOnWriteArraySet to avoid possible concurrency issues?


private HoverMenuView.HoverMenuTransitionListener mHoverMenuTransitionListener = new HoverMenuView.HoverMenuTransitionListener() {
@Override
Expand All @@ -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
Expand All @@ -67,6 +69,7 @@ public void onExpanding() {
@Override
public void onExpanded() {
mWindowViewController.makeTouchable(mHoverMenuView);
notifyOnExpandedListeners();
}
};

Expand Down Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion hoverdemo/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down