diff options
author | Jim Miller <jaggies@google.com> | 2014-08-08 18:30:20 -0700 |
---|---|---|
committer | Jim Miller <jaggies@google.com> | 2014-08-13 19:43:20 +0000 |
commit | 5a10a8df0efcf034077cbfcd28dd2e495b8d0441 (patch) | |
tree | b366563c1389390f1aa9e305a4cadeef101e1933 /src/com/android/settings | |
parent | b37ad3d0e903a602272c8ce6e5c51630b5ca063b (diff) | |
download | packages_apps_Settings-5a10a8df0efcf034077cbfcd28dd2e495b8d0441.zip packages_apps_Settings-5a10a8df0efcf034077cbfcd28dd2e495b8d0441.tar.gz packages_apps_Settings-5a10a8df0efcf034077cbfcd28dd2e495b8d0441.tar.bz2 |
Use SwitchPreference in TrustAgentSettings.
Fixes bug 16900059
Change-Id: I52dcfd2a2651f8f770477df3c72176303a9d1b39
Diffstat (limited to 'src/com/android/settings')
-rw-r--r-- | src/com/android/settings/AdvancedSecuritySettings.java | 221 | ||||
-rw-r--r-- | src/com/android/settings/TrustAgentSettings.java | 157 |
2 files changed, 157 insertions, 221 deletions
diff --git a/src/com/android/settings/AdvancedSecuritySettings.java b/src/com/android/settings/AdvancedSecuritySettings.java deleted file mode 100644 index 3ddbf96..0000000 --- a/src/com/android/settings/AdvancedSecuritySettings.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright (C) 2014 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; - -import com.android.internal.widget.LockPatternUtils; - -import android.app.ListFragment; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.os.Bundle; -import android.service.trust.TrustAgentService; -import android.util.ArrayMap; -import android.util.ArraySet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.CheckBox; -import android.widget.TextView; - -import java.util.List; - -public class AdvancedSecuritySettings extends ListFragment implements View.OnClickListener { - static final String TAG = "AdvancedSecuritySettings"; - - private static final String SERVICE_INTERFACE = TrustAgentService.SERVICE_INTERFACE; - - private final ArraySet<ComponentName> mActiveAgents = new ArraySet<ComponentName>(); - private final ArrayMap<ComponentName, AgentInfo> mAvailableAgents - = new ArrayMap<ComponentName, AgentInfo>(); - - private LockPatternUtils mLockPatternUtils; - - public static final class AgentInfo { - CharSequence label; - ComponentName component; // service that implements ITrustAgent - - @Override - public boolean equals(Object other) { - if (other instanceof AgentInfo) { - return component.equals(((AgentInfo)other).component); - } - return true; - } - - public int compareTo(AgentInfo other) { - return component.compareTo(other.component); - } - } - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - if (mLockPatternUtils == null) { - mLockPatternUtils = new LockPatternUtils( - container.getContext().getApplicationContext()); - } - setListAdapter(new AgentListAdapter()); - return inflater.inflate(R.layout.advanced_security_settings, container, false); - } - - @Override - public void onResume() { - super.onResume(); - updateList(); - } - - void updateList() { - Context context = getActivity(); - if (context == null) { - return; - } - - loadActiveAgents(); - - PackageManager pm = getActivity().getPackageManager(); - Intent trustAgentIntent = new Intent(SERVICE_INTERFACE); - List<ResolveInfo> resolveInfos = pm.queryIntentServices(trustAgentIntent, - PackageManager.GET_META_DATA); - - mAvailableAgents.clear(); - mAvailableAgents.ensureCapacity(resolveInfos.size()); - - for (ResolveInfo resolveInfo : resolveInfos) { - if (resolveInfo.serviceInfo == null) continue; - if (!TrustAgentUtils.checkProvidePermission(resolveInfo, pm)) continue; - ComponentName name = TrustAgentUtils.getComponentName(resolveInfo); - if (!mAvailableAgents.containsKey(name)) { - AgentInfo agentInfo = new AgentInfo(); - agentInfo.label = resolveInfo.loadLabel(pm); - agentInfo.component = name; - mAvailableAgents.put(name, agentInfo); - } - } - ((BaseAdapter) getListAdapter()).notifyDataSetChanged(); - } - - @Override - public void onClick(View view) { - ViewHolder h = (ViewHolder) view.getTag(); - - if (view.getId() == R.id.clickable) { - boolean wasActive = mActiveAgents.contains(h.agentInfo.component); - loadActiveAgents(); - if (!wasActive) { - mActiveAgents.add(h.agentInfo.component); - } else { - mActiveAgents.remove(h.agentInfo.component); - } - saveActiveAgents(); - ((BaseAdapter) getListAdapter()).notifyDataSetChanged(); - } - } - - private void loadActiveAgents() { - mActiveAgents.clear(); - List<ComponentName> activeTrustAgents = mLockPatternUtils.getEnabledTrustAgents(); - if (activeTrustAgents != null) { - mActiveAgents.addAll(activeTrustAgents); - } - } - - private void saveActiveAgents() { - mLockPatternUtils.setEnabledTrustAgents(mActiveAgents); - } - - static class ViewHolder { - TextView name; - CheckBox checkbox; - TextView description; - AgentInfo agentInfo; - View clickable; - } - - class AgentListAdapter extends BaseAdapter { - final LayoutInflater mInflater; - - AgentListAdapter() { - mInflater = (LayoutInflater) - getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - public boolean hasStableIds() { - return false; - } - - public int getCount() { - return mAvailableAgents.size(); - } - - public Object getItem(int position) { - return mAvailableAgents.valueAt(position); - } - - public long getItemId(int position) { - return position; - } - - public boolean areAllItemsEnabled() { - return false; - } - - public boolean isEnabled(int position) { - return true; - } - - public View getView(int position, View convertView, ViewGroup parent) { - View v; - if (convertView == null) { - v = newView(parent); - } else { - v = convertView; - } - bindView(v, position); - return v; - } - - public View newView(ViewGroup parent) { - View v = mInflater.inflate(R.layout.trust_agent_item, parent, false); - ViewHolder h = new ViewHolder(); - h.name = (TextView)v.findViewById(R.id.name); - h.checkbox = (CheckBox)v.findViewById(R.id.checkbox); - h.clickable = v.findViewById(R.id.clickable); - h.clickable.setOnClickListener(AdvancedSecuritySettings.this); - h.description = (TextView)v.findViewById(R.id.description); - v.setTag(h); - h.clickable.setTag(h); - return v; - } - - public void bindView(View view, int position) { - ViewHolder vh = (ViewHolder) view.getTag(); - AgentInfo item = mAvailableAgents.valueAt(position); - vh.name.setText(item.label); - vh.checkbox.setChecked(mActiveAgents.contains(item.component)); - vh.agentInfo = item; - } - } -} diff --git a/src/com/android/settings/TrustAgentSettings.java b/src/com/android/settings/TrustAgentSettings.java new file mode 100644 index 0000000..54fef36 --- /dev/null +++ b/src/com/android/settings/TrustAgentSettings.java @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2014 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; + +import java.util.List; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceGroup; +import android.preference.SwitchPreference; +import android.service.trust.TrustAgentService; +import android.util.ArrayMap; +import android.util.ArraySet; + +import com.android.internal.widget.LockPatternUtils; + +public class TrustAgentSettings extends SettingsPreferenceFragment implements + Preference.OnPreferenceChangeListener { + private static final String SERVICE_INTERFACE = TrustAgentService.SERVICE_INTERFACE; + private ArrayMap<ComponentName, AgentInfo> mAvailableAgents; + private final ArraySet<ComponentName> mActiveAgents = new ArraySet<ComponentName>(); + private LockPatternUtils mLockPatternUtils; + + public static final class AgentInfo { + CharSequence label; + ComponentName component; // service that implements ITrustAgent + SwitchPreference preference; + public Drawable icon; + + @Override + public boolean equals(Object other) { + if (other instanceof AgentInfo) { + return component.equals(((AgentInfo)other).component); + } + return true; + } + + public int compareTo(AgentInfo other) { + return component.compareTo(other.component); + } + } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + addPreferencesFromResource(R.xml.trust_agent_settings); + } + + public void onResume() { + super.onResume(); + updateAgents(); + }; + + private void updateAgents() { + final Context context = getActivity(); + if (mAvailableAgents == null) { + mAvailableAgents = findAvailableTrustAgents(); + } + if (mLockPatternUtils == null) { + mLockPatternUtils = new LockPatternUtils(getActivity()); + } + loadActiveAgents(); + PreferenceGroup category = + (PreferenceGroup) getPreferenceScreen().findPreference("trust_agents"); + category.removeAll(); + final int count = mAvailableAgents.size(); + for (int i = 0; i < count; i++) { + AgentInfo agent = mAvailableAgents.valueAt(i); + final SwitchPreference preference = new SwitchPreference(context); + agent.preference = preference; + preference.setPersistent(false); + preference.setTitle(agent.label); + preference.setIcon(agent.icon); + preference.setPersistent(false); + preference.setOnPreferenceChangeListener(this); + preference.setChecked(mActiveAgents.contains(agent.component)); + category.addPreference(agent.preference); + } + } + + private void loadActiveAgents() { + List<ComponentName> activeTrustAgents = mLockPatternUtils.getEnabledTrustAgents(); + if (activeTrustAgents != null) { + mActiveAgents.addAll(activeTrustAgents); + } + } + + private void saveActiveAgents() { + mLockPatternUtils.setEnabledTrustAgents(mActiveAgents); + } + + ArrayMap<ComponentName, AgentInfo> findAvailableTrustAgents() { + PackageManager pm = getActivity().getPackageManager(); + Intent trustAgentIntent = new Intent(SERVICE_INTERFACE); + List<ResolveInfo> resolveInfos = pm.queryIntentServices(trustAgentIntent, + PackageManager.GET_META_DATA); + + ArrayMap<ComponentName, AgentInfo> agents = new ArrayMap<ComponentName, AgentInfo>(); + final int count = resolveInfos.size(); + agents.ensureCapacity(count); + for (int i = 0; i < count; i++ ) { + ResolveInfo resolveInfo = resolveInfos.get(i); + if (resolveInfo.serviceInfo == null) continue; + if (!TrustAgentUtils.checkProvidePermission(resolveInfo, pm)) continue; + ComponentName name = TrustAgentUtils.getComponentName(resolveInfo); + AgentInfo agentInfo = new AgentInfo(); + agentInfo.label = resolveInfo.loadLabel(pm); + agentInfo.icon = resolveInfo.loadIcon(pm); + agentInfo.component = name; + agents.put(name, agentInfo); + } + return agents; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (preference instanceof SwitchPreference) { + final int count = mAvailableAgents.size(); + for (int i = 0; i < count; i++) { + AgentInfo agent = mAvailableAgents.valueAt(i); + if (agent.preference == preference) { + if ((Boolean) newValue) { + if (!mActiveAgents.contains(agent.component)) { + mActiveAgents.add(agent.component); + } + } else { + mActiveAgents.remove(agent.component); + } + saveActiveAgents(); + return true; + } + } + } + return false; + } + +} |