Loading src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java +4 −4 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ public final class ManagePermissionsActivity extends FragmentActivity { if (DeviceUtils.isAuto(this)) { androidXFragment = AutoManageStandardPermissionsFragment.newInstance(); } else if (DeviceUtils.isTelevision(this)) { fragment = androidXFragment = com.android.permissioncontroller.permission.ui.television .ManagePermissionsFragment.newInstance(); } else { Loading Loading @@ -211,8 +211,8 @@ public final class ManagePermissionsActivity extends FragmentActivity { } else if (DeviceUtils.isWear(this)) { androidXFragment = AppPermissionsFragmentWear.newInstance(packageName); } else if (DeviceUtils.isTelevision(this)) { fragment = com.android.permissioncontroller.permission.ui.television .AppPermissionsFragment.newInstance(packageName); androidXFragment = com.android.permissioncontroller.permission.ui.television .AppPermissionsFragment.newInstance(packageName, userHandle); } else { Bundle args = AppPermissionGroupsFragment.createArgs(packageName, userHandle, sessionId, true); Loading Loading @@ -245,7 +245,7 @@ public final class ManagePermissionsActivity extends FragmentActivity { if (DeviceUtils.isAuto(this)) { androidXFragment = AutoPermissionAppsFragment.newInstance(permissionName); } else if (DeviceUtils.isTelevision(this)) { fragment = com.android.permissioncontroller.permission.ui.television androidXFragment = com.android.permissioncontroller.permission.ui.television .PermissionAppsFragment.newInstance(permissionName); } else { Loading src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java +66 −11 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.UserHandle; import android.provider.Settings; import android.util.ArraySet; import android.util.Log; Loading @@ -37,19 +38,24 @@ import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.lifecycle.ViewModelProvider; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceViewHolder; import androidx.preference.SwitchPreference; import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.model.AppPermissionGroup; import com.android.permissioncontroller.permission.model.AppPermissions; import com.android.permissioncontroller.permission.model.livedatatypes.AutoRevokeState; import com.android.permissioncontroller.permission.ui.model.AppPermissionGroupsViewModel; import com.android.permissioncontroller.permission.ui.model.AppPermissionGroupsViewModelFactory; import com.android.permissioncontroller.permission.ui.ReviewPermissionsActivity; import com.android.permissioncontroller.permission.utils.LocationUtils; import com.android.permissioncontroller.permission.utils.SafetyNetLogger; import com.android.permissioncontroller.permission.utils.Utils; import com.android.permissioncontroller.R; public final class AppPermissionsFragment extends SettingsWithHeader implements OnPreferenceChangeListener { Loading @@ -57,22 +63,26 @@ public final class AppPermissionsFragment extends SettingsWithHeader private static final String LOG_TAG = "ManagePermsFragment"; static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton"; private static final String AUTO_REVOKE_SWITCH_KEY = "_AUTO_REVOKE_SWITCH_KEY"; private static final int MENU_ALL_PERMS = 0; private ArraySet<AppPermissionGroup> mToggledGroups; private AppPermissionGroupsViewModel mViewModel; private AppPermissions mAppPermissions; private PreferenceScreen mExtraScreen; private boolean mHasConfirmedRevoke; public static AppPermissionsFragment newInstance(String packageName) { return setPackageName(new AppPermissionsFragment(), packageName); public static AppPermissionsFragment newInstance(String packageName, UserHandle user) { return setPackage(new AppPermissionsFragment(), packageName, user); } private static <T extends Fragment> T setPackageName(T fragment, String packageName) { private static <T extends PermissionsFrameFragment> T setPackage( T fragment, String packageName, UserHandle user) { Bundle arguments = new Bundle(); arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName); arguments.putParcelable(Intent.EXTRA_USER, user); fragment.setArguments(arguments); return fragment; } Loading @@ -87,7 +97,9 @@ public final class AppPermissionsFragment extends SettingsWithHeader ab.setDisplayHomeAsUpEnabled(true); } String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final UserHandle user = getArguments().getParcelable(Intent.EXTRA_USER); Activity activity = getActivity(); PackageInfo packageInfo = getPackageInfo(activity, packageName); if (packageInfo == null) { Loading @@ -96,24 +108,30 @@ public final class AppPermissionsFragment extends SettingsWithHeader return; } mAppPermissions = new AppPermissions(activity, packageInfo, true, () -> getActivity().finish()); if (mAppPermissions.isReviewRequired()) { Intent intent = new Intent(getActivity(), ReviewPermissionsActivity.class); intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); intent.putExtra(Intent.EXTRA_USER, user); startActivity(intent); getActivity().finish(); return; } loadPreferences(); } @Override public void onResume() { super.onResume(); final String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final UserHandle user = getArguments().getParcelable(Intent.EXTRA_USER); AppPermissionGroupsViewModelFactory factory = new AppPermissionGroupsViewModelFactory(packageName, user, 0); mViewModel = new ViewModelProvider(this, factory).get(AppPermissionGroupsViewModel.class); mViewModel.getAutoRevokeLiveData().observe(this, this::setAutoRevokeToggleState); mAppPermissions.refresh(); loadPreferences(); setPreferencesCheckedState(); Loading @@ -128,7 +146,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader } case MENU_ALL_PERMS: { Fragment frag = AllAppPermissionsFragment.newInstance( PermissionsFrameFragment frag = AllAppPermissionsFragment.newInstance( getArguments().getString(Intent.EXTRA_PACKAGE_NAME)); getFragmentManager().beginTransaction() .replace(android.R.id.content, frag) Loading Loading @@ -224,10 +243,13 @@ public final class AppPermissionsFragment extends SettingsWithHeader } } final String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final UserHandle user = getArguments().getParcelable(Intent.EXTRA_USER); if (mExtraScreen != null) { extraPerms.setOnPreferenceClickListener(preference -> { AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment(); setPackageName(frag, getArguments().getString(Intent.EXTRA_PACKAGE_NAME)); setPackage(frag, packageName, user); frag.setTargetFragment(AppPermissionsFragment.this, 0); getFragmentManager().beginTransaction() .replace(android.R.id.content, frag) Loading @@ -241,6 +263,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader screen.addPreference(extraPerms); } addAutoRevokePreferences(getPreferenceScreen()); setLoading(false /* loading */, true /* animate */); } Loading Loading @@ -314,6 +338,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader @Override public void onPause() { mViewModel.getAutoRevokeLiveData().removeObservers(this); super.onPause(); logToggledGroups(); } Loading @@ -337,6 +362,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader if (mExtraScreen != null) { setPreferencesCheckedState(mExtraScreen); } setAutoRevokeToggleState(mViewModel.getAutoRevokeLiveData().getValue()); } private void setPreferencesCheckedState(PreferenceScreen screen) { Loading @@ -353,6 +379,35 @@ public final class AppPermissionsFragment extends SettingsWithHeader } } private void addAutoRevokePreferences(PreferenceScreen screen) { SwitchPreference autoRevokeSwitch = new SwitchPreference(screen.getPreferenceManager().getContext()); autoRevokeSwitch.setOnPreferenceClickListener((preference) -> { mViewModel.setAutoRevoke(autoRevokeSwitch.isChecked()); android.util.Log.w(LOG_TAG, "setAutoRevoke " + autoRevokeSwitch.isChecked()); return true; }); autoRevokeSwitch.setTitle(R.string.auto_revoke_label); autoRevokeSwitch.setSummary(R.string.auto_revoke_summary); autoRevokeSwitch.setKey(AUTO_REVOKE_SWITCH_KEY); screen.addPreference(autoRevokeSwitch); } private void setAutoRevokeToggleState(AutoRevokeState state) { SwitchPreference autoRevokeSwitch = getPreferenceScreen().findPreference( AUTO_REVOKE_SWITCH_KEY); if (state == null || autoRevokeSwitch == null) { return; } if (!state.isEnabledGlobal() || !state.getShouldShowSwitch()) { autoRevokeSwitch.setVisible(false); return; } autoRevokeSwitch.setVisible(true); autoRevokeSwitch.setChecked(state.isEnabledForApp()); } private static PackageInfo getPackageInfo(Activity activity, String packageName) { try { return activity.getPackageManager().getPackageInfo( Loading src/com/android/permissioncontroller/permission/ui/television/ManagePermissionsFragment.java +4 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.permissioncontroller.permission.ui.television; import android.app.ActionBar; import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; Loading @@ -26,6 +25,8 @@ import android.view.MenuItem; import android.view.View; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentTransaction; import androidx.loader.app.LoaderManager; import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceScreen; Loading Loading @@ -63,7 +64,8 @@ public final class ManagePermissionsFragment extends SettingsWithHeader if (ab != null) { ab.setDisplayHomeAsUpEnabled(true); } mPermissions = new PermissionGroups(getContext(), getLoaderManager(), this, false, true); mPermissions = new PermissionGroups( getContext(), getActivity().getLoaderManager(), this, false, true); } @Override Loading src/com/android/permissioncontroller/permission/ui/television/PermissionAppsFragment.java +2 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,8 @@ public final class PermissionAppsFragment extends SettingsWithHeader implements return setPermissionName(new PermissionAppsFragment(), permissionName); } private static <T extends Fragment> T setPermissionName(T fragment, String permissionName) { private static <T extends PermissionsFrameFragment> T setPermissionName( T fragment, String permissionName) { Bundle arguments = new Bundle(); arguments.putString(Intent.EXTRA_PERMISSION_NAME, permissionName); fragment.setArguments(arguments); Loading src/com/android/permissioncontroller/permission/ui/television/PermissionsFrameFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -27,13 +27,13 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.leanback.widget.VerticalGridView; import androidx.preference.PreferenceFragment; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import com.android.permissioncontroller.R; public abstract class PermissionsFrameFragment extends PreferenceFragment { public abstract class PermissionsFrameFragment extends PreferenceFragmentCompat { // Key identifying the preference used on TV as the extra header in a permission fragment. // This is to distinguish it from the rest of the preferences Loading Loading
src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java +4 −4 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ public final class ManagePermissionsActivity extends FragmentActivity { if (DeviceUtils.isAuto(this)) { androidXFragment = AutoManageStandardPermissionsFragment.newInstance(); } else if (DeviceUtils.isTelevision(this)) { fragment = androidXFragment = com.android.permissioncontroller.permission.ui.television .ManagePermissionsFragment.newInstance(); } else { Loading Loading @@ -211,8 +211,8 @@ public final class ManagePermissionsActivity extends FragmentActivity { } else if (DeviceUtils.isWear(this)) { androidXFragment = AppPermissionsFragmentWear.newInstance(packageName); } else if (DeviceUtils.isTelevision(this)) { fragment = com.android.permissioncontroller.permission.ui.television .AppPermissionsFragment.newInstance(packageName); androidXFragment = com.android.permissioncontroller.permission.ui.television .AppPermissionsFragment.newInstance(packageName, userHandle); } else { Bundle args = AppPermissionGroupsFragment.createArgs(packageName, userHandle, sessionId, true); Loading Loading @@ -245,7 +245,7 @@ public final class ManagePermissionsActivity extends FragmentActivity { if (DeviceUtils.isAuto(this)) { androidXFragment = AutoPermissionAppsFragment.newInstance(permissionName); } else if (DeviceUtils.isTelevision(this)) { fragment = com.android.permissioncontroller.permission.ui.television androidXFragment = com.android.permissioncontroller.permission.ui.television .PermissionAppsFragment.newInstance(permissionName); } else { Loading
src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java +66 −11 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.UserHandle; import android.provider.Settings; import android.util.ArraySet; import android.util.Log; Loading @@ -37,19 +38,24 @@ import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.lifecycle.ViewModelProvider; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceViewHolder; import androidx.preference.SwitchPreference; import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.model.AppPermissionGroup; import com.android.permissioncontroller.permission.model.AppPermissions; import com.android.permissioncontroller.permission.model.livedatatypes.AutoRevokeState; import com.android.permissioncontroller.permission.ui.model.AppPermissionGroupsViewModel; import com.android.permissioncontroller.permission.ui.model.AppPermissionGroupsViewModelFactory; import com.android.permissioncontroller.permission.ui.ReviewPermissionsActivity; import com.android.permissioncontroller.permission.utils.LocationUtils; import com.android.permissioncontroller.permission.utils.SafetyNetLogger; import com.android.permissioncontroller.permission.utils.Utils; import com.android.permissioncontroller.R; public final class AppPermissionsFragment extends SettingsWithHeader implements OnPreferenceChangeListener { Loading @@ -57,22 +63,26 @@ public final class AppPermissionsFragment extends SettingsWithHeader private static final String LOG_TAG = "ManagePermsFragment"; static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton"; private static final String AUTO_REVOKE_SWITCH_KEY = "_AUTO_REVOKE_SWITCH_KEY"; private static final int MENU_ALL_PERMS = 0; private ArraySet<AppPermissionGroup> mToggledGroups; private AppPermissionGroupsViewModel mViewModel; private AppPermissions mAppPermissions; private PreferenceScreen mExtraScreen; private boolean mHasConfirmedRevoke; public static AppPermissionsFragment newInstance(String packageName) { return setPackageName(new AppPermissionsFragment(), packageName); public static AppPermissionsFragment newInstance(String packageName, UserHandle user) { return setPackage(new AppPermissionsFragment(), packageName, user); } private static <T extends Fragment> T setPackageName(T fragment, String packageName) { private static <T extends PermissionsFrameFragment> T setPackage( T fragment, String packageName, UserHandle user) { Bundle arguments = new Bundle(); arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName); arguments.putParcelable(Intent.EXTRA_USER, user); fragment.setArguments(arguments); return fragment; } Loading @@ -87,7 +97,9 @@ public final class AppPermissionsFragment extends SettingsWithHeader ab.setDisplayHomeAsUpEnabled(true); } String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final UserHandle user = getArguments().getParcelable(Intent.EXTRA_USER); Activity activity = getActivity(); PackageInfo packageInfo = getPackageInfo(activity, packageName); if (packageInfo == null) { Loading @@ -96,24 +108,30 @@ public final class AppPermissionsFragment extends SettingsWithHeader return; } mAppPermissions = new AppPermissions(activity, packageInfo, true, () -> getActivity().finish()); if (mAppPermissions.isReviewRequired()) { Intent intent = new Intent(getActivity(), ReviewPermissionsActivity.class); intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); intent.putExtra(Intent.EXTRA_USER, user); startActivity(intent); getActivity().finish(); return; } loadPreferences(); } @Override public void onResume() { super.onResume(); final String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final UserHandle user = getArguments().getParcelable(Intent.EXTRA_USER); AppPermissionGroupsViewModelFactory factory = new AppPermissionGroupsViewModelFactory(packageName, user, 0); mViewModel = new ViewModelProvider(this, factory).get(AppPermissionGroupsViewModel.class); mViewModel.getAutoRevokeLiveData().observe(this, this::setAutoRevokeToggleState); mAppPermissions.refresh(); loadPreferences(); setPreferencesCheckedState(); Loading @@ -128,7 +146,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader } case MENU_ALL_PERMS: { Fragment frag = AllAppPermissionsFragment.newInstance( PermissionsFrameFragment frag = AllAppPermissionsFragment.newInstance( getArguments().getString(Intent.EXTRA_PACKAGE_NAME)); getFragmentManager().beginTransaction() .replace(android.R.id.content, frag) Loading Loading @@ -224,10 +243,13 @@ public final class AppPermissionsFragment extends SettingsWithHeader } } final String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME); final UserHandle user = getArguments().getParcelable(Intent.EXTRA_USER); if (mExtraScreen != null) { extraPerms.setOnPreferenceClickListener(preference -> { AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment(); setPackageName(frag, getArguments().getString(Intent.EXTRA_PACKAGE_NAME)); setPackage(frag, packageName, user); frag.setTargetFragment(AppPermissionsFragment.this, 0); getFragmentManager().beginTransaction() .replace(android.R.id.content, frag) Loading @@ -241,6 +263,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader screen.addPreference(extraPerms); } addAutoRevokePreferences(getPreferenceScreen()); setLoading(false /* loading */, true /* animate */); } Loading Loading @@ -314,6 +338,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader @Override public void onPause() { mViewModel.getAutoRevokeLiveData().removeObservers(this); super.onPause(); logToggledGroups(); } Loading @@ -337,6 +362,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader if (mExtraScreen != null) { setPreferencesCheckedState(mExtraScreen); } setAutoRevokeToggleState(mViewModel.getAutoRevokeLiveData().getValue()); } private void setPreferencesCheckedState(PreferenceScreen screen) { Loading @@ -353,6 +379,35 @@ public final class AppPermissionsFragment extends SettingsWithHeader } } private void addAutoRevokePreferences(PreferenceScreen screen) { SwitchPreference autoRevokeSwitch = new SwitchPreference(screen.getPreferenceManager().getContext()); autoRevokeSwitch.setOnPreferenceClickListener((preference) -> { mViewModel.setAutoRevoke(autoRevokeSwitch.isChecked()); android.util.Log.w(LOG_TAG, "setAutoRevoke " + autoRevokeSwitch.isChecked()); return true; }); autoRevokeSwitch.setTitle(R.string.auto_revoke_label); autoRevokeSwitch.setSummary(R.string.auto_revoke_summary); autoRevokeSwitch.setKey(AUTO_REVOKE_SWITCH_KEY); screen.addPreference(autoRevokeSwitch); } private void setAutoRevokeToggleState(AutoRevokeState state) { SwitchPreference autoRevokeSwitch = getPreferenceScreen().findPreference( AUTO_REVOKE_SWITCH_KEY); if (state == null || autoRevokeSwitch == null) { return; } if (!state.isEnabledGlobal() || !state.getShouldShowSwitch()) { autoRevokeSwitch.setVisible(false); return; } autoRevokeSwitch.setVisible(true); autoRevokeSwitch.setChecked(state.isEnabledForApp()); } private static PackageInfo getPackageInfo(Activity activity, String packageName) { try { return activity.getPackageManager().getPackageInfo( Loading
src/com/android/permissioncontroller/permission/ui/television/ManagePermissionsFragment.java +4 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.permissioncontroller.permission.ui.television; import android.app.ActionBar; import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; Loading @@ -26,6 +25,8 @@ import android.view.MenuItem; import android.view.View; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentTransaction; import androidx.loader.app.LoaderManager; import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceScreen; Loading Loading @@ -63,7 +64,8 @@ public final class ManagePermissionsFragment extends SettingsWithHeader if (ab != null) { ab.setDisplayHomeAsUpEnabled(true); } mPermissions = new PermissionGroups(getContext(), getLoaderManager(), this, false, true); mPermissions = new PermissionGroups( getContext(), getActivity().getLoaderManager(), this, false, true); } @Override Loading
src/com/android/permissioncontroller/permission/ui/television/PermissionAppsFragment.java +2 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,8 @@ public final class PermissionAppsFragment extends SettingsWithHeader implements return setPermissionName(new PermissionAppsFragment(), permissionName); } private static <T extends Fragment> T setPermissionName(T fragment, String permissionName) { private static <T extends PermissionsFrameFragment> T setPermissionName( T fragment, String permissionName) { Bundle arguments = new Bundle(); arguments.putString(Intent.EXTRA_PERMISSION_NAME, permissionName); fragment.setArguments(arguments); Loading
src/com/android/permissioncontroller/permission/ui/television/PermissionsFrameFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -27,13 +27,13 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.leanback.widget.VerticalGridView; import androidx.preference.PreferenceFragment; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import com.android.permissioncontroller.R; public abstract class PermissionsFrameFragment extends PreferenceFragment { public abstract class PermissionsFrameFragment extends PreferenceFragmentCompat { // Key identifying the preference used on TV as the extra header in a permission fragment. // This is to distinguish it from the rest of the preferences Loading