Merge "Use SDK check for showing permission hub and add RequiresApi(S)." into sc-dev
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java
index db9a797..06fcb0d 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java
@@ -22,6 +22,7 @@
 
 import android.Manifest.permission_group;
 import android.app.ActionBar;
+import android.app.Activity;
 import android.app.AppOpsManager.OpEventProxyInfo;
 import android.app.role.RoleManager;
 import android.content.Context;
@@ -29,6 +30,7 @@
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.text.format.DateFormat;
@@ -42,6 +44,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.coordinatorlayout.widget.CoordinatorLayout;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
@@ -80,6 +83,7 @@
 /**
  * The permission details page showing the history/timeline of a permission
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionDetailsFragment extends SettingsWithLargeHeader implements
         PermissionUsages.PermissionsUsagesChangeCallback {
     public static final int FILTER_24_HOURS = 2;
@@ -156,20 +160,22 @@
                 R.id.extended_fab);
         // Load the background tint color from the application theme
         // rather than the Material Design theme
-        final int colorAccentTertiary = getContext().getColor(
+        Activity activity = getActivity();
+        ColorStateList backgroundColor = activity.getColorStateList(
                 android.R.color.system_accent3_100);
-        extendedFab.setBackgroundTintList(ColorStateList.valueOf(colorAccentTertiary));
-
+        extendedFab.setBackgroundTintList(backgroundColor);
         extendedFab.setText(R.string.manage_permission);
-        final boolean isDarkMode = (getActivity().getResources().getConfiguration().uiMode
+        boolean isUiModeNight = (activity.getResources().getConfiguration().uiMode
                 & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
-        int textColor = isDarkMode ? android.R.attr.textColorPrimaryInverse
+        int textColorAttr = isUiModeNight ? android.R.attr.textColorPrimaryInverse
                 : android.R.attr.textColorPrimary;
-        TypedArray colorArray = getActivity().obtainStyledAttributes(new int[] { textColor });
-        extendedFab.setTextColor(colorArray.getColor(0, -1));
-        extendedFab.setIcon(getActivity().getDrawable(R.drawable.ic_settings_outline));
+        TypedArray typedArray = activity.obtainStyledAttributes(new int[] { textColorAttr });
+        ColorStateList textColor = typedArray.getColorStateList(0);
+        typedArray.recycle();
+        extendedFab.setTextColor(textColor);
+        extendedFab.setIcon(activity.getDrawable(R.drawable.ic_settings_outline));
         extendedFab.setVisibility(View.VISIBLE);
-        extendedFab.setOnClickListener(v -> {
+        extendedFab.setOnClickListener(view -> {
             Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
                     .putExtra(Intent.EXTRA_PERMISSION_NAME, mFilterGroup);
             startActivity(intent);
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java
index 99a6ecc..43f62ad 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java
@@ -17,10 +17,12 @@
 package com.android.permissioncontroller.permission.debug;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.preference.PreferenceFragmentCompat;
 
 import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity;
@@ -29,6 +31,7 @@
 /**
  * Wrapper over PermissionDetailsFragment
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionDetailsWrapperFragment extends PermissionsCollapsingToolbarBaseFragment {
     @NonNull
     @Override
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java
index 0275aef..7e90178 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java
@@ -23,6 +23,7 @@
 import android.app.Activity;
 import android.app.role.RoleManager;
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -33,6 +34,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceGroupAdapter;
@@ -62,6 +64,7 @@
 /**
  * The main page for the privacy dashboard.
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionUsageV2Fragment extends SettingsWithLargeHeader implements
         PermissionUsages.PermissionsUsagesChangeCallback {
     private static final String LOG_TAG = "PermUsageV2Fragment";
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java
index 1090b2c..ccb181b 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java
@@ -17,10 +17,12 @@
 package com.android.permissioncontroller.permission.debug;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.preference.PreferenceFragmentCompat;
 
 import com.android.permissioncontroller.permission.ui.handheld.PermissionsCollapsingToolbarBaseFragment;
@@ -28,6 +30,7 @@
 /**
  * Wrapper over PermissionUsageV2Fragment
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionUsageV2WrapperFragment extends PermissionsCollapsingToolbarBaseFragment{
     @NonNull
     @Override
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java
index fb1d815..a6a07eb 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java
@@ -33,6 +33,7 @@
 import android.content.pm.PackageInfo;
 import android.media.AudioManager;
 import android.media.AudioRecordingConfiguration;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Process;
 import android.util.ArrayMap;
@@ -42,6 +43,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 
 import com.android.permissioncontroller.permission.model.AppPermissionGroup;
 import com.android.permissioncontroller.permission.model.AppPermissionUsage;
@@ -63,6 +65,7 @@
 /**
  * Loads all permission usages for a set of apps and permission groups.
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public final class PermissionUsages implements LoaderCallbacks<List<AppPermissionUsage>> {
     public static final int USAGE_FLAG_LAST = 1 << 0;
     public static final int USAGE_FLAG_HISTORICAL = 1 << 2;
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt b/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt
index be7e00c..37896df 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt
@@ -41,9 +41,6 @@
 /* Default location precision */
 const val PROPERTY_LOCATION_PRECISION = "location_precision"
 
-/* Whether privacy hub feature is enabled */
-const val PROPERTY_PRIVACY_HUB_ENABLED = "privacy_hub_enabled"
-
 const val SECONDS = 1
 const val MINUTES = 2
 const val HOURS = 3
@@ -124,14 +121,6 @@
 }
 
 /**
- * Whether the privacy hub feature is enabled
- */
-fun isPrivacyHubEnabled(): Boolean {
-    return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
-            PROPERTY_PRIVACY_HUB_ENABLED, true)
-}
-
-/**
  * Build a string representing the given time if it happened on the current day and the date
  * otherwise.
  *
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
index cfd9387..03352f8 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
@@ -30,6 +30,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.PermissionInfo;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.util.Log;
@@ -158,7 +159,7 @@
                 break;
 
             case Intent.ACTION_REVIEW_PERMISSION_USAGE: {
-                if (!UtilsKt.isPrivacyHubEnabled()) {
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
                     finishAfterTransition();
                     return;
                 }
@@ -169,15 +170,17 @@
             } break;
 
             case Intent.ACTION_REVIEW_PERMISSION_HISTORY: {
-                if (UtilsKt.isPrivacyHubEnabled()) {
-                    String groupName = getIntent()
-                            .getStringExtra(Intent.EXTRA_PERMISSION_GROUP_NAME);
-                    boolean showSystem = getIntent()
-                            .getBooleanExtra(EXTRA_SHOW_SYSTEM, false);
-                    androidXFragment = PermissionDetailsWrapperFragment
-                            .newInstance(groupName, Long.MAX_VALUE, showSystem);
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+                    finishAfterTransition();
+                    return;
                 }
 
+                String groupName = getIntent()
+                        .getStringExtra(Intent.EXTRA_PERMISSION_GROUP_NAME);
+                boolean showSystem = getIntent()
+                        .getBooleanExtra(EXTRA_SHOW_SYSTEM, false);
+                androidXFragment = PermissionDetailsWrapperFragment
+                        .newInstance(groupName, Long.MAX_VALUE, showSystem);
                 break;
             }
 
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
index 68abb0d..16febb8 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
@@ -42,6 +42,7 @@
 import android.graphics.drawable.Drawable;
 import android.icu.text.ListFormatter;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
@@ -55,6 +56,7 @@
 import android.widget.Toast;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.annotation.StringRes;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.preference.Preference;
@@ -203,6 +205,7 @@
     }
 
     @Override
+    @RequiresApi(Build.VERSION_CODES.S)
     public void onPermissionUsagesChanged() {
         if (mPermissionUsages.getUsages().isEmpty()) {
             return;
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
index 3a36b85..ba4928b 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
@@ -40,6 +40,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -52,6 +53,7 @@
 import android.view.View;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
@@ -175,6 +177,7 @@
     }
 
     @Override
+    @RequiresApi(Build.VERSION_CODES.S)
     public void onPermissionUsagesChanged() {
         if (mPermissionUsages.getUsages().isEmpty()) {
             return;