diff --git a/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java b/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java index 350e0d1d97..79e50ef35b 100644 --- a/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java +++ b/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java @@ -21,14 +21,18 @@ import static com.android.quickstep.views.OverviewActionsView.DISABLED_ROTATED; import android.annotation.SuppressLint; import android.app.assist.AssistContent; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.Matrix; +import android.net.Uri; import android.os.SystemClock; +import android.provider.Settings; import android.text.TextUtils; import androidx.annotation.VisibleForTesting; +import com.android.launcher3.BuildConfig; import com.android.launcher3.R; import com.android.quickstep.util.AssistContentRequester; import com.android.quickstep.views.OverviewActionsView; @@ -45,7 +49,12 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { public static final String ACTION_SEARCH = "com.android.quickstep.ACTION_SEARCH"; public static final String ELAPSED_NANOS = "niu_actions_elapsed_realtime_nanos"; public static final String ACTIONS_URL = "niu_actions_app_url"; + public static final String ACTIONS_ERROR_CODE = "niu_actions_app_error_code"; + public static final int ERROR_PERMISSIONS = 1; private static final String TAG = "TaskOverlayFactoryGo"; + private static final String URI_AUTHORITY = + BuildConfig.APPLICATION_ID + ".overview.fileprovider"; + private static final String FAKE_FILEPATH = "shared_images/null.png"; // Empty constructor required for ResourceBasedOverride public TaskOverlayFactoryGo(Context context) {} @@ -64,6 +73,7 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { public static final class TaskOverlayGo extends TaskOverlay { private String mNIUPackageName; private String mWebUrl; + private boolean mAssistPermissionsEnabled; private TaskOverlayGo(TaskThumbnailView taskThumbnailView) { super(taskThumbnailView); @@ -87,6 +97,11 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { boolean isAllowedByPolicy = mThumbnailView.isRealSnapshot(); getActionsView().setCallbacks(new OverlayUICallbacksGoImpl(isAllowedByPolicy, task)); + checkPermissions(); + if (!mAssistPermissionsEnabled) { + return; + } + int taskId = task.key.id; AssistContentRequester contentRequester = new AssistContentRequester(mApplicationContext); @@ -112,7 +127,22 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { @VisibleForTesting public void sendNIUIntent(String actionType) { Intent intent = createNIUIntent(actionType); - mImageApi.shareAsDataWithExplicitIntent(/* crop */ null, intent); + // Only add and send the image if the appropriate permissions are held + if (mAssistPermissionsEnabled) { + mImageApi.shareAsDataWithExplicitIntent(/* crop */ null, intent); + } else { + intent.putExtra(ACTIONS_ERROR_CODE, ERROR_PERMISSIONS); + // The Intent recipient expects an image URI, and omitting one or using a + // completely invalid URI will cause the Intent parsing to crash. + // So we construct a URI for a nonexistent image. + Uri uri = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(URI_AUTHORITY) + .path(FAKE_FILEPATH) + .build(); + intent.setData(uri); + mApplicationContext.startActivity(intent); + } } private Intent createNIUIntent(String actionType) { @@ -129,6 +159,19 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { return intent; } + /** + * Checks whether the Assistant has screen context permissions + */ + @VisibleForTesting + public void checkPermissions() { + ContentResolver contentResolver = mApplicationContext.getContentResolver(); + boolean structureEnabled = Settings.Secure.getInt(contentResolver, + Settings.Secure.ASSIST_STRUCTURE_ENABLED, 0) != 0; + boolean screenshotEnabled = Settings.Secure.getInt(contentResolver, + Settings.Secure.ASSIST_SCREENSHOT_ENABLED, 0) != 0; + mAssistPermissionsEnabled = structureEnabled && screenshotEnabled; + } + protected class OverlayUICallbacksGoImpl extends OverlayUICallbacksImpl implements OverlayUICallbacksGo { public OverlayUICallbacksGoImpl(boolean isAllowedByPolicy, Task task) { diff --git a/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java b/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java index 1128dac82e..42be9bbe13 100644 --- a/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java +++ b/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java @@ -20,7 +20,7 @@ import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.DEACCEL; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.FINAL_FRAME; -import static com.android.launcher3.anim.Interpolators.INSTANT; +import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.anim.Interpolators.clampToProgress; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_ACTIONS_FADE; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE; @@ -109,7 +109,7 @@ public class OverviewToHomeAnim { ? clampToProgress(FAST_OUT_SLOW_IN, 0, 0.75f) : FINAL_FRAME); config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, FINAL_FRAME); config.setInterpolator(ANIM_OVERVIEW_SCALE, FINAL_FRAME); - config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, INSTANT); + config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, LINEAR); if (!isLayoutNaturalToLauncher) { config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL); } diff --git a/res/color/arrow_tip_view_bg.xml b/res/color/arrow_tip_view_bg.xml new file mode 100644 index 0000000000..91eed508b1 --- /dev/null +++ b/res/color/arrow_tip_view_bg.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/res/color/arrow_tip_view_content.xml b/res/color/arrow_tip_view_content.xml new file mode 100644 index 0000000000..87c733e7ad --- /dev/null +++ b/res/color/arrow_tip_view_content.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/res/drawable/arrow_toast_rounded_background.xml b/res/drawable/arrow_toast_rounded_background.xml index 52cc6fcb62..f3f2158186 100644 --- a/res/drawable/arrow_toast_rounded_background.xml +++ b/res/drawable/arrow_toast_rounded_background.xml @@ -14,6 +14,6 @@ limitations under the License. --> - + diff --git a/res/drawable/bg_widgets_searchbox.xml b/res/drawable/bg_widgets_searchbox.xml index 2a50a51fae..3230ac86b2 100644 --- a/res/drawable/bg_widgets_searchbox.xml +++ b/res/drawable/bg_widgets_searchbox.xml @@ -14,6 +14,6 @@ limitations under the License. --> - + \ No newline at end of file diff --git a/res/drawable/drop_target_frame.xml b/res/drawable/drop_target_frame.xml new file mode 100644 index 0000000000..fa6dafd4fc --- /dev/null +++ b/res/drawable/drop_target_frame.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/res/drawable/drop_target_frame_hover.xml b/res/drawable/drop_target_frame_hover.xml new file mode 100644 index 0000000000..7d0e919331 --- /dev/null +++ b/res/drawable/drop_target_frame_hover.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/res/drawable/ic_block_no_shadow.xml b/res/drawable/ic_block_no_shadow.xml index edeb4c63ec..be9aa07b38 100644 --- a/res/drawable/ic_block_no_shadow.xml +++ b/res/drawable/ic_block_no_shadow.xml @@ -14,10 +14,10 @@ limitations under the License. --> diff --git a/res/drawable/ic_uninstall_no_shadow.xml b/res/drawable/ic_uninstall_no_shadow.xml index 6aff102a2d..14cecacbea 100644 --- a/res/drawable/ic_uninstall_no_shadow.xml +++ b/res/drawable/ic_uninstall_no_shadow.xml @@ -14,10 +14,10 @@ limitations under the License. --> + + @@ -64,7 +74,8 @@ style="@style/Widget.DeviceDefault.Button.Rounded.Colored" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:paddingHorizontal="16dp" android:onClick="onPlaceAutomaticallyClick" - android:text="@string/place_automatically" /> + android:text="@string/add_to_home_screen" /> diff --git a/res/layout/arrow_toast.xml b/res/layout/arrow_toast.xml index 0ec9981220..ae60e1bf06 100644 --- a/res/layout/arrow_toast.xml +++ b/res/layout/arrow_toast.xml @@ -16,6 +16,7 @@ @@ -38,7 +39,7 @@ android:paddingBottom="5dp" android:gravity="center" android:layout_gravity="center_vertical" - android:textColor="@android:color/white" + android:textColor="@color/arrow_tip_view_content" android:textSize="16sp"/> diff --git a/res/layout/widgets_search_bar.xml b/res/layout/widgets_search_bar.xml index c3dd19e0bb..24671565ee 100644 --- a/res/layout/widgets_search_bar.xml +++ b/res/layout/widgets_search_bar.xml @@ -6,6 +6,7 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="16dp" + android:layout_marginBottom="1dp" android:background="@drawable/bg_widgets_searchbox" android:elevation="2dp"> @@ -24,8 +25,8 @@ android:layout_weight="1" android:inputType="text" android:imeOptions="actionSearch" - android:textColor="?android:attr/textColorSecondary" - android:textColorHint="?android:attr/textColorTertiary"/> + android:textColor="?android:attr/textColorPrimary" + android:textColorHint="?android:attr/textColorSecondary"/> "सुरक्षित मोडमा डाउनलोड गरेको एप अक्षम गरिएको छ" "सुरक्षित मोडमा विगेटहरू अक्षम गरियो" "सर्टकट उपलब्ध छैन" - - - - - - - - + "होम" + "स्प्लिट स्क्रिन" + "कुनै विजेट सार्न डबल ट्याप गरेर छोइराख्नुहोस्।" + "कुनै विजेट सार्न वा आफ्नो रोजाइका कारबाही प्रयोग गर्न डबल ट्याप गरेर छोइराख्नुहोस्।" "%1$d × %2$d" "%1$d चौडाइ गुणा %2$d उचाइ" "थप्न टच एण्ड होल्ड गर्नुहोस्" "स्वतः थप्नुहोस्" - - - - + + %1$d वटा विजेट + %1$d वटा विजेट + + + %1$d वटा सर्टकट + %1$d वटा सर्टकट + + "%1$s, %2$s" "विजेटहरू" - - - - - - - - - - - - - - + "खोज्नुहोस्" + "खोज बाकसमा भएको पाठ हटाउनुहोस्" + "कुनै पनि विजेट उपलब्ध छैन" + "कुनै पनि खोज परिणाम भेटिएन" + "व्यक्तिगत" + "कामसम्बन्धी" + "वार्तालापहरू" "खोजसम्बन्धी एपहरू" "एपहरू लोड गर्दै…" "\"%1$s\" सँग मिल्दो कुनै एप भेटिएन" "थप एपहरू खोज्नुहोस्" "एप" "सूचनाहरू" - - - - + "कुनै सर्टकट सार्न डबल ट्याप गरेर छोइराख्नुहोस्।" + "कुनै सर्टकट सार्न वा आफ्नो रोजाइका कारबाही प्रयोग गर्न डबल ट्याप गरेर छोइराख्नुहोस्।" "यो गृह स्क्रिनमा कुनै थप ठाउँ छैन।" "मन पर्ने ट्रे अब कुनै ठाँउ छैन" "एपको सूची" @@ -124,8 +116,7 @@ "खोजी गर्नुहोस्" "यो एप स्थापित छैन" "यो प्रतिमाका लागि एपलाई स्थापना गरिएको छैन। तपाईं यसलाई हटाउन, वा एप खोजी र स्वयं यो स्थापित गर्न सक्नुहुन्छ।" - - + "%1$s इन्स्टल गरिँदै छ, %2$s पूरा भयो" "%1$s डाउनलोड गर्दै, %2$s सम्पन्‍न" "%1$s स्थापना गर्न प्रतीक्षा गर्दै" "विजेटहरूको सूची" @@ -165,20 +156,13 @@ "अर्को" "बुझेँ" "कार्यालयको प्रोफाइल अस्थायी रूपमा रोक्का गरिएको छ" - - - - - - - - - - - - - - + "कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको डिभाइसको ब्याट्री प्रयोग गर्न वा तपाईंको स्थान हेर्न सक्दैनन्" + "कामसम्बन्धी प्रोफाइल अस्थायी रूपमा रोक्का गरिएको छ। कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको डिभाइसको ब्याट्री प्रयोग गर्न वा तपाईंको स्थान हेर्न सक्दैनन्" + "कामसम्बन्धी एपमा ब्याज अङ्कित हुन्छ र तपाईंका IT एड्मिन ती एप हेर्न सक्नुहुन्छ" + "बुझेँ" + "कामसम्बन्धी एपहरू अस्थायी रूपमा रोक्का गर्नुहोस्" + "अन गर्नुहोस्" + "फिल्टर" "कामसम्बन्धी एप र सूचनाहरू अस्थायी रूपमा रोक्का गर्नुहोस्" "कार्य पूरा गर्न सकिएन: %1$s" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 165a0133ec..faa5d921ec 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -51,7 +51,7 @@ "Pessoal" "Trabalho" "Conversas" - "Apps de pesquisa" + "Pesquisar apps" "Carregando apps…" "Nenhum app encontrado que corresponda a \"%1$s\"" "Pesquisar mais apps" diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 600a550700..dd14eaa0ff 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -158,7 +158,7 @@ 14dp - 14sp + 20sp 2dp diff --git a/res/values/strings.xml b/res/values/strings.xml index 0f937fac16..d6936ab69d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -55,10 +55,11 @@ %1$d \u00d7 %2$d %1$d wide by %2$d high - - Touch & hold to place manually - - Add automatically + + Touch & hold the widget to move it around the Home screen + + Add to Home screen diff --git a/res/values/styles.xml b/res/values/styles.xml index 5ae4e3ffe0..97a576011a 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -258,14 +258,11 @@ 7.5dp 16dp 16dp - ?attr/workspaceTextColor + ?android:attr/textColorPrimary @dimen/drop_target_text_size true end - ?attr/workspaceShadowColor - 0.0 - 1.0 - 4.0 + @drawable/drop_target_frame