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

Commit c4194855 authored by Aayush Gupta's avatar Aayush Gupta
Browse files

SystemUI: Add support to mirror system icons [3/3]

parent 54af6905
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?><!--
  ~ Copyright (C) 2014 The Android Open Source Project
  ~ Copyright (C) 2021 E FOUNDATION
  ~ Copyright (C) 2021 ECORP SAS
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
@@ -29,6 +31,15 @@
        android:gravity="center_vertical"
        android:orientation="horizontal"/>

    <com.android.systemui.statusbar.phone.StatusIconContainer android:id="@+id/statusIconsPlaceholder"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:paddingEnd="@dimen/signal_cluster_battery_padding"
        android:gravity="center_vertical"
        android:visibility="gone"
        android:orientation="horizontal"/>

    <com.android.systemui.BatteryMeterView android:id="@+id/battery"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
+69 −1
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 * Copyright (C) 2021 E FOUNDATION
 * Copyright (C) 2021 ECORP
 *
 * 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
@@ -18,9 +20,15 @@ import static android.app.StatusBarManager.DISABLE_CLOCK;
import static android.app.StatusBarManager.DISABLE_NOTIFICATION_ICONS;
import static android.app.StatusBarManager.DISABLE_SYSTEM_INFO;

import static lineageos.providers.LineageSettings.System.HIDE_NOTIFICATIONICON_LEFT_SYSTEM_ICON;

import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.Fragment;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.util.SparseArray;
import android.view.LayoutInflater;
@@ -42,6 +50,8 @@ import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
import com.android.systemui.tuner.TunerService;

import lineageos.providers.LineageSettings;

/**
 * Contains the collapsed status bar and handles hiding/showing based on disable flags
 * and keyguard state. Also manages lifecycle to make sure the views it contains are being
@@ -70,6 +80,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    private CommandQueue mCommandQueue;
    private ClockController mClockController;
    private boolean mIsClockBlacklisted;
    private SettingObserver mSettingObserver;
    private int mUser;
    private ViewGroup notificationIconArea;

    private SignalCallback mSignalCallback = new SignalCallback() {
        @Override
@@ -87,6 +100,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        mStatusBarComponent = Dependency.get(StatusBar.class);
        mCommandQueue = Dependency.get(CommandQueue.class);
        Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
        mSettingObserver = new SettingObserver(new Handler(getContext().getMainLooper()));
    }

    @Override
@@ -129,6 +143,12 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        super.onResume();
        mCommandQueue.addCallback(this);
        mStatusBarStateController.addCallback(this);

        // Register content observer for hiding notification icons
        mUser = ActivityManager.getCurrentUser();
        getContext().getContentResolver().registerContentObserver(
                LineageSettings.System.getUriFor(HIDE_NOTIFICATIONICON_LEFT_SYSTEM_ICON),
                false, mSettingObserver, mUser);
    }

    @Override
@@ -145,6 +165,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        if (mNetworkController.hasEmergencyCryptKeeperText()) {
            mNetworkController.removeCallback(mSignalCallback);
        }

        // Unregister content observer for hiding notification icons
        getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
    }

    @Override
@@ -159,7 +182,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue

    public void initNotificationIconArea(NotificationIconAreaController
            notificationIconAreaController) {
        ViewGroup notificationIconArea = mStatusBar.findViewById(R.id.notification_icon_area);
        notificationIconArea = mStatusBar.findViewById(R.id.notification_icon_area);
        mNotificationIconAreaInner =
                notificationIconAreaController.getNotificationInnerAreaView();
        if (mNotificationIconAreaInner.getParent() != null) {
@@ -180,6 +203,37 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        showNotificationIconArea(false);
    }

    public void showHideNotificationIcon(int ishide_notificationIcon){
        if (notificationIconArea == null) {
            notificationIconArea = mStatusBar.findViewById(R.id.notification_icon_area);
        }

        View statusIcons = mStatusBar.findViewById(R.id.statusIcons);
        View statusIconsPlaceholder = mStatusBar.findViewById(R.id.statusIconsPlaceholder);

        LinearLayout statusBarLeftSide = mStatusBar.findViewById(R.id.status_bar_left_side);
        LinearLayout systemIcons = mStatusBar.findViewById(R.id.system_icons);

        if(ishide_notificationIcon == 1) {
            // Hide the notification icons
            notificationIconArea.setVisibility(View.GONE);

            // Move system status icons to the left side and bring in the placeholder
            // as invisible to adjust the layout
            systemIcons.removeView(statusIcons);
            statusBarLeftSide.addView(statusIcons);
            statusIconsPlaceholder.setVisibility(View.INVISIBLE);
        } else {
            // Reset everything back
            notificationIconArea.setVisibility(View.VISIBLE);
            statusBarLeftSide.removeView(statusIcons);
            systemIcons.addView(statusIcons, 0);
            statusIcons.setScaleX(1);
            statusIconsPlaceholder.setVisibility(View.GONE);
        }

    }

    @Override
    public void disable(int displayId, int state1, int state2, boolean animate) {
        if (displayId != getContext().getDisplayId()) {
@@ -406,4 +460,18 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    public void onDozingChanged(boolean isDozing) {
        disable(getContext().getDisplayId(), mDisabled1, mDisabled1, false /* animate */);
    }

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

        @Override
        public void onChange(boolean selfChange, Uri uri) {
            super.onChange(selfChange, uri);
            int hide_notificationIcon_left_system_icon = LineageSettings.System.getIntForUser(
                    getContext().getContentResolver(), uri.getLastPathSegment(), 0, mUser);
            showHideNotificationIcon(hide_notificationIcon_left_system_icon);
        }
    }
}