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

Commit 9ca02567 authored by Hyunyoung Song's avatar Hyunyoung Song
Browse files

Revert "Not using reflection for all limit API"

This reverts commit 8baf9214.

Reason for revert: Constant crash whenever entering recents view

Change-Id: I695aa43686367379b3921a2665db490f6ac983a1
parent 8baf9214
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));
            });
        });
    }