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

Commit af88d809 authored by p4r4n01d's avatar p4r4n01d Committed by Adnan Begovic
Browse files

Display Settings: Better font size control

Use a SeekBar instead of a list/spinner to determine the font scaling.
For consistency, an approximate size (small, normal, etc.)
 and the exact percentage are displayed.
Show a preview of the selected font size immediately

Ported from CM 10.2, squashed commits 46678 and 49167.
Credit to Veeti Paaananen for the latter commit.

Change-Id: I754d7fdcaf27c23dfccf9d56291956e70b23f63e
parent e0c17471
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 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.
-->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="12dp">

        <!-- Static height enough to accommodate the text views in their biggest possible size,
        without having the dialog resize itself at any point. -->
        <LinearLayout android:id="@+id/container"
                 android:orientation="vertical"
                 android:layout_width="match_parent"
                 android:layout_height="64dp"
                 android:gravity="center_horizontal|center_vertical">

                <TextView android:id="@+id/description"
                        android:text="@string/font_size_sample"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:textAppearanceLarge" />

                <TextView android:id="@+id/percentage"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:textAppearanceSmall" />

        </LinearLayout>

        <com.android.settings.IntervalSeekBar android:id="@+id/font_size"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="8dp"
                android:layout_below="@+id/container"
                settings:min="0.85"
                settings:max="1.30"
                settings:defaultValue="1.00"
                settings:digits="2" />

</RelativeLayout>
+7 −0
Original line number Diff line number Diff line
@@ -118,4 +118,11 @@
        <attr name="android:entries" />
        <attr name="android:entryValues" />
    </declare-styleable>

    <declare-styleable name="IntervalSeekBar">
        <attr name="min" format="float" />
        <attr name="max" format="float" />
        <attr name="defaultValue" format="float" />
        <attr name="digits" format="integer" />
    </declare-styleable>
</resources>
+4 −0
Original line number Diff line number Diff line
@@ -417,4 +417,8 @@
    <!-- Turn on display when power connected; turn off display when power disconnected -->
    <string name="wake_when_plugged_or_unplugged_title">Wake on plug</string>
    <string name="wake_when_plugged_or_unplugged_summary">Turn the screen on when connecting or disconnecting a power source</string>

    <!-- Font size sample text. This needs to be a very short string, as it is shown in
    multiple font sizes in a limited amount of space. -->
    <string name="font_size_sample">Sample</string>
</resources>
+1 −3
Original line number Diff line number Diff line
@@ -79,13 +79,11 @@
                android:summary="@string/tap_to_wake_summary"
                android:persistent="false" />

        <com.android.settings.WarnedListPreference
        <com.android.settings.FontDialogPreference
                android:key="font_size"
                android:title="@string/title_font_size"
                settings:keywords="@string/keywords_display_font_size"
                android:summary="@string/summary_font_size"
                android:entries="@array/entries_font_size"
                android:entryValues="@array/entryvalues_font_size"
                android:dialogTitle="@string/dialog_title_font_size" />

        <com.android.settings.DropDownPreference
+0 −138
Original line number Diff line number Diff line
/*
 * Copyright (C) 2006 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;

import android.app.Activity;
import android.app.ActivityManagerNative;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.RemoteException;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;


public class Display extends Activity implements View.OnClickListener {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        setContentView(R.layout.display);

        mFontSize = (Spinner) findViewById(R.id.fontSize);
        mFontSize.setOnItemSelectedListener(mFontSizeChanged);
        String[] states = new String[3];
        Resources r = getResources();
        states[0] = r.getString(R.string.small_font);
        states[1] = r.getString(R.string.medium_font);
        states[2] = r.getString(R.string.large_font);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, states);
        adapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item);
        mFontSize.setAdapter(adapter);

        mPreview = (TextView) findViewById(R.id.preview);
        mPreview.setText(r.getText(R.string.font_size_preview_text));

        Button save = (Button) findViewById(R.id.save);
        save.setText(r.getText(R.string.font_size_save));
        save.setOnClickListener(this);

        mTextSizeTyped = new TypedValue();
        TypedArray styledAttributes = 
            obtainStyledAttributes(android.R.styleable.TextView);
        styledAttributes.getValue(android.R.styleable.TextView_textSize,
                mTextSizeTyped);

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        mDisplayMetrics = new DisplayMetrics();
        mDisplayMetrics.density = metrics.density;
        mDisplayMetrics.heightPixels = metrics.heightPixels;
        mDisplayMetrics.scaledDensity = metrics.scaledDensity;
        mDisplayMetrics.widthPixels = metrics.widthPixels;
        mDisplayMetrics.xdpi = metrics.xdpi;
        mDisplayMetrics.ydpi = metrics.ydpi;
        
        styledAttributes.recycle();
    }

    @Override
    public void onResume() {
        super.onResume();
        try {
            mCurConfig.updateFrom(
                ActivityManagerNative.getDefault().getConfiguration());
        } catch (RemoteException e) {
        }
        if (mCurConfig.fontScale < 1) {
            mFontSize.setSelection(0);
        } else if (mCurConfig.fontScale > 1) {
            mFontSize.setSelection(2);
        } else {
            mFontSize.setSelection(1);
        }
        updateFontScale();
    }

    private void updateFontScale() {
        mDisplayMetrics.scaledDensity = mDisplayMetrics.density *
                mCurConfig.fontScale;

        float size = mTextSizeTyped.getDimension(mDisplayMetrics);
        mPreview.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
    }

    public void onClick(View v) {
        try {
            ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig);
        } catch (RemoteException e) {
        }
        finish();
    }

    private Spinner.OnItemSelectedListener mFontSizeChanged
                                    = new Spinner.OnItemSelectedListener() {
        public void onItemSelected(android.widget.AdapterView av, View v,
                                    int position, long id) {
            if (position == 0) {
                mCurConfig.fontScale = .75f;
            } else if (position == 2) {
                mCurConfig.fontScale = 1.25f;
            } else {
                mCurConfig.fontScale = 1.0f;
            }

            updateFontScale();
        }

        public void onNothingSelected(android.widget.AdapterView av) {
        }
    };

    private Spinner mFontSize;
    private TextView mPreview;
    private TypedValue mTextSizeTyped;
    private DisplayMetrics mDisplayMetrics;
    private Configuration mCurConfig = new Configuration();
}
Loading