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

Commit 05ea3f89 authored by Lyn Han's avatar Lyn Han
Browse files

Empty overflow UI

Bug: 148879187
Bug: 149146374
Test: manual -> bubbles < 5, click into overflow: text shows
Test: manual -> bubbles > 5, click into overflow: overflow bubbles show
Test: atest SystemUITests
Change-Id: Ia5fa3517b0e793952684f573b9a0436bfd15246c
parent 207454b9
Loading
Loading
Loading
Loading
+41 −4
Original line number Diff line number Diff line
@@ -14,8 +14,45 @@
  ~ limitations under the License
  -->

<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/bubble_overflow_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_gravity="center_horizontal">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/bubble_overflow_recycler"
        android:layout_gravity="center_horizontal"
    android:layout_width="match_parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:id="@+id/bubble_overflow_empty_state"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">

        <TextView
            android:id="@+id/bubble_overflow_empty_title"
            android:text="@string/bubble_overflow_empty_title"
            android:fontFamily="@*android:string/config_bodyFontFamilyMedium"
            android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body2"
            android:textColor="?android:attr/textColorSecondary"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"/>

        <TextView
            android:id="@+id/bubble_overflow_empty_subtitle"
            android:fontFamily="@*android:string/config_bodyFontFamily"
            android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body2"
            android:textColor="?android:attr/textColorSecondary"
            android:text="@string/bubble_overflow_empty_subtitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"/>
    </LinearLayout>
</LinearLayout>
+6 −0
Original line number Diff line number Diff line
@@ -1774,6 +1774,12 @@
    <!-- [CHAR LIMIT=150] Notification Importance title: bubble level summary -->
    <string name="notification_channel_summary_bubble">Keeps your attention with a floating shortcut to this content.</string>

    <!-- [CHAR LIMIT=NONE] Empty overflow title -->
    <string name="bubble_overflow_empty_title">No recent bubbles</string>

    <!-- [CHAR LIMIT=NONE] Empty overflow subtitle -->
    <string name="bubble_overflow_empty_subtitle">Recently dismissed bubbles will appear here for easy retrieval.</string>

    <!-- Notification: Control panel: Label that displays when the app's notifications cannot be blocked. -->
    <string name="notification_unblockable_desc">These notifications can\'t be modified.</string>

+14 −3
Original line number Diff line number Diff line
@@ -26,7 +26,10 @@ import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -46,6 +49,7 @@ import javax.inject.Inject;
public class BubbleOverflowActivity extends Activity {
    private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleOverflowActivity" : TAG_BUBBLES;

    private LinearLayout mEmptyState;
    private BubbleController mBubbleController;
    private BubbleOverflowAdapter mAdapter;
    private RecyclerView mRecyclerView;
@@ -64,6 +68,7 @@ public class BubbleOverflowActivity extends Activity {
        setBackgroundColor();

        mMaxBubbles = getResources().getInteger(R.integer.bubbles_max_rendered);
        mEmptyState = findViewById(R.id.bubble_overflow_empty_state);
        mRecyclerView = findViewById(R.id.bubble_overflow_recycler);
        mRecyclerView.setLayoutManager(
                new GridLayoutManager(getApplicationContext(),
@@ -73,9 +78,9 @@ public class BubbleOverflowActivity extends Activity {
                mBubbleController::promoteBubbleFromOverflow);
        mRecyclerView.setAdapter(mAdapter);

        updateData(mBubbleController.getOverflowBubbles());
        onDataChanged(mBubbleController.getOverflowBubbles());
        mBubbleController.setOverflowCallback(() -> {
            updateData(mBubbleController.getOverflowBubbles());
            onDataChanged(mBubbleController.getOverflowBubbles());
        });
    }

@@ -87,7 +92,7 @@ public class BubbleOverflowActivity extends Activity {
        findViewById(android.R.id.content).setBackgroundColor(bgColor);
    }

    void updateData(List<Bubble> bubbles) {
    void onDataChanged(List<Bubble> bubbles) {
        mOverflowBubbles.clear();
        if (bubbles.size() > mMaxBubbles) {
            mOverflowBubbles.addAll(bubbles.subList(mMaxBubbles, bubbles.size()));
@@ -96,6 +101,12 @@ public class BubbleOverflowActivity extends Activity {
        }
        mAdapter.notifyDataSetChanged();

        if (mOverflowBubbles.isEmpty()) {
            mEmptyState.setVisibility(View.VISIBLE);
        } else {
            mEmptyState.setVisibility(View.GONE);
        }

        if (DEBUG_OVERFLOW) {
            Log.d(TAG, "Updated overflow bubbles:\n" + BubbleDebugConfig.formatBubblesString(
                    mOverflowBubbles, /*selected*/ null));