Snap for 7336869 from 4d5c733411 to sc-release
Change-Id: I54abcac606e8cbd45004e08deaf2dcdcd82badfd
This commit is contained in:
+38
@@ -36,6 +36,7 @@ import android.os.UserHandle;
|
||||
|
||||
import com.android.launcher3.InvariantDeviceProfile;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.icons.ComponentWithLabel;
|
||||
import com.android.launcher3.icons.IconCache;
|
||||
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
|
||||
@@ -44,6 +45,7 @@ import com.android.launcher3.model.data.AppInfo;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
|
||||
import com.android.launcher3.model.data.WorkspaceItemInfo;
|
||||
import com.android.launcher3.shadows.ShadowDeviceFlag;
|
||||
import com.android.launcher3.util.ComponentKey;
|
||||
import com.android.launcher3.util.IntArray;
|
||||
import com.android.launcher3.util.ItemInfoMatcher;
|
||||
@@ -60,6 +62,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowAppWidgetManager;
|
||||
import org.robolectric.shadows.ShadowPackageManager;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
@@ -174,6 +177,41 @@ public final class WidgetsPredicationUpdateTaskTest {
|
||||
assertWidgetInfo(recommendedWidgets.get(2).info, mApp1Provider1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void widgetsRecommendationRan_localFilterDisabled_shouldReturnWidgetsInPredicationOrder()
|
||||
throws Exception {
|
||||
ShadowDeviceFlag shadowDeviceFlag = Shadow.extract(
|
||||
FeatureFlags.ENABLE_LOCAL_RECOMMENDED_WIDGETS_FILTER);
|
||||
shadowDeviceFlag.setValue(false);
|
||||
|
||||
// WHEN newPredicationTask is executed with 5 predicated widgets.
|
||||
AppTarget widget1 = new AppTarget(new AppTargetId("app1"), "app1", "provider1",
|
||||
mUserHandle);
|
||||
AppTarget widget2 = new AppTarget(new AppTargetId("app1"), "app1", "provider2",
|
||||
mUserHandle);
|
||||
// Not installed app
|
||||
AppTarget widget3 = new AppTarget(new AppTargetId("app2"), "app3", "provider1",
|
||||
mUserHandle);
|
||||
// Not installed widget
|
||||
AppTarget widget4 = new AppTarget(new AppTargetId("app4"), "app4", "provider3",
|
||||
mUserHandle);
|
||||
AppTarget widget5 = new AppTarget(new AppTargetId("app5"), "app5", "provider1",
|
||||
mUserHandle);
|
||||
mModelHelper.executeTaskForTest(
|
||||
newWidgetsPredicationTask(List.of(widget5, widget3, widget2, widget4, widget1)))
|
||||
.forEach(Runnable::run);
|
||||
|
||||
// THEN only 3 widgets are returned because the launcher only filters out non-exist widgets.
|
||||
List<PendingAddWidgetInfo> recommendedWidgets = mCallback.mRecommendedWidgets.items
|
||||
.stream()
|
||||
.map(itemInfo -> (PendingAddWidgetInfo) itemInfo)
|
||||
.collect(Collectors.toList());
|
||||
assertThat(recommendedWidgets).hasSize(3);
|
||||
assertWidgetInfo(recommendedWidgets.get(0).info, mApp5Provider1);
|
||||
assertWidgetInfo(recommendedWidgets.get(1).info, mApp1Provider2);
|
||||
assertWidgetInfo(recommendedWidgets.get(2).info, mApp1Provider1);
|
||||
}
|
||||
|
||||
private void assertWidgetInfo(
|
||||
LauncherAppWidgetProviderInfo actual, AppWidgetProviderInfo expected) {
|
||||
assertThat(actual.provider).isEqualTo(expected.provider);
|
||||
|
||||
@@ -19,7 +19,7 @@ import static com.android.launcher3.AbstractFloatingView.TYPE_ALL;
|
||||
import static com.android.launcher3.AbstractFloatingView.TYPE_HIDE_BACK_BUTTON;
|
||||
import static com.android.launcher3.LauncherState.FLAG_HIDE_BACK_BUTTON;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_SIZE;
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_ACTIVE_SCREEN;
|
||||
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
|
||||
import static com.android.quickstep.SysUINavigationMode.Mode.TWO_BUTTONS;
|
||||
import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_HOME_KEY;
|
||||
@@ -240,7 +240,7 @@ public abstract class BaseQuickstepLauncher extends Launcher
|
||||
public void onDisplayInfoChanged(Context context, DisplayController.Info info,
|
||||
int flags) {
|
||||
super.onDisplayInfoChanged(context, info, flags);
|
||||
if ((flags & CHANGE_SIZE) != 0) {
|
||||
if ((flags & CHANGE_ACTIVE_SCREEN) != 0) {
|
||||
addTaskbarIfNecessary();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ import com.android.launcher3.BubbleTextView;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.allapps.FloatingHeaderRow;
|
||||
import com.android.launcher3.allapps.FloatingHeaderView;
|
||||
@@ -80,9 +79,9 @@ public class PredictionRowView extends LinearLayout implements
|
||||
setOrientation(LinearLayout.HORIZONTAL);
|
||||
|
||||
mFocusHelper = new SimpleFocusIndicatorHelper(this);
|
||||
mNumPredictedAppsPerRow = LauncherAppState.getIDP(context).numAllAppsColumns;
|
||||
mLauncher = Launcher.getLauncher(context);
|
||||
mLauncher.addOnDeviceProfileChangeListener(this);
|
||||
mNumPredictedAppsPerRow = mLauncher.getDeviceProfile().numShownAllAppsColumns;
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
@@ -174,7 +173,7 @@ public class PredictionRowView extends LinearLayout implements
|
||||
|
||||
@Override
|
||||
public void onDeviceProfileChanged(DeviceProfile dp) {
|
||||
mNumPredictedAppsPerRow = dp.inv.numAllAppsColumns;
|
||||
mNumPredictedAppsPerRow = dp.numShownAllAppsColumns;
|
||||
removeAllViews();
|
||||
applyPredictionApps();
|
||||
}
|
||||
|
||||
@@ -104,8 +104,8 @@ public class QuickstepModelDelegate extends ModelDelegate implements OnIDPChange
|
||||
// TODO: Implement caching and preloading
|
||||
super.loadItems(ums, pinnedShortcuts);
|
||||
|
||||
WorkspaceItemFactory allAppsFactory =
|
||||
new WorkspaceItemFactory(mApp, ums, pinnedShortcuts, mIDP.numAllAppsColumns);
|
||||
WorkspaceItemFactory allAppsFactory = new WorkspaceItemFactory(
|
||||
mApp, ums, pinnedShortcuts, mIDP.numDatabaseAllAppsColumns);
|
||||
mAllAppsState.items.setItems(
|
||||
mAllAppsState.storage.read(mApp.getContext(), allAppsFactory, ums.allUsers::get));
|
||||
mDataModel.extraItems.put(CONTAINER_PREDICTION, mAllAppsState.items);
|
||||
@@ -204,7 +204,7 @@ public class QuickstepModelDelegate extends ModelDelegate implements OnIDPChange
|
||||
registerPredictor(mAllAppsState, apm.createAppPredictionSession(
|
||||
new AppPredictionContext.Builder(context)
|
||||
.setUiSurface("home")
|
||||
.setPredictedTargetCount(mIDP.numAllAppsColumns)
|
||||
.setPredictedTargetCount(mIDP.numDatabaseAllAppsColumns)
|
||||
.build()));
|
||||
|
||||
// TODO: get bundle
|
||||
|
||||
@@ -16,16 +16,17 @@
|
||||
package com.android.launcher3.model;
|
||||
|
||||
import android.app.prediction.AppTarget;
|
||||
import android.content.ComponentName;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
|
||||
import com.android.launcher3.model.QuickstepModelDelegate.PredictorState;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.util.ComponentKey;
|
||||
import com.android.launcher3.util.PackageUserKey;
|
||||
import com.android.launcher3.widget.PendingAddWidgetInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -56,25 +57,43 @@ public final class WidgetsPredictionUpdateTask extends BaseModelUpdateTask {
|
||||
Map<PackageUserKey, List<WidgetItem>> allWidgets =
|
||||
dataModel.widgetsModel.getAllWidgetsWithoutShortcuts();
|
||||
|
||||
ArrayList<ItemInfo> recommendedWidgetsInDescendingOrder = new ArrayList<>();
|
||||
for (AppTarget app : mTargets) {
|
||||
PackageUserKey packageUserKey = new PackageUserKey(app.getPackageName(), app.getUser());
|
||||
if (allWidgets.containsKey(packageUserKey)) {
|
||||
List<WidgetItem> notAddedWidgets = allWidgets.get(packageUserKey).stream()
|
||||
.filter(item ->
|
||||
!widgetsInWorkspace.contains(
|
||||
new ComponentKey(item.componentName, item.user)))
|
||||
.collect(Collectors.toList());
|
||||
if (notAddedWidgets.size() > 0) {
|
||||
// Even an apps have more than one widgets, we only include one widget.
|
||||
recommendedWidgetsInDescendingOrder.add(
|
||||
new PendingAddWidgetInfo(notAddedWidgets.get(0).widgetInfo));
|
||||
FixedContainerItems fixedContainerItems = mPredictorState.items;
|
||||
fixedContainerItems.items.clear();
|
||||
|
||||
if (FeatureFlags.ENABLE_LOCAL_RECOMMENDED_WIDGETS_FILTER.get()) {
|
||||
for (AppTarget app : mTargets) {
|
||||
PackageUserKey packageUserKey = new PackageUserKey(app.getPackageName(),
|
||||
app.getUser());
|
||||
if (allWidgets.containsKey(packageUserKey)) {
|
||||
List<WidgetItem> notAddedWidgets = allWidgets.get(packageUserKey).stream()
|
||||
.filter(item ->
|
||||
!widgetsInWorkspace.contains(
|
||||
new ComponentKey(item.componentName, item.user)))
|
||||
.collect(Collectors.toList());
|
||||
if (notAddedWidgets.size() > 0) {
|
||||
// Even an apps have more than one widgets, we only include one widget.
|
||||
fixedContainerItems.items.add(
|
||||
new PendingAddWidgetInfo(notAddedWidgets.get(0).widgetInfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Map<ComponentKey, WidgetItem> widgetItems =
|
||||
allWidgets.values().stream().flatMap(List::stream)
|
||||
.collect(Collectors.toMap(widget -> (ComponentKey) widget,
|
||||
widget -> widget));
|
||||
for (AppTarget app : mTargets) {
|
||||
if (TextUtils.isEmpty(app.getClassName())) {
|
||||
continue;
|
||||
}
|
||||
ComponentKey targetWidget = new ComponentKey(
|
||||
new ComponentName(app.getPackageName(), app.getClassName()), app.getUser());
|
||||
if (widgetItems.containsKey(targetWidget)) {
|
||||
fixedContainerItems.items.add(
|
||||
new PendingAddWidgetInfo(widgetItems.get(targetWidget).widgetInfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
FixedContainerItems fixedContainerItems = mPredictorState.items;
|
||||
fixedContainerItems.items.clear();
|
||||
fixedContainerItems.items.addAll(recommendedWidgetsInDescendingOrder);
|
||||
bindExtraContainerItems(fixedContainerItems);
|
||||
|
||||
// Don't store widgets prediction to disk because it is not used frequently.
|
||||
|
||||
@@ -18,13 +18,23 @@ package com.android.launcher3.uioverrides;
|
||||
|
||||
import android.app.Person;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.view.Display;
|
||||
|
||||
import com.android.launcher3.Utilities;
|
||||
|
||||
public class ApiWrapper {
|
||||
|
||||
public static final boolean TASKBAR_DRAWN_IN_PROCESS = true;
|
||||
|
||||
public static Person[] getPersons(ShortcutInfo si) {
|
||||
Person[] persons = si.getPersons();
|
||||
return persons == null ? Utilities.EMPTY_PERSON_ARRAY : persons;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the display is an internal displays
|
||||
*/
|
||||
public static boolean isInternalDisplay(Display display) {
|
||||
return display.getType() == Display.TYPE_INTERNAL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,12 @@ public class DeviceFlag extends DebugFlag {
|
||||
mListeners.remove(r);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean get() {
|
||||
// Override this method in order to let Robolectric ShadowDeviceFlag to stub it.
|
||||
return super.get();
|
||||
}
|
||||
|
||||
private void registerDeviceConfigChangedListener(Context context) {
|
||||
DeviceConfig.addOnPropertiesChangedListener(
|
||||
NAMESPACE_LAUNCHER,
|
||||
|
||||
@@ -50,6 +50,7 @@ class QuickstepInteractionHandler implements RemoteViews.InteractionHandler {
|
||||
Pair<Intent, ActivityOptions> options = remoteResponse.getLaunchOptions(hostView);
|
||||
ActivityOptionsWrapper activityOptions = mLauncher.getAppTransitionManager()
|
||||
.getActivityLaunchOptions(mLauncher, hostView);
|
||||
activityOptions.options.setPendingIntentLaunchFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
Object itemInfo = hostView.getTag();
|
||||
if (itemInfo instanceof ItemInfo) {
|
||||
mLauncher.addLaunchCookie((ItemInfo) itemInfo, activityOptions.options);
|
||||
|
||||
@@ -26,6 +26,7 @@ import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.LauncherState.OVERVIEW;
|
||||
import static com.android.launcher3.LauncherState.OVERVIEW_MODAL_TASK;
|
||||
import static com.android.launcher3.compat.AccessibilityManagerCompat.sendCustomAccessibilityEvent;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_WIDGET_APP_START;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_APP_LAUNCH_TAP;
|
||||
import static com.android.launcher3.testing.TestProtocol.HINT_STATE_ORDINAL;
|
||||
import static com.android.launcher3.testing.TestProtocol.HINT_STATE_TWO_BUTTON_ORDINAL;
|
||||
@@ -36,7 +37,6 @@ import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SY
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.SystemProperties;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.View;
|
||||
|
||||
@@ -90,9 +90,6 @@ import java.util.stream.Stream;
|
||||
|
||||
public class QuickstepLauncher extends BaseQuickstepLauncher {
|
||||
|
||||
private static final boolean ENABLE_APP_WIDGET_LAUNCH_ANIMATION =
|
||||
SystemProperties.getBoolean("persist.debug.quickstep_app_widget_launch", false);
|
||||
|
||||
public static final boolean GO_LOW_RAM_RECENTS_ENABLED = false;
|
||||
/**
|
||||
* Reusable command for applying the shelf height on the background thread.
|
||||
@@ -327,7 +324,7 @@ public class QuickstepLauncher extends BaseQuickstepLauncher {
|
||||
|
||||
protected LauncherAppWidgetHost createAppWidgetHost() {
|
||||
LauncherAppWidgetHost appWidgetHost = super.createAppWidgetHost();
|
||||
if (ENABLE_APP_WIDGET_LAUNCH_ANIMATION) {
|
||||
if (ENABLE_QUICKSTEP_WIDGET_APP_START.get()) {
|
||||
appWidgetHost.setInteractionHandler(new QuickstepInteractionHandler(this));
|
||||
}
|
||||
return appWidgetHost;
|
||||
|
||||
+14
-3
@@ -77,6 +77,7 @@ public class QuickstepAtomicAnimationFactory extends
|
||||
@Override
|
||||
public void prepareForAtomicAnimation(LauncherState fromState, LauncherState toState,
|
||||
StateAnimationConfig config) {
|
||||
RecentsView overview = mActivity.getOverviewPanel();
|
||||
if (toState == NORMAL && fromState == OVERVIEW) {
|
||||
config.setInterpolator(ANIM_WORKSPACE_SCALE, DEACCEL);
|
||||
config.setInterpolator(ANIM_WORKSPACE_FADE, ACCEL);
|
||||
@@ -85,7 +86,12 @@ public class QuickstepAtomicAnimationFactory extends
|
||||
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, ACCEL_DEACCEL);
|
||||
|
||||
if (SysUINavigationMode.getMode(mActivity) == NO_BUTTON) {
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, FINAL_FRAME);
|
||||
// Scrolling in tasks, so make visible straight away
|
||||
if (overview.getTaskViewCount() > 0) {
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, FINAL_FRAME);
|
||||
} else {
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL_1_7);
|
||||
}
|
||||
} else {
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL_1_7);
|
||||
}
|
||||
@@ -122,13 +128,18 @@ public class QuickstepAtomicAnimationFactory extends
|
||||
config.setInterpolator(ANIM_WORKSPACE_SCALE,
|
||||
fromState == NORMAL ? ACCEL : OVERSHOOT_1_2);
|
||||
config.setInterpolator(ANIM_WORKSPACE_TRANSLATE, ACCEL);
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, INSTANT);
|
||||
|
||||
// Scrolling in tasks, so show straight away
|
||||
if (overview.getTaskViewCount() > 0) {
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, INSTANT);
|
||||
} else {
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, OVERSHOOT_1_2);
|
||||
}
|
||||
} else {
|
||||
config.setInterpolator(ANIM_WORKSPACE_SCALE, OVERSHOOT_1_2);
|
||||
config.setInterpolator(ANIM_OVERVIEW_FADE, OVERSHOOT_1_2);
|
||||
|
||||
// Scale up the recents, if it is not coming from the side
|
||||
RecentsView overview = mActivity.getOverviewPanel();
|
||||
if (overview.getVisibility() != VISIBLE || overview.getContentAlpha() == 0) {
|
||||
RECENTS_SCALE_PROPERTY.set(overview, RECENTS_PREPARE_SCALE);
|
||||
}
|
||||
|
||||
-45
@@ -18,20 +18,11 @@ package com.android.launcher3.uioverrides.touchcontrollers;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.VIEW_BACKGROUND_COLOR;
|
||||
import static com.android.launcher3.LauncherAnimUtils.newCancelListener;
|
||||
import static com.android.launcher3.LauncherState.ALL_APPS;
|
||||
import static com.android.launcher3.LauncherState.HINT_STATE;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.LauncherState.OVERVIEW;
|
||||
import static com.android.launcher3.Utilities.EDGE_NAV_BAR;
|
||||
import static com.android.launcher3.anim.Interpolators.ACCEL;
|
||||
import static com.android.launcher3.anim.Interpolators.ACCEL_DEACCEL;
|
||||
import static com.android.launcher3.anim.Interpolators.DEACCEL;
|
||||
import static com.android.launcher3.anim.Interpolators.DEACCEL_3;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_ALL_APPS_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_ALL_APPS_HEADER_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_SCALE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_TRANSLATE;
|
||||
import static com.android.launcher3.util.VibratorWrapper.OVERVIEW_HAPTIC;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
|
||||
|
||||
@@ -45,7 +36,6 @@ import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.states.StateAnimationConfig;
|
||||
import com.android.launcher3.util.VibratorWrapper;
|
||||
import com.android.quickstep.SystemUiProxy;
|
||||
@@ -269,39 +259,4 @@ public class NoButtonNavbarToOverviewTouchController extends PortraitStatesTouch
|
||||
private float dpiFromPx(float pixels) {
|
||||
return Utilities.dpiFromPx(pixels, mLauncher.getResources().getDisplayMetrics().densityDpi);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected StateAnimationConfig getConfigForStates(
|
||||
LauncherState fromState, LauncherState toState) {
|
||||
if (fromState == NORMAL && toState == ALL_APPS) {
|
||||
StateAnimationConfig builder = new StateAnimationConfig();
|
||||
builder.setInterpolator(ANIM_ALL_APPS_HEADER_FADE, Interpolators.clampToProgress(
|
||||
ACCEL,
|
||||
0,
|
||||
ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD));
|
||||
builder.setInterpolator(ANIM_ALL_APPS_FADE, Interpolators.clampToProgress(
|
||||
ACCEL,
|
||||
ALL_APPS_CONTENT_FADE_MIN_CLAMPING_THRESHOLD,
|
||||
ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD));
|
||||
|
||||
// Get workspace out of the way quickly, to prepare for potential pause.
|
||||
builder.setInterpolator(ANIM_WORKSPACE_SCALE, DEACCEL_3);
|
||||
builder.setInterpolator(ANIM_WORKSPACE_TRANSLATE, DEACCEL_3);
|
||||
builder.setInterpolator(ANIM_WORKSPACE_FADE, DEACCEL_3);
|
||||
return builder;
|
||||
} else if (fromState == ALL_APPS && toState == NORMAL) {
|
||||
StateAnimationConfig builder = new StateAnimationConfig();
|
||||
|
||||
builder.setInterpolator(ANIM_ALL_APPS_FADE, Interpolators.clampToProgress(
|
||||
DEACCEL,
|
||||
1 - ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD,
|
||||
1 - ALL_APPS_CONTENT_FADE_MIN_CLAMPING_THRESHOLD));
|
||||
builder.setInterpolator(ANIM_ALL_APPS_HEADER_FADE, Interpolators.clampToProgress(
|
||||
DEACCEL,
|
||||
1 - ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD,
|
||||
1));
|
||||
return builder;
|
||||
}
|
||||
return super.getConfigForStates(fromState, toState);
|
||||
}
|
||||
}
|
||||
|
||||
+19
-6
@@ -24,6 +24,7 @@ import static com.android.launcher3.LauncherState.OVERVIEW;
|
||||
import static com.android.launcher3.anim.Interpolators.ACCEL;
|
||||
import static com.android.launcher3.anim.Interpolators.DEACCEL;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_ALL_APPS_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_SCRIM_FADE;
|
||||
|
||||
import android.view.MotionEvent;
|
||||
|
||||
@@ -56,13 +57,17 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr
|
||||
/**
|
||||
* Minimum clamping progress for fading in all apps content
|
||||
*/
|
||||
protected static final float ALL_APPS_CONTENT_FADE_MIN_CLAMPING_THRESHOLD = 0.4f;
|
||||
|
||||
protected static final float ALL_APPS_CONTENT_FADE_MIN_CLAMPING_THRESHOLD = 0.5f;
|
||||
|
||||
/**
|
||||
* The progress at which recents will begin fading out when swiping up from overview.
|
||||
* Minimum clamping progress for fading in all apps scrim
|
||||
*/
|
||||
private static final float RECENTS_FADE_THRESHOLD = 0.88f;
|
||||
protected static final float ALL_APPS_SCRIM_VISIBLE_THRESHOLD = .1f;
|
||||
|
||||
/**
|
||||
* Maximum clamping progress for opaque all apps scrim
|
||||
*/
|
||||
protected static final float ALL_APPS_SCRIM_OPAQUE_THRESHOLD = .5f;
|
||||
|
||||
private final PortraitOverviewStateTouchHelper mOverviewPortraitStateTouchHelper;
|
||||
|
||||
@@ -122,14 +127,22 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr
|
||||
private StateAnimationConfig getNormalToAllAppsAnimation() {
|
||||
StateAnimationConfig builder = new StateAnimationConfig();
|
||||
builder.setInterpolator(ANIM_ALL_APPS_FADE, Interpolators.clampToProgress(ACCEL,
|
||||
0, ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD));
|
||||
ALL_APPS_CONTENT_FADE_MIN_CLAMPING_THRESHOLD,
|
||||
ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD));
|
||||
builder.setInterpolator(ANIM_SCRIM_FADE, Interpolators.clampToProgress(ACCEL,
|
||||
ALL_APPS_SCRIM_VISIBLE_THRESHOLD,
|
||||
ALL_APPS_SCRIM_OPAQUE_THRESHOLD));
|
||||
return builder;
|
||||
}
|
||||
|
||||
private StateAnimationConfig getAllAppsToNormalAnimation() {
|
||||
StateAnimationConfig builder = new StateAnimationConfig();
|
||||
builder.setInterpolator(ANIM_ALL_APPS_FADE, Interpolators.clampToProgress(DEACCEL,
|
||||
1 - ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD, 1));
|
||||
1 - ALL_APPS_CONTENT_FADE_MAX_CLAMPING_THRESHOLD,
|
||||
1 - ALL_APPS_CONTENT_FADE_MIN_CLAMPING_THRESHOLD));
|
||||
builder.setInterpolator(ANIM_SCRIM_FADE, Interpolators.clampToProgress(DEACCEL,
|
||||
1 - ALL_APPS_SCRIM_OPAQUE_THRESHOLD,
|
||||
1 - ALL_APPS_SCRIM_VISIBLE_THRESHOLD));
|
||||
return builder;
|
||||
}
|
||||
|
||||
|
||||
@@ -191,7 +191,7 @@ class OrientationTouchTransformer {
|
||||
* @see #enableMultipleRegions(boolean, Info)
|
||||
*/
|
||||
void createOrAddTouchRegion(Info info) {
|
||||
mCurrentDisplay = new CurrentDisplay(info.realSize, info.rotation);
|
||||
mCurrentDisplay = new CurrentDisplay(info.currentSize, info.rotation);
|
||||
|
||||
if (mQuickStepStartingRotation > QUICKSTEP_ROTATION_UNINITIALIZED
|
||||
&& mCurrentDisplay.rotation == mQuickStepStartingRotation) {
|
||||
@@ -256,7 +256,7 @@ class OrientationTouchTransformer {
|
||||
Log.d(TAG, "clearing all regions except rotation: " + mCurrentDisplay.rotation);
|
||||
}
|
||||
|
||||
mCurrentDisplay = new CurrentDisplay(region.realSize, region.rotation);
|
||||
mCurrentDisplay = new CurrentDisplay(region.currentSize, region.rotation);
|
||||
OrientationRectF regionToKeep = mSwipeTouchRegions.get(mCurrentDisplay);
|
||||
if (DEBUG) {
|
||||
Log.d(TestProtocol.NO_SWIPE_TO_HOME, "cached region: " + regionToKeep
|
||||
@@ -289,7 +289,7 @@ class OrientationTouchTransformer {
|
||||
+ " with mode: " + mMode + " displayRotation: " + display.rotation);
|
||||
}
|
||||
|
||||
Point size = display.realSize;
|
||||
Point size = display.currentSize;
|
||||
int rotation = display.rotation;
|
||||
int touchHeight = mNavBarGesturalHeight;
|
||||
OrientationRectF orientationRectF =
|
||||
|
||||
@@ -18,7 +18,7 @@ package com.android.quickstep;
|
||||
import static android.content.Intent.ACTION_USER_UNLOCKED;
|
||||
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_ALL;
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_FRAME_DELAY;
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_ROTATION;
|
||||
import static com.android.launcher3.util.SettingsCache.ONE_HANDED_ENABLED;
|
||||
import static com.android.launcher3.util.SettingsCache.ONE_HANDED_SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED;
|
||||
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
|
||||
@@ -271,15 +271,9 @@ public class RecentsAnimationDeviceState implements
|
||||
|
||||
@Override
|
||||
public void onDisplayInfoChanged(Context context, Info info, int flags) {
|
||||
if (info.id != getDisplayId() || flags == CHANGE_FRAME_DELAY) {
|
||||
// ignore displays that aren't running launcher and frame refresh rate changes
|
||||
return;
|
||||
if ((flags & CHANGE_ROTATION) != 0) {
|
||||
mNavBarPosition = new NavBarPosition(mMode, info);
|
||||
}
|
||||
|
||||
if (!mMode.hasGestures) {
|
||||
return;
|
||||
}
|
||||
mNavBarPosition = new NavBarPosition(mMode, info);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,8 +17,9 @@ package com.android.quickstep;
|
||||
|
||||
import static android.view.Surface.ROTATION_0;
|
||||
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_ACTIVE_SCREEN;
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_ALL;
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_FRAME_DELAY;
|
||||
import static com.android.launcher3.util.DisplayController.CHANGE_ROTATION;
|
||||
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
|
||||
import static com.android.quickstep.SysUINavigationMode.Mode.THREE_BUTTONS;
|
||||
|
||||
@@ -274,8 +275,7 @@ public class RotationTouchHelper implements
|
||||
|
||||
@Override
|
||||
public void onDisplayInfoChanged(Context context, Info info, int flags) {
|
||||
if (info.id != mDisplayId|| flags == CHANGE_FRAME_DELAY) {
|
||||
// ignore displays that aren't running launcher and frame refresh rate changes
|
||||
if ((flags & (CHANGE_ROTATION | CHANGE_ACTIVE_SCREEN)) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_MO
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_SCALE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_X;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_Y;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_SCRIM_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_SCRIM_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW;
|
||||
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET;
|
||||
import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
|
||||
@@ -98,6 +98,6 @@ public class FallbackRecentsStateController implements StateHandler<RecentsState
|
||||
state.displayOverviewTasksAsGrid(mActivity.getDeviceProfile()) ? 1f : 0f, LINEAR);
|
||||
|
||||
setter.setViewBackgroundColor(mActivity.getScrimView(), state.getScrimColor(mActivity),
|
||||
config.getInterpolator(ANIM_WORKSPACE_SCRIM_FADE, LINEAR));
|
||||
config.getInterpolator(ANIM_SCRIM_FADE, LINEAR));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ public class DeviceLockedInputConsumer implements InputConsumer,
|
||||
R.dimen.device_locked_y_offset);
|
||||
|
||||
// Do not use DeviceProfile as the user data might be locked
|
||||
mDisplaySize = DisplayController.INSTANCE.get(context).getInfo().realSize;
|
||||
mDisplaySize = DisplayController.INSTANCE.get(context).getInfo().currentSize;
|
||||
|
||||
// Init states
|
||||
mStateCallback = new MultiStateCallback(STATE_NAMES);
|
||||
|
||||
@@ -70,7 +70,7 @@ public class OneHandedModeInputConsumer extends DelegateInputConsumer {
|
||||
mDragDistThreshold = context.getResources().getDimensionPixelSize(
|
||||
R.dimen.gestures_onehanded_drag_threshold);
|
||||
mSquaredSlop = Utilities.squaredTouchSlop(context);
|
||||
mDisplaySize = DisplayController.INSTANCE.get(mContext).getInfo().realSize;
|
||||
mDisplaySize = DisplayController.INSTANCE.get(mContext).getInfo().currentSize;
|
||||
mNavBarSize = ResourceUtils.getNavbarSize(NAVBAR_BOTTOM_GESTURE_SIZE,
|
||||
mContext.getResources());
|
||||
}
|
||||
|
||||
@@ -20,9 +20,7 @@ import static com.android.quickstep.interaction.TutorialController.TutorialType.
|
||||
import static com.android.quickstep.interaction.TutorialController.TutorialType.RIGHT_EDGE_BACK_NAVIGATION;
|
||||
|
||||
import android.graphics.PointF;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
|
||||
import com.android.launcher3.R;
|
||||
@@ -36,11 +34,6 @@ final class BackGestureTutorialController extends TutorialController {
|
||||
super(fragment, tutorialType);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public View getMockLauncherView() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getIntroductionTitle() {
|
||||
return mTutorialType == LEFT_EDGE_BACK_NAVIGATION
|
||||
|
||||
-10
@@ -16,15 +16,11 @@
|
||||
package com.android.quickstep.interaction;
|
||||
|
||||
import static com.android.launcher3.anim.Interpolators.ACCEL;
|
||||
import static com.android.quickstep.interaction.TutorialController.TutorialType.OVERVIEW_NAVIGATION_COMPLETE;
|
||||
|
||||
import android.animation.AnimatorSet;
|
||||
import android.annotation.TargetApi;
|
||||
import android.graphics.PointF;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.anim.PendingAnimation;
|
||||
@@ -52,12 +48,6 @@ final class OverviewGestureTutorialController extends SwipeUpGestureTutorialCont
|
||||
return R.string.overview_gesture_intro_subtitle;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View getMockLauncherView() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackGestureAttempted(BackGestureResult result) {
|
||||
switch (mTutorialType) {
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2020 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.quickstep.interaction;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.launcher3.InvariantDeviceProfile;
|
||||
import com.android.launcher3.graphics.LauncherPreviewRenderer;
|
||||
|
||||
/** Renders a fake Launcher for use in the Sandbox. */
|
||||
class SandboxLauncherRenderer extends LauncherPreviewRenderer {
|
||||
SandboxLauncherRenderer(Context context, InvariantDeviceProfile idp, boolean migrated) {
|
||||
super(context, idp, migrated);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldShowRealLauncherPreview() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldShowQsb() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View.OnLongClickListener getWorkspaceChildOnLongClickListener() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,6 @@ import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
|
||||
import com.android.launcher3.InvariantDeviceProfile;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.anim.AnimationSuccessListener;
|
||||
import com.android.launcher3.views.ClipIconView;
|
||||
@@ -129,13 +128,6 @@ abstract class TutorialController implements BackGestureAttemptCallback,
|
||||
return R.drawable.default_sandbox_app_previous_task_thumbnail;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public View getMockLauncherView() {
|
||||
InvariantDeviceProfile dp = InvariantDeviceProfile.INSTANCE.get(mContext);
|
||||
|
||||
return new SandboxLauncherRenderer(mContext, dp, true).getRenderedView();
|
||||
}
|
||||
|
||||
@DrawableRes
|
||||
public int getMockAppIconResId() {
|
||||
return R.drawable.default_sandbox_app_icon;
|
||||
|
||||
@@ -28,6 +28,10 @@ import android.util.Log;
|
||||
|
||||
import com.android.launcher3.util.Executors;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
@@ -51,6 +55,10 @@ public class AssistContentRequester {
|
||||
private final String mPackageName;
|
||||
private final Executor mCallbackExecutor;
|
||||
|
||||
// If system loses the callback, our internal cache of original callback will also get cleared.
|
||||
private final Map<Object, Callback> mPendingCallbacks =
|
||||
Collections.synchronizedMap(new WeakHashMap<>());
|
||||
|
||||
public AssistContentRequester(Context context) {
|
||||
mActivityTaskManager = ActivityTaskManager.getService();
|
||||
mPackageName = context.getApplicationContext().getPackageName();
|
||||
@@ -66,20 +74,28 @@ public class AssistContentRequester {
|
||||
public void requestAssistContent(int taskId, Callback callback) {
|
||||
try {
|
||||
mActivityTaskManager.requestAssistDataForTask(
|
||||
new AssistDataReceiver(callback, mCallbackExecutor), taskId, mPackageName);
|
||||
new AssistDataReceiver(callback, this), taskId, mPackageName);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Requesting assist content failed for task: " + taskId, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void executeOnMainExecutor(Runnable callback) {
|
||||
mCallbackExecutor.execute(callback);
|
||||
}
|
||||
|
||||
private static final class AssistDataReceiver extends IAssistDataReceiver.Stub {
|
||||
|
||||
private final Executor mExecutor;
|
||||
private final Callback mCallback;
|
||||
// The AssistDataReceiver binder callback object is passed to a system server, that may
|
||||
// keep hold of it for longer than the lifetime of the AssistContentRequester object,
|
||||
// potentially causing a memory leak. In the callback passed to the system server, only
|
||||
// keep a weak reference to the parent object and lookup its callback if it still exists.
|
||||
private final WeakReference<AssistContentRequester> mParentRef;
|
||||
private final Object mCallbackKey = new Object();
|
||||
|
||||
AssistDataReceiver(Callback callback, Executor callbackExecutor) {
|
||||
mCallback = callback;
|
||||
mExecutor = callbackExecutor;
|
||||
AssistDataReceiver(Callback callback, AssistContentRequester parent) {
|
||||
parent.mPendingCallbacks.put(mCallbackKey, callback);
|
||||
mParentRef = new WeakReference<>(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -94,7 +110,18 @@ public class AssistContentRequester {
|
||||
return;
|
||||
}
|
||||
|
||||
mExecutor.execute(() -> mCallback.onAssistContentAvailable(content));
|
||||
AssistContentRequester requester = mParentRef.get();
|
||||
if (requester != null) {
|
||||
Callback callback = requester.mPendingCallbacks.get(mCallbackKey);
|
||||
if (callback != null) {
|
||||
requester.executeOnMainExecutor(
|
||||
() -> callback.onAssistContentAvailable(content));
|
||||
} else {
|
||||
Log.d(TAG, "Callback received after calling UI was disposed of");
|
||||
}
|
||||
} else {
|
||||
Log.d(TAG, "Callback received after Requester was collected");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -33,6 +33,7 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.Rect;
|
||||
import android.util.Log;
|
||||
@@ -49,6 +50,7 @@ import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.testing.TestProtocol;
|
||||
import com.android.launcher3.touch.PagedOrientationHandler;
|
||||
import com.android.launcher3.util.DisplayController;
|
||||
import com.android.launcher3.util.SettingsCache;
|
||||
import com.android.launcher3.util.WindowBounds;
|
||||
import com.android.quickstep.BaseActivityInterface;
|
||||
@@ -561,11 +563,27 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
|
||||
*/
|
||||
public DeviceProfile getLauncherDeviceProfile() {
|
||||
InvariantDeviceProfile idp = InvariantDeviceProfile.INSTANCE.get(mContext);
|
||||
// TODO also check the natural orientation is landscape or portrait
|
||||
return (mRecentsActivityRotation == ROTATION_90
|
||||
|| mRecentsActivityRotation == ROTATION_270)
|
||||
? idp.landscapeProfile
|
||||
: idp.portraitProfile;
|
||||
Point currentSize = DisplayController.INSTANCE.get(mContext).getInfo().currentSize;
|
||||
|
||||
int width, height;
|
||||
if ((mRecentsActivityRotation == ROTATION_90 || mRecentsActivityRotation == ROTATION_270)) {
|
||||
width = Math.max(currentSize.x, currentSize.y);
|
||||
height = Math.min(currentSize.x, currentSize.y);
|
||||
} else {
|
||||
width = Math.min(currentSize.x, currentSize.y);
|
||||
height = Math.max(currentSize.x, currentSize.y);
|
||||
}
|
||||
|
||||
DeviceProfile bestMatch = idp.supportedProfiles.get(0);
|
||||
float minDiff = Float.MAX_VALUE;
|
||||
for (DeviceProfile profile : idp.supportedProfiles) {
|
||||
float diff = Math.abs(profile.widthPx - width) + Math.abs(profile.heightPx - height);
|
||||
if (diff < minDiff) {
|
||||
minDiff = diff;
|
||||
bestMatch = profile;
|
||||
}
|
||||
}
|
||||
return bestMatch;
|
||||
}
|
||||
|
||||
private static String nameAndAddress(Object obj) {
|
||||
|
||||
@@ -20,10 +20,7 @@ import static android.view.Surface.ROTATION_180;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.graphics.Insets;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.view.WindowInsets.Type;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowMetrics;
|
||||
|
||||
@@ -73,10 +70,8 @@ public class SplitScreenBounds {
|
||||
*/
|
||||
private static WindowBounds createDefaultWindowBounds(Context context) {
|
||||
WindowMetrics wm = context.getSystemService(WindowManager.class).getMaximumWindowMetrics();
|
||||
Insets insets = wm.getWindowInsets().getInsets(Type.systemBars());
|
||||
WindowBounds bounds = WindowBounds.fromWindowMetrics(wm);
|
||||
|
||||
WindowBounds bounds = new WindowBounds(wm.getBounds(),
|
||||
new Rect(insets.left, insets.top, insets.right, insets.bottom));
|
||||
int rotation = DisplayController.INSTANCE.get(context).getInfo().rotation;
|
||||
int halfDividerSize = context.getResources()
|
||||
.getDimensionPixelSize(R.dimen.multi_window_task_divider_size) / 2;
|
||||
|
||||
@@ -2481,15 +2481,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
@Override
|
||||
protected void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
if (LIVE_TILE.get() && mRunningTaskId != -1) {
|
||||
switchToScreenshot(
|
||||
() -> finishRecentsAnimation(true, this::onConfigurationChangedInternal));
|
||||
} else {
|
||||
onConfigurationChangedInternal();
|
||||
}
|
||||
}
|
||||
|
||||
private void onConfigurationChangedInternal() {
|
||||
final int rotation = mActivity.getDisplay().getRotation();
|
||||
if (mOrientationState.setRecentsRotation(rotation)) {
|
||||
updateOrientationHandler();
|
||||
@@ -3442,7 +3433,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
* capturing the snapshot at the same time.
|
||||
*/
|
||||
public void switchToScreenshot(Runnable onFinishRunnable) {
|
||||
switchToScreenshot(mRecentsAnimationController == null || mRunningTaskId == -1 ? null
|
||||
switchToScreenshot(mRunningTaskId == -1 ? null
|
||||
: mRecentsAnimationController.screenshotTask(mRunningTaskId), onFinishRunnable);
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ import com.android.launcher3.util.Wait;
|
||||
import com.android.launcher3.util.rule.FailureWatcher;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.RuleChain;
|
||||
@@ -141,6 +142,12 @@ public class FallbackRecentsTest {
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void verifyLauncherState() {
|
||||
// Limits UI tests affecting tests running after them.
|
||||
AbstractQuickStepTest.checkDetectedLeaks(mLauncher);
|
||||
}
|
||||
|
||||
// b/143488140
|
||||
//@NavigationModeSwitch
|
||||
@Test
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dubbeltik en hou om \'n legstuk te skuif of gebruik gepasmaakte handelinge."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breed by %2$d hoog"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Raak en hou die legstuk om dit op die Tuisskerm rond te beweeg"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Voeg by Tuisskerm"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> legstukke</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> legstuk</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"ምግብርን ለማንቀሳቀስ ወይም ብጁ እርምጃዎችን ለመጠቀም ሁለቴ መታ ያድርጉ እና ይያዙ።"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ስፋት በ%2$d ከፍታ"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"በመነሻ ገጽ አካባቢ ላይ ለማንቀሳቀስ ነክተው ይያዙት"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"ወደ መነሻ ገጽ አክል"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ንዑስ ፕሮግራሞች</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ንዑስ ፕሮግራሞች</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"انقر مرتين مع تثبيت إصبعك لنقل أداة أو استخدام الإجراءات المخصّصة."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"العرض %1$d الطول %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"يمكنك النقر على الأداة مع الاستمرار لتحريكها على الشاشة الرئيسية."</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"إضافة إلى الشاشة الرئيسية"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="zero"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> أداة</item>
|
||||
<item quantity="two">أداتان (<xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g>)</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"কোনো ৱিজেট স্থানান্তৰ কৰিবলৈ দুবাৰ টিপি ধৰি ৰাখক অথবা কাষ্টম কাৰ্য ব্যৱহাৰ কৰক।"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d বহল x %2$d ওখ"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"ৱিজেটটো গৃহ স্ক্ৰীনৰ আশে-পাশে নিবলৈ সেইটোত স্পৰ্শ কৰি ধৰি ৰাখক"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"গৃহ স্ক্ৰীনত যোগ কৰক"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> টা ৱিজেট</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> টা ৱিজেট</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Vidceti daşımaq üçün iki dəfə toxunub saxlayın və ya fərdi əməliyyatlardan istifadə edin."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%2$d hündürlük %1$d enində"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Əsas ekranda hərəkət etdirmək üçün vidcetə toxunub saxlayın"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Əsas ekrana əlavə edin"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> vidcet</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> vidcet</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dvaput dodirnite i zadržite da biste pomerali vidžet ili koristite prilagođene radnje."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d×%2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"širina od %1$d i visina od %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Dodirnite i zadržite vidžet da biste ga pomerali po početnom ekranu"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Dodaj na početni ekran"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> vidžet</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> vidžeta</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Дакраніцеся двойчы і ўтрымлівайце, каб перамясціць віджэт або выкарыстоўваць спецыяльныя дзеянні."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Шырына: %1$d, вышыня: %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Утрымліваючы віджэт націснутым, перамяшчайце яго па Галоўным экране"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Дадаць на Галоўны экран"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> віджэт</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> віджэты</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Докоснете двукратно и задръжте за преместване на приспособление или използвайте персонал. действия."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина %1$d и височина %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Докоснете приспособлението и го задръжте, за да го местите на началния екран"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Добавяне към началния екран"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> приспособления</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> приспособление</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dvaput dodirnite i zadržite da pomjerite vidžet ili da koristite prilagođene radnje."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Širina %1$d, visina %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Dodirnite i držite vidžet da ga pomjerate po Početnom ekranu"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Dodaj na početni ekran"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> vidžet</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> vidžeta</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Fes doble toc i mantén premut per moure un widget o per utilitzar accions personalitzades."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d d\'amplada per %2$d d\'alçada"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Mantén premut el widget per moure\'l per la pantalla d\'inici"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Afegeix a la pantalla d\'inici"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dvojitým klepnutím a podržením přesunete widget, případně použijte vlastní akce."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"šířka %1$d, výška %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Pokud widgetem chcete pohybovat po ploše, dotkněte se ho a podržte ho"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Přidat na plochu"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgety</item>
|
||||
<item quantity="many"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgetu</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Tryk to gange, og hold en widget nede for at flytte den eller bruge tilpassede handlinger."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d i bredden og %2$d i højden"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Hold widgetten nede for at flytte den rundt på startskærmen"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Føj til startskærm"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Πατήστε δύο φορές παρατεταμένα για μετακίνηση γραφικού στοιχείου ή χρήση προσαρμοσμένων ενεργειών."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Πλάτος %1$d επί ύψος %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Αγγίξτε παρατεταμένα το γραφικό στοιχείο για να το μετακινήσετε στην Αρχική οθόνη"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Προσθήκη στην Αρχική οθόνη"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> γραφικά στοιχεία</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> γραφικό στοιχείο</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Presiona dos veces y mantén presionado para mover un widget o usar acciones personalizadas."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de ancho por %2$d de alto"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Mantén presionado el widget para moverlo por la pantalla principal"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Agregar a pantalla principal"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Toca dos veces y mantén pulsado un widget para moverlo o usar acciones personalizadas."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de ancho por %2$d de alto"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Mantén pulsado el widget para moverlo por la pantalla de inicio"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Añadir a la pantalla de inicio"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other">Widgets: <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g></item>
|
||||
<item quantity="one">Widget: <xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g></item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Vidina teisaldamiseks või kohandatud toimingute kasutamiseks topeltpuudutage ja hoidke all."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d lai ja %2$d kõrge"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Vidina avakuval liigutamiseks puudutage vidinat ja hoidke all"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Lisa avakuvale"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> vidinat</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> vidin</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Sakatu birritan eta eduki sakatuta widget bat mugitzeko edo ekintza pertsonalizatuak erabiltzeko."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d zabal eta %2$d luze"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Eduki sakatuta widgeta hasierako pantailan zehar mugitzeko"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Gehitu hasierako pantailan"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"برای جابهجا کردن ابزارک یا استفاده از کنشهای سفارشی، دوضربه بزنید و نگه دارید."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d عرض در %2$d طول"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"ابزارک را لمس و کنید و نگه دارید تا آن را در صفحه اصلی حرکت دهید"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"افزودن به صفحه اصلی"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ابزارک</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ابزارک</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Kaksoisnapauta ja paina pitkään, niin voit siirtää widgetiä tai käyttää muokattuja toimintoja."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Leveys: %1$d, korkeus: %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Voit siirtää widgetiä aloitusnäytöllä koskettamalla sitä pitkään"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Lisää aloitusnäytölle"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgetiä</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Touchez 2x un widget et maintenez le doigt dessus pour le déplacer ou utiliser des actions personnalisées."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largeur sur %2$d de hauteur"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Maintenez le doigt sur le widget pour le déplacer sur l\'écran d\'accueil"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Ajouter à l\'écran d\'accueil"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Appuyez deux fois et maintenez la pression pour déplacer widget ou utiliser actions personnalisées."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d x %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largeur et %2$d de hauteur"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Appuyez de manière prolongée sur le widget pour le déplacer sur l\'écran d\'accueil"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Ajouter à l\'écran d\'accueil"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Toca dúas veces un widget e manteno premido para movelo ou utiliza accións personalizadas."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largo por %2$d de alto"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Mantén premido o widget para movelo pola pantalla de inicio"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Engadir á pantalla de inicio"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"किसी विजेट को एक से दूसरी जगह ले जाने के लिए, उस पर दो बार टैप करके दबाकर रखें या पसंद के मुताबिक कार्रवाइयां इस्तेमाल करें."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d चौड़ाई गुणा %2$d ऊंचाई"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"होम स्क्रीन पर यहां-वहां ले जाने के लिए विजेट को दबाकर रखें"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"होम स्क्रीन पर जोड़ें"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> विजेट</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> विजेट</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dvaput dodirnite i zadržite pritisak da biste premjestili widget ili upotrijebite prilagođene radnje"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d širine i %2$d visine"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Dodirnite i zadržite widget da biste ga pomicali po početnom zaslonu"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Dodaj na početni zaslon"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgeta</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Modul áthelyezéséhez koppintson duplán, tartsa nyomva az ujját, vagy használjon egyéni műveleteket."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d széles és %2$d magas"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Tartsa lenyomva a modult a kezdőképernyőn való mozgatáshoz"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Hozzáadás a kezdőképernyőhöz"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> modul</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> modul</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Ketuk dua kali & tahan untuk memindahkan widget atau gunakan tindakan khusus."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"lebar %1$d x tinggi %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Sentuh lama widget untuk memindahkannya di sekitar Layar utama"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Tambahkan ke Layar utama"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Ýttu tvisvar og haltu fingri á græju til að færa hana eða notaðu sérsniðnar aðgerðir."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d á breidd og %2$d á hæð"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Haltu fingri á græjunni til að hreyfa hana um heimaskjáinn"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Bæta á heimaskjá"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> græja</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> græjur</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Tocca due volte e tieni premuto per spostare un widget o per usare le azioni personalizzate."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d di larghezza per %2$d di altezza"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Tocca e tieni premuto il widget per spostarlo nella schermata Home"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Aggiungi a schermata Home"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"כדי להעביר ווידג\'ט למקום אחר או להשתמש בפעולות מותאמות אישית, יש ללחוץ פעמיים ולא להרפות."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"רוחב %1$d על גובה %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"יש ללחוץ לחיצה ארוכה על הווידג\'ט כדי להזיז אותו ברחבי מסך הבית"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"הוספה למסך הבית"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="two"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ווידג\'טים</item>
|
||||
<item quantity="many"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ווידג\'טים</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"ウィジェットをダブルタップして長押ししながら移動するか、カスタム操作を使用してください。"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$dx%2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"幅 %1$d、高さ %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"ウィジェットを押し続けた状態で、ホーム画面上に移動させます。"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"ホーム画面に追加"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> 件のウィジェット</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> 件のウィジェット</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"ორმაგი შეხებით აირჩიეთ და გეჭიროთ ვიჯეტის გადასაადგილებლად ან მორგებული მოქმედებების გამოსაყენებლად."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"სიგრძე: %1$d, სიგანე: %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"ხანგრძლივად შეეხეთ ვიჯეტს მთავარ ეკრანზე მის გადასაადგილებლად"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"მთავარ ეკრანზე დამატება"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ვიჯეტი</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> ვიჯეტი</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Виджетті жылжыту үшін екі рет түртіңіз де, ұстап тұрыңыз немесе арнаулы әрекеттерді пайдаланыңыз."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ені: %1$d, биіктігі: %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Негізгі экран бойымен қозғалту үшін виджетті басып, ұстап тұрыңыз."</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Негізгі экранға қосу"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> виджет</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> виджет</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"ចុចពីរដង រួចសង្កត់ឱ្យជាប់ ដើម្បីផ្លាស់ទីធាតុក្រាហ្វិក ឬប្រើសកម្មភាពតាមបំណង។"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"ទទឺង %1$d គុណនឹងកម្ពស់ %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"ចុចធាតុក្រាហ្វិកឱ្យជាប់ ដើម្បីផ្លាស់ទីវាជុំវិញអេក្រង់ដើម"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"បញ្ចូលទៅអេក្រង់ដើម"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other">ធាតុក្រាហ្វិក <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g></item>
|
||||
<item quantity="one">ធាតុក្រាហ្វិក <xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g></item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"두 번 탭한 다음 길게 터치하여 위젯을 이동하거나 맞춤 작업을 사용하세요."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d×%2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"너비 %1$d, 높이 %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"홈 화면에서 위젯을 이동하려면 길게 터치하세요."</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"홈 화면에 추가"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other">위젯 <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g>개</item>
|
||||
<item quantity="one">위젯 <xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g>개</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Виджетти жылдыруу үчүн эки жолу таптап, кармап туруңуз же ыңгайлаштырылган аракеттерди колдонуңуз."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Туурасы: %1$d, бийиктиги: %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Башкы экранга жылдыруу үчүн виджетти коё бербей басып туруңуз"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Башкы экранга кошуу"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> виджет</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> виджет</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dukart palieskite ir palaikykite, kad perkeltumėte valdiklį ar naudotumėte tinkintus veiksmus."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d plotis ir %2$d aukštis"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Paliesdami ir palaikydami valdiklį galite judėti pagrindiniame ekrane"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Pridėti prie pagrindinio ekrano"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> valdiklis</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> valdikliai</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Lai pārvietotu logrīku, uz tā veiciet dubultskārienu un turiet. Varat arī veikt pielāgotas darbības."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d plats un %2$d augsts"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Pieskarieties logrīkam un turiet to, lai to pārvietotu pa sākuma ekrānu."</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Pievienot sākuma ekrānam"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="zero"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> logrīku</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> logrīks</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Жижиг хэрэгслийг зөөх эсвэл захиалгат үйлдлийг ашиглахын тулд хоёр товшоод, удаан дарна уу."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d өргөн %2$d өндөр"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Жижиг хэрэгслийг Үндсэн нүүрний эргэн тойронд зөөхийн тулд түүнд хүрээд, удаан дарна уу"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Үндсэн нүүрэнд нэмэх"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> жижиг хэрэгсэл</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> жижиг хэрэгсэл</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Ketik dua kali & tahan untuk menggerakkan widget atau menggunakan tindakan tersuai."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Lebar %1$d kali tinggi %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Sentuh & tahan widget untuk menggerakkan widget di sekitar Skrin utama"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Tambah pada Skrin utama"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"ဝိဂျက်ကို ရွှေ့ရန် (သို့) စိတ်ကြိုက်လုပ်ဆောင်ချက်များကို သုံးရန် နှစ်ချက်တို့ပြီး ဖိထားပါ။"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"အလျား %1$d နှင့် အမြင့် %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"ပင်မစာမျက်နှာအနီးတွင် ဝိဂျက်ကိုရွှေ့ရန် ၎င်းကို တို့ထိ၍ဖိထားပါ"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"ပင်မစာမျက်နှာသို့ ထည့်ရန်"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other">ဝိဂျက် <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ခု</item>
|
||||
<item quantity="one">ဝိဂျက် <xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> ခု</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dobbelttrykk og hold inne for å flytte en modul eller bruke tilpassede handlinger."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d bredde x %2$d høyde"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Trykk og hold på modulen for å bevege den rundt på startskjermen"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Legg til på startskjermen"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> moduler</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> modul</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dubbeltik en houd vast om een widget te verplaatsen of aangepaste acties te gebruiken."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breed en %2$d hoog"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Houd de widget ingedrukt om deze te verplaatsen op het startscherm"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Toevoegen aan startscherm"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"ଏକ ୱିଜେଟକୁ ମୁଭ୍ କରିବା ପାଇଁ ଦୁଇଥର-ଟାପ୍ କରି ଧରି ରଖନ୍ତୁ କିମ୍ବା କଷ୍ଟମ୍ କାର୍ଯ୍ୟଗୁଡ଼ିକୁ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ଓସାର ଓ %2$d ଉଚ୍ଚ"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"ମୂଳସ୍କ୍ରିନର ଆଖପାଖରେ ୱିଜେଟକୁ ମୁଭ୍ କରିବା ପାଇଁ ଏହାକୁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"ମୂଳସ୍କ୍ରିନରେ ଯୋଗ କରନ୍ତୁ"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g>ଟି ୱିଜେଟ୍</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g>ଟି ୱିଜେଟ୍</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Naciśnij dwukrotnie i przytrzymaj, aby przenieść widżet lub użyć działań niestandardowych."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Szerokość %1$d, wysokość %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Kliknij i przytrzymaj widżet, by poruszać nim po ekranie głównym."</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Dodaj do ekranu głównego"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widżety</item>
|
||||
<item quantity="many"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widżetów</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Toque duas vezes sem soltar para mover um widget ou utilizar ações personalizadas."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largura por %2$d de altura"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Toque sem soltar no widget para o mover à volta do ecrã principal"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Adicionar ao ecrã principal"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Toque duas vezes e mantenha a tela pressionada para mover um widget ou usar ações personalizadas."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largura por %2$d de altura"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Toque no widget e mantenha-o pressionado para movê-lo pela tela inicial"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Adicionar à tela inicial"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Atingeți de două ori și țineți apăsat pentru a muta un widget sau folosiți acțiuni personalizate."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d lățime și %2$d înălțime"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Atingeți lung widgetul pentru a-l muta pe ecranul de pornire"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Adăugați pe ecranul de pornire"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgeturi</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> de widgeturi</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Чтобы использовать специальные действия или перенести виджет, нажмите на него дважды и удерживайте."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d x %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина %1$d, высота %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Нажмите на виджет и удерживайте его, чтобы переместить в нужное место на главном экране."</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Добавить на главный экран"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> виджет</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> виджета</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"විජට් එකක් ගෙන යාමට හෝ අභිරුචි ක්රියා භාවිත කිරීමට දෙවරක් තට්ටු කර අල්ලා ගෙන සිටින්න."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"පළල %1$d උස %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"එය මුල් පිටු තිරය වටා ගෙන යාමට විජට් එක ස්පර්ශ කර අල්ලා ගන්න"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"මුල් පිටු තිරය වෙත එක් කරන්න"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one">විජට් <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g></item>
|
||||
<item quantity="other">විජට් <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g></item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dvojitým klepnutím a pridržaním presuňte miniaplikáciu alebo použite vlastné akcie."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"šírka %1$d, výška %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Po pridržaní môžete miniaplikáciu môžete posúvať po ploche"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Pridať na plochu"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> miniaplikácie</item>
|
||||
<item quantity="many"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgets</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Dvakrat se dotaknite pripomočka in ga pridržite, da ga premaknete, ali pa uporabite dejanja po meri."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Širina %1$d, višina %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Pridržite pripomoček, če ga želite premikati po začetnem zaslonu."</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Dodaj na začetni zaslon"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> pripomoček</item>
|
||||
<item quantity="two"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> pripomočka</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Trokit dy herë dhe mbaje shtypur një miniapliikacion për ta zhvendosur atë ose për të përdorur veprimet e personalizuara."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d i gjerë me %2$d i lartë"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Prek dhe mbaj miniaplikacionin për ta lëvizur nëpër \"Ekranin bazë\""</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Shto në \"Ekranin bazë\""</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> miniaplikacione</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> miniaplikacion</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Двапут додирните и задржите да бисте померали виџет или користите прилагођене радње."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d×%2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"ширина од %1$d и висина од %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Додирните и задржите виџет да бисте га померали по почетном екрану"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Додај на почетни екран"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> виџет</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> виџета</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Tryck snabbt två gånger och håll kvar för att flytta en widget eller använda anpassade åtgärder."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d bred gånger %2$d hög"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Tryck länge på widgeten om du vill flytta den på startskärmen"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Lägg till på startskärmen"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widgetar</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Gusa mara mbili na ushikilie ili usogeze wijeti au utumie vitendo maalum."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Upana wa %1$d na kimo cha %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Gusa na ushikilie wijeti ili uisogeze kwenye Skrini ya kwanza"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Weka kwenye Skrini ya kwanza"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other">Wijeti <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g></item>
|
||||
<item quantity="one">Wijeti <xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g></item>
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
<resources>
|
||||
<bool name="allow_rotation">true</bool>
|
||||
|
||||
<!-- Hotseat -->
|
||||
<bool name="hotseat_transpose_layout_with_orientation">false</bool>
|
||||
</resources>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"விட்ஜெட்டை நகர்த்த இருமுறை தட்டிப் பிடிக்கவும் அல்லது பிரத்தியேகச் செயல்களைப் பயன்படுத்தவும்."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d அகலத்திற்கு %2$d உயரம்"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"முகப்புத் திரைக்கு விட்ஜெட்டை நகர்த்த அதைத் தொட்டுப் பிடிக்கவும்"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"முகப்புத் திரையில் சேர்"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> விட்ஜெட்டுகள்</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> விட்ஜெட்</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"แตะสองครั้งค้างไว้เพื่อย้ายวิดเจ็ตหรือใช้การดำเนินการที่กำหนดเอง"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"กว้าง %1$d x สูง %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"แตะวิดเจ็ตค้างไว้เพื่อย้ายไปรอบๆ หน้าจอหลัก"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"เพิ่มลงในหน้าจอหลัก"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other">วิดเจ็ต <xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> รายการ</item>
|
||||
<item quantity="one">วิดเจ็ต <xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> รายการ</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"I-double tap at pindutin nang matagal para ilipat ang widget o gumamit ng mga custom na pagkilos."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ang lapad at %2$d ang taas"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Pindutin nang matagal ang widget para ilipat-lipat ito sa Home screen"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Idagdag sa Home screen"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> na widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Widget\'ı taşımak veya özel işlemleri kullanmak için iki kez dokunup basılı tutun."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"genişlik: %1$d, yükseklik: %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Ana ekranda taşımak için widget\'a dokunup basılı tutun"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Ana ekrana ekle"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> widget</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> widget</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Двічі натисніть і втримуйте віджет, щоб перемістити його або виконати інші дії."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина – %1$d, висота – %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Натисніть і втримуйте віджет, щоб переміщувати його головним екраном"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Додати на головний екран"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> віджет</item>
|
||||
<item quantity="few"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> віджети</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Ikki marta bosib va bosib turgan holatda vidjetni tanlang yoki maxsus amaldan foydalaning."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Eni %1$d, bo‘yi %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Bosh ekranda surish uchun vidjet ustiga bosib turing"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Bosh ekranga chiqarish"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> ta vidjet</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> ta vidjet</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Nhấn đúp và giữ để di chuyển một tiện ích hoặc sử dụng các thao tác tùy chỉnh."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Rộng %1$d x cao %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Chạm và giữ để di chuyển tiện ích xung quanh Màn hình chính"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Thêm vào Màn hình chính"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> tiện ích</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> tiện ích</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"㩒兩下之後㩒住,就可以郁小工具或者用自訂操作。"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d 闊,%2$d 高"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"按住小工具即可將其移至主畫面上任何位置"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"新增至主畫面"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> 個小工具</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> 個小工具</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"輕觸兩下並按住即可移動小工具或使用自訂操作。"</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"寬度為 %1$d,高度為 %2$d"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"按住小工具即可將小工具移到主畫面的任一位置"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"新增到主畫面"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> 項小工具</item>
|
||||
<item quantity="one"><xliff:g id="WIDGETS_COUNT_0">%1$d</xliff:g> 項小工具</item>
|
||||
|
||||
@@ -32,10 +32,8 @@
|
||||
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Thepha kabili uphinde ubambe ukuze uhambise iwijethi noma usebenzise izindlela ezingokwezifiso."</string>
|
||||
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
|
||||
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ububanzi ngokungu-%2$d ukuya phezulu"</string>
|
||||
<!-- no translation found for add_item_request_drag_hint (5653291305078645405) -->
|
||||
<skip />
|
||||
<!-- no translation found for add_to_home_screen (8631549138215492708) -->
|
||||
<skip />
|
||||
<string name="add_item_request_drag_hint" msgid="5653291305078645405">"Thinta uphinde ubambe iwijethi ukuyihambisa Kusikrini sasekhaya"</string>
|
||||
<string name="add_to_home_screen" msgid="8631549138215492708">"Engeza kusikrini sasekhaya"</string>
|
||||
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
|
||||
<item quantity="one">Amawijethi angu-<xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g></item>
|
||||
<item quantity="other">Amawijethi angu-<xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g></item>
|
||||
|
||||
+16
-10
@@ -127,17 +127,24 @@
|
||||
<!-- numFolderRows & numFolderColumns defaults to numRows & numColumns, if not specified -->
|
||||
<attr name="numFolderRows" format="integer" />
|
||||
<attr name="numFolderColumns" format="integer" />
|
||||
<!-- numAllAppsColumns defaults to numColumns, if not specified -->
|
||||
<attr name="numAllAppsColumns" format="integer" />
|
||||
<!-- Number of columns to use when extending the all-apps size,
|
||||
defaults to 2 * numAllAppsColumns -->
|
||||
<attr name="numExtendedAllAppsColumns" format="integer" />
|
||||
|
||||
<!-- numHotseatIcons defaults to numColumns, if not specified -->
|
||||
<attr name="numHotseatIcons" format="integer" />
|
||||
<!-- Number of icons to use when extending the hotseat size,
|
||||
defaults to 2 * numHotseatIcons -->
|
||||
<attr name="numExtendedHotseatIcons" format="integer" />
|
||||
|
||||
<attr name="dbFile" format="string" />
|
||||
<attr name="defaultLayoutId" format="reference" />
|
||||
<attr name="demoModeLayoutId" format="reference" />
|
||||
<attr name="isScalable" format="boolean" />
|
||||
<attr name="devicePaddingId" format="reference" />
|
||||
|
||||
<!-- whether the grid option is shown to the user -->
|
||||
<attr name="visible" format="boolean" />
|
||||
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="DevicePadding">
|
||||
@@ -167,8 +174,12 @@
|
||||
<attr name="iconTextSize" format="float" />
|
||||
<!-- landscapeIconTextSize defaults to iconTextSize, if not specified -->
|
||||
<attr name="landscapeIconTextSize" format="float" />
|
||||
<!-- If true, this display option is used to determine the default grid -->
|
||||
<attr name="canBeDefault" format="boolean" />
|
||||
|
||||
<!-- If set, this display option is used to determine the default grid -->
|
||||
<attr name="canBeDefault" format="boolean|integer" >
|
||||
<!-- The profile can be default on split display devices -->
|
||||
<flag name="split_display" value="0x2" />
|
||||
</attr>
|
||||
|
||||
<!-- The following values are only enabled if grid is supported. -->
|
||||
<!-- allAppsIconSize defaults to iconSize, if not specified -->
|
||||
@@ -176,11 +187,6 @@
|
||||
<!-- allAppsIconTextSize defaults to iconTextSize, if not specified -->
|
||||
<attr name="allAppsIconTextSize" format="float" />
|
||||
|
||||
<!-- numAllAppsColumns defaults to GridDisplayOption.numColumns, if not specified -->
|
||||
<attr name="numAllAppsColumns" format="integer" />
|
||||
|
||||
<!-- numShownHotseatIcons defaults to GridDisplayOption.numHotseatIcons, if not specified -->
|
||||
<attr name="numShownHotseatIcons" format="integer" />
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="CellLayout">
|
||||
|
||||
@@ -55,9 +55,6 @@
|
||||
<!-- The duration of the caret animation -->
|
||||
<integer name="config_caretAnimationDuration">200</integer>
|
||||
|
||||
<!-- Hotseat -->
|
||||
<bool name="hotseat_transpose_layout_with_orientation">true</bool>
|
||||
|
||||
<!-- Various classes overriden by projects/build flavors. -->
|
||||
<string name="folder_name_provider_class" translatable="false"></string>
|
||||
<string name="stats_log_manager_class" translatable="false"></string>
|
||||
|
||||
@@ -18,11 +18,15 @@ package com.android.launcher3.shadows;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.uioverrides.DeviceFlag;
|
||||
import com.android.launcher3.util.LooperExecutor;
|
||||
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.annotation.RealObject;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
|
||||
/**
|
||||
* Shadow for {@link LooperExecutor} to provide reset functionality for static executors.
|
||||
@@ -30,6 +34,9 @@ import org.robolectric.annotation.Implements;
|
||||
@Implements(value = DeviceFlag.class, isInAndroidSdk = false)
|
||||
public class ShadowDeviceFlag {
|
||||
|
||||
@RealObject private DeviceFlag mRealObject;
|
||||
@Nullable private Boolean mValue;
|
||||
|
||||
/**
|
||||
* Mock change listener as it uses internal system classes not available to robolectric
|
||||
*/
|
||||
@@ -40,4 +47,16 @@ public class ShadowDeviceFlag {
|
||||
protected static boolean getDeviceValue(String key, boolean defaultValue) {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
@Implementation
|
||||
public boolean get() {
|
||||
if (mValue != null) {
|
||||
return mValue;
|
||||
}
|
||||
return Shadow.directlyOn(mRealObject, DeviceFlag.class, "get");
|
||||
}
|
||||
|
||||
public void setValue(boolean value) {
|
||||
mValue = new Boolean(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ public class LauncherUIScrollTest {
|
||||
|
||||
private static MotionEvent createScrollEvent(int scroll) {
|
||||
DeviceProfile dp = InvariantDeviceProfile.INSTANCE
|
||||
.get(RuntimeEnvironment.application).portraitProfile;
|
||||
.get(RuntimeEnvironment.application).supportedProfiles.get(0);
|
||||
|
||||
final PointerProperties[] pointerProperties = new PointerProperties[1];
|
||||
pointerProperties[0] = new PointerProperties();
|
||||
|
||||
+8
-1
@@ -17,6 +17,9 @@ package com.android.launcher3.widget;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Point;
|
||||
|
||||
@@ -109,10 +112,14 @@ public final class LauncherAppWidgetProviderInfoTest {
|
||||
|
||||
private InvariantDeviceProfile createIDP() {
|
||||
DeviceProfile profile = Mockito.mock(DeviceProfile.class);
|
||||
doAnswer(i -> {
|
||||
((Point) i.getArgument(0)).set(CELL_SIZE, CELL_SIZE);
|
||||
return null;
|
||||
}).when(profile).getCellSize(any(Point.class));
|
||||
Mockito.when(profile.getCellSize()).thenReturn(new Point(CELL_SIZE, CELL_SIZE));
|
||||
|
||||
InvariantDeviceProfile idp = new InvariantDeviceProfile();
|
||||
idp.landscapeProfile = idp.portraitProfile = profile;
|
||||
idp.supportedProfiles.add(profile);
|
||||
return idp;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.android.launcher3;
|
||||
|
||||
import static android.appwidget.AppWidgetHostView.getDefaultPaddingForWidget;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.LAYOUT_HEIGHT;
|
||||
import static com.android.launcher3.LauncherAnimUtils.LAYOUT_WIDTH;
|
||||
import static com.android.launcher3.Utilities.ATLEAST_S;
|
||||
@@ -10,7 +12,9 @@ import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.PropertyValuesHolder;
|
||||
import android.appwidget.AppWidgetHostView;
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.appwidget.AppWidgetProviderInfo;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
@@ -25,16 +29,14 @@ import android.view.View;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.accessibility.DragViewStateAnnouncer;
|
||||
import com.android.launcher3.dragndrop.DragLayer;
|
||||
import com.android.launcher3.util.MainThreadInitializedObject;
|
||||
import com.android.launcher3.widget.LauncherAppWidgetHostView;
|
||||
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class AppWidgetResizeFrame extends AbstractFloatingView implements View.OnKeyListener {
|
||||
private static final int SNAP_DURATION = 150;
|
||||
@@ -43,22 +45,6 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
|
||||
|
||||
private static final Rect sTmpRect = new Rect();
|
||||
|
||||
// Represents the cell size on the grid in the two orientations.
|
||||
public static final MainThreadInitializedObject<Point[]> CELL_SIZE =
|
||||
new MainThreadInitializedObject<>(c -> {
|
||||
InvariantDeviceProfile inv = LauncherAppState.getIDP(c);
|
||||
return new Point[] {inv.landscapeProfile.getCellSize(),
|
||||
inv.portraitProfile.getCellSize()};
|
||||
});
|
||||
|
||||
// Represents the border spacing size on the grid in the two orientations.
|
||||
public static final MainThreadInitializedObject<int[]> BORDER_SPACING_SIZE =
|
||||
new MainThreadInitializedObject<>(c -> {
|
||||
InvariantDeviceProfile inv = LauncherAppState.getIDP(c);
|
||||
return new int[] {inv.landscapeProfile.cellLayoutBorderSpacingPx,
|
||||
inv.portraitProfile.cellLayoutBorderSpacingPx};
|
||||
});
|
||||
|
||||
private static final int HANDLE_COUNT = 4;
|
||||
private static final int INDEX_LEFT = 0;
|
||||
private static final int INDEX_TOP = 1;
|
||||
@@ -202,7 +188,7 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
|
||||
mMaxHSpan = info.maxSpanX;
|
||||
mMaxVSpan = info.maxSpanY;
|
||||
|
||||
mWidgetPadding = AppWidgetHostView.getDefaultPaddingForWidget(getContext(),
|
||||
mWidgetPadding = getDefaultPaddingForWidget(getContext(),
|
||||
widgetView.getAppWidgetInfo().provider, null);
|
||||
|
||||
if (mResizeMode == AppWidgetProviderInfo.RESIZE_HORIZONTAL) {
|
||||
@@ -392,81 +378,82 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
|
||||
mWidgetView.requestLayout();
|
||||
}
|
||||
|
||||
public static void updateWidgetSizeRanges(AppWidgetHostView widgetView, Launcher launcher,
|
||||
int spanX, int spanY) {
|
||||
List<SizeF> sizes = getWidgetSizes(launcher, spanX, spanY);
|
||||
public static void updateWidgetSizeRanges(
|
||||
AppWidgetHostView widgetView, Context context, int spanX, int spanY) {
|
||||
List<SizeF> sizes = getWidgetSizes(context, spanX, spanY);
|
||||
if (ATLEAST_S) {
|
||||
widgetView.updateAppWidgetSize(new Bundle(), sizes);
|
||||
} else {
|
||||
Rect bounds = getMinMaxSizes(sizes, null /* outRect */);
|
||||
Rect bounds = getMinMaxSizes(sizes);
|
||||
widgetView.updateAppWidgetSize(new Bundle(), bounds.left, bounds.top, bounds.right,
|
||||
bounds.bottom);
|
||||
}
|
||||
}
|
||||
|
||||
private static SizeF getWidgetSize(Context context, Point cellSize, int spanX, int spanY,
|
||||
int borderSpacing) {
|
||||
final float density = context.getResources().getDisplayMetrics().density;
|
||||
final float hBorderSpacing = (spanX - 1) * borderSpacing;
|
||||
final float vBorderSpacing = (spanY - 1) * borderSpacing;
|
||||
|
||||
return new SizeF(((spanX * cellSize.x) + hBorderSpacing) / density,
|
||||
((spanY * cellSize.y) + vBorderSpacing) / density);
|
||||
}
|
||||
|
||||
/** Returns the list of sizes for a widget of given span, in dp. */
|
||||
public static ArrayList<SizeF> getWidgetSizes(Context context, int spanX, int spanY) {
|
||||
final Point[] cellSize = CELL_SIZE.get(context);
|
||||
final int[] borderSpacing = BORDER_SPACING_SIZE.get(context);
|
||||
|
||||
SizeF landSize = getWidgetSize(context, cellSize[0], spanX, spanY, borderSpacing[0]);
|
||||
SizeF portSize = getWidgetSize(context, cellSize[1], spanX, spanY, borderSpacing[1]);
|
||||
|
||||
ArrayList<SizeF> sizes = new ArrayList<>(2);
|
||||
sizes.add(landSize);
|
||||
sizes.add(portSize);
|
||||
final float density = context.getResources().getDisplayMetrics().density;
|
||||
Point cellSize = new Point();
|
||||
|
||||
for (DeviceProfile profile : LauncherAppState.getIDP(context).supportedProfiles) {
|
||||
final float hBorderSpacing = (spanX - 1) * profile.cellLayoutBorderSpacingPx;
|
||||
final float vBorderSpacing = (spanY - 1) * profile.cellLayoutBorderSpacingPx;
|
||||
profile.getCellSize(cellSize);
|
||||
sizes.add(new SizeF(
|
||||
((spanX * cellSize.x) + hBorderSpacing) / density,
|
||||
((spanY * cellSize.y) + vBorderSpacing) / density));
|
||||
}
|
||||
return sizes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the bundle to be used as the default options for a widget with provided size
|
||||
*/
|
||||
public static Bundle getWidgetSizeOptions(
|
||||
Context context, ComponentName provider, int spanX, int spanY) {
|
||||
ArrayList<SizeF> sizes = getWidgetSizes(context, spanX, spanY);
|
||||
Rect padding = getDefaultPaddingForWidget(context, provider, null);
|
||||
float density = context.getResources().getDisplayMetrics().density;
|
||||
float xPaddingDips = (padding.left + padding.right) / density;
|
||||
float yPaddingDips = (padding.top + padding.bottom) / density;
|
||||
|
||||
ArrayList<SizeF> paddedSizes = sizes.stream()
|
||||
.map(size -> new SizeF(
|
||||
Math.max(0.f, size.getWidth() - xPaddingDips),
|
||||
Math.max(0.f, size.getHeight() - yPaddingDips)))
|
||||
.collect(Collectors.toCollection(ArrayList::new));
|
||||
|
||||
Rect rect = AppWidgetResizeFrame.getMinMaxSizes(paddedSizes);
|
||||
Bundle options = new Bundle();
|
||||
options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, rect.left);
|
||||
options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, rect.top);
|
||||
options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, rect.right);
|
||||
options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, rect.bottom);
|
||||
options.putParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES, paddedSizes);
|
||||
return options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the min and max widths and heights given a list of sizes, in dp.
|
||||
*
|
||||
* @param sizes List of sizes to get the min/max from.
|
||||
* @param outRect Rectangle in which the result can be stored, to avoid extra allocations. If
|
||||
* null, a new rectangle will be allocated.
|
||||
* @return A rectangle with the left (resp. top) is used for the min width (resp. height) and
|
||||
* the right (resp. bottom) for the max. The returned rectangle is set with 0s if the list is
|
||||
* empty.
|
||||
*/
|
||||
public static Rect getMinMaxSizes(List<SizeF> sizes, @Nullable Rect outRect) {
|
||||
if (outRect == null) {
|
||||
outRect = new Rect();
|
||||
}
|
||||
private static Rect getMinMaxSizes(List<SizeF> sizes) {
|
||||
if (sizes.isEmpty()) {
|
||||
outRect.set(0, 0, 0, 0);
|
||||
return new Rect();
|
||||
} else {
|
||||
SizeF first = sizes.get(0);
|
||||
outRect.set((int) first.getWidth(), (int) first.getHeight(), (int) first.getWidth(),
|
||||
(int) first.getHeight());
|
||||
Rect result = new Rect((int) first.getWidth(), (int) first.getHeight(),
|
||||
(int) first.getWidth(), (int) first.getHeight());
|
||||
for (int i = 1; i < sizes.size(); i++) {
|
||||
outRect.union((int) sizes.get(i).getWidth(), (int) sizes.get(i).getHeight());
|
||||
result.union((int) sizes.get(i).getWidth(), (int) sizes.get(i).getHeight());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
return outRect;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the range of sizes a widget may be displayed, given its span.
|
||||
*
|
||||
* @param context Context in which the View is rendered.
|
||||
* @param spanX Width of the widget, in cells.
|
||||
* @param spanY Height of the widget, in cells.
|
||||
* @param outRect Rectangle in which the result can be stored, to avoid extra allocations. If
|
||||
* null, a new rectangle will be allocated.
|
||||
*/
|
||||
public static Rect getWidgetSizeRanges(Context context, int spanX, int spanY,
|
||||
@Nullable Rect outRect) {
|
||||
return getMinMaxSizes(getWidgetSizes(context, spanX, spanY), outRect);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -317,7 +317,8 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
|
||||
|
||||
@UiThread
|
||||
protected void applyIconAndLabel(ItemInfoWithIcon info) {
|
||||
FastBitmapDrawable iconDrawable = info.newIcon(getContext());
|
||||
boolean useTheme = mDisplay == DISPLAY_WORKSPACE || mDisplay == DISPLAY_FOLDER;
|
||||
FastBitmapDrawable iconDrawable = info.newIcon(getContext(), useTheme);
|
||||
mDotParams.color = IconPalette.getMutedColor(info.bitmap.color, 0.54f);
|
||||
|
||||
setIcon(iconDrawable);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user