#638 widget: option to update on tap
This commit is contained in:
parent
56b67c47db
commit
00346ebb31
8 changed files with 112 additions and 41 deletions
|
@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- option to set the Tags page as home
|
- option to set the Tags page as home
|
||||||
- support for animated PNG
|
- support for animated PNG
|
||||||
- Info: added day filter with item date
|
- Info: added day filter with item date
|
||||||
|
- Widget: option to update image on tap
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ import deckers.thibault.aves.channel.AvesByteSendingMethodCodec
|
||||||
import deckers.thibault.aves.channel.calls.*
|
import deckers.thibault.aves.channel.calls.*
|
||||||
import deckers.thibault.aves.channel.streams.ImageByteStreamHandler
|
import deckers.thibault.aves.channel.streams.ImageByteStreamHandler
|
||||||
import deckers.thibault.aves.channel.streams.MediaStoreStreamHandler
|
import deckers.thibault.aves.channel.streams.MediaStoreStreamHandler
|
||||||
|
import deckers.thibault.aves.model.FieldMap
|
||||||
import deckers.thibault.aves.utils.FlutterUtils
|
import deckers.thibault.aves.utils.FlutterUtils
|
||||||
import deckers.thibault.aves.utils.LogUtils
|
import deckers.thibault.aves.utils.LogUtils
|
||||||
import io.flutter.FlutterInjector
|
import io.flutter.FlutterInjector
|
||||||
|
@ -40,11 +41,11 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
val widgetInfo = appWidgetManager.getAppWidgetOptions(widgetId)
|
val widgetInfo = appWidgetManager.getAppWidgetOptions(widgetId)
|
||||||
|
|
||||||
defaultScope.launch {
|
defaultScope.launch {
|
||||||
val backgroundBytes = getBytes(context, widgetId, widgetInfo, drawEntryImage = false)
|
val backgroundProps = getProps(context, widgetId, widgetInfo, drawEntryImage = false)
|
||||||
updateWidgetImage(context, appWidgetManager, widgetId, widgetInfo, backgroundBytes)
|
updateWidgetImage(context, appWidgetManager, widgetId, widgetInfo, backgroundProps)
|
||||||
|
|
||||||
val imageBytes = getBytes(context, widgetId, widgetInfo, drawEntryImage = true, reuseEntry = false)
|
val imageProps = getProps(context, widgetId, widgetInfo, drawEntryImage = true, reuseEntry = false)
|
||||||
updateWidgetImage(context, appWidgetManager, widgetId, widgetInfo, imageBytes)
|
updateWidgetImage(context, appWidgetManager, widgetId, widgetInfo, imageProps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,8 +60,8 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
}
|
}
|
||||||
imageByteFetchJob = defaultScope.launch {
|
imageByteFetchJob = defaultScope.launch {
|
||||||
delay(500)
|
delay(500)
|
||||||
val imageBytes = getBytes(context, widgetId, widgetInfo, drawEntryImage = true, reuseEntry = true)
|
val imageProps = getProps(context, widgetId, widgetInfo, drawEntryImage = true, reuseEntry = true)
|
||||||
updateWidgetImage(context, appWidgetManager, widgetId, widgetInfo, imageBytes)
|
updateWidgetImage(context, appWidgetManager, widgetId, widgetInfo, imageProps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,13 +77,13 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
return Pair(widthPx, heightPx)
|
return Pair(widthPx, heightPx)
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun getBytes(
|
private suspend fun getProps(
|
||||||
context: Context,
|
context: Context,
|
||||||
widgetId: Int,
|
widgetId: Int,
|
||||||
widgetInfo: Bundle,
|
widgetInfo: Bundle,
|
||||||
drawEntryImage: Boolean,
|
drawEntryImage: Boolean,
|
||||||
reuseEntry: Boolean = false,
|
reuseEntry: Boolean = false,
|
||||||
): ByteArray? {
|
): FieldMap? {
|
||||||
val (widthPx, heightPx) = getWidgetSizePx(context, widgetInfo)
|
val (widthPx, heightPx) = getWidgetSizePx(context, widgetInfo)
|
||||||
if (widthPx == 0 || heightPx == 0) return null
|
if (widthPx == 0 || heightPx == 0) return null
|
||||||
|
|
||||||
|
@ -90,7 +91,7 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
val messenger = flutterEngine!!.dartExecutor
|
val messenger = flutterEngine!!.dartExecutor
|
||||||
val channel = MethodChannel(messenger, WIDGET_DRAW_CHANNEL)
|
val channel = MethodChannel(messenger, WIDGET_DRAW_CHANNEL)
|
||||||
try {
|
try {
|
||||||
val bytes = suspendCoroutine<Any?> { cont ->
|
val props = suspendCoroutine<Any?> { cont ->
|
||||||
defaultScope.launch {
|
defaultScope.launch {
|
||||||
FlutterUtils.runOnUiThread {
|
FlutterUtils.runOnUiThread {
|
||||||
channel.invokeMethod("drawWidget", hashMapOf(
|
channel.invokeMethod("drawWidget", hashMapOf(
|
||||||
|
@ -116,7 +117,8 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bytes is ByteArray) return bytes
|
@Suppress("unchecked_cast")
|
||||||
|
return props as FieldMap?
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(LOG_TAG, "failed to draw widget for widgetId=$widgetId widthPx=$widthPx heightPx=$heightPx", e)
|
Log.e(LOG_TAG, "failed to draw widget for widgetId=$widgetId widthPx=$widthPx heightPx=$heightPx", e)
|
||||||
}
|
}
|
||||||
|
@ -128,9 +130,16 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
appWidgetManager: AppWidgetManager,
|
appWidgetManager: AppWidgetManager,
|
||||||
widgetId: Int,
|
widgetId: Int,
|
||||||
widgetInfo: Bundle,
|
widgetInfo: Bundle,
|
||||||
bytes: ByteArray?,
|
props: FieldMap?,
|
||||||
) {
|
) {
|
||||||
bytes ?: return
|
props ?: return
|
||||||
|
|
||||||
|
val bytes = props["bytes"] as ByteArray?
|
||||||
|
val updateOnTap = props["updateOnTap"] as Boolean?
|
||||||
|
if (bytes == null || updateOnTap == null) {
|
||||||
|
Log.e(LOG_TAG, "missing arguments")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val (widthPx, heightPx) = getWidgetSizePx(context, widgetInfo)
|
val (widthPx, heightPx) = getWidgetSizePx(context, widgetInfo)
|
||||||
if (widthPx == 0 || heightPx == 0) return
|
if (widthPx == 0 || heightPx == 0) return
|
||||||
|
@ -139,11 +148,25 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
val bitmap = Bitmap.createBitmap(widthPx, heightPx, Bitmap.Config.ARGB_8888)
|
val bitmap = Bitmap.createBitmap(widthPx, heightPx, Bitmap.Config.ARGB_8888)
|
||||||
bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bytes))
|
bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bytes))
|
||||||
|
|
||||||
// set a unique URI to prevent the intent (and its extras) from being shared by different widgets
|
val pendingIntent = if (updateOnTap) buildUpdateIntent(context, widgetId) else buildOpenAppIntent(context, widgetId)
|
||||||
val intent = Intent(MainActivity.INTENT_ACTION_WIDGET_OPEN, Uri.parse("widget://$widgetId"), context, MainActivity::class.java)
|
|
||||||
.putExtra(MainActivity.EXTRA_KEY_WIDGET_ID, widgetId)
|
|
||||||
|
|
||||||
val activity = PendingIntent.getActivity(
|
val views = RemoteViews(context.packageName, R.layout.app_widget).apply {
|
||||||
|
setImageViewBitmap(R.id.widget_img, bitmap)
|
||||||
|
setOnClickPendingIntent(R.id.widget_img, pendingIntent)
|
||||||
|
}
|
||||||
|
|
||||||
|
appWidgetManager.updateAppWidget(widgetId, views)
|
||||||
|
bitmap.recycle()
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(LOG_TAG, "failed to draw widget", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildUpdateIntent(context: Context, widgetId: Int): PendingIntent {
|
||||||
|
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, Uri.parse("widget://$widgetId"), context, HomeWidgetProvider::class.java)
|
||||||
|
.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(widgetId))
|
||||||
|
|
||||||
|
return PendingIntent.getBroadcast(
|
||||||
context,
|
context,
|
||||||
0,
|
0,
|
||||||
intent,
|
intent,
|
||||||
|
@ -153,17 +176,23 @@ class HomeWidgetProvider : AppWidgetProvider() {
|
||||||
PendingIntent.FLAG_UPDATE_CURRENT
|
PendingIntent.FLAG_UPDATE_CURRENT
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
val views = RemoteViews(context.packageName, R.layout.app_widget).apply {
|
|
||||||
setImageViewBitmap(R.id.widget_img, bitmap)
|
|
||||||
setOnClickPendingIntent(R.id.widget_img, activity)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
appWidgetManager.updateAppWidget(widgetId, views)
|
private fun buildOpenAppIntent(context: Context, widgetId: Int): PendingIntent {
|
||||||
bitmap.recycle()
|
// set a unique URI to prevent the intent (and its extras) from being shared by different widgets
|
||||||
} catch (e: Exception) {
|
val intent = Intent(MainActivity.INTENT_ACTION_WIDGET_OPEN, Uri.parse("widget://$widgetId"), context, MainActivity::class.java)
|
||||||
Log.e(LOG_TAG, "failed to draw widget", e)
|
.putExtra(MainActivity.EXTRA_KEY_WIDGET_ID, widgetId)
|
||||||
|
|
||||||
|
return PendingIntent.getActivity(
|
||||||
|
context,
|
||||||
|
0,
|
||||||
|
intent,
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
|
||||||
|
} else {
|
||||||
|
PendingIntent.FLAG_UPDATE_CURRENT
|
||||||
}
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -281,6 +281,7 @@
|
||||||
"widgetOpenPageHome": "Open home",
|
"widgetOpenPageHome": "Open home",
|
||||||
"widgetOpenPageCollection": "Open collection",
|
"widgetOpenPageCollection": "Open collection",
|
||||||
"widgetOpenPageViewer": "Open viewer",
|
"widgetOpenPageViewer": "Open viewer",
|
||||||
|
"widgetTapUpdateWidget": "Update widget",
|
||||||
|
|
||||||
"storageVolumeDescriptionFallbackPrimary": "Internal storage",
|
"storageVolumeDescriptionFallbackPrimary": "Internal storage",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary": "SD card",
|
"storageVolumeDescriptionFallbackNonPrimary": "SD card",
|
||||||
|
|
|
@ -275,6 +275,8 @@ extension ExtraWidgetOpenPageView on WidgetOpenPage {
|
||||||
return context.l10n.widgetOpenPageCollection;
|
return context.l10n.widgetOpenPageCollection;
|
||||||
case WidgetOpenPage.viewer:
|
case WidgetOpenPage.viewer:
|
||||||
return context.l10n.widgetOpenPageViewer;
|
return context.l10n.widgetOpenPageViewer;
|
||||||
|
case WidgetOpenPage.updateWidget:
|
||||||
|
return context.l10n.widgetTapUpdateWidget;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ void widgetMainCommon(AppFlavor flavor) async {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Uint8List> _drawWidget(dynamic args) async {
|
Future<Map<String, dynamic>> _drawWidget(dynamic args) async {
|
||||||
final widgetId = args['widgetId'] as int;
|
final widgetId = args['widgetId'] as int;
|
||||||
final widthPx = args['widthPx'] as int;
|
final widthPx = args['widthPx'] as int;
|
||||||
final heightPx = args['heightPx'] as int;
|
final heightPx = args['heightPx'] as int;
|
||||||
|
@ -47,12 +47,16 @@ Future<Uint8List> _drawWidget(dynamic args) async {
|
||||||
entry: entry,
|
entry: entry,
|
||||||
devicePixelRatio: devicePixelRatio,
|
devicePixelRatio: devicePixelRatio,
|
||||||
);
|
);
|
||||||
return painter.drawWidget(
|
final bytes = await painter.drawWidget(
|
||||||
widthPx: widthPx,
|
widthPx: widthPx,
|
||||||
heightPx: heightPx,
|
heightPx: heightPx,
|
||||||
outline: settings.getWidgetOutline(widgetId),
|
outline: settings.getWidgetOutline(widgetId),
|
||||||
shape: settings.getWidgetShape(widgetId),
|
shape: settings.getWidgetShape(widgetId),
|
||||||
);
|
);
|
||||||
|
return {
|
||||||
|
'bytes': bytes,
|
||||||
|
'updateOnTap': settings.getWidgetOpenPage(widgetId) == WidgetOpenPage.updateWidget,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<AvesEntry?> _getWidgetEntry(int widgetId, bool reuseEntry) async {
|
Future<AvesEntry?> _getWidgetEntry(int widgetId, bool reuseEntry) async {
|
||||||
|
|
|
@ -113,6 +113,7 @@ class _HomePageState extends State<HomePage> {
|
||||||
final page = settings.getWidgetOpenPage(widgetId);
|
final page = settings.getWidgetOpenPage(widgetId);
|
||||||
switch (page) {
|
switch (page) {
|
||||||
case WidgetOpenPage.home:
|
case WidgetOpenPage.home:
|
||||||
|
case WidgetOpenPage.updateWidget:
|
||||||
break;
|
break;
|
||||||
case WidgetOpenPage.collection:
|
case WidgetOpenPage.collection:
|
||||||
_initialFilters = settings.getWidgetCollectionFilters(widgetId);
|
_initialFilters = settings.getWidgetCollectionFilters(widgetId);
|
||||||
|
|
|
@ -44,6 +44,6 @@ enum ViewerTransition { slide, parallax, fade, zoomIn, none }
|
||||||
|
|
||||||
enum WidgetDisplayedItem { random, mostRecent }
|
enum WidgetDisplayedItem { random, mostRecent }
|
||||||
|
|
||||||
enum WidgetOpenPage { home, collection, viewer }
|
enum WidgetOpenPage { home, collection, viewer, updateWidget }
|
||||||
|
|
||||||
enum WidgetShape { rrect, circle, heart }
|
enum WidgetShape { rrect, circle, heart }
|
||||||
|
|
|
@ -178,6 +178,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"storageVolumeDescriptionFallbackPrimary",
|
"storageVolumeDescriptionFallbackPrimary",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary",
|
"storageVolumeDescriptionFallbackNonPrimary",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
|
@ -765,6 +766,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"storageVolumeDescriptionFallbackPrimary",
|
"storageVolumeDescriptionFallbackPrimary",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary",
|
"storageVolumeDescriptionFallbackNonPrimary",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
|
@ -1245,6 +1247,7 @@
|
||||||
"maxBrightnessAlways",
|
"maxBrightnessAlways",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"exportEntryDialogQuality",
|
"exportEntryDialogQuality",
|
||||||
"settingsAskEverytime",
|
"settingsAskEverytime",
|
||||||
"settingsVideoPlaybackTile",
|
"settingsVideoPlaybackTile",
|
||||||
|
@ -1267,6 +1270,7 @@
|
||||||
"maxBrightnessAlways",
|
"maxBrightnessAlways",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"exportEntryDialogQuality",
|
"exportEntryDialogQuality",
|
||||||
"settingsAskEverytime",
|
"settingsAskEverytime",
|
||||||
"settingsVideoPlaybackTile",
|
"settingsVideoPlaybackTile",
|
||||||
|
@ -1284,7 +1288,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"es": [
|
"es": [
|
||||||
|
@ -1295,7 +1300,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"eu": [
|
"eu": [
|
||||||
|
@ -1306,7 +1312,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"fa": [
|
"fa": [
|
||||||
|
@ -1382,6 +1389,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
"otherDirectoryDescription",
|
"otherDirectoryDescription",
|
||||||
"restrictedAccessDialogMessage",
|
"restrictedAccessDialogMessage",
|
||||||
|
@ -1820,7 +1828,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"gl": [
|
"gl": [
|
||||||
|
@ -1891,6 +1900,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"storageVolumeDescriptionFallbackPrimary",
|
"storageVolumeDescriptionFallbackPrimary",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary",
|
"storageVolumeDescriptionFallbackNonPrimary",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
|
@ -2555,6 +2565,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"storageVolumeDescriptionFallbackPrimary",
|
"storageVolumeDescriptionFallbackPrimary",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary",
|
"storageVolumeDescriptionFallbackNonPrimary",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
|
@ -3199,6 +3210,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"storageVolumeDescriptionFallbackPrimary",
|
"storageVolumeDescriptionFallbackPrimary",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary",
|
"storageVolumeDescriptionFallbackNonPrimary",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
|
@ -3674,7 +3686,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"id": [
|
"id": [
|
||||||
|
@ -3685,7 +3698,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"it": [
|
"it": [
|
||||||
|
@ -3696,7 +3710,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ja": [
|
"ja": [
|
||||||
|
@ -3722,6 +3737,7 @@
|
||||||
"subtitlePositionBottom",
|
"subtitlePositionBottom",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"vaultBinUsageDialogMessage",
|
"vaultBinUsageDialogMessage",
|
||||||
"exportEntryDialogQuality",
|
"exportEntryDialogQuality",
|
||||||
"exportEntryDialogWriteMetadata",
|
"exportEntryDialogWriteMetadata",
|
||||||
|
@ -3757,7 +3773,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"lt": [
|
"lt": [
|
||||||
|
@ -3791,6 +3808,7 @@
|
||||||
"settingsVideoEnablePip",
|
"settingsVideoEnablePip",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"newVaultWarningDialogMessage",
|
"newVaultWarningDialogMessage",
|
||||||
"newVaultDialogTitle",
|
"newVaultDialogTitle",
|
||||||
"configureVaultDialogTitle",
|
"configureVaultDialogTitle",
|
||||||
|
@ -4036,6 +4054,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"storageVolumeDescriptionFallbackPrimary",
|
"storageVolumeDescriptionFallbackPrimary",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary",
|
"storageVolumeDescriptionFallbackNonPrimary",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
|
@ -4521,6 +4540,7 @@
|
||||||
"settingsVideoEnablePip",
|
"settingsVideoEnablePip",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"patternDialogEnter",
|
"patternDialogEnter",
|
||||||
"patternDialogConfirm",
|
"patternDialogConfirm",
|
||||||
"exportEntryDialogQuality",
|
"exportEntryDialogQuality",
|
||||||
|
@ -4567,6 +4587,7 @@
|
||||||
"vaultLockTypePattern",
|
"vaultLockTypePattern",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"newVaultWarningDialogMessage",
|
"newVaultWarningDialogMessage",
|
||||||
"newVaultDialogTitle",
|
"newVaultDialogTitle",
|
||||||
"configureVaultDialogTitle",
|
"configureVaultDialogTitle",
|
||||||
|
@ -4653,6 +4674,7 @@
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
"wallpaperTargetHome",
|
"wallpaperTargetHome",
|
||||||
"wallpaperTargetHomeLock",
|
"wallpaperTargetHomeLock",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"setCoverDialogCustom",
|
"setCoverDialogCustom",
|
||||||
"newVaultWarningDialogMessage",
|
"newVaultWarningDialogMessage",
|
||||||
"newVaultDialogTitle",
|
"newVaultDialogTitle",
|
||||||
|
@ -5145,6 +5167,7 @@
|
||||||
"widgetOpenPageHome",
|
"widgetOpenPageHome",
|
||||||
"widgetOpenPageCollection",
|
"widgetOpenPageCollection",
|
||||||
"widgetOpenPageViewer",
|
"widgetOpenPageViewer",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"storageVolumeDescriptionFallbackPrimary",
|
"storageVolumeDescriptionFallbackPrimary",
|
||||||
"storageVolumeDescriptionFallbackNonPrimary",
|
"storageVolumeDescriptionFallbackNonPrimary",
|
||||||
"rootDirectoryDescription",
|
"rootDirectoryDescription",
|
||||||
|
@ -5570,7 +5593,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"pt": [
|
"pt": [
|
||||||
|
@ -5581,7 +5605,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ro": [
|
"ro": [
|
||||||
|
@ -5597,6 +5622,7 @@
|
||||||
"maxBrightnessAlways",
|
"maxBrightnessAlways",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"exportEntryDialogQuality",
|
"exportEntryDialogQuality",
|
||||||
"settingsAskEverytime",
|
"settingsAskEverytime",
|
||||||
"settingsVideoPlaybackTile",
|
"settingsVideoPlaybackTile",
|
||||||
|
@ -5619,6 +5645,7 @@
|
||||||
"maxBrightnessAlways",
|
"maxBrightnessAlways",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"exportEntryDialogQuality",
|
"exportEntryDialogQuality",
|
||||||
"statePageTitle",
|
"statePageTitle",
|
||||||
"stateEmpty",
|
"stateEmpty",
|
||||||
|
@ -5668,6 +5695,7 @@
|
||||||
"settingsVideoEnablePip",
|
"settingsVideoEnablePip",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"otherDirectoryDescription",
|
"otherDirectoryDescription",
|
||||||
"storageAccessDialogMessage",
|
"storageAccessDialogMessage",
|
||||||
"restrictedAccessDialogMessage",
|
"restrictedAccessDialogMessage",
|
||||||
|
@ -6121,6 +6149,7 @@
|
||||||
"settingsVideoEnablePip",
|
"settingsVideoEnablePip",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"newVaultWarningDialogMessage",
|
"newVaultWarningDialogMessage",
|
||||||
"newVaultDialogTitle",
|
"newVaultDialogTitle",
|
||||||
"configureVaultDialogTitle",
|
"configureVaultDialogTitle",
|
||||||
|
@ -6501,6 +6530,7 @@
|
||||||
"settingsVideoEnablePip",
|
"settingsVideoEnablePip",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"newVaultWarningDialogMessage",
|
"newVaultWarningDialogMessage",
|
||||||
"newVaultDialogTitle",
|
"newVaultDialogTitle",
|
||||||
"configureVaultDialogTitle",
|
"configureVaultDialogTitle",
|
||||||
|
@ -6547,7 +6577,8 @@
|
||||||
"editorTransformRotate",
|
"editorTransformRotate",
|
||||||
"cropAspectRatioFree",
|
"cropAspectRatioFree",
|
||||||
"cropAspectRatioOriginal",
|
"cropAspectRatioOriginal",
|
||||||
"cropAspectRatioSquare"
|
"cropAspectRatioSquare",
|
||||||
|
"widgetTapUpdateWidget"
|
||||||
],
|
],
|
||||||
|
|
||||||
"zh": [
|
"zh": [
|
||||||
|
@ -6575,6 +6606,7 @@
|
||||||
"settingsVideoEnablePip",
|
"settingsVideoEnablePip",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"newVaultWarningDialogMessage",
|
"newVaultWarningDialogMessage",
|
||||||
"newVaultDialogTitle",
|
"newVaultDialogTitle",
|
||||||
"configureVaultDialogTitle",
|
"configureVaultDialogTitle",
|
||||||
|
@ -6649,6 +6681,7 @@
|
||||||
"settingsVideoEnablePip",
|
"settingsVideoEnablePip",
|
||||||
"videoResumptionModeNever",
|
"videoResumptionModeNever",
|
||||||
"videoResumptionModeAlways",
|
"videoResumptionModeAlways",
|
||||||
|
"widgetTapUpdateWidget",
|
||||||
"newVaultWarningDialogMessage",
|
"newVaultWarningDialogMessage",
|
||||||
"newVaultDialogTitle",
|
"newVaultDialogTitle",
|
||||||
"configureVaultDialogTitle",
|
"configureVaultDialogTitle",
|
||||||
|
|
Loading…
Reference in a new issue