From f311b74b8fd1e391f62bac39842328dc8e6a6014 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 16 Sep 2016 08:46:09 -0700 Subject: [PATCH] Show hamburger menu if the activity is top level setting. Bug: 27584874 Test: manual inspection (automated test coming later) This makes it possible to show menu icon when top level setting activity is open from outside of Settings (eg, quick setting tiles) Change-Id: Ic8e755f43b3f6a92118657741b37e09dbc2b53d0 --- .../drawer/SettingsDrawerActivity.java | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java index 458672a41b77e..e6e0243c53e17 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java @@ -32,6 +32,7 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import android.support.v4.widget.DrawerLayout; +import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; import android.util.Pair; @@ -58,6 +59,7 @@ public class SettingsDrawerActivity extends Activity { protected static final boolean DEBUG_TIMING = false; private static final String TAG = "SettingsDrawerActivity"; + private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); public static final String EXTRA_SHOW_MENU = "show_drawer_menu"; @@ -111,7 +113,7 @@ public class SettingsDrawerActivity extends Activity { public void onItemClick(android.widget.AdapterView parent, View view, int position, long id) { onTileClicked(mDrawerAdapter.getTile(position)); - }; + } }); mUserManager = UserManager.get(this); @@ -143,8 +145,16 @@ public class SettingsDrawerActivity extends Activity { new CategoriesUpdater().execute(); } - if (getIntent() != null && getIntent().getBooleanExtra(EXTRA_SHOW_MENU, false)) { - showMenuIcon(); + final Intent intent = getIntent(); + if (intent != null) { + if (intent.hasExtra(EXTRA_SHOW_MENU)) { + if (intent.getBooleanExtra(EXTRA_SHOW_MENU, false)) { + // Intent explicitly set to show menu. + showMenuIcon(); + } + } else if (isTopLevelTile(intent)) { + showMenuIcon(); + } } } @@ -157,6 +167,30 @@ public class SettingsDrawerActivity extends Activity { super.onPause(); } + private boolean isTopLevelTile(Intent intent) { + final ComponentName componentName = intent.getComponent(); + if (componentName == null) { + return false; + } + // Look for a tile that has the same component as incoming intent + final List categories = getDashboardCategories(); + for (DashboardCategory category : categories) { + for (Tile tile : category.tiles) { + if (TextUtils.equals(tile.intent.getComponent().getClassName(), + componentName.getClassName())) { + if (DEBUG) { + Log.d(TAG, "intent is for top level tile: " + tile.title); + } + return true; + } + } + } + if (DEBUG) { + Log.d(TAG, "Intent is not for top level settings " + intent); + } + return false; + } + public void addCategoryListener(CategoryListener listener) { mCategoryListeners.add(listener); } @@ -287,9 +321,9 @@ public class SettingsDrawerActivity extends Activity { private void updateUserHandlesIfNeeded(Tile tile) { List userHandles = tile.userHandle; - for (int i = userHandles.size()-1; i >= 0; i--) { + for (int i = userHandles.size() - 1; i >= 0; i--) { if (mUserManager.getUserInfo(userHandles.get(i).getIdentifier()) == null) { - if (DEBUG_TIMING) { + if (DEBUG) { Log.d(TAG, "Delete the user: " + userHandles.get(i).getIdentifier()); } userHandles.remove(i);