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

Commit a48cf192 authored by Mike Digman's avatar Mike Digman
Browse files

Move rotate navbar button to the right stack

Puts button below A11y button but above IME switcher and menu.
Removes distinct rotate option from SysUI tuner.

Test: custom Gingerbread app to test menu+IME, manual a11y testing
Change-Id: Ieef352ecb679c069d8535eb058c82ccf868af2ba
parent 85d8a993
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -40,6 +40,15 @@
        android:contentDescription="@string/accessibility_ime_switch_button"
        android:contentDescription="@string/accessibility_ime_switch_button"
        android:scaleType="centerInside"
        android:scaleType="centerInside"
        />
        />
    <com.android.systemui.statusbar.policy.KeyButtonView
        android:id="@+id/rotate_suggestion"
        android:layout_width="@dimen/navigation_extra_key_width"
        android:layout_height="match_parent"
        android:layout_marginEnd="2dp"
        android:visibility="invisible"
        android:scaleType="centerInside"
        android:contentDescription="@string/accessibility_rotate_button"
        />
    <com.android.systemui.statusbar.policy.KeyButtonView
    <com.android.systemui.statusbar.policy.KeyButtonView
        android:id="@+id/accessibility_button"
        android:id="@+id/accessibility_button"
        android:layout_width="@dimen/navigation_extra_key_width"
        android:layout_width="@dimen/navigation_extra_key_width"
+1 −3
Original line number Original line Diff line number Diff line
@@ -1743,15 +1743,13 @@
    <string-array name="nav_bar_buttons">
    <string-array name="nav_bar_buttons">
        <item>Clipboard</item>
        <item>Clipboard</item>
        <item>Keycode</item>
        <item>Keycode</item>
        <item>Keyboard switcher</item>
        <item>Rotate confirm, keyboard switcher</item>
        <item>Rotation suggestion</item>
        <item>None</item>
        <item>None</item>
    </string-array>
    </string-array>
    <string-array name="nav_bar_button_values" translatable="false">
    <string-array name="nav_bar_button_values" translatable="false">
        <item>clipboard</item>
        <item>clipboard</item>
        <item>key</item>
        <item>key</item>
        <item>menu_ime</item>
        <item>menu_ime</item>
        <item>rotate</item>
        <item>space</item>
        <item>space</item>
    </string-array>
    </string-array>


+19 −89
Original line number Original line Diff line number Diff line
@@ -111,8 +111,6 @@ public class NavigationBarFragment extends Fragment implements Callbacks {
    /** Allow some time inbetween the long press for back and recents. */
    /** Allow some time inbetween the long press for back and recents. */
    private static final int LOCK_TO_APP_GESTURE_TOLERENCE = 200;
    private static final int LOCK_TO_APP_GESTURE_TOLERENCE = 200;


    private static final int BUTTON_FADE_IN_OUT_DURATION_MS = 100;

    protected NavigationBarView mNavigationBarView = null;
    protected NavigationBarView mNavigationBarView = null;
    protected AssistManager mAssistManager;
    protected AssistManager mAssistManager;


@@ -149,7 +147,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks {
    private RotationLockController mRotationLockController;
    private RotationLockController mRotationLockController;
    private TaskStackListenerImpl mTaskStackListener;
    private TaskStackListenerImpl mTaskStackListener;


    private final Runnable mRemoveRotationProposal = () -> setRotateSuggestionButtonState(false);
    private final Runnable mRemoveRotationProposal = () -> safeSetRotationButtonState(false);
    private Animator mRotateShowAnimator;
    private Animator mRotateShowAnimator;
    private Animator mRotateHideAnimator;
    private Animator mRotateHideAnimator;


@@ -344,22 +342,32 @@ public class NavigationBarFragment extends Fragment implements Callbacks {
        // rotate button if shown.
        // rotate button if shown.


        if (!isValid) {
        if (!isValid) {
            setRotateSuggestionButtonState(false);
            safeSetRotationButtonState(false);
            return;
            return;
        }
        }


        if (rotation == mWindowManager.getDefaultDisplay().getRotation()) {
        if (rotation == mWindowManager.getDefaultDisplay().getRotation()) {
            // Use this as a signal to remove any current suggestions
            // Use this as a signal to remove any current suggestions
            getView().getHandler().removeCallbacks(mRemoveRotationProposal);
            getView().getHandler().removeCallbacks(mRemoveRotationProposal);
            setRotateSuggestionButtonState(false);
            safeSetRotationButtonState(false);
        } else {
        } else {
            mLastRotationSuggestion = rotation; // Remember rotation for click
            mLastRotationSuggestion = rotation; // Remember rotation for click
            setRotateSuggestionButtonState(true);
            safeSetRotationButtonState(true);
            rescheduleRotationTimeout(false);
            rescheduleRotationTimeout(false);
            mMetricsLogger.visible(MetricsEvent.ROTATION_SUGGESTION_SHOWN);
            mMetricsLogger.visible(MetricsEvent.ROTATION_SUGGESTION_SHOWN);
        }
        }
    }
    }


    private void safeSetRotationButtonState(boolean vis) {
        if (mNavigationBarView != null) mNavigationBarView.setRotateSuggestionButtonState(vis);
    }

    private void safeSetRotationButtonState(boolean vis, boolean force) {
        if (mNavigationBarView != null) {
            mNavigationBarView.setRotateSuggestionButtonState(vis, force);
        }
    }

    private void rescheduleRotationTimeout(final boolean reasonHover) {
    private void rescheduleRotationTimeout(final boolean reasonHover) {
        // May be called due to a new rotation proposal or a change in hover state
        // May be called due to a new rotation proposal or a change in hover state
        if (reasonHover) {
        if (reasonHover) {
@@ -385,84 +393,6 @@ public class NavigationBarFragment extends Fragment implements Callbacks {
        return 6000;
        return 6000;
    }
    }


    public void setRotateSuggestionButtonState(final boolean visible) {
        setRotateSuggestionButtonState(visible, false);
    }

    public void setRotateSuggestionButtonState(final boolean visible, final boolean skipAnim) {
        ButtonDispatcher rotBtn = mNavigationBarView.getRotateSuggestionButton();
        final boolean currentlyVisible = rotBtn.getVisibility() == View.VISIBLE;

        // Rerun a show animation to indicate change but don't rerun a hide animation
        if (!visible && !currentlyVisible) return;

        View currentView = rotBtn.getCurrentView();
        if (currentView == null) return;

        KeyButtonDrawable kbd = rotBtn.getImageDrawable();
        if (kbd == null) return;

        AnimatedVectorDrawable animIcon = null;
        if (kbd.getDrawable(0) instanceof AnimatedVectorDrawable) {
            animIcon = (AnimatedVectorDrawable) kbd.getDrawable(0);
        }

        if (visible) { // Appear and change
            rotBtn.setVisibility(View.VISIBLE);
            mNavigationBarView.notifySubtreeAccessibilityStateChangedIfNeeded();

            if (skipAnim) {
                currentView.setAlpha(1f);
                return;
            }

            // Start a new animation if running
            if (mRotateShowAnimator != null) mRotateShowAnimator.pause();
            if (mRotateHideAnimator != null) mRotateHideAnimator.pause();

            ObjectAnimator appearFade = ObjectAnimator.ofFloat(currentView, "alpha",
                    0f, 1f);
            appearFade.setDuration(BUTTON_FADE_IN_OUT_DURATION_MS);
            appearFade.setInterpolator(Interpolators.LINEAR);
            mRotateShowAnimator = appearFade;
            appearFade.start();

            // Run the rotate icon's animation if it has one
            if (animIcon != null) {
                animIcon.reset();
                animIcon.start();
            }

        } else { // Hide

            if (skipAnim) {
                rotBtn.setVisibility(View.INVISIBLE);
                mNavigationBarView.notifySubtreeAccessibilityStateChangedIfNeeded();
                return;
            }

            // Don't start any new hide animations if one is running
            if (mRotateHideAnimator != null && mRotateHideAnimator.isRunning()) return;
            // Pause any active show animations but don't reset the AVD to avoid jumps
            if (mRotateShowAnimator != null) mRotateShowAnimator.pause();

            ObjectAnimator fadeOut = ObjectAnimator.ofFloat(currentView, "alpha",
                    0f);
            fadeOut.setDuration(BUTTON_FADE_IN_OUT_DURATION_MS);
            fadeOut.setInterpolator(Interpolators.LINEAR);
            fadeOut.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    rotBtn.setVisibility(View.INVISIBLE);
                    mNavigationBarView.notifySubtreeAccessibilityStateChangedIfNeeded();
                }
            });

            mRotateHideAnimator = fadeOut;
            fadeOut.start();
        }
    }

    // Injected from StatusBar at creation.
    // Injected from StatusBar at creation.
    public void setCurrentSysuiVisibility(int systemUiVisibility) {
    public void setCurrentSysuiVisibility(int systemUiVisibility) {
        mSystemUiVisibility = systemUiVisibility;
        mSystemUiVisibility = systemUiVisibility;
@@ -841,7 +771,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks {
                    if (shouldOverrideUserLockPrefs(rotation)) {
                    if (shouldOverrideUserLockPrefs(rotation)) {
                        mRotationLockController.setRotationLockedAtAngle(true, rotation);
                        mRotationLockController.setRotationLockedAtAngle(true, rotation);
                    }
                    }
                    setRotateSuggestionButtonState(false, true);
                    safeSetRotationButtonState(false, true);
                }
                }


                if (mNavigationBarView != null
                if (mNavigationBarView != null
@@ -877,22 +807,22 @@ public class NavigationBarFragment extends Fragment implements Callbacks {


        @Override
        @Override
        public void onTaskStackChanged() {
        public void onTaskStackChanged() {
            setRotateSuggestionButtonState(false);
            safeSetRotationButtonState(false);
        }
        }


        @Override
        @Override
        public void onTaskRemoved(int taskId) {
        public void onTaskRemoved(int taskId) {
            setRotateSuggestionButtonState(false);
            safeSetRotationButtonState(false);
        }
        }


        @Override
        @Override
        public void onTaskMovedToFront(int taskId) {
        public void onTaskMovedToFront(int taskId) {
            setRotateSuggestionButtonState(false);
            safeSetRotationButtonState(false);
        }
        }


        @Override
        @Override
        public void onActivityRequestedOrientationChanged(int taskId, int requestedOrientation) {
        public void onActivityRequestedOrientationChanged(int taskId, int requestedOrientation) {
            setRotateSuggestionButtonState(false);
            safeSetRotationButtonState(false);
        }
        }
    }
    }


+4 −7
Original line number Original line Diff line number Diff line
@@ -57,13 +57,12 @@ public class NavigationBarInflaterView extends FrameLayout
    public static final String NAV_BAR_LEFT = "sysui_nav_bar_left";
    public static final String NAV_BAR_LEFT = "sysui_nav_bar_left";
    public static final String NAV_BAR_RIGHT = "sysui_nav_bar_right";
    public static final String NAV_BAR_RIGHT = "sysui_nav_bar_right";


    public static final String MENU_IME = "menu_ime";
    public static final String MENU_IME_ROTATE = "menu_ime";
    public static final String BACK = "back";
    public static final String BACK = "back";
    public static final String HOME = "home";
    public static final String HOME = "home";
    public static final String RECENT = "recent";
    public static final String RECENT = "recent";
    public static final String NAVSPACE = "space";
    public static final String NAVSPACE = "space";
    public static final String CLIPBOARD = "clipboard";
    public static final String CLIPBOARD = "clipboard";
    public static final String ROTATE = "rotate";
    public static final String KEY = "key";
    public static final String KEY = "key";
    public static final String LEFT = "left";
    public static final String LEFT = "left";
    public static final String RIGHT = "right";
    public static final String RIGHT = "right";
@@ -317,10 +316,10 @@ public class NavigationBarInflaterView extends FrameLayout
        View v = null;
        View v = null;
        String button = extractButton(buttonSpec);
        String button = extractButton(buttonSpec);
        if (LEFT.equals(button)) {
        if (LEFT.equals(button)) {
            String s = Dependency.get(TunerService.class).getValue(NAV_BAR_LEFT, ROTATE);
            String s = Dependency.get(TunerService.class).getValue(NAV_BAR_LEFT, NAVSPACE);
            button = extractButton(s);
            button = extractButton(s);
        } else if (RIGHT.equals(button)) {
        } else if (RIGHT.equals(button)) {
            String s = Dependency.get(TunerService.class).getValue(NAV_BAR_RIGHT, MENU_IME);
            String s = Dependency.get(TunerService.class).getValue(NAV_BAR_RIGHT, MENU_IME_ROTATE);
            button = extractButton(s);
            button = extractButton(s);
        }
        }
        // Let plugins go first so they can override a standard view if they want.
        // Let plugins go first so they can override a standard view if they want.
@@ -334,14 +333,12 @@ public class NavigationBarInflaterView extends FrameLayout
            v = inflater.inflate(R.layout.back, parent, false);
            v = inflater.inflate(R.layout.back, parent, false);
        } else if (RECENT.equals(button)) {
        } else if (RECENT.equals(button)) {
            v = inflater.inflate(R.layout.recent_apps, parent, false);
            v = inflater.inflate(R.layout.recent_apps, parent, false);
        } else if (MENU_IME.equals(button)) {
        } else if (MENU_IME_ROTATE.equals(button)) {
            v = inflater.inflate(R.layout.menu_ime, parent, false);
            v = inflater.inflate(R.layout.menu_ime, parent, false);
        } else if (NAVSPACE.equals(button)) {
        } else if (NAVSPACE.equals(button)) {
            v = inflater.inflate(R.layout.nav_key_space, parent, false);
            v = inflater.inflate(R.layout.nav_key_space, parent, false);
        } else if (CLIPBOARD.equals(button)) {
        } else if (CLIPBOARD.equals(button)) {
            v = inflater.inflate(R.layout.clipboard, parent, false);
            v = inflater.inflate(R.layout.clipboard, parent, false);
        } else if (ROTATE.equals(button)) {
            v = inflater.inflate(R.layout.rotate_suggestion, parent, false);
        } else if (button.startsWith(KEY)) {
        } else if (button.startsWith(KEY)) {
            String uri = extractImage(button);
            String uri = extractImage(button);
            int code = extractKeycode(button);
            int code = extractKeycode(button);
+104 −9
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.systemui.statusbar.phone;
package com.android.systemui.statusbar.phone;


import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.LayoutTransition;
import android.animation.LayoutTransition;
import android.animation.LayoutTransition.TransitionListener;
import android.animation.LayoutTransition.TransitionListener;
import android.animation.ObjectAnimator;
import android.animation.ObjectAnimator;
@@ -29,6 +31,7 @@ import android.content.res.Configuration;
import android.graphics.Canvas;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.os.Handler;
import android.os.Handler;
import android.os.Message;
import android.os.Message;
import android.os.RemoteException;
import android.os.RemoteException;
@@ -49,6 +52,7 @@ import android.widget.FrameLayout;
import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Dependency;
import com.android.systemui.DockedStackExistsListener;
import com.android.systemui.DockedStackExistsListener;
import com.android.systemui.Interpolators;
import com.android.systemui.OverviewProxyService;
import com.android.systemui.OverviewProxyService;
import com.android.systemui.OverviewProxyService.OverviewProxyListener;
import com.android.systemui.OverviewProxyService.OverviewProxyListener;
import com.android.systemui.R;
import com.android.systemui.R;
@@ -71,6 +75,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
    final static boolean DEBUG = false;
    final static boolean DEBUG = false;
    final static String TAG = "StatusBar/NavBarView";
    final static String TAG = "StatusBar/NavBarView";


    final static int BUTTON_FADE_IN_OUT_DURATION_MS = 100;

    // slippery nav bar when everything is disabled, e.g. during setup
    // slippery nav bar when everything is disabled, e.g. during setup
    final static boolean SLIPPERY_WHEN_DISABLED = true;
    final static boolean SLIPPERY_WHEN_DISABLED = true;


@@ -86,6 +92,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
    boolean mShowMenu;
    boolean mShowMenu;
    boolean mShowAccessibilityButton;
    boolean mShowAccessibilityButton;
    boolean mLongClickableAccessibilityButton;
    boolean mLongClickableAccessibilityButton;
    boolean mShowRotateButton;
    int mDisabledFlags = 0;
    int mDisabledFlags = 0;
    int mNavigationIconHints = 0;
    int mNavigationIconHints = 0;


@@ -129,6 +136,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
    private SwipeUpOnboarding mSwipeUpOnboarding;
    private SwipeUpOnboarding mSwipeUpOnboarding;
    private NotificationPanelView mPanelView;
    private NotificationPanelView mPanelView;


    private Animator mRotateHideAnimator;

    private class NavTransitionListener implements TransitionListener {
    private class NavTransitionListener implements TransitionListener {
        private boolean mBackTransitioning;
        private boolean mBackTransitioning;
        private boolean mHomeAppearing;
        private boolean mHomeAppearing;
@@ -479,22 +488,25 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
            getHomeButton().setImageDrawable(mHomeDefaultIcon);
            getHomeButton().setImageDrawable(mHomeDefaultIcon);
        }
        }


        // The Accessibility button always overrides the appearance of the IME switcher
        // Update IME button visibility, a11y and rotate button always overrides the appearance
        final boolean showImeButton =
        final boolean showImeButton =
                !mShowAccessibilityButton && ((hints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN)
                !mShowAccessibilityButton &&
                        != 0);
                !mShowRotateButton &&
                ((hints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) != 0);
        getImeSwitchButton().setVisibility(showImeButton ? View.VISIBLE : View.INVISIBLE);
        getImeSwitchButton().setVisibility(showImeButton ? View.VISIBLE : View.INVISIBLE);
        getImeSwitchButton().setImageDrawable(mImeIcon);
        getImeSwitchButton().setImageDrawable(mImeIcon);


        // Update menu button in case the IME state has changed.
        // Update menu button, visibility logic in method
        setMenuVisibility(mShowMenu, true);
        setMenuVisibility(mShowMenu, true);
        getMenuButton().setImageDrawable(mMenuIcon);
        getMenuButton().setImageDrawable(mMenuIcon);


        // Update rotate button, visibility altered by a11y button logic
        getRotateSuggestionButton().setImageDrawable(mRotateSuggestionIcon);

        // Update a11y button, visibility logic in state method
        setAccessibilityButtonState(mShowAccessibilityButton, mLongClickableAccessibilityButton);
        setAccessibilityButtonState(mShowAccessibilityButton, mLongClickableAccessibilityButton);
        getAccessibilityButton().setImageDrawable(mAccessibilityIcon);
        getAccessibilityButton().setImageDrawable(mAccessibilityIcon);


        getRotateSuggestionButton().setImageDrawable(mRotateSuggestionIcon);

        setDisabledFlags(mDisabledFlags, true);
        setDisabledFlags(mDisabledFlags, true);


        mBarTransitions.reapplyDarkIntensity();
        mBarTransitions.reapplyDarkIntensity();
@@ -635,8 +647,10 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav


        mShowMenu = show;
        mShowMenu = show;


        // Only show Menu if IME switcher and Accessibility button not shown.
        // Only show Menu if IME switcher, rotate and Accessibility buttons are not shown.
        final boolean shouldShow = mShowMenu && !mShowAccessibilityButton &&
        final boolean shouldShow = mShowMenu &&
                !mShowAccessibilityButton &&
                !mShowRotateButton &&
                ((mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) == 0);
                ((mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) == 0);


        getMenuButton().setVisibility(shouldShow ? View.VISIBLE : View.INVISIBLE);
        getMenuButton().setVisibility(shouldShow ? View.VISIBLE : View.INVISIBLE);
@@ -646,15 +660,96 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
        mShowAccessibilityButton = visible;
        mShowAccessibilityButton = visible;
        mLongClickableAccessibilityButton = longClickable;
        mLongClickableAccessibilityButton = longClickable;
        if (visible) {
        if (visible) {
            // Accessibility button overrides Menu and IME switcher buttons.
            // Accessibility button overrides Menu, IME switcher and rotate buttons.
            setMenuVisibility(false, true);
            setMenuVisibility(false, true);
            getImeSwitchButton().setVisibility(View.INVISIBLE);
            getImeSwitchButton().setVisibility(View.INVISIBLE);
            setRotateSuggestionButtonState(false, true);
        }
        }


        getAccessibilityButton().setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
        getAccessibilityButton().setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
        getAccessibilityButton().setLongClickable(longClickable);
        getAccessibilityButton().setLongClickable(longClickable);
    }
    }


    public void setRotateSuggestionButtonState(final boolean visible) {
        setRotateSuggestionButtonState(visible, false);
    }

    public void setRotateSuggestionButtonState(final boolean visible, final boolean force) {
        ButtonDispatcher rotBtn = getRotateSuggestionButton();
        final boolean currentlyVisible = mShowRotateButton;

        // Rerun a show animation to indicate change but don't rerun a hide animation
        if (!visible && !currentlyVisible) return;

        View currentView = rotBtn.getCurrentView();
        if (currentView == null) return;

        KeyButtonDrawable kbd = rotBtn.getImageDrawable();
        if (kbd == null) return;

        AnimatedVectorDrawable animIcon = null;
        if (kbd.getDrawable(0) instanceof AnimatedVectorDrawable) {
            animIcon = (AnimatedVectorDrawable) kbd.getDrawable(0);
        }

        if (visible) { // Appear and change, cannot force
            setRotateButtonVisibility(true);

            // Stop any currently running hide animations
            if (mRotateHideAnimator != null && mRotateHideAnimator.isRunning()) {
                mRotateHideAnimator.pause();
            }

            // Reset the alpha if any has changed due to hide animation
            currentView.setAlpha(1f);

            // Run the rotate icon's animation if it has one
            if (animIcon != null) {
                animIcon.reset();
                animIcon.start();
            }

        } else { // Hide
            if (force) {
                // If a hide animator is running stop it and instantly make invisible
                if (mRotateHideAnimator != null && mRotateHideAnimator.isRunning()) {
                    mRotateHideAnimator.pause();
                }
                setRotateButtonVisibility(false);
                return;
            }

            // Don't start any new hide animations if one is running
            if (mRotateHideAnimator != null && mRotateHideAnimator.isRunning()) return;

            ObjectAnimator fadeOut = ObjectAnimator.ofFloat(currentView, "alpha",
                    0f);
            fadeOut.setDuration(BUTTON_FADE_IN_OUT_DURATION_MS);
            fadeOut.setInterpolator(Interpolators.LINEAR);
            fadeOut.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    setRotateButtonVisibility(false);
                }
            });

            mRotateHideAnimator = fadeOut;
            fadeOut.start();
        }
    }

    private void setRotateButtonVisibility(final boolean visible) {
        // Never show if a11y is visible
        final boolean adjVisible = visible && !mShowAccessibilityButton;
        final int vis = adjVisible ? View.VISIBLE : View.INVISIBLE;

        getRotateSuggestionButton().setVisibility(vis);
        mShowRotateButton = visible;

        // Hide/restore other button visibility, if necessary
        setNavigationIconHints(mNavigationIconHints, true);
    }

    @Override
    @Override
    public void onFinishInflate() {
    public void onFinishInflate() {
        mNavigationInflaterView = (NavigationBarInflaterView) findViewById(
        mNavigationInflaterView = (NavigationBarInflaterView) findViewById(
Loading