193582995daff3b92b89a24c271fbd719293a41daDoris Ling/* 293582995daff3b92b89a24c271fbd719293a41daDoris Ling * Copyright (C) 2017 The Android Open Source Project 393582995daff3b92b89a24c271fbd719293a41daDoris Ling * 493582995daff3b92b89a24c271fbd719293a41daDoris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 593582995daff3b92b89a24c271fbd719293a41daDoris Ling * you may not use this file except in compliance with the License. 693582995daff3b92b89a24c271fbd719293a41daDoris Ling * You may obtain a copy of the License at 793582995daff3b92b89a24c271fbd719293a41daDoris Ling * 893582995daff3b92b89a24c271fbd719293a41daDoris Ling * http://www.apache.org/licenses/LICENSE-2.0 993582995daff3b92b89a24c271fbd719293a41daDoris Ling * 1093582995daff3b92b89a24c271fbd719293a41daDoris Ling * Unless required by applicable law or agreed to in writing, software 1193582995daff3b92b89a24c271fbd719293a41daDoris Ling * distributed under the License is distributed on an "AS IS" BASIS, 1293582995daff3b92b89a24c271fbd719293a41daDoris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1393582995daff3b92b89a24c271fbd719293a41daDoris Ling * See the License for the specific language governing permissions and 1493582995daff3b92b89a24c271fbd719293a41daDoris Ling * limitations under the License. 1593582995daff3b92b89a24c271fbd719293a41daDoris Ling */ 1693582995daff3b92b89a24c271fbd719293a41daDoris Lingpackage com.android.settings.security; 1793582995daff3b92b89a24c271fbd719293a41daDoris Ling 1893582995daff3b92b89a24c271fbd719293a41daDoris Lingimport android.app.Fragment; 1993582995daff3b92b89a24c271fbd719293a41daDoris Lingimport android.content.Context; 2093582995daff3b92b89a24c271fbd719293a41daDoris Lingimport android.os.UserHandle; 2193582995daff3b92b89a24c271fbd719293a41daDoris Lingimport android.support.annotation.VisibleForTesting; 2293582995daff3b92b89a24c271fbd719293a41daDoris Lingimport android.support.v7.preference.Preference; 2393582995daff3b92b89a24c271fbd719293a41daDoris Lingimport android.support.v7.preference.Preference.OnPreferenceClickListener; 2493582995daff3b92b89a24c271fbd719293a41daDoris Lingimport android.support.v7.preference.PreferenceScreen; 2593582995daff3b92b89a24c271fbd719293a41daDoris Lingimport com.android.internal.widget.LockPatternUtils; 2693582995daff3b92b89a24c271fbd719293a41daDoris Lingimport com.android.settings.OwnerInfoSettings; 271d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settings.core.PreferenceControllerMixin; 2893582995daff3b92b89a24c271fbd719293a41daDoris Lingimport com.android.settingslib.RestrictedLockUtils; 2993582995daff3b92b89a24c271fbd719293a41daDoris Lingimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 3093582995daff3b92b89a24c271fbd719293a41daDoris Lingimport com.android.settingslib.RestrictedPreference; 311d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settingslib.core.AbstractPreferenceController; 32777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.Lifecycle; 33777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.LifecycleObserver; 34777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.events.OnResume; 3593582995daff3b92b89a24c271fbd719293a41daDoris Ling 361d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerpublic class OwnerInfoPreferenceController extends AbstractPreferenceController 371d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler implements PreferenceControllerMixin, LifecycleObserver, OnResume { 3893582995daff3b92b89a24c271fbd719293a41daDoris Ling 3993582995daff3b92b89a24c271fbd719293a41daDoris Ling private static final String KEY_OWNER_INFO = "owner_info_settings"; 4093582995daff3b92b89a24c271fbd719293a41daDoris Ling private static final int MY_USER_ID = UserHandle.myUserId(); 4193582995daff3b92b89a24c271fbd719293a41daDoris Ling 4293582995daff3b92b89a24c271fbd719293a41daDoris Ling private final LockPatternUtils mLockPatternUtils; 4393582995daff3b92b89a24c271fbd719293a41daDoris Ling private final Fragment mParent; 4493582995daff3b92b89a24c271fbd719293a41daDoris Ling private RestrictedPreference mOwnerInfoPref; 4593582995daff3b92b89a24c271fbd719293a41daDoris Ling 4693582995daff3b92b89a24c271fbd719293a41daDoris Ling // Container fragment should implement this in order to show the correct summary 4793582995daff3b92b89a24c271fbd719293a41daDoris Ling public interface OwnerInfoCallback { 4893582995daff3b92b89a24c271fbd719293a41daDoris Ling public void onOwnerInfoUpdated(); 4993582995daff3b92b89a24c271fbd719293a41daDoris Ling } 5093582995daff3b92b89a24c271fbd719293a41daDoris Ling 5193582995daff3b92b89a24c271fbd719293a41daDoris Ling public OwnerInfoPreferenceController(Context context, Fragment parent, Lifecycle lifecycle ) { 5293582995daff3b92b89a24c271fbd719293a41daDoris Ling super(context); 5393582995daff3b92b89a24c271fbd719293a41daDoris Ling mParent = parent; 5493582995daff3b92b89a24c271fbd719293a41daDoris Ling mLockPatternUtils = new LockPatternUtils(context); 5593582995daff3b92b89a24c271fbd719293a41daDoris Ling if (lifecycle != null) { 5693582995daff3b92b89a24c271fbd719293a41daDoris Ling lifecycle.addObserver(this); 5793582995daff3b92b89a24c271fbd719293a41daDoris Ling } 5893582995daff3b92b89a24c271fbd719293a41daDoris Ling } 5993582995daff3b92b89a24c271fbd719293a41daDoris Ling 6093582995daff3b92b89a24c271fbd719293a41daDoris Ling @Override 6193582995daff3b92b89a24c271fbd719293a41daDoris Ling public void displayPreference(PreferenceScreen screen) { 6293582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPref = (RestrictedPreference) screen.findPreference(KEY_OWNER_INFO); 6393582995daff3b92b89a24c271fbd719293a41daDoris Ling } 6493582995daff3b92b89a24c271fbd719293a41daDoris Ling 6593582995daff3b92b89a24c271fbd719293a41daDoris Ling @Override 6693582995daff3b92b89a24c271fbd719293a41daDoris Ling public void onResume() { 6793582995daff3b92b89a24c271fbd719293a41daDoris Ling updateEnableState(); 6893582995daff3b92b89a24c271fbd719293a41daDoris Ling updateSummary(); 6993582995daff3b92b89a24c271fbd719293a41daDoris Ling } 7093582995daff3b92b89a24c271fbd719293a41daDoris Ling 7193582995daff3b92b89a24c271fbd719293a41daDoris Ling @Override 7293582995daff3b92b89a24c271fbd719293a41daDoris Ling public boolean isAvailable() { 7393582995daff3b92b89a24c271fbd719293a41daDoris Ling return true; 7493582995daff3b92b89a24c271fbd719293a41daDoris Ling } 7593582995daff3b92b89a24c271fbd719293a41daDoris Ling 7693582995daff3b92b89a24c271fbd719293a41daDoris Ling @Override 7793582995daff3b92b89a24c271fbd719293a41daDoris Ling public String getPreferenceKey() { 7893582995daff3b92b89a24c271fbd719293a41daDoris Ling return KEY_OWNER_INFO; 7993582995daff3b92b89a24c271fbd719293a41daDoris Ling } 8093582995daff3b92b89a24c271fbd719293a41daDoris Ling 8193582995daff3b92b89a24c271fbd719293a41daDoris Ling public void updateEnableState() { 8293582995daff3b92b89a24c271fbd719293a41daDoris Ling if (mOwnerInfoPref == null) { 8393582995daff3b92b89a24c271fbd719293a41daDoris Ling return; 8493582995daff3b92b89a24c271fbd719293a41daDoris Ling } 8593582995daff3b92b89a24c271fbd719293a41daDoris Ling if (isDeviceOwnerInfoEnabled()) { 8693582995daff3b92b89a24c271fbd719293a41daDoris Ling EnforcedAdmin admin = getDeviceOwner(); 8793582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPref.setDisabledByAdmin(admin); 8893582995daff3b92b89a24c271fbd719293a41daDoris Ling } else { 8993582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPref.setDisabledByAdmin(null); 9093582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPref.setEnabled(!mLockPatternUtils.isLockScreenDisabled(MY_USER_ID)); 9193582995daff3b92b89a24c271fbd719293a41daDoris Ling if (mOwnerInfoPref.isEnabled()) { 9293582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPref.setOnPreferenceClickListener( 9393582995daff3b92b89a24c271fbd719293a41daDoris Ling new OnPreferenceClickListener() { 9493582995daff3b92b89a24c271fbd719293a41daDoris Ling @Override 9593582995daff3b92b89a24c271fbd719293a41daDoris Ling public boolean onPreferenceClick(Preference preference) { 9693582995daff3b92b89a24c271fbd719293a41daDoris Ling OwnerInfoSettings.show(mParent); 9793582995daff3b92b89a24c271fbd719293a41daDoris Ling return true; 9893582995daff3b92b89a24c271fbd719293a41daDoris Ling } 9993582995daff3b92b89a24c271fbd719293a41daDoris Ling }); 10093582995daff3b92b89a24c271fbd719293a41daDoris Ling } 10193582995daff3b92b89a24c271fbd719293a41daDoris Ling } 10293582995daff3b92b89a24c271fbd719293a41daDoris Ling } 10393582995daff3b92b89a24c271fbd719293a41daDoris Ling 10493582995daff3b92b89a24c271fbd719293a41daDoris Ling public void updateSummary() { 10593582995daff3b92b89a24c271fbd719293a41daDoris Ling if (mOwnerInfoPref != null) { 10693582995daff3b92b89a24c271fbd719293a41daDoris Ling if (isDeviceOwnerInfoEnabled()) { 10793582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPref.setSummary( 10893582995daff3b92b89a24c271fbd719293a41daDoris Ling getDeviceOwnerInfo()); 10993582995daff3b92b89a24c271fbd719293a41daDoris Ling } else { 11093582995daff3b92b89a24c271fbd719293a41daDoris Ling mOwnerInfoPref.setSummary(isOwnerInfoEnabled() 11193582995daff3b92b89a24c271fbd719293a41daDoris Ling ? getOwnerInfo() 11293582995daff3b92b89a24c271fbd719293a41daDoris Ling : mContext.getString( 11393582995daff3b92b89a24c271fbd719293a41daDoris Ling com.android.settings.R.string.owner_info_settings_summary)); 11493582995daff3b92b89a24c271fbd719293a41daDoris Ling } 11593582995daff3b92b89a24c271fbd719293a41daDoris Ling } 11693582995daff3b92b89a24c271fbd719293a41daDoris Ling } 11793582995daff3b92b89a24c271fbd719293a41daDoris Ling 11893582995daff3b92b89a24c271fbd719293a41daDoris Ling // Wrapper methods to allow testing 11993582995daff3b92b89a24c271fbd719293a41daDoris Ling @VisibleForTesting 12093582995daff3b92b89a24c271fbd719293a41daDoris Ling boolean isDeviceOwnerInfoEnabled() { 12193582995daff3b92b89a24c271fbd719293a41daDoris Ling return mLockPatternUtils.isDeviceOwnerInfoEnabled(); 12293582995daff3b92b89a24c271fbd719293a41daDoris Ling } 12393582995daff3b92b89a24c271fbd719293a41daDoris Ling 12493582995daff3b92b89a24c271fbd719293a41daDoris Ling @VisibleForTesting 12593582995daff3b92b89a24c271fbd719293a41daDoris Ling String getDeviceOwnerInfo() { 12693582995daff3b92b89a24c271fbd719293a41daDoris Ling return mLockPatternUtils.getDeviceOwnerInfo(); 12793582995daff3b92b89a24c271fbd719293a41daDoris Ling } 12893582995daff3b92b89a24c271fbd719293a41daDoris Ling 12993582995daff3b92b89a24c271fbd719293a41daDoris Ling @VisibleForTesting 13093582995daff3b92b89a24c271fbd719293a41daDoris Ling boolean isOwnerInfoEnabled() { 13193582995daff3b92b89a24c271fbd719293a41daDoris Ling return mLockPatternUtils.isOwnerInfoEnabled(MY_USER_ID); 13293582995daff3b92b89a24c271fbd719293a41daDoris Ling } 13393582995daff3b92b89a24c271fbd719293a41daDoris Ling 13493582995daff3b92b89a24c271fbd719293a41daDoris Ling @VisibleForTesting 13593582995daff3b92b89a24c271fbd719293a41daDoris Ling String getOwnerInfo() { 13693582995daff3b92b89a24c271fbd719293a41daDoris Ling return mLockPatternUtils.getOwnerInfo(MY_USER_ID); 13793582995daff3b92b89a24c271fbd719293a41daDoris Ling } 13893582995daff3b92b89a24c271fbd719293a41daDoris Ling 13993582995daff3b92b89a24c271fbd719293a41daDoris Ling @VisibleForTesting 14093582995daff3b92b89a24c271fbd719293a41daDoris Ling EnforcedAdmin getDeviceOwner() { 14193582995daff3b92b89a24c271fbd719293a41daDoris Ling return RestrictedLockUtils.getDeviceOwner(mContext); 14293582995daff3b92b89a24c271fbd719293a41daDoris Ling } 14393582995daff3b92b89a24c271fbd719293a41daDoris Ling} 144