1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
* Copyright (C) 2013 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.example.android.apprestrictions;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.UserManager;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
/**
* This is the main user interface of the App Restrictions sample app. It demonstrates the use
* of the App Restriction feature, which is available on Android 4.3 and above tablet devices
* with the multiuser feature.
*
* When launched under the primary User account, you can toggle between standard app restriction
* types and custom. When launched under a restricted profile, this activity displays app
* restriction settings, if available.
*
* Follow these steps to exercise the feature:
* 1. If this is the primary user, go to Settings > Users.
* 2. Create a restricted profile, if one doesn't exist already.
* 3. Open the profile settings, locate the sample app, and tap the app restriction settings
* icon. Configure app restrictions for the app.
* 4. In the lock screen, switch to the user's restricted profile, launch this sample app,
* and see the configured app restrictions displayed.
*/
public class MainActivity extends Activity {
private Bundle mRestrictionsBundle;
// Checkbox to indicate whether custom or standard app restriction types are selected.
private CheckBox mCustomConfig;
public static final String CUSTOM_CONFIG_KEY = "custom_config";
private TextView mMultiEntryValue;
private TextView mChoiceEntryValue;
private TextView mBooleanEntryValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Sets up user interface elements.
setContentView(R.layout.main);
mCustomConfig = (CheckBox) findViewById(R.id.custom_app_limits);
final boolean customChecked =
PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
CUSTOM_CONFIG_KEY, false);
if (customChecked) mCustomConfig.setChecked(true);
mMultiEntryValue = (TextView) findViewById(R.id.multi_entry_id);
mChoiceEntryValue = (TextView) findViewById(R.id.choice_entry_id);
mBooleanEntryValue = (TextView) findViewById(R.id.boolean_entry_id);
}
@Override
protected void onResume() {
super.onResume();
// If app restrictions are set for this package, when launched from a restricted profile,
// the settings are available in the returned Bundle as key/value pairs.
mRestrictionsBundle =
((UserManager) getSystemService(Context.USER_SERVICE))
.getApplicationRestrictions(getPackageName());
if (mRestrictionsBundle == null) {
mRestrictionsBundle = new Bundle();
}
// Reads and displays values from a boolean type restriction entry, if available.
// An app can utilize these settings to restrict its content under a restricted profile.
final String booleanRestrictionValue =
mRestrictionsBundle.containsKey(GetRestrictionsReceiver.KEY_BOOLEAN) ?
mRestrictionsBundle.getBoolean(GetRestrictionsReceiver.KEY_BOOLEAN) + "":
getString(R.string.na);
mBooleanEntryValue.setText(booleanRestrictionValue);
// Reads and displays values from a single choice restriction entry, if available.
final String singleChoiceRestrictionValue =
mRestrictionsBundle.containsKey(GetRestrictionsReceiver.KEY_CHOICE) ?
mRestrictionsBundle.getString(GetRestrictionsReceiver.KEY_CHOICE) :
getString(R.string.na);
mChoiceEntryValue.setText(singleChoiceRestrictionValue);
// Reads and displays values from a multi-select restriction entry, if available.
final String[] multiSelectValues =
mRestrictionsBundle.getStringArray(GetRestrictionsReceiver.KEY_MULTI_SELECT);
if (multiSelectValues == null || multiSelectValues.length == 0) {
mMultiEntryValue.setText(getString(R.string.na));
} else {
String tempValue = "";
for (String value : multiSelectValues) {
tempValue = tempValue + value + " ";
}
mMultiEntryValue.setText(tempValue);
}
}
/**
* Saves custom app restriction to the shared preference.
*
* This flag is used by {@code GetRestrictionsReceiver} to determine if a custom app
* restriction activity should be used.
*
* @param view
*/
public void onCustomClicked(View view) {
final SharedPreferences.Editor editor =
PreferenceManager.getDefaultSharedPreferences(this).edit();
editor.putBoolean(CUSTOM_CONFIG_KEY, mCustomConfig.isChecked()).commit();
}
}