blob: a5312ce4b72dd55ac81d73c869aeab7812ec1529 [file] [log] [blame]
/*
* Copyright (C) 2024 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.launcher3.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TableRow;
/**
* A row of {@link WidgetCell}s that can be displayed in a table.
*/
public class WidgetTableRow extends TableRow implements WidgetCell.PreviewReadyListener {
private int mNumOfReadyCells;
private int mNumOfCells;
private int mResizeDelay;
public WidgetTableRow(Context context) {
super(context);
}
public WidgetTableRow(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onPreviewAvailable() {
mNumOfReadyCells++;
// Once all previews are loaded, find max visible height and adjust the preview containers.
if (mNumOfReadyCells == mNumOfCells) {
resize();
}
}
private void resize() {
int previewHeight = 0;
// get the maximum height of each widget preview
for (int i = 0; i < getChildCount(); i++) {
WidgetCell widgetCell = (WidgetCell) getChildAt(i);
previewHeight = Math.max(widgetCell.getPreviewContentHeight(), previewHeight);
}
if (mResizeDelay > 0) {
postDelayed(() -> setAlpha(1f), mResizeDelay);
}
if (previewHeight > 0) {
for (int i = 0; i < getChildCount(); i++) {
WidgetCell widgetCell = (WidgetCell) getChildAt(i);
widgetCell.setParentAlignedPreviewHeight(previewHeight);
widgetCell.postDelayed(widgetCell::requestLayout, mResizeDelay);
}
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
/**
* Sets up the row to display the provided number of numOfCells.
*
* @param numOfCells number of numOfCells in the row
* @param resizeDelayMs time to wait in millis before making any layout size adjustments e.g. we
* want to wait for list expand collapse animation before resizing the
* cell previews.
*/
public void setupRow(int numOfCells, int resizeDelayMs) {
mNumOfCells = numOfCells;
mNumOfReadyCells = 0;
mResizeDelay = resizeDelayMs;
// For delayed resize, reveal contents only after resize is done.
if (mResizeDelay > 0) {
setAlpha(0);
}
}
}