diff options
10 files changed, 155 insertions, 16 deletions
diff --git a/res/layout/item_photo_grid.xml b/res/layout/item_photo_grid.xml index 562ebd32a..5cf685004 100644 --- a/res/layout/item_photo_grid.xml +++ b/res/layout/item_photo_grid.xml @@ -112,6 +112,7 @@ android:pointerIcon="hand"> <ImageView + android:id="@+id/icon_id" android:layout_height="@dimen/briefcase_icon_size_photo" android:layout_width="@dimen/briefcase_icon_size_photo" android:src="@drawable/ic_briefcase_white" diff --git a/src/com/android/documentsui/ProfileTabs.java b/src/com/android/documentsui/ProfileTabs.java index 38307f202..53f184717 100644 --- a/src/com/android/documentsui/ProfileTabs.java +++ b/src/com/android/documentsui/ProfileTabs.java @@ -163,10 +163,15 @@ public class ProfileTabs implements ProfileTabsAddons { } private String getEnterpriseString(String updatableStringId, int defaultStringId) { - DevicePolicyManager dpm = mTabsContainer.getContext().getSystemService( - DevicePolicyManager.class); - return dpm.getString( - updatableStringId, () -> mTabsContainer.getContext().getString(defaultStringId)); + if (VersionUtils.isAtLeastT()) { + DevicePolicyManager dpm = mTabsContainer.getContext().getSystemService( + DevicePolicyManager.class); + return dpm.getString( + updatableStringId, + () -> mTabsContainer.getContext().getString(defaultStringId)); + } else { + return mTabsContainer.getContext().getString(defaultStringId); + } } /** diff --git a/src/com/android/documentsui/dirlist/DocumentHolder.java b/src/com/android/documentsui/dirlist/DocumentHolder.java index b5df0c463..6e6e8acf0 100644 --- a/src/com/android/documentsui/dirlist/DocumentHolder.java +++ b/src/com/android/documentsui/dirlist/DocumentHolder.java @@ -37,6 +37,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.documentsui.R; import com.android.documentsui.base.Shared; import com.android.documentsui.base.State; +import com.android.documentsui.util.VersionUtils; import java.util.function.Function; @@ -177,13 +178,20 @@ public abstract class DocumentHolder } protected String getPreviewIconContentDescription(boolean isWorkProfile, String fileName) { - DevicePolicyManager dpm = itemView.getContext().getSystemService(DevicePolicyManager.class); - String updatableStringId = isWorkProfile ? PREVIEW_WORK_FILE_ACCESSIBILITY : UNDEFINED; - int defaultStringId = isWorkProfile ? R.string.preview_work_file : R.string.preview_file; - return dpm.getString( - updatableStringId, - () -> itemView.getResources().getString(defaultStringId, fileName), - /* formatArgs= */ fileName); + if (VersionUtils.isAtLeastT()) { + DevicePolicyManager dpm = itemView.getContext().getSystemService( + DevicePolicyManager.class); + String updatableStringId = isWorkProfile ? PREVIEW_WORK_FILE_ACCESSIBILITY : UNDEFINED; + int defaultStringId = + isWorkProfile ? R.string.preview_work_file : R.string.preview_file; + return dpm.getString( + updatableStringId, + () -> itemView.getResources().getString(defaultStringId, fileName), + /* formatArgs= */ fileName); + } else { + return itemView.getResources().getString( + isWorkProfile ? R.string.preview_work_file : R.string.preview_file, fileName); + } } protected static class PreviewAccessibilityDelegate extends View.AccessibilityDelegate { diff --git a/src/com/android/documentsui/dirlist/GridDirectoryHolder.java b/src/com/android/documentsui/dirlist/GridDirectoryHolder.java index 0357f1277..8998b20c3 100644 --- a/src/com/android/documentsui/dirlist/GridDirectoryHolder.java +++ b/src/com/android/documentsui/dirlist/GridDirectoryHolder.java @@ -16,10 +16,16 @@ package com.android.documentsui.dirlist; +import static android.app.admin.DevicePolicyResources.Drawables.Style.SOLID_COLORED; +import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON; + import static com.android.documentsui.base.DocumentInfo.getCursorString; +import android.app.admin.DevicePolicyManager; import android.content.Context; import android.database.Cursor; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; import android.view.MotionEvent; @@ -28,10 +34,13 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.RequiresApi; + import com.android.documentsui.IconUtils; import com.android.documentsui.R; import com.android.documentsui.base.State; import com.android.documentsui.ui.Views; +import com.android.documentsui.util.VersionUtils; final class GridDirectoryHolder extends DocumentHolder { @@ -52,6 +61,18 @@ final class GridDirectoryHolder extends DocumentHolder { mIconBriefcase = (ImageView) itemView.findViewById(R.id.icon_briefcase); mIconMime.setImageDrawable( IconUtils.loadMimeIcon(context, DocumentsContract.Document.MIME_TYPE_DIR)); + + if (VersionUtils.isAtLeastT()) { + setUpdatableWorkProfileIcon(context); + } + } + + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private void setUpdatableWorkProfileIcon(Context context) { + DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); + Drawable drawable = dpm.getDrawable(WORK_PROFILE_ICON, SOLID_COLORED, () -> + context.getDrawable(R.drawable.ic_briefcase)); + mIconBriefcase.setImageDrawable(drawable); } @Override diff --git a/src/com/android/documentsui/dirlist/GridDocumentHolder.java b/src/com/android/documentsui/dirlist/GridDocumentHolder.java index 91feeca19..16983ed09 100644 --- a/src/com/android/documentsui/dirlist/GridDocumentHolder.java +++ b/src/com/android/documentsui/dirlist/GridDocumentHolder.java @@ -16,12 +16,18 @@ package com.android.documentsui.dirlist; +import static android.app.admin.DevicePolicyResources.Drawables.Style.SOLID_COLORED; +import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON; + import static com.android.documentsui.base.DocumentInfo.getCursorInt; import static com.android.documentsui.base.DocumentInfo.getCursorLong; import static com.android.documentsui.base.DocumentInfo.getCursorString; +import android.app.admin.DevicePolicyManager; import android.content.Context; import android.database.Cursor; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.provider.DocumentsContract.Document; import android.text.format.Formatter; import android.view.MotionEvent; @@ -30,12 +36,15 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.RequiresApi; + import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Shared; import com.android.documentsui.base.UserId; import com.android.documentsui.roots.RootCursorWrapper; import com.android.documentsui.ui.Views; +import com.android.documentsui.util.VersionUtils; import java.util.function.Function; @@ -71,6 +80,18 @@ final class GridDocumentHolder extends DocumentHolder { mPreviewIcon = itemView.findViewById(R.id.preview_icon); mIconHelper = iconHelper; + + if (VersionUtils.isAtLeastT()) { + setUpdatableWorkProfileIcon(context); + } + } + + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private void setUpdatableWorkProfileIcon(Context context) { + DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); + Drawable drawable = dpm.getDrawable(WORK_PROFILE_ICON, SOLID_COLORED, () -> + context.getDrawable(R.drawable.ic_briefcase)); + mIconBriefcase.setImageDrawable(drawable); } @Override diff --git a/src/com/android/documentsui/dirlist/GridPhotoHolder.java b/src/com/android/documentsui/dirlist/GridPhotoHolder.java index fe2389844..a9b790bcc 100644 --- a/src/com/android/documentsui/dirlist/GridPhotoHolder.java +++ b/src/com/android/documentsui/dirlist/GridPhotoHolder.java @@ -16,12 +16,18 @@ package com.android.documentsui.dirlist; +import static android.app.admin.DevicePolicyResources.Drawables.Style.SOLID_NOT_COLORED; +import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON; + import static com.android.documentsui.base.DocumentInfo.getCursorInt; import static com.android.documentsui.base.DocumentInfo.getCursorLong; import static com.android.documentsui.base.DocumentInfo.getCursorString; +import android.app.admin.DevicePolicyManager; import android.content.Context; import android.database.Cursor; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.provider.DocumentsContract.Document; import android.text.format.Formatter; import android.view.MotionEvent; @@ -29,12 +35,15 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import androidx.annotation.RequiresApi; + import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Shared; import com.android.documentsui.base.UserId; import com.android.documentsui.roots.RootCursorWrapper; import com.android.documentsui.ui.Views; +import com.android.documentsui.util.VersionUtils; import java.util.function.Function; @@ -60,6 +69,20 @@ final class GridPhotoHolder extends DocumentHolder { mPreviewIcon = itemView.findViewById(R.id.preview_icon); mIconHelper = iconHelper; + + if (VersionUtils.isAtLeastT()) { + setUpdatableWorkProfileIcon(context); + } + } + + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private void setUpdatableWorkProfileIcon(Context context) { + DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); + Drawable drawable = dpm.getDrawable(WORK_PROFILE_ICON, SOLID_NOT_COLORED, () -> + context.getDrawable(R.drawable.ic_briefcase)); + ImageView icon = (ImageView) mIconBriefcase.findViewById(R.id.icon_id); + + icon.setImageDrawable(drawable); } @Override diff --git a/src/com/android/documentsui/dirlist/ListDocumentHolder.java b/src/com/android/documentsui/dirlist/ListDocumentHolder.java index bc2209260..7fe48eecb 100644 --- a/src/com/android/documentsui/dirlist/ListDocumentHolder.java +++ b/src/com/android/documentsui/dirlist/ListDocumentHolder.java @@ -16,12 +16,18 @@ package com.android.documentsui.dirlist; +import static android.app.admin.DevicePolicyResources.Drawables.Style.SOLID_COLORED; +import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON; + import static com.android.documentsui.base.DocumentInfo.getCursorInt; import static com.android.documentsui.base.DocumentInfo.getCursorString; +import android.app.admin.DevicePolicyManager; import android.content.Context; import android.database.Cursor; import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.text.TextUtils; import android.text.format.Formatter; import android.util.Log; @@ -33,6 +39,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import com.android.documentsui.R; import com.android.documentsui.base.DocumentInfo; @@ -42,6 +49,7 @@ import com.android.documentsui.base.State; import com.android.documentsui.base.UserId; import com.android.documentsui.roots.RootCursorWrapper; import com.android.documentsui.ui.Views; +import com.android.documentsui.util.VersionUtils; import java.util.ArrayList; import java.util.function.Function; @@ -90,6 +98,18 @@ final class ListDocumentHolder extends DocumentHolder { mIconHelper = iconHelper; mFileTypeLookup = fileTypeLookup; mDoc = new DocumentInfo(); + + if (VersionUtils.isAtLeastT()) { + setUpdatableWorkProfileIcon(context); + } + } + + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private void setUpdatableWorkProfileIcon(Context context) { + DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class); + Drawable drawable = dpm.getDrawable(WORK_PROFILE_ICON, SOLID_COLORED, () -> + context.getDrawable(R.drawable.ic_briefcase)); + mIconBriefcase.setImageDrawable(drawable); } @Override diff --git a/src/com/android/documentsui/dirlist/Message.java b/src/com/android/documentsui/dirlist/Message.java index 2d76a4254..9ef50e722 100644 --- a/src/com/android/documentsui/dirlist/Message.java +++ b/src/com/android/documentsui/dirlist/Message.java @@ -16,6 +16,8 @@ package com.android.documentsui.dirlist; +import static android.app.admin.DevicePolicyResources.Drawables.Style.OUTLINE; +import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_OFF_ICON; import static android.app.admin.DevicePolicyResources.Strings.DocumentsUi.CANT_SAVE_TO_PERSONAL_MESSAGE; import static android.app.admin.DevicePolicyResources.Strings.DocumentsUi.CANT_SAVE_TO_PERSONAL_TITLE; import static android.app.admin.DevicePolicyResources.Strings.DocumentsUi.CANT_SAVE_TO_WORK_MESSAGE; @@ -34,8 +36,10 @@ import android.app.AuthenticationRequiredException; import android.app.admin.DevicePolicyManager; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; +import android.os.Build; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import com.android.documentsui.CrossProfileException; import com.android.documentsui.CrossProfileNoPermissionException; @@ -48,6 +52,7 @@ import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.State; import com.android.documentsui.base.UserId; import com.android.documentsui.dirlist.DocumentsAdapter.Environment; +import com.android.documentsui.util.VersionUtils; /** * Data object used by {@link InflateMessageDocumentHolder} and {@link HeaderMessageDocumentHolder}. @@ -240,7 +245,7 @@ abstract class Message { WORK_PROFILE_OFF_ERROR_TITLE, R.string.quiet_mode_error_title), /* messageString= */ "", buttonText, - mEnv.getContext().getDrawable(R.drawable.work_off)); + getWorkProfileOffIcon()); } private void updateToCrossProfileNoPermissionErrorMessage() { @@ -328,9 +333,31 @@ abstract class Message { } private String getEnterpriseString(String updatableStringId, int defaultStringId) { - DevicePolicyManager dpm = mEnv.getContext().getSystemService(DevicePolicyManager.class); - return dpm.getString( - updatableStringId, () -> mEnv.getContext().getString(defaultStringId)); + if (VersionUtils.isAtLeastT()) { + DevicePolicyManager dpm = mEnv.getContext().getSystemService( + DevicePolicyManager.class); + return dpm.getString( + updatableStringId, () -> mEnv.getContext().getString(defaultStringId)); + } else { + return mEnv.getContext().getString(defaultStringId); + } + } + + private Drawable getWorkProfileOffIcon() { + if (VersionUtils.isAtLeastT()) { + return getUpdatableWorkProfileIcon(); + } else { + return mEnv.getContext().getDrawable(R.drawable.work_off); + } + } + + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private Drawable getUpdatableWorkProfileIcon() { + DevicePolicyManager dpm = mEnv.getContext().getSystemService( + DevicePolicyManager.class); + return dpm.getDrawable( + WORK_PROFILE_OFF_ICON, OUTLINE, + () -> mEnv.getContext().getDrawable(R.drawable.work_off)); } } } diff --git a/src/com/android/documentsui/sidebar/UserItemsCombiner.java b/src/com/android/documentsui/sidebar/UserItemsCombiner.java index 6ad681df5..a8e59d4e0 100644 --- a/src/com/android/documentsui/sidebar/UserItemsCombiner.java +++ b/src/com/android/documentsui/sidebar/UserItemsCombiner.java @@ -30,6 +30,7 @@ import androidx.annotation.VisibleForTesting; import com.android.documentsui.R; import com.android.documentsui.base.State; import com.android.documentsui.base.UserId; +import com.android.documentsui.util.VersionUtils; import java.util.ArrayList; import java.util.List; @@ -107,6 +108,10 @@ class UserItemsCombiner { } private String getEnterpriseString(String updatableStringId, int defaultStringId) { - return mDpm.getString(updatableStringId, () -> mResources.getString(defaultStringId)); + if (VersionUtils.isAtLeastT()) { + return mDpm.getString(updatableStringId, () -> mResources.getString(defaultStringId)); + } else { + return mResources.getString(defaultStringId); + } } } diff --git a/src/com/android/documentsui/util/VersionUtils.java b/src/com/android/documentsui/util/VersionUtils.java index aba6374ec..2e3aa60dd 100644 --- a/src/com/android/documentsui/util/VersionUtils.java +++ b/src/com/android/documentsui/util/VersionUtils.java @@ -42,4 +42,12 @@ public class VersionUtils { return Build.VERSION.CODENAME.equals("S") || Build.VERSION.SDK_INT >= 31; } + + /** + * Returns whether the device is running on Android T or newer. + */ + public static boolean isAtLeastT() { + return Build.VERSION.CODENAME.startsWith("T") + || Build.VERSION.SDK_INT >= 33; + } } |