Merge tm-dev-plus-aosp-without-vendor@8763363
Bug: 236760014 Merged-In: I38fb23dcc85676593a3f8f0851676bc526802d2e Change-Id: I077e6bd0ac2cdf53c93261d51a04eba9e1da79b0
This commit is contained in:
+21
@@ -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,
|
||||
|
||||
@@ -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
@@ -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"/>
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 can’t 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 can’t 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 can’t 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 can’t 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 can’t 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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">"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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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 can’t be shared</string>
|
||||
</resources>
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user