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

Commit 6b19b5c1 authored by Kshitij's avatar Kshitij Committed by Nishith Khanna
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 fc6e4e5d
Loading
Loading
Loading
Loading
+81 −2
Original line number Diff line number Diff line
@@ -17,13 +17,26 @@
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.Insets;
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.view.ContextThemeWrapper;
@@ -62,6 +75,7 @@ import java.util.Objects;

public class PhoneStatusBarView extends FrameLayout implements Callbacks {
    private static final String TAG = "PhoneStatusBarView";
    private static final String BLISS_LAUNCHER_DOCK_WIDTH = "bliss_launcher_dock_width";
    private final CommandQueue mCommandQueue;
    private final StatusBarWindowController mStatusBarWindowController;

@@ -88,6 +102,29 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
     */
    private int mCutoutSideNudge = 0;

    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 != null && !mPreviousApp.equals(foregroundApp)) {
                    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);
@@ -121,6 +158,23 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
                    () -> getDisplay().getRotation());
            mRotationButtonController.setRotationButton(floatingRotationButton, null);
        }
        ContentObserver observer = new ContentObserver(new Handler()) {
            @Override
            public void onChange(boolean selfChange, Uri uri) {
                if (uri.equals(Settings.Secure.getUriFor(BLISS_LAUNCHER_DOCK_WIDTH))) {
                    updateStatusBarHeight();
                }
            }
        };
        context.getContentResolver().registerContentObserver(
                        Settings.Secure.getUriFor(BLISS_LAUNCHER_DOCK_WIDTH), false, observer, UserHandle.USER_ALL);

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

    @Override
@@ -332,10 +386,22 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
        int statusBarPaddingStart = getResources().getDimensionPixelSize(
                R.dimen.status_bar_padding_start);

        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);
        if (resolveInfo != null) {
            String homePackageName = resolveInfo.activityInfo.packageName;
            isHomePackage = homePackageName != null && homePackageName.equals(getForegroundApp());
        }
        int dockWidth = !isHomePackage ? 0 : Settings.Secure.getInt(getContext().getContentResolver(), BLISS_LAUNCHER_DOCK_WIDTH, 0);

        findViewById(R.id.status_bar_contents).setPaddingRelative(
                statusBarPaddingStart,
                statusBarPaddingStart + (mRotationOrientation == RotationUtils.ROTATION_SEASCAPE ? dockWidth : 0),
                getResources().getDimensionPixelSize(R.dimen.status_bar_padding_top),
                getResources().getDimensionPixelSize(R.dimen.status_bar_padding_end),
                getResources().getDimensionPixelSize(R.dimen.status_bar_padding_end) + (mRotationOrientation == RotationUtils.ROTATION_LANDSCAPE ? dockWidth : 0),
                0);

        findViewById(R.id.notification_lights_out)
@@ -349,6 +415,19 @@ public class PhoneStatusBarView extends FrameLayout implements Callbacks {
        );
    }

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

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