Merge "Revert "Add special apps access settings page for financial app."" into qt-dev
am: b39810f5ab

Change-Id: Ia72e4fb5d1a7c930657ca26f15c58cd39220fe5e
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1170a27..13d9874 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7368,8 +7368,6 @@
     <string name="keywords_android_version">android security patch level, baseband version, kernel version</string>
     <!-- Search keywords for dark mode settings [CHAR LIMIT=NONE] -->
     <string name="keywords_dark_ui_mode">theme, light, dark, mode</string>
-    <!-- Search keywords for financial apps sms access settings [CHAR LIMIT=NONE] -->
-    <string name="keywords_financial_apps_sms_access">financial app, sms, permission</string>
 
     <!-- Search keyword for Device Theme Settings [CHAR LIMIT=NONE] -->
     <string name="keywords_systemui_theme">dark theme</string>
@@ -9426,10 +9424,6 @@
     <!-- Summary of number of apps currently can write system settings [CHAR LIMIT=60] -->
     <string name="write_settings_summary"><xliff:g id="count" example="10">%1$d</xliff:g> of <xliff:g id="count" example="10">%2$d</xliff:g> apps allowed to modify system settings</string>
 
-    <!-- Settings title in main settings screen for financial apps sms access [CHAR LIMIT=60] -->
-    <string name="financial_apps_sms_access_title">Financial Apps Sms Access</string>
-    <!-- Preference key for financial apps sms access screen -->
-    <string name="financial_sms_root_screen_key" translatable="false">financial_sms_root_screen_key</string>
     <!-- Label for showing apps that can install other apps [CHAR LIMIT=45] -->
     <string name="filter_install_sources_apps">Can install other apps</string>
     <!-- Label for showing apps that can write system settings [CHAR LIMIT=45] -->
diff --git a/res/xml/financial_app_sms_access.xml b/res/xml/financial_app_sms_access.xml
deleted file mode 100644
index 6f7ba50..0000000
--- a/res/xml/financial_app_sms_access.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.
--->
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:key="@string/financial_sms_root_screen_key"
-    android:title="@string/financial_apps_sms_access_title"
-    settings:controller="com.android.settings.applications.specialaccess.financialapps.FinancialAppsController" />
diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml
index e8265b2..f846298 100644
--- a/res/xml/special_access.xml
+++ b/res/xml/special_access.xml
@@ -146,12 +146,6 @@
     </Preference>
 
     <Preference
-        android:key="financial_apps_sms_access"
-        android:title="@string/financial_apps_sms_access_title"
-        android:fragment="com.android.settings.applications.specialaccess.financialapps.FinancialAppsSmsAccess"
-        settings:keywords="@string/keywords_financial_apps_sms_access" />
-
-    <Preference
         android:key="special_access_more"
         android:title="@string/special_access_more"
         settings:controller="com.android.settings.applications.specialaccess.MoreSpecialAccessPreferenceController" />
diff --git a/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsController.java b/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsController.java
deleted file mode 100644
index c0517df..0000000
--- a/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsController.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2018 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.applications.specialaccess.financialapps;
-
-import static android.Manifest.permission.READ_SMS;
-import static android.Manifest.permission.SMS_FINANCIAL_TRANSACTIONS;
-
-import android.app.AppOpsManager;
-import android.content.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.os.Build;
-import android.util.Log;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.ArrayUtils;
-import com.android.settings.core.BasePreferenceController;
-import com.android.settingslib.applications.ApplicationsState;
-import com.android.settingslib.applications.ApplicationsState.AppEntry;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class FinancialAppsController extends BasePreferenceController
-        implements ApplicationsState.Callbacks {
-    private final static String TAG = FinancialAppsController.class.getSimpleName();
-
-    @VisibleForTesting
-    PreferenceScreen mRoot;
-
-    public FinancialAppsController(Context context, String key) {
-        super(context, key);
-    }
-
-    @AvailabilityStatus
-    public int getAvailabilityStatus() {
-        return AVAILABLE;
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        mRoot = screen;
-    }
-
-    @Override
-    public void updateState(Preference preference) {
-        updateList();
-    }
-
-    private void updateList() {
-        mRoot.removeAll();
-
-        final PackageManager packageManager = mContext.getPackageManager();
-        final AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);
-
-        final List<PackageInfo> installedPackages =
-                packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
-        final int numPackages = installedPackages.size();
-        for (int i = 0; i < numPackages; i++) {
-            final PackageInfo installedPackage = installedPackages.get(i);
-
-            if (installedPackage.requestedPermissions == null) {
-                continue;
-            }
-            final int targetSdk = installedPackage.applicationInfo.targetSdkVersion;
-            final String pkgName = installedPackage.packageName;
-
-            if ((targetSdk >= Build.VERSION_CODES.Q
-                    && ArrayUtils.contains(installedPackage.requestedPermissions,
-                            SMS_FINANCIAL_TRANSACTIONS))
-                    || (targetSdk < Build.VERSION_CODES.Q
-                    && ArrayUtils.contains(installedPackage.requestedPermissions,
-                            READ_SMS))) {
-                final SwitchPreference pref = new SwitchPreference(mRoot.getContext());
-                pref.setTitle(installedPackage.applicationInfo.loadLabel(packageManager));
-                pref.setKey(pkgName);
-
-                pref.setChecked(
-                        appOpsManager.checkOp(
-                                targetSdk >= Build.VERSION_CODES.Q
-                                        ? AppOpsManager.OP_SMS_FINANCIAL_TRANSACTIONS
-                                        : AppOpsManager.OP_READ_SMS,
-                                installedPackage.applicationInfo.uid,
-                                pkgName) == AppOpsManager.MODE_ALLOWED);
-
-                pref.setOnPreferenceChangeListener((preference, newValue) -> {
-                    final int uid;
-                    try {
-                        uid = packageManager.getPackageInfo(preference.getKey(), 0)
-                                .applicationInfo.uid;
-                    } catch (NameNotFoundException e) {
-                        Log.e(TAG, "onPreferenceChange: Failed to get uid for "
-                                + preference.getKey());
-                        return false;
-                    }
-
-                    appOpsManager.setMode(
-                            targetSdk >= Build.VERSION_CODES.Q
-                                    ? AppOpsManager.OP_SMS_FINANCIAL_TRANSACTIONS
-                                    : AppOpsManager.OP_READ_SMS,
-                            uid,
-                            pkgName,
-                            (Boolean) newValue ? AppOpsManager.MODE_ALLOWED
-                                    : AppOpsManager.MODE_IGNORED);
-                    return true;
-                });
-                mRoot.addPreference(pref);
-            }
-        }
-    }
-
-    @Override
-    public void onRunningStateChanged(boolean running) {}
-
-    @Override
-    public void onPackageListChanged() {
-        updateList();
-    }
-
-    @Override
-    public void onRebuildComplete(ArrayList<AppEntry> apps) {}
-
-    @Override
-    public void onPackageIconChanged() {}
-
-    @Override
-    public void onPackageSizeChanged(String packageName) {}
-
-    @Override
-    public void onAllSizesComputed() {}
-
-    @Override
-    public void onLauncherInfoChanged() {}
-
-    @Override
-    public void onLoadEntriesCompleted() {}
-}
diff --git a/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsSmsAccess.java b/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsSmsAccess.java
deleted file mode 100644
index 92f4e28..0000000
--- a/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsSmsAccess.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2018 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.applications.specialaccess.financialapps;
-
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.provider.SearchIndexableResource;
-
-import com.android.settings.R;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settingslib.search.SearchIndexable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SearchIndexable
-public class FinancialAppsSmsAccess extends DashboardFragment {
-    private final static String TAG = FinancialAppsSmsAccess.class.getSimpleName();
-
-    @Override
-    protected String getLogTag() {
-        return TAG;
-    }
-
-    @Override
-    protected int getPreferenceScreenResId() {
-        return R.xml.financial_app_sms_access;
-    }
-
-    @Override
-    public int getMetricsCategory() {
-      return SettingsEnums.SETTINGS_FINANCIAL_APPS_SMS_ACCESS;
-    }
-
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
-                        boolean enabled) {
-                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();
-
-                    final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.financial_app_sms_access;
-                    result.add(sir);
-                    return result;
-                }
-            };
-}
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsControllerTest.java
deleted file mode 100644
index 39a05cb..0000000
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/financialapps/FinancialAppsControllerTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.android.settings.applications.specialaccess.financialapps;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import static android.Manifest.permission.SMS_FINANCIAL_TRANSACTIONS;
-import static android.Manifest.permission.READ_SMS;
-
-import android.app.AppOpsManager;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.os.Build;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadow.api.Shadow;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-@RunWith(RobolectricTestRunner.class)
-public class FinancialAppsControllerTest {
-    @Mock
-    private PackageManager mPackageManager;
-    @Mock
-    private AppOpsManager mAppOpsManager;
-    @Mock
-    private PreferenceScreen mRoot;
-    @Mock
-    private Preference mPreference;
-
-    private Context mContext;
-    private PackageInfo mPackageInfoNoPermissionRequested;
-    private PackageInfo mPackageInfoPermissionRequestedQPlus;
-    private PackageInfo mPackageInfoPermissionRequestedPreQ;
-    private FinancialAppsController mController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        when(mContext.getPackageManager()).thenReturn(mPackageManager);
-        when(mContext.getSystemService(AppOpsManager.class)).thenReturn(mAppOpsManager);
-
-        initializePackageInfos();
-
-        mController = new FinancialAppsController(mContext, "key");
-        mController.displayPreference(mRoot);
-    }
-
-    private void initializePackageInfos() {
-      mPackageInfoNoPermissionRequested = new PackageInfo();
-      mPackageInfoNoPermissionRequested.applicationInfo = new ApplicationInfo();
-
-      mPackageInfoPermissionRequestedQPlus = new PackageInfo();
-      mPackageInfoPermissionRequestedQPlus.applicationInfo = new ApplicationInfo();
-      // TODO(b/121161546): update after robolectric test support Q
-      //mPackageInfoPermissionRequestedQPlus.applicationInfo.targetSdkVersion =
-      //        Build.VERSION_CODES.Q;
-      mPackageInfoPermissionRequestedQPlus.applicationInfo.uid = 2001;
-      mPackageInfoPermissionRequestedQPlus.applicationInfo.nonLocalizedLabel = "QPLUS Package";
-      mPackageInfoPermissionRequestedQPlus.packageName = "QPLUS";
-      mPackageInfoPermissionRequestedQPlus.requestedPermissions =
-              new String[] {SMS_FINANCIAL_TRANSACTIONS};
-
-      mPackageInfoPermissionRequestedPreQ = new PackageInfo();
-      mPackageInfoPermissionRequestedPreQ.applicationInfo = new ApplicationInfo();
-      mPackageInfoPermissionRequestedPreQ.applicationInfo.targetSdkVersion = Build.VERSION_CODES.M;
-      mPackageInfoPermissionRequestedPreQ.applicationInfo.uid = 2002;
-      mPackageInfoPermissionRequestedPreQ.applicationInfo.nonLocalizedLabel = "PREQ Package";
-      mPackageInfoPermissionRequestedPreQ.packageName = "PREQ";
-      mPackageInfoPermissionRequestedPreQ.requestedPermissions = new String[] {READ_SMS};
-    }
-
-    @Test
-    public void isAvailable_true() {
-        assertThat(mController.isAvailable()).isTrue();
-    }
-
-    @Test
-    public void noPreferenceAddedWhenNoPackageRequestPermission() {
-        when(mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS))
-            .thenReturn(new ArrayList<PackageInfo>(
-                    Arrays.asList(mPackageInfoNoPermissionRequested)));
-        mController.updateState(null);
-        assertThat(mController.mRoot.getPreferenceCount()).isEqualTo(0);
-    }
-
-    //TODO(b/121161546): Add these tests after robolectric test support Q
-    /*
-    @Test
-    public void preferenceAddedWhenPreQPackageRequestPermission() {
-        when(mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS))
-            .thenReturn(new ArrayList<PackageInfo>(
-                    Arrays.asList(mPackageInfoPermissionRequestedPreQ)));
-        mController.updateState(null);
-        assertThat(mController.mRoot.getPreferenceCount()).isEqualTo(1);
-        SwitchPreference pref = (SwitchPreference) mController.mRoot.getPreference(0);
-        assertThat(pref).isNotNull();
-    }
-
-    @Test
-    public void preferenceAddedWhenQPlusPackageRequestPermission() {
-        when(mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS))
-            .thenReturn(new ArrayList<PackageInfo>(
-                    Arrays.asList(mPackageInfoPermissionRequestedQPlus)));
-        mController.updateState(null);
-        assertThat(mController.mRoot.getPreferenceCount()).isEqualTo(1);
-        SwitchPreference pref = (SwitchPreference) mController.mRoot.getPreference(0);
-        assertThat(pref).isNotNull();
-        }*/
-}