Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8642c74 authored by Doris Ling's avatar Doris Ling
Browse files

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
parent 8c3e46e6
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -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:
+24 −2
Original line number Diff line number Diff line
@@ -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);
    }
}