summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/profiles/triggers/WifiTriggerFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/profiles/triggers/WifiTriggerFragment.java')
-rw-r--r--src/com/android/settings/profiles/triggers/WifiTriggerFragment.java258
1 files changed, 258 insertions, 0 deletions
diff --git a/src/com/android/settings/profiles/triggers/WifiTriggerFragment.java b/src/com/android/settings/profiles/triggers/WifiTriggerFragment.java
new file mode 100644
index 0000000..5ba28bf
--- /dev/null
+++ b/src/com/android/settings/profiles/triggers/WifiTriggerFragment.java
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod 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.profiles.triggers;
+
+import android.app.AlertDialog;
+import android.app.ListFragment;
+import android.app.Profile;
+import android.app.ProfileManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.res.Resources;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import com.android.settings.R;
+import com.android.settings.profiles.ProfilesSettings;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class WifiTriggerFragment extends ListFragment {
+ WifiManager mWifiManager;
+ Profile mProfile;
+ private ProfileManager mProfileManager;
+
+ private List<WifiTrigger> mTriggers = new ArrayList<WifiTrigger>();
+ private WifiTriggerAdapter mListAdapter;
+
+ public static WifiTriggerFragment newInstance(Profile profile) {
+ WifiTriggerFragment fragment = new WifiTriggerFragment();
+
+ Bundle extras = new Bundle();
+ extras.putParcelable(ProfilesSettings.EXTRA_PROFILE, profile);
+
+ fragment.setArguments(extras);
+ return fragment;
+ }
+
+ public WifiTriggerFragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mProfile = getArguments().getParcelable(ProfilesSettings.EXTRA_PROFILE);
+ } else {
+ throw new UnsupportedOperationException("no profile!");
+ }
+ mProfileManager = (ProfileManager) getActivity().getSystemService(Context.PROFILE_SERVICE);
+ mWifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ reloadTriggerListItems();
+ }
+
+ private void initPreference(AbstractTriggerItem pref, int state, Resources res, int icon) {
+ String[] values = res.getStringArray(R.array.profile_trigger_wifi_options_values);
+ for (int i = 0; i < values.length; i++) {
+ if (Integer.parseInt(values[i]) == state) {
+ pref.setSummary(res.getStringArray(R.array.profile_trigger_wifi_options)[i]);
+ break;
+ }
+ }
+ pref.setTriggerState(state);
+ pref.setIcon(icon);
+ }
+
+ @Override
+ public void onListItemClick(ListView l, View v, int position, long id) {
+ super.onListItemClick(l, v, position, id);
+
+ final String triggerId;
+ final String triggerName;
+ final int triggerType;
+
+ String[] entries = getResources().getStringArray(R.array.profile_trigger_wifi_options);
+ String[] values =
+ getResources().getStringArray(R.array.profile_trigger_wifi_options_values);
+
+ List<Trigger> triggers = new ArrayList<Trigger>(entries.length);
+ for (int i = 0; i < entries.length; i++) {
+ Trigger toAdd = new Trigger();
+ toAdd.value = Integer.parseInt(values[i]);
+ toAdd.name = entries[i];
+ triggers.add(toAdd);
+ }
+
+ WifiTrigger pref = (WifiTrigger) l.getAdapter().getItem(position);
+ triggerName = pref.getTitle();
+ triggerId = pref.getSSID();
+ triggerType = Profile.TriggerType.WIFI;
+ removeTrigger(triggers, Profile.TriggerState.ON_A2DP_CONNECT);
+ removeTrigger(triggers, Profile.TriggerState.ON_A2DP_DISCONNECT);
+
+ entries = new String[triggers.size()];
+ final int[] valueInts = new int[triggers.size()];
+ int currentTrigger = mProfile.getTrigger(triggerType, triggerId);
+ int currentItem = -1;
+ for (int i = 0; i < triggers.size(); i++) {
+ Trigger t = triggers.get(i);
+ entries[i] = t.name;
+ valueInts[i] = t.value;
+ if (valueInts[i] == currentTrigger) {
+ currentItem = i;
+ }
+ }
+
+ new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.profile_trigger_configure)
+ .setSingleChoiceItems(entries, currentItem, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mProfile.setTrigger(triggerType, triggerId, valueInts[which], triggerName);
+ mProfileManager.updateProfile(mProfile);
+ reloadTriggerListItems();
+ dialog.dismiss();
+ }
+ })
+ .show();
+ }
+
+ private void removeTrigger(List<Trigger> triggers, int value) {
+ for (Trigger t : triggers) {
+ if (t.value == value) {
+ triggers.remove(t);
+ return;
+ }
+ }
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ reloadTriggerListItems();
+ mListAdapter = new WifiTriggerAdapter(getActivity());
+ setListAdapter(mListAdapter);
+ setEmptyText(getString(R.string.no_wifi_triggers));
+ }
+
+ private void reloadTriggerListItems() {
+ mTriggers.clear();
+ final Resources res = getResources();
+ final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
+
+ if (configs != null) {
+ for (WifiConfiguration config : configs) {
+ WifiTrigger accessPoint = new WifiTrigger(config);
+ int state = mProfile.getTrigger(Profile.TriggerType.WIFI, accessPoint.getSSID());
+ initPreference(accessPoint, state, res, R.drawable.ic_wifi_signal_4_dark);
+ mTriggers.add(accessPoint);
+ }
+ } else {
+ final List<Profile.ProfileTrigger> triggers =
+ mProfile.getTriggersFromType(Profile.TriggerType.WIFI);
+ for (Profile.ProfileTrigger trigger : triggers) {
+ WifiTrigger accessPoint = new WifiTrigger(trigger.getName());
+ initPreference(accessPoint, trigger.getState(), res,
+ R.drawable.ic_wifi_signal_4_dark);
+ mTriggers.add(accessPoint);
+ }
+ }
+ if (mListAdapter != null) {
+ mListAdapter.notifyDataSetChanged();
+ }
+ }
+
+ private class Trigger {
+ int value;
+ String name;
+ }
+
+ private class WifiTriggerAdapter extends ArrayAdapter<WifiTrigger> {
+ public WifiTriggerAdapter(Context context) {
+ super(context, R.layout.abstract_trigger_row, R.id.title, mTriggers);
+ }
+
+ @Override
+ public View getView(int i, View view, ViewGroup viewGroup) {
+ LayoutInflater inflater = LayoutInflater.from(getContext());
+ View rowView = inflater.inflate(R.layout.abstract_trigger_row, viewGroup, false);
+ TextView title = (TextView) rowView.findViewById(R.id.title);
+ TextView desc = (TextView) rowView.findViewById(R.id.desc);
+ ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
+
+ WifiTrigger trigger = getItem(i);
+
+ title.setText(trigger.getTitle());
+ desc.setText(trigger.getSummary());
+ imageView.setImageResource(trigger.getIcon());
+
+ return rowView;
+ }
+ }
+
+ public static class WifiTrigger extends AbstractTriggerItem {
+ public String mSSID;
+ public WifiConfiguration mConfig;
+
+ public WifiTrigger(WifiConfiguration config) {
+ mConfig = config;
+ loadConfig(config);
+ }
+
+ public WifiTrigger(String ssid) {
+ mSSID = ssid;
+ }
+
+ public String getSSID() {
+ return mSSID;
+ }
+
+ @Override
+ public String getTitle() {
+ return mSSID;
+ }
+
+ private void loadConfig(WifiConfiguration config) {
+ mSSID = (config.SSID == null ? "" : removeDoubleQuotes(config.SSID));
+ mConfig = config;
+ }
+
+ public static String removeDoubleQuotes(String string) {
+ final int length = string.length();
+ if (length >= 2) {
+ if (string.startsWith("\"") && string.endsWith("\"")) {
+ return string.substring(1, length - 1);
+ }
+ }
+ return string;
+ }
+ }
+}