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;
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;
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;
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;
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 {
} 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);
}
--- /dev/null
+/*
+ * 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);
+ }
+}