Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f87b783 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fine tune the homepage scrolling behavior" into sc-v2-dev am: 244df10d

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/16182700

Change-Id: Ic2903d78e94cdf49d655b51ce84be85be9a4d634
parents 3a655fd1 244df10d
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -1197,6 +1197,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                       android:value="com.android.settings.security.LockscreenDashboardFragment" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_display"/>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                       android:value="true" />
        </activity>
@@ -1223,6 +1225,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                       android:value="com.android.settings.deviceinfo.legal.ModuleLicensesDashboard" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_about_device"/>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                       android:value="true" />
        </activity>
@@ -1243,6 +1247,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.applications.manageapplications.ManageApplications" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_apps"/>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>
@@ -1266,6 +1272,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                       android:value="com.android.settings.applications.managedomainurls.ManageDomainUrls" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_apps"/>
        </activity>

        <activity android:name="Settings$AppMemoryUsageActivity"
@@ -1278,6 +1286,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                       android:value="com.android.settings.applications.ProcessStatsUi" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_apps"/>
        </activity>

        <activity
@@ -1290,6 +1300,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.applications.manageapplications.ManageApplications" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_apps"/>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>
@@ -1396,6 +1408,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.applications.manageapplications.ManageApplications" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_apps"/>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>
@@ -1417,6 +1431,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.applications.manageapplications.ManageApplications" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_apps"/>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>
@@ -2245,6 +2261,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                       android:value="com.android.settings.network.apn.ApnEditor" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_network"/>
        </activity>

        <activity
@@ -2273,6 +2291,8 @@
                       android:value="com.android.settings.development.DevelopmentSettingsDashboardFragment" />
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                       android:value="true" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_system"/>
        </activity>

        <!-- The opposite of DevelopmentSettingsActivity, it's no-op and only enabled when the real
@@ -2307,6 +2327,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.print.PrintSettingsFragment" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_connected_devices"/>
        </activity>

        <activity android:name="Settings$PrintJobSettingsActivity"
@@ -2319,6 +2341,8 @@
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.print.PrintJobSettingsFragment" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_connected_devices"/>
        </activity>

        <activity android:name=".development.AppPicker"
@@ -2339,7 +2363,10 @@
                  android:label="@string/accessor_info_title" />

        <activity android:name="Settings$WebViewAppPickerActivity"
                  android:label="@string/select_webview_provider_dialog_title" />
                  android:label="@string/select_webview_provider_dialog_title">
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_system"/>
        </activity>

        <activity android:name="Settings$BugReportHandlerPickerActivity"
            android:label="@string/bug_report_handler_title"
@@ -2353,6 +2380,8 @@
                android:value="true" />
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.bugreporthandler.BugReportHandlerPicker" />
            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
                       android:value="@string/menu_key_system"/>
        </activity>

        <activity android:name=".bluetooth.BluetoothPairingDialog"
+7 −3
Original line number Diff line number Diff line
@@ -99,7 +99,9 @@ public class SettingsHomepageActivity extends FragmentActivity implements
        if (mHomepageView == null) {
            return false;
        } else {
            if (!mLoadedListeners.contains(listener)) {
                mLoadedListeners.add(listener);
            }
            return true;
        }
    }
@@ -113,11 +115,13 @@ public class SettingsHomepageActivity extends FragmentActivity implements
            return;
        }
        Log.i(TAG, "showHomepageWithSuggestion: " + showSuggestion);
        final View homepageView = mHomepageView;
        mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
        mHomepageView.setVisibility(View.VISIBLE);
        mHomepageView = null;

        mLoadedListeners.forEach(listener -> listener.onHomepageLoaded());
        mLoadedListeners.clear();
        homepageView.setVisibility(View.VISIBLE);
    }

    @Override
@@ -199,7 +203,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
        mSuggestionView = findViewById(R.id.suggestion_content);
        mHomepageView = findViewById(R.id.settings_homepage_container);
        // Hide the homepage for preparing the suggestion.
        mHomepageView.setVisibility(View.GONE);
        mHomepageView.setVisibility(View.INVISIBLE);
        // Schedule a timer to show the homepage and hide the suggestion on timeout.
        mHomepageView.postDelayed(() -> showHomepageWithSuggestion(false),
                HOMEPAGE_LOADING_TIMEOUT_MS);
+2 −1
Original line number Diff line number Diff line
@@ -201,7 +201,8 @@ public class TopLevelSettings extends DashboardFragment implements

    @Override
    protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())) {
        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())
                || !(getActivity() instanceof SettingsHomepageActivity)) {
            return super.onCreateAdapter(preferenceScreen);
        }

+2 −3
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ public class SearchResultTrampoline extends Activity {

        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) {
            startActivity(intent);
        } else if (isFromSettingsIntelligence(callingActivity)) {
        } else if (isSettingsIntelligence(callingActivity)) {
            // Register SplitPairRule for SubSettings, set clearTop false to prevent unexpected back
            // navigation behavior.
            ActivityEmbeddingRulesController.registerSubSettingsPairRule(this,
@@ -104,7 +104,6 @@ public class SearchResultTrampoline extends Activity {
            startActivity(intent);
        } else {
            // Two-pane case
            intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(SettingsActivity.getTrampolineIntent(intent, highlightMenuKey));
        }

@@ -112,7 +111,7 @@ public class SearchResultTrampoline extends Activity {
        finish();
    }

    private boolean isFromSettingsIntelligence(ComponentName callingActivity) {
    private boolean isSettingsIntelligence(ComponentName callingActivity) {
        return callingActivity != null && TextUtils.equals(
                callingActivity.getPackageName(),
                FeatureFactory.getFactory(this).getSearchFeatureProvider()
+17 −10
Original line number Diff line number Diff line
@@ -38,7 +38,8 @@ import com.android.settings.homepage.SettingsHomepageActivity;
/**
 *  Adapter for highlighting top level preferences
 */
public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapter {
public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapter implements
        SettingsHomepageActivity.HomepageLoadedListener {

    private static final String TAG = "HighlightableTopLevelAdapter";

@@ -60,6 +61,7 @@ public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapt
    private String mHighlightKey;
    private String mPreviousHighlightKey;
    private int mHighlightPosition = RecyclerView.NO_POSITION;
    private int mScrollPosition = RecyclerView.NO_POSITION;
    private boolean mHighlightNeeded;
    private boolean mScrolled;

@@ -135,9 +137,11 @@ public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapt
            return;
        }

        // Scroll before highlight if needed.
        final boolean highlightNeeded = isHighlightNeeded();
        if (highlightNeeded) {
            scrollToPositionIfNeeded(position);
            mScrollPosition = position;
            scroll();
        }

        // Turn on/off highlight when screen split mode is changed.
@@ -189,26 +193,29 @@ public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapt
        requestHighlight();
    }

    private void scrollToPositionIfNeeded(int position) {
        if (mScrolled || position < 0) {
    @Override
    public void onHomepageLoaded() {
        scroll();
    }

    private void scroll() {
        if (mScrolled || mScrollPosition < 0) {
            return;
        }

        if (mHomepageActivity.registerHomepageLoadedListenerIfNeeded(
                () -> scrollToPositionIfNeeded(position))) {
        if (mHomepageActivity.registerHomepageLoadedListenerIfNeeded(this)) {
            return;
        }

        // Only when the recyclerView is loaded, it can be scrolled
        final View view = mRecyclerView.getChildAt(position);
        final View view = mRecyclerView.getChildAt(mScrollPosition);
        if (view == null) {
            mRecyclerView.postDelayed(() -> scrollToPositionIfNeeded(position),
                    DELAY_HIGHLIGHT_DURATION_MILLIS);
            mRecyclerView.postDelayed(() -> scroll(), DELAY_HIGHLIGHT_DURATION_MILLIS);
            return;
        }

        mScrolled = true;
        Log.d(TAG, "Scroll to position " + position);
        Log.d(TAG, "Scroll to position " + mScrollPosition);
        // Scroll to the top to reset the position.
        mRecyclerView.nestedScrollBy(0, -mRecyclerView.getHeight());