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

Commit a66f8cae authored by Lars Greiss's avatar Lars Greiss Committed by Jens Doll
Browse files

Framworks: disable observer and receiver if PIE is disabled

on high end devices that is maybe not needed. But there
is in general no need to enable the obeserver/receiver
when PIE is disabled (or expanded mode is off)
This change destroy and disables the PIE in most parts
when it is disabled. + a small doubel register
correction

greetings SlimRoms

PatchSet 2:
- remove PieLayout observer completly - thanks Jens

PatchSet 3:
- remove unnecessary call to setupSnapPoints()
- reuse already created snap points

PatchSet 4:
- small corrections on setupSnapPoints() and call
- remove not needed second call of PieController attachTo()
- disable TelephonyManager listener

PatchSet 5:
- fix up detach logic

PatchSet 7:
- cleanup

PatchSet 8:
- Effective Java rule #41
- fixed some pie controller leak

Change-Id: I8ef8797e7d4f8ee73d31a8296f5747415567bbda
parent 5e3a10ed
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -409,15 +409,10 @@ public abstract class BaseStatusBar extends SystemUI implements
            }
        }, filter);

        mPieController = new PieController(mContext);
        mPieController.attachTo(this);
        addNavigationBarCallback(mPieController);

        mSettingsObserver = new PieSettingsObserver(new Handler());

        // this calls attachPie() implicitly
        mSettingsObserver.onChange(true);

        mSettingsObserver.observe();
    }

@@ -1406,7 +1401,13 @@ public abstract class BaseStatusBar extends SystemUI implements
                lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_BEHIND;

                mWindowManager.addView(mPieContainer, lp);
                mPieController.attachTo(mPieContainer);
                // once we need a pie controller, we create one and keep it forever ...
                if (mPieController == null) {
                    mPieController = new PieController(mContext);
                    mPieController.attachStatusBar(this);
                    addNavigationBarCallback(mPieController);
                }
                mPieController.attachContainer(mPieContainer);
            }

            // add or update pie triggers
@@ -1424,6 +1425,11 @@ public abstract class BaseStatusBar extends SystemUI implements
                    mPieTrigger[i] = null;
                }
            }
            // detach from the pie container and unregister observers and receivers
            if (mPieController != null) {
                mPieController.detachContainer();
                mPieContainer = null;
            }
        }
    }

+26 −46
Original line number Diff line number Diff line
@@ -16,13 +16,10 @@
package com.android.systemui.statusbar.pie;

import android.animation.ValueAnimator;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Point;
@@ -190,8 +187,8 @@ public class PieLayout extends FrameLayout implements View.OnTouchListener {
    private boolean mLongPressed = false;

    private class SnapPoint {
        private final int mX;
        private final int mY;
        private int mX;
        private int mY;
        private float mActivity;

        public SnapPoint(int x, int y, Position gravity) {
@@ -201,6 +198,11 @@ public class PieLayout extends FrameLayout implements View.OnTouchListener {
            this.position = gravity;
        }

        public void reposition(int x, int y) {
            mX = x;
            mY = y;
        }

        public void reset() {
            mActivity = 0.0f;
        }
@@ -249,27 +251,6 @@ public class PieLayout extends FrameLayout implements View.OnTouchListener {
    }
    private OnSnapListener mOnSnapListener = null;

    private final class SettingsObserver extends ContentObserver {
        SettingsObserver(Handler handler) {
            super(handler);
        }

        void observe() {
            ContentResolver resolver = mContext.getContentResolver();
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.PIE_SIZE), false, this);
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.PIE_POSITIONS), false, this);
        }

        @Override
        public void onChange(boolean selfChange) {
            getDimensions();
            setupSnapPoints(getWidth(), getHeight(), true);
        }
    }
    private SettingsObserver mSettingsObserver;

    public PieLayout(Context context) {
        super(context);

@@ -278,6 +259,9 @@ public class PieLayout extends FrameLayout implements View.OnTouchListener {

        setDrawingCacheEnabled(false);
        setVisibility(View.GONE);
        setWillNotDraw(false);
        setFocusable(true);
        setOnTouchListener(this);

        getDimensions();
        getColors();
@@ -318,34 +302,30 @@ public class PieLayout extends FrameLayout implements View.OnTouchListener {
        mBackgroundTargetAlpha = mBackgroundPaint.getAlpha();
    }

    private void setupSnapPoints(int width, int height, boolean force) {
        if (force) {
    private void setupSnapPoints(int width, int height) {
        mTriggerSlots = Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.PIE_POSITIONS, Position.BOTTOM.FLAG);
        }

        mActiveSnap = null;
        // reuse already created snap points
        for (Position g : Position.values()) {
            if ((mTriggerSlots & g.FLAG) == 0) {
                int x = width / 2;
                int y = height / 2;
                if (g == Position.LEFT || g == Position.RIGHT) {
                    mSnapPoints[g.INDEX] = new SnapPoint(g.FACTOR * width, height / 2, g);
                    x = g.FACTOR * width;
                } else {
                    mSnapPoints[g.INDEX] = new SnapPoint(width / 2, g.FACTOR * height, g);
                    y = g.FACTOR * height;
                }
                if (mSnapPoints[g.INDEX] != null) {
                    mSnapPoints[g.INDEX].reposition(x, y);
                } else {
                mSnapPoints[g.INDEX] = null;
                    mSnapPoints[g.INDEX] = new SnapPoint(x, y, g);
                }
            } else {
                mSnapPoints[g.INDEX] = null;
            }
        }

    @Override
    protected void onAttachedToWindow() {
        setWillNotDraw(false);
        setFocusable(true);
        setOnTouchListener(this);

        mSettingsObserver = new SettingsObserver(new Handler());
        mSettingsObserver.observe();
    }

    @Override
@@ -517,9 +497,7 @@ public class PieLayout extends FrameLayout implements View.OnTouchListener {
        }

        int viewMask = PieDrawable.VISIBLE | mPosition.FLAG;
        if (changed) {
            setupSnapPoints(right - left, bottom - top, false);
        }
        setupSnapPoints(right - left, bottom - top);

        // we are only doing this, when the layout changed or
        // our position changed
@@ -592,6 +570,8 @@ public class PieLayout extends FrameLayout implements View.OnTouchListener {

        mActivateStartDebug = SystemClock.uptimeMillis();

        getDimensions();

        mPosition = position;
        mLayoutDoneForPosition = null;
        mActive = true;
+26 −12
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ public class PieController implements BaseStatusBar.NavigationBarCallback,
    private IWindowManager mWm;
    private int mBatteryLevel;
    private int mBatteryStatus;
    private boolean mHasTelephony;
    private TelephonyManager mTelephonyManager;
    private ServiceState mServiceState;

    // all pie slices that are managed by the controller
@@ -321,8 +321,10 @@ public class PieController implements BaseStatusBar.NavigationBarCallback,
        mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
        mWm = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));

        final PackageManager pm = mContext.getPackageManager();
        mHasTelephony = pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
        if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
            mTelephonyManager =
                    (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
        }

        final Resources res = mContext.getResources();
        Tracker.sDistance = res.getDimensionPixelSize(R.dimen.pie_trigger_distance);
@@ -331,11 +333,27 @@ public class PieController implements BaseStatusBar.NavigationBarCallback,
        mBackAltIcon = res.getDrawable(R.drawable.ic_sysbar_back_ime);
    }

    public void attachTo(BaseStatusBar statusBar) {
    public void detachContainer() {
        if (mPieContainer == null) {
            return;
        }

        if (mTelephonyManager != null) {
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
        }

        mContext.unregisterReceiver(mBroadcastReceiver);
        mContext.getContentResolver().unregisterContentObserver(mSettingsObserver);

        mPieContainer.clearSlices();
        mPieContainer = null;
    }

    public void attachStatusBar(BaseStatusBar statusBar) {
        mStatusBar = statusBar;
    }

    public void attachTo(PieLayout container) {
    public void attachContainer(PieLayout container) {
        mPieContainer = container;
        mPieContainer.clearSlices();

@@ -366,17 +384,13 @@ public class PieController implements BaseStatusBar.NavigationBarCallback,
        // start listening for changes
        mSettingsObserver.observe();

        mContext.registerReceiver(mBroadcastReceiver,
                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mContext.registerReceiver(mBroadcastReceiver, filter);

        if (mHasTelephony) {
            TelephonyManager telephonyManager =
                    (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
            telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
        if (mTelephonyManager != null) {
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
        }
    }

@@ -654,7 +668,7 @@ public class PieController implements BaseStatusBar.NavigationBarCallback,
    }

    public String getOperatorState() {
        if (!mHasTelephony) {
        if (mTelephonyManager == null) {
            return null;
        }
        if (mServiceState == null || mServiceState.getState() == ServiceState.STATE_OUT_OF_SERVICE) {