Merge "Add show/hide launcher icon menu for debug"
diff --git a/res/menu/activity.xml b/res/menu/activity.xml
index 5a729f2..9e2fdd6 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 5b97099..a20e3e7 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.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 @@
}
@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 a6b5349..a428df8 100644
--- a/src/com/android/documentsui/ActionHandler.java
+++ b/src/com/android/documentsui/ActionHandler.java
@@ -174,6 +174,11 @@
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 e8fe2bf..dc39db0 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -477,6 +477,10 @@
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 2c12e5f..505cb37 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -96,6 +96,7 @@
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 @@
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 a983adc..c476316 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 @@
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 ff13aff..3b4d2e9 100644
--- a/src/com/android/documentsui/base/Shared.java
+++ b/src/com/android/documentsui/base/Shared.java
@@ -19,10 +19,12 @@
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.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 javax.annotation.Nullable;
-import androidx.annotation.PluralsRes;
-import androidx.appcompat.app.AlertDialog;
-
/** @hide */
public final class Shared {
@@ -134,6 +136,11 @@
*/
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 @@
/**
* 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 73c58e5..64106a8 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.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 @@
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 4ad8406..e55a9ae 100644
--- a/tests/common/com/android/documentsui/testing/TestMenu.java
+++ b/tests/common/com/android/documentsui/testing/TestMenu.java
@@ -81,6 +81,7 @@
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 0f2ed3b..202880b 100644
--- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
@@ -103,6 +103,7 @@
private TestMenuItem optionSettings;
private TestMenuItem optionInspector;
private TestMenuItem optionSort;
+ private TestMenuItem mOptionLauncher;
/* Sub Option Menu items */
private TestMenuItem subOptionGrid;
@@ -173,6 +174,7 @@
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 @@
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 5e14cb9..3e13440 100644
--- a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
@@ -101,6 +101,7 @@
private TestMenuItem optionAdvanced;
private TestMenuItem optionSettings;
private TestMenuItem optionSort;
+ private TestMenuItem mOptionLauncher;
private TestMenuItem subOptionGrid;
private TestMenuItem subOptionList;
@@ -160,6 +161,7 @@
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 @@
optionAdvanced.assertInvisible();
optionAdvanced.assertTitle(R.string.menu_advanced_show);
optionCreateDir.assertDisabled();
+ optionDebug.assertInvisible();
optionSort.assertEnabled();
optionSort.assertVisible();
+ mOptionLauncher.assertInvisible();
assertTrue(testSearchManager.showMenuCalled());
}