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

Commit 8d23ce91 authored by Roman Birg's avatar Roman Birg
Browse files

SystemUI: add first row large setting & logic for tiles



Change-Id: I8b7516154f878b3832b72d27cd1d7365a9382595
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent 6f6f1b60
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -48,14 +48,12 @@
            android:textColor="#80cbc4"
            android:text="@string/quick_settings_title_tiles"/>

    <!-- TODO implement!
        first row large
    <!-- first row large -->
    <com.android.systemui.qs.QSBooleanSettingRow
            style="@style/SettingRow"
            android:key="someKey1"
            android:title="@string/quick_settings_title_enlarge_first_row"
            systemui:table="system"
    />-->
            android:key="sysui_qs_main_tiles"
            systemui:table="cm_secure" />

    <LinearLayout
            android:id="@+id/reset_tiles"
+63 −5
Original line number Diff line number Diff line
@@ -18,13 +18,17 @@ package com.android.systemui.qs;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.UserHandle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
@@ -39,6 +43,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.cm.UserContentObserver;
import com.android.systemui.qs.tiles.EditTile;
import com.android.systemui.qs.tiles.IntentTile;
import com.android.systemui.settings.BrightnessController;
@@ -48,6 +53,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.tuner.QsTuner;
import com.viewpagerindicator.CirclePageIndicator;
import cyanogenmod.providers.CMSettings;

import java.util.ArrayList;
import java.util.Arrays;
@@ -82,6 +88,9 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
    // whether the current view we are dragging in has shifted tiles
    private boolean mMovedByLocation = false;

    protected boolean mFirstRowLarge = true;
    private SettingsObserver mSettingsObserver;

    List<TileRecord> mCurrentlyAnimating
            = Collections.synchronizedList(new ArrayList<TileRecord>());
    private Collection<QSTile<?>> mTempTiles = null;
@@ -289,6 +298,8 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
        mViewPager.setOverScrollMode(OVER_SCROLL_NEVER);

        setClipChildren(false);

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

    @Override
@@ -323,6 +334,12 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
        if (mListening) {
            refreshAllTiles();
        }
        if (mListening) {
            mSettingsObserver.observe();
        } else {
            mSettingsObserver.unobserve();
        }

        if (isLaidOut() && listening && showBrightnessSlider()) {
            mBrightnessController.registerCallbacks();
        } else {
@@ -712,14 +729,14 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
    }

    public int getLeft(int page, int row, int col) {
        final boolean firstRow = page == 0 && row == 0;
        int cols = firstRow ? 2 : mColumns;
        return getLeft(row, col, cols, firstRow);
        final boolean firstRowLarge = mFirstRowLarge && page == 0 && row == 0;
        int cols = firstRowLarge ? 2 : mColumns;
        return getLeft(row, col, cols, firstRowLarge);
    }

    public int getLeft(int page, int row, int col, int cols) {
        final boolean firstRow = page == 0 && row == 0;
        return getLeft(row, col, cols, firstRow);
        final boolean firstRowLarge = mFirstRowLarge && page == 0 && row == 0;
        return getLeft(row, col, cols, firstRowLarge);
    }

    public int getLeft(int row, int col, int cols, boolean firstRowLarge) {
@@ -1578,6 +1595,47 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
        }
    }

    class SettingsObserver extends UserContentObserver {
        SettingsObserver(Handler handler) {
            super(handler);
        }

        @Override
        protected void observe() {
            super.observe();

            ContentResolver resolver = mContext.getContentResolver();
            resolver.registerContentObserver(CMSettings.Secure.getUriFor(
                    CMSettings.Secure.QS_USE_MAIN_TILES), false, this, UserHandle.USER_ALL);
            update();
        }

        @Override
        protected void unobserve() {
            super.unobserve();

            ContentResolver resolver = mContext.getContentResolver();
            resolver.unregisterContentObserver(this);
        }

        @Override
        public void update() {
            ContentResolver resolver = mContext.getContentResolver();
            int currentUserId = ActivityManager.getCurrentUser();
            boolean firstRowLarge = CMSettings.Secure.getIntForUser(resolver,
                    CMSettings.Secure.QS_USE_MAIN_TILES, 1, currentUserId) != 1;
            if (firstRowLarge != mFirstRowLarge) {
                mFirstRowLarge = firstRowLarge;
                for (TileRecord record : mRecords) {
                    DragTileRecord dr = (DragTileRecord) record;
                    final boolean dual = getPage(dr.destinationPage).dualRecord(dr);
                    record.tileView.setDual(dual, record.tile.hasDualTargetsDetails());
                }
                requestLayout();
            }
        }
    }

    public static final class DragTileRecord extends TileRecord {
        public int page;
        public int destinationPage;
+2 −2
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public class QSPage extends ViewGroup {
                if (record.page != mPage) continue;
                if (record.tileView.getVisibility() == GONE) continue;

                if (mPage == 0 && r == 0 && c == 1) {
                if (mPage == 0 && r == 0 && c == 1 && mPanel.mFirstRowLarge) {
                    r = 1;
                    c = 0;
                } else if (r == -1 || c == (mPanel.getColumnCount() - 1)) {
@@ -138,7 +138,7 @@ public class QSPage extends ViewGroup {
    }

    public boolean dualRecord(QSPanel.TileRecord record) {
        return record.row == 0 && mPage == 0;
        return mPanel.mFirstRowLarge && record.row == 0 && mPage == 0;
    }

    private static int exactly(int size) {