From 45a3919cf43a4d5ef88efd740f132e5bc6f1f967 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Tue, 4 Sep 2018 14:55:54 +0800 Subject: [PATCH 1/4] Added the bulkInsert for CardContentProvider - Modified CardContentProvider and added bulkInsert - Modified CardContentProviderTest - Moved the endTransaction to finally clause - Let insert call bulkinsert Bug: 111820446 Test: robotest Change-Id: Ie84fe1143abc28bb60f261ce763051bedd469100 --- .../homepage/CardContentProvider.java | 31 +++++++--- .../homepage/CardContentProviderTest.java | 57 ++++++++++++++----- 2 files changed, 65 insertions(+), 23 deletions(-) diff --git a/src/com/android/settings/homepage/CardContentProvider.java b/src/com/android/settings/homepage/CardContentProvider.java index 640a00b3683..7b087568ca1 100644 --- a/src/com/android/settings/homepage/CardContentProvider.java +++ b/src/com/android/settings/homepage/CardContentProvider.java @@ -61,23 +61,38 @@ public class CardContentProvider extends ContentProvider { @Override public Uri insert(Uri uri, ContentValues values) { + final ContentValues[] cvs = {values}; + bulkInsert(uri, cvs); + return uri; + } + + @Override + public int bulkInsert(Uri uri, ContentValues[] values) { final StrictMode.ThreadPolicy oldPolicy = StrictMode.getThreadPolicy(); + int numInserted = 0; + final SQLiteDatabase database = mDBHelper.getWritableDatabase(); + try { maybeEnableStrictMode(); - final SQLiteDatabase database = mDBHelper.getWritableDatabase(); final String table = getTableFromMatch(uri); - final long ret = database.insert(table, null, values); - if (ret != -1) { - getContext().getContentResolver().notifyChange(uri, null); - } else { - Log.e(TAG, "The CardContentProvider insertion failed! Plase check SQLiteDatabase's " - + "message."); + database.beginTransaction(); + for (ContentValues value : values) { + long ret = database.insert(table, null, value); + if (ret != -1L) { + numInserted++; + } else { + Log.e(TAG, "The row " + value.getAsString(CardDatabaseHelper.CardColumns.NAME) + + " insertion failed! Please check your data."); + } } + database.setTransactionSuccessful(); + getContext().getContentResolver().notifyChange(uri, null); } finally { + database.endTransaction(); StrictMode.setThreadPolicy(oldPolicy); } - return uri; + return numInserted; } @Override diff --git a/tests/robotests/src/com/android/settings/homepage/CardContentProviderTest.java b/tests/robotests/src/com/android/settings/homepage/CardContentProviderTest.java index eec87b0286e..84955e2c8a5 100644 --- a/tests/robotests/src/com/android/settings/homepage/CardContentProviderTest.java +++ b/tests/robotests/src/com/android/settings/homepage/CardContentProviderTest.java @@ -72,16 +72,25 @@ public class CardContentProviderTest { @Test public void cardData_insert() { - final int cnt_before_instert = getRowCount(); - mResolver.insert(mUri, insertOneRow()); - final int cnt_after_instert = getRowCount(); + final int rowsBeforeInsert = getRowCount(); + mResolver.insert(mUri, generateOneRow()); + final int rowsAfterInsert = getRowCount(); - assertThat(cnt_after_instert - cnt_before_instert).isEqualTo(1); + assertThat(rowsAfterInsert - rowsBeforeInsert).isEqualTo(1); + } + + @Test + public void cardData_bulkInsert_twoRows() { + final int rowsBeforeInsert = getRowCount(); + mResolver.bulkInsert(mUri, generateTwoRows()); + final int rowsAfterInsert = getRowCount(); + + assertThat(rowsAfterInsert - rowsBeforeInsert).isEqualTo(2); } @Test public void cardData_query() { - mResolver.insert(mUri, insertOneRow()); + mResolver.insert(mUri, generateOneRow()); final int count = getRowCount(); assertThat(count).isGreaterThan(0); @@ -89,24 +98,24 @@ public class CardContentProviderTest { @Test public void cardData_delete() { - mResolver.insert(mUri, insertOneRow()); - final int del_count = mResolver.delete(mUri, null, null); + mResolver.insert(mUri, generateOneRow()); + final int delCount = mResolver.delete(mUri, null, null); - assertThat(del_count).isGreaterThan(0); + assertThat(delCount).isGreaterThan(0); } @Test public void cardData_update() { - mResolver.insert(mUri, insertOneRow()); + mResolver.insert(mUri, generateOneRow()); final double updatingScore = 0.87; final ContentValues values = new ContentValues(); values.put(CardDatabaseHelper.CardColumns.SCORE, updatingScore); final String strWhere = CardDatabaseHelper.CardColumns.NAME + "=?"; final String[] selectionArgs = {"auto_rotate"}; - final int update_count = mResolver.update(mUri, values, strWhere, selectionArgs); + final int updateCount = mResolver.update(mUri, values, strWhere, selectionArgs); - assertThat(update_count).isGreaterThan(0); + assertThat(updateCount).isGreaterThan(0); final String[] columns = {CardDatabaseHelper.CardColumns.SCORE}; final Cursor cr = mResolver.query(mUri, columns, strWhere, selectionArgs, null); @@ -122,7 +131,7 @@ public class CardContentProviderTest { ShadowThreadUtils.setIsMainThread(true); ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true); - mProvider.insert(mUri, insertOneRow()); + mProvider.insert(mUri, generateOneRow()); verify(mProvider).enableStrictMode(); } @@ -164,7 +173,7 @@ public class CardContentProviderTest { ShadowThreadUtils.setIsMainThread(false); ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true); - mProvider.insert(mUri, insertOneRow()); + mProvider.insert(mUri, generateOneRow()); verify(mProvider, never()).enableStrictMode(); } @@ -217,10 +226,10 @@ public class CardContentProviderTest { mProvider.getTableFromMatch(invalid_Uri); } - private ContentValues insertOneRow() { + private ContentValues generateOneRow() { final ContentValues values = new ContentValues(); values.put(CardDatabaseHelper.CardColumns.NAME, "auto_rotate"); - values.put(CardDatabaseHelper.CardColumns.TYPE, 0); + values.put(CardDatabaseHelper.CardColumns.TYPE, 1); values.put(CardDatabaseHelper.CardColumns.SCORE, 0.9); values.put(CardDatabaseHelper.CardColumns.SLICE_URI, "content://com.android.settings.slices/action/auto_rotate"); @@ -231,6 +240,24 @@ public class CardContentProviderTest { return values; } + private ContentValues[] generateTwoRows() { + final ContentValues[] twoRows = new ContentValues[2]; + twoRows[0] = generateOneRow(); + + final ContentValues values = new ContentValues(); + values.put(CardDatabaseHelper.CardColumns.NAME, "toggle_airplane"); + values.put(CardDatabaseHelper.CardColumns.TYPE, 1); + values.put(CardDatabaseHelper.CardColumns.SCORE, 0.95); + values.put(CardDatabaseHelper.CardColumns.SLICE_URI, + "content://com.android.settings.slices/action/toggle_airplane"); + values.put(CardDatabaseHelper.CardColumns.CATEGORY, 2); + values.put(CardDatabaseHelper.CardColumns.PACKAGE_NAME, "com.android.settings"); + values.put(CardDatabaseHelper.CardColumns.APP_VERSION, "1.0.0"); + twoRows[1] = values; + + return twoRows; + } + private int getRowCount() { final Cursor cr = mResolver.query(mUri, null, null, null); final int count = cr.getCount(); From 18eecb1e672679ef9640e658130357fd37cea7fc Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 7 Sep 2018 17:06:07 -0700 Subject: [PATCH 2/4] Add config to disable app tray preview in display size. Also move some files Change-Id: I4636fcd81425991acadede0b703e09513c82543c Merged-In: I4636fcd81425991acadede0b703e09513c82543c Fixes: 113374067 Test: robotests --- res/values/bools.xml | 5 +- res/xml/accessibility_settings.xml | 2 +- ...ccessibility_settings_for_setup_wizard.xml | 2 +- res/xml/display_settings.xml | 5 +- .../accessibility/AccessibilitySettings.java | 1 + .../display/FontSizePreferenceController.java | 1 - ...tSizePreferenceFragmentForSetupWizard.java | 4 +- .../{ => display}/PreviewPagerAdapter.java | 58 ++++++++-------- .../PreviewSeekBarPreferenceFragment.java | 69 ++++++++----------- ...nZoomPreferenceFragmentForSetupWizard.java | 3 +- .../settings/display/ScreenZoomSettings.java | 30 +++++--- .../ToggleFontSizePreferenceFragment.java | 20 ++++-- ...ther_not_in_search_index_provider_registry | 1 + tests/robotests/res/values-mcc999/config.xml | 6 ++ .../display/ScreenZoomSettingsTest.java | 57 +++++++++++++++ 15 files changed, 166 insertions(+), 98 deletions(-) rename src/com/android/settings/{accessibility => display}/FontSizePreferenceFragmentForSetupWizard.java (92%) rename src/com/android/settings/{ => display}/PreviewPagerAdapter.java (83%) rename src/com/android/settings/{ => display}/PreviewSeekBarPreferenceFragment.java (80%) rename src/com/android/settings/{accessibility => display}/ToggleFontSizePreferenceFragment.java (89%) create mode 100644 tests/robotests/src/com/android/settings/display/ScreenZoomSettingsTest.java diff --git a/res/values/bools.xml b/res/values/bools.xml index 29de06bceae..9e039c93261 100644 --- a/res/values/bools.xml +++ b/res/values/bools.xml @@ -174,6 +174,9 @@ true - + false + + + true diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml index 060868e37fc..c192faa4ad6 100644 --- a/res/xml/accessibility_settings.xml +++ b/res/xml/accessibility_settings.xml @@ -44,7 +44,7 @@ android:title="@string/display_category_title"> diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml index c1141abc4a9..738bb8e3cc2 100644 --- a/res/xml/accessibility_settings_for_setup_wizard.xml +++ b/res/xml/accessibility_settings_for_setup_wizard.xml @@ -33,7 +33,7 @@ diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index c75b90ce46c..9e1ee4cba86 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -80,9 +80,8 @@ + android:fragment="com.android.settings.display.ToggleFontSizePreferenceFragment" + settings:controller="com.android.settings.display.FontSizePreferenceController" /> { + inflated.setVisibility(stub.getVisibility()); + mViewStubInflated[fi][fj] = true; }); mPreviewFrames[p].addView(sampleViewStub); @@ -94,7 +92,7 @@ public class PreviewPagerAdapter extends PagerAdapter { } @Override - public void destroyItem (ViewGroup container, int position, Object object) { + public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @@ -164,29 +162,29 @@ public class PreviewPagerAdapter extends PagerAdapter { if (visibility == View.VISIBLE) { // Fade in animation. view.animate() - .alpha(alpha) - .setInterpolator(FADE_IN_INTERPOLATOR) - .setDuration(CROSS_FADE_DURATION_MS) - .setListener(new PreviewFrameAnimatorListener()) - .withStartAction(new Runnable() { - @Override - public void run() { - view.setVisibility(visibility); - } - }); + .alpha(alpha) + .setInterpolator(FADE_IN_INTERPOLATOR) + .setDuration(CROSS_FADE_DURATION_MS) + .setListener(new PreviewFrameAnimatorListener()) + .withStartAction(new Runnable() { + @Override + public void run() { + view.setVisibility(visibility); + } + }); } else { // Fade out animation. view.animate() - .alpha(alpha) - .setInterpolator(FADE_OUT_INTERPOLATOR) - .setDuration(CROSS_FADE_DURATION_MS) - .setListener(new PreviewFrameAnimatorListener()) - .withEndAction(new Runnable() { - @Override - public void run() { - view.setVisibility(visibility); - } - }); + .alpha(alpha) + .setInterpolator(FADE_OUT_INTERPOLATOR) + .setDuration(CROSS_FADE_DURATION_MS) + .setListener(new PreviewFrameAnimatorListener()) + .withEndAction(new Runnable() { + @Override + public void run() { + view.setVisibility(visibility); + } + }); } } } diff --git a/src/com/android/settings/PreviewSeekBarPreferenceFragment.java b/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java similarity index 80% rename from src/com/android/settings/PreviewSeekBarPreferenceFragment.java rename to src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java index 6cbd619b4e8..36691186798 100644 --- a/src/com/android/settings/PreviewSeekBarPreferenceFragment.java +++ b/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2018 The Android 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. @@ -14,14 +14,13 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.display; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.widget.SeekBar; @@ -31,6 +30,8 @@ import android.widget.TextView; import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager.OnPageChangeListener; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; import com.android.settings.widget.DotsPageIndicator; import com.android.settings.widget.LabeledSeekBar; @@ -48,12 +49,6 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc /** Index of the entry corresponding to current value of the settings. */ protected int mCurrentIndex; - /** Resource id of the layout for this preference fragment. */ - protected int mActivityLayoutResId; - - /** Resource id of the layout that defines the contents inside preview screen. */ - protected int[] mPreviewSampleResIds; - private ViewPager mPreviewPager; private PreviewPagerAdapter mPreviewPagerAdapter; private DotsPageIndicator mPageIndicator; @@ -82,12 +77,7 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc @Override public void onStopTrackingTouch(SeekBar seekBar) { if (mPreviewPagerAdapter.isAnimating()) { - mPreviewPagerAdapter.setAnimationEndAction(new Runnable() { - @Override - public void run() { - commit(); - } - }); + mPreviewPagerAdapter.setAnimationEndAction(() -> commit()); } else { commit(); } @@ -102,39 +92,33 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc final ViewGroup listContainer = (ViewGroup) root.findViewById(android.R.id.list_container); listContainer.removeAllViews(); - final View content = inflater.inflate(mActivityLayoutResId, listContainer, false); + final View content = inflater.inflate(getActivityLayoutResId(), listContainer, false); listContainer.addView(content); - mLabel = (TextView) content.findViewById(R.id.current_label); + mLabel = content.findViewById(R.id.current_label); // The maximum SeekBar value always needs to be non-zero. If there's // only one available value, we'll handle this by disabling the // seek bar. final int max = Math.max(1, mEntries.length - 1); - mSeekBar = (LabeledSeekBar) content.findViewById(R.id.seek_bar); + mSeekBar = content.findViewById(R.id.seek_bar); mSeekBar.setLabels(mEntries); mSeekBar.setMax(max); mSmaller = content.findViewById(R.id.smaller); - mSmaller.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - final int progress = mSeekBar.getProgress(); - if (progress > 0) { - mSeekBar.setProgress(progress - 1, true); - } + mSmaller.setOnClickListener(v -> { + final int progress = mSeekBar.getProgress(); + if (progress > 0) { + mSeekBar.setProgress(progress - 1, true); } }); mLarger = content.findViewById(R.id.larger); - mLarger.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - final int progress = mSeekBar.getProgress(); - if (progress < mSeekBar.getMax()) { - mSeekBar.setProgress(progress + 1, true); - } + mLarger.setOnClickListener(v -> { + final int progress = mSeekBar.getProgress(); + if (progress < mSeekBar.getMax()) { + mSeekBar.setProgress(progress + 1, true); } }); @@ -152,15 +136,16 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc configurations[i] = createConfig(origConfig, i); } - mPreviewPager = (ViewPager) content.findViewById(R.id.preview_pager); + final int[] previews = getPreviewSampleResIds(); + mPreviewPager = content.findViewById(R.id.preview_pager); mPreviewPagerAdapter = new PreviewPagerAdapter(context, isLayoutRtl, - mPreviewSampleResIds, configurations); + previews, configurations); mPreviewPager.setAdapter(mPreviewPagerAdapter); - mPreviewPager.setCurrentItem(isLayoutRtl ? mPreviewSampleResIds.length - 1 : 0); + mPreviewPager.setCurrentItem(isLayoutRtl ? previews.length - 1 : 0); mPreviewPager.addOnPageChangeListener(mPreviewPageChangeListener); - mPageIndicator = (DotsPageIndicator) content.findViewById(R.id.page_indicator); - if (mPreviewSampleResIds.length > 1) { + mPageIndicator = content.findViewById(R.id.page_indicator); + if (previews.length > 1) { mPageIndicator.setViewPager(mPreviewPager); mPageIndicator.setVisibility(View.VISIBLE); mPageIndicator.setOnPageChangeListener(mPageIndicatorPageChangeListener); @@ -187,6 +172,12 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc mSeekBar.setOnSeekBarChangeListener(null); } + /** Resource id of the layout for this preference fragment. */ + protected abstract int getActivityLayoutResId(); + + /** Resource id of the layout that defines the contents inside preview screen. */ + protected abstract int[] getPreviewSampleResIds(); + /** * Creates new configuration based on the current position of the SeekBar. */ @@ -210,8 +201,8 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc private void setPagerIndicatorContentDescription(int position) { mPageIndicator.setContentDescription( - getPrefContext().getString(R.string.preview_page_indicator_content_description, - position + 1, mPreviewSampleResIds.length)); + getString(R.string.preview_page_indicator_content_description, + position + 1, getPreviewSampleResIds().length)); } private OnPageChangeListener mPreviewPageChangeListener = new OnPageChangeListener() { diff --git a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java index 82cb58d3cd0..e02579f7dfb 100644 --- a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java @@ -18,8 +18,7 @@ package com.android.settings.display; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -public class ScreenZoomPreferenceFragmentForSetupWizard - extends ScreenZoomSettings { +public class ScreenZoomPreferenceFragmentForSetupWizard extends ScreenZoomSettings { @Override public int getMetricsCategory() { diff --git a/src/com/android/settings/display/ScreenZoomSettings.java b/src/com/android/settings/display/ScreenZoomSettings.java index 6b5216e7ab8..5d7375d85bb 100644 --- a/src/com/android/settings/display/ScreenZoomSettings.java +++ b/src/com/android/settings/display/ScreenZoomSettings.java @@ -24,7 +24,6 @@ import android.os.Bundle; import android.view.Display; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.PreviewSeekBarPreferenceFragment; import com.android.settings.R; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; @@ -42,17 +41,26 @@ public class ScreenZoomSettings extends PreviewSeekBarPreferenceFragment impleme private int mDefaultDensity; private int[] mValues; + @Override + protected int getActivityLayoutResId() { + return R.layout.screen_zoom_activity; + } + + @Override + protected int[] getPreviewSampleResIds() { + return getContext().getResources().getBoolean( + R.bool.config_enable_extra_screen_zoom_preview) + ? new int[]{ + R.layout.screen_zoom_preview_1, + R.layout.screen_zoom_preview_2, + R.layout.screen_zoom_preview_settings} + : new int[]{R.layout.screen_zoom_preview_1}; + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mActivityLayoutResId = R.layout.screen_zoom_activity; - - // This should be replaced once the final preview sample screen is in place. - mPreviewSampleResIds = new int[] {R.layout.screen_zoom_preview_1, - R.layout.screen_zoom_preview_2, - R.layout.screen_zoom_preview_settings}; - final DisplayDensityUtils density = new DisplayDensityUtils(getContext()); final int initialIndex = density.getCurrentIndex(); @@ -61,8 +69,8 @@ public class ScreenZoomSettings extends PreviewSeekBarPreferenceFragment impleme // connect to the window manager service. Just use the current // density and don't let the user change anything. final int densityDpi = getResources().getDisplayMetrics().densityDpi; - mValues = new int[] {densityDpi}; - mEntries = new String[] {getString(DisplayDensityUtils.SUMMARY_DEFAULT)}; + mValues = new int[]{densityDpi}; + mEntries = new String[]{getString(DisplayDensityUtils.SUMMARY_DEFAULT)}; mInitialIndex = 0; mDefaultDensity = densityDpi; } else { @@ -107,7 +115,7 @@ public class ScreenZoomSettings extends PreviewSeekBarPreferenceFragment impleme } /** Index provider used to expose this fragment in search. */ - public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override public List getRawDataToIndex(Context context, diff --git a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java b/src/com/android/settings/display/ToggleFontSizePreferenceFragment.java similarity index 89% rename from src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java rename to src/com/android/settings/display/ToggleFontSizePreferenceFragment.java index 45b9def55e8..c87d29d38dd 100644 --- a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java +++ b/src/com/android/settings/display/ToggleFontSizePreferenceFragment.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2018 The Android 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. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.accessibility; +package com.android.settings.display; import android.annotation.Nullable; import android.content.ContentResolver; @@ -24,7 +24,6 @@ import android.os.Bundle; import android.provider.Settings; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.PreviewSeekBarPreferenceFragment; import com.android.settings.R; /** @@ -34,14 +33,21 @@ public class ToggleFontSizePreferenceFragment extends PreviewSeekBarPreferenceFr private float[] mValues; + @Override + protected int getActivityLayoutResId() { + return R.layout.font_size_activity; + } + + @Override + protected int[] getPreviewSampleResIds() { + return new int[]{R.layout.font_size_preview}; + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mActivityLayoutResId = R.layout.font_size_activity; - mPreviewSampleResIds = new int[]{R.layout.font_size_preview}; - - Resources res = getContext().getResources(); + final Resources res = getContext().getResources(); final ContentResolver resolver = getContext().getContentResolver(); // Mark the appropriate item in the preferences list. mEntries = res.getStringArray(R.array.entries_font_size); diff --git a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry index be3507c93ae..8e0df9d0276 100644 --- a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry +++ b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry @@ -1,2 +1,3 @@ +com.android.settings.display.FontSizePreferenceFragmentForSetupWizard com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard com.android.settings.search.indexing.FakeSettingsFragment diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index cecc9c59c59..3706983e730 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -63,6 +63,12 @@ false true + + false + + + false + fake_package/fake_service diff --git a/tests/robotests/src/com/android/settings/display/ScreenZoomSettingsTest.java b/tests/robotests/src/com/android/settings/display/ScreenZoomSettingsTest.java new file mode 100644 index 00000000000..082207629ea --- /dev/null +++ b/tests/robotests/src/com/android/settings/display/ScreenZoomSettingsTest.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2018 The Android 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. + */ + +package com.android.settings.display; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; + +import android.content.Context; + +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +public class ScreenZoomSettingsTest { + + private ScreenZoomSettings mSettings; + private Context mContext; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mSettings = spy(new ScreenZoomSettings()); + doReturn(mContext).when(mSettings).getContext(); + } + + @Test + public void getPreviewSampleResIds_default_return3Previews() { + assertThat(mSettings.getPreviewSampleResIds()).hasLength(3); + } + + @Test + @Config(qualifiers = "mcc999") + public void getPreviewSampleResIds_extraPreviewDisabled_return1Preview() { + assertThat(mSettings.getPreviewSampleResIds()).hasLength(1); + } +} From 6543b077cb0e8f70d3f9f76d6ea44afde11f35ce Mon Sep 17 00:00:00 2001 From: Beverly Date: Tue, 11 Sep 2018 10:06:13 -0400 Subject: [PATCH 3/4] Null check for ManagedServiceSetting dialog title Test: manual Change-Id: If3753b01431ab9690cdbae5a0d7f0edf9c80fcec Fixes: 114803288 --- .../settings/utils/ManagedServiceSettings.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java index d6deba60fb6..e5dfb066e3e 100644 --- a/src/com/android/settings/utils/ManagedServiceSettings.java +++ b/src/com/android/settings/utils/ManagedServiceSettings.java @@ -32,11 +32,6 @@ import android.util.IconDrawableFactory; import android.util.Log; import android.view.View; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.Fragment; -import androidx.preference.PreferenceScreen; -import androidx.preference.SwitchPreference; - import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.Utils; @@ -47,6 +42,11 @@ import com.android.settingslib.applications.ServiceListing; import java.util.List; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; +import androidx.preference.PreferenceScreen; +import androidx.preference.SwitchPreference; + public abstract class ManagedServiceSettings extends EmptyTextSettings { private static final String TAG = "ManagedServiceSettings"; private final Config mConfig; @@ -122,7 +122,7 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings { // unlikely, as we are iterating over live services. Log.e(TAG, "can't find package name", e); } - final String finalTitle = title.toString(); + final CharSequence finalTitle = title; final String summary = service.loadLabel(mPm).toString(); final SwitchPreference pref = new AppSwitchPreference(getPrefContext()); pref.setPersistent(false); @@ -143,7 +143,11 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings { } pref.setOnPreferenceChangeListener((preference, newValue) -> { final boolean enable = (boolean) newValue; - return setEnabled(cn, finalTitle, enable); + if (finalTitle != null) { + return setEnabled(cn, finalTitle.toString(), enable); + } else { + return setEnabled(cn, null, enable); + } }); pref.setKey(cn.flattenToString()); screen.addPreference(pref); From 2ee4a4846edaf8275dd0f8bc013b594facdb05d2 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 11 Sep 2018 12:52:45 -0700 Subject: [PATCH 4/4] Move ShadowXmlUtils to settingslib Test: robotests Change-Id: Iadea11ff207cab90a9803cb88d76b7b00b4a03df --- tests/robotests/config/robolectric.properties | 3 +- .../testutils/shadow/ShadowXmlUtils.java | 28 ------------------- 2 files changed, 2 insertions(+), 29 deletions(-) delete mode 100644 tests/robotests/src/com/android/settings/testutils/shadow/ShadowXmlUtils.java diff --git a/tests/robotests/config/robolectric.properties b/tests/robotests/config/robolectric.properties index 717f20d8fb6..aae277902fb 100644 --- a/tests/robotests/config/robolectric.properties +++ b/tests/robotests/config/robolectric.properties @@ -1,5 +1,6 @@ manifest=packages/apps/Settings/AndroidManifest.xml sdk=NEWEST_SDK + shadows=\ com.android.settings.testutils.shadow.ShadowThreadUtils,\ - com.android.settings.testutils.shadow.ShadowXmlUtils \ No newline at end of file + com.android.settingslib.testutils.shadow.ShadowXmlUtils diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowXmlUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowXmlUtils.java deleted file mode 100644 index c2864e5f984..00000000000 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowXmlUtils.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.android.settings.testutils.shadow; - -import static org.robolectric.shadow.api.Shadow.directlyOn; - -import com.android.internal.util.XmlUtils; - -import org.robolectric.Robolectric; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.util.ReflectionHelpers; -import org.robolectric.util.ReflectionHelpers.ClassParameter; - -@Implements(XmlUtils.class) -public class ShadowXmlUtils { - - @Implementation - public static final int convertValueToInt(CharSequence charSeq, int defaultValue) { - final Class xmlUtilsClass = ReflectionHelpers.loadClass( - Robolectric.class.getClassLoader(), "com.android.internal.util.XmlUtils"); - try { - return directlyOn(xmlUtilsClass, "convertValueToInt", - ClassParameter.from(CharSequence.class, charSeq), - ClassParameter.from(int.class, new Integer(defaultValue))); - } catch (NumberFormatException e) { - return defaultValue; - } - } -}