diff options
author | Utkarsh Gupta <utkarsh.eminem@gmail.com> | 2014-05-15 17:45:17 +0530 |
---|---|---|
committer | Utkarsh Gupta <utkarsh.eminem@gmail.com> | 2014-07-07 12:37:05 +0530 |
commit | 7e4a93901212bbe942a15f0db90073a9ee1cea3c (patch) | |
tree | 64894310a8ab9adf6f0d53c9e1d36780af85387a /AdvancedDisplay | |
parent | 48f28f8dc69fe3b586d726f5d77965257d1a8324 (diff) | |
download | device_samsung_smdk4412-common-7e4a93901212bbe942a15f0db90073a9ee1cea3c.tar.gz device_samsung_smdk4412-common-7e4a93901212bbe942a15f0db90073a9ee1cea3c.tar.bz2 device_samsung_smdk4412-common-7e4a93901212bbe942a15f0db90073a9ee1cea3c.zip |
Cleanup
Change-Id: I5072f23827b7ec6471d0ba0cb873506b81ceaf85
Diffstat (limited to 'AdvancedDisplay')
3 files changed, 314 insertions, 0 deletions
diff --git a/AdvancedDisplay/res/layout/seek_bar_preference.xml b/AdvancedDisplay/res/layout/seek_bar_preference.xml new file mode 100644 index 0000000..38d9a1e --- /dev/null +++ b/AdvancedDisplay/res/layout/seek_bar_preference.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@android:id/widget_frame" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:paddingLeft="8dp" + android:paddingTop="5dp" + android:paddingRight="10dp" + android:paddingBottom="5dp" + > + + <TextView android:id="@android:id/title" + android:layout_alignParentLeft="true" + android:layout_alignParentTop="true" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceMedium" /> + + <TextView android:id="@android:id/summary" + android:layout_alignParentLeft="true" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_below="@android:id/title" + android:textAppearance="?android:attr/textAppearanceSmall" + android:textColor="?android:attr/textColorSecondary" /> + + <RelativeLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_below="@android:id/summary" > + + <TextView android:id="@+id/seekBarPrefUnitsRight" + android:layout_centerInParent="true" + android:layout_alignParentRight="true" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceSmall" /> + + <TextView android:id="@+id/seekBarPrefValue" + android:layout_centerInParent="true" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_toLeftOf="@id/seekBarPrefUnitsRight" + android:gravity="right" + android:textAppearance="?android:attr/textAppearanceSmall" /> + + <TextView android:id="@+id/seekBarPrefUnitsLeft" + android:layout_centerInParent="true" + android:layout_toLeftOf="@id/seekBarPrefValue" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceSmall" /> + + <LinearLayout android:id="@+id/seekBarPrefBarContainer" + android:layout_centerInParent="true" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_toLeftOf="@id/seekBarPrefUnitsLeft" /> + </RelativeLayout> +</RelativeLayout> diff --git a/AdvancedDisplay/res/values/custom_attrs.xml b/AdvancedDisplay/res/values/custom_attrs.xml new file mode 100644 index 0000000..b856986 --- /dev/null +++ b/AdvancedDisplay/res/values/custom_attrs.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, The ChameleonOS 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. +*/ +--> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <declare-styleable name="SeekBarPreference"> + <attr name="min" format="integer" /> + <attr name="unitsLeft" format="string" /> + <attr name="unitsRight" format="string" /> + </declare-styleable> + +</resources>
\ No newline at end of file diff --git a/AdvancedDisplay/src/com/cyanogenmod/settings/device/SeekBarPreference.java b/AdvancedDisplay/src/com/cyanogenmod/settings/device/SeekBarPreference.java new file mode 100644 index 0000000..9f614c8 --- /dev/null +++ b/AdvancedDisplay/src/com/cyanogenmod/settings/device/SeekBarPreference.java @@ -0,0 +1,226 @@ +/* + * Copyright (C) 2013 The ChameleonOS 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.cyanogenmod.settings.device; + +import android.content.Context; +import android.content.res.TypedArray; +import android.preference.Preference; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.SeekBar.OnSeekBarChangeListener; +import android.widget.TextView; + +import com.cyanogenmod.settings.device.R; + +public class SeekBarPreference extends Preference implements OnSeekBarChangeListener { + + private final String TAG = getClass().getName(); + + private static final String ANDROIDNS = "http://schemas.android.com/apk/res/android"; + private static final String ADVANCEDDISPLAY = "http://schemas.android.com/apk/res/com.cyanogenmod.settings.device"; + private static final int DEFAULT_VALUE = 50; + + private int mMaxValue = 100; + private int mMinValue = 0; + private int mInterval = 1; + private int mCurrentValue; + private String mUnitsLeft = ""; + private String mUnitsRight = ""; + private SeekBar mSeekBar; + private TextView mTitle; + + private TextView mStatusText; + + public SeekBarPreference(Context context, AttributeSet attrs) { + super(context, attrs); + initPreference(context, attrs); + } + + public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initPreference(context, attrs); + } + + private void initPreference(Context context, AttributeSet attrs) { + setValuesFromXml(attrs); + mSeekBar = new SeekBar(context, attrs); + mSeekBar.setMax(mMaxValue - mMinValue); + mSeekBar.setOnSeekBarChangeListener(this); + } + + private void setValuesFromXml(AttributeSet attrs) { + mMaxValue = attrs.getAttributeIntValue(ANDROIDNS, "max", 100); + mMinValue = attrs.getAttributeIntValue(ADVANCEDDISPLAY, "min", 0); + mUnitsLeft = getAttributeStringValue(attrs, ADVANCEDDISPLAY, "unitsLeft", ""); + String units = getAttributeStringValue(attrs, ADVANCEDDISPLAY, "units", ""); + mUnitsRight = getAttributeStringValue(attrs, ADVANCEDDISPLAY, "unitsRight", units); + try { + String newInterval = attrs.getAttributeValue(ADVANCEDDISPLAY, "interval"); + if(newInterval != null) + mInterval = Integer.parseInt(newInterval); + } + catch(Exception e) { + Log.e(TAG, "Invalid interval value", e); + } + } + + private String getAttributeStringValue(AttributeSet attrs, String namespace, String name, String defaultValue) { + String value = attrs.getAttributeValue(namespace, name); + if(value == null) + value = defaultValue; + + return value; + } + + @Override + public void onDependencyChanged(Preference dependency, boolean disableDependent) { + super.onDependencyChanged(dependency, disableDependent); + this.setShouldDisableView(true); + if (mTitle != null) + mTitle.setEnabled(!disableDependent); + if (mSeekBar != null) + mSeekBar.setEnabled(!disableDependent); + } + + @Override + protected View onCreateView(ViewGroup parent){ + + RelativeLayout layout = null; + try { + LayoutInflater mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + layout = (RelativeLayout)mInflater.inflate(R.layout.seek_bar_preference, parent, false); + mTitle = (TextView) layout.findViewById(android.R.id.title); + } + catch(Exception e) + { + Log.e(TAG, "Error creating seek bar preference", e); + } + return layout; + } + + @Override + public void onBindView(View view) { + super.onBindView(view); + try + { + // move our seekbar to the new view we've been given + ViewParent oldContainer = mSeekBar.getParent(); + ViewGroup newContainer = (ViewGroup) view.findViewById(R.id.seekBarPrefBarContainer); + + if (oldContainer != newContainer) { + // remove the seekbar from the old view + if (oldContainer != null) { + ((ViewGroup) oldContainer).removeView(mSeekBar); + } + // remove the existing seekbar (there may not be one) and add ours + newContainer.removeAllViews(); + newContainer.addView(mSeekBar, ViewGroup.LayoutParams.FILL_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + } + catch(Exception ex) { + Log.e(TAG, "Error binding view: " + ex.toString()); + } + updateView(view); + } + + /** + * Update a SeekBarPreference view with our current state + * @param view + */ + protected void updateView(View view) { + + try { + RelativeLayout layout = (RelativeLayout)view; + mStatusText = (TextView)layout.findViewById(R.id.seekBarPrefValue); + mStatusText.setText(String.valueOf(mCurrentValue)); + mStatusText.setMinimumWidth(30); + mSeekBar.setProgress(mCurrentValue - mMinValue); + + TextView unitsRight = (TextView)layout.findViewById(R.id.seekBarPrefUnitsRight); + unitsRight.setText(mUnitsRight); + TextView unitsLeft = (TextView)layout.findViewById(R.id.seekBarPrefUnitsLeft); + unitsLeft.setText(mUnitsLeft); + } + catch(Exception e) { + Log.e(TAG, "Error updating seek bar preference", e); + } + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + int newValue = progress + mMinValue; + if(newValue > mMaxValue) + newValue = mMaxValue; + else if(newValue < mMinValue) + newValue = mMinValue; + else if(mInterval != 1 && newValue % mInterval != 0) + newValue = Math.round(((float)newValue)/mInterval)*mInterval; + + // change rejected, revert to the previous value + if(!callChangeListener(newValue)){ + seekBar.setProgress(mCurrentValue - mMinValue); + return; + } + // change accepted, store it + mCurrentValue = newValue; + mStatusText.setText(String.valueOf(newValue)); + persistInt(newValue); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + notifyChanged(); + } + + @Override + protected Object onGetDefaultValue(TypedArray ta, int index){ + int defaultValue = ta.getInt(index, DEFAULT_VALUE); + return defaultValue; + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + if(restoreValue) { + mCurrentValue = getPersistedInt(mCurrentValue); + } + else { + int temp = 0; + try { + temp = (Integer)defaultValue; + } + catch(Exception ex) { + Log.e(TAG, "Invalid default value: " + defaultValue.toString()); + } + persistInt(temp); + mCurrentValue = temp; + } + } + + public void setValue(int value) { + mCurrentValue = value; + } +} |