Merge tm-dev-plus-aosp-without-vendor@8763363

Bug: 236760014
Merged-In: I38fb23dcc85676593a3f8f0851676bc526802d2e
Change-Id: I077e6bd0ac2cdf53c93261d51a04eba9e1da79b0
This commit is contained in:
Xin Li
2022-06-27 23:39:09 +00:00
851 changed files with 28857 additions and 10447 deletions
+21
View File
@@ -31,11 +31,13 @@ android_library {
"androidx.test.uiautomator_uiautomator",
"androidx.preference_preference",
"SystemUISharedLib",
"SystemUIAnimationLib",
],
srcs: [
"tests/tapl/**/*.java",
"src/com/android/launcher3/ResourceUtils.java",
"src/com/android/launcher3/testing/TestProtocol.java",
"src/com/android/launcher3/testing/*Request.java",
],
resource_dirs: [ ],
manifest: "tests/tapl/AndroidManifest.xml",
@@ -195,6 +197,7 @@ android_library {
"lottie",
"SystemUISharedLib",
"SystemUI-statsd",
"SystemUIAnimationLib",
],
manifest: "quickstep/AndroidManifest.xml",
min_sdk_version: "current",
@@ -207,6 +210,8 @@ filegroup {
srcs: [
"ext_tests/src/**/*.java",
"ext_tests/src/**/*.kt",
"quickstep/ext_tests/src/**/*.java",
"quickstep/ext_tests/src/**/*.kt",
],
}
@@ -223,6 +228,19 @@ filegroup {
],
}
// Common source files used to build go launcher except go/src files
filegroup {
name: "launcher-go-src-no-build-config",
srcs: [
"src/**/*.java",
"src/**/*.kt",
"quickstep/src/**/*.java",
"quickstep/src/**/*.kt",
"go/quickstep/src/**/*.java",
"go/quickstep/src/**/*.kt",
],
}
// Proguard files for Launcher3
filegroup {
name: "launcher-proguard-rules",
@@ -253,7 +271,9 @@ android_library {
static_libs: [
"Launcher3CommonDepsLib",
"QuickstepResLib",
"androidx.room_room-runtime",
],
plugins: ["androidx.room_room-compiler-plugin"],
manifest: "quickstep/AndroidManifest-launcher.xml",
additional_manifests: [
"go/AndroidManifest.xml",
@@ -284,6 +304,7 @@ android_library {
"SystemUISharedLib",
"Launcher3CommonDepsLib",
"QuickstepResLib",
"SystemUIAnimationLib",
],
manifest: "quickstep/AndroidManifest.xml",
platform_apis: true,
+1 -2
View File
@@ -42,6 +42,7 @@
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<!-- for rotating surface by arbitrary degree -->
<uses-permission android:name="android.permission.ROTATE_SURFACE_FLINGER" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!--
Permissions required for read/write access to the workspace data. These permission name
@@ -50,13 +51,11 @@
-->
<permission
android:name="${packageName}.permission.READ_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signatureOrSystem"
android:label="@string/permlab_read_settings"
android:description="@string/permdesc_read_settings"/>
<permission
android:name="${packageName}.permission.WRITE_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signatureOrSystem"
android:label="@string/permlab_write_settings"
android:description="@string/permdesc_write_settings"/>
+2 -1
View File
@@ -20,7 +20,7 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.launcher3">
<uses-sdk android:targetSdkVersion="30" android:minSdkVersion="26"/>
<uses-sdk android:targetSdkVersion="33" android:minSdkVersion="26"/>
<!--
Manifest entries specific to Launcher3. This is merged with AndroidManifest-common.xml.
Refer comments around specific entries on how to extend individual components.
@@ -58,6 +58,7 @@
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.SHOW_WORK_APPS" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
+1
View File
@@ -39,6 +39,7 @@ peanutbutter@google.com
xuqiu@google.com
sreyasr@google.com
thiruram@google.com
brianji@google.com
per-file FeatureFlags.java, globs = set noparent
per-file FeatureFlags.java = sunnygoyal@google.com, winsonc@google.com, zakcohen@google.com, mrcasey@google.com, adamcohen@google.com, hyunyoungs@google.com
+1 -1
View File
@@ -170,7 +170,7 @@ dependencies {
protobuf {
// Configure the protoc executable
protoc {
artifact = "com.google.protobuf:protoc:${protocVersion}"
artifact = "com.google.protobuf:protoc:${protocVersion}${PROTO_ARCH_SUFFIX}"
}
generateProtoTasks {
all().each { task ->
@@ -27,9 +27,12 @@ import android.system.Os;
import android.view.View;
import androidx.annotation.Keep;
import androidx.annotation.Nullable;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.ShortcutAndWidgetContainer;
import java.util.ArrayList;
import java.util.Collection;
@@ -124,7 +127,7 @@ public class DebugTestInformationHandler extends TestInformationHandler {
}
@Override
public Bundle call(String method, String arg) {
public Bundle call(String method, String arg, @Nullable Bundle extras) {
final Bundle response = new Bundle();
switch (method) {
case TestProtocol.REQUEST_APP_LIST_FREEZE_FLAGS: {
@@ -204,6 +207,32 @@ public class DebugTestInformationHandler extends TestInformationHandler {
}
}
case TestProtocol.REQUEST_USE_TEST_WORKSPACE_LAYOUT: {
useTestWorkspaceLayout(true);
return response;
}
case TestProtocol.REQUEST_USE_DEFAULT_WORKSPACE_LAYOUT: {
useTestWorkspaceLayout(false);
return response;
}
case TestProtocol.REQUEST_HOTSEAT_ICON_NAMES: {
return getLauncherUIProperty(Bundle::putStringArrayList, l -> {
ShortcutAndWidgetContainer hotseatIconsContainer =
l.getHotseat().getShortcutsAndWidgets();
ArrayList<String> hotseatIconNames = new ArrayList<>();
for (int i = 0; i < hotseatIconsContainer.getChildCount(); i++) {
// Use unchecked cast to catch changes in hotseat layout
BubbleTextView icon = (BubbleTextView) hotseatIconsContainer.getChildAt(i);
hotseatIconNames.add((String) icon.getText());
}
return hotseatIconNames;
});
}
case TestProtocol.REQUEST_GET_ACTIVITIES_CREATED_COUNT: {
response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, sActivitiesCreatedCount);
return response;
@@ -219,7 +248,18 @@ public class DebugTestInformationHandler extends TestInformationHandler {
}
default:
return super.call(method, arg);
return super.call(method, arg, extras);
}
}
private void useTestWorkspaceLayout(boolean useTestWorkspaceLayout) {
final long identity = Binder.clearCallingIdentity();
try {
LauncherSettings.Settings.call(mContext.getContentResolver(), useTestWorkspaceLayout
? LauncherSettings.Settings.METHOD_SET_USE_TEST_WORKSPACE_LAYOUT_FLAG
: LauncherSettings.Settings.METHOD_CLEAR_USE_TEST_WORKSPACE_LAYOUT_FLAG);
} finally {
Binder.restoreCallingIdentity(identity);
}
}
}
-90
View File
@@ -1,90 +0,0 @@
#!/usr/bin/env python2.5
import cgi
import os
import shutil
import sys
import sqlite3
SCREENS = 5
COLUMNS = 4
ROWS = 4
CELL_SIZE = 110
DIR = "db_files"
AUTO_FILE = "launcher.db"
APPLICATION_COMPONENTS = [
"com.android.calculator2/com.android.calculator2.Calculator",
"com.android.providers.downloads.ui/com.android.providers.downloads.ui.DownloadList",
"com.android.settings/com.android.settings.Settings",
"com.android.mms/com.android.mms.ui.ConversationList",
"com.android.contacts/com.android.contacts.activities.PeopleActivity",
"com.android.dialer/com.android.dialer.DialtactsActivity"
]
def usage():
print "usage: fill_screens.py -- fills up the launcher db"
def make_dir():
shutil.rmtree(DIR, True)
os.makedirs(DIR)
def pull_file(fn):
print "pull_file: " + fn
rv = os.system("adb pull"
+ " /data/data/com.android.launcher/databases/launcher.db"
+ " " + fn);
if rv != 0:
print "adb pull failed"
sys.exit(1)
def push_file(fn):
print "push_file: " + fn
rv = os.system("adb push"
+ " " + fn
+ " /data/data/com.android.launcher/databases/launcher.db")
if rv != 0:
print "adb push failed"
sys.exit(1)
def process_file(fn):
print "process_file: " + fn
conn = sqlite3.connect(fn)
c = conn.cursor()
c.execute("DELETE FROM favorites")
intentFormat = "#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=%s;end"
id = 0;
for s in range(SCREENS):
for x in range(ROWS):
for y in range(COLUMNS):
id += 1
insert = "INSERT into favorites (_id, title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, iconType) VALUES (%d, '%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d)"
insert = insert % (id, "title", "", -100, s, x, y, 1, 1, 2, -1, 0)
c.execute(insert)
folder_id = id
for z in range(15):
id += 1
intent = intentFormat % (APPLICATION_COMPONENTS[id % len(APPLICATION_COMPONENTS)])
insert = "INSERT into favorites (_id, title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, iconType) VALUES (%d, '%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d)"
insert = insert % (id, "title", intent, folder_id, 0, 0, 0, 1, 1, 0, -1, 0)
c.execute(insert)
conn.commit()
c.close()
def main(argv):
if len(argv) == 1:
make_dir()
pull_file(AUTO_FILE)
process_file(AUTO_FILE)
push_file(AUTO_FILE)
else:
usage()
if __name__=="__main__":
main(sys.argv)
+4
View File
@@ -54,6 +54,10 @@
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
android:enabled="false"
tools:node="replace" />
<service
android:name="com.android.launcher3.model.AppShareabilityJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
</application>
</manifest>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Verander jou digitalebystandprogram in Instellings om na teks op jou skerm te luister of dit te vertaal"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tik hier om na teks op hierdie skerm te luister"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tik hier om teks op hierdie skerm te vertaal"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Hierdie program kan nie gedeel word nie"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"በማያ ገጽዎ ላይ ጽሑፍን ለማዳመጥ ወይም ለመተርጎም በቅንብሮች ውስጥ የዲጂታል ረዳት መተግበሪያዎን ይቀይሩ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"በዚህ ማያ ገጽ ላይ ጽሑፍ ለማዳመጥ እዚህ መታ ያድርጉ"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"በዚህ ማያ ገጽ ላይ ጽሑፍ ለመተርጎም እዚህ መታ ያድርጉ"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ይህ መተግበሪያ ሊጋራ አይችልም"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"للاستماع للنص الظاهر على الشاشة أو ترجمته، عليك تغيير تطبيق المساعد الرقمي في الإعدادات."</string>
<string name="tooltip_listen" msgid="7634466447860989102">"انقر هنا للاستماع للنص الظاهر على هذه الشاشة."</string>
<string name="tooltip_translate" msgid="4184845868901542567">"انقر هنا لترجمة النص الظاهر على هذه الشاشة."</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"لا يمكن مشاركة هذا التطبيق."</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"আপোনাৰ স্ক্ৰীনত থকা পাঠ শুনিবলৈ অথবা সেই পাঠৰ অনুবাদ কৰিবলৈ, ছেটিঙত আপোনাৰ ডিজিটেল সহায়ক এপ্‌টো সলনি কৰক"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"এই স্ক্ৰীনখনত থকা পাঠ শুনিবলৈ ইয়াত টিপক"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"এই স্ক্ৰীনখনত থকা পাঠৰ অনুবাদ কৰিবলৈ ইয়াত টিপক"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"এই এপ্‌টো শ্বেয়াৰ কৰিব নোৱাৰি"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Ekrandakı mətni dinləmək və ya tərcümə etmək üçün Ayarlarda rəqəmsal assistent tətbiqini dəyişin"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Bu ekrandakı mətni dinləmək üçün buraya toxunun"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Bu ekrandakı mətni tərcümə etmək üçün buraya toxunun"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Bu tətbiqi paylaşmaq mümkün deyil"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Da biste čuli tekst sa ekrana ili ga preveli, promenite aplikaciju digitalnog pomoćnika u Podešavanjima"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Dodirnite ovde da biste čuli tekst sa ovog ekrana"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Dodirnite ovde da biste preveli tekst sa ovog ekrana"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Ova aplikacija ne može da se deli"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Каб праслухаць ці перакласці тэкст на экране, змяніце ў Наладах лічбавага памочніка"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Націсніце тут, каб праслухаць тэкст на экране"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Націсніце тут, каб перакласці тэкст на экране"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Не ўдалося абагуліць гэту праграму"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"За да слушате или превеждате текст на екрана си, от настройките променете приложението си за дигитален асистент"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Докоснете тук, за да слушате текста на този екран"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Докоснете тук, за да преведете текста на този екран"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Това приложение не може да бъде споделено"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"আপনার স্ক্রিনে থাকা টেক্সট শুনতে বা অনুবাদ করতে, সেটিংস থেকে ডিজিটাল অ্যাসিস্ট্যান্ট অ্যাপ পরিবর্তন করুন"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"স্ক্রিনে থাকা টেক্সট শুনতে এখানে ট্যাপ করুন"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"স্ক্রিনে থাকা টেক্সট অনুবাদ করতে এখানে ট্যাপ করুন"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"এই অ্যাপ শেয়ার করা যাবে না"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Da slušate ili prevedete tekst na ekranu, promijenite aplikaciju digitalnog asistenta u Postavkama"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Dodirnite ovdje da slušate tekst na ovom ekranu"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Dodirnite ovdje da prevedete tekst na ovom ekranu"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Nije moguće dijeliti ovu aplikaciju"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Per escoltar o traduir text en pantalla, canvia l\'aplicació d\'assistent digital a Configuració"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Toca aquí per escoltar text en pantalla"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Toca aquí per traduir text en pantalla"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Aquesta aplicació o es pot compartir"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Pokud si chcete poslechnout nebo přeložit text na obrazovce, v Nastavení změňte aplikaci digitálního asistenta"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Klepnutím sem si poslechnete text na této obrazovce"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Klepnutím sem přeložíte text na této obrazovce"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Tuto aplikaci nelze sdílet"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Hvis du vil høre eller oversætte tekst på din skærm, skal du ændre din digitale assistent i Indstillinger"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tryk her for at høre teksten på denne skærm"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tryk her for at oversætte teksten på denne skærm"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Denne app kan ikke deles"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Wenn du dir auf deinem Display Text anhören oder übersetzen lassen möchtest, ändere in den Einstellungen deine App für den digitalen Assistenten"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Hier tippen, um dir Text auf diesem Display anzuhören"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Hier tippen, um dir Text auf diesem Display übersetzen zu lassen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Diese App kann nicht gemeinsam genutzt werden"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Για να ακούσετε ή να μεταφράσετε κείμενο στην οθόνη σας, αλλάξτε την εφαρμογή ψηφιακού βοηθού στις Ρυθμίσεις."</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Πατήστε εδώ για να ακούσετε το κείμενο σε αυτήν την οθόνη"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Πατήστε εδώ για να μεταφράσετε το κείμενο σε αυτήν την οθόνη"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Δεν είναι δυνατή η κοινή χρήση της εφαρμογής"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"To listen to or translate text on your screen, change your digital assistant app in settings"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tap here to listen to text on this screen"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tap here to translate text on this screen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"This app cant be shared"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"To listen to or translate text on your screen, change your digital assistant app in settings"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tap here to listen to text on this screen"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tap here to translate text on this screen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"This app cant be shared"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"To listen to or translate text on your screen, change your digital assistant app in settings"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tap here to listen to text on this screen"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tap here to translate text on this screen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"This app cant be shared"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"To listen to or translate text on your screen, change your digital assistant app in settings"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tap here to listen to text on this screen"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tap here to translate text on this screen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"This app cant be shared"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"To listen to or translate text on your screen, change your digital assistant app in Settings"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tap here to listen to text on this screen"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tap here to translate text on this screen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"This app cant be shared"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Para escuchar o traducir texto en la pantalla, cambia la app de asistente digital en Configuración"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Presiona aquí para escuchar texto en esta pantalla"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Presiona aquí para traducir texto en esta pantalla"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"No se puede compartir esta app"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Para escuchar o traducir texto que haya en tu pantalla, cambia tu aplicación de asistente digital en Ajustes"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Toca aquí para escuchar el texto que hay en esta pantalla"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Toca aquí para traducir el texto que hay en esta pantalla"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Esta aplicación no se puede compartir"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Ekraanil kuvatud teksti kuulamiseks või tõlkimiseks vahetage seadetes digitaalse assistendi rakendust"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Puudutage siin, et ekraanil kuvatud teksti kuulda"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Puudutage siin, et ekraanil kuvatud tekst tõlkida"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Seda rakendust ei saa jagada"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Pantailako testua entzun edo itzultzeko, aldatu laguntzaile digitalaren aplikazioa Ezarpenak atalean"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Sakatu hau pantailako testua entzuteko"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Sakatu hau pantailako testua itzultzeko"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Ezin da partekatu aplikazioa"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"برای گوش کردن به نوشتار در صفحه‌نمایش‌تان یا ترجمه کردن آن، برنامه دستیار دیجیتالی‌تان را در «تنظیمات» تغییر دهید"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"برای گوش کردن به نوشتار در این صفحه، اینجا ضربه بزنید"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"برای ترجمه نوشتار در این صفحه، اینجا ضربه بزنید"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"نمی‌توان این برنامه را هم‌رسانی کرد"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Jos haluat kuunnella tai kääntää näytöllä näkyvää tekstiä, vaihda digiavustajasovellus asetuksista"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Kuuntele näytöllä näkyvä teksti napauttamalla tästä"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Käännä näytöllä näkyvä teksti napauttamalla tästä"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Tätä sovellusta ei voi jakaa"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Pour écouter ou traduire le texte affiché sur votre écran, modifiez l\'application de votre assistant numérique dans les paramètres"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Touchez ce bouton pour écouter le texte affiché sur cet écran"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Touchez ce bouton pour traduire le texte affiché sur cet écran"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Cette application ne peut pas être partagée"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Pour écouter ou traduire le texte à l\'écran, modifiez l\'appli d\'assistant numérique dans \"Paramètres\""</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Appuyez ici pour écouter le texte à l\'écran"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Appuyez ici pour traduire le texte à l\'écran"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Impossible de partager cette appli"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Para escoitar ou traducir o texto da pantalla, cambia a aplicación de asistente dixital en Configuración"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tocar aquí para escoitar o texto desta pantalla"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tocar aquí para traducir o texto desta pantalla"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Non se pode compartir esta aplicación"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"તમારી સ્ક્રીન પર ટેક્સ્ટ સાંભળવા માટે અથવા તેનો અનુવાદ કરવા માટે, સેટિંગમાં જઈને તમારી ડિજિટલ આસિસ્ટંટ ઍપ બદલો"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"આ સ્ક્રીન પર ટેક્સ્ટ સાંભળવા માટે અહીં ટૅપ કરો"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"આ સ્ક્રીન પર ટેક્સ્ટનો અનુવાદ કરવા માટે અહીં ટૅપ કરો"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"આ ઍપ શેર કરી શકાતી નથી"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"स्क्रीन पर मौजूद टेक्स्ट का अनुवाद करने या उसे सुनने के लिए, \'सेटिंग\' में जाकर अपना डिजिटल असिस्टेंट ऐप्लिकेशन बदलें"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"स्क्रीन पर मौजूद टेक्स्ट को सुनने के लिए, यहां टैप करें"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"स्क्रीन पर मौजूद टेक्स्ट का अनुवाद करने के लिए, यहां टैप करें"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"इस ऐप्लिकेशन को शेयर नहीं किया जा सकता"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Da biste poslušali ili preveli tekst na zaslonu, promijenite aplikaciju digitalnog asistenta u postavkama"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Dodirnite ovdje da biste poslušali tekst na ovom zaslonu"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Dodirnite ovdje da biste preveli tekst na ovom zaslonu"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Ovu aplikaciju ne možete dijeliti"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"A képernyőn megjelenő szöveg meghallgatásához vagy lefordításához módosítsa a digitálisasszisztens-alkalmazást a Beállítások menüben"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Koppintson ide a jelenleg képernyőn lévő szöveg meghallgatásához"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Koppintson ide a jelenleg képernyőn lévő szöveg lefordításához"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Ezt az alkalmazást nem lehet megosztani"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Էկրանի տեքստը լսելու կամ թարգմանելու համար կարգավորումներում փոխեք ձեր թվային օգնականի հավելվածը։"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Հպեք այստեղ՝ այս էկրանի տեքստը լսելու համար"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Հպեք այստեղ` այս էկրանի տեքստը թարգմանելու համար"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Հնարավոր չէ կիսվել այս հավելվածով"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Untuk mendengarkan atau menerjemahkan teks di layar, ubah aplikasi asisten digital Anda di Setelan"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Ketuk di sini untuk mendengarkan teks di layar ini"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Ketuk di sini untuk menerjemahkan teks di layar ini"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Aplikasi ini tidak dapat dibagikan"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Breyttu forriti stafræna hjálparans í stillingum til að hlusta á eða þýða texta"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Ýttu hér til að hlusta á texta á þessum skjá"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Ýttu hér til að þýða texta á þessum skjá"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Ekki er hægt að deila þessu forriti"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Per ascoltare o tradurre il testo mostrato sullo schermo, cambia l\'app dell\'assistente digitale nelle Impostazioni"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tocca qui per ascoltare il testo mostrato in questa schermata"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tocca qui per tradurre il testo mostrato in questa schermata"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Impossibile condividere questa app"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"כדי להאזין לטקסט שבמסך או לתרגם אותו, צריך לשנות את אפליקציית העוזר הדיגיטלי ב\'הגדרות\'"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"צריך להקיש כאן כדי להאזין לטקסט שבמסך הזה"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"צריך להקיש כאן כדי לתרגם את הטקסט שבמסך הזה"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"אי אפשר לשתף את האפליקציה הזו"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"画面上のテキストを翻訳するかまたは聞くには、[設定] でデジタル アシスタント アプリを変更してください"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"この画面上のテキストを聞くには、ここをタップしてください"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"この画面上のテキストを翻訳するには、ここをタップしてください"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"このアプリは共有できません"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"თქვენს ეკრანზე ნაჩვენები ტექსტის მოსასმენად ან სათარგმნად, შეცვალეთ ციფრული ასისტენტის აპი პარამეტრებიდან"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"შეეხეთ აქ ამ ეკრანზე ნაჩვენები ტექსტის მოსასმენად"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"შეეხეთ აქ ამ ეკრანზე ნაჩვენები ტექსტის სათარგმნად"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ამ აპის გაზიარება შეუძლებელია"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Экрандағы мәтінді тыңдау немесе аудару үшін параметрлерден цифрлық көмекшіні өзгертіңіз."</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Экрандағы мәтінді тыңдау үшін осы жерде түртіңіз."</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Экрандағы мәтінді аудару үшін осы жерде түртіңіз."</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Бұл қолданбаны бөлісу мүмкін емес."</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"ដើម្បីស្ដាប់ ឬបកប្រែ​អត្ថបទ​នៅលើ​អេក្រង់របស់អ្នក សូមប្ដូរ​កម្មវិធី​ជំនួយការឌីជីថល​របស់អ្នក​នៅក្នុង​ការកំណត់"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ចុចត្រង់នេះ ដើម្បីស្ដាប់​អត្ថបទ​នៅលើ​អេក្រង់នេះ"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ចុចត្រង់នេះ ដើម្បីបកប្រែ​អត្ថបទ​នៅលើ​អេក្រង់នេះ"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"មិនអាចចែករំលែកកម្មវិធីនេះបានទេ"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿರುವ ಪಠ್ಯವನ್ನು ಆಲಿಸಲು ಅಥವಾ ಅನುವಾದಿಸಲು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಡಿಜಿಟಲ್ ಅಸಿಸ್ಟೆಂಟ್ ಆ್ಯಪ್ ಅನ್ನು ಬದಲಾಯಿಸಿ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ಈ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿರುವ ಪಠ್ಯವನ್ನು ಆಲಿಸಲು ಇಲ್ಲಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ಈ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿರುವ ಪಠ್ಯವನ್ನು ಅನುವಾದಿಸಲು ಇಲ್ಲಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ಈ ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"화면에서 텍스트를 듣거나 번역하려면 설정에서 디지털 어시스턴트 앱을 변경하세요."</string>
<string name="tooltip_listen" msgid="7634466447860989102">"화면에서 텍스트를 들으려면 여기를 탭하세요."</string>
<string name="tooltip_translate" msgid="4184845868901542567">"화면에서 텍스트를 번역하려면 여기를 탭하세요."</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"공유할 수 없는 앱입니다."</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Экраныңыздагы текстти угуу же которуу үчүн Жөндөөлөрдөн санариптик жардамчы колдонмосун өзгөртүңүз"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Бул экрандагы текстти угуу үчүн бул жерди басыңыз"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Бул экрандагы текстти которуу үчүн бул жерди басыңыз"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Бул колдонмону бөлүшүүгө болбойт"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"ເພື່ອຟັງ ຫຼື ແປຂໍ້ຄວາມຢູ່ໜ້າຈໍຂອງທ່ານ, ໃຫ້ປ່ຽນຜູ້ຊ່ວຍດິຈິຕອນຂອງທ່ານໃນການຕັ້ງຄ່າ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ແຕະບ່ອນນີ້ເພື່ອຟັງຂໍ້ຄວາມຢູ່ໜ້າຈໍນີ້"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ແຕະບ່ອນນີ້ເພື່ອແປຂໍ້ຄວາມຢູ່ໜ້າຈໍນີ້"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ບໍ່ສາມາດແບ່ງປັນແອັບນີ້ໄດ້"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Jei norite klausyti teksto ekrane ar jį išversti, pakeiskite skaitmeninio pagelbiklio programą „Nustatymų“ skiltyje"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Palieskite čia, jei norite klausyti teksto šiame ekrane"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Palieskite čia, jei norite išversti tekstą šiame ekrane"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Šios programos negalima bendrinti"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Lai klausītos vai tulkotu ekrānā parādīto tekstu, iestatījumos mainiet digitālā asistenta lietotni"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Lai klausītos ekrānā parādīto tekstu, pieskarieties šeit"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Lai tulkotu ekrānā parādīto tekstu, pieskarieties šeit"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Šo lietotni nevar kopīgot."</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"За да го слушнете или преведете текстот од екранот, променете ја апликацијата за дигитален помошник во „Поставки“"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Допрете тука за да го слушнете текстот од екранов"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Допрете тука за да го преведете текстот од екранов"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Апликацијава не може да се сподели"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"നിങ്ങളുടെ സ്ക്രീനിലുള്ള ടെക്‌സ്‌റ്റ് കേൾക്കാനോ വിവർത്തനം ചെയ്യാനോ, ക്രമീകരണത്തിലെ നിങ്ങളുടെ ഡിജിറ്റൽ അസിസ്‌റ്റന്റ് ആപ്പ് മാറ്റുക"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ഈ സ്ക്രീനിലെ ടെക്‌സ്‌റ്റ് കേൾക്കാൻ, ഇവിടെ ടാപ്പ് ചെയ്യുക"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ഈ സ്ക്രീനിലെ ടെക്‌സ്‌റ്റ് വിവർത്തനം ചെയ്യാൻ, ഇവിടെ ടാപ്പ് ചെയ്യുക"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ഈ ആപ്പ് പങ്കിടാനാകില്ല"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Дэлгэц дээрээ текст сонсох эсвэл орчуулахын тулд Тохиргоо хэсэгт дижитал туслах аппаа өөрчилнө үү"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Энэ дэлгэц дээр текст сонсохын тулд энд товшино уу"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Энэ дэлгэц дээр текст орчуулахын тулд энд товшино уу"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Энэ аппыг хуваалцах боломжгүй"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"तुमच्या स्क्रीनवरील मजकूर ऐकण्यासाठी किंवा भाषांतर करण्यासाठी, सेटिंग्ज मध्ये तुमचे डिजिटल असिस्टंट अ‍ॅप बदला"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"या स्क्रीनवरील मजकूर ऐकण्यासाठी येथे टॅप करा"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"या स्क्रीनवरील मजकुराचे भाषांतर करण्यासाठी येथे टॅप करा"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"हे ॲप शेअर केले जाऊ शकत नाही"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Untuk mendengar atau menterjemahkan teks pada skrin anda, tukar apl pembantu digital anda dalam Tetapan"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Ketik di sini untuk mendengar teks pada skrin ini"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Ketik di sini untuk menterjemahkan teks pada skrin ini"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Apl ini tidak boleh dikongsi"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"ဖန်သားပြင်ပေါ်ရှိ စာသားကို နားထောင်ရန် (သို့) ဘာသာပြန်ဆိုရန် ‘ဆက်တင်များ’ တွင် ဒစ်ဂျစ်တယ် assistant အက်ပ်ကို ပြောင်းပါ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ဤဖန်သားပြင်ပေါ်ရှိ စာသားကို နားထောင်ရန် ဤနေရာကို တို့ပါ"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ဤဖန်သားပြင်ပေါ်ရှိ စာသားကို ဘာသာပြန်ဆိုရန် ဤနေရာကို တို့ပါ"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ဤအက်ပ်ကို မျှဝေ၍မရပါ"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"For å høre eller oversette tekst på skjermen, endre digital assistent-appen i innstillingene"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Trykk her for å høre teksten på denne skjermen"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Trykk her for å oversette teksten på denne skjermen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Denne appen kan ikke deles"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"तपाईं आफ्नो स्क्रिनमा देखिने पाठ सुन्न वा अनुवाद गर्न चाहनुहुन्छ भने सेटिङमा गई कुनै डिजिटल सहायक एप परिर्वर्तन गर्नुहोस्"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"तपाईं यो स्क्रिनमा देखिने पाठ सुन्न चाहनुहुन्छ यहाँ ट्याप गर्नुहोस्"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"तपाईं यो स्क्रिनमा देखिने पाठ अनुवाद गर्न चाहनुहुन्छ यहाँ ट्याप गर्नुहोस्"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"यो एप अरूलाई चलाउन दिन मिल्दैन"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Als je tekst op je scherm wilt beluisteren of vertalen, wijzig je de digitale-assistent-app in Instellingen"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tik hier om tekst op dit scherm te beluisteren"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tik hier om tekst op dit scherm te vertalen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Deze app kan niet worden gedeeld"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା କିମ୍ବା ଅନୁବାଦ କରିବା ପାଇଁ, ସେଟିଂସରେ ଆପଣଙ୍କ Digital assistant ଆପକୁ ବଦଳାନ୍ତୁ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଶୁଣିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ଏହି ସ୍କ୍ରିନରେ ଥିବା ଟେକ୍ସଟକୁ ଅନୁବାଦ କରିବା ପାଇଁ ଏଠାରେ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ଏହି ଆପ ସେୟାର କରାଯାଇପାରିବ ନାହିଁ"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"ਆਪਣੀ ਸਕ੍ਰੀਨ \'ਤੇ ਲਿਖਤ ਨੂੰ ਸੁਣਨ ਅਤੇ ਉਸਦਾ ਅਨੁਵਾਦ ਕਰਨ ਲਈ, ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਆਪਣੀ ਡਿਜੀਟਲ ਸਹਾਇਕ ਐਪ ਬਦਲੋ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ਇਸ ਸਕ੍ਰੀਨ \'ਤੇ ਲਿਖਤ ਨੂੰ ਸੁਣਨ ਲਈ ਇੱਥੇ ਟੈਪ ਕਰੋ"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ਇਸ ਸਕ੍ਰੀਨ \'ਤੇ ਲਿਖਤ ਦਾ ਅਨੁਵਾਦ ਕਰਨ ਲਈ ਇੱਥੇ ਟੈਪ ਕਰੋ"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ਇਸ ਐਪ ਨੂੰ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Aby odsłuchać lub przetłumaczyć tekst widoczny na ekranie, zmień w Ustawieniach aplikację asystenta cyfrowego"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Kliknij tutaj, aby odsłuchać tekst widoczny na ekranie"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Kliknij tutaj, aby przetłumaczyć tekst widoczny na ekranie"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Tej aplikacji nie można udostępnić"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Para ouvir ou traduzir o texto no ecrã, mude de app de assistente digital nas Definições"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Toque aqui para ouvir o texto neste ecrã"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Toque aqui para traduzir o texto neste ecrã"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Não é possível partilhar esta app"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Para ouvir ou traduzir o texto exibido na tela, mude seu app assistente digital nas Configurações"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Toque aqui para ouvir o texto exibido na tela"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Toque aqui para traduzir o texto exibido na tela"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Não é possível compartilhar o app"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Pentru a asculta sau a traduce text de pe ecran, schimbați aplicația asistent digital în Setări"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Atingeți aici pentru a asculta text de pe ecran"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Atingeți aici pentru a traduce text de pe ecran"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Aplicația nu poate fi distribuită"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Чтобы слушать или переводить текст на экране, выберите другого цифрового помощника в настройках."</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Нажмите, чтобы прослушать текст на этой странице"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Нажмите, чтобы перевести текст на этой странице"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Невозможно предоставить доступ к этому приложению."</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"ඔබගේ තිරයේ පෙළට සවන් දීමට හෝ පරිවර්තනය කිරීමට, සැකසීම් තුළ ඔබගේ ඩිජිටල් සහායක යෙදුම වෙනස් කරන්න"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"මෙම තිරයේ පෙළට සවන් දීමට මෙහි තට්ටු කරන්න"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"මෙම තිරයේ පෙළ පරිවර්තනය කිරීමට මෙහි තට්ටු කරන්න"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"මෙම යෙදුම බෙදා ගත නොහැකිය"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Ak si chcete vypočuť alebo nechať preložiť text na obrazovke, zmeňte v Nastaveniach aplikáciu digitálneho asistenta"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Klepnutím tu si vypočujte text na tejto obrazovke"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Klepnutím tu si nechajte preložiť text na tejto obrazovke"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Táto aplikácia sa nedá zdieľať"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Za poslušanje ali prevod besedila na zaslonu v nastavitvah izberite drugega digitalnega pomočnika."</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Dotaknite se tukaj za poslušanje besedila na zaslonu."</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Dotaknite se tukaj za prevod besedila na zaslonu."</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Te aplikacije ni mogoče deliti z drugimi."</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Për të dëgjuar ose përkthyer tekstin në ekran, ndrysho aplikacionin e asistentit dixhital te \"Cilësimet\""</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Trokit këtu për të dëgjuar tekstin në këtë ekran"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Trokit këtu për të përkthyer tekstin në këtë ekran"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Ky aplikacion nuk mund të ndahet"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Да бисте чули текст са екрана или га превели, промените апликацију дигиталног помоћника у Подешавањима"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Додирните овде да бисте чули текст са овог екрана"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Додирните овде да бисте превели текст са овог екрана"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Ова апликација не може да се дели"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Byt digital assistentapp i Inställningar om du vill lyssna på eller översätta text på skärmen"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Tryck här för att lyssna på texten på skärmen"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Tryck här för att översätta texten på skärmen"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Den här appen kan inte delas"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Ili usikilize au utafsiri maandishi kwenye skrini yako, badilisha programu yako ya mratibu dijitali katika Mipangilio"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Gusa hapa ili usikilize maandishi kwenye skrini hii"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Gusa hapa ili utafsiri maandishi kwenye skrini hii"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Huwezi kushiriki programu hii"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"திரையில் தோன்றும் வார்த்தைகளைக் கேட்கவோ மொழிபெயர்க்கவோ அமைப்புகளில் டிஜிட்டல் அசிஸ்டண்ட் ஆப்ஸை மாற்றவும்"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"இந்தத் திரையில் தோன்றும் வார்த்தைகளைக் கேட்க இங்கே தட்டவும்"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"இந்தத் திரையில் தோன்றும் வார்த்தைகளை மொழிபெயர்க்க இங்கே தட்டவும்"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"இந்த ஆப்ஸைப் பகிர முடியாது"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"మీ స్క్రీన్‌పై ఉన్న టెక్స్ట్‌ను వినడానికి లేదా అనువదించడానికి, సెట్టింగ్‌లలో మీ డిజిటల్ అసిస్టెంట్ యాప్‌ను మార్చండి"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ఈ స్క్రీన్‌పై ఉన్న టెక్స్ట్‌ను వినడానికి ఇక్కడ ట్యాప్ చేయండి"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ఈ స్క్రీన్‌పై ఉన్న టెక్స్ట్‌ను అనువదించడానికి ఇక్కడ ట్యాప్ చేయండి"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ఈ యాప్‌ను షేర్ చేయడం సాధ్యపడదు"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"เปลี่ยนแอปผู้ช่วยดิจิทัลในการตั้งค่าเพื่อฟังหรือแปลข้อความบนหน้าจอ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"แตะที่นี่เพื่อฟังข้อความบนหน้าจอนี้"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"แตะที่นี่เพื่อแปลข้อความบนหน้าจอนี้"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"แชร์แอปนี้ไม่ได้"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Para pakinggan o isalin ang text sa iyong screen, palitan ang iyong app ng digital na assistant sa Mga Setting"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Mag-tap dito para pakinggan ang text sa screen na ito"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Mag-tap dito para isalin ang text sa screen na ito"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Hindi maibabahagi ang app na ito"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Ekranınızdaki metni dinlemek veya çevirmek için Ayarlar\'dan dijital asistan uygulamanızı değiştirin"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Bu ekrandaki metni dinlemek için buraya dokunun"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Bu ekrandaki metni çevirmek için buraya dokunun"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Bu uygulama paylaşılamaz"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Щоб прослухати чи перекласти текст на екрані, змініть цифрового помічника в налаштуваннях"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Натисніть тут, щоб прослухати текст на цьому екрані"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Натисніть тут, щоб перекласти текст на цьому екрані"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Цим додатком не можна поділитися"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"اپنی اسکرین پر موجود ٹیکسٹ کو سننے یا اس کا ترجمہ کرنے کیلئے ترتیبات میں اپنی ڈیجیٹل اسسٹنٹ ایپ کو تبدیل کریں"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"اس اسکرین پر موجود ٹیکسٹ کو سننے کے لیے یہاں تھپتھپائیں"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"اس اسکرین پر موجود ٹیکسٹ کا ترجمہ کرنے کے لیے یہاں تھپتھپائیں"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"اس ایپ کا اشتراک نہیں کیا جا سکتا"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Ekrandagi matnni eshittirish yoki tarjima qilish uchun Sozlamalar orqali raqamli assistent ilovasini almashtiring"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Ekrandagi matnni eshittirish uchun bosing"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Ekrandagi matnni tarjima qilish uchun bosing"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Bu ilova ulashilmaydi"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Để nghe hoặc dịch văn bản trên màn hình, hãy thay đổi ứng dụng trợ lý kỹ thuật số trong phần Cài đặt"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Nhấn vào đây để nghe văn bản trên màn hình này"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Nhấn vào đây để dịch văn bản trên màn hình này"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Bạn không thể chia sẻ ứng dụng này"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"如需收听或翻译屏幕上的文字,请在“设置”部分更改数字助理应用"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"点按此处即可收听屏幕上的文字"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"点按此处即可翻译屏幕上的文字"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"无法分享此应用"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"如要聆聽或翻譯畫面上的文字,請在「設定」中變更數碼助理應用程式"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"輕按這裡即可聆聽此畫面上的文字"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"輕按這裡即可翻譯此畫面上的文字"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"無法分享此應用程式"</string>
</resources>
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"如要聽取或翻譯畫面上的文字,請前往「設定」變更數位助理應用程式"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"輕觸這裡即可聽取這個畫面上的文字"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"輕觸這裡即可翻譯這個畫面上的文字"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"無法分享這個應用程式"</string>
</resources>
+1
View File
@@ -16,4 +16,5 @@
<string name="assistant_not_supported_text" msgid="1708031078549268884">"Ukuze ulalele noma uhumushe umbhalo kusikrini sakho, shintsha i-app yomsizi wakho odijithali kokuthi Amasethingi"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"Thepha lapha ukuze ulalele umbhalo kusikrini"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"Thepha lapha ukuze uhumushe umbhalo kulesi sikrini"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"Le app ayikwazi ukwabiwa"</string>
</resources>
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2021 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<!-- Job IDs must be integers unique within their package -->
<integer name="app_shareability_job_id">200</integer>
</resources>
+4
View File
@@ -41,4 +41,8 @@
<string name="tooltip_listen">Tap here to listen to text on this screen</string>
<!-- Tooltip to highlight and explain the Translate button -->
<string name="tooltip_translate">Tap here to translate text on this screen</string>
<!-- ******* Toast Messages ******* -->
<!-- Toast to indicate that an app cannot be shared -->
<string name="toast_p2p_app_not_shareable">This app cant be shared</string>
</resources>
+1 -1
View File
@@ -73,7 +73,7 @@
<style name="ModalDialogText">
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textSize">16sp</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:textColor">?android:attr/textColorTertiary</item>
<item name="android:lineHeight">24dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
@@ -16,20 +16,32 @@
package com.android.launcher3;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_APP_SHARE_TAP;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import androidx.core.content.FileProvider;
import com.android.launcher3.model.AppShareabilityChecker;
import com.android.launcher3.model.AppShareabilityJobService;
import com.android.launcher3.model.AppShareabilityManager;
import com.android.launcher3.model.AppShareabilityManager.ShareabilityStatus;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.popup.PopupDataProvider;
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.views.ActivityContext;
import java.io.File;
@@ -44,6 +56,11 @@ public final class AppSharing {
* because it is unique to Go and not toggleable at runtime.
*/
public static final boolean ENABLE_APP_SHARING = true;
/**
* With this flag enabled, the Share App button will be dynamically enabled/disabled based
* on each app's shareability status.
*/
public static final boolean ENABLE_SHAREABILITY_CHECK = true;
private static final String TAG = "AppSharing";
private static final String FILE_PROVIDER_SUFFIX = ".overview.fileprovider";
@@ -51,46 +68,70 @@ public final class AppSharing {
private static final String APP_MIME_TYPE = "application/application";
private final String mSharingComponent;
private AppShareabilityManager mShareabilityMgr;
private AppSharing(Launcher launcher) {
mSharingComponent = launcher.getText(R.string.app_sharing_component).toString();
}
private boolean canShare(ItemInfo info) {
/**
* TODO: Implement once b/168831749 has been resolved
* The implementation should check the validity of the app.
* It should also check whether the app is free or paid, returning false in the latter case.
* For now, all checks occur in the sharing app.
* So, we simply check whether the sharing app is defined.
*/
return !TextUtils.isEmpty(mSharingComponent);
}
private Uri getShareableUri(Context context, String path, String displayName) {
String authority = BuildConfig.APPLICATION_ID + FILE_PROVIDER_SUFFIX;
File pathFile = new File(path);
return FileProvider.getUriForFile(context, authority, pathFile, displayName);
}
private SystemShortcut<Launcher> getShortcut(Launcher launcher, ItemInfo info) {
if (!canShare(info)) {
private SystemShortcut<Launcher> getShortcut(Launcher launcher, ItemInfo info,
View originalView) {
if (TextUtils.isEmpty(mSharingComponent)) {
return null;
}
return new Share(launcher, info, originalView);
}
return new Share(launcher, info);
/**
* Instantiates AppShareabilityManager, which then reads app shareability data from disk
* Also schedules a job to update those data
* @param context The application context
* @param checker An implementation of AppShareabilityChecker to perform the actual checks
* when updating the data
*/
public static void setUpShareabilityCache(Context context, AppShareabilityChecker checker) {
AppShareabilityManager shareMgr = AppShareabilityManager.INSTANCE.get(context);
shareMgr.setShareabilityChecker(checker);
AppShareabilityJobService.schedule(context);
}
/**
* The Share App system shortcut, used to initiate p2p sharing of a given app
*/
public final class Share extends SystemShortcut<Launcher> {
public Share(Launcher target, ItemInfo itemInfo) {
super(R.drawable.ic_share, R.string.app_share_drop_target_label, target, itemInfo);
private final PopupDataProvider mPopupDataProvider;
private final boolean mSharingEnabledForUser;
public Share(Launcher target, ItemInfo itemInfo, View originalView) {
super(R.drawable.ic_share, R.string.app_share_drop_target_label, target, itemInfo,
originalView);
mPopupDataProvider = target.getPopupDataProvider();
mSharingEnabledForUser = bluetoothSharingEnabled(target);
if (!mSharingEnabledForUser) {
setEnabled(false);
} else if (ENABLE_SHAREABILITY_CHECK) {
mShareabilityMgr =
AppShareabilityManager.INSTANCE.get(target.getApplicationContext());
checkShareability(/* requestUpdateIfUnknown */ true);
}
}
@Override
public void onClick(View view) {
ActivityContext.lookupContext(view.getContext())
.getStatsLogManager().logger().log(LAUNCHER_SYSTEM_SHORTCUT_APP_SHARE_TAP);
if (!isEnabled()) {
showCannotShareToast(view.getContext());
return;
}
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
@@ -118,15 +159,60 @@ public final class AppSharing {
sendIntent.setType(APP_MIME_TYPE);
sendIntent.setComponent(ComponentName.unflattenFromString(mSharingComponent));
mTarget.startActivitySafely(view, sendIntent, mItemInfo);
UserHandle user = mItemInfo.user;
if (user != null && !user.equals(Process.myUserHandle())) {
mTarget.startActivityAsUser(sendIntent, user);
} else {
mTarget.startActivitySafely(view, sendIntent, mItemInfo);
}
AbstractFloatingView.closeAllOpenViews(mTarget);
}
private void onStatusUpdated(boolean success) {
if (!success) {
// Something went wrong. Specific error logged in AppShareabilityManager.
return;
}
checkShareability(/* requestUpdateIfUnknown */ false);
mTarget.runOnUiThread(() -> {
mPopupDataProvider.redrawSystemShortcuts();
});
}
private void checkShareability(boolean requestUpdateIfUnknown) {
String packageName = mItemInfo.getTargetComponent().getPackageName();
@ShareabilityStatus int status = mShareabilityMgr.getStatus(packageName);
setEnabled(status == ShareabilityStatus.SHAREABLE);
if (requestUpdateIfUnknown && status == ShareabilityStatus.UNKNOWN) {
mShareabilityMgr.requestAppStatusUpdate(packageName, this::onStatusUpdated);
}
}
private boolean bluetoothSharingEnabled(Context context) {
return !context.getSystemService(UserManager.class)
.hasUserRestriction(UserManager.DISALLOW_BLUETOOTH_SHARING, mItemInfo.user);
}
private void showCannotShareToast(Context context) {
ActivityContext activityContext = ActivityContext.lookupContext(context);
String blockedByMessage = activityContext.getStringCache() != null
? activityContext.getStringCache().disabledByAdminMessage
: context.getString(R.string.blocked_by_policy);
CharSequence text = (mSharingEnabledForUser)
? context.getText(R.string.toast_p2p_app_not_shareable)
: blockedByMessage;
int duration = Toast.LENGTH_SHORT;
Toast.makeText(context, text, duration).show();
}
}
/**
* Shortcut factory for generating the Share App button
*/
public static final SystemShortcut.Factory<Launcher> SHORTCUT_FACTORY = (launcher, itemInfo) ->
(new AppSharing(launcher)).getShortcut(launcher, itemInfo);
public static final SystemShortcut.Factory<Launcher> SHORTCUT_FACTORY =
(launcher, itemInfo, originalView) ->
(new AppSharing(launcher)).getShortcut(launcher, itemInfo, originalView);
}
@@ -0,0 +1,38 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.model;
import androidx.annotation.Nullable;
import java.util.List;
import java.util.function.Consumer;
/**
* Interface for checking apps' shareability. Implementations need to be able to determine whether
* apps are shareable given their package names.
*/
public interface AppShareabilityChecker {
/**
* Checks the shareability of the provided apps. Once the check is complete, updates the
* provided manager with the results and calls the (optionally) provided callback.
* @param packageNames The apps to check
* @param shareMgr The manager to receive the results
* @param callback Optional callback to be invoked when the check is finished
*/
void checkApps(List<String> packageNames, AppShareabilityManager shareMgr,
@Nullable Consumer<Boolean> callback);
}
@@ -0,0 +1,60 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.model;
import androidx.room.Dao;
import androidx.room.Database;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.RoomDatabase;
import androidx.room.Update;
import java.util.List;
/**
* This database maintains a collection of AppShareabilityStatus items
* In its intended use case, there will be one entry for each app installed on the device
*/
@Database(entities = {AppShareabilityStatus.class}, exportSchema = false, version = 1)
public abstract class AppShareabilityDatabase extends RoomDatabase {
/**
* Data Access Object for this database
*/
@Dao
public interface ShareabilityDao {
/** Add an AppShareabilityStatus to the database */
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAppStatus(AppShareabilityStatus status);
/** Add a collection of AppShareabilityStatus objects to the database */
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAppStatuses(AppShareabilityStatus... statuses);
/**
* Update an AppShareabilityStatus in the database
* @return The number of entries successfully updated
*/
@Update
int updateAppStatus(AppShareabilityStatus status);
/** Retrieve all entries from the database */
@Query("SELECT * FROM AppShareabilityStatus")
List<AppShareabilityStatus> getAllEntries();
}
protected abstract ShareabilityDao shareabilityDao();
}
@@ -0,0 +1,77 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.model;
import android.app.job.JobInfo;
import android.app.job.JobParameters;
import android.app.job.JobScheduler;
import android.app.job.JobService;
import android.content.ComponentName;
import android.content.Context;
import android.util.Log;
import com.android.launcher3.R;
/**
* A job to request AppShareabilityManager to update its shareability data
* The shareability status of an app is not expected to change often, so this job is only
* run periodically.
*/
public final class AppShareabilityJobService extends JobService {
private static final String TAG = "AppShareabilityJobService";
// Run this job once a week
private static final int RECURRENCE_INTERVAL_MILLIS = 604800000;
@Override
public boolean onStartJob(final JobParameters params) {
Context context = getApplicationContext();
AppShareabilityManager.INSTANCE.get(context).requestFullUpdate();
return false; // Job is finished
}
@Override
public boolean onStopJob(final JobParameters params) {
Log.d(TAG, "App shareability data update job stopped; id=" + params.getJobId()
+ ", reason="
+ JobParameters.getInternalReasonCodeDescription(params.getStopReason()));
return true; // Reschedule the job
}
/**
* Creates and schedules the job.
* Does not schedule a duplicate job if one is already pending.
* @param context The application context
*/
public static void schedule(Context context) {
final JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
final JobInfo pendingJob = jobScheduler.getPendingJob(R.integer.app_shareability_job_id);
if (pendingJob != null) {
// Don't schedule duplicate jobs
return;
}
final JobInfo newJob = new JobInfo.Builder(R.integer.app_shareability_job_id,
new ComponentName(context, AppShareabilityJobService.class))
.setPeriodic(RECURRENCE_INTERVAL_MILLIS)
.setPersisted(true)
.setRequiresBatteryNotLow(true)
.build();
jobScheduler.schedule(newJob);
}
}
@@ -0,0 +1,211 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.model;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.content.Context;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.os.Process;
import android.util.ArrayMap;
import android.util.Log;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
import androidx.room.Room;
import com.android.internal.annotations.VisibleForTesting;
import com.android.launcher3.model.AppShareabilityDatabase.ShareabilityDao;
import com.android.launcher3.util.MainThreadInitializedObject;
import java.lang.annotation.Retention;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* This class maintains the shareability status of installed apps.
* Each app's status is retrieved from the Play Store's API. Statuses are cached in order
* to limit extraneous calls to that API (which can be time-consuming).
*/
public class AppShareabilityManager {
@Retention(SOURCE)
@IntDef({
ShareabilityStatus.UNKNOWN,
ShareabilityStatus.NOT_SHAREABLE,
ShareabilityStatus.SHAREABLE
})
public @interface ShareabilityStatus {
int UNKNOWN = 0;
int NOT_SHAREABLE = 1;
int SHAREABLE = 2;
}
private static final String TAG = "AppShareabilityManager";
private static final String DB_NAME = "shareabilityDatabase";
public static MainThreadInitializedObject<AppShareabilityManager> INSTANCE =
new MainThreadInitializedObject<>(AppShareabilityManager::new);
private final Context mContext;
// Local map to store the data in memory for quick access
private final Map<String, Integer> mDataMap;
// Database to persist the data across reboots
private AppShareabilityDatabase mDatabase;
// Data Access Object for the database
private ShareabilityDao mDao;
// Class to perform shareability checks
private AppShareabilityChecker mShareChecker;
private AppShareabilityManager(Context context) {
mContext = context;
mDataMap = new ArrayMap<>();
mDatabase = Room.databaseBuilder(mContext, AppShareabilityDatabase.class, DB_NAME).build();
mDao = mDatabase.shareabilityDao();
MODEL_EXECUTOR.post(this::readFromDB);
}
/**
* Set the shareability checker. The checker determines whether given apps are shareable.
* This must be set before the manager can update its data.
* @param checker Implementation of AppShareabilityChecker to perform the checks
*/
public void setShareabilityChecker(AppShareabilityChecker checker) {
mShareChecker = checker;
}
/**
* Retrieve the ShareabilityStatus of an app from the local map
* This does not interact with the saved database
* @param packageName The app's package name
* @return The status as a ShareabilityStatus integer
*/
public synchronized @ShareabilityStatus int getStatus(String packageName) {
@ShareabilityStatus int status = ShareabilityStatus.UNKNOWN;
if (mDataMap.containsKey(packageName)) {
status = mDataMap.get(packageName);
}
return status;
}
/**
* Set the status of a given app. This updates the local map as well as the saved database.
*/
public synchronized void setStatus(String packageName, @ShareabilityStatus int status) {
mDataMap.put(packageName, status);
// Write to the database on a separate thread
MODEL_EXECUTOR.post(() ->
mDao.insertAppStatus(new AppShareabilityStatus(packageName, status)));
}
/**
* Set the statuses of given apps. This updates the local map as well as the saved database.
*/
public synchronized void setStatuses(List<AppShareabilityStatus> statuses) {
for (int i = 0, size = statuses.size(); i < size; i++) {
AppShareabilityStatus entry = statuses.get(i);
mDataMap.put(entry.packageName, entry.status);
}
// Write to the database on a separate thread
MODEL_EXECUTOR.post(() ->
mDao.insertAppStatuses(statuses.toArray(new AppShareabilityStatus[0])));
}
/**
* Request a status update for a specific app
* @param packageName The app's package name
* @param callback Optional callback to be called when the update is complete. The received
* Boolean denotes whether the update was successful.
*/
public void requestAppStatusUpdate(String packageName, @Nullable Consumer<Boolean> callback) {
MODEL_EXECUTOR.post(() -> updateCache(packageName, callback));
}
/**
* Request a status update for all apps
*/
public void requestFullUpdate() {
MODEL_EXECUTOR.post(this::updateCache);
}
/**
* Update the cached shareability data for all installed apps
*/
@WorkerThread
private void updateCache() {
updateCache(/* packageName */ null, /* callback */ null);
}
/**
* Update the cached shareability data
* @param packageName A specific package to update. If null, all installed apps will be updated.
* @param callback Optional callback to be called when the update is complete. The received
* Boolean denotes whether the update was successful.
*/
@WorkerThread
private void updateCache(@Nullable String packageName, @Nullable Consumer<Boolean> callback) {
if (mShareChecker == null) {
Log.e(TAG, "AppShareabilityChecker not set");
return;
}
List<String> packageNames = new ArrayList<>();
if (packageName != null) {
packageNames.add(packageName);
} else {
LauncherApps launcherApps = mContext.getSystemService(LauncherApps.class);
List<LauncherActivityInfo> installedApps =
launcherApps.getActivityList(/* packageName */ null, Process.myUserHandle());
for (int i = 0, size = installedApps.size(); i < size; i++) {
packageNames.add(installedApps.get(i).getApplicationInfo().packageName);
}
}
mShareChecker.checkApps(packageNames, this, callback);
}
@WorkerThread
private synchronized void readFromDB() {
mDataMap.clear();
List<AppShareabilityStatus> entries = mDao.getAllEntries();
for (int i = 0, size = entries.size(); i < size; i++) {
AppShareabilityStatus entry = entries.get(i);
mDataMap.put(entry.packageName, entry.status);
}
}
/**
* Provides a testable instance of this class
* This instance allows database queries on the main thread
* @hide */
@VisibleForTesting
public static AppShareabilityManager getTestInstance(Context context) {
AppShareabilityManager manager = new AppShareabilityManager(context);
manager.mDatabase.close();
manager.mDatabase = Room.inMemoryDatabaseBuilder(context, AppShareabilityDatabase.class)
.allowMainThreadQueries()
.build();
manager.mDao = manager.mDatabase.shareabilityDao();
return manager;
}
}

Some files were not shown because too many files have changed in this diff Show More