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

Commit 5e3cc533 authored by Svet Ganov's avatar Svet Ganov
Browse files

Polish permissions review UI.

This change adds a more info button to the permission
grant UI and the permission review UI which sends the
user to the all permissions screen.

It also adds UI to manage all permissions in the SMS
group individually. Now tapping on the switch in the app
permissions screen toggles the permission group and
tapping on the permission name sends the user to the
detailed permission-level management UI.

Lastly, this change adds management controls to each SMS
permission in the all permissions screen where tapping on
the switch toggles the permission and tapping on the
name as before shows a detailed description.

Change-Id: I1d6cbc478c789e7680f41b92b9f3fa2504576ecd
parent 825244ea
Loading
Loading
Loading
Loading
+42 −24
Original line number Diff line number Diff line
@@ -64,28 +64,44 @@
                android:visibility="gone">
            </CheckBox>

            <com.android.packageinstaller.permission.ui.ButtonBarLayout
                android:id="@+id/button_group"
                android:layout_width="match_parent"
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:paddingStart="6dip"
                android:paddingTop="4dp"
                android:paddingBottom="4dp"
                android:gravity="bottom">
                android:paddingBottom="4dp">

                <TextView
                    android:id="@+id/current_page_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_gravity="bottom"
                    android:paddingEnd="12dp"
                    android:singleLine="true"
                    style="?android:attr/textAppearanceSmall"
                    android:textColor="?android:attr/textColorSecondary"
                    android:visibility="invisible">
                    android:visibility="gone">
                </TextView>

                <Button
                    android:id="@+id/permission_more_info_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    style="?android:attr/buttonBarButtonStyle"
                    android:text="@string/grant_dialog_button_more_info"
                    android:visibility="gone">
                </Button>

                <com.android.packageinstaller.permission.ui.ButtonBarLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:layout_weight="1"
                    android:orientation="horizontal"
                    android:gravity="bottom">

                    <Space
                        android:id="@+id/spacer"
                        android:layout_width="0dp"
@@ -116,4 +132,6 @@

        </LinearLayout>

    </LinearLayout>

</com.android.packageinstaller.permission.ui.ManualLayoutFrame>
+38 −17
Original line number Diff line number Diff line
@@ -27,13 +27,13 @@
        android:layout_height="wrap_content"
        android:layout_marginStart="16dip"
        android:layout_marginEnd="16dip"
        android:layout_marginBottom="16dip"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/app_icon"
            android:layout_width="36dip"
            android:layout_height="36dip"
            android:tint="?android:attr/colorAccent"
            android:scaleType="fitCenter">
        </ImageView>

@@ -56,26 +56,44 @@
        android:layout_weight="1">
    </FrameLayout>

    <com.android.packageinstaller.permission.ui.ButtonBarLayout
        android:layout_width="match_parent"
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingStart="2dip"
        android:paddingTop="16dip">

        <Button
            android:id="@+id/permission_more_info_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            style="?android:attr/buttonBarButtonStyle"
            android:text="@string/grant_dialog_button_more_info">
        </Button>

        <Space
            android:id="@+id/spacer"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:visibility="invisible" />
            android:visibility="invisible">
        </Space>

        <com.android.packageinstaller.permission.ui.ButtonBarLayout
            android:id="@+id/button_group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:orientation="horizontal"
            android:gravity="bottom">

            <Button
                android:id="@+id/cancel_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="?android:attr/buttonBarButtonStyle"
            android:text="@string/review_button_cancel" />
                android:text="@string/review_button_cancel">
            </Button>

            <Button
                android:id="@+id/continue_button"
@@ -83,8 +101,11 @@
                android:layout_height="wrap_content"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_marginStart="8dip"
            android:text="@string/review_button_continue" />
                android:text="@string/review_button_continue">
            </Button>

        </com.android.packageinstaller.permission.ui.ButtonBarLayout>

    </LinearLayout>

</LinearLayout>
+14 −2
Original line number Diff line number Diff line
@@ -162,6 +162,9 @@
    <!-- Title for the dialog button to deny a permission grant. -->
    <string name="grant_dialog_button_deny">Deny</string>

    <!-- Title for the dialog button to get more info about a permission. -->
    <string name="grant_dialog_button_more_info">More info</string>

    <!-- Title for the dialog button to deny a permission grant despite a warning of implications. -->
    <string name="grant_dialog_button_deny_anyway">Deny anyway</string>

@@ -175,6 +178,15 @@
        &lt;b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g>&lt;/b> to
        <xliff:g id="action" example="do something">%2$s</xliff:g>?</string>

    <!-- Template for the message how many permissions are disabled. -->
    <string name="permission_revoked_count"><xliff:g id="count" example="2">%1$d</xliff:g> disabled</string>

    <!-- Message that all permissions are disabled. -->
    <string name="permission_revoked_all">all disabled</string>

    <!-- Message that no permissions are disabled. -->
    <string name="permission_revoked_none">none disabled</string>

    <!-- Permissions -->

    <!-- Title for the dialog button to allow a permission grant. -->
@@ -280,11 +292,11 @@

    <!-- Template for the screen title when app permissions are reviewed on install. -->
    <string name="permission_review_title_template_install">Choose what to allow
        <xliff:g id="app_name" example="Gmail">%1$s</xliff:g> to access</string>
        &lt;b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g>&lt;/b> to access</string>

    <!-- Template for the screen title when app permissions are reviewed on update. -->
    <string name="permission_review_title_template_update">
        <xliff:g id="app_name" example="Gmail">%1$s</xliff:g> has been updated.
        &lt;b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g>&lt;/b> has been updated.
        Choose what to allow this app to access.</string>

    <!-- Title for the dialog button to cancel the detailed permission review. -->
+8 −8
Original line number Diff line number Diff line
@@ -206,7 +206,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        }
    }

    public boolean hasRuntimePermission() {
    public boolean doesSupportRuntimePermissions() {
        return mAppSupportsRuntimePermissions;
    }

@@ -353,7 +353,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
                    // no longer has it fixed in a denied state.
                    if (permission.isUserFixed() || permission.isUserSet()) {
                        permission.setUserFixed(false);
                        permission.setUserSet(true);
                        permission.setUserSet(false);
                        mPackageManager.updatePermissionFlags(permission.getName(),
                                mPackageInfo.packageName,
                                PackageManager.FLAG_PERMISSION_USER_FIXED
@@ -538,11 +538,11 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        final int permissionCount = mPermissions.size();
        for (int i = 0; i < permissionCount; i++) {
            Permission permission = mPermissions.valueAt(i);
            if (!permission.isUserFixed()) {
                return false;
            if (permission.isUserFixed()) {
                return true;
            }
        }
        return true;
        return false;
    }

    public boolean isPolicyFixed() {
@@ -560,11 +560,11 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
        final int permissionCount = mPermissions.size();
        for (int i = 0; i < permissionCount; i++) {
            Permission permission = mPermissions.valueAt(i);
            if (!permission.isUserSet()) {
                return false;
            if (permission.isUserSet()) {
                return true;
            }
        }
        return true;
        return false;
    }

    public boolean isSystemFixed() {
+18 −30
Original line number Diff line number Diff line
@@ -19,12 +19,7 @@ package com.android.packageinstaller.permission.model;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.text.BidiFormatter;
import android.text.TextPaint;
import android.text.TextUtils;

import com.android.packageinstaller.DeviceUtils;

import java.util.ArrayList;
import java.util.Collections;
@@ -48,11 +43,11 @@ public final class AppPermissions {

    private PackageInfo mPackageInfo;

    public AppPermissions(Context context, PackageInfo packageInfo, String[] permissions,
    public AppPermissions(Context context, PackageInfo packageInfo, String[] filterPermissions,
            boolean sortGroups, Runnable onErrorCallback) {
        mContext = context;
        mPackageInfo = packageInfo;
        mFilterPermissions = permissions;
        mFilterPermissions = filterPermissions;
        mAppLabel = BidiFormatter.getInstance().unicodeWrap(
                packageInfo.applicationInfo.loadSafeLabel(
                context.getPackageManager()).toString());
@@ -121,34 +116,13 @@ public final class AppPermissions {
                    if (!filterPermission.equals(requestedPerm)) {
                        continue;
                    }

                    if (hasGroupForPermission(requestedPerm)) {
                        break;
                    }

                    AppPermissionGroup group = AppPermissionGroup.create(mContext,
                            mPackageInfo, requestedPerm);
                    if (group == null) {
                        break;
                    }

                    mGroups.add(group);
                    addPermissionGroupIfNeeded(requestedPerm);
                    break;
                }
            }
        } else {
            for (String requestedPerm : mPackageInfo.requestedPermissions) {
                if (hasGroupForPermission(requestedPerm)) {
                    continue;
                }

                AppPermissionGroup group = AppPermissionGroup.create(mContext,
                        mPackageInfo, requestedPerm);
                if (group == null) {
                    continue;
                }

                mGroups.add(group);
                addPermissionGroupIfNeeded(requestedPerm);
            }
        }

@@ -162,6 +136,20 @@ public final class AppPermissions {
        }
    }

    private void addPermissionGroupIfNeeded(String permission) {
        if (hasGroupForPermission(permission)) {
            return;
        }

        AppPermissionGroup group = AppPermissionGroup.create(mContext,
                mPackageInfo, permission);
        if (group == null) {
            return;
        }

        mGroups.add(group);
    }

    private boolean hasGroupForPermission(String permission) {
        for (AppPermissionGroup group : mGroups) {
            if (group.hasPermission(permission)) {
Loading