diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a34713dce6c..1d85a8d3df0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1679,6 +1679,10 @@ android:value="com.android.settings.accessibility.AccessibilitySettingsForSetupWizard" /> + + + + diff --git a/libs/window_ext_lib.aar b/libs/window_ext_lib.aar index 301ff9672ae..c576270fec0 100644 Binary files a/libs/window_ext_lib.aar and b/libs/window_ext_lib.aar differ diff --git a/res/layout/accessibility_screen_size_setup_wizard.xml b/res/layout/accessibility_screen_size_setup_wizard.xml new file mode 100644 index 00000000000..e4bc55bb3a6 --- /dev/null +++ b/res/layout/accessibility_screen_size_setup_wizard.xml @@ -0,0 +1,31 @@ + + + + + + \ No newline at end of file diff --git a/res/layout/suw_font_size_fragment.xml b/res/layout/suw_font_size_fragment.xml new file mode 100644 index 00000000000..0e03a6989f5 --- /dev/null +++ b/res/layout/suw_font_size_fragment.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/suw_preview_seek_bar_view_pager.xml b/res/layout/suw_preview_seek_bar_view_pager.xml new file mode 100644 index 00000000000..71ec5f06547 --- /dev/null +++ b/res/layout/suw_preview_seek_bar_view_pager.xml @@ -0,0 +1,42 @@ + + + + + + + + + diff --git a/res/layout/suw_screen_zoom_fragment.xml b/res/layout/suw_screen_zoom_fragment.xml new file mode 100644 index 00000000000..0747381085f --- /dev/null +++ b/res/layout/suw_screen_zoom_fragment.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/values-sw300dp-land-v31/dimens.xml b/res/values-sw300dp-land-v31/dimens.xml new file mode 100644 index 00000000000..fa7d2bf5235 --- /dev/null +++ b/res/values-sw300dp-land-v31/dimens.xml @@ -0,0 +1,19 @@ + + + + + 0dp + \ No newline at end of file diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 2cd944ac040..e1d758467d4 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -434,6 +434,9 @@ 24dp + + -12dp + 6dp 1dp diff --git a/res/values/integers.xml b/res/values/integers.xml index 3d73f64fabe..53543889766 100644 --- a/res/values/integers.xml +++ b/res/values/integers.xml @@ -21,4 +21,9 @@ 102 103 104 + + + 0 + 1 diff --git a/res/values/strings.xml b/res/values/strings.xml index d6f22fbb102..5f2fd54c7dc 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6283,6 +6283,8 @@ Detecting when apps drain battery + + Detecting when apps drain battery Off diff --git a/res/values/styles.xml b/res/values/styles.xml index 8b0b7a23f47..5b3b1c8a357 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -237,6 +237,16 @@ @android:style/TextAppearance.DeviceDefault.Small + + @@ -243,6 +244,7 @@ 16dp @style/PreferenceTheme.SettingsLib @style/Switch.SettingsLib + @style/SetupWizardPreferenceFragmentStyle diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml index a3f56b534d6..d1b4f4a5bab 100644 --- a/res/xml/accessibility_settings_for_setup_wizard.xml +++ b/res/xml/accessibility_settings_for_setup_wizard.xml @@ -21,18 +21,28 @@ android:title="@string/vision_settings_title"> + android:title="@string/title_font_size"> + + + + + android:title="@string/screen_zoom_title"> + + + + { + onBackPressed(); + }; + final FooterButton primaryButton = + new FooterButton.Builder(this) + .setText(R.string.done) + .setListener(nextButtonListener) + .setButtonType(FooterButton.ButtonType.NEXT) + .setTheme(R.style.SudGlifButton_Primary) + .build(); + mixin.setPrimaryButton(primaryButton); + } + + /** + * Scrolls to bottom while {@link ScrollView} layout changed. + */ + private void scrollToBottom() { + final GlifLayout layout = findViewById(R.id.setup_wizard_layout); + final ScrollView scrollView = layout.getScrollView(); + scrollView.getViewTreeObserver().addOnGlobalLayoutListener(() -> { + final int scrollViewHeight = scrollView.getHeight(); + if (scrollViewHeight > 0) { + scrollView.post(() -> { + // Here is no need to show the scrolling animation. So disabled first and + // then enabled it after scrolling finished. + scrollView.setSmoothScrollingEnabled(false); + scrollView.fullScroll(View.FOCUS_DOWN); + scrollView.setSmoothScrollingEnabled(true); + }); + } + }); + } +} diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java index 4e8be420a37..da95df9f590 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java @@ -28,11 +28,11 @@ import android.content.pm.ServiceInfo; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityManager; -import android.widget.LinearLayout; import androidx.preference.Preference; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +42,6 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settingslib.RestrictedPreference; import com.google.android.setupdesign.GlifPreferenceLayout; -import com.google.android.setupdesign.util.ThemeHelper; import java.util.List; @@ -81,16 +80,11 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm super.onViewCreated(view, savedInstanceState); final GlifPreferenceLayout layout = (GlifPreferenceLayout) view; - layout.setDividerInsets(Integer.MAX_VALUE, 0); - layout.setDescriptionText(R.string.vision_settings_description); - layout.setHeaderText(R.string.vision_settings_title); - layout.setIcon(getPrefContext().getDrawable(R.drawable.ic_accessibility_visibility)); - - if (ThemeHelper.shouldApplyExtendedPartnerConfig(getActivity())) { - final LinearLayout headerLayout = layout.findManagedViewById(R.id.sud_layout_header); - headerLayout.setPadding(0, headerLayout.getPaddingTop(), 0, - headerLayout.getPaddingBottom()); - } + final String title = getContext().getString(R.string.vision_settings_title); + final String description = getContext().getString(R.string.vision_settings_description); + final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility); + AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title, + description, icon); } @Override @@ -143,6 +137,13 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm return super.onPreferenceTreeClick(preference); } + /** + * Returns accessibility service info by given package name and service name. + * + * @param packageName Package of accessibility service + * @param serviceName Class of accessibility service + * @return {@link AccessibilityServiceInfo} instance if available, null otherwise. + */ private AccessibilityServiceInfo findService(String packageName, String serviceName) { final AccessibilityManager manager = getActivity().getSystemService(AccessibilityManager.class); @@ -150,8 +151,8 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm manager.getInstalledAccessibilityServiceList(); for (AccessibilityServiceInfo info : accessibilityServices) { ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo; - if (packageName.equals(serviceInfo.packageName) - && serviceName.equals(serviceInfo.name)) { + if (TextUtils.equals(packageName, serviceInfo.packageName) + && TextUtils.equals(serviceName, serviceInfo.name)) { return info; } } diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java index b65b349707c..0625fd28700 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java @@ -16,7 +16,10 @@ package com.android.settings.accessibility; +import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; + import android.content.ComponentName; +import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; @@ -30,7 +33,6 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SetupWizardUtils; import com.android.settings.core.SubSettingLauncher; -import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard; import com.android.settings.search.actionbar.SearchMenuController; import com.android.settings.support.actionbar.HelpResourceProvider; import com.android.settingslib.core.instrumentation.Instrumentable; @@ -123,19 +125,12 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit && new ComponentName(getPackageName(), CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW).equals( getIntent().getComponent())) { - final Bundle args = new Bundle(); - args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0); - args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false); - final SubSettingLauncher subSettingLauncher = new SubSettingLauncher(this) - .setDestination(FontSizePreferenceFragmentForSetupWizard.class.getName()) - .setArguments(args) - .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) - .setExtras(SetupWizardUtils.copyLifecycleExtra(getIntent().getExtras(), - new Bundle())) - .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_FADE); - + final Intent intent = new Intent(this, + AccessibilityScreenSizeForSetupWizardActivity.class); + intent.putExtra(VISION_FRAGMENT_NO, + getResources().getInteger(R.integer.suw_font_size_fragment_no)); + startActivity(intent); Log.d(LOG_TAG, "Launch font size settings"); - subSettingLauncher.launch(); finish(); } } diff --git a/src/com/android/settings/accessibility/AccessibilitySetupWizardUtils.java b/src/com/android/settings/accessibility/AccessibilitySetupWizardUtils.java new file mode 100644 index 00000000000..95b689b73eb --- /dev/null +++ b/src/com/android/settings/accessibility/AccessibilitySetupWizardUtils.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 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.accessibility; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.widget.LinearLayout; + +import com.android.settings.R; + +import com.google.android.setupdesign.GlifPreferenceLayout; +import com.google.android.setupdesign.util.ThemeHelper; + +/** Provides utility methods to accessibility settings for Setup Wizard only. */ +class AccessibilitySetupWizardUtils { + + private AccessibilitySetupWizardUtils(){} + + /** + * Update the {@link GlifPreferenceLayout} attributes if they have previously been initialized. + * When the SetupWizard supports the extended partner configs, it means the material layout + * would be applied. It should set a different padding/margin in views to align Settings style + * for accessibility feature pages. + * + * @param layout The layout instance + * @param title The text to be set as title + * @param description The text to be set as description + * @param icon The icon to be set + */ + public static void updateGlifPreferenceLayout(Context context, GlifPreferenceLayout layout, + CharSequence title, CharSequence description, Drawable icon) { + layout.setHeaderText(title); + layout.setDescriptionText(description); + layout.setIcon(icon); + layout.setDividerInsets(Integer.MAX_VALUE, 0); + + if (ThemeHelper.shouldApplyExtendedPartnerConfig(context)) { + final LinearLayout headerLayout = layout.findManagedViewById(R.id.sud_layout_header); + if (headerLayout != null) { + headerLayout.setPadding(0, layout.getPaddingTop(), 0, + layout.getPaddingBottom()); + } + } + } +} diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java index 016ac059873..ce8c6bf64ef 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java @@ -17,12 +17,44 @@ package com.android.settings.accessibility; import android.app.settings.SettingsEnums; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.RecyclerView; + +import com.android.settings.R; + +import com.google.android.setupdesign.GlifPreferenceLayout; public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard extends ToggleScreenMagnificationPreferenceFragment { + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + final GlifPreferenceLayout layout = (GlifPreferenceLayout) view; + final String title = getContext().getString( + R.string.accessibility_screen_magnification_title); + final String description = getContext().getString(R.string.accelerometer_title); + final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility); + AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title, + description, icon); + + // Hide the setting from the vision settings. + mSettingsPreference.setVisible(false); + } + + @Override + public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, + Bundle savedInstanceState) { + final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent; + return layout.onCreateRecyclerView(inflater, parent, savedInstanceState); + } + @Override public int getMetricsCategory() { return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION; @@ -49,12 +81,4 @@ public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard // Hides help center in action bar and footer bar in SuW return 0; } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - // Hide the setting from the vision settings. - mSettingsPreference.setVisible(false); - } } diff --git a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java index c0d54e8eeed..316ce520600 100644 --- a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java @@ -17,8 +17,17 @@ package com.android.settings.accessibility; import android.app.settings.SettingsEnums; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.RecyclerView; + +import com.android.settings.R; + +import com.google.android.setupdesign.GlifPreferenceLayout; public class ToggleScreenReaderPreferenceFragmentForSetupWizard extends ToggleAccessibilityServicePreferenceFragment { @@ -28,9 +37,25 @@ public class ToggleScreenReaderPreferenceFragmentForSetupWizard @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + + final GlifPreferenceLayout layout = (GlifPreferenceLayout) view; + final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE); + final String description = getContext().getString( + R.string.accessibility_screen_magnification_title); + final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility); + AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title, + description, icon); + mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked(); } + @Override + public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, + Bundle savedInstanceState) { + final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent; + return layout.onCreateRecyclerView(inflater, parent, savedInstanceState); + } + @Override public int getMetricsCategory() { return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER; diff --git a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java index 9ca1f199756..b5c11233ac2 100644 --- a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java @@ -17,8 +17,17 @@ package com.android.settings.accessibility; import android.app.settings.SettingsEnums; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.RecyclerView; + +import com.android.settings.R; + +import com.google.android.setupdesign.GlifPreferenceLayout; public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard extends InvisibleToggleAccessibilityServicePreferenceFragment { @@ -28,9 +37,24 @@ public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + + final GlifPreferenceLayout layout = (GlifPreferenceLayout) view; + final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE); + final String description = getContext().getString(R.string.select_to_speak_summary); + final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility); + AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title, + description, icon); + mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked(); } + @Override + public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, + Bundle savedInstanceState) { + final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent; + return layout.onCreateRecyclerView(inflater, parent, savedInstanceState); + } + @Override public int getMetricsCategory() { return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SELECT_TO_SPEAK; diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java b/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java new file mode 100644 index 00000000000..7585dce5b5f --- /dev/null +++ b/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 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.activityembedding; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.text.TextUtils; + +/** + * A content provider for querying the state of activity embedding feature + */ +public class ActivityEmbeddingProvider extends ContentProvider { + + private static final String METHOD_IS_EMBEDDING_ACTIVITY_ENABLED = "isEmbeddingActivityEnabled"; + private static final String EXTRA_ENABLED_STATE = "enabled_state"; + + @Override + public boolean onCreate() { + return true; + } + + @Override + public Bundle call(String method, String arg, Bundle extras) { + if (TextUtils.equals(method, METHOD_IS_EMBEDDING_ACTIVITY_ENABLED)) { + final Bundle bundle = new Bundle(); + bundle.putBoolean(EXTRA_ENABLED_STATE, + ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())); + return bundle; + } + return null; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + throw new UnsupportedOperationException(); + } + + @Override + public String getType(Uri uri) { + throw new UnsupportedOperationException(); + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + throw new UnsupportedOperationException(); + } + + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + throw new UnsupportedOperationException(); + } + + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java b/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java index 04b6dc33f4a..627f107a69f 100644 --- a/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java @@ -18,9 +18,16 @@ package com.android.settings.display; import android.app.settings.SettingsEnums; +import com.android.settings.R; + public class FontSizePreferenceFragmentForSetupWizard extends ToggleFontSizePreferenceFragment { + @Override + protected int getActivityLayoutResId() { + return R.layout.suw_font_size_fragment; + } + @Override public int getMetricsCategory() { return SettingsEnums.SUW_ACCESSIBILITY_FONT_SIZE; diff --git a/src/com/android/settings/display/PreviewPagerAdapter.java b/src/com/android/settings/display/PreviewPagerAdapter.java index 018be326d1b..a424b1da84e 100644 --- a/src/com/android/settings/display/PreviewPagerAdapter.java +++ b/src/com/android/settings/display/PreviewPagerAdapter.java @@ -109,6 +109,10 @@ public class PreviewPagerAdapter extends PagerAdapter { return (view == object); } + FrameLayout[] getPreviewFrames() { + return mPreviewFrames; + } + boolean isAnimating() { return mAnimationCounter > 0; } diff --git a/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java b/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java index abd14d25d9e..c6d5b8b44a9 100644 --- a/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java +++ b/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java @@ -264,6 +264,12 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc @Override public void onPageSelected(int position) { mPreviewPager.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT); + // To avoid displaying previous page on the left side in SUW landscape mode for + // large size. + if (position > 0) { + mPreviewPagerAdapter.getPreviewFrames()[position - 1].setVisibility(View.INVISIBLE); + } + mPreviewPagerAdapter.getPreviewFrames()[position].setVisibility(View.VISIBLE); } }; diff --git a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java index cfa7b5d4281..7185c63c3f7 100644 --- a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java @@ -18,8 +18,15 @@ package com.android.settings.display; import android.app.settings.SettingsEnums; +import com.android.settings.R; + public class ScreenZoomPreferenceFragmentForSetupWizard extends ScreenZoomSettings { + @Override + protected int getActivityLayoutResId() { + return R.layout.suw_screen_zoom_fragment; + } + @Override public int getMetricsCategory() { return SettingsEnums.SUW_ACCESSIBILITY_DISPLAY_SIZE; diff --git a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java index c84a15e1e86..2e59725cdc1 100644 --- a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java +++ b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java @@ -31,6 +31,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; +import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedTopLevelPreference; @@ -97,7 +98,8 @@ public class TopLevelWallpaperPreferenceController extends BasePreferenceControl if (getPreferenceKey().equals(preference.getKey())) { final Intent intent = new Intent().setComponent( getComponentName()).putExtra(mWallpaperLaunchExtra, LAUNCHED_SETTINGS); - if (areStylesAvailable()) { + if (areStylesAvailable() && !ActivityEmbeddingUtils.isEmbeddingActivityEnabled( + mContext)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); } preference.getContext().startActivity(intent); diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java index 854117978f2..4249c44493f 100644 --- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java @@ -350,7 +350,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll private void addAllPreferences() { final List entries = mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex)); - addFooterPreferenceIfNeeded(!entries.isEmpty()); + addFooterPreferenceIfNeeded(entries != null && !entries.isEmpty()); if (entries == null) { Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex); return; diff --git a/src/com/android/settings/fuelgauge/BatteryChartView.java b/src/com/android/settings/fuelgauge/BatteryChartView.java index 7bc60b23c38..98cfdc8f825 100644 --- a/src/com/android/settings/fuelgauge/BatteryChartView.java +++ b/src/com/android/settings/fuelgauge/BatteryChartView.java @@ -79,12 +79,14 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick private boolean mIsSlotsClickabled; private String[] mPercentages = getPercentages(); - @VisibleForTesting int mSelectedIndex; + @VisibleForTesting int mHoveredIndex = SELECTED_INDEX_INVALID; + @VisibleForTesting int mSelectedIndex = SELECTED_INDEX_INVALID; @VisibleForTesting String[] mTimestamps; // Colors for drawing the trapezoid shape and dividers. private int mTrapezoidColor; private int mTrapezoidSolidColor; + private int mTrapezoidHoverColor; // For drawing the percentage information. private int mTextPadding; private final Rect mIndent = new Rect(); @@ -108,7 +110,7 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick Paint mTrapezoidCurvePaint = null; private TrapezoidSlot[] mTrapezoidSlots; // Records the location to calculate selected index. - private MotionEvent mTouchUpEvent; + private float mTouchUpEventX = Float.MIN_VALUE; private BatteryChartView.OnSelectListener mOnSelectListener; public BatteryChartView(Context context) { @@ -254,21 +256,49 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick public boolean onTouchEvent(MotionEvent event) { // Caches the location to calculate selected trapezoid index. final int action = event.getAction(); - if (action == MotionEvent.ACTION_UP) { - mTouchUpEvent = MotionEvent.obtain(event); - } else if (action == MotionEvent.ACTION_CANCEL) { - mTouchUpEvent = null; // reset + switch (action) { + case MotionEvent.ACTION_UP: + mTouchUpEventX = event.getX(); + break; + case MotionEvent.ACTION_CANCEL: + mTouchUpEventX = Float.MIN_VALUE; // reset + break; } return super.onTouchEvent(event); } + @Override + public boolean onHoverEvent(MotionEvent event) { + final int action = event.getAction(); + switch (action) { + case MotionEvent.ACTION_HOVER_ENTER: + case MotionEvent.ACTION_HOVER_MOVE: + final int trapezoidIndex = getTrapezoidIndex(event.getX()); + if (mHoveredIndex != trapezoidIndex) { + mHoveredIndex = trapezoidIndex; + invalidate(); + } + break; + } + return super.onHoverEvent(event); + } + + @Override + public void onHoverChanged(boolean hovered) { + super.onHoverChanged(hovered); + if (!hovered) { + mHoveredIndex = SELECTED_INDEX_INVALID; // reset + invalidate(); + } + } + @Override public void onClick(View view) { - if (mTouchUpEvent == null) { + if (mTouchUpEventX == Float.MIN_VALUE) { Log.w(TAG, "invalid motion event for onClick() callback"); return; } - final int trapezoidIndex = getTrapezoidIndex(mTouchUpEvent.getX()); + final int trapezoidIndex = getTrapezoidIndex(mTouchUpEventX); // Ignores the click event if the level is zero. if (trapezoidIndex == SELECTED_INDEX_INVALID || !isValidToDraw(trapezoidIndex)) { @@ -347,6 +377,8 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick setBackgroundColor(Color.TRANSPARENT); mTrapezoidSolidColor = Utils.getColorAccentDefaultColor(context); mTrapezoidColor = Utils.getDisabled(context, mTrapezoidSolidColor); + mTrapezoidHoverColor = Utils.getColorAttrDefaultColor(context, + com.android.internal.R.attr.colorAccentSecondaryVariant); // Initializes the divider line paint. final Resources resources = getContext().getResources(); mDividerWidth = resources.getDimensionPixelSize(R.dimen.chartview_divider_width); @@ -494,7 +526,8 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick ? mTrapezoidColor : mSelectedIndex == index || mSelectedIndex == SELECTED_INDEX_ALL ? mTrapezoidSolidColor : mTrapezoidColor; - mTrapezoidPaint.setColor(trapezoidColor); + final boolean isHover = mHoveredIndex == index && isValidToDraw(mHoveredIndex); + mTrapezoidPaint.setColor(isHover ? mTrapezoidHoverColor : trapezoidColor); final float leftTop = round(trapezoidBottom - mLevels[index] * unitHeight); final float rightTop = round(trapezoidBottom - mLevels[index + 1] * unitHeight); diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index a8e0317ff1d..b6d7efee3cc 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -139,6 +139,11 @@ public interface PowerUsageFeatureProvider { */ boolean isChartGraphSlotsEnabled(Context context); + /** + * Checks whether adaptive charging feature is supported in this device + */ + boolean isAdaptiveChargingSupported(); + /** * Gets a intent for one time bypass charge limited to resume charging. */ diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index e2c7800472c..3f47af4e9fa 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -166,6 +166,11 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider return false; } + @Override + public boolean isAdaptiveChargingSupported() { + return false; + } + @Override public Intent getResumeChargeIntent() { return null; diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java index 59a592c6c78..1a7fa38be31 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java @@ -19,6 +19,8 @@ package com.android.settings.fuelgauge.batterysaver; import android.content.ContentResolver; import android.content.Context; import android.net.Uri; +import android.os.Handler; +import android.os.Looper; import android.os.PowerManager; import android.provider.SettingsSlicesContract; import android.widget.Switch; @@ -42,10 +44,12 @@ import com.android.settingslib.widget.OnMainSwitchChangeListener; public class BatterySaverButtonPreferenceController extends TogglePreferenceController implements OnMainSwitchChangeListener, LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener { + private static final long SWITCH_ANIMATION_DURATION = 350L; private final BatterySaverReceiver mBatterySaverReceiver; private final PowerManager mPowerManager; + private Handler mHandler; private MainSwitchPreference mPreference; public BatterySaverButtonPreferenceController(Context context, String key) { @@ -53,6 +57,7 @@ public class BatterySaverButtonPreferenceController extends mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mBatterySaverReceiver = new BatterySaverReceiver(context); mBatterySaverReceiver.setBatterySaverListener(this); + mHandler = new Handler(Looper.getMainLooper()); } @Override @@ -83,6 +88,7 @@ public class BatterySaverButtonPreferenceController extends @Override public void onStop() { mBatterySaverReceiver.setListening(false); + mHandler.removeCallbacksAndMessages(null /* token */); } @Override @@ -114,6 +120,11 @@ public class BatterySaverButtonPreferenceController extends @Override public void onPowerSaveModeChanged() { + mHandler.postDelayed(() -> onPowerSaveModeChangedInternal(), + SWITCH_ANIMATION_DURATION); + } + + private void onPowerSaveModeChangedInternal() { final boolean isChecked = isChecked(); if (mPreference != null && mPreference.isChecked() != isChecked) { mPreference.setChecked(isChecked); diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java index 790264cf313..d920a8ef777 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java @@ -64,7 +64,10 @@ public class BatteryManagerPreferenceController extends BasePreferenceController preference.setSummary(mContext.getResources().getQuantityString( R.plurals.battery_manager_app_restricted, num, num)); } else { - preference.setSummary(R.string.battery_manager_summary); + preference.setSummary( + mPowerUsageFeatureProvider.isAdaptiveChargingSupported() + ? R.string.battery_manager_summary + : R.string.battery_manager_summary_unsupported); } } } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java new file mode 100644 index 00000000000..05e5b3217c0 --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2021 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.accessibility; + +import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.content.Intent; + +import androidx.test.core.app.ApplicationProvider; + +import com.android.settings.R; + +import com.google.android.setupcompat.template.FooterBarMixin; +import com.google.android.setupdesign.GlifLayout; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link AccessibilityScreenSizeForSetupWizardActivity} */ +@RunWith(RobolectricTestRunner.class) +public class AccessibilityScreenSizeForSetupWizardActivityTest { + private static final int DISPLAY_SIZE_FRAGMENT_NO = 1; + + private Context mContext = ApplicationProvider.getApplicationContext(); + private AccessibilityScreenSizeForSetupWizardActivity mActivity; + + @Before + public void setup() { + final Intent intent = new Intent(); + intent.putExtra(VISION_FRAGMENT_NO, + mContext.getResources().getInteger(R.integer.suw_font_size_fragment_no)); + mActivity = Robolectric.buildActivity(AccessibilityScreenSizeForSetupWizardActivity.class, + intent).create().get(); + } + + @Test + public void generateHeader_setPageNoAsFontSize_returnFontSizeTitle() { + mActivity.generateHeader( + mActivity.getResources().getInteger(R.integer.suw_font_size_fragment_no)); + + final GlifLayout layout = mActivity.findViewById(R.id.setup_wizard_layout); + + assertThat(layout.getHeaderText()).isEqualTo(mContext.getText(R.string.title_font_size)); + } + + @Test + public void generateHeader_setPageNoAsDisplaySize_returnDisplaySizeTitle() { + mActivity.generateHeader(DISPLAY_SIZE_FRAGMENT_NO); + + final GlifLayout layout = mActivity.findViewById(R.id.setup_wizard_layout); + + assertThat(layout.getHeaderText()).isEqualTo(mContext.getText(R.string.screen_zoom_title)); + } + + @Test + public void initFooterButton_generateDoneButton() { + mActivity.initFooterButton(); + + final GlifLayout layout = mActivity.findViewById(R.id.setup_wizard_layout); + final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class); + + assertThat(mixin.getPrimaryButton().getText()).isEqualTo(mContext.getText(R.string.done)); + } +} diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java index c3a630b0670..4d9668a6ab0 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java @@ -16,6 +16,7 @@ package com.android.settings.accessibility; +import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; import static com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity.CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW; import static com.google.common.truth.Truth.assertThat; @@ -26,8 +27,6 @@ import android.content.Intent; import androidx.test.filters.SmallTest; import com.android.settings.R; -import com.android.settings.SettingsActivity; -import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard; import com.google.android.setupcompat.util.WizardManagerHelper; @@ -42,45 +41,47 @@ import org.robolectric.Shadows; @SmallTest public class AccessibilitySettingsForSetupWizardActivityTest { - @Test - public void createSetupAccessibilityActivity_shouldBeSUWTheme() { - final Intent intent = new Intent(); - AccessibilitySettingsForSetupWizardActivity activity = - Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, intent).get(); + @Test + public void createSetupAccessibilityActivity_shouldBeSUWTheme() { + final Intent intent = new Intent(); + AccessibilitySettingsForSetupWizardActivity activity = + Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, + intent).get(); - assertThat(activity.getThemeResId()).isEqualTo(R.style.GlifV3Theme_Light); - } + assertThat(activity.getThemeResId()).isEqualTo(R.style.GlifV3Theme_Light); + } - @Test - public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() { - AccessibilitySettingsForSetupWizardActivity activity = - Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, - new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName( - RuntimeEnvironment.application, CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW)). - putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true). - putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get(); + @Test + public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() { + AccessibilitySettingsForSetupWizardActivity activity = + Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, + new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName( + RuntimeEnvironment.application, + CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW)) + .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true) + .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get(); - activity.tryLaunchFontSizeSettings(); + activity.tryLaunchFontSizeSettings(); - final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity(); - assertThat(launchIntent).isNotNull(); - assertThat(launchIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo( - FontSizePreferenceFragmentForSetupWizard.class.getName()); - assertThat(activity.isFinishing()).isTrue(); - } + final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity(); + assertThat(launchIntent).isNotNull(); + assertThat(launchIntent.getIntExtra(VISION_FRAGMENT_NO, -1)).isEqualTo( + activity.getResources().getInteger(R.integer.suw_font_size_fragment_no)); + assertThat(activity.isFinishing()).isTrue(); + } - @Test - public void onCreate_noFontSizeComponent_shouldNotFinishCurrentActivity() { - AccessibilitySettingsForSetupWizardActivity activity = - Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, - new Intent(Intent.ACTION_MAIN). - putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true). - putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get(); + @Test + public void onCreate_noFontSizeComponent_shouldNotFinishCurrentActivity() { + AccessibilitySettingsForSetupWizardActivity activity = + Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, + new Intent(Intent.ACTION_MAIN) + .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true) + .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get(); - activity.tryLaunchFontSizeSettings(); + activity.tryLaunchFontSizeSettings(); - final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity(); - assertThat(launchIntent).isNull(); - assertThat(activity.isFinishing()).isFalse(); - } + final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity(); + assertThat(launchIntent).isNull(); + assertThat(activity.isFinishing()).isFalse(); + } } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySetupWizardUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySetupWizardUtilsTest.java new file mode 100644 index 00000000000..e79b12231c9 --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySetupWizardUtilsTest.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2021 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.accessibility; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.content.Context; +import android.graphics.drawable.Drawable; + +import androidx.test.core.app.ApplicationProvider; + +import com.google.android.setupdesign.GlifPreferenceLayout; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link AccessibilitySetupWizardUtils} */ +@RunWith(RobolectricTestRunner.class) +public class AccessibilitySetupWizardUtilsTest { + + private final Context mContext = ApplicationProvider.getApplicationContext(); + + @Test + public void setupGlifPreferenceLayout_assignValueToVariable() { + final String title = "title"; + final String description = "description"; + final Drawable icon = mock(Drawable.class); + GlifPreferenceLayout layout = mock(GlifPreferenceLayout.class); + + AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(mContext, layout, title, + description, icon); + + verify(layout).setHeaderText(title); + verify(layout).setDescriptionText(description); + verify(layout).setIcon(icon); + verify(layout).setHeaderText(title); + } +} diff --git a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java index 49489865049..c2de51050e8 100644 --- a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java @@ -152,7 +152,8 @@ public class BrightnessLevelPreferenceControllerTest { System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); when(mDisplay.getBrightnessInfo()).thenReturn( - new BrightnessInfo(0.1f, 0.0f, 1.0f, BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF)); + new BrightnessInfo(0.1f, 0.0f, 1.0f, BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF, + 0.5f)); mController.updateState(mPreference); @@ -166,7 +167,8 @@ public class BrightnessLevelPreferenceControllerTest { System.SCREEN_BRIGHTNESS_MODE_MANUAL); when(mDisplay.getBrightnessInfo()).thenReturn( - new BrightnessInfo(0.5f, 0.0f, 1.0f, BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF)); + new BrightnessInfo(0.5f, 0.0f, 1.0f, BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF, + 0.5f)); mController.updateState(mPreference); diff --git a/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java index 6ad99745748..62b34e26546 100644 --- a/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java @@ -29,6 +29,7 @@ import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.testutils.shadow.SettingsShadowResources; +import com.android.settings.testutils.shadow.ShadowActivityEmbeddingUtils; import com.google.common.collect.Lists; @@ -43,7 +44,7 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowPackageManager; @RunWith(RobolectricTestRunner.class) -@Config(shadows = {SettingsShadowResources.class}) +@Config(shadows = {SettingsShadowResources.class, ShadowActivityEmbeddingUtils.class}) public class TopLevelWallpaperPreferenceControllerTest { private static final String TEST_KEY = "test_key"; @@ -204,18 +205,32 @@ public class TopLevelWallpaperPreferenceControllerTest { } @Test - public void handlePreferenceTreeClick_launchClearTask() { - mShadowPackageManager.setResolveInfosForIntent( - mWallpaperIntent, Lists.newArrayList()); + public void handlePreferenceTreeClick_embeddingActivityDisabled_launchWithTaskFlag() { + ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(false); mShadowPackageManager.setResolveInfosForIntent( mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class))); - Preference preference = new Preference(mContext); preference.setKey(TEST_KEY); mController.handlePreferenceTreeClick(preference); - assertThat((Shadows.shadowOf(mContext).getNextStartedActivityForResult() - .intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_TASK) != 0).isTrue(); + int flags = Shadows.shadowOf(mContext).getNextStartedActivityForResult().intent.getFlags(); + assertThat((flags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0).isTrue(); + assertThat((flags & Intent.FLAG_ACTIVITY_CLEAR_TASK) != 0).isTrue(); + } + + @Test + public void handlePreferenceTreeClick_embeddingActivityEnabled_launchWithoutTaskFlag() { + ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true); + mShadowPackageManager.setResolveInfosForIntent( + mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class))); + Preference preference = new Preference(mContext); + preference.setKey(TEST_KEY); + + mController.handlePreferenceTreeClick(preference); + + int flags = Shadows.shadowOf(mContext).getNextStartedActivityForResult().intent.getFlags(); + assertThat((flags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0).isFalse(); + assertThat((flags & Intent.FLAG_ACTIVITY_CLEAR_TASK) != 0).isFalse(); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java index c0b566a5f4b..95cacbbbc0f 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java @@ -156,6 +156,11 @@ public class PowerUsageFeatureProviderImplTest { assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isFalse(); } + @Test + public void testIsAdaptiveChargingSupported_returnFalse() { + assertThat(mPowerFeatureProvider.isAdaptiveChargingSupported()).isFalse(); + } + @Test public void testGetResumeChargeIntent_returnNull() { assertThat(mPowerFeatureProvider.getResumeChargeIntent()).isNull(); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityEmbeddingUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityEmbeddingUtils.java new file mode 100644 index 00000000000..ddd7c8821ae --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityEmbeddingUtils.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 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.testutils.shadow; + +import android.content.Context; + +import com.android.settings.activityembedding.ActivityEmbeddingUtils; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +/** + * Shadow class for {@link ActivityEmbeddingUtils} to test embedding activity features. + */ +@Implements(ActivityEmbeddingUtils.class) +public class ShadowActivityEmbeddingUtils { + private static boolean sIsEmbeddingActivityEnabled; + + @Implementation + public static boolean isEmbeddingActivityEnabled(Context context) { + return sIsEmbeddingActivityEnabled; + } + + public static void setIsEmbeddingActivityEnabled(boolean isEmbeddingActivityEnabled) { + sIsEmbeddingActivityEnabled = isEmbeddingActivityEnabled; + } +}