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

Commit be2ac27b authored by Fan Zhang's avatar Fan Zhang
Browse files

Draw preference divider based on preference group.

Bug: 32179750
Test: RunSettingsRoboTests
Change-Id: I3ea1cd662c5baec825fae615883b94b26e648409
parent 542fe0c0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -19,12 +19,12 @@
        android:title="@string/display_settings"
        settings:keywords="@string/keywords_display">

        <PreferenceScreen
        <Preference
                android:key="brightness"
                android:title="@string/brightness"
                settings:keywords="@string/keywords_display_brightness_level">
            <intent android:action="android.intent.action.SHOW_BRIGHTNESS_DIALOG" />
        </PreferenceScreen>
        </Preference>

        <com.android.settingslib.RestrictedPreference
            android:key="wallpaper"
+2 −2
Original line number Diff line number Diff line
@@ -17,9 +17,9 @@
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:title="@string/storage_settings">
    <com.android.settings.dashboard.DashboardTilePreference
    <Preference
        android:key="pref_manage_storage"
        android:title="@string/storage_menu_manage"
        android:fragment="com.android.settings.deletionhelper.AutomaticStorageManagerSettings">
    </com.android.settings.dashboard.DashboardTilePreference>
    </Preference>
</PreferenceScreen>
 No newline at end of file
+4 −4
Original line number Diff line number Diff line
@@ -19,21 +19,21 @@
    android:title="@string/header_category_system">

    <!-- System updates -->
    <com.android.settings.dashboard.DashboardTilePreference
    <Preference
        android:key="system_update_settings"
        android:title="@string/system_update_settings_list_item_title"
        android:summary="@string/system_update_settings_list_item_summary"
        android:order="-30">
        <intent android:action="android.settings.SYSTEM_UPDATE_SETTINGS"/>
    </com.android.settings.dashboard.DashboardTilePreference>
    </Preference>

    <com.android.settings.dashboard.DashboardTilePreference
    <Preference
        android:key="additional_system_update_settings"
        android:title="@string/additional_system_update_settings_list_item_title"
        android:order="-31">
        <intent android:action="android.intent.action.MAIN"
                android:targetPackage="@string/additional_system_update"
                android:targetClass="@string/additional_system_update_menu"/>
    </com.android.settings.dashboard.DashboardTilePreference>
    </Preference>

</PreferenceScreen>
 No newline at end of file
+89 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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.settings.dashboard;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewCompat;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroupAdapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.android.settings.overlay.FeatureFactory;

public class DashboardDividerDecoration extends RecyclerView.ItemDecoration {

    private final DashboardFeatureProvider mDashboardFeatureProvider;

    private Drawable mDivider;
    private int mDividerHeight;

    public DashboardDividerDecoration(Context context) {
        mDashboardFeatureProvider = FeatureFactory.getFactory(context)
                .getDashboardFeatureProvider(context);
    }

    public void setDivider(Drawable divider) {
        if (divider != null) {
            mDividerHeight = divider.getIntrinsicHeight();
        } else {
            mDividerHeight = 0;
        }
        mDivider = divider;
    }

    public void setDividerHeight(int dividerHeight) {
        mDividerHeight = dividerHeight;
    }

    @Override
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
        if (mDivider == null) {
            return;
        }
        final int childCount = parent.getChildCount();
        final int width = parent.getWidth();
        for (int childViewIndex = 0; childViewIndex < childCount - 1; childViewIndex++) {
            final View view = parent.getChildAt(childViewIndex);
            if (shouldDrawDividerBelow(view, parent)) {
                int top = (int) ViewCompat.getY(view) + view.getHeight();
                mDivider.setBounds(0, top, width, top + mDividerHeight);
                mDivider.draw(c);
            }
        }
    }

    private boolean shouldDrawDividerBelow(View view, RecyclerView parent) {
        final RecyclerView.Adapter adapter = parent.getAdapter();
        if (adapter == null || !(adapter instanceof PreferenceGroupAdapter)) {
            return false;
        }
        final PreferenceGroupAdapter prefAdapter = (PreferenceGroupAdapter) adapter;
        final int adapterPosition = parent.getChildAdapterPosition(view);
        final Preference pref = prefAdapter.getItem(adapterPosition);
        final Preference nextPref = prefAdapter.getItem(adapterPosition + 1);
        if (nextPref == null) {
            return false;
        }

        return mDashboardFeatureProvider.getPriorityGroup(pref)
                != mDashboardFeatureProvider.getPriorityGroup(nextPref);
    }

}
+3 −1
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.settings.dashboard;

import android.support.v7.preference.Preference;

import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;

@@ -45,7 +47,7 @@ public interface DashboardFeatureProvider {
     * priority 100 - 199 belongs to priority level 100, tiles with priority 200 - 299 is in
     * group 200, and so on.
     */
    int getPriorityGroup(Tile tile);
    int getPriorityGroup(Preference preference);

    /**
     * Returns an unique string key for the tile.
Loading