1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14package com.android.tv.quicksettings; 15 16import android.app.Activity; 17import android.app.AlertDialog; 18import android.content.Context; 19import android.content.DialogInterface; 20import android.content.Intent; 21import android.os.Bundle; 22import android.support.v17.leanback.widget.VerticalGridView; 23import android.text.TextUtils; 24import android.util.Log; 25import android.view.Gravity; 26import android.view.LayoutInflater; 27import android.view.View; 28import android.view.ViewGroup; 29import android.view.WindowManager; 30import android.widget.TextView; 31 32import com.android.tv.quicksettings.SettingsDialog; 33 34import java.util.ArrayList; 35import java.util.List; 36 37public class QuickSettings extends Activity { 38 39 private static final String TAG = "QuickSettings"; 40 private static final int REQUEST_CODE_SET_SETTINGS = 1; 41 static final int PRESET_SETTING_INDEX = 0; 42 static final int INTEGER_SETTING_START_INDEX = 1; 43 44 private int mSlidOutTranslationX; 45 private View mRootView; 46 private ArrayList<Setting> mSettings; 47 private PanelAdapter mAdapter; 48 49 @Override 50 protected void onCreate(Bundle savedInstanceState) { 51 super.onCreate(savedInstanceState); 52 53 WindowManager.LayoutParams lp = getWindow().getAttributes(); 54 lp.gravity = Gravity.RIGHT; 55 getWindow().setAttributes(lp); 56 57 setContentView(R.layout.side_quicksettings); 58 getWindow().setLayout(WindowManager.LayoutParams.WRAP_CONTENT, 59 WindowManager.LayoutParams.MATCH_PARENT); 60 61 mSlidOutTranslationX = getResources().getDimensionPixelSize(R.dimen.panel_width); 62 63 mRootView = getWindow().getDecorView().findViewById(android.R.id.content); 64 mRootView.setTranslationX(mSlidOutTranslationX); 65 66 final VerticalGridView panelList = (VerticalGridView) findViewById(R.id.side_panel_list); 67 68 mSettings = getSettings(); 69 mAdapter = new PanelAdapter(mSettings, new SettingClickedListener() { 70 @Override 71 public void onSettingClicked(Setting s) { 72 Log.d(TAG, "Clicked Setting " + s.getTitle()); 73 if (s.getType() != Setting.TYPE_UNKNOWN) { 74 Intent intent = new Intent(QuickSettings.this, SettingsDialog.class); 75 intent.putExtra(SettingsDialog.EXTRA_START_POS, 76 panelList.getSelectedPosition()); 77 intent.putExtra(SettingsDialog.EXTRA_SETTINGS, mSettings); 78 startActivityForResult(intent, REQUEST_CODE_SET_SETTINGS); 79 } else { 80 new AlertDialog.Builder(QuickSettings.this).setPositiveButton( 81 android.R.string.ok, new DialogInterface.OnClickListener() { 82 @Override 83 public void onClick(DialogInterface dialog, int id) { 84 // User clicked OK button 85 String[] presetSettingChoices = getResources().getStringArray( 86 R.array.setting_preset_choices); 87 mSettings.get(PRESET_SETTING_INDEX).setValue( 88 presetSettingChoices[getResources().getInteger( 89 R.integer.standard_setting_index)]); 90 int[] newSettingValues = getResources().getIntArray( 91 R.array.standard_setting_values); 92 for (int i = 0; i < newSettingValues.length; i++) { 93 mSettings.get(i + INTEGER_SETTING_START_INDEX).setValue( 94 newSettingValues[i]); 95 } 96 mAdapter.notifyDataSetChanged(); 97 } 98 }).setNegativeButton(android.R.string.cancel, 99 new DialogInterface.OnClickListener() { 100 @Override 101 public void onClick(DialogInterface dialog, int id) { 102 // User cancelled the dialog - do nothing 103 } 104 }).setTitle(R.string.reset_dialog_message).create().show(); 105 106 } 107 } 108 }); 109 110 panelList.setAdapter(mAdapter); 111 panelList.setSelectedPosition(0); 112 panelList.requestFocus(); 113 } 114 115 @Override 116 protected void onResume() { 117 super.onResume(); 118 mRootView.animate().cancel(); 119 mRootView.animate().translationX(0).start(); 120 } 121 122 @Override 123 protected void onPause() { 124 mRootView.animate().cancel(); 125 mRootView.animate().translationX(mSlidOutTranslationX).start(); 126 super.onPause(); 127 } 128 129 @Override 130 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 131 if (requestCode == REQUEST_CODE_SET_SETTINGS) { 132 if (resultCode == RESULT_OK) { 133 mSettings = data.getParcelableArrayListExtra( 134 SettingsDialog.RESULT_EXTRA_NEW_SETTINGS_VALUES); 135 mAdapter.setSettings(mSettings); 136 } 137 } else { 138 super.onActivityResult(requestCode, resultCode, data); 139 } 140 } 141 142 private ArrayList<Setting> getSettings() { 143 ArrayList<Setting> settings = new ArrayList<Setting>(); 144 145 String[] presetSettingChoices = getResources().getStringArray( 146 R.array.setting_preset_choices); 147 settings.add(new Setting(getString(R.string.setting_preset_name), 148 presetSettingChoices[getResources().getInteger(R.integer.standard_setting_index)])); 149 String[] settingNames = getResources().getStringArray(R.array.setting_names); 150 int[] standardSettingValues = getResources().getIntArray(R.array.standard_setting_values); 151 int[] maxSettingValues = getResources().getIntArray(R.array.setting_max_values); 152 for (int i = 0; i < settingNames.length; i++) { 153 settings.add( 154 new Setting(settingNames[i], standardSettingValues[i], maxSettingValues[i])); 155 } 156 settings.add(new Setting(getString(R.string.setting_reset_defaults_name))); 157 158 return settings; 159 } 160} 161