Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13fa94eb authored by Jens Doll's avatar Jens Doll Committed by DvTonder
Browse files

Added support for multiple navigation key bars

System UI was build with the assumption that there is only one
navigation bar at a time, and that this bar is managed by
Phone UI, Tablet UI or TV UI.

This commit adds simple call back facilities at BaseStatusBar
for both, navigation key hints and menu key visibility change
events. These call backs are wired up in Phone UI, Tablet UI
and the TV UI stub.

This allows us to have more than on navigation key bar
in the UI and define those navigation bars directly
in BaseStatusBar, where it is available for all UIs.

Patch Set 2:
* CyanogenMod Code Style
* Added documentation.
* One interface for all
* Added setDisabledFlags() to the list

Change-Id: Id4de440e21c2f5c78b5e185030f9c5e0f7e6bef7
parent 544bf6ce
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -127,6 +127,33 @@ public abstract class BaseStatusBar extends SystemUI implements

    protected FrameLayout mStatusBarContainer;


    /**
     * An interface for navigation key bars to allow status bars to signal which keys are
     * currently of interest to the user.<br>
     * See {@link NavigationBarView} in Phone UI for an example.
     */
    public interface NavigationBarCallback {
        /**
         * @param hints flags from StatusBarManager (NAVIGATION_HINT...) to indicate which key is
         * available for navigation
         * @see StatusBarManager
         */
        public abstract void setNavigationIconHints(int hints);
        /**
         * @param showMenu {@code true} when an menu key should be displayed by the navigation bar.
         */
        public abstract void setMenuVisibility(boolean showMenu);
        /**
         * @param disabledFlags flags from View (STATUS_BAR_DISABLE_...) to indicate which key
         * is currently disabled on the navigation bar.
         * {@see View}
         */
        public void setDisabledFlags(int disabledFlags);
    };
    private ArrayList<NavigationBarCallback> mNavigationCallbacks =
            new ArrayList<NavigationBarCallback>();

    // UI-specific methods

    /**
@@ -1157,4 +1184,26 @@ public abstract class BaseStatusBar extends SystemUI implements
        KeyguardManager km = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
        return km.inKeyguardRestrictedInputMode();
    }

    public void addNavigationBarCallback(NavigationBarCallback callback) {
        mNavigationCallbacks.add(callback);
    }

    protected void propagateNavigationIconHints(int hints) {
        for (NavigationBarCallback callback : mNavigationCallbacks) {
            callback.setNavigationIconHints(hints);
        }
    }

    protected void propagateMenuVisibility(boolean showMenu) {
        for (NavigationBarCallback callback : mNavigationCallbacks) {
            callback.setMenuVisibility(showMenu);
        }
    }

    protected void propagateDisabledFlags(int disabledFlags) {
        for (NavigationBarCallback callback : mNavigationCallbacks) {
            callback.setDisabledFlags(disabledFlags);
        }
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.DelegateViewHelper;
import com.android.systemui.statusbar.policy.DeadZone;

public class NavigationBarView extends LinearLayout {
public class NavigationBarView extends LinearLayout implements BaseStatusBar.NavigationBarCallback {
    final static boolean DEBUG = false;
    final static String TAG = "PhoneStatusBar/NavigationBarView";

@@ -260,6 +260,7 @@ public class NavigationBarView extends LinearLayout {
        }
    };

    @Override
    public void setNavigationIconHints(int hints) {
        setNavigationIconHints(hints, false);
    }
@@ -297,6 +298,7 @@ public class NavigationBarView extends LinearLayout {
        setDisabledFlags(mDisabledFlags, true);
    }

    @Override
    public void setDisabledFlags(int disabledFlags) {
        setDisabledFlags(disabledFlags, false);
    }
@@ -352,6 +354,7 @@ public class NavigationBarView extends LinearLayout {
        }
    }

    @Override
    public void setMenuVisibility(final boolean show) {
        setMenuVisibility(show, false);
    }
+6 −8
Original line number Diff line number Diff line
@@ -490,6 +490,7 @@ public class PhoneStatusBar extends BaseStatusBar {

                mNavigationBarView.setDisabledFlags(mDisabled);
                mNavigationBarView.setBar(this);
                addNavigationBarCallback(mNavigationBarView);
            }
        } catch (RemoteException ex) {
            // no window manager? good luck with that
@@ -1388,8 +1389,9 @@ public class PhoneStatusBar extends BaseStatusBar {
                        | StatusBarManager.DISABLE_RECENT
                        | StatusBarManager.DISABLE_BACK
                        | StatusBarManager.DISABLE_SEARCH)) != 0) {
            // the nav bar will take care of these
            if (mNavigationBarView != null) mNavigationBarView.setDisabledFlags(state);

            // all navigation bar listeners will take care of these
            propagateDisabledFlags(state);

            if ((state & StatusBarManager.DISABLE_RECENT) != 0) {
                // close recents if it's visible
@@ -2084,9 +2086,7 @@ public class PhoneStatusBar extends BaseStatusBar {

        mNavigationIconHints = hints;

        if (mNavigationBarView != null) {
            mNavigationBarView.setNavigationIconHints(hints);
        }
        propagateNavigationIconHints(hints);
    }

    @Override // CommandQueue
@@ -2218,9 +2218,7 @@ public class PhoneStatusBar extends BaseStatusBar {
        if (DEBUG) {
            Slog.d(TAG, (showMenu?"showing":"hiding") + " the MENU button");
        }
        if (mNavigationBarView != null) {
            mNavigationBarView.setMenuVisibility(showMenu);
        }
        propagateMenuVisibility(showMenu);

        // See above re: lights-out policy for legacy apps.
        if (showMenu) setLightsOn(true);
+11 −0
Original line number Diff line number Diff line
@@ -1002,6 +1002,14 @@ public class TabletStatusBar extends BaseStatusBar implements
                mHandler.sendEmptyMessage(MSG_CLOSE_RECENTS_PANEL);
            }
        }
        if ((diff & (StatusBarManager.DISABLE_HOME
                | StatusBarManager.DISABLE_RECENT
                | StatusBarManager.DISABLE_BACK
                | StatusBarManager.DISABLE_SEARCH)) != 0) {

            // all navigation bar listeners will take care of these
            propagateDisabledFlags(state);
        }
    }

    private void setNavigationVisibility(int visibility) {
@@ -1111,6 +1119,8 @@ public class TabletStatusBar extends BaseStatusBar implements
            (0 != (hints & StatusBarManager.NAVIGATION_HINT_BACK_ALT))
                ? R.drawable.ic_sysbar_back_ime
                : R.drawable.ic_sysbar_back);

        propagateNavigationIconHints(hints);
    }

    private void notifyUiVisibilityChanged() {
@@ -1160,6 +1170,7 @@ public class TabletStatusBar extends BaseStatusBar implements
            Slog.d(TAG, (showMenu?"showing":"hiding") + " the MENU button");
        }
        mMenuButton.setVisibility(showMenu ? View.VISIBLE : View.GONE);
        propagateMenuVisibility(showMenu);

        // See above re: lights-out policy for legacy apps.
        if (showMenu) setLightsOn(true);
+3 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ public class TvStatusBar extends BaseStatusBar {

    @Override
    public void disable(int state) {
        propagateDisabledFlags(state);
    }

    @Override
@@ -74,6 +75,7 @@ public class TvStatusBar extends BaseStatusBar {

    @Override
    public void topAppWindowChanged(boolean visible) {
        propagateMenuVisibility(visible);
    }

    @Override
@@ -90,6 +92,7 @@ public class TvStatusBar extends BaseStatusBar {

    @Override // CommandQueue
    public void setNavigationIconHints(int hints) {
        propagateNavigationIconHints(hints);
    }

    @Override