diff options
author | 2019-10-30 18:00:20 +0800 | |
---|---|---|
committer | 2019-10-31 10:01:32 +0000 | |
commit | 94fc11af047c35aa07378080c0f8004fb10744c9 (patch) | |
tree | 2225e8ed530b14e4ebf5950dff91e903d3bdbd87 | |
parent | 4795963ec85e26cd596eb67e33fde2a1bc4a46b2 (diff) |
Add show/hide launcher icon menu for debug
This toggle muenu only show when debug mode enabled so it should
not impact to normal users.
Test: manual
Test: atest DocumentsUIGoogleTests
Change-Id: If1e73f4fe68f8b830b8e90f87d54513c3795d4c1
11 files changed, 71 insertions, 6 deletions
diff --git a/res/menu/activity.xml b/res/menu/activity.xml index 5a729f27c..9e2fdd66f 100644 --- a/res/menu/activity.xml +++ b/res/menu/activity.xml @@ -80,5 +80,9 @@ android:title="@string/menu_inspect" android:visible="false" app:showAsAction="never"/> + <item + android:id="@+id/option_menu_launcher" + android:visible="false" + app:showAsAction="never"/> </group> </menu> diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java index 5b970993c..a20e3e7e4 100644 --- a/src/com/android/documentsui/AbstractActionHandler.java +++ b/src/com/android/documentsui/AbstractActionHandler.java @@ -21,9 +21,11 @@ import static com.android.documentsui.base.DocumentInfo.getCursorString; import static com.android.documentsui.base.SharedMinimal.DEBUG; import android.app.PendingIntent; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentSender; +import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; import android.net.Uri; @@ -453,6 +455,20 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA } @Override + public void switchLauncherIcon() { + PackageManager pm = mActivity.getPackageManager(); + if (pm != null) { + final boolean enalbled = Shared.isLauncherEnabled(mActivity); + ComponentName component = new ComponentName( + mActivity.getPackageName(), Shared.LAUNCHER_TARGET_CLASS); + pm.setComponentEnabledSetting(component, enalbled + ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED + : PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + } + } + + @Override public void cutToClipboard() { throw new UnsupportedOperationException("Cut not supported!"); } diff --git a/src/com/android/documentsui/ActionHandler.java b/src/com/android/documentsui/ActionHandler.java index a6b5349fa..a428df898 100644 --- a/src/com/android/documentsui/ActionHandler.java +++ b/src/com/android/documentsui/ActionHandler.java @@ -174,6 +174,11 @@ public interface ActionHandler { void showSortDialog(); /** + * Switch launch icon show/hide status. + */ + void switchLauncherIcon(); + + /** * Allow action handler to be initialized in a new scope. * @return this */ diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java index e8fe2bf6d..dc39db057 100644 --- a/src/com/android/documentsui/BaseActivity.java +++ b/src/com/android/documentsui/BaseActivity.java @@ -477,6 +477,10 @@ public abstract class BaseActivity getInjector().actions.showSortDialog(); return true; + case R.id.option_menu_launcher: + getInjector().actions.switchLauncherIcon(); + return true; + case R.id.sub_menu_grid: setViewMode(State.MODE_GRID); return true; diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java index 2c12e5fb4..505cb3727 100644 --- a/src/com/android/documentsui/MenuManager.java +++ b/src/com/android/documentsui/MenuManager.java @@ -96,6 +96,7 @@ public abstract class MenuManager { updateDebug(mOptionMenu.findItem(R.id.option_menu_debug)); updateInspect(mOptionMenu.findItem(R.id.option_menu_inspect)); updateSort(mOptionMenu.findItem(R.id.option_menu_sort)); + updateLauncher(mOptionMenu.findItem(R.id.option_menu_launcher)); Menus.disableHiddenItems(mOptionMenu); mSearchManager.updateMenu(); @@ -364,6 +365,10 @@ public abstract class MenuManager { open.setVisible(false); } + protected void updateLauncher(MenuItem launcher) { + launcher.setVisible(false); + } + protected abstract void updateSelectAll(MenuItem selectAll); protected abstract void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails); protected abstract void updateDeselectAll( diff --git a/src/com/android/documentsui/PreBootReceiver.java b/src/com/android/documentsui/PreBootReceiver.java index a983adcca..c47631654 100644 --- a/src/com/android/documentsui/PreBootReceiver.java +++ b/src/com/android/documentsui/PreBootReceiver.java @@ -16,6 +16,7 @@ package com.android.documentsui; +import static com.android.documentsui.base.Shared.LAUNCHER_TARGET_CLASS; import static com.android.documentsui.base.SharedMinimal.DEBUG; import android.content.BroadcastReceiver; @@ -40,7 +41,6 @@ public class PreBootReceiver extends BroadcastReceiver { private static final String TAG = "PreBootReceiver"; private static final String CONFIG_IS_LAUNCHER_ENABLED = "is_launcher_enabled"; private static final String CONFIG_HANDLE_VIEW_DOWNLOADS = "handle_view_downloads_intent"; - private static final String LAUNCHER_TARGET_CLASS = "com.android.documentsui.LauncherActivity"; private static final String DOWNLOADS_TARGET_CLASS = "com.android.documentsui.ViewDownloadsActivity"; diff --git a/src/com/android/documentsui/base/Shared.java b/src/com/android/documentsui/base/Shared.java index ff13aff17..3b4d2e915 100644 --- a/src/com/android/documentsui/base/Shared.java +++ b/src/com/android/documentsui/base/Shared.java @@ -19,10 +19,12 @@ package com.android.documentsui.base; import static com.android.documentsui.base.SharedMinimal.TAG; import android.app.Activity; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.net.Uri; @@ -35,6 +37,9 @@ import android.util.Log; import android.view.View; import android.view.WindowManager; +import androidx.annotation.PluralsRes; +import androidx.appcompat.app.AlertDialog; + import com.android.documentsui.R; import com.android.documentsui.ui.MessageBuilder; @@ -47,9 +52,6 @@ import java.util.List; import javax.annotation.Nullable; -import androidx.annotation.PluralsRes; -import androidx.appcompat.app.AlertDialog; - /** @hide */ public final class Shared { @@ -134,6 +136,11 @@ public final class Shared { */ public static final int CHECK_ANIMATION_DURATION = 100; + /** + * Class name of launcher icon avtivity. + */ + public static final String LAUNCHER_TARGET_CLASS = "com.android.documentsui.LauncherActivity"; + private static final Collator sCollator; static { @@ -264,10 +271,18 @@ public final class Shared { /** * Check config whether DocumentsUI is launcher enabled or not. - * @return true if "is_launcher_enabled" is true. + * @return true if launcher icon is shown. */ public static boolean isLauncherEnabled(Context context) { - return context.getResources().getBoolean(R.bool.is_launcher_enabled); + PackageManager pm = context.getPackageManager(); + if (pm != null) { + final ComponentName component = new ComponentName( + context.getPackageName(), LAUNCHER_TARGET_CLASS); + final int value = pm.getComponentEnabledSetting(component); + return value == PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + } + + return false; } /** diff --git a/src/com/android/documentsui/files/MenuManager.java b/src/com/android/documentsui/files/MenuManager.java index 73c58e5c3..64106a8aa 100644 --- a/src/com/android/documentsui/files/MenuManager.java +++ b/src/com/android/documentsui/files/MenuManager.java @@ -35,6 +35,7 @@ import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Features; import com.android.documentsui.base.Lookup; import com.android.documentsui.base.RootInfo; +import com.android.documentsui.base.Shared; import com.android.documentsui.base.State; import com.android.documentsui.queries.SearchViewManager; @@ -299,4 +300,11 @@ public final class MenuManager extends com.android.documentsui.MenuManager { view.setVisible(false); } } + + @Override + protected void updateLauncher(MenuItem launcher) { + launcher.setVisible(mState.debugMode); + launcher.setTitle(Shared.isLauncherEnabled(mContext) + ? "Hide launcher icon" : "Show launcher icon"); + } } diff --git a/tests/common/com/android/documentsui/testing/TestMenu.java b/tests/common/com/android/documentsui/testing/TestMenu.java index 4ad840606..e55a9aeb5 100644 --- a/tests/common/com/android/documentsui/testing/TestMenu.java +++ b/tests/common/com/android/documentsui/testing/TestMenu.java @@ -81,6 +81,7 @@ public abstract class TestMenu implements Menu { R.id.option_menu_settings, R.id.option_menu_inspect, R.id.option_menu_sort, + R.id.option_menu_launcher, R.id.sub_menu_grid, R.id.sub_menu_list); } diff --git a/tests/unit/com/android/documentsui/files/MenuManagerTest.java b/tests/unit/com/android/documentsui/files/MenuManagerTest.java index 0f2ed3bc1..202880ba5 100644 --- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java +++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java @@ -103,6 +103,7 @@ public final class MenuManagerTest { private TestMenuItem optionSettings; private TestMenuItem optionInspector; private TestMenuItem optionSort; + private TestMenuItem mOptionLauncher; /* Sub Option Menu items */ private TestMenuItem subOptionGrid; @@ -173,6 +174,7 @@ public final class MenuManagerTest { optionSettings = testMenu.findItem(R.id.option_menu_settings); optionInspector = testMenu.findItem(R.id.option_menu_inspect); optionSort = testMenu.findItem(R.id.option_menu_sort); + mOptionLauncher = testMenu.findItem(R.id.option_menu_launcher); // Menu actions on root title row. subOptionGrid = testMenu.findItem(R.id.sub_menu_grid); @@ -452,6 +454,7 @@ public final class MenuManagerTest { optionDebug.assertInvisible(); optionSort.assertEnabled(); optionSort.assertVisible(); + mOptionLauncher.assertInvisible(); assertTrue(testSearchManager.updateMenuCalled()); } diff --git a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java index 5e14cb922..3e1344071 100644 --- a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java +++ b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java @@ -101,6 +101,7 @@ public final class MenuManagerTest { private TestMenuItem optionAdvanced; private TestMenuItem optionSettings; private TestMenuItem optionSort; + private TestMenuItem mOptionLauncher; private TestMenuItem subOptionGrid; private TestMenuItem subOptionList; @@ -160,6 +161,7 @@ public final class MenuManagerTest { optionAdvanced = testMenu.findItem(R.id.option_menu_advanced); optionSettings = testMenu.findItem(R.id.option_menu_settings); optionSort = testMenu.findItem(R.id.option_menu_sort); + mOptionLauncher = testMenu.findItem(R.id.option_menu_launcher); // Menu actions on root title row. subOptionGrid = testMenu.findItem(R.id.sub_menu_grid); @@ -265,8 +267,10 @@ public final class MenuManagerTest { optionAdvanced.assertInvisible(); optionAdvanced.assertTitle(R.string.menu_advanced_show); optionCreateDir.assertDisabled(); + optionDebug.assertInvisible(); optionSort.assertEnabled(); optionSort.assertVisible(); + mOptionLauncher.assertInvisible(); assertTrue(testSearchManager.showMenuCalled()); } |