11f2339bb845c3d94f94ba958024d718848271025Andrew Wilson/* 21f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * Copyright (C) 2014 The Android Open Source Project 31f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * 41f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 51f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * in compliance with the License. You may obtain a copy of the License at 61f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * 71f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * http://www.apache.org/licenses/LICENSE-2.0 81f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * 91f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * Unless required by applicable law or agreed to in writing, software distributed under the License 101f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 111f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * or implied. See the License for the specific language governing permissions and limitations under 121f2339bb845c3d94f94ba958024d718848271025Andrew Wilson * the License. 131f2339bb845c3d94f94ba958024d718848271025Andrew Wilson */ 1430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonpackage com.android.tv.quicksettings; 1530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 1620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.content.SharedPreferences; 1720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantlerimport android.preference.PreferenceManager; 1882d45e2e4b9bc2836136d2049d6c158efcb6d557Tony Mantlerimport android.support.annotation.NonNull; 1930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.app.Activity; 2030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.app.AlertDialog; 2130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.content.DialogInterface; 2230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.content.Intent; 2330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.os.Bundle; 2430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.support.v17.leanback.widget.OnChildSelectedListener; 2530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.support.v17.leanback.widget.VerticalGridView; 2630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.util.Log; 2730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.Gravity; 2830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.KeyEvent; 2930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.View; 3030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.ViewGroup; 3130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.view.WindowManager; 3230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.widget.SeekBar; 3330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport android.widget.TextView; 3430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 3530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport java.util.ArrayList; 3630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonimport java.util.Arrays; 3730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 3830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilsonpublic class SettingsDialog extends Activity { 3930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 4014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler private static final int PRESET_SETTING_INDEX = 0; 4114c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler private static final int INTEGER_SETTING_START_INDEX = 1; 4214c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler 4330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private static final String TAG = "SettingsDialog"; 4430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private static final boolean DEBUG = true; 4530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 4630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson static final String EXTRA_START_POS = "com.android.tv.quicksettings.START_POS"; 4730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private static final int SETTING_INT_VALUE_MIN = 0; 4830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private static final int SETTING_INT_VALUE_STEP = 10; 4930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 5030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private VerticalGridView mPanelList; 5130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private SeekBar mSeekBar; 5230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private TextView mSettingValue; 5330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private DialogAdapter mAdapter; 5482d45e2e4b9bc2836136d2049d6c158efcb6d557Tony Mantler private final SettingSelectedListener mSettingSelectedListener = new SettingSelectedListener(); 5530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private Setting mFocusedSetting; 5630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private ArrayList<Setting> mSettings; 5720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler private SharedPreferences mSharedPreferences; 5820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 5920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler private PresetSettingsListener mPresetSettingsListener; 6030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 6130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson @Override 6230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson public void onCreate(Bundle savedInstanceState) { 6330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson super.onCreate(savedInstanceState); 6430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 6520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 6620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler mPresetSettingsListener = new PresetSettingsListener(this); 6720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 6830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson WindowManager.LayoutParams lp = getWindow().getAttributes(); 6930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson lp.height = WindowManager.LayoutParams.MATCH_PARENT; 7030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson lp.gravity = Gravity.BOTTOM | Gravity.CENTER; 7130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson lp.y = getResources().getDimensionPixelSize(R.dimen.panel_y_offset); 7230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson getWindow().setAttributes(lp); 7330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 7430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson setContentView(R.layout.main_quicksettings); 7530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 7630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson Intent intent = getIntent(); 7730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson int startPos = intent.getIntExtra(EXTRA_START_POS, -1); 7830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson if (DEBUG) 7930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson Log.d(TAG, "startPos=" + startPos); 8030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 8130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mPanelList = (VerticalGridView) findViewById(R.id.main_panel_list); 8230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mPanelList.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE); 8330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mPanelList.setOnChildSelectedListener(mSettingSelectedListener); 8430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 8520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler mSettings = getSettings(); 8620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 8725d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler final int pivotX; 8825d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler if (getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { 8925d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler pivotX = getResources().getDimensionPixelSize(R.dimen.slider_horizontal_padding); 9025d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler } else { 9125d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler pivotX = getResources().getDimensionPixelSize( 9225d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler R.dimen.main_panel_text_width_minus_padding); 9325d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler } 9425d13aa7ec5002f8e0755892483f84c355f12069Tony Mantler final int pivotY = getResources().getDimensionPixelSize(R.dimen.main_panel_text_height_half); 9530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 9630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mAdapter = new DialogAdapter(mSettings, pivotX, pivotY, new SettingClickedListener() { 9730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson @Override 9830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson public void onSettingClicked(Setting s) { 9930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson if (s.getType() != Setting.TYPE_UNKNOWN) { 10030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson finish(); 10130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } else { 10230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson new AlertDialog.Builder(SettingsDialog.this).setPositiveButton( 10330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson android.R.string.ok, new DialogInterface.OnClickListener() { 10430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson @Override 10530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson public void onClick(DialogInterface dialog, int id) { 10630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson // User clicked OK button 10714c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler String[] presetSettingValues = getResources().getStringArray( 10814c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler R.array.setting_preset_values); 10914c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler mSettings.get(PRESET_SETTING_INDEX).setValue( 11014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler presetSettingValues[getResources().getInteger( 11130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson R.integer.standard_setting_index)]); 11230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 11330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson }).setNegativeButton(android.R.string.cancel, 11430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson new DialogInterface.OnClickListener() { 11530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson @Override 11630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson public void onClick(DialogInterface dialog, int id) { 11730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson // User cancelled the dialog - do nothing 11830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 11930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson }).setTitle(R.string.reset_dialog_message).create().show(); 12030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 12130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 12230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson }); 12330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 12430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mPanelList.setAdapter(mAdapter); 12520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler mPanelList.setSelectedPosition(startPos + 1); 12630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mPanelList.requestFocus(); 12730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 12830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSeekBar = (SeekBar) findViewById(R.id.main_slider); 12930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 13030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSettingValue = (TextView) findViewById(R.id.setting_value); 13130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 13230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 13320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler @Override 13420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler protected void onResume() { 13520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler super.onResume(); 13620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 13720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler mSharedPreferences.registerOnSharedPreferenceChangeListener(mPresetSettingsListener); 13820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler } 13920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 14020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler @Override 14120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler protected void onPause() { 14220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler super.onPause(); 14330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 14420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mPresetSettingsListener); 14520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler } 14620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 14720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler private ArrayList<Setting> getSettings() { 14820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler ArrayList<Setting> settings = new ArrayList<>(); 14920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 15020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler settings.add(new Setting(mSharedPreferences, "preset", 15120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler getString(R.string.setting_preset_name))); 15220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 15320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler String[] settingNames = getResources().getStringArray(R.array.setting_names); 15420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler String[] settingKeys = getResources().getStringArray(R.array.setting_keys); 15520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler int[] maxSettingValues = getResources().getIntArray(R.array.setting_max_values); 15620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler for (int i = 0; i < settingNames.length; i++) { 15720b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler settings.add( 15820b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler new Setting(mSharedPreferences, settingKeys[i], settingNames[i], 15920b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler maxSettingValues[i])); 16020b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler } 16120b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler settings.add(new Setting(getString(R.string.setting_reset_defaults_name))); 16220b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 16320b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler return settings; 16420b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler } 16520b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler 16620b1a50b536c8c68ceda1ce529d62e52e39f653dTony Mantler private class SettingSelectedListener implements OnChildSelectedListener { 16730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson @Override 16830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson public void onChildSelected(ViewGroup parent, View view, int position, long id) { 16930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mFocusedSetting = mSettings.get(position); 17030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson switch (mFocusedSetting.getType()) { 17130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case Setting.TYPE_STRING: 17230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSettingValue.setVisibility(View.VISIBLE); 17330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSettingValue.setText(mFocusedSetting.getStringValue()); 17430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSeekBar.setVisibility(View.GONE); 17530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson break; 17630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case Setting.TYPE_INT: 17730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSettingValue.setVisibility(View.VISIBLE); 17830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSettingValue.setText(Integer.toString(mFocusedSetting.getIntValue())); 17930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSeekBar.setMax(mFocusedSetting.getMaxValue()); 18030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSeekBar.setProgress(mFocusedSetting.getIntValue()); 18130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSeekBar.setVisibility(View.VISIBLE); 18230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson break; 18330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson default: 18430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSettingValue.setVisibility(View.GONE); 18530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSeekBar.setVisibility(View.GONE); 18630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson break; 18730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 18830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 18930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 19030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 19130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson @Override 19282d45e2e4b9bc2836136d2049d6c158efcb6d557Tony Mantler public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) { 19330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson if (mFocusedSetting == null) { 19430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return super.onKeyUp(keyCode, event); 19530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 19630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson switch (mFocusedSetting.getType()) { 19730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case Setting.TYPE_INT: 19830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return integerSettingHandleKeyCode(keyCode, event); 19930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case Setting.TYPE_STRING: 20030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return stringSettingHandleKeyCode(keyCode, event); 20130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson default: 20230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return super.onKeyUp(keyCode, event); 20330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 20430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 20530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 20630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private boolean integerSettingHandleKeyCode(int keyCode, KeyEvent event) { 20730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson switch (keyCode) { 20830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case KeyEvent.KEYCODE_DPAD_RIGHT: 20930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson setFocusedSettingToValue(Math.min( 21030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mFocusedSetting.getIntValue() + SETTING_INT_VALUE_STEP, 21130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mFocusedSetting.getMaxValue())); 21230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return true; 21330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case KeyEvent.KEYCODE_DPAD_LEFT: 21430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson setFocusedSettingToValue(Math.max( 21530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mFocusedSetting.getIntValue() - SETTING_INT_VALUE_STEP, 21630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson SETTING_INT_VALUE_MIN)); 21730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return true; 21830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson default: 21930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return super.onKeyUp(keyCode, event); 22030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 22130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 22230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 22330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private void setFocusedSettingToValue(int value) { 22430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mFocusedSetting.setValue(value); 22530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSeekBar.setProgress(mFocusedSetting.getIntValue()); 22630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mSettingValue.setText(Integer.toString(mFocusedSetting.getIntValue())); 22730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson String[] presetSettingChoices = getResources().getStringArray( 22814c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler R.array.setting_preset_values); 22914c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler mSettings.get(PRESET_SETTING_INDEX).setValue( 23030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson presetSettingChoices[getResources().getInteger(R.integer.custom_setting_index)]); 23130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 23230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 23330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson private boolean stringSettingHandleKeyCode(int keyCode, KeyEvent event) { 23430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson if (!mFocusedSetting.getTitle().equals(getString(R.string.setting_preset_name))) { 23530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return super.onKeyUp(keyCode, event); 23630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 23730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 23830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson String[] presetSettingChoices = getResources().getStringArray( 23930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson R.array.setting_preset_choices); 24014c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler String[] presetSettingValues = getResources().getStringArray(R.array.setting_preset_values); 24130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson 24214c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler int currentIndex = Arrays.asList(presetSettingValues).indexOf( 24330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson mFocusedSetting.getStringValue()); 24430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson switch (keyCode) { 24530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case KeyEvent.KEYCODE_DPAD_RIGHT: 24630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson currentIndex++; 24730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson break; 24830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson case KeyEvent.KEYCODE_DPAD_LEFT: 24930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson currentIndex--; 25030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson break; 25130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson default: 25230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return super.onKeyUp(keyCode, event); 25330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 25414c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler int newIndex = (currentIndex + presetSettingValues.length) % presetSettingValues.length; 25514c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler mFocusedSetting.setValue(presetSettingValues[newIndex]); 25614c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler mSettingValue.setText(presetSettingChoices[newIndex]); 25730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson int[] newSettingValues = null; 25830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson if (newIndex == getResources().getInteger(R.integer.standard_setting_index)) { 25930736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson newSettingValues = getResources().getIntArray(R.array.standard_setting_values); 26030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } else if (newIndex == getResources().getInteger(R.integer.cinema_setting_index)) { 26130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson newSettingValues = getResources().getIntArray(R.array.cinema_setting_values); 26230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } else if (newIndex == getResources().getInteger(R.integer.vivid_setting_index)) { 26330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson newSettingValues = getResources().getIntArray(R.array.vivid_setting_values); 26430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } else if (newIndex == getResources().getInteger(R.integer.game_setting_index)) { 26530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson newSettingValues = getResources().getIntArray(R.array.game_setting_values); 26630736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 26730736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson if (newSettingValues != null) { 26830736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson for (int i = 0; i < newSettingValues.length; i++) { 26914c0f6421be479a1c95b3d3482f3f47f39247170Tony Mantler mSettings.get(i + INTEGER_SETTING_START_INDEX).setValue( 27030736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson newSettingValues[i]); 27130736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 27230736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 27330736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson return true; 27430736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson } 27530736d506c12af7aa9d0266f1ea389cc9abf29b8Andrew Wilson} 276