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

Commit 91cdbe58 authored by Hyunyoung Song's avatar Hyunyoung Song Committed by Android (Google) Code Review
Browse files

Merge "Revert "Not using reflection for all limit API"" into ub-launcher3-master

parents fa8df691 9ca02567
Loading
Loading
Loading
Loading
+31 −15
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherApps;
import android.content.pm.LauncherApps.AppUsageLimit;
import android.content.res.Resources;
import android.icu.text.MeasureFormat;
import android.icu.text.MeasureFormat.FormatWidth;
@@ -45,12 +44,12 @@ import com.android.launcher3.Utilities;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.systemui.shared.recents.model.Task;

import java.lang.reflect.Method;
import java.time.Duration;
import java.util.Locale;

public final class DigitalWellBeingToast extends LinearLayout {
    static final Intent OPEN_APP_USAGE_SETTINGS_TEMPLATE = new Intent(ACTION_APP_USAGE_SETTINGS);
    private final LauncherApps mLauncherApps;

    public interface InitializeCallback {
        void call(float saturation, String contentDescription);
@@ -67,7 +66,6 @@ public final class DigitalWellBeingToast extends LinearLayout {
        setLayoutDirection(Utilities.isRtl(getResources()) ?
                View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
        setOnClickListener((view) -> openAppUsageSettings());
        mLauncherApps = context.getSystemService(LauncherApps.class);
    }

    @Override
@@ -81,29 +79,47 @@ public final class DigitalWellBeingToast extends LinearLayout {
    public void initialize(Task task, InitializeCallback callback) {
        mTask = task;
        Utilities.THREAD_POOL_EXECUTOR.execute(() -> {
            final AppUsageLimit usageLimit = mLauncherApps.getAppUsageLimit(
            long appUsageLimitTimeMs = -1;
            long appRemainingTimeMs = -1;

            try {
                final Method getAppUsageLimit = LauncherApps.class.getMethod(
                        "getAppUsageLimit",
                        String.class,
                        UserHandle.class);
                final Object usageLimit = getAppUsageLimit.invoke(
                        getContext().getSystemService(LauncherApps.class),
                        task.getTopComponent().getPackageName(),
                        UserHandle.of(task.key.userId));

            final long appUsageLimitTimeMs =
                    usageLimit != null ? usageLimit.getTotalUsageLimit() : -1;
            final long appRemainingTimeMs =
                    usageLimit != null ? usageLimit.getUsageRemaining() : -1;
                if (usageLimit != null) {
                    final Class appUsageLimitClass = usageLimit.getClass();
                    appUsageLimitTimeMs = (long) appUsageLimitClass.getMethod("getTotalUsageLimit").
                            invoke(usageLimit);
                    appRemainingTimeMs = (long) appUsageLimitClass.getMethod("getUsageRemaining").
                            invoke(usageLimit);
                }
            } catch (Exception e) {
                // Do nothing
            }

            final long appUsageLimitTimeMsFinal = appUsageLimitTimeMs;
            final long appRemainingTimeMsFinal = appRemainingTimeMs;

            post(() -> {
                if (appUsageLimitTimeMs < 0) {
                if (appUsageLimitTimeMsFinal < 0) {
                    setVisibility(GONE);
                } else {
                    setVisibility(VISIBLE);
                    mText.setText(getText(appRemainingTimeMs));
                    mImage.setImageResource(appRemainingTimeMs > 0 ?
                    mText.setText(getText(appRemainingTimeMsFinal));
                    mImage.setImageResource(appRemainingTimeMsFinal > 0 ?
                            R.drawable.hourglass_top : R.drawable.hourglass_bottom);
                }

                callback.call(
                        appUsageLimitTimeMs >= 0 && appRemainingTimeMs <= 0 ? 0 : 1,
                        appUsageLimitTimeMsFinal >= 0 && appRemainingTimeMsFinal <= 0 ? 0 : 1,
                        getContentDescriptionForTask(
                                task, appUsageLimitTimeMs, appRemainingTimeMs));
                                task, appUsageLimitTimeMsFinal, appRemainingTimeMsFinal));
            });
        });
    }