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

Commit 82df8f45 authored by Kshitij's avatar Kshitij
Browse files

PhoneStatusBarView: Pad statusbar with Launcher3 dock width

- Use TaskStackManager to listen for changes to current foreground task
- Listen to a setting managed by BlissLauncher3
- The setting is only set to a non-zero value in VerticalBarLayout
- Setting is reset to 0 in portrait
parent c5bc5805
Loading
Loading
Loading
Loading
+83 −2
Original line number Diff line number Diff line
@@ -18,12 +18,25 @@ package com.android.systemui.statusbar.phone;


import android.annotation.Nullable;
import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.ActivityTaskManager;
import android.app.IActivityTaskManager;
import android.app.TaskStackListener;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.Rect;
import android.inputmethodservice.InputMethodService;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
@@ -83,6 +96,30 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
     */
    private int mCutoutSideNudge = 0;

    private static final String LAUNCHER_DOCK_WIDTH = "launcher_dock_width";
    private String mPreviousApp;
    private IActivityTaskManager mActivityTaskManager;
    private Handler mHandler = new Handler(Looper.getMainLooper());
    private final TaskStackListener mTaskListener = new TaskStackListener() {
        @Override
        public void onTaskStackChanged() {
            try {
                String foregroundApp = getForegroundApp();
                if (!foregroundApp.equals(mPreviousApp)) {
                    mPreviousApp = foregroundApp;
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            updateStatusBarHeight();
                        }
                    });
                }
            } catch (Exception e) {
                // Do nothing
            }
        }
    };

    public PhoneStatusBarView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mCommandQueue = Dependency.get(CommandQueue.class);
@@ -116,6 +153,24 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
                    () -> getDisplay().getRotation());
            mRotationButtonController.setRotationButton(floatingRotationButton, null);
        }
        // Make a listener
        ContentObserver observer = new ContentObserver(new Handler()) {
            @Override
            public void onChange(boolean selfChange, Uri uri) {
                if (uri.equals(Settings.Secure.getUriFor(LAUNCHER_DOCK_WIDTH))) {
                    updateStatusBarHeight();
                }
            }
        };
        context.getContentResolver().registerContentObserver(
                        Settings.Secure.getUriFor(LAUNCHER_DOCK_WIDTH), false, observer, UserHandle.USER_ALL);

        try {
            mActivityTaskManager = ActivityTaskManager.getService();
            mActivityTaskManager.registerTaskStackListener(mTaskListener);
        } catch (RemoteException e) {
            // Do nothing
        }
    }

    @Override
@@ -293,11 +348,23 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
        int statusBarPaddingEnd = getResources().getDimensionPixelSize(
                R.dimen.status_bar_padding_end);

        boolean isHomePackage = false;

        // Get the home launcher package name
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        ResolveInfo resolveInfo = getContext().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
        String homePackageName = "";
        if (resolveInfo != null) {
            homePackageName = resolveInfo.activityInfo.packageName;
            isHomePackage = getForegroundApp().equals(homePackageName);
        }
        int dockWidth = !isHomePackage ? 0 : Settings.Secure.getInt(getContext().getContentResolver(), LAUNCHER_DOCK_WIDTH, 0);
        View sbContents = findViewById(R.id.status_bar_contents);
        sbContents.setPaddingRelative(
                statusBarPaddingStart,
                statusBarPaddingStart + (mRotationOrientation == RotationUtils.ROTATION_SEASCAPE ? dockWidth : 0),
                statusBarPaddingTop,
                statusBarPaddingEnd,
                statusBarPaddingEnd + (mRotationOrientation == RotationUtils.ROTATION_LANDSCAPE ? dockWidth : 0),
                0);

        findViewById(R.id.notification_lights_out)
@@ -306,6 +373,20 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
        setLayoutParams(layoutParams);
    }

    private String getForegroundApp() {
        RootTaskInfo info = null;
        try {
            info = mActivityTaskManager.getFocusedRootTaskInfo();
        } catch (RemoteException e) {
            // Do nothing
        }
        if (info == null || info.topActivity == null) {
            return null;
        }

        return info.topActivity.getPackageName();
    }

    private void updateLayoutForCutout() {
        updateStatusBarHeight();
        updateCutoutLocation();