Home | History | Annotate | Download | only in quicksettings
      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  */
     14 package com.android.tv.quicksettings;
     15 
     16 import android.app.Activity;
     17 import android.app.AlertDialog;
     18 import android.content.Context;
     19 import android.content.DialogInterface;
     20 import android.content.Intent;
     21 import android.os.Bundle;
     22 import android.support.v17.leanback.widget.VerticalGridView;
     23 import android.text.TextUtils;
     24 import android.util.Log;
     25 import android.view.Gravity;
     26 import android.view.LayoutInflater;
     27 import android.view.View;
     28 import android.view.ViewGroup;
     29 import android.view.WindowManager;
     30 import android.widget.TextView;
     31 
     32 import com.android.tv.quicksettings.SettingsDialog;
     33 
     34 import java.util.ArrayList;
     35 import java.util.List;
     36 
     37 public 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