101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette/* 201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * Copyright (C) 2015 The Android Open Source Project 301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * 401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * Licensed under the Apache License, Version 2.0 (the "License"); 501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * you may not use this file except in compliance with the License. 601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * You may obtain a copy of the License at 701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * 801a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * http://www.apache.org/licenses/LICENSE-2.0 901a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * 1001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * Unless required by applicable law or agreed to in writing, software 1101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * distributed under the License is distributed on an "AS IS" BASIS, 1201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * See the License for the specific language governing permissions and 1401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * limitations under the License. 1501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette */ 1601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 1701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverettepackage com.android.settings.display; 1801a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 1901a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport android.annotation.Nullable; 2001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport android.content.Context; 2101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport android.content.res.Configuration; 2201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport android.content.res.Resources; 2301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport android.os.Bundle; 2401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport android.view.Display; 253e19fc5600f739e7f172fb9331cfc0f4a884d4ceJason Monkimport com.android.internal.logging.MetricsProto.MetricsEvent; 263e19fc5600f739e7f172fb9331cfc0f4a884d4ceJason Monkimport com.android.settings.PreviewSeekBarPreferenceFragment; 273e19fc5600f739e7f172fb9331cfc0f4a884d4ceJason Monkimport com.android.settings.R; 283e19fc5600f739e7f172fb9331cfc0f4a884d4ceJason Monkimport com.android.settings.search.BaseSearchIndexProvider; 293e19fc5600f739e7f172fb9331cfc0f4a884d4ceJason Monkimport com.android.settings.search.Indexable; 303e19fc5600f739e7f172fb9331cfc0f4a884d4ceJason Monkimport com.android.settings.search.SearchIndexableRaw; 316b0b73fdc4e9fd2622e0f4c07cde06b1aff32468Alan Viveretteimport com.android.settingslib.display.DisplayDensityUtils; 3201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 3301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport java.util.ArrayList; 3401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viveretteimport java.util.List; 3501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 3601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette/** 3701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * Preference fragment used to control screen zoom. 3801a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette */ 39e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wangpublic class ScreenZoomSettings extends PreviewSeekBarPreferenceFragment implements Indexable { 4001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 4194ecc8137633d4930c0c078c48ddd3c93aa84218Alan Viverette private int mDefaultDensity; 42e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang private int[] mValues; 4301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 4401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette @Override 4501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette public void onCreate(@Nullable Bundle savedInstanceState) { 4601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette super.onCreate(savedInstanceState); 4701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 48e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang mActivityLayoutResId = R.layout.screen_zoom_activity; 4949fabb9b472ffa534f48fde4bab131a38dbaa072Noah Wang 5049fabb9b472ffa534f48fde4bab131a38dbaa072Noah Wang // This should be replaced once the final preview sample screen is in place. 51b25ccce111298e869378cd846ca8b9c3c0980a8eNoah Wang mPreviewSampleResIds = new int[]{R.layout.screen_zoom_preview_1, 52b25ccce111298e869378cd846ca8b9c3c0980a8eNoah Wang R.layout.screen_zoom_preview_2, 53384fa2e3423741137eddc26b01fcac8bc9fef2e3Anna Galusza R.layout.screen_zoom_preview_settings}; 5449fabb9b472ffa534f48fde4bab131a38dbaa072Noah Wang 5501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette final DisplayDensityUtils density = new DisplayDensityUtils(getContext()); 5601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 5701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette final int initialIndex = density.getCurrentIndex(); 5801a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette if (initialIndex < 0) { 5994ecc8137633d4930c0c078c48ddd3c93aa84218Alan Viverette // Failed to obtain default density, which means we failed to 6001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette // connect to the window manager service. Just use the current 6101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette // density and don't let the user change anything. 6201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette final int densityDpi = getResources().getDisplayMetrics().densityDpi; 6301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette mValues = new int[] { densityDpi }; 646b0b73fdc4e9fd2622e0f4c07cde06b1aff32468Alan Viverette mEntries = new String[] { getString(DisplayDensityUtils.SUMMARY_DEFAULT) }; 6501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette mInitialIndex = 0; 6694ecc8137633d4930c0c078c48ddd3c93aa84218Alan Viverette mDefaultDensity = densityDpi; 6701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } else { 6801a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette mValues = density.getValues(); 6901a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette mEntries = density.getEntries(); 7001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette mInitialIndex = initialIndex; 7194ecc8137633d4930c0c078c48ddd3c93aa84218Alan Viverette mDefaultDensity = density.getDefaultDensity(); 7201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } 7301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } 7401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 7501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette @Override 76e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang protected Configuration createConfig(Configuration origConfig, int index) { 7701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette // Populate the sample layouts. 78e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang final Configuration config = new Configuration(origConfig); 79e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang config.densityDpi = mValues[index]; 80e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang return config; 8101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } 8201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 8301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette /** 8401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette * Persists the selected density and sends a configuration change. 8501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette */ 86e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang @Override 87e64cc267e7090d407d756ff2aa2ca022d1772242Noah Wang protected void commit() { 8801a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette final int densityDpi = mValues[mCurrentIndex]; 8994ecc8137633d4930c0c078c48ddd3c93aa84218Alan Viverette if (densityDpi == mDefaultDensity) { 9001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette DisplayDensityUtils.clearForcedDisplayDensity(Display.DEFAULT_DISPLAY); 9101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } else { 9201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette DisplayDensityUtils.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, densityDpi); 9301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } 9401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } 9501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 9601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette @Override 9701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette protected int getMetricsCategory() { 983e19fc5600f739e7f172fb9331cfc0f4a884d4ceJason Monk return MetricsEvent.DISPLAY_SCREEN_ZOOM; 9901a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } 10001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 10101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette /** Index provider used to expose this fragment in search. */ 10201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 10301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette new BaseSearchIndexProvider() { 10401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette @Override 10501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { 10601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette final Resources res = context.getResources(); 10701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette final SearchIndexableRaw data = new SearchIndexableRaw(context); 10801a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette data.title = res.getString(R.string.screen_zoom_title); 10901a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette data.screenTitle = res.getString(R.string.screen_zoom_title); 11001a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette data.keywords = res.getString(R.string.screen_zoom_keywords); 11101a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette 11201a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette final List<SearchIndexableRaw> result = new ArrayList<>(1); 11301a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette result.add(data); 11401a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette return result; 11501a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette } 11601a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette }; 11701a04f132b2b2bd91967c2c7dc165ced7f72d9d9Alan Viverette} 118