From 9ca02567ddcc04f33e2a95348b750151e0a334be Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Thu, 7 Feb 2019 19:29:16 +0000 Subject: Revert "Not using reflection for all limit API" This reverts commit 8baf9214169362ff4afa5f16a5204138949a26a8. Reason for revert: Constant crash whenever entering recents view Change-Id: I695aa43686367379b3921a2665db490f6ac983a1 --- .../quickstep/views/DigitalWellBeingToast.java | 46 +++++++++++++++------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java b/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java index 4e8bbe64c..bbcd4255c 100644 --- a/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java +++ b/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java @@ -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( - task.getTopComponent().getPackageName(), - UserHandle.of(task.key.userId)); + 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)); + + 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 appUsageLimitTimeMs = - usageLimit != null ? usageLimit.getTotalUsageLimit() : -1; - final long appRemainingTimeMs = - usageLimit != null ? usageLimit.getUsageRemaining() : -1; + 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)); }); }); } -- cgit v1.2.3