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

Commit 45a73188 authored by Danesh M's avatar Danesh M
Browse files

SystemUI : Fix navbar dpad key visibility

Ensure on user switches we restore state.
CYNGNOS-1166

Change-Id: I8af217cbc64a273900f02bdf5cbcf7e2b63bc46a
parent 7348be74
Loading
Loading
Loading
Loading
+27 −22
Original line number Diff line number Diff line
@@ -34,15 +34,14 @@ import android.database.ContentObserver;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
@@ -50,18 +49,15 @@ import android.view.ViewGroup;
import android.view.ViewRootImpl;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.android.systemui.R;
import com.android.systemui.cm.UserContentObserver;
import com.android.systemui.statusbar.policy.DeadZone;
import com.android.systemui.statusbar.policy.KeyButtonView;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;

import cyanogenmod.providers.CMSettings;

@@ -227,7 +223,8 @@ public class NavigationBarView extends LinearLayout {
        mBarTransitions = new NavigationBarTransitions(this);

        mNavBarReceiver = new NavBarReceiver();
        getContext().registerReceiver(mNavBarReceiver, new IntentFilter(NAVBAR_EDIT_ACTION));
        getContext().registerReceiverAsUser(mNavBarReceiver, UserHandle.ALL,
                new IntentFilter(NAVBAR_EDIT_ACTION), null, null);
        mSettingsObserver = new SettingsObserver(new Handler());
    }

@@ -425,6 +422,19 @@ public class NavigationBarView extends LinearLayout {
                    setSideButtonVisibility(false, -1);
                }
            }
        } else {
            setVisibleOrGone(getCurrentView().findViewById(R.id.dpad_left), false);
            setVisibleOrGone(getCurrentView().findViewById(R.id.dpad_right), false);
            View one = getCurrentView().findViewById(mVertical ? R.id.six : R.id.one);
            View six = getCurrentView().findViewById(mVertical ? R.id.one : R.id.six);
            if (getSideButtonVisibility(true) != -1) {
                one.setVisibility(getSideButtonVisibility(true));
                setSideButtonVisibility(true, - 1);
            }
            if (getSideButtonVisibility(false) != -1) {
                six.setVisibility(getSideButtonVisibility(false));
                setSideButtonVisibility(false, -1);
            }
        }
    }

@@ -879,19 +889,17 @@ public class NavigationBarView extends LinearLayout {
        mEditBar.updateKeys();
        removeButtonListeners();
        updateButtonListeners();
        setDisabledFlags(mDisabledFlags, true /* force */);
        updateShowDpadKeys();
        setMenuVisibility(mShowMenu, true);
    }

    private class SettingsObserver extends UserContentObserver {
    private class SettingsObserver extends ContentObserver {

        SettingsObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void observe() {
            super.observe();
            ContentResolver resolver = getContext().getContentResolver();
            resolver.registerContentObserver(
                    CMSettings.System.getUriFor(CMSettings.System.NAVIGATION_BAR_MENU_ARROW_KEYS),
@@ -901,23 +909,20 @@ public class NavigationBarView extends LinearLayout {
            onChange(false);
        }

        @Override
        public void unobserve() {
            super.unobserve();
            getContext().getContentResolver().unregisterContentObserver(this);
        }

        @Override
        protected void update() {
            mShowDpadArrowKeys = CMSettings.System.getIntForUser(getContext().getContentResolver(),
                    CMSettings.System.NAVIGATION_BAR_MENU_ARROW_KEYS, 0, UserHandle.USER_CURRENT) != 0;
            // reset saved side button visibilities
            for (int i = 0; i < mSideButtonVisibilities.length; i++) {
                for (int j = 0; j < mSideButtonVisibilities[i].length; j++) {
                    mSideButtonVisibilities[i][j] = -1;
        public void onChange(boolean selfChange, Uri uri) {
            super.onChange(selfChange, uri);
            updateShowDpadKeys();
        }
    }

    private void updateShowDpadKeys() {
        mShowDpadArrowKeys = CMSettings.System.getIntForUser(getContext().getContentResolver(),
                CMSettings.System.NAVIGATION_BAR_MENU_ARROW_KEYS, 0, UserHandle.USER_CURRENT) != 0;
        setNavigationIconHints(mNavigationIconHints, true);
    }
}
}