[go: nahoru, domu]

Snap for 10276566 from 1b55d28494846ab9b56893fab214bedcd725669c to tm-platform-release

Change-Id: I8a7796d4f4a28639a84da873debbf5ef6eb3a7f6
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6a2544e..f38a71d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -47,6 +47,9 @@
     <!-- Used to post file-sending notification. -->
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 
+    <!-- Used to check that the current user is an admin user. -->
+    <uses-permission android:name="android.permission.QUERY_USERS" />
+
     <!-- Declare Android TV support. -->
     <uses-feature android:name="android.software.leanback"
          android:required="false"/>
@@ -113,6 +116,7 @@
              android:exported="true">
             <intent-filter android:priority="2147483647">
                 <action android:name="android.intent.action.BOOT_COMPLETED"/>
+                <action android:name="android.intent.action.USER_FOREGROUND"/>
                 <action android:name="com.android.internal.intent.action.BUGREPORT_STARTED"/>
             </intent-filter>
           </receiver>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 48331b5..f111482 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -14,7 +14,7 @@
     <string name="applications" msgid="521776761270770549">"برنامه‌ها"</string>
     <string name="no_debuggable_apps" msgid="4386209254520471208">"هیچ برنامه‌ای با قابلیت اشکال‌زدایی در دسترس نیست"</string>
     <string name="buffer_size" msgid="3944311026715111454">"‏اندازه بافر Per-CPU"</string>
-    <string name="show_quick_settings_tile" msgid="4971147332635291585">"نمایش کاشی تنظیمات سریع"</string>
+    <string name="show_quick_settings_tile" msgid="4971147332635291585">"نمایش کاشی «تنظیمات فوری»"</string>
     <string name="saving_trace" msgid="1468692734770800541">"درحال ذخیره کردن رد"</string>
     <string name="trace_saved" msgid="5869970594780992309">"رد ذخیره شد"</string>
     <string name="tap_to_share" msgid="6766732404489536899">"برای هم‌رسانی ردتان، ضربه بزنید"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index f83066f..5df1390 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -14,7 +14,7 @@
     <string name="applications" msgid="521776761270770549">"Aplicacións"</string>
     <string name="no_debuggable_apps" msgid="4386209254520471208">"Non hai ningunha aplicación que se poida depurar dispoñible"</string>
     <string name="buffer_size" msgid="3944311026715111454">"Tamaño do búfer por CPU"</string>
-    <string name="show_quick_settings_tile" msgid="4971147332635291585">"Mostrar atallo de configuración rápida"</string>
+    <string name="show_quick_settings_tile" msgid="4971147332635291585">"Mostrar atallo de Configuración rápida"</string>
     <string name="saving_trace" msgid="1468692734770800541">"Gardando rastro"</string>
     <string name="trace_saved" msgid="5869970594780992309">"Gardouse o rastro"</string>
     <string name="tap_to_share" msgid="6766732404489536899">"Toca para compartir o teu rastro"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index f84e9a6..54a4753 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -14,7 +14,7 @@
     <string name="applications" msgid="521776761270770549">"Колдонмолор"</string>
     <string name="no_debuggable_apps" msgid="4386209254520471208">"Бир да мүчүлүштүктөрү оңдоло турган колдонмо жеткиликтүү эмес"</string>
     <string name="buffer_size" msgid="3944311026715111454">"Процессордун буферинин өлчөмү"</string>
-    <string name="show_quick_settings_tile" msgid="4971147332635291585">"Ыкчам жөндөөлөр тактасын көрсөтүү"</string>
+    <string name="show_quick_settings_tile" msgid="4971147332635291585">"Ыкчам параметрлер тактасын көрсөтүү"</string>
     <string name="saving_trace" msgid="1468692734770800541">"Телефондо аткарылган аракеттер сакталууда"</string>
     <string name="trace_saved" msgid="5869970594780992309">"Телефондо аткарылган аракеттер сакталды"</string>
     <string name="tap_to_share" msgid="6766732404489536899">"Телефондо аткарылган аракеттерди бөлүшүү үчүн таптаңыз"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 386dc7e..696573a 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -36,7 +36,7 @@
     <string name="system_trace_sensitive_data" msgid="3069389866696009549">"Os ficheiros de rastreio do sistema podem incluir dados confidenciais do sistema e de aplicações (por exemplo, a utilização de aplicações). Partilhe os rastreios do sistema apenas com pessoas e aplicações de confiança."</string>
     <string name="share" msgid="8443979083706282338">"Partilhar"</string>
     <string name="dont_show_again" msgid="6662492041164390600">"Não mostrar de novo"</string>
-    <string name="use_perfetto_beta" msgid="2725630143916520160">"Utilizar o Perfetto (beta)"</string>
+    <string name="use_perfetto_beta" msgid="2725630143916520160">"Usar o Perfetto (beta)"</string>
     <string name="long_traces" msgid="5110949471775966329">"Rastreios longos"</string>
     <string name="long_traces_summary" msgid="419034282946761469">"Guardado continuamente no armazenamento do dispositivo"</string>
     <string name="long_traces_summary_betterbug" msgid="445546400875135624">"Guardados de forma contínua no armazenamento do dispositivo (não serão anexados automaticamente aos relatórios de erros)"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index bf8ad74..0ff02dc 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -14,7 +14,7 @@
     <string name="applications" msgid="521776761270770549">"Aplikacije"</string>
     <string name="no_debuggable_apps" msgid="4386209254520471208">"Na voljo ni nobenih aplikacij, v katerih je mogoče odpravljati napake"</string>
     <string name="buffer_size" msgid="3944311026715111454">"Velikost medpomnilnika za posamezno CPE"</string>
-    <string name="show_quick_settings_tile" msgid="4971147332635291585">"Prikaz ploščice s hitrimi nastavitvami"</string>
+    <string name="show_quick_settings_tile" msgid="4971147332635291585">"Prikaz ploščice v hitrih nastavitvah"</string>
     <string name="saving_trace" msgid="1468692734770800541">"Shranjevanje sledi"</string>
     <string name="trace_saved" msgid="5869970594780992309">"Sled je shranjena"</string>
     <string name="tap_to_share" msgid="6766732404489536899">"Dotaknite se, če želite deliti sled"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index adcc0f7..ce2b82a 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -38,7 +38,7 @@
     <string name="dont_show_again" msgid="6662492041164390600">"మళ్లీ చూపవద్దు"</string>
     <string name="use_perfetto_beta" msgid="2725630143916520160">"Perfetto (బీటా)ని ఉపయోగించండి"</string>
     <string name="long_traces" msgid="5110949471775966329">"ఎక్కువ నిడివి స్థితిగతి"</string>
-    <string name="long_traces_summary" msgid="419034282946761469">"పరికర నిల్వలో నిరంతరం సేవ్ చేయబడుతుంది"</string>
+    <string name="long_traces_summary" msgid="419034282946761469">"పరికర స్టోరేజ్‌లో నిరంతరం సేవ్ చేయబడుతుంది"</string>
     <string name="long_traces_summary_betterbug" msgid="445546400875135624">"పరికర స్టోరేజ్‌కు నిరంతరం సేవ్ చేయబడుతుంది (బగ్ రిపోర్ట్‌లకు ఆటోమేటిక్‌గా అటాచ్ చేయబడదు)"</string>
     <string name="max_long_trace_size" msgid="1943788179787181241">"అత్యధిక స్థితి గతి నిడివి సైజ్‌"</string>
     <string name="max_long_trace_duration" msgid="8009837944364246785">"అత్యధిక నిడివి ఉన్న స్థితిగతి పరిణామం"</string>
diff --git a/src/com/android/traceur/MainActivity.java b/src/com/android/traceur/MainActivity.java
index 0380dcd..2d48923 100644
--- a/src/com/android/traceur/MainActivity.java
+++ b/src/com/android/traceur/MainActivity.java
@@ -17,6 +17,7 @@
 
 import android.app.Activity;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.provider.Settings;
 
 import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity;
@@ -35,7 +36,13 @@
             Settings.Global.getInt(getApplicationContext().getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
 
-        if (!developerOptionsIsEnabled) {
+        UserManager userManager = getApplicationContext()
+                .getSystemService(UserManager.class);
+        boolean isAdminUser = userManager.isAdminUser();
+        boolean debuggingDisallowed = userManager.hasUserRestriction(
+                UserManager.DISALLOW_DEBUGGING_FEATURES);
+
+        if (!developerOptionsIsEnabled || !isAdminUser || debuggingDisallowed) {
             finish();
         }
     }
diff --git a/src/com/android/traceur/MainTvActivity.java b/src/com/android/traceur/MainTvActivity.java
index 91f67c4..de8c2bd 100644
--- a/src/com/android/traceur/MainTvActivity.java
+++ b/src/com/android/traceur/MainTvActivity.java
@@ -17,6 +17,7 @@
 
 import android.app.Activity;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.provider.Settings;
 
 public class MainTvActivity extends Activity {
@@ -33,7 +34,13 @@
             Settings.Global.getInt(getApplicationContext().getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
 
-        if (!developerOptionsIsEnabled) {
+        UserManager userManager = getApplicationContext()
+                .getSystemService(UserManager.class);
+        boolean isAdminUser = userManager.isAdminUser();
+        boolean debuggingDisallowed = userManager.hasUserRestriction(
+                UserManager.DISALLOW_DEBUGGING_FEATURES);
+
+        if (!developerOptionsIsEnabled || !isAdminUser || debuggingDisallowed) {
             finish();
         }
     }
diff --git a/src/com/android/traceur/Receiver.java b/src/com/android/traceur/Receiver.java
index 0ed5d5d..f3c2ae3 100644
--- a/src/com/android/traceur/Receiver.java
+++ b/src/com/android/traceur/Receiver.java
@@ -32,6 +32,7 @@
 import android.os.Handler;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.text.TextUtils;
@@ -85,6 +86,16 @@
             // We know that Perfetto won't be tracing already at boot, so pass the
             // tracingIsOff argument to avoid the Perfetto check.
             updateTracing(context, /* assumeTracingIsOff= */ true);
+        } else if (Intent.ACTION_USER_FOREGROUND.equals(intent.getAction())) {
+            boolean developerOptionsEnabled = (1 ==
+                Settings.Global.getInt(context.getContentResolver(),
+                    Settings.Global.DEVELOPMENT_SETTINGS_ENABLED , 0));
+            UserManager userManager = context.getSystemService(UserManager.class);
+            boolean isAdminUser = userManager.isAdminUser();
+            boolean debuggingDisallowed = userManager.hasUserRestriction(
+                    UserManager.DISALLOW_DEBUGGING_FEATURES);
+            updateStorageProvider(context,
+                    developerOptionsEnabled && isAdminUser && !debuggingDisallowed);
         } else if (STOP_ACTION.equals(intent.getAction())) {
             prefs.edit().putBoolean(
                     context.getString(R.string.pref_key_tracing_on), false).commit();
@@ -213,14 +224,12 @@
                         boolean developerOptionsEnabled = (1 ==
                             Settings.Global.getInt(context.getContentResolver(),
                                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED , 0));
-
-                        ComponentName name = new ComponentName(context,
-                            StorageProvider.class);
-                        context.getPackageManager().setComponentEnabledSetting(name,
-                           developerOptionsEnabled
-                                ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
-                                : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
-                            PackageManager.DONT_KILL_APP);
+                        UserManager userManager = context.getSystemService(UserManager.class);
+                        boolean isAdminUser = userManager.isAdminUser();
+                        boolean debuggingDisallowed = userManager.hasUserRestriction(
+                                UserManager.DISALLOW_DEBUGGING_FEATURES);
+                        updateStorageProvider(context,
+                                developerOptionsEnabled && isAdminUser && !debuggingDisallowed);
 
                         if (!developerOptionsEnabled) {
                             SharedPreferences prefs =
@@ -243,6 +252,17 @@
         }
     }
 
+    // Enables/disables the System Traces storage component. enableProvider should be true iff
+    // developer options are enabled and the current user is an admin user.
+    static void updateStorageProvider(Context context, boolean enableProvider) {
+        ComponentName name = new ComponentName(context, StorageProvider.class);
+        context.getPackageManager().setComponentEnabledSetting(name,
+                enableProvider
+                        ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                        : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+                PackageManager.DONT_KILL_APP);
+    }
+
     private static void postCategoryNotification(Context context, SharedPreferences prefs) {
         Intent sendIntent = new Intent(context, MainActivity.class);
 
diff --git a/src/com/android/traceur/SearchProvider.java b/src/com/android/traceur/SearchProvider.java
index 9586bdb..8a20331 100644
--- a/src/com/android/traceur/SearchProvider.java
+++ b/src/com/android/traceur/SearchProvider.java
@@ -30,6 +30,7 @@
 import android.content.Intent;
 import android.database.Cursor;
 import android.database.MatrixCursor;
+import android.os.UserManager;
 import android.provider.SearchIndexablesProvider;
 import android.provider.Settings;
 
@@ -68,9 +69,14 @@
         boolean developerOptionsIsEnabled =
             Settings.Global.getInt(getContext().getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+        UserManager userManager = getContext().getSystemService(UserManager.class);
+        boolean isAdminUser = userManager.isAdminUser();
+        boolean debuggingDisallowed = userManager.hasUserRestriction(
+                UserManager.DISALLOW_DEBUGGING_FEATURES);
 
-        // If developer options is not enabled, System Tracing shouldn't be searchable.
-        if (!developerOptionsIsEnabled) {
+        // System Tracing shouldn't be searchable if developer options are not enabled or if the
+        // user is not an admin.
+        if (!developerOptionsIsEnabled || !isAdminUser || debuggingDisallowed) {
             MatrixCursor cursor = new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS);
             Object[] row = new Object[] {getContext().getString(R.string.system_tracing)};
             cursor.addRow(row);
diff --git a/src/com/android/traceur/StopTraceService.java b/src/com/android/traceur/StopTraceService.java
index 20c5f6e..0e754ac 100644
--- a/src/com/android/traceur/StopTraceService.java
+++ b/src/com/android/traceur/StopTraceService.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.util.EventLog;
@@ -40,7 +41,7 @@
     @Override
     public void onHandleIntent(Intent intent) {
         Context context = getApplicationContext();
-        // Checks that developer options are enabled before continuing.
+        // Checks that developer options are enabled and the user is an admin before continuing.
         boolean developerOptionsEnabled =
                 Settings.Global.getInt(context.getContentResolver(),
                         Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
@@ -49,6 +50,13 @@
             EventLog.writeEvent(0x534e4554, "204992293", -1, "");
             return;
         }
+        UserManager userManager = context.getSystemService(UserManager.class);
+        boolean isAdminUser = userManager.isAdminUser();
+        boolean debuggingDisallowed = userManager.hasUserRestriction(
+                UserManager.DISALLOW_DEBUGGING_FEATURES);
+        if (!isAdminUser || debuggingDisallowed) {
+            return;
+        }
         // Ensures that only intents that pertain to stopping a trace and need to be accessed from
         // outside Traceur are passed to TraceService through StopTraceService.
         String intentAction = intent.getAction();
diff --git a/src/com/android/traceur/StorageProvider.java b/src/com/android/traceur/StorageProvider.java
index 3df07d5..0044a81 100644
--- a/src/com/android/traceur/StorageProvider.java
+++ b/src/com/android/traceur/StorageProvider.java
@@ -22,6 +22,7 @@
 import android.os.FileUtils;
 import android.os.CancellationSignal;
 import android.os.ParcelFileDescriptor;
+import android.os.UserManager;
 import android.provider.DocumentsContract;
 import android.provider.DocumentsContract.Document;
 import android.provider.DocumentsContract.Root;
@@ -75,10 +76,14 @@
         boolean developerOptionsIsEnabled =
             Settings.Global.getInt(getContext().getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+        UserManager userManager = getContext().getSystemService(UserManager.class);
+        boolean isAdminUser = userManager.isAdminUser();
+        boolean debuggingDisallowed = userManager.hasUserRestriction(
+                UserManager.DISALLOW_DEBUGGING_FEATURES);
 
-        // If developer options is not enabled, return an empty root cursor.
-        // This removes the provider from the list entirely.
-        if (!developerOptionsIsEnabled) {
+        // If developer options is not enabled or the user is not an admin, return an empty root
+        // cursor. This removes the provider from the list entirely.
+        if (!developerOptionsIsEnabled || !isAdminUser || debuggingDisallowed) {
             return null;
         }
 
diff --git a/src/com/android/traceur/TraceService.java b/src/com/android/traceur/TraceService.java
index 96e76a8..9b6f69d 100644
--- a/src/com/android/traceur/TraceService.java
+++ b/src/com/android/traceur/TraceService.java
@@ -26,6 +26,7 @@
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
+import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.text.format.DateUtils;
@@ -108,7 +109,7 @@
     @Override
     public void onHandleIntent(Intent intent) {
         Context context = getApplicationContext();
-        // Checks that developer options are enabled before continuing.
+        // Checks that developer options are enabled and the user is an admin before continuing.
         boolean developerOptionsEnabled =
                 Settings.Global.getInt(context.getContentResolver(),
                         Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
@@ -117,6 +118,13 @@
             EventLog.writeEvent(0x534e4554, "204992293", -1, "");
             return;
         }
+        UserManager userManager = context.getSystemService(UserManager.class);
+        boolean isAdminUser = userManager.isAdminUser();
+        boolean debuggingDisallowed = userManager.hasUserRestriction(
+                UserManager.DISALLOW_DEBUGGING_FEATURES);
+        if (!isAdminUser || debuggingDisallowed) {
+            return;
+        }
 
         if (intent.getAction().equals(INTENT_ACTION_START_TRACING)) {
             startTracingInternal(intent.getStringArrayListExtra(INTENT_EXTRA_TAGS),