OSDN Git Service

Hide app info link for "All work apps" data usage detail
authorFan Zhang <zhfan@google.com>
Wed, 10 May 2017 17:06:02 +0000 (10:06 -0700)
committerFan Zhang <zhfan@google.com>
Fri, 12 May 2017 17:21:33 +0000 (10:21 -0700)
We should hide the link because "All work apps" is a meta app, it
doesn't point to any specific app, so app info link does not make sense.

Change-Id: I768786f2df5d05bbde0723e5585abcdbe875c652
Fix: 36542896
Test: make RunSettingsRoboTests

src/com/android/settings/datausage/AppDataUsage.java
tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java [new file with mode: 0644]

index 96740e2..5adc26a 100644 (file)
@@ -14,8 +14,6 @@
 
 package com.android.settings.datausage;
 
-import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
-
 import android.app.Activity;
 import android.app.LoaderManager;
 import android.content.Context;
@@ -23,7 +21,6 @@ import android.content.Intent;
 import android.content.Loader;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.UserInfo;
 import android.graphics.drawable.Drawable;
 import android.net.INetworkStatsSession;
 import android.net.NetworkPolicy;
@@ -34,7 +31,6 @@ import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.UserHandle;
-import android.os.UserManager;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
@@ -50,7 +46,6 @@ import com.android.settings.applications.AppHeaderController;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.AppItem;
-import com.android.settingslib.Utils;
 import com.android.settingslib.net.ChartData;
 import com.android.settingslib.net.ChartDataLoader;
 import com.android.settingslib.net.UidDetail;
@@ -61,6 +56,8 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
+
 public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
         DataSaverBackend.Listener {
 
@@ -344,17 +341,21 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
         } catch (PackageManager.NameNotFoundException e) {
         }
 
+        final boolean showInfoButton = mAppItem.key > 0;
+
         final Activity activity = getActivity();
         final Preference pref = FeatureFactory.getFactory(activity)
-            .getApplicationFeatureProvider(activity)
-            .newAppHeaderController(this, null /* appHeader */)
-            .setIcon(mIcon)
-            .setLabel(mLabel)
-            .setPackageName(pkg)
-            .setUid(uid)
-            .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
-                AppHeaderController.ActionType.ACTION_NONE)
-            .done(activity, getPrefContext());
+                .getApplicationFeatureProvider(activity)
+                .newAppHeaderController(this, null /* appHeader */)
+                .setButtonActions(showInfoButton
+                                ? AppHeaderController.ActionType.ACTION_APP_INFO
+                                : AppHeaderController.ActionType.ACTION_NONE,
+                        AppHeaderController.ActionType.ACTION_NONE)
+                .setIcon(mIcon)
+                .setLabel(mLabel)
+                .setPackageName(pkg)
+                .setUid(uid)
+                .done(activity, getPrefContext());
         getPreferenceScreen().addPreference(pref);
     }
 
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
new file mode 100644 (file)
index 0000000..2e49ed2
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.datausage;
+
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v7.preference.PreferenceManager;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.View;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.AppHeaderController;
+import com.android.settings.applications.AppHeaderController.ActionType;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.AppItem;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AppDataUsageTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private AppHeaderController mHeaderController;
+    private FakeFeatureFactory mFeatureFactory;
+    private AppDataUsage mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+    }
+
+    @Test
+    public void bindAppHeader_allWorkApps_shouldNotShowAppInfoLink() {
+        mFragment = spy(new AppDataUsage());
+
+        doReturn(mock(PreferenceManager.class, RETURNS_DEEP_STUBS))
+                .when(mFragment)
+                .getPreferenceManager();
+        doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
+        ReflectionHelpers.setField(mFragment, "mAppItem", mock(AppItem.class));
+        when(mFeatureFactory.applicationFeatureProvider.newAppHeaderController(mFragment, null))
+                .thenReturn(mHeaderController);
+
+        mFragment.onViewCreated(new View(RuntimeEnvironment.application), new Bundle());
+
+        verify(mHeaderController).setButtonActions(ActionType.ACTION_NONE, ActionType.ACTION_NONE);
+    }
+}