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

Commit 9c7844cb authored by Jason Monk's avatar Jason Monk
Browse files

Work on sysui dependencies

One of the many problems with PhoneStatusBar is that it holds
dependencies for many other parts of SysUI. Fix this by creating
a static method of grabbing dependencies that are global to sysui
this cleans up a lot of chains of interdependence.

Also add easy way to inject mocks of these dependencies for the
purpose of testing.

Test: runtest systemui
Change-Id: Ia0e947faea62d15b665facada47ac9916c99f895
parent 83d57758
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -22,13 +22,22 @@ import android.content.res.Resources;


public class InterestingConfigChanges {
public class InterestingConfigChanges {
    private final Configuration mLastConfiguration = new Configuration();
    private final Configuration mLastConfiguration = new Configuration();
    private final int mFlags;
    private int mLastDensity;
    private int mLastDensity;


    public InterestingConfigChanges() {
        this(0);
    }

    public InterestingConfigChanges(int extraFlags) {
        mFlags = extraFlags | ActivityInfo.CONFIG_LOCALE
                | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_SCREEN_LAYOUT;
    }

    public boolean applyNewConfig(Resources res) {
    public boolean applyNewConfig(Resources res) {
        int configChanges = mLastConfiguration.updateFrom(res.getConfiguration());
        int configChanges = mLastConfiguration.updateFrom(res.getConfiguration());
        boolean densityChanged = mLastDensity != res.getDisplayMetrics().densityDpi;
        boolean densityChanged = mLastDensity != res.getDisplayMetrics().densityDpi;
        if (densityChanged || (configChanges&(ActivityInfo.CONFIG_LOCALE
        if (densityChanged || (configChanges & (mFlags)) != 0) {
                |ActivityInfo.CONFIG_UI_MODE|ActivityInfo.CONFIG_SCREEN_LAYOUT)) != 0) {
            mLastDensity = res.getDisplayMetrics().densityDpi;
            mLastDensity = res.getDisplayMetrics().densityDpi;
            return true;
            return true;
        }
        }
+1 −17
Original line number Original line Diff line number Diff line
@@ -37,7 +37,7 @@ public interface QS extends FragmentBase {


    // This should be incremented any time this class or ActivityStarter or BaseStatusBarHeader
    // This should be incremented any time this class or ActivityStarter or BaseStatusBarHeader
    // change in incompatible ways.
    // change in incompatible ways.
    public static final int VERSION = 4;
    public static final int VERSION = 5;


    String TAG = "QS";
    String TAG = "QS";


@@ -105,24 +105,8 @@ public interface QS extends FragmentBase {
        public abstract void setExpansion(float headerExpansionFraction);
        public abstract void setExpansion(float headerExpansionFraction);
        public abstract void setListening(boolean listening);
        public abstract void setListening(boolean listening);
        public abstract void updateEverything();
        public abstract void updateEverything();
        public abstract void setActivityStarter(ActivityStarter activityStarter);
        public abstract void setCallback(Callback qsPanelCallback);
        public abstract void setCallback(Callback qsPanelCallback);
        public abstract View getExpandView();
        public abstract View getExpandView();
    }
    }


    /**
     * An interface to start activities. This is used to as a callback from the views to
     * {@link PhoneStatusBar} to allow custom handling for starting the activity, i.e. dismissing the
     * Keyguard.
     */
    public static interface ActivityStarter {

        void startPendingIntentDismissingKeyguard(PendingIntent intent);
        void startActivity(Intent intent, boolean dismissShade);
        void startActivity(Intent intent, boolean dismissShade, Callback callback);

        interface Callback {
            void onActivityStarted(int resultCode);
        }
    }
}
}
+38 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package com.android.systemui;

import android.app.PendingIntent;
import android.content.Intent;

/**
 * An interface to start activities. This is used as a callback from the views to
 * {@link PhoneStatusBar} to allow custom handling for starting the activity, i.e. dismissing the
 * Keyguard.
 */
public interface ActivityStarter {

    void startPendingIntentDismissingKeyguard(PendingIntent intent);
    void startActivity(Intent intent, boolean dismissShade);
    void startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade);
    void startActivity(Intent intent, boolean dismissShade, Callback callback);
    void postStartActivityDismissingKeyguard(Intent intent, int delay);
    void postStartActivityDismissingKeyguard(PendingIntent intent);
    void postQSRunnableDismissingKeyguard(Runnable runnable);

    interface Callback {
        void onActivityStarted(int resultCode);
    }
}
+73 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package com.android.systemui;

import android.app.PendingIntent;
import android.content.Intent;

/**
 * Single common instance of ActivityStarter that can be gotten and referenced from anywhere, but
 * delegates to an actual implementation such as PhoneStatusBar, assuming it exists.
 */
public class ActivityStarterDelegate implements ActivityStarter {

    private ActivityStarter mActualStarter;

    @Override
    public void startPendingIntentDismissingKeyguard(PendingIntent intent) {
        if (mActualStarter == null) return;
        mActualStarter.startPendingIntentDismissingKeyguard(intent);
    }

    @Override
    public void startActivity(Intent intent, boolean dismissShade) {
        if (mActualStarter == null) return;
        mActualStarter.startActivity(intent, dismissShade);
    }

    @Override
    public void startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade) {
        if (mActualStarter == null) return;
        mActualStarter.startActivity(intent, onlyProvisioned, dismissShade);
    }

    @Override
    public void startActivity(Intent intent, boolean dismissShade, Callback callback) {
        if (mActualStarter == null) return;
        mActualStarter.startActivity(intent, dismissShade, callback);
    }

    @Override
    public void postStartActivityDismissingKeyguard(Intent intent, int delay) {
        if (mActualStarter == null) return;
        mActualStarter.postStartActivityDismissingKeyguard(intent, delay);
    }

    @Override
    public void postStartActivityDismissingKeyguard(PendingIntent intent) {
        if (mActualStarter == null) return;
        mActualStarter.postStartActivityDismissingKeyguard(intent);
    }

    @Override
    public void postQSRunnableDismissingKeyguard(Runnable runnable) {
        if (mActualStarter == null) return;
        mActualStarter.postQSRunnableDismissingKeyguard(runnable);
    }

    public void setActivityStarterImpl(ActivityStarter starter) {
        mActualStarter = starter;
    }
}
+4 −7
Original line number Original line Diff line number Diff line
@@ -72,6 +72,10 @@ public class BatteryMeterView extends ImageView implements
    @Override
    @Override
    public void onAttachedToWindow() {
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        super.onAttachedToWindow();
        mBatteryController = Dependency.get(BatteryController.class);
        mDrawable.setBatteryController(mBatteryController);
        mBatteryController.addCallback(this);
        mDrawable.startListening();
        TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
        TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
    }
    }


@@ -95,13 +99,6 @@ public class BatteryMeterView extends ImageView implements


    }
    }


    public void setBatteryController(BatteryController mBatteryController) {
        this.mBatteryController = mBatteryController;
        mDrawable.setBatteryController(mBatteryController);
        mBatteryController.addCallback(this);
        mDrawable.startListening();
    }

    public void setDarkIntensity(float f) {
    public void setDarkIntensity(float f) {
        mDrawable.setDarkIntensity(f);
        mDrawable.setDarkIntensity(f);
    }
    }
Loading