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

Commit 130d8506 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add extensionController based on PackageManager FEATURE" into oc-mr1-dev

parents 19f12028 bac4b7d1
Loading
Loading
Loading
Loading
+0 −22
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
 * Copyright (c) 2017, 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.
*/
-->
<resources>
    <!-- The height of the quick settings footer that holds the user switcher, settings icon,
         etc. in the car setting.-->
    <dimen name="qs_footer_height">74dp</dimen>
</resources>
+2 −2
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.phone;
import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
import static android.app.StatusBarManager.windowStateToString;
import static android.content.res.Configuration.UI_MODE_TYPE_CAR;

import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
@@ -1169,7 +1168,8 @@ public class StatusBar extends SystemUI implements DemoMode,
            ExtensionFragmentListener.attachExtensonToFragment(container, QS.TAG, R.id.qs_frame,
                    Dependency.get(ExtensionController.class).newExtension(QS.class)
                            .withPlugin(QS.class)
                            .withUiMode(UI_MODE_TYPE_CAR, () -> new CarQSFragment())
                            .withFeature(
                                    PackageManager.FEATURE_AUTOMOTIVE, () -> new CarQSFragment())
                            .withDefault(() -> new QSFragment())
                            .build());
            final QSTileHost qsh = SystemUIFactory.getInstance().createQSTileHost(mContext, this,
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ public interface ExtensionController {
        ExtensionBuilder<T> withDefault(Supplier<T> def);
        ExtensionBuilder<T> withCallback(Consumer<T> callback);
        ExtensionBuilder<T> withUiMode(int mode, Supplier<T> def);
        ExtensionBuilder<T> withFeature(String feature, Supplier<T> def);
        Extension build();
    }

+42 −3
Original line number Diff line number Diff line
@@ -38,8 +38,9 @@ public class ExtensionControllerImpl implements ExtensionController {

    public static final int SORT_ORDER_PLUGIN  = 0;
    public static final int SORT_ORDER_TUNER   = 1;
    public static final int SORT_ORDER_UI_MODE = 2;
    public static final int SORT_ORDER_DEFAULT = 3;
    public static final int SORT_ORDER_FEATURE = 2;
    public static final int SORT_ORDER_UI_MODE = 3;
    public static final int SORT_ORDER_DEFAULT = 4;

    private final Context mDefaultContext;

@@ -92,12 +93,20 @@ public class ExtensionControllerImpl implements ExtensionController {
            return this;
        }

        @Override
        public ExtensionController.ExtensionBuilder<T> withUiMode(int uiMode,
                Supplier<T> supplier) {
            mExtension.addUiMode(uiMode, supplier);
            return this;
        }

        @Override
        public ExtensionController.ExtensionBuilder<T> withFeature(String feature,
                Supplier<T> supplier) {
            mExtension.addFeature(feature, supplier);
            return this;
        }

        @Override
        public ExtensionController.ExtensionBuilder<T> withCallback(
                Consumer<T> callback) {
@@ -107,7 +116,7 @@ public class ExtensionControllerImpl implements ExtensionController {

        @Override
        public ExtensionController.Extension build() {
            // Manually sort, plugins first, tuners second, defaults last.
            // Sort items in ascending order
            Collections.sort(mExtension.mProducers, Comparator.comparingInt(Item::sortOrder));
            mExtension.notifyChanged();
            return mExtension;
@@ -188,6 +197,10 @@ public class ExtensionControllerImpl implements ExtensionController {
            mProducers.add(new UiModeItem(uiMode, mode));
        }

        public void addFeature(String feature, Supplier<T> mode) {
            mProducers.add(new FeatureItem<>(feature, mode));
        }

        private class PluginItem<P extends Plugin> implements Item<T>, PluginListener<P> {
            private final PluginConverter<T, P> mConverter;
            private T mItem;
@@ -305,6 +318,32 @@ public class ExtensionControllerImpl implements ExtensionController {
            }
        }

        private class FeatureItem<T> implements Item<T> {
            private final String mFeature;
            private final Supplier<T> mSupplier;

            public FeatureItem(String feature, Supplier<T> supplier) {
                mSupplier = supplier;
                mFeature = feature;
            }

            @Override
            public T get() {
                return mDefaultContext.getPackageManager().hasSystemFeature(mFeature)
                        ? mSupplier.get() : null;
            }

            @Override
            public void destroy() {

            }

            @Override
            public int sortOrder() {
                return SORT_ORDER_FEATURE;
            }
        }

        private class Default<T> implements Item<T> {
            private final Supplier<T> mSupplier;

+5 −0
Original line number Diff line number Diff line
@@ -80,6 +80,11 @@ public class FakeExtensionController implements ExtensionController {
            return null;
        }

        @Override
        public ExtensionBuilder<T> withFeature(String feature, Supplier<T> def) {
            return null;
        }

        @Override
        public Extension build() {
            return new FakeExtension(mAllocation);