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

Commit 87910acc authored by Brad Stenning's avatar Brad Stenning Committed by android-build-merger
Browse files

Merge "Register the status bar CarFacetButtons with their controller when the...

Merge "Register the status bar CarFacetButtons with their controller when the system bars are reset" into qt-dev am: 72f128f8
am: 8d004dd0

Change-Id: I4c1c7a06f31f1d7788f8f96ccde52838ffda098b
parents 704f8cda 8d004dd0
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Intent;
import android.content.res.TypedArray;
import android.os.UserHandle;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -203,4 +204,16 @@ public class CarFacetButton extends LinearLayout {
            mMoreIcon.setVisibility(showMoreIcon ? VISIBLE : GONE);
        }
    }

    /**
     * @return The id of the display the button is on or Display.INVALID_DISPLAY if it's not yet on
     *         a display.
     */
    public int getDisplayId() {
        Display display = getDisplay();
        if (display == null) {
            return Display.INVALID_DISPLAY;
        }
        return display.getDisplayId();
    }
}
+68 −36
Original line number Diff line number Diff line
@@ -22,10 +22,13 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.view.Display;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

@@ -40,15 +43,16 @@ import javax.inject.Singleton;
@Singleton
public class CarFacetButtonController {

    protected HashMap<String, CarFacetButton> mButtonsByCategory = new HashMap<>();
    protected HashMap<String, CarFacetButton> mButtonsByPackage = new HashMap<>();
    protected HashMap<String, CarFacetButton> mButtonsByComponentName = new HashMap<>();
    protected CarFacetButton mSelectedFacetButton;
    protected ButtonMap mButtonsByCategory = new ButtonMap();
    protected ButtonMap mButtonsByPackage = new ButtonMap();
    protected ButtonMap mButtonsByComponentName = new ButtonMap();
    protected HashSet<CarFacetButton> mSelectedFacetButtons;
    protected Context mContext;

    @Inject
    public CarFacetButtonController(Context context) {
        mContext = context;
        mSelectedFacetButtons = new HashSet<>();
    }

    /**
@@ -59,27 +63,40 @@ public class CarFacetButtonController {
    public void addFacetButton(CarFacetButton facetButton) {
        String[] categories = facetButton.getCategories();
        for (int i = 0; i < categories.length; i++) {
            mButtonsByCategory.put(categories[i], facetButton);
            mButtonsByCategory.add(categories[i], facetButton);
        }

        String[] facetPackages = facetButton.getFacetPackages();
        for (int i = 0; i < facetPackages.length; i++) {
            mButtonsByPackage.put(facetPackages[i], facetButton);
            mButtonsByPackage.add(facetPackages[i], facetButton);
        }
        String[] componentNames = facetButton.getComponentName();
        for (int i = 0; i < componentNames.length; i++) {
            mButtonsByComponentName.put(componentNames[i], facetButton);
            mButtonsByComponentName.add(componentNames[i], facetButton);
        }
        // Using the following as a default button for display id info it's not
        // attached to a screen at this point so it can't be extracted here.
        mSelectedFacetButton = facetButton;
    }

    public void removeAll() {
        mButtonsByCategory.clear();
        mButtonsByPackage.clear();
        mButtonsByComponentName.clear();
        mSelectedFacetButton = null;
        mSelectedFacetButtons.clear();
    }

    /**
     * Iterate through a view looking for CarFacetButtons and adding them to the controller if found
     *
     * @param v the View that may contain CarFacetButtons
     */
    public void addAllFacetButtons(View v) {
        if (v instanceof CarFacetButton) {
            addFacetButton((CarFacetButton) v);
        } else if (v instanceof ViewGroup) {
            ViewGroup viewGroup = (ViewGroup) v;
            for (int i = 0; i < viewGroup.getChildCount(); i++) {
                addAllFacetButtons(viewGroup.getChildAt(i));
            }
        }
    }

    /**
@@ -94,12 +111,10 @@ public class CarFacetButtonController {
     * @param stackInfoList of the currently running application
     */
    public void taskChanged(List<ActivityManager.StackInfo> stackInfoList) {
        int displayId = getDisplayId();
        ActivityManager.StackInfo validStackInfo = null;
        for (ActivityManager.StackInfo stackInfo :stackInfoList) {
            // If the display id is unknown or it matches the stack, it's valid for use
            if ((displayId == -1 || displayId == stackInfo.displayId)
                    && stackInfo.topActivity != null) {
            // Find the first stack info with a topActivity
            if (stackInfo.topActivity != null) {
                validStackInfo = stackInfo;
                break;
            }
@@ -110,12 +125,20 @@ public class CarFacetButtonController {
            return;
        }

        if (mSelectedFacetButton != null) {
            mSelectedFacetButton.setSelected(false);
        if (mSelectedFacetButtons != null) {
            Iterator<CarFacetButton> iterator = mSelectedFacetButtons.iterator();
            while(iterator.hasNext()) {
                CarFacetButton carFacetButton = iterator.next();
                if (carFacetButton.getDisplayId() == validStackInfo.displayId) {
                    carFacetButton.setSelected(false);
                    iterator.remove();
                }
            }
        }

        String packageName = validStackInfo.topActivity.getPackageName();
        CarFacetButton facetButton = findFacetButtongByComponentName(validStackInfo.topActivity);
        HashSet<CarFacetButton> facetButton =
                findFacetButtonByComponentName(validStackInfo.topActivity);
        if (facetButton == null) {
            facetButton = mButtonsByPackage.get(packageName);
        }
@@ -127,26 +150,21 @@ public class CarFacetButtonController {
            }
        }

        if (facetButton != null && facetButton.getVisibility() == View.VISIBLE) {
            facetButton.setSelected(true);
            mSelectedFacetButton = facetButton;
        if (facetButton != null) {
            for (CarFacetButton carFacetButton : facetButton) {
                if (carFacetButton.getDisplayId() == validStackInfo.displayId) {
                    carFacetButton.setSelected(true);
                    mSelectedFacetButtons.add(carFacetButton);
                }

    }

    private int getDisplayId() {
        if (mSelectedFacetButton != null) {
            Display display = mSelectedFacetButton.getDisplay();
            if (display != null) {
                return display.getDisplayId();
            }
        }
        return -1;

    }

    private CarFacetButton findFacetButtongByComponentName(ComponentName componentName) {
        CarFacetButton button = mButtonsByComponentName.get(componentName.flattenToShortString());
        return (button != null) ? button :
    private HashSet<CarFacetButton> findFacetButtonByComponentName(ComponentName componentName) {
        HashSet<CarFacetButton> buttons =
                mButtonsByComponentName.get(componentName.flattenToShortString());
        return (buttons != null) ? buttons :
                mButtonsByComponentName.get(componentName.flattenToString());
    }

@@ -168,4 +186,18 @@ public class CarFacetButtonController {
        }
        return null;
    }

    // simple multi-map
    private static class ButtonMap extends HashMap<String, HashSet<CarFacetButton>> {

        public boolean add(String key, CarFacetButton value) {
            if (containsKey(key)) {
                return get(key).add(value);
            }
            HashSet<CarFacetButton> set = new HashSet<>();
            set.add(value);
            put(key, set);
            return true;
        }
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -187,11 +187,13 @@ public class CarStatusBar extends StatusBar implements
        if (mIsKeyguard) {
            updateNavBarForKeyguardContent();
        }
        // CarFacetButtonController was reset therefore we need to re-add the status bar elements
        // to the controller.
        mCarFacetButtonController.addAllFacetButtons(mStatusBarWindow);
    }

    private void addTemperatureViewToController(View v) {
        if (v instanceof TemperatureView) {
            Log.d(TAG, "addTemperatureViewToController: found ");
            mHvacController.addHvacTextView((TemperatureView) v);
        } else if (v instanceof ViewGroup) {
            ViewGroup viewGroup = (ViewGroup) v;