12601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani/*
22601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * Copyright (C) 2013 The Android Open Source Project
32601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani *
42601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * Licensed under the Apache License, Version 2.0 (the "License");
52601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * you may not use this file except in compliance with the License.
62601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * You may obtain a copy of the License at
72601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani *
82601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani *      http://www.apache.org/licenses/LICENSE-2.0
92601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani *
102601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * Unless required by applicable law or agreed to in writing, software
112601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * distributed under the License is distributed on an "AS IS" BASIS,
122601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * See the License for the specific language governing permissions and
142601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani * limitations under the License.
152601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani */
162601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
172601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasanipackage com.android.settings.users;
182601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
192601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport android.content.Context;
202601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport android.content.RestrictionEntry;
212601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport android.content.res.Resources;
222601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport android.os.Bundle;
232601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport android.os.UserHandle;
242601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport android.os.UserManager;
252601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport android.provider.Settings.Secure;
262601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
272601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport com.android.settings.R;
282601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
292601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasaniimport java.util.ArrayList;
302601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
312601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasanipublic class RestrictionUtils {
322601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
332601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    public static final String [] sRestrictionKeys = {
34e11a346f1fe6adeb183e7dfb622ac6ab40016794Amith Yamasani//        UserManager.DISALLOW_CONFIG_WIFI,
35e11a346f1fe6adeb183e7dfb622ac6ab40016794Amith Yamasani//        UserManager.DISALLOW_CONFIG_BLUETOOTH,
362601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        UserManager.DISALLOW_SHARE_LOCATION,
371bad7141b4c602399beaddde49ac295ae1a89afcAmith Yamasani//        UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES
382601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    };
392601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
402601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    public static final int [] sRestrictionTitles = {
41e11a346f1fe6adeb183e7dfb622ac6ab40016794Amith Yamasani//        R.string.restriction_wifi_config_title,
42e11a346f1fe6adeb183e7dfb622ac6ab40016794Amith Yamasani//        R.string.restriction_bluetooth_config_title,
432601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        R.string.restriction_location_enable_title,
441bad7141b4c602399beaddde49ac295ae1a89afcAmith Yamasani//        R.string.install_applications
452601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    };
462601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
472601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    public static final int [] sRestrictionDescriptions = {
48e11a346f1fe6adeb183e7dfb622ac6ab40016794Amith Yamasani//        R.string.restriction_wifi_config_summary,
49e11a346f1fe6adeb183e7dfb622ac6ab40016794Amith Yamasani//        R.string.restriction_bluetooth_config_summary,
502601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        R.string.restriction_location_enable_summary,
511bad7141b4c602399beaddde49ac295ae1a89afcAmith Yamasani//        R.string.install_unknown_applications
522601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    };
532601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
542601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    /**
552601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani     * Returns the current user restrictions in the form of application
562601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani     * restriction entries.
572601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani     * @return list of RestrictionEntry objects with user-visible text.
582601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani     */
592601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    public static ArrayList<RestrictionEntry> getRestrictions(Context context, UserHandle user) {
602601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        Resources res = context.getResources();
612601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        ArrayList<RestrictionEntry> entries = new ArrayList<RestrictionEntry>();
622601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        UserManager um = UserManager.get(context);
632601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        Bundle userRestrictions = um.getUserRestrictions(user);
642601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
652601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        for (int i = 0; i < sRestrictionKeys.length; i++) {
662601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            RestrictionEntry entry = new RestrictionEntry(
672601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani                    sRestrictionKeys[i],
682601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani                    !userRestrictions.getBoolean(sRestrictionKeys[i], false));
692601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            entry.setTitle(res.getString(sRestrictionTitles[i]));
702601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            entry.setDescription(res.getString(sRestrictionDescriptions[i]));
712601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            entry.setType(RestrictionEntry.TYPE_BOOLEAN);
722601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            entries.add(entry);
732601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        }
742601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
752601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        return entries;
762601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    }
772601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
782601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    public static void setRestrictions(Context context, ArrayList<RestrictionEntry> entries,
792601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            UserHandle user) {
802601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        UserManager um = UserManager.get(context);
812601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        Bundle userRestrictions = um.getUserRestrictions(user);
822601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani
832601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        for (RestrictionEntry entry : entries) {
842601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            userRestrictions.putBoolean(entry.getKey(), !entry.getSelectedState());
852601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            if (entry.getKey().equals(UserManager.DISALLOW_SHARE_LOCATION)
862601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani                    && !entry.getSelectedState()) {
87dad115e2dbf79248464c249ce7293f1b302ddaf1Tom O'Neill                Secure.putIntForUser(context.getContentResolver(),
88dad115e2dbf79248464c249ce7293f1b302ddaf1Tom O'Neill                        Secure.LOCATION_MODE, Secure.LOCATION_MODE_OFF, user.getIdentifier());
892601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani            }
902601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        }
912601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani        um.setUserRestrictions(userRestrictions, user);
922601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani    }
935ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani
945ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani    public static Bundle restrictionsToBundle(ArrayList<RestrictionEntry> entries) {
955ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani        final Bundle bundle = new Bundle();
965ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani        for (RestrictionEntry entry : entries) {
975ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani            if (entry.getType() == RestrictionEntry.TYPE_BOOLEAN) {
985ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani                bundle.putBoolean(entry.getKey(), entry.getSelectedState());
995ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani            } else if (entry.getType() == RestrictionEntry.TYPE_MULTI_SELECT) {
1005ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani                bundle.putStringArray(entry.getKey(), entry.getAllSelectedStrings());
1015ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani            } else {
1025ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani                bundle.putString(entry.getKey(), entry.getSelectedString());
1035ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani            }
1045ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani        }
1055ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani        return bundle;
1065ee175051951d3a0bc1533aece69af520c295d37Amith Yamasani    }
1072601cd9142bda1953c1e7b0302f7e0d0f02b0c1bAmith Yamasani}
108