From 0c7c59f1b933e3e1a0060611d4cd6a7febc73460 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 26 Oct 2018 13:40:38 -0700 Subject: [PATCH 1/2] Make android.settings.SETTINGS intent go into homepage. Change-Id: Ib7453a79a473410c44bdcf06019446cedd34f837 Fixes: 117281845 Test: robotests --- AndroidManifest.xml | 19 ++++---- .../android/settings/SettingsActivity.java | 8 +--- .../homepage/SettingsHomepageActivity.java | 11 ++--- .../settings/SettingsActivityTest.java | 14 +++--- .../SettingsHomepageActivityTest.java | 47 +++++++++++++++++++ 5 files changed, 67 insertions(+), 32 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index bc832efcd87..1ffdba16ac2 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -111,13 +111,9 @@ - - - - - @@ -126,6 +122,12 @@ android:label="@string/settings_label_launcher" android:theme="@style/Theme.Settings.Home" android:launchMode="singleTask"> + + + + + - + android:exported="false" /> - - + android:exported="true" /> diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 8881fc2f56c..8ed368ca490 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -16,8 +16,6 @@ package com.android.settings; -import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO; - import android.app.ActionBar; import android.app.ActivityManager; import android.content.BroadcastReceiver; @@ -248,10 +246,8 @@ public class SettingsActivity extends SettingsBaseActivity // Getting Intent properties can only be done after the super.onCreate(...) final String initialFragmentName = intent.getStringExtra(EXTRA_SHOW_FRAGMENT); - final ComponentName cn = intent.getComponent(); - final String className = cn.getClassName(); - - mIsShowingDashboard = className.equals(Settings.class.getName()); + mIsShowingDashboard = TextUtils.equals( + SettingsActivity.class.getName(), intent.getComponent().getClassName()); // This is a "Sub Settings" when: // - this is a real SubSettings diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index b3d1aa43ff5..c10543dab6d 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -16,7 +16,6 @@ package com.android.settings.homepage; -import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.FeatureFlagUtils; @@ -27,6 +26,7 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.android.settings.R; +import com.android.settings.SettingsActivity; import com.android.settings.core.FeatureFlags; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.homepage.contextualcards.ContextualCardsFragment; @@ -38,9 +38,8 @@ public class SettingsHomepageActivity extends SettingsBaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (!isDynamicHomepageEnabled(this)) { - final Intent settings = new Intent(); - settings.setAction("android.settings.SETTINGS"); + if (!FeatureFlagUtils.isEnabled(this, FeatureFlags.DYNAMIC_HOMEPAGE)) { + final Intent settings = new Intent(this, SettingsActivity.class); startActivity(settings); finish(); return; @@ -56,10 +55,6 @@ public class SettingsHomepageActivity extends SettingsBaseActivity { showFragment(new TopLevelSettings(), R.id.main_content); } - public static boolean isDynamicHomepageEnabled(Context context) { - return FeatureFlagUtils.isEnabled(context, FeatureFlags.DYNAMIC_HOMEPAGE); - } - private void showFragment(Fragment fragment, int id) { final FragmentManager fragmentManager = getSupportFragmentManager(); final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java index 409512eb140..af25f4835df 100644 --- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java +++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java @@ -71,10 +71,9 @@ public class SettingsActivityTest { @Test public void onCreate_deviceNotProvisioned_shouldDisableSearch() { Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0); - final Intent intent = new Intent(mContext, Settings.class); - final SettingsActivity activity = - Robolectric.buildActivity(SettingsActivity.class, intent).create( - Bundle.EMPTY).get(); + final SettingsActivity activity = Robolectric.buildActivity(SettingsActivity.class) + .create(Bundle.EMPTY) + .get(); assertThat(activity.findViewById(R.id.search_bar).getVisibility()) .isEqualTo(View.INVISIBLE); @@ -83,10 +82,9 @@ public class SettingsActivityTest { @Test public void onCreate_deviceProvisioned_shouldEnableSearch() { Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1); - final Intent intent = new Intent(mContext, Settings.class); - final SettingsActivity activity = - Robolectric.buildActivity(SettingsActivity.class, intent).create( - Bundle.EMPTY).get(); + final SettingsActivity activity = Robolectric.buildActivity(SettingsActivity.class) + .create(Bundle.EMPTY) + .get(); assertThat(activity.findViewById(R.id.search_bar).getVisibility()).isEqualTo(View.VISIBLE); } diff --git a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java new file mode 100644 index 00000000000..f1228194d49 --- /dev/null +++ b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java @@ -0,0 +1,47 @@ +/* + * 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.homepage; + +import static com.google.common.truth.Truth.assertThat; + +import android.util.FeatureFlagUtils; + +import com.android.settings.SettingsActivity; +import com.android.settings.core.FeatureFlags; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.Shadows; +import org.robolectric.shadows.ShadowActivity; + +@RunWith(SettingsRobolectricTestRunner.class) +public class SettingsHomepageActivityTest { + + @Test + public void launch_featureFlagOff_shouldRedirectToSettingsActivity() { + FeatureFlagUtils.setEnabled(RuntimeEnvironment.application, FeatureFlags.DYNAMIC_HOMEPAGE, + false); + + final ShadowActivity shadowActivity = Shadows.shadowOf( + Robolectric.setupActivity(SettingsHomepageActivity.class)); + assertThat(shadowActivity.getNextStartedActivity().getComponent().getClassName()) + .isEqualTo(SettingsActivity.class.getName()); + } +} From 293883b2fe991df43bfa7b75ed05761ca17652df Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 26 Oct 2018 14:53:12 -0700 Subject: [PATCH 2/2] Report fully drawn when all settings are loaded. We do not want to wait for contextual cards in app start instrumentation, as user can already do everything in settings without them. Change-Id: I57d59aa3d623bf6911972ec310d558c25e44bf14 Fixes: 117494071 Fixes: 118495692 Test: perftest --- src/com/android/settings/dashboard/DashboardFragment.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index be59ca11c70..0cda9eef411 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -321,6 +321,12 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment displayResourceTiles(); refreshDashboardTiles(TAG); + + final Activity activity = getActivity(); + if (activity != null) { + Log.d(TAG, "All preferences added, reporting fully drawn"); + activity.reportFullyDrawn(); + } } /**