Loading quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java +31 −15 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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 Loading @@ -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)); }); }); } Loading Loading
quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java +31 −15 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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 Loading @@ -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)); }); }); } Loading