Merging ub-launcher3-qt-r1-dev, build 5642992
Test: Manual Bug:122345781 P1 Inflation happens and a binder call during swipe up gesture, that may cause jank Bug:123900446 P1 App to home animation should zoom into the app icon Bug:132209249 P1 Gesture bar interferes with Messenger chat heads. Bug:132815672 P1 -1 to home swipe up gesture Bug:132886768 P1 Swipe home animation sometimes drops frames Bug:132900132 P1 Apparently, tests start running while provisioning is still in progress Bug:133009122 P2 Rare flake: dragged launchable to workspace, but the current state is not WORKSPACE; Can't find a launcher object; selector: BySelector [RES='\Qcom.google.android.apps.nexuslauncher:id/apps_view\E'] Bug:133226418 P1 [Gesture Nav] App launch animation has has incorrect origin when launched in Overview Bug:133508173 P1 App switching is very janky on QT Bug:133765434 P1 [Flaky test] Launching task didn't open a new window Bug:133871965 P1 (V35 20190528.00_RC00):Unable to unlock/minimize phone app during ongoing call Bug:134095068 P1 Shouldn't use seamless rotation in another case Bug:134164918 P1 STOPSHIP: Disable chips hard-coded value in qt_dev Launcher Bug:134166337 P1 3P Launcher Breaks Overview (Standalone) Bug:134172603 P1 Tracing for lab-only flakes Bug:134517106 P1 Swipe up to home should fade out scrim Bug:134532571 P1 Launcher flake: java.lang.AssertionError: http://go/tapl : want to switch from background to overview, but the current state is not BASE_OVERVIEW; Can't find a launcher object; selector: BySelector [RES='\Qcom.google.android.apps.nexuslauncher:id/overview_panel\E'] Bug:134674880 P1 App group name in expanded view is invisible with white wallpaper Bug:issue priority summary Change-Id: I223b838725803cc7c7e00cd33794145fcbf0a414
This commit is contained in:
+5
-1
@@ -121,12 +121,16 @@ public final class LauncherAppTransitionManagerImpl extends QuickstepAppTransiti
|
||||
alpha.setDuration(CONTENT_ALPHA_DURATION);
|
||||
alpha.setInterpolator(LINEAR);
|
||||
anim.play(alpha);
|
||||
overview.setFreezeViewVisibility(true);
|
||||
|
||||
ObjectAnimator transY = ObjectAnimator.ofFloat(overview, View.TRANSLATION_Y, trans);
|
||||
transY.setInterpolator(AGGRESSIVE_EASE);
|
||||
transY.setDuration(CONTENT_TRANSLATION_DURATION);
|
||||
anim.play(transY);
|
||||
|
||||
return mLauncher.getStateManager()::reapplyState;
|
||||
return () -> {
|
||||
overview.setFreezeViewVisibility(false);
|
||||
mLauncher.getStateManager().reapplyState();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
-9
@@ -204,15 +204,6 @@ public abstract class RecentsUiFactory {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean-up logic that occurs when recents is no longer in use/visible.
|
||||
*
|
||||
* @param launcher the launcher activity
|
||||
*/
|
||||
public static void resetOverview(Launcher launcher) {
|
||||
launcher.<RecentsView>getOverviewPanel().reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recents logic that triggers when launcher state changes or launcher activity stops/resumes.
|
||||
*
|
||||
|
||||
-18
@@ -32,7 +32,6 @@ import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherStateManager.AnimationConfig;
|
||||
import com.android.launcher3.anim.AnimatorSetBuilder;
|
||||
import com.android.launcher3.anim.PropertySetter;
|
||||
import com.android.quickstep.hints.ProactiveHintsContainer;
|
||||
import com.android.quickstep.views.ClearAllButton;
|
||||
import com.android.quickstep.views.LauncherRecentsView;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
@@ -55,14 +54,6 @@ public final class RecentsViewStateController extends
|
||||
if (state.overviewUi) {
|
||||
mRecentsView.updateEmptyMessage();
|
||||
mRecentsView.resetTaskVisuals();
|
||||
mRecentsView.setHintVisibility(1f);
|
||||
} else {
|
||||
mRecentsView.setHintVisibility(0f);
|
||||
ProactiveHintsContainer
|
||||
proactiveHintsContainer = mRecentsView.getProactiveHintsContainer();
|
||||
if (proactiveHintsContainer != null) {
|
||||
proactiveHintsContainer.removeAllViews();
|
||||
}
|
||||
}
|
||||
setAlphas(PropertySetter.NO_ANIM_PROPERTY_SETTER, state.getVisibleElements(mLauncher));
|
||||
mRecentsView.setFullscreenProgress(state.getOverviewFullscreenProgress());
|
||||
@@ -75,14 +66,6 @@ public final class RecentsViewStateController extends
|
||||
|
||||
if (!toState.overviewUi) {
|
||||
builder.addOnFinishRunnable(mRecentsView::resetTaskVisuals);
|
||||
mRecentsView.setHintVisibility(0f);
|
||||
builder.addOnFinishRunnable(() -> {
|
||||
ProactiveHintsContainer
|
||||
proactiveHintsContainer = mRecentsView.getProactiveHintsContainer();
|
||||
if (proactiveHintsContainer != null) {
|
||||
proactiveHintsContainer.removeAllViews();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (toState.overviewUi) {
|
||||
@@ -94,7 +77,6 @@ public final class RecentsViewStateController extends
|
||||
updateAnim.setDuration(config.duration);
|
||||
builder.play(updateAnim);
|
||||
mRecentsView.updateEmptyMessage();
|
||||
builder.addOnFinishRunnable(() -> mRecentsView.setHintVisibility(1f));
|
||||
}
|
||||
|
||||
PropertySetter propertySetter = config.getPropertySetter(builder);
|
||||
|
||||
-3
@@ -21,7 +21,6 @@ import com.android.launcher3.AbstractFloatingView;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.allapps.AllAppsTransitionController;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.quickstep.util.ClipAnimationHelper;
|
||||
import com.android.quickstep.util.LayoutUtils;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
import com.android.quickstep.views.TaskView;
|
||||
@@ -45,8 +44,6 @@ public class BackgroundAppState extends OverviewState {
|
||||
|
||||
@Override
|
||||
public void onStateEnabled(Launcher launcher) {
|
||||
RecentsView rv = launcher.getOverviewPanel();
|
||||
rv.setOverviewStateEnabled(true);
|
||||
AbstractFloatingView.closeAllOpenViews(launcher, false);
|
||||
}
|
||||
|
||||
|
||||
-8
@@ -86,17 +86,9 @@ public class OverviewState extends LauncherState {
|
||||
|
||||
@Override
|
||||
public void onStateEnabled(Launcher launcher) {
|
||||
RecentsView rv = launcher.getOverviewPanel();
|
||||
rv.setOverviewStateEnabled(true);
|
||||
AbstractFloatingView.closeAllOpenViews(launcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateDisabled(Launcher launcher) {
|
||||
RecentsView rv = launcher.getOverviewPanel();
|
||||
rv.setOverviewStateEnabled(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateTransitionEnd(Launcher launcher) {
|
||||
launcher.getRotationHelper().setCurrentStateRequest(REQUEST_ROTATE);
|
||||
|
||||
-3
@@ -98,9 +98,6 @@ public class NavBarToHomeTouchController implements TouchController, SwipeDetect
|
||||
if (mStartState == OVERVIEW || mStartState == ALL_APPS) {
|
||||
return true;
|
||||
}
|
||||
if (!mLauncher.hasWindowFocus()) {
|
||||
return true;
|
||||
}
|
||||
if (AbstractFloatingView.getTopOpenView(mLauncher) != null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
+24
-6
@@ -17,6 +17,7 @@ package com.android.quickstep;
|
||||
|
||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
|
||||
import static com.android.quickstep.fallback.FallbackRecentsView.ZOOM_PROGRESS;
|
||||
import static com.android.quickstep.views.RecentsView.CONTENT_ALPHA;
|
||||
|
||||
import android.animation.Animator;
|
||||
@@ -33,6 +34,7 @@ import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.anim.AnimationSuccessListener;
|
||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.quickstep.fallback.FallbackRecentsView;
|
||||
import com.android.quickstep.util.LayoutUtils;
|
||||
import com.android.quickstep.util.RemoteAnimationTargetSet;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
@@ -120,11 +122,14 @@ public final class FallbackActivityControllerHelper implements
|
||||
return (transitionLength) -> { };
|
||||
}
|
||||
|
||||
RecentsView rv = activity.getOverviewPanel();
|
||||
FallbackRecentsView rv = activity.getOverviewPanel();
|
||||
rv.setContentAlpha(0);
|
||||
rv.getClearAllButton().setVisibilityAlpha(0);
|
||||
rv.setDisallowScrollToClearAll(true);
|
||||
|
||||
boolean fromState = !animateActivity;
|
||||
rv.setInOverviewState(fromState);
|
||||
|
||||
return new AnimationFactory() {
|
||||
|
||||
boolean isAnimatingToRecents = false;
|
||||
@@ -141,15 +146,28 @@ public final class FallbackActivityControllerHelper implements
|
||||
|
||||
@Override
|
||||
public void createActivityController(long transitionLength) {
|
||||
if (!isAnimatingToRecents) {
|
||||
return;
|
||||
AnimatorSet animatorSet = new AnimatorSet();
|
||||
if (isAnimatingToRecents) {
|
||||
ObjectAnimator anim = ObjectAnimator.ofFloat(rv, CONTENT_ALPHA, 0, 1);
|
||||
anim.setDuration(transitionLength).setInterpolator(LINEAR);
|
||||
animatorSet.play(anim);
|
||||
}
|
||||
|
||||
ObjectAnimator anim = ObjectAnimator.ofFloat(rv, CONTENT_ALPHA, 0, 1);
|
||||
ObjectAnimator anim = ObjectAnimator.ofFloat(rv, ZOOM_PROGRESS, 1, 0);
|
||||
anim.setDuration(transitionLength).setInterpolator(LINEAR);
|
||||
AnimatorSet animatorSet = new AnimatorSet();
|
||||
animatorSet.play(anim);
|
||||
callback.accept(AnimatorPlaybackController.wrap(animatorSet, transitionLength));
|
||||
|
||||
AnimatorPlaybackController controller =
|
||||
AnimatorPlaybackController.wrap(animatorSet, transitionLength);
|
||||
|
||||
// Since we are changing the start position of the UI, reapply the state, at the end
|
||||
controller.setEndAction(() -> {
|
||||
boolean endState = true;
|
||||
rv.setInOverviewState(controller.getInterpolatedProgress() > 0.5 ?
|
||||
endState : fromState);
|
||||
});
|
||||
|
||||
callback.accept(controller);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
+5
@@ -36,6 +36,7 @@ import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Region;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Log;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.animation.Interpolator;
|
||||
@@ -53,6 +54,7 @@ import com.android.launcher3.allapps.DiscoveryBounce;
|
||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.SpringObjectAnimator;
|
||||
import com.android.launcher3.compat.AccessibilityManagerCompat;
|
||||
import com.android.launcher3.testing.TestProtocol;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.launcher3.views.FloatingIconView;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
@@ -174,6 +176,9 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
|
||||
@Override
|
||||
public AnimationFactory prepareRecentsUI(Launcher activity, boolean activityVisible,
|
||||
boolean animateActivity, Consumer<AnimatorPlaybackController> callback) {
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "prepareRecentsUI");
|
||||
}
|
||||
final LauncherState startState = activity.getStateManager().getState();
|
||||
|
||||
LauncherState resetState = startState;
|
||||
|
||||
@@ -125,7 +125,14 @@ public final class RecentsActivity extends BaseRecentsActivity {
|
||||
@Override
|
||||
public void onCreateAnimation(RemoteAnimationTargetCompat[] targetCompats,
|
||||
AnimationResult result) {
|
||||
result.setAnimation(composeRecentsLaunchAnimator(taskView, targetCompats));
|
||||
AnimatorSet anim = composeRecentsLaunchAnimator(taskView, targetCompats);
|
||||
anim.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mFallbackRecentsView.resetViewUI();
|
||||
}
|
||||
});
|
||||
result.setAnimation(anim);
|
||||
}
|
||||
};
|
||||
return ActivityOptionsCompat.makeRemoteAnimation(new RemoteAnimationAdapterCompat(
|
||||
|
||||
@@ -36,8 +36,6 @@ import java.util.List;
|
||||
*/
|
||||
public class TaskOverlayFactory implements ResourceBasedOverride {
|
||||
|
||||
public static final String AIAI_PACKAGE = "com.google.android.as";
|
||||
|
||||
/** Note that these will be shown in order from top to bottom, if available for the task. */
|
||||
private static final TaskSystemShortcut[] MENU_OPTIONS = new TaskSystemShortcut[]{
|
||||
new TaskSystemShortcut.AppInfo(),
|
||||
@@ -51,29 +49,33 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
|
||||
new MainThreadInitializedObject<>(c -> Overrides.getObject(TaskOverlayFactory.class,
|
||||
c, R.string.task_overlay_factory_class));
|
||||
|
||||
public List<TaskSystemShortcut> getEnabledShortcuts(TaskView taskView) {
|
||||
final ArrayList<TaskSystemShortcut> shortcuts = new ArrayList<>();
|
||||
final BaseDraggingActivity activity = BaseActivity.fromContext(taskView.getContext());
|
||||
for (TaskSystemShortcut menuOption : MENU_OPTIONS) {
|
||||
View.OnClickListener onClickListener =
|
||||
menuOption.getOnClickListener(activity, taskView);
|
||||
if (onClickListener != null) {
|
||||
shortcuts.add(menuOption);
|
||||
}
|
||||
}
|
||||
return shortcuts;
|
||||
}
|
||||
|
||||
public TaskOverlay createOverlay(View thumbnailView) {
|
||||
return new TaskOverlay();
|
||||
}
|
||||
|
||||
public static class TaskOverlay {
|
||||
|
||||
public void setTaskInfo(Task task, ThumbnailData thumbnail, Matrix matrix) {
|
||||
}
|
||||
/**
|
||||
* Called when the current task is interactive for the user
|
||||
*/
|
||||
public void initOverlay(Task task, ThumbnailData thumbnail, Matrix matrix) { }
|
||||
|
||||
public void reset() {
|
||||
}
|
||||
|
||||
public List<TaskSystemShortcut> getEnabledShortcuts(TaskView taskView) {
|
||||
final ArrayList<TaskSystemShortcut> shortcuts = new ArrayList<>();
|
||||
final BaseDraggingActivity activity = BaseActivity.fromContext(taskView.getContext());
|
||||
for (TaskSystemShortcut menuOption : MENU_OPTIONS) {
|
||||
View.OnClickListener onClickListener =
|
||||
menuOption.getOnClickListener(activity, taskView);
|
||||
if (onClickListener != null) {
|
||||
shortcuts.add(menuOption);
|
||||
}
|
||||
}
|
||||
return shortcuts;
|
||||
}
|
||||
/**
|
||||
* Called when the overlay is no longer used.
|
||||
*/
|
||||
public void reset() { }
|
||||
}
|
||||
}
|
||||
|
||||
+37
-11
@@ -27,6 +27,8 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_N
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.ActivityManager;
|
||||
@@ -60,6 +62,7 @@ import android.view.WindowManager;
|
||||
|
||||
import androidx.annotation.BinderThread;
|
||||
|
||||
import com.android.launcher3.BaseDraggingActivity;
|
||||
import com.android.launcher3.MainThreadExecutor;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.ResourceUtils;
|
||||
@@ -77,6 +80,7 @@ import com.android.quickstep.inputconsumers.DeviceLockedInputConsumer;
|
||||
import com.android.quickstep.inputconsumers.InputConsumer;
|
||||
import com.android.quickstep.inputconsumers.OtherActivityInputConsumer;
|
||||
import com.android.quickstep.inputconsumers.OverviewInputConsumer;
|
||||
import com.android.quickstep.inputconsumers.OverviewWithoutFocusInputConsumer;
|
||||
import com.android.quickstep.inputconsumers.ScreenPinnedInputConsumer;
|
||||
import com.android.systemui.shared.recents.IOverviewProxy;
|
||||
import com.android.systemui.shared.recents.ISystemUiProxy;
|
||||
@@ -543,9 +547,11 @@ public class TouchInteractionService extends Service implements
|
||||
if (!useSharedState) {
|
||||
mSwipeSharedState.clearAllState();
|
||||
}
|
||||
if (mKM.isDeviceLocked()) {
|
||||
if ((mSystemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) != 0
|
||||
|| mKM.isDeviceLocked()) {
|
||||
// This handles apps launched in direct boot mode (e.g. dialer) as well as apps launched
|
||||
// while device is locked even after exiting direct boot mode (e.g. camera).
|
||||
// while device is locked after exiting direct boot mode (e.g. camera), or if the
|
||||
// app is showing over the lockscreen (even if not locked)
|
||||
return createDeviceLockedInputConsumer(runningTaskInfo);
|
||||
}
|
||||
|
||||
@@ -562,10 +568,9 @@ public class TouchInteractionService extends Service implements
|
||||
info.id = mSwipeSharedState.nextRunningTaskId;
|
||||
return createOtherActivityInputConsumer(event, info);
|
||||
} else if (mSwipeSharedState.goingToLauncher || activityControl.isResumed()) {
|
||||
return OverviewInputConsumer.newInstance(activityControl, mInputMonitorCompat, false);
|
||||
} else if (ENABLE_QUICKSTEP_LIVE_TILE.get() &&
|
||||
activityControl.isInLiveTileMode()) {
|
||||
return OverviewInputConsumer.newInstance(activityControl, mInputMonitorCompat, false);
|
||||
return createOverviewInputConsumer(event);
|
||||
} else if (ENABLE_QUICKSTEP_LIVE_TILE.get() && activityControl.isInLiveTileMode()) {
|
||||
return createOverviewInputConsumer(event);
|
||||
} else if (mGestureBlockingActivity != null && runningTaskInfo != null
|
||||
&& mGestureBlockingActivity.equals(runningTaskInfo.topActivity)) {
|
||||
return InputConsumer.NO_OP;
|
||||
@@ -574,20 +579,24 @@ public class TouchInteractionService extends Service implements
|
||||
}
|
||||
}
|
||||
|
||||
private boolean disableHorizontalSwipe(MotionEvent event) {
|
||||
// mExclusionRegion can change on binder thread, use a local instance here.
|
||||
Region exclusionRegion = mExclusionRegion;
|
||||
return mMode == Mode.NO_BUTTON && exclusionRegion != null
|
||||
&& exclusionRegion.contains((int) event.getX(), (int) event.getY());
|
||||
}
|
||||
|
||||
private OtherActivityInputConsumer createOtherActivityInputConsumer(MotionEvent event,
|
||||
RunningTaskInfo runningTaskInfo) {
|
||||
final ActivityControlHelper activityControl =
|
||||
mOverviewComponentObserver.getActivityControlHelper();
|
||||
boolean shouldDefer = activityControl.deferStartingActivity(mActiveNavBarRegion, event);
|
||||
|
||||
// mExclusionRegion can change on binder thread, use a local instance here.
|
||||
Region exclusionRegion = mExclusionRegion;
|
||||
boolean disableHorizontalSwipe = mMode == Mode.NO_BUTTON && exclusionRegion != null
|
||||
&& exclusionRegion.contains((int) event.getX(), (int) event.getY());
|
||||
return new OtherActivityInputConsumer(this, runningTaskInfo, mRecentsModel,
|
||||
mOverviewComponentObserver.getOverviewIntent(), activityControl,
|
||||
shouldDefer, mOverviewCallbacks, mInputConsumer, this::onConsumerInactive,
|
||||
mSwipeSharedState, mInputMonitorCompat, mSwipeTouchRegion, disableHorizontalSwipe);
|
||||
mSwipeSharedState, mInputMonitorCompat, mSwipeTouchRegion,
|
||||
disableHorizontalSwipe(event));
|
||||
}
|
||||
|
||||
private InputConsumer createDeviceLockedInputConsumer(RunningTaskInfo taskInfo) {
|
||||
@@ -599,6 +608,23 @@ public class TouchInteractionService extends Service implements
|
||||
}
|
||||
}
|
||||
|
||||
public InputConsumer createOverviewInputConsumer(MotionEvent event) {
|
||||
final ActivityControlHelper activityControl =
|
||||
mOverviewComponentObserver.getActivityControlHelper();
|
||||
BaseDraggingActivity activity = activityControl.getCreatedActivity();
|
||||
if (activity == null) {
|
||||
return InputConsumer.NO_OP;
|
||||
}
|
||||
|
||||
if (activity.getRootView().hasWindowFocus()) {
|
||||
return new OverviewInputConsumer(activity, mInputMonitorCompat,
|
||||
false /* startingInActivityBounds */);
|
||||
} else {
|
||||
return new OverviewWithoutFocusInputConsumer(this, mInputMonitorCompat,
|
||||
disableHorizontalSwipe(event));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* To be called by the consumer when it's no longer active.
|
||||
*/
|
||||
|
||||
+29
-3
@@ -59,6 +59,7 @@ import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
@@ -83,6 +84,7 @@ import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.graphics.RotationMode;
|
||||
import com.android.launcher3.logging.UserEventDispatcher;
|
||||
import com.android.launcher3.testing.TestProtocol;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
|
||||
@@ -267,6 +269,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
private MultiStateCallback mStateCallback;
|
||||
// Used to control launcher components throughout the swipe gesture.
|
||||
private AnimatorPlaybackController mLauncherTransitionController;
|
||||
private boolean mHasLauncherTransitionControllerStarted;
|
||||
|
||||
private T mActivity;
|
||||
private RecentsView mRecentsView;
|
||||
@@ -457,17 +460,32 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
}
|
||||
|
||||
private void onLauncherStart(final T activity) {
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "onLauncherStart");
|
||||
}
|
||||
if (mActivity != activity) {
|
||||
return;
|
||||
}
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "onLauncherStart 1");
|
||||
}
|
||||
if (mStateCallback.hasStates(STATE_HANDLER_INVALIDATED)) {
|
||||
return;
|
||||
}
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "onLauncherStart 2");
|
||||
}
|
||||
|
||||
// If we've already ended the gesture and are going home, don't prepare recents UI,
|
||||
// as that will set the state as BACKGROUND_APP, overriding the animation to NORMAL.
|
||||
if (mGestureEndTarget != HOME) {
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "onLauncherStart 3");
|
||||
}
|
||||
Runnable initAnimFactory = () -> {
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "onLauncherStart 4");
|
||||
}
|
||||
mAnimationFactory = mActivityControlHelper.prepareRecentsUI(mActivity,
|
||||
mWasLauncherAlreadyVisible, true,
|
||||
this::onAnimatorPlaybackControllerCreated);
|
||||
@@ -477,8 +495,14 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
// Launcher is visible, but might be about to stop. Thus, if we prepare recents
|
||||
// now, it might get overridden by moveToRestState() in onStop(). To avoid this,
|
||||
// wait until the next gesture (and possibly launcher) starts.
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "onLauncherStart 5");
|
||||
}
|
||||
mStateCallback.addCallback(STATE_GESTURE_STARTED, initAnimFactory);
|
||||
} else {
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "onLauncherStart 6");
|
||||
}
|
||||
initAnimFactory.run();
|
||||
}
|
||||
}
|
||||
@@ -647,8 +671,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
}
|
||||
|
||||
private void buildAnimationController() {
|
||||
if (mGestureEndTarget == HOME || (mLauncherTransitionController != null
|
||||
&& mLauncherTransitionController.getAnimationPlayer().isStarted())) {
|
||||
if (mGestureEndTarget == HOME || mHasLauncherTransitionControllerStarted) {
|
||||
// We don't want a new mLauncherTransitionController if mGestureEndTarget == HOME (it
|
||||
// has its own animation) or if we're already animating the current controller.
|
||||
return;
|
||||
@@ -858,7 +881,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
setTargetAlphaProvider(WindowTransformSwipeHandler::getHiddenTargetAlpha);
|
||||
}
|
||||
|
||||
return OverviewInputConsumer.newInstance(mActivityControlHelper, null, true);
|
||||
BaseDraggingActivity activity = mActivityControlHelper.getCreatedActivity();
|
||||
return activity == null
|
||||
? InputConsumer.NO_OP : new OverviewInputConsumer(activity, null, true);
|
||||
}
|
||||
|
||||
private void endRunningWindowAnim() {
|
||||
@@ -1122,6 +1147,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
}
|
||||
mLauncherTransitionController.getAnimationPlayer().start();
|
||||
}
|
||||
mHasLauncherTransitionControllerStarted = true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+69
@@ -15,19 +15,45 @@
|
||||
*/
|
||||
package com.android.quickstep.fallback;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.FloatProperty;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.LauncherState.ScaleAndTranslation;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.quickstep.RecentsActivity;
|
||||
import com.android.quickstep.util.LayoutUtils;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
import com.android.quickstep.views.TaskView;
|
||||
|
||||
public class FallbackRecentsView extends RecentsView<RecentsActivity> {
|
||||
|
||||
public static final FloatProperty<FallbackRecentsView> ZOOM_PROGRESS =
|
||||
new FloatProperty<FallbackRecentsView> ("zoomInProgress") {
|
||||
|
||||
@Override
|
||||
public void setValue(FallbackRecentsView view, float value) {
|
||||
view.setZoomProgress(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float get(FallbackRecentsView view) {
|
||||
return view.mZoomInProgress;
|
||||
}
|
||||
};
|
||||
|
||||
private float mZoomInProgress = 0;
|
||||
private boolean mInOverviewState = true;
|
||||
|
||||
private float mZoomScale = 1f;
|
||||
private float mZoomTranslationY = 0f;
|
||||
|
||||
public FallbackRecentsView(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
@@ -35,6 +61,7 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity> {
|
||||
public FallbackRecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
setOverviewStateEnabled(true);
|
||||
setOverlayEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,4 +97,46 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity> {
|
||||
// Just use the activity task size for multi-window as well.
|
||||
return false;
|
||||
}
|
||||
|
||||
public void resetViewUI() {
|
||||
setZoomProgress(0);
|
||||
resetTaskVisuals();
|
||||
}
|
||||
|
||||
public void setInOverviewState(boolean inOverviewState) {
|
||||
if (mInOverviewState != inOverviewState) {
|
||||
mInOverviewState = inOverviewState;
|
||||
if (mInOverviewState) {
|
||||
resetTaskVisuals();
|
||||
} else {
|
||||
setZoomProgress(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||
super.onLayout(changed, left, top, right, bottom);
|
||||
|
||||
if (getTaskViewCount() == 0) {
|
||||
mZoomScale = 1f;
|
||||
mZoomTranslationY = 0f;
|
||||
} else {
|
||||
TaskView dummyTask = getTaskViewAt(0);
|
||||
ScaleAndTranslation sat = getTempClipAnimationHelper()
|
||||
.updateForFullscreenOverview(dummyTask)
|
||||
.getScaleAndTranslation();
|
||||
mZoomScale = sat.scale;
|
||||
mZoomTranslationY = sat.translationY;
|
||||
}
|
||||
|
||||
setZoomProgress(mZoomInProgress);
|
||||
}
|
||||
|
||||
public void setZoomProgress(float progress) {
|
||||
mZoomInProgress = progress;
|
||||
SCALE_PROPERTY.set(this, Utilities.mapRange(mZoomInProgress, 1, mZoomScale));
|
||||
TRANSLATION_Y.set(this, Utilities.mapRange(mZoomInProgress, 0, mZoomTranslationY));
|
||||
FULLSCREEN_PROGRESS.set(this, mZoomInProgress);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.hints;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.os.Bundle;
|
||||
|
||||
public final class HintUtil {
|
||||
|
||||
public static final String ID_KEY = "id";
|
||||
public static final String ICON_KEY = "icon";
|
||||
public static final String TEXT_KEY = "text";
|
||||
public static final String TAP_ACTION_KEY = "tap_action";
|
||||
|
||||
private HintUtil() {}
|
||||
|
||||
public static Bundle makeHint(String id, Icon icon, CharSequence text) {
|
||||
Bundle hint = new Bundle();
|
||||
hint.putString(ID_KEY, id);
|
||||
hint.putParcelable(ICON_KEY, icon);
|
||||
hint.putCharSequence(TEXT_KEY, text);
|
||||
return hint;
|
||||
}
|
||||
|
||||
public static Bundle makeHint(Icon icon, CharSequence text, PendingIntent tapAction) {
|
||||
Bundle hint = new Bundle();
|
||||
hint.putParcelable(ICON_KEY, icon);
|
||||
hint.putCharSequence(TEXT_KEY, text);
|
||||
hint.putParcelable(TAP_ACTION_KEY, tapAction);
|
||||
return hint;
|
||||
}
|
||||
|
||||
public static String getId(Bundle hint) {
|
||||
String id = hint.getString(ID_KEY);
|
||||
if (id == null) {
|
||||
throw new IllegalArgumentException("Hint does not contain an ID");
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
public static Icon getIcon(Bundle hint) {
|
||||
Icon icon = hint.getParcelable(ICON_KEY);
|
||||
if (icon == null) {
|
||||
throw new IllegalArgumentException("Hint does not contain an icon");
|
||||
}
|
||||
return icon;
|
||||
}
|
||||
|
||||
public static CharSequence getText(Bundle hint) {
|
||||
CharSequence text = hint.getCharSequence(TEXT_KEY);
|
||||
if (text == null) {
|
||||
throw new IllegalArgumentException("Hint does not contain text");
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
public static PendingIntent getTapAction(Bundle hint) {
|
||||
PendingIntent tapAction = hint.getParcelable(TAP_ACTION_KEY);
|
||||
if (tapAction == null) {
|
||||
throw new IllegalArgumentException("Hint does not contain a tap action");
|
||||
}
|
||||
return tapAction;
|
||||
}
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.hints;
|
||||
|
||||
import static com.android.quickstep.hints.HintUtil.getIcon;
|
||||
import static com.android.quickstep.hints.HintUtil.getText;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.os.Bundle;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.R;
|
||||
|
||||
public class HintView extends LinearLayout {
|
||||
private ImageView mIconView;
|
||||
private TextView mLabelView;
|
||||
|
||||
public HintView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public HintView(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public HintView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
public HintView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
public void setHint(Bundle hint) {
|
||||
mLabelView.setText(getText(hint));
|
||||
|
||||
Icon icon = getIcon(hint);
|
||||
if (icon == null) {
|
||||
mIconView.setVisibility(GONE);
|
||||
} else {
|
||||
mIconView.setImageIcon(icon);
|
||||
mIconView.setVisibility(VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
mIconView = findViewById(R.id.icon);
|
||||
mLabelView = findViewById(R.id.label);
|
||||
}
|
||||
}
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
package com.android.quickstep.hints;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.FloatProperty;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
public class ProactiveHintsContainer extends FrameLayout {
|
||||
|
||||
public static final FloatProperty<ProactiveHintsContainer> HINT_VISIBILITY =
|
||||
new FloatProperty<ProactiveHintsContainer>("hint_visibility") {
|
||||
@Override
|
||||
public void setValue(ProactiveHintsContainer proactiveHintsContainer, float v) {
|
||||
proactiveHintsContainer.setHintVisibility(v);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float get(ProactiveHintsContainer proactiveHintsContainer) {
|
||||
return proactiveHintsContainer.mHintVisibility;
|
||||
}
|
||||
};
|
||||
|
||||
private float mHintVisibility;
|
||||
|
||||
public ProactiveHintsContainer(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public ProactiveHintsContainer(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public ProactiveHintsContainer(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
public ProactiveHintsContainer(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
public void setView(View v) {
|
||||
removeAllViews();
|
||||
addView(v);
|
||||
}
|
||||
|
||||
public void setHintVisibility(float v) {
|
||||
if (v == 1) {
|
||||
setVisibility(VISIBLE);
|
||||
} else {
|
||||
setVisibility(GONE);
|
||||
}
|
||||
mHintVisibility = v;
|
||||
}
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.hints;
|
||||
|
||||
public final class UiHintListenerConstants {
|
||||
|
||||
private UiHintListenerConstants() {}
|
||||
|
||||
// Operations
|
||||
public static final int ON_HINTS_RETURNED_CODE = 5;
|
||||
|
||||
// Keys
|
||||
public static final String SESSION_ID_KEY = "session_id";
|
||||
public static final String HINTS_KEY = "hints";
|
||||
}
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.hints;
|
||||
|
||||
public final class UiInterfaceConstants {
|
||||
|
||||
private UiInterfaceConstants() {}
|
||||
|
||||
// Operations
|
||||
public static final int ON_HINT_TAP_CODE = 4;
|
||||
|
||||
public static final int REQUEST_HINTS_CODE = 7;
|
||||
|
||||
// Keys
|
||||
public static final String SESSION_ID_KEY = "session_id";
|
||||
public static final String HINT_ID_KEY = "hint_id";
|
||||
public static final String WIDTH_PX_KEY = "width_px";
|
||||
public static final String HEIGHT_PX_KEY = "height_px";
|
||||
public static final String HINT_SPACE_WIDTH_PX_KEY = "hint_space_width_px";
|
||||
public static final String HINT_SPACE_HEIGHT_PX_KEY = "hint_space_height_px";
|
||||
}
|
||||
+3
@@ -31,6 +31,7 @@ public interface InputConsumer {
|
||||
int TYPE_DEVICE_LOCKED = 1 << 4;
|
||||
int TYPE_ACCESSIBILITY = 1 << 5;
|
||||
int TYPE_SCREEN_PINNED = 1 << 6;
|
||||
int TYPE_OVERVIEW_WITHOUT_FOCUS = 1 << 7;
|
||||
|
||||
InputConsumer NO_OP = () -> TYPE_NO_OP;
|
||||
|
||||
@@ -78,6 +79,8 @@ public interface InputConsumer {
|
||||
return "ACCESSIBILITY";
|
||||
case TYPE_SCREEN_PINNED:
|
||||
return "SCREEN_PINNED";
|
||||
case TYPE_OVERVIEW_WITHOUT_FOCUS:
|
||||
return "TYPE_OVERVIEW_WITHOUT_FOCUS";
|
||||
default:
|
||||
return "NO_OP";
|
||||
}
|
||||
|
||||
+8
-20
@@ -28,7 +28,6 @@ import static com.android.launcher3.uioverrides.RecentsUiFactory.ROTATION_LANDSC
|
||||
import static com.android.launcher3.uioverrides.RecentsUiFactory.ROTATION_SEASCAPE;
|
||||
import static com.android.launcher3.util.RaceConditionTracker.ENTER;
|
||||
import static com.android.launcher3.util.RaceConditionTracker.EXIT;
|
||||
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
|
||||
import static com.android.quickstep.TouchInteractionService.TOUCH_INTERACTION_LOG;
|
||||
import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS;
|
||||
|
||||
@@ -43,10 +42,8 @@ import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.Surface;
|
||||
import android.view.VelocityTracker;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import androidx.annotation.UiThread;
|
||||
|
||||
@@ -65,6 +62,7 @@ import com.android.quickstep.WindowTransformSwipeHandler;
|
||||
import com.android.quickstep.WindowTransformSwipeHandler.GestureEndTarget;
|
||||
import com.android.quickstep.util.CachedEventDispatcher;
|
||||
import com.android.quickstep.util.MotionPauseDetector;
|
||||
import com.android.quickstep.util.NavBarPosition;
|
||||
import com.android.quickstep.util.RecentsAnimationListenerSet;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.BackgroundExecutor;
|
||||
@@ -95,7 +93,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
private final SysUINavigationMode.Mode mMode;
|
||||
private final RectF mSwipeTouchRegion;
|
||||
|
||||
private final int mDisplayRotation;
|
||||
private final NavBarPosition mNavBarPosition;
|
||||
|
||||
private final Consumer<OtherActivityInputConsumer> mOnCompleteCallback;
|
||||
private final MotionPauseDetector mMotionPauseDetector;
|
||||
@@ -157,7 +155,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
mInputConsumer = inputConsumer;
|
||||
mSwipeSharedState = swipeSharedState;
|
||||
|
||||
mDisplayRotation = getSystemService(WindowManager.class).getDefaultDisplay().getRotation();
|
||||
mNavBarPosition = new NavBarPosition(base);
|
||||
mDragSlop = QuickStepContract.getQuickStepDragSlopPx();
|
||||
float slop = QuickStepContract.getQuickStepTouchSlopPx();
|
||||
mSquaredTouchSlop = slop * slop;
|
||||
@@ -188,9 +186,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
if (mPassedDragSlop && mInteractionHandler != null
|
||||
&& !mRecentsViewDispatcher.hasConsumer()) {
|
||||
mRecentsViewDispatcher.setConsumer(mInteractionHandler.getRecentsViewDispatcher(
|
||||
isNavBarOnLeft()
|
||||
? ROTATION_SEASCAPE
|
||||
: (isNavBarOnRight() ? ROTATION_LANDSCAPE : RotationMode.NORMAL)));
|
||||
mNavBarPosition.getRotationMode()));
|
||||
}
|
||||
int edgeFlags = ev.getEdgeFlags();
|
||||
ev.setEdgeFlags(edgeFlags | EDGE_NAV_BAR);
|
||||
@@ -329,14 +325,6 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
mInteractionHandler.onGestureStarted();
|
||||
}
|
||||
|
||||
private boolean isNavBarOnRight() {
|
||||
return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_90;
|
||||
}
|
||||
|
||||
private boolean isNavBarOnLeft() {
|
||||
return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_270;
|
||||
}
|
||||
|
||||
private void startTouchTrackingForWindowAnimation(long touchTimeMs) {
|
||||
TOUCH_INTERACTION_LOG.addLog("startRecentsAnimation");
|
||||
|
||||
@@ -382,8 +370,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
ViewConfiguration.get(this).getScaledMaximumFlingVelocity());
|
||||
float velocityX = mVelocityTracker.getXVelocity(mActivePointerId);
|
||||
float velocityY = mVelocityTracker.getYVelocity(mActivePointerId);
|
||||
float velocity = isNavBarOnRight() ? velocityX
|
||||
: isNavBarOnLeft() ? -velocityX
|
||||
float velocity = mNavBarPosition.isRightEdge() ? velocityX
|
||||
: mNavBarPosition.isLeftEdge() ? -velocityX
|
||||
: velocityY;
|
||||
|
||||
mInteractionHandler.updateDisplacement(getDisplacement(ev) - mStartDisplacement);
|
||||
@@ -444,9 +432,9 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
}
|
||||
|
||||
private float getDisplacement(MotionEvent ev) {
|
||||
if (isNavBarOnRight()) {
|
||||
if (mNavBarPosition.isRightEdge()) {
|
||||
return ev.getX() - mDownPos.x;
|
||||
} else if (isNavBarOnLeft()) {
|
||||
} else if (mNavBarPosition.isLeftEdge()) {
|
||||
return mDownPos.x - ev.getX();
|
||||
} else {
|
||||
return ev.getY() - mDownPos.y;
|
||||
|
||||
+4
-4
@@ -51,7 +51,7 @@ public class OverviewInputConsumer<T extends BaseDraggingActivity>
|
||||
private final boolean mStartingInActivityBounds;
|
||||
private boolean mTargetHandledTouch;
|
||||
|
||||
OverviewInputConsumer(T activity, @Nullable InputMonitorCompat inputMonitor,
|
||||
public OverviewInputConsumer(T activity, @Nullable InputMonitorCompat inputMonitor,
|
||||
boolean startingInActivityBounds) {
|
||||
mActivity = activity;
|
||||
mInputMonitor = inputMonitor;
|
||||
@@ -115,12 +115,12 @@ public class OverviewInputConsumer<T extends BaseDraggingActivity>
|
||||
}
|
||||
}
|
||||
|
||||
public static InputConsumer newInstance(ActivityControlHelper activityHelper,
|
||||
@Nullable InputMonitorCompat inputMonitor, boolean startingInActivityBounds) {
|
||||
public static InputConsumer newInstanceWithinActivityBounds(
|
||||
ActivityControlHelper activityHelper) {
|
||||
BaseDraggingActivity activity = activityHelper.getCreatedActivity();
|
||||
if (activity == null) {
|
||||
return InputConsumer.NO_OP;
|
||||
}
|
||||
return new OverviewInputConsumer(activity, inputMonitor, startingInActivityBounds);
|
||||
return new OverviewInputConsumer(activity, null, true);
|
||||
}
|
||||
}
|
||||
|
||||
+151
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.inputconsumers;
|
||||
|
||||
import static android.view.MotionEvent.ACTION_CANCEL;
|
||||
import static android.view.MotionEvent.ACTION_DOWN;
|
||||
import static android.view.MotionEvent.ACTION_MOVE;
|
||||
import static android.view.MotionEvent.ACTION_UP;
|
||||
|
||||
import static com.android.launcher3.Utilities.squaredHypot;
|
||||
import static com.android.quickstep.TouchInteractionService.TOUCH_INTERACTION_LOG;
|
||||
import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.PointF;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.VelocityTracker;
|
||||
import android.view.ViewConfiguration;
|
||||
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.quickstep.OverviewCallbacks;
|
||||
import com.android.quickstep.util.NavBarPosition;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.InputMonitorCompat;
|
||||
|
||||
public class OverviewWithoutFocusInputConsumer implements InputConsumer {
|
||||
|
||||
private final InputMonitorCompat mInputMonitor;
|
||||
private final boolean mDisableHorizontalSwipe;
|
||||
private final PointF mDownPos = new PointF();
|
||||
private final float mSquaredTouchSlop;
|
||||
private final Context mContext;
|
||||
private final NavBarPosition mNavBarPosition;
|
||||
|
||||
private boolean mInterceptedTouch;
|
||||
private VelocityTracker mVelocityTracker;
|
||||
|
||||
|
||||
public OverviewWithoutFocusInputConsumer(Context context, InputMonitorCompat inputMonitor,
|
||||
boolean disableHorizontalSwipe) {
|
||||
mInputMonitor = inputMonitor;
|
||||
mDisableHorizontalSwipe = disableHorizontalSwipe;
|
||||
mContext = context;
|
||||
mSquaredTouchSlop = Utilities.squaredTouchSlop(context);
|
||||
mNavBarPosition = new NavBarPosition(context);
|
||||
|
||||
mVelocityTracker = VelocityTracker.obtain();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getType() {
|
||||
return TYPE_OVERVIEW_WITHOUT_FOCUS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean allowInterceptByParent() {
|
||||
return !mInterceptedTouch;
|
||||
}
|
||||
|
||||
private void endTouchTracking() {
|
||||
if (mVelocityTracker != null) {
|
||||
mVelocityTracker.recycle();
|
||||
mVelocityTracker = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMotionEvent(MotionEvent ev) {
|
||||
if (mVelocityTracker == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mVelocityTracker.addMovement(ev);
|
||||
switch (ev.getActionMasked()) {
|
||||
case ACTION_DOWN: {
|
||||
mDownPos.set(ev.getX(), ev.getY());
|
||||
break;
|
||||
}
|
||||
case ACTION_MOVE: {
|
||||
if (!mInterceptedTouch) {
|
||||
float displacementX = ev.getX() - mDownPos.x;
|
||||
float displacementY = ev.getY() - mDownPos.y;
|
||||
if (squaredHypot(displacementX, displacementY) >= mSquaredTouchSlop) {
|
||||
if (mDisableHorizontalSwipe
|
||||
&& Math.abs(displacementX) > Math.abs(displacementY)) {
|
||||
// Horizontal gesture is not allowed in this region
|
||||
endTouchTracking();
|
||||
break;
|
||||
}
|
||||
|
||||
mInterceptedTouch = true;
|
||||
|
||||
if (mInputMonitor != null) {
|
||||
mInputMonitor.pilferPointers();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ACTION_CANCEL:
|
||||
endTouchTracking();
|
||||
break;
|
||||
|
||||
case ACTION_UP: {
|
||||
finishTouchTracking(ev);
|
||||
endTouchTracking();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void finishTouchTracking(MotionEvent ev) {
|
||||
mVelocityTracker.computeCurrentVelocity(100);
|
||||
float velocityX = mVelocityTracker.getXVelocity();
|
||||
float velocityY = mVelocityTracker.getYVelocity();
|
||||
float velocity = mNavBarPosition.isRightEdge()
|
||||
? -velocityX : (mNavBarPosition.isLeftEdge() ? velocityX : -velocityY);
|
||||
|
||||
final boolean triggerQuickstep;
|
||||
if (Math.abs(velocity) >= ViewConfiguration.get(mContext).getScaledMinimumFlingVelocity()) {
|
||||
triggerQuickstep = velocity > 0;
|
||||
} else {
|
||||
float displacementX = mDisableHorizontalSwipe ? 0 : (ev.getX() - mDownPos.x);
|
||||
float displacementY = ev.getY() - mDownPos.y;
|
||||
triggerQuickstep = squaredHypot(displacementX, displacementY) >= mSquaredTouchSlop;
|
||||
}
|
||||
|
||||
if (triggerQuickstep) {
|
||||
OverviewCallbacks.get(mContext).closeAllWindows();
|
||||
ActivityManagerWrapper.getInstance()
|
||||
.closeSystemWindows(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
|
||||
TOUCH_INTERACTION_LOG.addLog("startQuickstep");
|
||||
} else {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.util;
|
||||
|
||||
import static com.android.launcher3.uioverrides.RecentsUiFactory.ROTATION_LANDSCAPE;
|
||||
import static com.android.launcher3.uioverrides.RecentsUiFactory.ROTATION_SEASCAPE;
|
||||
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.Surface;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.android.launcher3.graphics.RotationMode;
|
||||
import com.android.quickstep.SysUINavigationMode;
|
||||
|
||||
/**
|
||||
* Utility class to check nav bar position
|
||||
*/
|
||||
public class NavBarPosition {
|
||||
|
||||
private final SysUINavigationMode.Mode mMode;
|
||||
private final int mDisplayRotation;
|
||||
|
||||
public NavBarPosition(Context context) {
|
||||
mMode = SysUINavigationMode.getMode(context);
|
||||
mDisplayRotation = context.getSystemService(WindowManager.class)
|
||||
.getDefaultDisplay().getRotation();
|
||||
}
|
||||
|
||||
public boolean isRightEdge() {
|
||||
return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_90;
|
||||
}
|
||||
|
||||
public boolean isLeftEdge() {
|
||||
return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_270;
|
||||
}
|
||||
|
||||
public RotationMode getRotationMode() {
|
||||
return isLeftEdge() ? ROTATION_SEASCAPE
|
||||
: (isRightEdge() ? ROTATION_LANDSCAPE : RotationMode.NORMAL);
|
||||
}
|
||||
}
|
||||
+21
-1
@@ -28,13 +28,20 @@ import com.android.launcher3.CellLayout;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherAnimUtils.ViewProgressProperty;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherStateManager;
|
||||
import com.android.launcher3.LauncherStateManager.AnimationConfig;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.ShortcutAndWidgetContainer;
|
||||
import com.android.launcher3.anim.AnimatorSetBuilder;
|
||||
import com.android.launcher3.anim.PropertySetter;
|
||||
import com.android.launcher3.anim.SpringObjectAnimator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
|
||||
/**
|
||||
@@ -56,7 +63,7 @@ public class StaggeredWorkspaceAnim {
|
||||
private final float mSpringTransY;
|
||||
private final View mViewToIgnore;
|
||||
|
||||
private final List<ValueAnimator> mAnimators = new ArrayList<>();
|
||||
private final List<Animator> mAnimators = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* @param floatingViewOriginalView The FloatingIconView's original view.
|
||||
@@ -104,6 +111,9 @@ public class StaggeredWorkspaceAnim {
|
||||
View qsb = launcher.findViewById(R.id.search_container_all_apps);
|
||||
addStaggeredAnimationForView(qsb, grid.inv.numRows + 2, totalRows);
|
||||
}
|
||||
|
||||
addWorkspaceScrimAnimationForState(launcher, BACKGROUND_APP, 0);
|
||||
addWorkspaceScrimAnimationForState(launcher, NORMAL, ALPHA_DURATION_MS);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -150,4 +160,14 @@ public class StaggeredWorkspaceAnim {
|
||||
alpha.setStartDelay(startDelay);
|
||||
mAnimators.add(alpha);
|
||||
}
|
||||
|
||||
private void addWorkspaceScrimAnimationForState(Launcher launcher, LauncherState state,
|
||||
long duration) {
|
||||
AnimatorSetBuilder scrimAnimBuilder = new AnimatorSetBuilder();
|
||||
AnimationConfig scrimAnimConfig = new AnimationConfig();
|
||||
scrimAnimConfig.duration = duration;
|
||||
PropertySetter scrimPropertySetter = scrimAnimConfig.getPropertySetter(scrimAnimBuilder);
|
||||
launcher.getWorkspace().getStateTransitionAnimation().setScrim(scrimPropertySetter, state);
|
||||
mAnimators.add(scrimAnimBuilder.build());
|
||||
}
|
||||
}
|
||||
|
||||
+20
-66
@@ -20,6 +20,7 @@ import static com.android.launcher3.LauncherState.ALL_APPS_HEADER_EXTRA;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.LauncherState.OVERVIEW;
|
||||
import static com.android.launcher3.LauncherState.RECENTS_CLEAR_ALL_BUTTON;
|
||||
import static com.android.launcher3.LauncherState.SPRING_LOADED;
|
||||
import static com.android.launcher3.QuickstepAppTransitionManagerImpl.ALL_APPS_PROGRESS_OFF_SCREEN;
|
||||
import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS_PROGRESS;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
|
||||
@@ -30,25 +31,20 @@ import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.os.Build;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherStateManager.StateListener;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.appprediction.PredictionUiStateManager;
|
||||
import com.android.launcher3.appprediction.PredictionUiStateManager.Client;
|
||||
import com.android.launcher3.util.PendingAnimation;
|
||||
import com.android.launcher3.views.BaseDragLayer;
|
||||
import com.android.launcher3.views.ScrimView;
|
||||
import com.android.quickstep.SysUINavigationMode;
|
||||
import com.android.quickstep.hints.ProactiveHintsContainer;
|
||||
import com.android.quickstep.util.ClipAnimationHelper;
|
||||
import com.android.quickstep.util.ClipAnimationHelper.TransformParams;
|
||||
import com.android.quickstep.util.LayoutUtils;
|
||||
@@ -57,11 +53,9 @@ import com.android.quickstep.util.LayoutUtils;
|
||||
* {@link RecentsView} used in Launcher activity
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.O)
|
||||
public class LauncherRecentsView extends RecentsView<Launcher> {
|
||||
public class LauncherRecentsView extends RecentsView<Launcher> implements StateListener {
|
||||
|
||||
private final TransformParams mTransformParams = new TransformParams();
|
||||
private final int mChipOverhang;
|
||||
@Nullable private ProactiveHintsContainer mProactiveHintsContainer;
|
||||
|
||||
public LauncherRecentsView(Context context) {
|
||||
this(context, null);
|
||||
@@ -74,16 +68,7 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
|
||||
public LauncherRecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
setContentAlpha(0);
|
||||
mChipOverhang = (int) context.getResources().getDimension(R.dimen.chip_hint_overhang);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
View hintContainer = mActivity.findViewById(R.id.hints);
|
||||
mProactiveHintsContainer =
|
||||
hintContainer instanceof ProactiveHintsContainer
|
||||
? (ProactiveHintsContainer) hintContainer : null;
|
||||
mActivity.getStateManager().addStateListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -102,11 +87,6 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ProactiveHintsContainer getProactiveHintsContainer() {
|
||||
return mProactiveHintsContainer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Canvas canvas) {
|
||||
maybeDrawEmptyMessage(canvas);
|
||||
@@ -160,23 +140,6 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
|
||||
@Override
|
||||
protected void getTaskSize(DeviceProfile dp, Rect outRect) {
|
||||
LayoutUtils.calculateLauncherTaskSize(getContext(), dp, outRect);
|
||||
if (mProactiveHintsContainer != null) {
|
||||
BaseDragLayer.LayoutParams params = (BaseDragLayer.LayoutParams) mProactiveHintsContainer.getLayoutParams();
|
||||
params.bottomMargin = getHeight() - outRect.bottom - mChipOverhang;
|
||||
params.width = outRect.width();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PendingAnimation createTaskLauncherAnimation(TaskView tv, long duration) {
|
||||
PendingAnimation anim = super.createTaskLauncherAnimation(tv, duration);
|
||||
|
||||
if (mProactiveHintsContainer != null) {
|
||||
anim.anim.play(ObjectAnimator.ofFloat(
|
||||
mProactiveHintsContainer, ProactiveHintsContainer.HINT_VISIBILITY, 0));
|
||||
}
|
||||
|
||||
return anim;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -194,31 +157,6 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PendingAnimation createTaskDismissAnimation(TaskView taskView, boolean animateTaskView,
|
||||
boolean shouldRemoveTask, long duration) {
|
||||
PendingAnimation anim = super.createTaskDismissAnimation(taskView, animateTaskView,
|
||||
shouldRemoveTask, duration);
|
||||
|
||||
if (mProactiveHintsContainer != null) {
|
||||
anim.anim.play(ObjectAnimator.ofFloat(
|
||||
mProactiveHintsContainer, ProactiveHintsContainer.HINT_VISIBILITY, 0));
|
||||
anim.addEndListener(onEndListener -> {
|
||||
if (!onEndListener.isSuccess) {
|
||||
mProactiveHintsContainer.setHintVisibility(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return anim;
|
||||
}
|
||||
|
||||
public void setHintVisibility(float v) {
|
||||
if (mProactiveHintsContainer != null) {
|
||||
mProactiveHintsContainer.setHintVisibility(v);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTaskLaunched(boolean success) {
|
||||
if (success) {
|
||||
@@ -286,6 +224,22 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
|
||||
PredictionUiStateManager.INSTANCE.get(getContext()).switchClient(Client.HOME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateTransitionStart(LauncherState toState) {
|
||||
setOverviewStateEnabled(toState.overviewUi);
|
||||
setFreezeViewVisibility(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateTransitionComplete(LauncherState finalState) {
|
||||
if (finalState == NORMAL || finalState == SPRING_LOADED) {
|
||||
// Clean-up logic that occurs when recents is no longer in use/visible.
|
||||
reset();
|
||||
}
|
||||
setOverlayEnabled(finalState == OVERVIEW);
|
||||
setFreezeViewVisibility(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOverviewStateEnabled(boolean enabled) {
|
||||
super.setOverviewStateEnabled(enabled);
|
||||
|
||||
@@ -72,6 +72,9 @@ import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.dynamicanimation.animation.SpringForce;
|
||||
|
||||
import com.android.launcher3.BaseActivity;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Insettable;
|
||||
@@ -111,9 +114,6 @@ import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.dynamicanimation.animation.SpringForce;
|
||||
|
||||
/**
|
||||
* A list of recent tasks.
|
||||
*/
|
||||
@@ -168,8 +168,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
// The threshold at which we update the SystemUI flags when animating from the task into the app
|
||||
public static final float UPDATE_SYSUI_FLAGS_THRESHOLD = 0.85f;
|
||||
|
||||
private static final float[] sTempFloatArray = new float[3];
|
||||
|
||||
protected final T mActivity;
|
||||
private final float mFastFlingVelocity;
|
||||
private final RecentsModel mModel;
|
||||
@@ -189,6 +187,8 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
|
||||
private boolean mDwbToastShown;
|
||||
private boolean mDisallowScrollToClearAll;
|
||||
private boolean mOverlayEnabled;
|
||||
private boolean mFreezeViewVisibility;
|
||||
|
||||
/**
|
||||
* TODO: Call reloadIdNeeded in onTaskStackChanged.
|
||||
@@ -428,11 +428,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
// Clear the task data for the removed child if it was visible
|
||||
if (child != mClearAllButton) {
|
||||
TaskView taskView = (TaskView) child;
|
||||
Task task = taskView.getTask();
|
||||
if (mHasVisibleTaskData.get(task.key.id)) {
|
||||
mHasVisibleTaskData.delete(task.key.id);
|
||||
taskView.onTaskListVisibilityChanged(false /* visible */);
|
||||
}
|
||||
mHasVisibleTaskData.delete(taskView.getTask().key.id);
|
||||
mTaskViewPool.recycle(taskView);
|
||||
}
|
||||
}
|
||||
@@ -455,7 +451,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
public void setOverviewStateEnabled(boolean enabled) {
|
||||
mOverviewStateEnabled = enabled;
|
||||
updateTaskStackListenerState();
|
||||
if (!enabled) mDwbToastShown = false;
|
||||
}
|
||||
|
||||
public void onDigitalWellbeingToastShown() {
|
||||
@@ -582,6 +577,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
}
|
||||
resetTaskVisuals();
|
||||
onTaskStackUpdated();
|
||||
updateEnabledOverlays();
|
||||
}
|
||||
|
||||
public int getTaskViewCount() {
|
||||
@@ -780,6 +776,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
|
||||
unloadVisibleTaskData();
|
||||
setCurrentPage(0);
|
||||
mDwbToastShown = false;
|
||||
}
|
||||
|
||||
public @Nullable TaskView getRunningTaskView() {
|
||||
@@ -1306,7 +1303,25 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
mEmptyMessagePaint.setAlpha(alphaInt);
|
||||
mEmptyIcon.setAlpha(alphaInt);
|
||||
|
||||
setVisibility(alpha > 0 ? VISIBLE : GONE);
|
||||
if (alpha > 0) {
|
||||
setVisibility(VISIBLE);
|
||||
} else if (!mFreezeViewVisibility) {
|
||||
setVisibility(GONE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Freezes the view visibility change. When frozen, the view will not change its visibility
|
||||
* to gone due to alpha changes.
|
||||
*/
|
||||
public void setFreezeViewVisibility(boolean freezeViewVisibility) {
|
||||
if (mFreezeViewVisibility != freezeViewVisibility) {
|
||||
mFreezeViewVisibility = freezeViewVisibility;
|
||||
|
||||
if (!mFreezeViewVisibility) {
|
||||
setVisibility(mContentAlpha > 0 ? VISIBLE : GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1545,6 +1560,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
protected void notifyPageSwitchListener(int prevPage) {
|
||||
super.notifyPageSwitchListener(prevPage);
|
||||
loadVisibleTaskData();
|
||||
updateEnabledOverlays();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1685,4 +1701,19 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
|
||||
public ClipAnimationHelper getTempClipAnimationHelper() {
|
||||
return mTempClipAnimationHelper;
|
||||
}
|
||||
|
||||
private void updateEnabledOverlays() {
|
||||
int overlayEnabledPage = mOverlayEnabled ? getNextPage() : -1;
|
||||
int taskCount = getTaskViewCount();
|
||||
for (int i = 0; i < taskCount; i++) {
|
||||
((TaskView) getChildAt(i)).setOverlayEnabled(i == overlayEnabledPage);
|
||||
}
|
||||
}
|
||||
|
||||
public void setOverlayEnabled(boolean overlayEnabled) {
|
||||
if (mOverlayEnabled != overlayEnabled) {
|
||||
mOverlayEnabled = overlayEnabled;
|
||||
updateEnabledOverlays();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.views.BaseDragLayer;
|
||||
import com.android.quickstep.TaskOverlayFactory;
|
||||
import com.android.quickstep.TaskSystemShortcut;
|
||||
import com.android.quickstep.TaskUtils;
|
||||
import com.android.quickstep.views.IconView.OnScaleUpdateListener;
|
||||
@@ -196,7 +197,7 @@ public class TaskMenuView extends AbstractFloatingView {
|
||||
|
||||
final BaseDraggingActivity activity = BaseDraggingActivity.fromContext(getContext());
|
||||
final List<TaskSystemShortcut> shortcuts =
|
||||
taskView.getTaskOverlay().getEnabledShortcuts(taskView);
|
||||
TaskOverlayFactory.INSTANCE.get(getContext()).getEnabledShortcuts(taskView);
|
||||
final int count = shortcuts.size();
|
||||
for (int i = 0; i < count; ++i) {
|
||||
final TaskSystemShortcut menuOption = shortcuts.get(i);
|
||||
|
||||
+21
-10
@@ -98,6 +98,9 @@ public class TaskThumbnailView extends View {
|
||||
private float mDimAlphaMultiplier = 1f;
|
||||
private float mSaturation = 1f;
|
||||
|
||||
private boolean mOverlayEnabled;
|
||||
private boolean mRotated;
|
||||
|
||||
public TaskThumbnailView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
@@ -192,10 +195,6 @@ public class TaskThumbnailView extends View {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public TaskOverlay getTaskOverlay() {
|
||||
return mOverlay;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
RectF currentDrawnInsets = mFullscreenParams.mCurrentDrawnInsets;
|
||||
@@ -257,6 +256,22 @@ public class TaskThumbnailView extends View {
|
||||
return (TaskView) getParent();
|
||||
}
|
||||
|
||||
public void setOverlayEnabled(boolean overlayEnabled) {
|
||||
if (mOverlayEnabled != overlayEnabled) {
|
||||
mOverlayEnabled = overlayEnabled;
|
||||
updateOverlay();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateOverlay() {
|
||||
// The overlay doesn't really work when the screenshot is rotated, so don't add it.
|
||||
if (mOverlayEnabled && !mRotated && mBitmapShader != null && mThumbnailData != null) {
|
||||
mOverlay.initOverlay(mTask, mThumbnailData, mMatrix);
|
||||
} else {
|
||||
mOverlay.reset();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateThumbnailPaintFilter() {
|
||||
int mul = (int) ((1 - mDimAlpha * mDimAlphaMultiplier) * 255);
|
||||
ColorFilter filter = getColorFilter(mul, mIsDarkTextTheme, mSaturation);
|
||||
@@ -351,12 +366,8 @@ public class TaskThumbnailView extends View {
|
||||
mPaint.setShader(mBitmapShader);
|
||||
}
|
||||
|
||||
if (isRotated) {
|
||||
// The overlay doesn't really work when the screenshot is rotated, so don't add it.
|
||||
mOverlay.reset();
|
||||
} else {
|
||||
mOverlay.setTaskInfo(mTask, mThumbnailData, mMatrix);
|
||||
}
|
||||
mRotated = isRotated;
|
||||
updateOverlay();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ import android.os.Handler;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.FloatProperty;
|
||||
import android.util.Log;
|
||||
import android.util.Property;
|
||||
import android.view.View;
|
||||
import android.view.ViewOutlineProvider;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
@@ -253,10 +252,6 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
||||
return mIconView;
|
||||
}
|
||||
|
||||
public TaskOverlayFactory.TaskOverlay getTaskOverlay() {
|
||||
return mSnapshotView.getTaskOverlay();
|
||||
}
|
||||
|
||||
public AnimatorPlaybackController createLaunchAnimationForRunningTask() {
|
||||
final PendingAnimation pendingAnimation =
|
||||
getRecentsView().createTaskLauncherAnimation(this, RECENTS_LAUNCH_DURATION);
|
||||
@@ -488,6 +483,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
||||
// Clear any references to the thumbnail (it will be re-read either from the cache or the
|
||||
// system on next bind)
|
||||
mSnapshotView.setThumbnail(mTask, null);
|
||||
setOverlayEnabled(false);
|
||||
onTaskListVisibilityChanged(false);
|
||||
if (mTask != null) {
|
||||
mTask.thumbnail = null;
|
||||
}
|
||||
@@ -608,7 +605,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
||||
|
||||
final Context context = getContext();
|
||||
final List<TaskSystemShortcut> shortcuts =
|
||||
mSnapshotView.getTaskOverlay().getEnabledShortcuts(this);
|
||||
TaskOverlayFactory.INSTANCE.get(getContext()).getEnabledShortcuts(this);
|
||||
final int count = shortcuts.size();
|
||||
for (int i = 0; i < count; ++i) {
|
||||
final TaskSystemShortcut menuOption = shortcuts.get(i);
|
||||
@@ -647,7 +644,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
||||
}
|
||||
|
||||
final List<TaskSystemShortcut> shortcuts =
|
||||
mSnapshotView.getTaskOverlay().getEnabledShortcuts(this);
|
||||
TaskOverlayFactory.INSTANCE.get(getContext()).getEnabledShortcuts(this);
|
||||
final int count = shortcuts.size();
|
||||
for (int i = 0; i < count; ++i) {
|
||||
final TaskSystemShortcut menuOption = shortcuts.get(i);
|
||||
@@ -733,6 +730,10 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
|
||||
return mShowScreenshot;
|
||||
}
|
||||
|
||||
public void setOverlayEnabled(boolean overlayEnabled) {
|
||||
mSnapshotView.setOverlayEnabled(overlayEnabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* We update and subsequently draw these in {@link #setFullscreenProgress(float)}.
|
||||
*/
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<string name="accessibility_close_task" msgid="5354563209433803643">"إغلاق"</string>
|
||||
<string name="accessibility_app_usage_settings" msgid="6312864233673544149">"إعدادات استخدام التطبيق"</string>
|
||||
<string name="recents_clear_all" msgid="5328176793634888831">"محو الكل"</string>
|
||||
<string name="accessibility_recent_apps" msgid="4058661986695117371">"التطبيقات المستخدمة مؤخرًا"</string>
|
||||
<string name="accessibility_recent_apps" msgid="4058661986695117371">"التطبيقات التي تمّ استخدامها مؤخرًا"</string>
|
||||
<string name="task_contents_description_with_remaining_time" msgid="4479688746574672685">"<xliff:g id="TASK_DESCRIPTION">%1$s</xliff:g>، <xliff:g id="REMAINING_TIME">%2$s</xliff:g>"</string>
|
||||
<string name="shorter_duration_less_than_one_minute" msgid="4722015666335015336">"أقل من دقيقة"</string>
|
||||
<string name="time_left_for_app" msgid="3111996412933644358">"يتبقى اليوم <xliff:g id="TIME">%1$s</xliff:g>."</string>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="recent_task_option_split_screen" msgid="5353188922202653570">"Splitscreen"</string>
|
||||
<string name="recent_task_option_pin" msgid="7929860679018978258">"Anpinnen"</string>
|
||||
<string name="recent_task_option_pin" msgid="7929860679018978258">"Fixieren"</string>
|
||||
<string name="recent_task_option_freeform" msgid="48863056265284071">"Freeform-Modus"</string>
|
||||
<string name="accessibility_desc_recent_apps" msgid="1444379410873162882">"Übersicht"</string>
|
||||
<string name="recents_empty_message" msgid="7040467240571714191">"Keine kürzlich verwendeten Elemente"</string>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<string name="accessibility_close_task" msgid="5354563209433803643">"Pecha a aplicación"</string>
|
||||
<string name="accessibility_app_usage_settings" msgid="6312864233673544149">"Configuración do uso de aplicacións"</string>
|
||||
<string name="recents_clear_all" msgid="5328176793634888831">"Borrar todo"</string>
|
||||
<string name="accessibility_recent_apps" msgid="4058661986695117371">"Apps recentes"</string>
|
||||
<string name="accessibility_recent_apps" msgid="4058661986695117371">"Aplicacións recentes"</string>
|
||||
<string name="task_contents_description_with_remaining_time" msgid="4479688746574672685">"<xliff:g id="TASK_DESCRIPTION">%1$s</xliff:g> (<xliff:g id="REMAINING_TIME">%2$s</xliff:g>)"</string>
|
||||
<string name="shorter_duration_less_than_one_minute" msgid="4722015666335015336">"<1 min"</string>
|
||||
<string name="time_left_for_app" msgid="3111996412933644358">"Tempo restante hoxe <xliff:g id="TIME">%1$s</xliff:g>"</string>
|
||||
|
||||
@@ -108,7 +108,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
|
||||
// Use a shorter duration for x or y translation to create a curve effect
|
||||
private static final long APP_LAUNCH_CURVED_DURATION = 250;
|
||||
private static final long APP_LAUNCH_ALPHA_DURATION = 50;
|
||||
private static final long APP_LAUNCH_ALPHA_START_DELAY = 50;
|
||||
private static final long APP_LAUNCH_ALPHA_START_DELAY = 25;
|
||||
|
||||
// We scale the durations for the downward app launch animations (minus the scale animation).
|
||||
private static final float APP_LAUNCH_DOWN_DUR_SCALE_FACTOR = 0.8f;
|
||||
|
||||
@@ -47,7 +47,6 @@ import com.android.launcher3.LauncherStateManager;
|
||||
import com.android.launcher3.LauncherStateManager.StateHandler;
|
||||
import com.android.launcher3.QuickstepAppTransitionManagerImpl;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.dragndrop.DragLayer;
|
||||
import com.android.launcher3.proxy.ProxyActivityStarter;
|
||||
import com.android.launcher3.proxy.StartActivityParams;
|
||||
import com.android.quickstep.OverviewInteractionState;
|
||||
@@ -64,10 +63,14 @@ import java.util.zip.Deflater;
|
||||
|
||||
public class UiFactory extends RecentsUiFactory {
|
||||
|
||||
public static Runnable enableLiveTouchControllerChanges(DragLayer dl) {
|
||||
NavigationModeChangeListener listener = m -> dl.recreateControllers();
|
||||
SysUINavigationMode mode = SysUINavigationMode.INSTANCE.get(dl.getContext());
|
||||
mode.addModeChangeListener(listener);
|
||||
public static Runnable enableLiveUIChanges(Launcher launcher) {
|
||||
NavigationModeChangeListener listener = m -> {
|
||||
launcher.getDragLayer().recreateControllers();
|
||||
launcher.getRotationHelper().setRotationHadDifferentUI(m != Mode.NO_BUTTON);
|
||||
};
|
||||
SysUINavigationMode mode = SysUINavigationMode.INSTANCE.get(launcher);
|
||||
SysUINavigationMode.Mode m = mode.addModeChangeListener(listener);
|
||||
launcher.getRotationHelper().setRotationHadDifferentUI(m != Mode.NO_BUTTON);
|
||||
return () -> mode.removeModeChangeListener(listener);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,14 +18,17 @@ package com.android.quickstep;
|
||||
|
||||
import com.android.launcher3.ui.AbstractLauncherUiTest;
|
||||
|
||||
import org.junit.Rule;
|
||||
import org.junit.rules.RuleChain;
|
||||
import org.junit.rules.TestRule;
|
||||
|
||||
/**
|
||||
* Base class for all instrumentation tests that deal with Quickstep.
|
||||
*/
|
||||
public abstract class AbstractQuickStepTest extends AbstractLauncherUiTest {
|
||||
@Rule
|
||||
public TestRule mQuickstepOnOffExecutor =
|
||||
new NavigationModeSwitchRule(mLauncher);
|
||||
@Override
|
||||
protected TestRule getRulesInsideActivityMonitor() {
|
||||
return RuleChain.
|
||||
outerRule(new NavigationModeSwitchRule(mLauncher)).
|
||||
around(super.getRulesInsideActivityMonitor());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,11 +48,6 @@
|
||||
layout="@layout/overview_panel"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include
|
||||
android:id="@+id/hints"
|
||||
layout="@layout/proactive_hints_container"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<!-- Keep these behind the workspace so that they are not visible when
|
||||
we go into AllApps -->
|
||||
<com.android.launcher3.pageindicators.WorkspacePageIndicator
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2016 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.
|
||||
-->
|
||||
<Space
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp" />
|
||||
@@ -56,9 +56,9 @@
|
||||
android:paddingBottom="@dimen/folder_label_padding_bottom"
|
||||
android:paddingTop="@dimen/folder_label_padding_top"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:attr/textColorTertiary"
|
||||
android:textColor="?attr/folderTextColor"
|
||||
android:textColorHighlight="?android:attr/colorControlHighlight"
|
||||
android:textColorHint="?android:attr/textColorHint"
|
||||
android:textColorHint="?attr/folderTextColor"
|
||||
android:textSize="@dimen/folder_label_text_size" />
|
||||
|
||||
<com.android.launcher3.pageindicators.PageIndicatorDots
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"الأدوات"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"الخلفيات"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"الأنماط والخلفيات"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"إعدادات الشاشة الرئيسية"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"إعدادات الصفحة الرئيسية"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"أوقف المشرف هذه الميزة"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"السماح بتدوير الشاشة الرئيسية"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"عند تدوير الهاتف"</string>
|
||||
@@ -108,7 +108,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"أدوات <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"قائمة الأدوات"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"تم إغلاق قائمة الأدوات."</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"الإضافة إلى الشاشة الرئيسية"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"إضافة إلى الشاشة الرئيسية"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"نقل العنصر إلى هنا"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"تمت إضافة العنصر إلى الشاشة الرئيسية"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"تم حذف العنصر"</string>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"Vidžeti za <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"Lista vidžeta"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"Lista vidžeta je zatvorena"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Dodajte na početni ekran"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Dodaj na početni ekran"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"Premesti stavku ovde"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"Stavka je dodata na početni ekran"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"Stavka je uklonjena"</string>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"স্টাইল এবং ওয়ালপেপার"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"হোম সেটিংস"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"আপনার প্রশাসক দ্বারা অক্ষম করা হয়েছে"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"হোম স্ক্রিন ঘোরানোর অনুমতি দিন"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"হোমস্ক্রীন ঘোরানোর অনুমতি দিন"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"যখন ফোনটি ঘোরানো হয়"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"বিজ্ঞপ্তি ডট"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"চালু"</string>
|
||||
@@ -104,7 +104,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"<xliff:g id="NAME">%1$s</xliff:g> উইজেট"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"উইজেটের তালিকা"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"উইজেটের তালিকা বন্ধ করা হয়েছে"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"হোম স্ক্রিনে যোগ করুন"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"হোম স্ক্রীনে যোগ করুন"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"এখানে আইটেম সরান"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"হোম স্ক্রীনে আইটেম যোগ করা হয়েছে"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"আইটেম সরানো হয়েছে"</string>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<string name="folder_closed" msgid="4100806530910930934">"Folder je zatvoren"</string>
|
||||
<string name="folder_renamed" msgid="1794088362165669656">"Ime foldera je promijenjeno u <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Vidžeti"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Dodaci"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Pozadinske slike"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stilovi i pozadinske slike"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Postavke početnog ekrana"</string>
|
||||
@@ -90,7 +90,7 @@
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Uključeno"</string>
|
||||
<string name="notification_dots_desc_off" msgid="1760796511504341095">"Isključeno"</string>
|
||||
<string name="title_missing_notification_access" msgid="7503287056163941064">"Potreban je pristup obavještenjima"</string>
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Za prikaz tačaka za obavještenja, uključite obavještenja za aplikacije za aplikaciju <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Za prikaz tačaka obavještenja, uključite obavještenja za aplikacije za aplikaciju <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Promijeni postavke"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"Prikaži tačke za obavještenja"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Dodaj ikonu na početni ekran"</string>
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fons de pantalla"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Estils i fons de pantalla"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Config. pantalla d\'inici"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Configuració de pantalla d\'inici"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Desactivada per l\'administrador"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Permet la rotació de la pantalla d\'inici"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"En girar el telèfon"</string>
|
||||
@@ -92,7 +92,7 @@
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Per veure els punts de notificació, activa les notificacions de l\'aplicació <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Canvia la configuració"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"Mostra els punts de notificació"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Afegeix icona a la pantalla d\'inici"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Afegeix la icona a la pantalla d\'inici"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Per a les aplicacions noves"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"Desconegut"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"Suprimeix"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"Tryk to gange, og hold fingeren nede for at vælge en widget 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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tryk og hold for at placere manuelt"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tryk og hold nede for at placere manuelt"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Tilføj automatisk"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Søg efter apps"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Indlæser apps…"</string>
|
||||
@@ -48,7 +48,7 @@
|
||||
<string name="all_apps_button_label" msgid="8130441508702294465">"Liste med apps"</string>
|
||||
<string name="all_apps_button_personal_label" msgid="1315764287305224468">"Liste over personlige apps"</string>
|
||||
<string name="all_apps_button_work_label" msgid="7270707118948892488">"Liste over apps til arbejdet"</string>
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"Hjem"</string>
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"Startskærm"</string>
|
||||
<string name="remove_drop_target_label" msgid="7812859488053230776">"Fjern"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Afinstaller"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"Appinfo"</string>
|
||||
@@ -80,8 +80,8 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Mappe: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Baggrunde"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stil og baggrunde"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Startskærmindstillinger"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stilarter og baggrunde"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Indstillinger for startskærmen"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Deaktiveret af din administrator"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Tillad rotation af startskærmen"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Når telefonen roteres"</string>
|
||||
|
||||
@@ -80,11 +80,11 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Ordner: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Hintergründe"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Designs und Hintergründe"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Startbildschirm-Einstellungen"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stile und Hintergründe"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Einstellungen für den Startbildschirm"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Von deinem Administrator deaktiviert"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Drehung des Startbildschirms zulassen"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Beim Drehen des Smartphones"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Bei Drehung des Smartphones"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"App-Benachrichtigungspunkte"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"An"</string>
|
||||
<string name="notification_dots_desc_off" msgid="1760796511504341095">"Aus"</string>
|
||||
@@ -93,7 +93,7 @@
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Einstellungen ändern"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"App-Benachrichtigungspunkte anzeigen"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Symbol zum Startbildschirm hinzufügen"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Bei neuen Apps"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Für neue Apps"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"Unbekannt"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"Entfernen"</string>
|
||||
<string name="abandoned_search" msgid="891119232568284442">"Suchen"</string>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Styles & wallpapers"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Home settings"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Disabled by your admin"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Home screen rotation"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Homescreen rotation"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"When phone is rotated"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Notification dots"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"On"</string>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Styles & wallpapers"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Home settings"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Disabled by your admin"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Home screen rotation"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Homescreen rotation"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"When phone is rotated"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Notification dots"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"On"</string>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Styles & wallpapers"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Home settings"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Disabled by your admin"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Home screen rotation"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Homescreen rotation"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"When phone is rotated"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Notification dots"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"On"</string>
|
||||
|
||||
@@ -85,13 +85,13 @@
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Inhabilitado por el administrador"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir rotación de la pantalla de inicio"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Al girar el teléfono"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Puntos de notificación"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Activados"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Burbujas de notificación"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Activadas"</string>
|
||||
<string name="notification_dots_desc_off" msgid="1760796511504341095">"Desactivadas"</string>
|
||||
<string name="title_missing_notification_access" msgid="7503287056163941064">"Se necesita acceso a las notificaciones"</string>
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Para mostrar puntos de notificación, activa las notificaciones de <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Para mostrar burbujas de notificación, activa las notificaciones de <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Cambiar ajustes"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"Mostrar puntos de notificación"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"Mostrar burbujas de notificación"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Añadir icono a la pantalla de inicio"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Para aplicaciones nuevas"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"Desconocido"</string>
|
||||
|
||||
+10
-10
@@ -27,7 +27,7 @@
|
||||
<string name="safemode_shortcut_error" msgid="9160126848219158407">"Allalaetud rakendus on turvarežiimis keelatud"</string>
|
||||
<string name="safemode_widget_error" msgid="4863470563535682004">"Turvarežiimis on vidinad keelatud"</string>
|
||||
<string name="shortcut_not_available" msgid="2536503539825726397">"Otsetee pole saadaval"</string>
|
||||
<string name="home_screen" msgid="806512411299847073">"Avakuva"</string>
|
||||
<string name="home_screen" msgid="806512411299847073">"Avaekraan"</string>
|
||||
<string name="custom_actions" msgid="3747508247759093328">"Kohandatud toimingud"</string>
|
||||
<string name="long_press_widget_to_add" msgid="7699152356777458215">"Vidina valimiseks vajutage ja hoidke seda all."</string>
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"Topeltpuudutage ja hoidke vidina valimiseks või kohandatud toimingute kasutamiseks."</string>
|
||||
@@ -48,16 +48,16 @@
|
||||
<string name="all_apps_button_label" msgid="8130441508702294465">"Rakenduste loend"</string>
|
||||
<string name="all_apps_button_personal_label" msgid="1315764287305224468">"Isiklike rakenduste loend"</string>
|
||||
<string name="all_apps_button_work_label" msgid="7270707118948892488">"Töörakenduste loend"</string>
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"Avakuva"</string>
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"Avaekraan"</string>
|
||||
<string name="remove_drop_target_label" msgid="7812859488053230776">"Eemalda"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalli"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"Rakenduse teave"</string>
|
||||
<string name="install_drop_target_label" msgid="2539096853673231757">"Installimine"</string>
|
||||
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installi otseteed"</string>
|
||||
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Võimaldab rakendusel lisada otseteid kasutaja sekkumiseta."</string>
|
||||
<string name="permlab_read_settings" msgid="1941457408239617576">"avakuva seadete ja otseteede lugemine"</string>
|
||||
<string name="permlab_read_settings" msgid="1941457408239617576">"loe avaekraani seadeid ja otseteid"</string>
|
||||
<string name="permdesc_read_settings" msgid="5833423719057558387">"Võimaldab rakendusel lugeda avaekraanil seadeid ja otseteid."</string>
|
||||
<string name="permlab_write_settings" msgid="3574213698004620587">"avakuva seadete ja otseteede kirjutamine"</string>
|
||||
<string name="permlab_write_settings" msgid="3574213698004620587">"kirjuta avaekraani seaded ja otseteed"</string>
|
||||
<string name="permdesc_write_settings" msgid="5440712911516509985">"Võimaldab rakendusel muuta avaekraanil seadeid ja otseteid."</string>
|
||||
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> pole lubatud helistada"</string>
|
||||
<string name="gadget_error_text" msgid="6081085226050792095">"Probleem vidina laadimisel"</string>
|
||||
@@ -70,8 +70,8 @@
|
||||
<item quantity="one"><xliff:g id="APP_NAME_0">%1$s</xliff:g>, <xliff:g id="NOTIFICATION_COUNT_1">%2$d</xliff:g> märguanne</item>
|
||||
</plurals>
|
||||
<string name="default_scroll_format" msgid="7475544710230993317">"Leht %1$d/%2$d"</string>
|
||||
<string name="workspace_scroll_format" msgid="8458889198184077399">"Avakuva %1$d/%2$d"</string>
|
||||
<string name="workspace_new_page" msgid="257366611030256142">"Uus avakuva leht"</string>
|
||||
<string name="workspace_scroll_format" msgid="8458889198184077399">"Avaekraan %1$d/%2$d"</string>
|
||||
<string name="workspace_new_page" msgid="257366611030256142">"Uus avaekraan"</string>
|
||||
<string name="folder_opened" msgid="94695026776264709">"Kaust on avatud, <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
|
||||
<string name="folder_tap_to_close" msgid="4625795376335528256">"Puudutage kausta sulgemiseks"</string>
|
||||
<string name="folder_tap_to_rename" msgid="4017685068016979677">"Puudutage ümbernimetamise salvestamiseks"</string>
|
||||
@@ -81,9 +81,9 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Vidinad"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Taustapildid"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stiilid ja taustapildid"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Avakuva seaded"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Avaekraani seaded"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Keelas administraator"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Luba avakuva pööramine"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Luba avaekraani pööramine"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kui telefoni pööratakse"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Märguandetäpid"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Sees"</string>
|
||||
@@ -92,7 +92,7 @@
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Märguandetäppide kuvamiseks lülitage sisse rakenduse <xliff:g id="NAME">%1$s</xliff:g> märguanded"</string>
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Seadete muutmine"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"Kuva märguandetäpid"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Lisa ikoon avakuvasse"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Lisa ikoon avaekraanile"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Uute rakenduste puhul"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"Teadmata"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"Eemalda"</string>
|
||||
@@ -104,7 +104,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"Teenuse <xliff:g id="NAME">%1$s</xliff:g> vidinad"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"Vidinate loend"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"Vidinate loend on suletud"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Lisa avakuvasse"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Lisa avaekraanile"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"Teisalda üksus siia"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"Üksus lisati avaekraanile"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"Üksus eemaldati"</string>
|
||||
|
||||
@@ -54,11 +54,11 @@
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"Aplikazioaren datuak"</string>
|
||||
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalatu"</string>
|
||||
<string name="permlab_install_shortcut" msgid="5632423390354674437">"Instalatu lasterbideak"</string>
|
||||
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Erabiltzaileak ezer egin gabe lasterbideak gehitzeko baimena ematen die aplikazioei."</string>
|
||||
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Erabiltzaileak ezer egin gabe lasterbideak gehitzea baimentzen die aplikazioei."</string>
|
||||
<string name="permlab_read_settings" msgid="1941457408239617576">"Irakurri hasierako ezarpenak eta lasterbideak"</string>
|
||||
<string name="permdesc_read_settings" msgid="5833423719057558387">"Hasierako pantailako ezarpenak eta lasterbideak irakurtzeko baimena ematen die aplikazioei."</string>
|
||||
<string name="permdesc_read_settings" msgid="5833423719057558387">"Hasierako pantailako ezarpenak eta lasterbideak irakurtzea baimentzen die aplikazioei."</string>
|
||||
<string name="permlab_write_settings" msgid="3574213698004620587">"Idatzi hasierako ezarpenak eta lasterbideak"</string>
|
||||
<string name="permdesc_write_settings" msgid="5440712911516509985">"Hasierako pantailako ezarpenak eta lasterbideak aldatzeko baimena ematen die aplikazioei."</string>
|
||||
<string name="permdesc_write_settings" msgid="5440712911516509985">"Hasierako pantailako ezarpenak eta lasterbideak aldatzea baimentzen die aplikazioei."</string>
|
||||
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak ez du telefono-deiak egiteko baimenik"</string>
|
||||
<string name="gadget_error_text" msgid="6081085226050792095">"Arazo bat izan da widgeta kargatzean"</string>
|
||||
<string name="gadget_setup_text" msgid="8274003207686040488">"Konfigurazioa"</string>
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Estiloak eta horma-paperak"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Hasierako pantailaren ezarpenak"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Administratzaileak desgaitu du"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Eman hasierako pantaila biratzeko baimena"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Baimendu hasierako pantaila biratzea"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Telefonoa biratzen denean"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Jakinarazpen-biribiltxoak"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Aktibatuta"</string>
|
||||
@@ -93,7 +93,7 @@
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Aldatu ezarpenak"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"Erakutsi jakinarazpen-biribiltxoak"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Gehitu ikonoa hasierako pantailan"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Aplikazio berrien kasuan"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Aplikazio berrietan"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"Ezezaguna"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"Kendu"</string>
|
||||
<string name="abandoned_search" msgid="891119232568284442">"Bilatu"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"برای انتخاب یک ابزارک، دو ضربه سریع بزنید و نگهدارید یا از کنشهای سفارشی استفاده کنید."</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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"آن را لمس کنید و بکشید تا بهصورت دستی اضافه شود"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"برای قرار دادن بهصورت دستی لمس کنید و بکشید"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"افزودن خودکار"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"جستجوی برنامهها"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"درحال بارگیری برنامهها…"</string>
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"Accueil"</string>
|
||||
<string name="remove_drop_target_label" msgid="7812859488053230776">"Supprimer"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Désinstaller"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"Détails de l\'application"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"Détails de l\'appli"</string>
|
||||
<string name="install_drop_target_label" msgid="2539096853673231757">"Installer"</string>
|
||||
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installer des raccourcis"</string>
|
||||
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permet à une application d\'ajouter des raccourcis sans l\'intervention de l\'utilisateur."</string>
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fonds d\'écran"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Styles et fonds d\'écran"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Paramètres d\'écran d\'accueil"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Paramètres accueil"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Désactivé par votre administrateur"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Autoriser la rotation de l\'écran d\'accueil"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Lorsque vous faites pivoter le téléphone"</string>
|
||||
|
||||
@@ -80,14 +80,14 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Cartafol: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fondos de pantalla"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Estilos/fondos de pantalla"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Axustes de Inicio"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Estilos e fondos de pantalla"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Configuración da pantalla de Inicio"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Función desactivada polo administrador"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir xirar a pantalla de inicio"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Ao xirar o teléfono"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Puntos de notificacións"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Activados"</string>
|
||||
<string name="notification_dots_desc_off" msgid="1760796511504341095">"Desactivados"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Opción activada"</string>
|
||||
<string name="notification_dots_desc_off" msgid="1760796511504341095">"Opción desactivada"</string>
|
||||
<string name="title_missing_notification_access" msgid="7503287056163941064">"Necesítase acceso ás notificacións"</string>
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Para que se mostren os puntos de notificacións, activa as notificacións da aplicación <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Cambiar configuración"</string>
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
<string name="app_name" msgid="649227358658669779">"Launcher3"</string>
|
||||
<string name="folder_name" msgid="7371454440695724752"></string>
|
||||
<string name="work_folder_name" msgid="3753320833950115786">"कार्यस्थल"</string>
|
||||
<string name="activity_not_found" msgid="8071924732094499514">"ऐप्लिकेशन इंस्टॉल नहीं है."</string>
|
||||
<string name="activity_not_available" msgid="7456344436509528827">"ऐप्लिकेशन उपलब्ध नहीं है"</string>
|
||||
<string name="safemode_shortcut_error" msgid="9160126848219158407">"डाउनलोड किए गए ऐप्लिकेशन सुरक्षित मोड में अक्षम है"</string>
|
||||
<string name="activity_not_found" msgid="8071924732094499514">"एप्लिकेशन इंस्टॉल नहीं है."</string>
|
||||
<string name="activity_not_available" msgid="7456344436509528827">"ऐप्स उपलब्ध नहीं है"</string>
|
||||
<string name="safemode_shortcut_error" msgid="9160126848219158407">"डाउनलोड किए गए ऐप्स सुरक्षित मोड में अक्षम है"</string>
|
||||
<string name="safemode_widget_error" msgid="4863470563535682004">"विजेट सुरक्षित मोड में अक्षम हैं"</string>
|
||||
<string name="shortcut_not_available" msgid="2536503539825726397">"शॉर्टकट उपलब्ध नहीं है"</string>
|
||||
<string name="home_screen" msgid="806512411299847073">"होम स्क्रीन"</string>
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="folder_closed" msgid="4100806530910930934">"फ़ोल्डर बंद किया गया"</string>
|
||||
<string name="folder_renamed" msgid="1794088362165669656">"फ़ोल्डर का नाम बदलकर <xliff:g id="NAME">%1$s</xliff:g> किया गया"</string>
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"फ़ोल्डर: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"विजेट"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"शॉर्टकट"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"वॉलपेपर"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"स्टाइल और वॉलपेपर"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"होम पेज की सेटिंग"</string>
|
||||
@@ -97,9 +97,9 @@
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"अज्ञात"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"निकालें"</string>
|
||||
<string name="abandoned_search" msgid="891119232568284442">"सर्च करें"</string>
|
||||
<string name="abandoned_promises_title" msgid="7096178467971716750">"यह ऐप्लिकेशन इंस्टॉल नहीं है"</string>
|
||||
<string name="abandoned_promises_title" msgid="7096178467971716750">"यह ऐप्स इंस्टॉल नहीं है"</string>
|
||||
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"इस आइकॉन का ऐप इंस्टॉल नहीं है. आप उसे निकाल सकते हैं या ऐप को खोज कर उसे मैन्युअल रूप से इंस्टॉल कर सकते हैं."</string>
|
||||
<string name="app_downloading_title" msgid="8336702962104482644">"<xliff:g id="NAME">%1$s</xliff:g> डाउनलोड हो रहा है, <xliff:g id="PROGRESS">%2$s</xliff:g> पूरी हुई"</string>
|
||||
<string name="app_downloading_title" msgid="8336702962104482644">"<xliff:g id="NAME">%1$s</xliff:g> डाउनलोड हो रहा है, <xliff:g id="PROGRESS">%2$s</xliff:g> पूर्ण"</string>
|
||||
<string name="app_waiting_download_title" msgid="7053938513995617849">"<xliff:g id="NAME">%1$s</xliff:g> के इंस्टॉल होने की प्रतीक्षा की जा रही है"</string>
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"<xliff:g id="NAME">%1$s</xliff:g> विजेट"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"विजेट की सूची"</string>
|
||||
@@ -132,7 +132,7 @@
|
||||
<string name="notification_dismissed" msgid="6002233469409822874">"सूचना को खारिज किया गया"</string>
|
||||
<string name="all_apps_personal_tab" msgid="4190252696685155002">"निजी ऐप"</string>
|
||||
<string name="all_apps_work_tab" msgid="4884822796154055118">"काम से जुड़े ऐप"</string>
|
||||
<string name="work_profile_toggle_label" msgid="3081029915775481146">"वर्क प्रोफ़ाइल"</string>
|
||||
<string name="work_profile_toggle_label" msgid="3081029915775481146">"कार्य प्रोफ़ाइल"</string>
|
||||
<string name="bottom_work_tab_user_education_title" msgid="5785851780786322825">"काम से जुड़े सभी ऐप्लिकेशन यहां पाएं"</string>
|
||||
<string name="bottom_work_tab_user_education_body" msgid="2818107472360579152">"काम से जुड़े हर ऐप्लिकेशन पर एक बैज (निशान) होता है और इन ऐप्लिकेशन की सुरक्षा आपका संगठन करता है. आसानी से इस्तेमाल करने के लिए ऐप्लिकेशन को अपनी होम स्क्रीन पर ले जाएं."</string>
|
||||
<string name="work_mode_on_label" msgid="4781128097185272916">"आपका संगठन प्रबंधित कर रहा है"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"Tap dua kalip & tahan untuk mengambil widget atau menggunakan 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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tap lama untuk menempatkan secara manual"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Sentuh & tahan untuk menempatkan secara manual"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Tambahkan otomatis"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Telusuri aplikasi"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Memuat aplikasi…"</string>
|
||||
@@ -81,9 +81,9 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widget"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Wallpaper"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Gaya & wallpaper"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Setelan layar utama"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Setelan layar Utama"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Dinonaktifkan oleh admin"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Izinkan Layar utama diputar"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Izinkan layar Utama diputar"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Saat ponsel diputar"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Titik notifikasi"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Aktif"</string>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<string name="all_apps_button_work_label" msgid="7270707118948892488">"רשימת אפליקציות עבודה"</string>
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"דף הבית"</string>
|
||||
<string name="remove_drop_target_label" msgid="7812859488053230776">"הסר"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"להסרת התקנה"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"הסר התקנה"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"פרטי אפליקציה"</string>
|
||||
<string name="install_drop_target_label" msgid="2539096853673231757">"התקנה"</string>
|
||||
<string name="permlab_install_shortcut" msgid="5632423390354674437">"התקן קיצורי דרך"</string>
|
||||
@@ -61,7 +61,7 @@
|
||||
<string name="permdesc_write_settings" msgid="5440712911516509985">"מאפשר לאפליקציה לשנות את ההגדרות וקיצורי הדרך בדף הבית."</string>
|
||||
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> אינו רשאי להתקשר"</string>
|
||||
<string name="gadget_error_text" msgid="6081085226050792095">"בעיה בטעינת ווידג\'ט"</string>
|
||||
<string name="gadget_setup_text" msgid="8274003207686040488">"הגדרה"</string>
|
||||
<string name="gadget_setup_text" msgid="8274003207686040488">"הגדר"</string>
|
||||
<string name="uninstall_system_app_text" msgid="4172046090762920660">"זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה."</string>
|
||||
<string name="folder_hint_text" msgid="6617836969016293992">"תיקיה ללא שם"</string>
|
||||
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> מושבתת"</string>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Қолмен қою үшін басып тұрыңыз"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Автоматты қосу"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Автоматты енгізу"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Қолданбаларды іздеу"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Қолданбалар жүктелуде…"</string>
|
||||
<string name="all_apps_no_search_results" msgid="3200346862396363786">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" сұрауына сәйкес келетін қолданбалар жоқ"</string>
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"ការកំណត់ទំព័រដើម"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"បានបិទដំណើរការដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"អនុញ្ញាតការបងិ្វលអេក្រង់ដើម"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"នៅពេលដែលបង្វិលទូរសព្ទ"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"នៅពេលដែលបង្វិលទូរស័ព្ទរបស់អ្នក"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"ស្លាកជូនដំណឹង"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"បើក"</string>
|
||||
<string name="notification_dots_desc_off" msgid="1760796511504341095">"បិទ"</string>
|
||||
@@ -104,7 +104,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"ធាតុក្រាហ្វិក <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"បញ្ជីធាតុក្រាហ្វិក"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"បានបិទបញ្ជីធាតុក្រាហ្វិក"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"បញ្ចូលទៅអេក្រង់ដើម"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"បន្ថែមទៅអេក្រង់ដើម"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"ផ្លាស់ធាតុមកទីនេះ"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"ធាតុដែលត្រូវបានបន្ថែមទៅអេក្រង់ដើម"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"ធាតុដែលបានដកចេញ"</string>
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"<xliff:g id="NAME">%1$s</xliff:g> ವಿಜೆಟ್ಗಳು"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"ವಿಜೆಟ್ ಪಟ್ಟಿ"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"ವಿಜೆಟ್ ಪಟ್ಟಿಯನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸಿ"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸು"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"ಐಟಂ ಇಲ್ಲಿಗೆ ಸರಿಸಿ"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"ಮುಖಪುಟ ಪರದೆಗೆ ಐಟಂ ಸೇರಿಸಲಾಗಿದೆ"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"ಐಟಂ ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"Виджет тандоо үчүн эки жолу таптап, кармап туруңуз же ыңгайлаштырылган аракеттерди колдонуңуз."</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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Кол менен кошуу үчүн кое бербей басып туруңуз"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Кол менен жайгаштыруу үчүн басып туруп, таштаңыз"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Автоматтык түрдө кошуу"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Колдонмолорду издөө"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Колдонмолор жүктөлүүдө…"</string>
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Виджеттер"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Тушкагаздар"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Стилдер жана тушкагаздар"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Башкы бет жөндөөлөрү"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Башкы беттин жөндөөлөрү"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Администраторуңуз өчүрүп койгон"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Башкы экранды айлантууга уруксат берүү"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Телефон айланганда"</string>
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="folder_closed" msgid="4100806530910930934">"ഫോൾഡർ അടച്ചു"</string>
|
||||
<string name="folder_renamed" msgid="1794088362165669656">"ഫോൾഡറിന്റെ പേര് <xliff:g id="NAME">%1$s</xliff:g> എന്നായി മാറ്റി"</string>
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"ഫോൾഡർ: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"വിഡ്ജെറ്റുകൾ"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"വിജറ്റുകൾ"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"വാൾപേപ്പർ"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"സ്റ്റൈലുകളും വാൾപേപ്പറുകളും"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"ഹോം ക്രമീകരണം"</string>
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"<xliff:g id="NAME">%1$s</xliff:g> жижиг хэрэгсэл"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"Жижиг хэрэгслийн жагсаалт"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"Жижиг хэрэгслийн жагсаалтыг хаасан"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Нүүр дэлгэцэд нэмэх"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Нүүр дэлгэц нэмэх"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"Энд байршуулах"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"Нүүр дэлгэцэнд нэмсэн зүйл"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"Арилгасан зүйл"</string>
|
||||
|
||||
@@ -66,8 +66,8 @@
|
||||
<string name="folder_hint_text" msgid="6617836969016293992">"अनामित फोल्डर"</string>
|
||||
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> अक्षम केला आहे"</string>
|
||||
<plurals name="dotted_app_label" formatted="false" msgid="5194538107138265416">
|
||||
<item quantity="one"><xliff:g id="APP_NAME_2">%1$s</xliff:g>साठी<xliff:g id="NOTIFICATION_COUNT_3">%2$d</xliff:g>सूचना आहेत</item>
|
||||
<item quantity="other"><xliff:g id="APP_NAME_2">%1$s</xliff:g>साठी <xliff:g id="NOTIFICATION_COUNT_3">%2$d</xliff:g> सूचना आहेत</item>
|
||||
<item quantity="one"><xliff:g id="APP_NAME_0">%1$s</xliff:g>साठी<xliff:g id="NOTIFICATION_COUNT_1">%2$d</xliff:g>सूचना आहे</item>
|
||||
</plurals>
|
||||
<string name="default_scroll_format" msgid="7475544710230993317">"%2$d पैकी %1$d पृष्ठ"</string>
|
||||
<string name="workspace_scroll_format" msgid="8458889198184077399">"%2$d पैकी %1$d मुख्य स्क्रीन"</string>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<string name="all_apps_button_work_label" msgid="7270707118948892488">"အလုပ်သုံး အက်ပ်စာရင်း"</string>
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"ပင်မစာမျက်နှာ"</string>
|
||||
<string name="remove_drop_target_label" msgid="7812859488053230776">"ဖယ်ရှားမည်"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ဖြုတ်ရန်"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ဖယ်ထုတ်မည်"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"အက်ပ်အချက်အလက်များ"</string>
|
||||
<string name="install_drop_target_label" msgid="2539096853673231757">"ထည့်သွင်းရန်"</string>
|
||||
<string name="permlab_install_shortcut" msgid="5632423390354674437">"အတိုကောက်မှတ်သားမှုများအား ထည့်သွင်းခြင်း"</string>
|
||||
@@ -94,7 +94,7 @@
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"သတိပေးချက် အစက်များ ပြရန်"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ပင်မစာမျက်နှာသို့ သင်္ကေတပုံ ထည့်ရန်"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"အက်ပ်အသစ်များအတွက်"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"မသိ"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"မသိရ"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"ဖယ်ရှားရန်"</string>
|
||||
<string name="abandoned_search" msgid="891119232568284442">"ရှာဖွေရန်"</string>
|
||||
<string name="abandoned_promises_title" msgid="7096178467971716750">"အက်ပ်မတပ်ဆင်ရသေးပါ"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"Dubbeltik en blijf aanraken om een widget toe te voegen 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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tik en houd vast om handmatig te plaatsen"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tik op een item en houd dit vast om het handmatig te plaatsen"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Automatisch toevoegen"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Apps zoeken"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Apps laden…"</string>
|
||||
@@ -80,7 +80,7 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Map: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Achtergrond"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stijl en achtergrond"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stijlen en achtergronden"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Instellingen startscherm"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Uitgeschakeld door je beheerder"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Draaien van startscherm toestaan"</string>
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"<xliff:g id="NAME">%1$s</xliff:g> – widżety"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"Lista widgetów"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"Lista widgetów zamknięta"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Dodaj do ekranu głównego"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Dodaj do strony głównej"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"Przenieś element tutaj"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"Element został dodany do ekranu głównego"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"Element został usunięty"</string>
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Imagens de fundo"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Estilos e imagens de fundo"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Definições de início"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Definições da página inicial"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Desativada pelo gestor"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir rotação do ecrã principal"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Quando o telemóvel é rodado"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"Toque duas vezes e segure para selecionar 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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toque e mantenha pressionado para mover manualmente"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toque e mantenha pressionado para posicionar manualmente"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Adicionar automaticamente"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Apps de pesquisa"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Carregando apps…"</string>
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Planos de fundo"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Estilos e planos de fundo"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Config. tela inicial"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Configurações da tela inicial"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Desativado pelo administrador"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir rotação da tela inicial"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Quando o smartphone for girado"</string>
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"Ecran de pornire"</string>
|
||||
<string name="remove_drop_target_label" msgid="7812859488053230776">"Eliminați"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Dezinstalați"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informații despre aplicații"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informații aplicație"</string>
|
||||
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalați"</string>
|
||||
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalează comenzi rapide"</string>
|
||||
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite unei aplicații să adauge comenzi rapide fără intervenția utilizatorului."</string>
|
||||
@@ -82,9 +82,9 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Widgeturi"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Imagini de fundal"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Stiluri și imagini de fundal"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Setări ecran de pornire"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Setări pentru ecranul de pornire"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Dezactivată de administrator"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Permite rotirea ecranului de pornire"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Permiteți rotirea ecranului de pornire"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Când telefonul este rotit"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Puncte de notificare"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Activate"</string>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Папка: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Виджеты"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Обои"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Стили и обои"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Главный экран"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Темы и обои"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Настройки главного экрана"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Функция отключена администратором"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Разрешить поворачивать главный экран"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Когда телефон повернут"</string>
|
||||
|
||||
@@ -80,8 +80,8 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"ෆෝල්ඩරය: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"විජට්"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"වෝල්පේපර"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"විලාස සහ වෝල්පේපර"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"නිවසේ සැකසීම්"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"විලාස සහ බිතුපත්"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Home සැකසීම්"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"ඔබගේ පරිපාලක විසින් අබල කරන ලදී"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"මුල් පිටු තිරය කරකැවීමට ඉඩ දෙන්න"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"දුරකථනය කරකවන විට"</string>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Miniaplikácie"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Tapety"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Štýly a tapety"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Nastavenia plochy"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Nastavenia Home"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Zakázané vaším správcom"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Povoliť otáčanie plochy"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Pri otočení telefónu"</string>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"Виџети за <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"Листа виџета"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"Листа виџета је затворена"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Додајте на почетни екран"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Додај на почетни екран"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"Премести ставку овде"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"Ставка је додата на почетни екран"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"Ставка је уклоњена"</string>
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"Wijeti za <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"Orodha ya wijeti"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"Orodha ya wijeti imefungwa"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Ongeza kwenye Skrini ya Kwanza"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Ongeza kwenye skrini ya Kwanza"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"Hamishia kipengee hapa"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"Kipengee kimeongezwa kwenye skrini ya kwanza"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"Kipengee kimeondolewa"</string>
|
||||
|
||||
+12
-12
@@ -22,9 +22,9 @@
|
||||
<string name="app_name" msgid="649227358658669779">"Launcher3"</string>
|
||||
<string name="folder_name" msgid="7371454440695724752"></string>
|
||||
<string name="work_folder_name" msgid="3753320833950115786">"பணியிடம்"</string>
|
||||
<string name="activity_not_found" msgid="8071924732094499514">"ஆப்ஸ் நிறுவப்படவில்லை."</string>
|
||||
<string name="activity_not_available" msgid="7456344436509528827">"ஆப்ஸ் இல்லை"</string>
|
||||
<string name="safemode_shortcut_error" msgid="9160126848219158407">"இறக்கிய ஆப்ஸ் பாதுகாப்பு முறையில் முடக்கப்பட்டது"</string>
|
||||
<string name="activity_not_found" msgid="8071924732094499514">"பயன்பாடு நிறுவப்படவில்லை."</string>
|
||||
<string name="activity_not_available" msgid="7456344436509528827">"பயன்பாடு இல்லை"</string>
|
||||
<string name="safemode_shortcut_error" msgid="9160126848219158407">"இறக்கிய பயன்பாடு பாதுகாப்பு முறையில் முடக்கப்பட்டது"</string>
|
||||
<string name="safemode_widget_error" msgid="4863470563535682004">"பாதுகாப்புப் பயன்முறையில் விட்ஜெட்கள் முடக்கப்பட்டுள்ளன"</string>
|
||||
<string name="shortcut_not_available" msgid="2536503539825726397">"ஷார்ட்கட் இல்லை"</string>
|
||||
<string name="home_screen" msgid="806512411299847073">"முகப்புத் திரை"</string>
|
||||
@@ -51,18 +51,18 @@
|
||||
<string name="all_apps_home_button_label" msgid="252062713717058851">"முகப்பு"</string>
|
||||
<string name="remove_drop_target_label" msgid="7812859488053230776">"அகற்று"</string>
|
||||
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"நிறுவல் நீக்கு"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"ஆப்ஸ் தகவல்"</string>
|
||||
<string name="app_info_drop_target_label" msgid="692894985365717661">"பயன்பாட்டுத் தகவல்"</string>
|
||||
<string name="install_drop_target_label" msgid="2539096853673231757">"நிறுவு"</string>
|
||||
<string name="permlab_install_shortcut" msgid="5632423390354674437">"குறுக்குவழிகளை நிறுவுதல்"</string>
|
||||
<string name="permdesc_install_shortcut" msgid="923466509822011139">"பயனரின் அனுமதி இல்லாமல் குறுக்குவழிகளைச் சேர்க்கப் ஆப்ஸை அனுமதிக்கிறது."</string>
|
||||
<string name="permdesc_install_shortcut" msgid="923466509822011139">"பயனரின் அனுமதி இல்லாமல் குறுக்குவழிகளைச் சேர்க்கப் பயன்பாட்டை அனுமதிக்கிறது."</string>
|
||||
<string name="permlab_read_settings" msgid="1941457408239617576">"முகப்பின் அமைப்பு மற்றும் குறுக்குவழிகளைப் படித்தல்"</string>
|
||||
<string name="permdesc_read_settings" msgid="5833423719057558387">"முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளைப் படிக்க ஆப்ஸை அனுமதிக்கிறது."</string>
|
||||
<string name="permdesc_read_settings" msgid="5833423719057558387">"முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளைப் படிக்க பயன்பாட்டை அனுமதிக்கிறது."</string>
|
||||
<string name="permlab_write_settings" msgid="3574213698004620587">"முகப்பின் அமைப்பு மற்றும் குறுக்குவழிகளை எழுதுதல்"</string>
|
||||
<string name="permdesc_write_settings" msgid="5440712911516509985">"முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளை மாற்ற ஆப்ஸை அனுமதிக்கிறது."</string>
|
||||
<string name="permdesc_write_settings" msgid="5440712911516509985">"முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளை மாற்ற பயன்பாட்டை அனுமதிக்கிறது."</string>
|
||||
<string name="msg_no_phone_permission" msgid="9208659281529857371">"ஃபோன் அழைப்புகள் செய்ய, <xliff:g id="APP_NAME">%1$s</xliff:g> அனுமதிக்கப்படவில்லை"</string>
|
||||
<string name="gadget_error_text" msgid="6081085226050792095">"விட்ஜெட்டை ஏற்றுவதில் சிக்கல்"</string>
|
||||
<string name="gadget_setup_text" msgid="8274003207686040488">"அமைவு"</string>
|
||||
<string name="uninstall_system_app_text" msgid="4172046090762920660">"இது அமைப்பு ஆப்ஸ் என்பதால் நிறுவல் நீக்கம் செய்ய முடியாது."</string>
|
||||
<string name="uninstall_system_app_text" msgid="4172046090762920660">"இது அமைப்பு பயன்பாடு என்பதால் நிறுவல் நீக்கம் செய்ய முடியாது."</string>
|
||||
<string name="folder_hint_text" msgid="6617836969016293992">"பெயரிடப்படாத கோப்புறை"</string>
|
||||
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> முடக்கப்பட்டது"</string>
|
||||
<plurals name="dotted_app_label" formatted="false" msgid="5194538107138265416">
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="folder_closed" msgid="4100806530910930934">"கோப்புறை மூடப்பட்டது"</string>
|
||||
<string name="folder_renamed" msgid="1794088362165669656">"கோப்புறை <xliff:g id="NAME">%1$s</xliff:g> என மறுபெயரிடப்பட்டது"</string>
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"கோப்புறை: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"விட்ஜெட்கள்"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"ஷார்ட்கட்ஸ்"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"வால்பேப்பர்கள்"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"ஸ்டைல்கள் & வால்பேப்பர்கள்"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"முகப்பு அமைப்புகள்"</string>
|
||||
@@ -93,12 +93,12 @@
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"அமைப்புகளை மாற்று"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"அறிவிப்புப் புள்ளிகளைக் காட்டு"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"முகப்புத் திரையில் ஐகானைச் சேர்"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"புதிய ஆப்ஸை நிறுவும்போது"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"புதிய பயன்பாடுகளுக்கு"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"தெரியாதது"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"அகற்று"</string>
|
||||
<string name="abandoned_search" msgid="891119232568284442">"தேடு"</string>
|
||||
<string name="abandoned_promises_title" msgid="7096178467971716750">"ஆப்ஸ் நிறுவப்படவில்லை"</string>
|
||||
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"ஐகானுக்கான ஆப்ஸ் நிறுவப்படவில்லை. இதை அகற்றலாம் அல்லது பயன்பாட்டைத் தேடி கைமுறையாக நிறுவலாம்."</string>
|
||||
<string name="abandoned_promises_title" msgid="7096178467971716750">"பயன்பாடு நிறுவப்படவில்லை"</string>
|
||||
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"ஐகானுக்கான பயன்பாடு நிறுவப்படவில்லை. இதை அகற்றலாம் அல்லது பயன்பாட்டைத் தேடி கைமுறையாக நிறுவலாம்."</string>
|
||||
<string name="app_downloading_title" msgid="8336702962104482644">"<xliff:g id="NAME">%1$s</xliff:g>ஐப் பதிவிறக்குகிறது, <xliff:g id="PROGRESS">%2$s</xliff:g> முடிந்தது"</string>
|
||||
<string name="app_waiting_download_title" msgid="7053938513995617849">"<xliff:g id="NAME">%1$s</xliff:g>ஐ நிறுவுவதற்காகக் காத்திருக்கிறது"</string>
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"<xliff:g id="NAME">%1$s</xliff:g> விட்ஜெட்டுகள்"</string>
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"ఫోల్డర్: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"విడ్జెట్లు"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"వాల్పేపర్లు"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"స్టయిల్స్ & వాల్పేపర్లు"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"శైలులు & వాల్పేపర్లు"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"హోమ్ సెట్టింగ్లు"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"మీ నిర్వాహకులు నిలిపివేసారు"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"హోమ్ స్క్రీన్ భ్రమణాన్ని అనుమతించండి"</string>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"Alisin"</string>
|
||||
<string name="abandoned_search" msgid="891119232568284442">"Maghanap"</string>
|
||||
<string name="abandoned_promises_title" msgid="7096178467971716750">"Hindi naka-install ang app na ito"</string>
|
||||
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"Hindi naka-install ang app para sa icon na ito. Puwede mo itong alisin, o maaari mong hanapin ang app at i-install ito nang manual."</string>
|
||||
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"Hindi naka-install ang app para sa icon na ito. Maaari mo itong alisin, o maaari mong hanapin ang app at i-install ito nang manu-mano."</string>
|
||||
<string name="app_downloading_title" msgid="8336702962104482644">"Dina-download na ang <xliff:g id="NAME">%1$s</xliff:g>, tapos na ang <xliff:g id="PROGRESS">%2$s</xliff:g>"</string>
|
||||
<string name="app_waiting_download_title" msgid="7053938513995617849">"Hinihintay nang mag-install ang <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"Mga widget ng <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Папка <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Віджети"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Фонові малюнки"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Стиль і фон"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Налаштування головного екрана"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Стилі й фонові малюнки"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Налаштування Home"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Вимкнув адміністратор"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Дозволити обертання головного екрана"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Коли телефон обертається"</string>
|
||||
@@ -94,7 +94,7 @@
|
||||
<string name="msg_missing_notification_access" msgid="281113995110910548">"Щоб показувати значки сповіщень, увімкніть сповіщення в додатку <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="title_change_settings" msgid="1376365968844349552">"Змінити налаштування"</string>
|
||||
<string name="notification_dots_service_title" msgid="4284221181793592871">"Показувати значки сповіщень"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Додавати значок на головний екран"</string>
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Додати значок на головний екран"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Для нових додатків"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"Невідомо"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"Прибрати"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"کوئی ویجٹ منتخب کرنے یا حسب ضرورت کاروائیاں استعمال کرنے کیلئے دو بار تھپتھپائیں اور پکڑے رکھیں۔"</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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"دستی طور پر رکھنے کیلئے ٹچ کر کے دبائے رکھیں"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"دستی طور پر رکھنے کیلئے & ٹچ کرکے ہولڈ کریں"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"خود کار طور پر شامل کریں"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"ایپس تلاش کریں"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"ایپس لوڈ کی جا رہی ہیں…"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Joylash uchun bosib turing"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Qo‘lda joylashtirish uchun bosib turing"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Avtomatik chiqarish"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Ilovalarni qidirish"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Ilovalar yuklanmoqda…"</string>
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Mavzu va fon rasmlari"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Bosh ekran sozlamalari"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Administrator tomonidan o‘chirilgan"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Bosh ekranni burishga ruxsat"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"Asosiy ekranni aylantirishga ruxsat berish"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"Telefon burilganda"</string>
|
||||
<string name="notification_dots_title" msgid="9062440428204120317">"Bildirishnoma belgilari"</string>
|
||||
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Yoniq"</string>
|
||||
@@ -95,7 +95,7 @@
|
||||
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Bosh ekranga ikonka chiqarish"</string>
|
||||
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Yangi o‘rnatilgan ilovalar ikonkasini bosh ekranga chiqarish"</string>
|
||||
<string name="package_state_unknown" msgid="7592128424511031410">"Noma’lum"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"Olib tashlash"</string>
|
||||
<string name="abandoned_clean_this" msgid="7610119707847920412">"O‘chirish"</string>
|
||||
<string name="abandoned_search" msgid="891119232568284442">"Qidirish"</string>
|
||||
<string name="abandoned_promises_title" msgid="7096178467971716750">"Ushbu ilova o‘rnatilmagan"</string>
|
||||
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"Ilova o‘rnatilmagan. Belgini o‘chirib tashlashingiz yoki ilovani topib, uni qo‘lda o‘rnatishingiz mumkin."</string>
|
||||
@@ -104,15 +104,15 @@
|
||||
<string name="widgets_bottom_sheet_title" msgid="2904559530954183366">"<xliff:g id="NAME">%1$s</xliff:g> vidjetlari"</string>
|
||||
<string name="widgets_list" msgid="796804551140113767">"Vidjetlar ro‘yxati"</string>
|
||||
<string name="widgets_list_closed" msgid="6141506579418771922">"Vidjetlar ro‘yxati yopildi"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Bosh ekranga chiqarish"</string>
|
||||
<string name="action_add_to_workspace" msgid="8902165848117513641">"Bosh ekranga qo‘shish"</string>
|
||||
<string name="action_move_here" msgid="2170188780612570250">"Obyektni bu yerga ko‘chirish"</string>
|
||||
<string name="item_added_to_workspace" msgid="4211073925752213539">"Obyekt bosh ekranga qo‘shildi"</string>
|
||||
<string name="item_removed" msgid="851119963877842327">"Obyekt o‘chirib tashlandi"</string>
|
||||
<string name="undo" msgid="4151576204245173321">"Qaytarish"</string>
|
||||
<string name="action_move" msgid="4339390619886385032">"Obyektni ko‘chirib o‘tkazish"</string>
|
||||
<string name="move_to_empty_cell" msgid="2833711483015685619">"<xliff:g id="NUMBER_0">%1$s</xliff:g> <xliff:g id="NUMBER_1">%2$s</xliff:g> katakka olish"</string>
|
||||
<string name="move_to_position" msgid="6750008980455459790">"<xliff:g id="NUMBER">%1$s</xliff:g>-joyga olish"</string>
|
||||
<string name="move_to_hotseat_position" msgid="6295412897075147808">"Sevimlilarga olish (<xliff:g id="NUMBER">%1$s</xliff:g>)"</string>
|
||||
<string name="move_to_empty_cell" msgid="2833711483015685619">"<xliff:g id="NUMBER_0">%1$s</xliff:g> <xliff:g id="NUMBER_1">%2$s</xliff:g> katakka ko‘chirib o‘tkazish"</string>
|
||||
<string name="move_to_position" msgid="6750008980455459790">"<xliff:g id="NUMBER">%1$s</xliff:g>-joyga ko‘chirib o‘tkazish"</string>
|
||||
<string name="move_to_hotseat_position" msgid="6295412897075147808">"Sevimlilarga (<xliff:g id="NUMBER">%1$s</xliff:g>) ko‘chirib o‘tkazish"</string>
|
||||
<string name="item_moved" msgid="4606538322571412879">"Element ko‘chirib o‘tkazildi"</string>
|
||||
<string name="add_to_folder" msgid="9040534766770853243">"<xliff:g id="NAME">%1$s</xliff:g> jildiga qo‘shish"</string>
|
||||
<string name="add_to_folder_with_app" msgid="4534929978967147231">"<xliff:g id="NAME">%1$s</xliff:g> ilovasi bor jildga qo‘shish"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"Nhấn đúp và giữ để chọn tiện ích hoặc sử dụng tác vụ 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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Chạm và giữ để thêm theo cách thủ công"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Chạm và giữ để đặt theo cách thủ công"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"Tự động thêm"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Tìm kiếm ứng dụng"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"Đang tải ứng dụng…"</string>
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="folder_closed" msgid="4100806530910930934">"Đã đóng thư mục"</string>
|
||||
<string name="folder_renamed" msgid="1794088362165669656">"Đã đổi tên thư mục thành <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="folder_name_format" msgid="6629239338071103179">"Thư mục: <xliff:g id="NAME">%1$s</xliff:g>"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Tiện ích"</string>
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"Tiện ích con"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"Hình nền"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"Kiểu và hình nền"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Cài đặt màn hình chính"</string>
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"小工具"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"桌布"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"樣式和桌布"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"主畫面設定"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"主螢幕設定"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"已由您的管理員停用"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"允許主畫面旋轉"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"當手機旋轉時"</string>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="long_accessible_way_to_add" msgid="4289502106628154155">"輕觸兩下並按住小工具即可選取,你也可以使用自訂動作。"</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>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"按住圖示即可手動新增"</string>
|
||||
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"按住即可手動放置"</string>
|
||||
<string name="place_automatically" msgid="8064208734425456485">"自動新增"</string>
|
||||
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"搜尋應用程式"</string>
|
||||
<string name="all_apps_loading_message" msgid="5813968043155271636">"正在載入應用程式…"</string>
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="widget_button_text" msgid="2880537293434387943">"小工具"</string>
|
||||
<string name="wallpaper_button_text" msgid="8404103075899945851">"桌布"</string>
|
||||
<string name="styles_wallpaper_button_text" msgid="4342122323125579619">"樣式和桌布"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"主螢幕設定"</string>
|
||||
<string name="settings_button_text" msgid="8873672322605444408">"Home 設定"</string>
|
||||
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"已由你的管理員停用"</string>
|
||||
<string name="allow_rotation_title" msgid="7728578836261442095">"允許旋轉主螢幕"</string>
|
||||
<string name="allow_rotation_desc" msgid="8662546029078692509">"當手機旋轉時"</string>
|
||||
|
||||
@@ -232,11 +232,6 @@
|
||||
<dimen name="snackbar_min_text_size">12sp</dimen>
|
||||
<dimen name="snackbar_max_text_size">14sp</dimen>
|
||||
|
||||
<!-- Hints -->
|
||||
<dimen name="chip_hint_height">26dp</dimen>
|
||||
<dimen name="chip_hint_bottom_margin">194dp</dimen>
|
||||
<dimen name="chip_hint_overhang">15dp</dimen>
|
||||
|
||||
<!-- Theming related -->
|
||||
<dimen name="default_dialog_corner_radius">8dp</dimen>
|
||||
|
||||
|
||||
@@ -99,10 +99,6 @@ public class DeviceProfile {
|
||||
public int folderChildTextSizePx;
|
||||
public int folderChildDrawablePaddingPx;
|
||||
|
||||
// Hints
|
||||
public int chipHintHeightPx;
|
||||
public int chipHintBottomMarginPx;
|
||||
|
||||
// Hotseat
|
||||
public int hotseatCellHeightPx;
|
||||
// In portrait: size = height, in landscape: size = width
|
||||
@@ -200,9 +196,6 @@ public class DeviceProfile {
|
||||
|
||||
workspaceCellPaddingXPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_padding_x);
|
||||
|
||||
chipHintHeightPx = res.getDimensionPixelSize(R.dimen.chip_hint_height);
|
||||
chipHintBottomMarginPx = res.getDimensionPixelSize(R.dimen.chip_hint_bottom_margin);
|
||||
|
||||
hotseatBarTopPaddingPx =
|
||||
res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_top_padding);
|
||||
hotseatBarBottomPaddingPx = (isTallDevice ? 0
|
||||
|
||||
@@ -80,6 +80,7 @@ import android.widget.Toast;
|
||||
import com.android.launcher3.DropTarget.DragObject;
|
||||
import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
|
||||
import com.android.launcher3.allapps.AllAppsContainerView;
|
||||
import com.android.launcher3.allapps.AllAppsStore;
|
||||
import com.android.launcher3.allapps.AllAppsTransitionController;
|
||||
import com.android.launcher3.allapps.DiscoveryBounce;
|
||||
import com.android.launcher3.anim.PropertyListBuilder;
|
||||
@@ -879,6 +880,9 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_OVERVIEW_EVENT_TAG, "Launcher.onStart");
|
||||
}
|
||||
RaceConditionTracker.onEvent(ON_START_EVT, ENTER);
|
||||
super.onStart();
|
||||
if (mLauncherCallbacks != null) {
|
||||
@@ -1063,7 +1067,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
|
||||
|
||||
// Setup the drag layer
|
||||
mDragLayer.setup(mDragController, mWorkspace);
|
||||
mCancelTouchController = UiFactory.enableLiveTouchControllerChanges(mDragLayer);
|
||||
mCancelTouchController = UiFactory.enableLiveUIChanges(this);
|
||||
|
||||
mWorkspace.setup(mDragController);
|
||||
// Until the workspace is bound, ensure that we keep the wallpaper offset locked to the
|
||||
@@ -2238,8 +2242,9 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
|
||||
}
|
||||
mPendingExecutor = executor;
|
||||
if (!isInState(ALL_APPS)) {
|
||||
mAppsView.getAppsStore().setDeferUpdates(true);
|
||||
mPendingExecutor.execute(() -> mAppsView.getAppsStore().setDeferUpdates(false));
|
||||
mAppsView.getAppsStore().enableDeferUpdates(AllAppsStore.DEFER_UPDATES_NEXT_DRAW);
|
||||
mPendingExecutor.execute(() -> mAppsView.getAppsStore().disableDeferUpdates(
|
||||
AllAppsStore.DEFER_UPDATES_NEXT_DRAW));
|
||||
}
|
||||
|
||||
executor.attachTo(this);
|
||||
|
||||
@@ -258,9 +258,6 @@ public class LauncherState {
|
||||
* Called when the start transition ends and the user settles on this particular state.
|
||||
*/
|
||||
public void onStateTransitionEnd(Launcher launcher) {
|
||||
if (this == NORMAL || this == SPRING_LOADED) {
|
||||
UiFactory.resetOverview(launcher);
|
||||
}
|
||||
if (this == NORMAL) {
|
||||
// Clear any rotation locks when going to normal state
|
||||
launcher.getRotationHelper().setCurrentStateRequest(REQUEST_NONE);
|
||||
|
||||
@@ -1394,6 +1394,10 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
|
||||
builder.play(stepAnimator);
|
||||
}
|
||||
|
||||
public WorkspaceStateTransitionAnimation getStateTransitionAnimation() {
|
||||
return mStateTransitionAnimation;
|
||||
}
|
||||
|
||||
public void updateAccessibilityFlags() {
|
||||
// TODO: Update the accessibility flags appropriately when dragging.
|
||||
int accessibilityFlag = mLauncher.getStateManager().getState().workspaceAccessibilityFlag;
|
||||
|
||||
@@ -130,7 +130,10 @@ public class WorkspaceStateTransitionAnimation {
|
||||
propertySetter.setFloat(mWorkspace.getPageIndicator(), View.TRANSLATION_Y,
|
||||
hotseatScaleAndTranslation.translationY, translationInterpolator);
|
||||
|
||||
// Set scrim
|
||||
setScrim(propertySetter, state);
|
||||
}
|
||||
|
||||
public void setScrim(PropertySetter propertySetter, LauncherState state) {
|
||||
WorkspaceAndHotseatScrim scrim = mLauncher.getDragLayer().getScrim();
|
||||
propertySetter.setFloat(scrim, SCRIM_PROGRESS, state.getWorkspaceScrimAlpha(mLauncher),
|
||||
LINEAR);
|
||||
|
||||
@@ -628,11 +628,12 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
final boolean result = super.dispatchTouchEvent(ev);
|
||||
switch (ev.getActionMasked()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
if (result) mAllAppsStore.setDeferUpdates(true);
|
||||
if (result) mAllAppsStore.enableDeferUpdates(
|
||||
AllAppsStore.DEFER_UPDATES_USER_INTERACTION);
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
mAllAppsStore.setDeferUpdates(false);
|
||||
mAllAppsStore.disableDeferUpdates(AllAppsStore.DEFER_UPDATES_USER_INTERACTION);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -29,7 +29,6 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
@@ -38,12 +37,19 @@ import java.util.function.Predicate;
|
||||
*/
|
||||
public class AllAppsStore {
|
||||
|
||||
// Defer updates flag used to defer all apps updates to the next draw.
|
||||
public static final int DEFER_UPDATES_NEXT_DRAW = 1 << 0;
|
||||
// Defer updates flag used to defer all apps updates while the user interacts with all apps.
|
||||
public static final int DEFER_UPDATES_USER_INTERACTION = 1 << 1;
|
||||
// Defer updates flag used to defer all apps updates by a test's request.
|
||||
public static final int DEFER_UPDATES_TEST = 1 << 2;
|
||||
|
||||
private PackageUserKey mTempKey = new PackageUserKey(null, null);
|
||||
private final HashMap<ComponentKey, AppInfo> mComponentToAppMap = new HashMap<>();
|
||||
private final List<OnUpdateListener> mUpdateListeners = new ArrayList<>();
|
||||
private final ArrayList<ViewGroup> mIconContainers = new ArrayList<>();
|
||||
|
||||
private boolean mDeferUpdates = false;
|
||||
private int mDeferUpdatesFlags = 0;
|
||||
private boolean mUpdatePending = false;
|
||||
|
||||
public Collection<AppInfo> getApps() {
|
||||
@@ -62,17 +68,22 @@ public class AllAppsStore {
|
||||
return mComponentToAppMap.get(key);
|
||||
}
|
||||
|
||||
public void setDeferUpdates(boolean deferUpdates) {
|
||||
if (mDeferUpdates != deferUpdates) {
|
||||
mDeferUpdates = deferUpdates;
|
||||
public void enableDeferUpdates(int flag) {
|
||||
mDeferUpdatesFlags |= flag;
|
||||
}
|
||||
|
||||
if (!mDeferUpdates && mUpdatePending) {
|
||||
notifyUpdate();
|
||||
mUpdatePending = false;
|
||||
}
|
||||
public void disableDeferUpdates(int flag) {
|
||||
mDeferUpdatesFlags &= ~flag;
|
||||
if (mDeferUpdatesFlags == 0 && mUpdatePending) {
|
||||
notifyUpdate();
|
||||
mUpdatePending = false;
|
||||
}
|
||||
}
|
||||
|
||||
public int getDeferUpdatesFlags() {
|
||||
return mDeferUpdatesFlags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds or updates existing apps in the list
|
||||
*/
|
||||
@@ -95,7 +106,7 @@ public class AllAppsStore {
|
||||
|
||||
|
||||
private void notifyUpdate() {
|
||||
if (mDeferUpdates) {
|
||||
if (mDeferUpdatesFlags != 0) {
|
||||
mUpdatePending = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ abstract class BaseFlags {
|
||||
"ENABLE_QUICKSTEP_LIVE_TILE", false, "Enable live tile in Quickstep overview");
|
||||
|
||||
public static final TogglableFlag ENABLE_HINTS_IN_OVERVIEW = new TogglableFlag(
|
||||
"ENABLE_HINTS_IN_OVERVIEW", false,
|
||||
"ENABLE_HINTS_IN_OVERVIEW", true,
|
||||
"Show chip hints and gleams on the overview screen");
|
||||
|
||||
public static final TogglableFlag FAKE_LANDSCAPE_UI = new TogglableFlag(
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
import android.view.DragEvent;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.KeyEvent;
|
||||
@@ -491,6 +492,16 @@ public class DragController implements DragDriver.EventListener, TouchController
|
||||
mLastTouch[0] = x;
|
||||
mLastTouch[1] = y;
|
||||
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.NO_DRAG_TAG,
|
||||
"handleMoveEvent Conditions " +
|
||||
mIsInPreDrag + ", " +
|
||||
(mIsInPreDrag && mOptions.preDragCondition != null) + ", " +
|
||||
(mIsInPreDrag && mOptions.preDragCondition != null
|
||||
&& mOptions.preDragCondition.shouldStartDrag(
|
||||
mDistanceSinceScroll)));
|
||||
}
|
||||
|
||||
if (mIsInPreDrag && mOptions.preDragCondition != null
|
||||
&& mOptions.preDragCondition.shouldStartDrag(mDistanceSinceScroll)) {
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
|
||||
@@ -73,7 +73,8 @@ public class RotationHelper implements OnSharedPreferenceChangeListener {
|
||||
|
||||
// This is used to defer setting rotation flags until the activity is being created
|
||||
private boolean mInitialized;
|
||||
public boolean mDestroyed;
|
||||
private boolean mDestroyed;
|
||||
private boolean mRotationHasDifferentUI;
|
||||
|
||||
private int mLastActivityFlags = -1;
|
||||
|
||||
@@ -92,8 +93,12 @@ public class RotationHelper implements OnSharedPreferenceChangeListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void setRotationHadDifferentUI(boolean rotationHasDifferentUI) {
|
||||
mRotationHasDifferentUI = rotationHasDifferentUI;
|
||||
}
|
||||
|
||||
public boolean homeScreenCanRotate() {
|
||||
return mIgnoreAutoRotateSettings || mAutoRotateEnabled
|
||||
return mRotationHasDifferentUI || mIgnoreAutoRotateSettings || mAutoRotateEnabled
|
||||
|| mStateHandlerRequest != REQUEST_NONE
|
||||
|| mLauncher.getDeviceProfile().isMultiWindowMode;
|
||||
}
|
||||
|
||||
@@ -23,9 +23,13 @@ import com.android.launcher3.InvariantDeviceProfile;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.MainThreadExecutor;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.allapps.AllAppsStore;
|
||||
import com.android.launcher3.util.ResourceBasedOverride;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class TestInformationHandler implements ResourceBasedOverride {
|
||||
|
||||
public static TestInformationHandler newInstance(Context context) {
|
||||
@@ -77,6 +81,32 @@ public class TestInformationHandler implements ResourceBasedOverride {
|
||||
case TestProtocol.REQUEST_DISABLE_DEBUG_TRACING:
|
||||
TestProtocol.sDebugTracing = false;
|
||||
break;
|
||||
|
||||
case TestProtocol.REQUEST_FREEZE_APP_LIST:
|
||||
new MainThreadExecutor().execute(() ->
|
||||
mLauncher.getAppsView().getAppsStore().enableDeferUpdates(
|
||||
AllAppsStore.DEFER_UPDATES_TEST));
|
||||
break;
|
||||
|
||||
case TestProtocol.REQUEST_UNFREEZE_APP_LIST:
|
||||
new MainThreadExecutor().execute(() ->
|
||||
mLauncher.getAppsView().getAppsStore().disableDeferUpdates(
|
||||
AllAppsStore.DEFER_UPDATES_TEST));
|
||||
break;
|
||||
|
||||
case TestProtocol.REQUEST_APP_LIST_FREEZE_FLAGS: {
|
||||
try {
|
||||
final int deferUpdatesFlags = new MainThreadExecutor().submit(() ->
|
||||
mLauncher.getAppsView().getAppsStore().getDeferUpdatesFlags()).get();
|
||||
response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD,
|
||||
deferUpdatesFlags);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ public final class TestProtocol {
|
||||
}
|
||||
|
||||
public static final String TEST_INFO_RESPONSE_FIELD = "response";
|
||||
|
||||
public static final String REQUEST_HOME_TO_OVERVIEW_SWIPE_HEIGHT =
|
||||
"home-to-overview-swipe-height";
|
||||
public static final String REQUEST_BACKGROUND_TO_OVERVIEW_SWIPE_HEIGHT =
|
||||
@@ -65,6 +66,10 @@ public final class TestProtocol {
|
||||
"all-apps-to-overview-swipe-height";
|
||||
public static final String REQUEST_HOME_TO_ALL_APPS_SWIPE_HEIGHT =
|
||||
"home-to-all-apps-swipe-height";
|
||||
public static final String REQUEST_FREEZE_APP_LIST = "freeze-app-list";
|
||||
public static final String REQUEST_UNFREEZE_APP_LIST = "unfreeze-app-list";
|
||||
public static final String REQUEST_APP_LIST_FREEZE_FLAGS = "app-list-freeze-flags";
|
||||
|
||||
public static boolean sDebugTracing = false;
|
||||
public static final String REQUEST_ENABLE_DEBUG_TRACING = "enable-debug-tracing";
|
||||
public static final String REQUEST_DISABLE_DEBUG_TRACING = "disable-debug-tracing";
|
||||
@@ -72,4 +77,5 @@ public final class TestProtocol {
|
||||
public static final String NO_DRAG_TAG = "b/133009122";
|
||||
public static final String NO_START_TAG = "b/132900132";
|
||||
public static final String NO_START_TASK_TAG = "b/133765434";
|
||||
public static final String NO_OVERVIEW_EVENT_TAG = "b/134532571";
|
||||
}
|
||||
|
||||
@@ -27,16 +27,17 @@ import android.util.MutableLong;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
|
||||
/**
|
||||
* A wrapper around {@link Trace} to allow easier proguarding for production builds.
|
||||
* A wrapper around {@link Trace} with some utility information.
|
||||
*
|
||||
* To enable any tracing log, execute the following command:
|
||||
* $ adb shell setprop log.tag.LAUNCHER_TRACE VERBOSE
|
||||
* $ adb shell setprop log.tag.TAGNAME VERBOSE
|
||||
*/
|
||||
public class TraceHelper {
|
||||
|
||||
private static final boolean ENABLED = FeatureFlags.IS_DOGFOOD_BUILD;
|
||||
private static final boolean ENABLED = isLoggable("LAUNCHER_TRACE", VERBOSE);
|
||||
|
||||
private static final boolean SYSTEM_TRACE = false;
|
||||
private static final boolean SYSTEM_TRACE = ENABLED;
|
||||
private static final ArrayMap<String, MutableLong> sUpTimes = ENABLED ? new ArrayMap<>() : null;
|
||||
|
||||
public static void beginSection(String sectionName) {
|
||||
|
||||
@@ -124,6 +124,7 @@ public class FloatingIconView extends View implements
|
||||
|
||||
private boolean mIsVerticalBarLayout = false;
|
||||
private boolean mIsAdaptiveIcon = false;
|
||||
private boolean mIsOpening;
|
||||
|
||||
private @Nullable Drawable mBadge;
|
||||
private @Nullable Drawable mForeground;
|
||||
@@ -178,8 +179,10 @@ public class FloatingIconView extends View implements
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
getViewTreeObserver().addOnGlobalLayoutListener(this);
|
||||
mLauncher.getRotationHelper().setCurrentTransitionRequest(REQUEST_LOCK);
|
||||
if (!mIsOpening) {
|
||||
getViewTreeObserver().addOnGlobalLayoutListener(this);
|
||||
mLauncher.getRotationHelper().setCurrentTransitionRequest(REQUEST_LOCK);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -326,7 +329,7 @@ public class FloatingIconView extends View implements
|
||||
* - For BubbleTextView, we return the icon bounds.
|
||||
*/
|
||||
private float getLocationBoundsForView(View v, RectF outRect) {
|
||||
boolean ignoreTransform = true;
|
||||
boolean ignoreTransform = !mIsOpening;
|
||||
if (v instanceof DeepShortcutView) {
|
||||
v = ((DeepShortcutView) v).getBubbleText();
|
||||
ignoreTransform = false;
|
||||
@@ -627,6 +630,7 @@ public class FloatingIconView extends View implements
|
||||
view.recycle();
|
||||
|
||||
view.mIsVerticalBarLayout = launcher.getDeviceProfile().isVerticalBarLayout();
|
||||
view.mIsOpening = isOpening;
|
||||
|
||||
view.mOriginalIcon = originalView;
|
||||
view.mPositionOut = positionOut;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user