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

This commit is contained in:
Hyunyoung Song
2019-02-07 20:15:49 +00:00
committed by Android (Google) Code Review

View File

@@ -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;
final long appUsageLimitTimeMs =
usageLimit != null ? usageLimit.getTotalUsageLimit() : -1;
final long appRemainingTimeMs =
usageLimit != null ? usageLimit.getUsageRemaining() : -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 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));
});
});
}