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

Commit a5acd0e9 authored by Joel Galenson's avatar Joel Galenson
Browse files

Show usage duration in Permissions Hub.

In addition to showing the number of accesses we can also show
duration (for permissions where that makes sense).

I also fixed the strings to correctly say "access" instead of
"accesses" when there is only one access.

Test: Open Permissions Hub, see singular and plural strings with and
without duration.

Change-Id: I9330a257a06eef0c9ec3fe0bdc63e724956afd57
parent 200dc55b
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -256,10 +256,28 @@
    <string name="permission_usage_title">Permissions usage</string>

    <!-- Summary for showing a single permission access and the number of accesses [CHAR LIMIT=80] -->
    <string name="permission_usage_summary">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> accesses</string>
    <plurals name="permission_usage_summary">
        <item quantity="one">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> access</item>
        <item quantity="other">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> accesses</item>
    </plurals>

    <!-- Summary for showing a single permission access and the number of accesses, including those in the background [CHAR LIMIT=80] -->
    <string name="permission_usage_summary_background">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> accesses (<xliff:g id="num" example="7">%3$s</xliff:g> in background)</string>
    <plurals name="permission_usage_summary_background">
        <item quantity="one">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> access (<xliff:g id="num" example="7">%3$s</xliff:g> in background)</item>
        <item quantity="other">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> accesses (<xliff:g id="num" example="7">%3$s</xliff:g> in background)</item>
    </plurals>

    <!-- Summary for showing a single permission access and the number of accesses [CHAR LIMIT=120] -->
    <plurals name="permission_usage_summary_duration">
        <item quantity="one">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> access\nDuration: <xliff:g id="time" example="2 hours">%3$s</xliff:g></item>
        <item quantity="other">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> accesses\nDuration: <xliff:g id="time" example="2 hours">%3$s</xliff:g></item>
    </plurals>

    <!-- Summary for showing a single permission access and the number of accesses, including those in the background [CHAR LIMIT=120] -->
    <plurals name="permission_usage_summary_background_duration">
        <item quantity="one">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> access (<xliff:g id="num" example="7">%3$s</xliff:g> in background)\nDuration: <xliff:g id="time" example="2 hours">%3$s</xliff:g></item>
        <item quantity="other">Last access: <xliff:g id="time" example="12:10 PM">%1$s</xliff:g>\n<xliff:g id="num" example="42">%2$s</xliff:g> accesses (<xliff:g id="num" example="7">%3$s</xliff:g> in background)\nDuration: <xliff:g id="time" example="2 hours">%3$s</xliff:g></item>
    </plurals>

    <!-- Description for showing permission accesses with any permission [CHAR LIMIT=30] -->
    <string name="permission_usage_any_permission">Any permission</string>
+33 −6
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.packageinstaller.permission.ui.handheld;

import static android.Manifest.permission_group.CAMERA;
import static android.Manifest.permission_group.MICROPHONE;

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
@@ -34,6 +37,7 @@ import androidx.preference.PreferenceViewHolder;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissionUsage.GroupUsage;
import com.android.packageinstaller.permission.ui.AppPermissionActivity;
import com.android.packageinstaller.permission.utils.Utils;
import com.android.permissioncontroller.R;

import java.util.List;
@@ -121,13 +125,36 @@ public class PermissionControlPreference extends Preference {
     * @param accessTimeStr the string representing the last access time
     */
    public void setUsageSummary(@NonNull GroupUsage groupUsage, @NonNull String accessTimeStr) {
        if (groupUsage.getBackgroundAccessCount() == 0) {
            setSummary(mContext.getString(R.string.permission_usage_summary, accessTimeStr,
                    groupUsage.getForegroundAccessCount()));
        long backgroundAccessCount = groupUsage.getBackgroundAccessCount();
        long duration = 0;
        String groupName = groupUsage.getGroup().getName();
        if (groupName.equals(CAMERA) || groupName.equals(MICROPHONE)) {
            duration = groupUsage.getAccessDuration();
        }
        if (backgroundAccessCount == 0) {
            long numForegroundAccesses = groupUsage.getForegroundAccessCount();
            if (duration == 0) {
                setSummary(mContext.getResources().getQuantityString(
                        R.plurals.permission_usage_summary, (int) numForegroundAccesses,
                        accessTimeStr, numForegroundAccesses));
            } else {
                setSummary(mContext.getResources().getQuantityString(
                        R.plurals.permission_usage_summary_duration, (int) numForegroundAccesses,
                        accessTimeStr, numForegroundAccesses,
                        Utils.getUsageDurationString(mContext, groupUsage)));
            }
        } else {
            setSummary(
                    mContext.getString(R.string.permission_usage_summary_background, accessTimeStr,
                            groupUsage.getAccessCount(), groupUsage.getBackgroundAccessCount()));
            long numAccesses = groupUsage.getAccessCount();
            if (duration == 0) {
                setSummary(mContext.getResources().getQuantityString(
                        R.plurals.permission_usage_summary_background, (int) numAccesses,
                        accessTimeStr, numAccesses, backgroundAccessCount));
            } else {
                setSummary(mContext.getResources().getQuantityString(
                        R.plurals.permission_usage_summary_background_duration, (int) numAccesses,
                        accessTimeStr, numAccesses, backgroundAccessCount,
                        Utils.getUsageDurationString(mContext, groupUsage)));
            }
        }
    }

+3 −4
Original line number Diff line number Diff line
@@ -573,16 +573,15 @@ public final class Utils {
    /**
     * Build a string representing the duration of a permission usage.
     *
     * @return a string representing the amount of time since this app's most recent permission
     * usage or null if there are no usages.
     * @return a string representing the duration of this app's usage or null if there are no
     * usages.
     */
    public static @Nullable String getUsageDurationString(@NonNull Context context,
            @Nullable AppPermissionUsage.GroupUsage groupUsage) {
        if (groupUsage == null) {
            return null;
        }
        return getTimeDiffStr(context, System.currentTimeMillis()
                - groupUsage.getAccessDuration());
        return getTimeDiffStr(context, groupUsage.getAccessDuration());
    }

    /**