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),