Skip to content

Most visited

Recently visited

navigation
AppRestrictionEnforcer / src / com.example.android.apprestrictionenforcer /

StatusFragment.java

1
/*
2
 * Copyright (C) 2014 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
package com.example.android.apprestrictionenforcer;
18
 
19
import android.app.Activity;
20
import android.app.admin.DevicePolicyManager;
21
import android.content.pm.ApplicationInfo;
22
import android.content.pm.PackageManager;
23
import android.os.Build;
24
import android.os.Bundle;
25
import android.support.annotation.Nullable;
26
import android.support.v4.app.Fragment;
27
import android.view.LayoutInflater;
28
import android.view.View;
29
import android.view.ViewGroup;
30
import android.widget.Button;
31
import android.widget.TextView;
32
import android.widget.Toast;
33
 
34
/**
35
 * Provides UI for enabling the target app in this profile. The status of the app can be
36
 * uninstalled, hidden, or enabled depending on the situations. This fragment shows suitable
37
 * controls for each status.
38
 */
39
public class StatusFragment extends Fragment implements View.OnClickListener {
40
 
41
    private TextView mTextStatus;
42
    private Button mButtonUnhide;
43
    private StatusUpdatedListener mListener;
44
 
45
    @Override
46
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
47
                             @Nullable Bundle savedInstanceState) {
48
        return inflater.inflate(R.layout.fragment_status, container, false);
49
    }
50
 
51
    @Override
52
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
53
        mTextStatus = (TextView) view.findViewById(R.id.status);
54
        mButtonUnhide = (Button) view.findViewById(R.id.unhide);
55
        mButtonUnhide.setOnClickListener(this);
56
    }
57
 
58
    @Override
59
    public void onAttach(Activity activity) {
60
        super.onAttach(activity);
61
        mListener = (StatusUpdatedListener) activity;
62
    }
63
 
64
    @Override
65
    public void onDetach() {
66
        mListener = null;
67
        super.onDetach();
68
    }
69
 
70
    @Override
71
    public void onResume() {
72
        super.onResume();
73
        updateUi(getActivity());
74
    }
75
 
76
    @Override
77
    public void onClick(View v) {
78
        switch (v.getId()) {
79
            case R.id.unhide: {
80
                unhideApp(getActivity());
81
                break;
82
            }
83
        }
84
    }
85
 
86
    private void updateUi(Activity activity) {
87
        PackageManager packageManager = activity.getPackageManager();
88
        try {
89
            int packageFlags;
90
            if (Build.VERSION.SDK_INT < 24) {
91
                //noinspection deprecation
92
                packageFlags = PackageManager.GET_UNINSTALLED_PACKAGES;
93
            } else {
94
                packageFlags = PackageManager.MATCH_UNINSTALLED_PACKAGES;
95
            }
96
            ApplicationInfo info = packageManager.getApplicationInfo(
97
                    Constants.PACKAGE_NAME_APP_RESTRICTION_SCHEMA,
98
                    packageFlags);
99
            DevicePolicyManager devicePolicyManager =
100
                    (DevicePolicyManager) activity.getSystemService(Activity.DEVICE_POLICY_SERVICE);
101
            if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
102
                if (!devicePolicyManager.isApplicationHidden(
103
                        EnforcerDeviceAdminReceiver.getComponentName(activity),
104
                        Constants.PACKAGE_NAME_APP_RESTRICTION_SCHEMA)) {
105
                    // The app is ready to enforce restrictions
106
                    // This is unlikely to happen in this sample as unhideApp() handles it.
107
                    mListener.onStatusUpdated();
108
                } else {
109
                    // The app is installed but hidden in this profile
110
                    mTextStatus.setText(R.string.status_not_activated);
111
                    mButtonUnhide.setVisibility(View.VISIBLE);
112
                }
113
            } else {
114
                // Need to reinstall the sample app
115
                mTextStatus.setText(R.string.status_need_reinstall);
116
                mButtonUnhide.setVisibility(View.GONE);
117
            }
118
        } catch (PackageManager.NameNotFoundException e) {
119
            // Need to reinstall the sample app
120
            mTextStatus.setText(R.string.status_need_reinstall);
121
            mButtonUnhide.setVisibility(View.GONE);
122
        }
123
    }
124
 
125
    /**
126
     * Unhides the AppRestrictionSchema sample in case it is hidden in this profile.
127
     *
128
     * @param activity The activity
129
     */
130
    private void unhideApp(Activity activity) {
131
        DevicePolicyManager devicePolicyManager =
132
                (DevicePolicyManager) activity.getSystemService(Activity.DEVICE_POLICY_SERVICE);
133
        devicePolicyManager.setApplicationHidden(
134
                EnforcerDeviceAdminReceiver.getComponentName(activity),
135
                Constants.PACKAGE_NAME_APP_RESTRICTION_SCHEMA, false);
136
        Toast.makeText(activity, "Enabled the app", Toast.LENGTH_SHORT).show();
137
        mListener.onStatusUpdated();
138
    }
139
 
140
    public interface StatusUpdatedListener {
141
        public void onStatusUpdated();
142
    }
143
 
144
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.