Fix issue with app info summary for diasbled app.

- also check the component enable state to determine whether an app is
really enabled or not.

Change-Id: I8075ec9253b9136c58fc206e10b10f77b1efe6c2
Fix: 35673125
Test: make RunSettingsRoboTests
This commit is contained in:
Doris Ling
2017-02-24 10:36:23 -08:00
parent 8c3e46e628
commit b8642c7464
2 changed files with 41 additions and 11 deletions

View File

@@ -31,6 +31,7 @@ import android.os.LocaleList;
import android.os.UserHandle;
import android.os.UserManager;
import android.preference.PreferenceFrameLayout;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -52,6 +53,7 @@ import android.widget.ListView;
import android.widget.SectionIndexer;
import android.widget.Spinner;
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.AppHeader;
import com.android.settings.R;
@@ -1284,15 +1286,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment
holder.appIcon.setImageDrawable(entry.icon);
}
updateSummary(holder);
if ((entry.info.flags & ApplicationInfo.FLAG_INSTALLED) == 0) {
holder.disabled.setVisibility(View.VISIBLE);
holder.disabled.setText(R.string.not_installed);
} else if (!entry.info.enabled) {
holder.disabled.setVisibility(View.VISIBLE);
holder.disabled.setText(R.string.disabled);
} else {
holder.disabled.setVisibility(View.GONE);
}
updateDisableView(holder.disabled, entry.info);
}
convertView.setEnabled(isEnabled(position));
}
@@ -1302,6 +1296,20 @@ public class ManageApplications extends InstrumentedPreferenceFragment
return convertView;
}
@VisibleForTesting
void updateDisableView(TextView view, ApplicationInfo info) {
if ((info.flags & ApplicationInfo.FLAG_INSTALLED) == 0) {
view.setVisibility(View.VISIBLE);
view.setText(R.string.not_installed);
} else if (!info.enabled || info.enabledSetting
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
view.setVisibility(View.VISIBLE);
view.setText(R.string.disabled);
} else {
view.setVisibility(View.GONE);
}
}
private void updateSummary(AppViewHolder holder) {
switch (mManageApplications.mListType) {
case LIST_TYPE_NOTIFICATION:

View File

@@ -16,8 +16,12 @@
package com.android.settings.applications;
import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Looper;
import android.os.UserManager;
import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
@@ -36,6 +40,8 @@ import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
@@ -55,7 +61,6 @@ public class ManageApplicationsTest {
@Mock private ApplicationsState mState;
@Mock private ApplicationsState.Session mSession;
@Mock private UserManager mUserManager;
private Looper mBgLooper;
private ManageApplications mFragment;
@@ -78,4 +83,21 @@ public class ManageApplicationsTest {
SettingsRobolectricTestRunner.startSettingsFragment(
mFragment, Settings.ManageApplicationsActivity.class);
}
@Test
public void updateDisableView_appDisabledUntilUsed_shouldSetDisabled() {
final TextView view = mock(TextView.class);
final ApplicationInfo info = new ApplicationInfo();
info.flags = ApplicationInfo.FLAG_INSTALLED;
info.enabled = true;
info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
ManageApplications fragment = mock(ManageApplications.class);
when(fragment.getActivity()).thenReturn(mock(Activity.class));
final ManageApplications.ApplicationsAdapter adapter =
new ManageApplications.ApplicationsAdapter(mState, fragment, 0);
adapter.updateDisableView(view, info);
verify(view).setText(R.string.disabled);
}
}