diff options
-rw-r--r-- | main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java | 299 | ||||
-rw-r--r-- | main/src/main/res/layout/allowed_vpn_apps.xml | 33 |
2 files changed, 163 insertions, 169 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java b/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java index 24bb28ae..aac96f10 100644 --- a/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java +++ b/main/src/main/java/de/blinkt/openvpn/fragments/Settings_Allowed_Apps.java @@ -60,6 +60,126 @@ public class Settings_Allowed_Apps extends Fragment implements AdapterView.OnIte } + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + String packageName = (String) buttonView.getTag(); + if (isChecked) { + Log.d("openvpn", "adding to allowed apps" + packageName); + mProfile.mAllowedAppsVpn.add(packageName); + } else { + Log.d("openvpn", "removing from allowed apps" + packageName); + mProfile.mAllowedAppsVpn.remove(packageName); + } + + } + + @Override + public void onResume() { + super.onResume(); + changeDisallowText(mProfile.mAllowedAppsVpnAreDisallowed); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + String profileUuid = getArguments().getString(getActivity().getPackageName() + ".profileUUID"); + mProfile = ProfileManager.get(getActivity(), profileUuid); + getActivity().setTitle(getString(R.string.edit_profile_title, mProfile.getName())); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.allowed_apps, menu); + + SearchView searchView = (SearchView) menu.findItem(R.id.app_search_widget).getActionView(); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + mListView.setFilterText(query); + mListView.setTextFilterEnabled(true); + return true; + } + + @Override + public boolean onQueryTextChange(String newText) { + mListView.setFilterText(newText); + if (TextUtils.isEmpty(newText)) + mListView.setTextFilterEnabled(false); + else + mListView.setTextFilterEnabled(true); + + return true; + } + }); + searchView.setOnCloseListener(new SearchView.OnCloseListener() { + @Override + public boolean onClose() { + mListView.clearTextFilter(); + mListAdapter.getFilter().filter(""); + return false; + } + }); + + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.allowed_vpn_apps, container, false); + + mDefaultAllowTextView = (TextView) v.findViewById(R.id.default_allow_text); + + Switch vpnOnDefaultSwitch = (Switch) v.findViewById(R.id.default_allow); + + vpnOnDefaultSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + changeDisallowText(isChecked); + mProfile.mAllowedAppsVpnAreDisallowed = isChecked; + } + }); + + vpnOnDefaultSwitch.setChecked(mProfile.mAllowedAppsVpnAreDisallowed); + + Switch vpnAllowBypassSwitch = (Switch) v.findViewById(R.id.allow_bypass); + + vpnAllowBypassSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + mProfile.mAllowAppVpnBypass = isChecked; + } + }); + + vpnAllowBypassSwitch.setChecked(mProfile.mAllowAppVpnBypass); + + mListView = (ListView) v.findViewById(android.R.id.list); + + mListAdapter = new PackageAdapter(getActivity(), mProfile); + mListView.setAdapter(mListAdapter); + mListView.setOnItemClickListener(this); + + mListView.setEmptyView(v.findViewById(R.id.loading_container)); + + new Thread(new Runnable() { + @Override + public void run() { + mListAdapter.populateList(getActivity()); + } + }).start(); + + return v; + } + + private void changeDisallowText(boolean selectedAreDisallowed) { + if (selectedAreDisallowed) + mDefaultAllowTextView.setText(R.string.vpn_disallow_radio); + else + mDefaultAllowTextView.setText(R.string.vpn_allow_radio); + } + static class AppViewHolder { public ApplicationInfo mInfo; public View rootView; @@ -95,70 +215,14 @@ public class Settings_Allowed_Apps extends Fragment implements AdapterView.OnIte } - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - String packageName = (String) buttonView.getTag(); - if (isChecked) { - Log.d("openvpn", "adding to allowed apps" + packageName); - mProfile.mAllowedAppsVpn.add(packageName); - } else { - Log.d("openvpn", "removing from allowed apps" + packageName); - mProfile.mAllowedAppsVpn.remove(packageName); - } - - } - - class PackageAdapter extends BaseAdapter implements Filterable { - private Vector<ApplicationInfo> mPackages; private final LayoutInflater mInflater; private final PackageManager mPm; + private Vector<ApplicationInfo> mPackages; private ItemFilter mFilter = new ItemFilter(); private Vector<ApplicationInfo> mFilteredData; - private class ItemFilter extends Filter { - @Override - protected FilterResults performFiltering(CharSequence constraint) { - - String filterString = constraint.toString().toLowerCase(Locale.getDefault()); - - FilterResults results = new FilterResults(); - - - int count = mPackages.size(); - final Vector<ApplicationInfo> nlist = new Vector<>(count); - - for (int i = 0; i < count; i++) { - ApplicationInfo pInfo = mPackages.get(i); - CharSequence appName = pInfo.loadLabel(mPm); - - if (TextUtils.isEmpty(appName)) - appName = pInfo.packageName; - - if (appName instanceof String) { - if (((String) appName).toLowerCase(Locale.getDefault()).contains(filterString)) - nlist.add(pInfo); - } else { - if (appName.toString().toLowerCase(Locale.getDefault()).contains(filterString)) - nlist.add(pInfo); - } - } - results.values = nlist; - results.count = nlist.size(); - - return results; - } - - @Override - protected void publishResults(CharSequence constraint, FilterResults results) { - mFilteredData = (Vector<ApplicationInfo>) results.values; - notifyDataSetChanged(); - } - - } - - PackageAdapter(Context c, VpnProfile vp) { mPm = c.getPackageManager(); mProfile = vp; @@ -246,115 +310,46 @@ public class Settings_Allowed_Apps extends Fragment implements AdapterView.OnIte public Filter getFilter() { return mFilter; } - } - @Override - public void onResume() { - super.onResume(); - changeDisallowText(mProfile.mAllowedAppsVpnAreDisallowed); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - String profileUuid = getArguments().getString(getActivity().getPackageName() + ".profileUUID"); - mProfile = ProfileManager.get(getActivity(), profileUuid); - getActivity().setTitle(getString(R.string.edit_profile_title, mProfile.getName())); - setHasOptionsMenu(true); - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.allowed_apps, menu); - - SearchView searchView = (SearchView) menu.findItem( R.id.app_search_widget ).getActionView(); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String query) { - mListView.setFilterText(query); - mListView.setTextFilterEnabled(true); - return true; - } - - @Override - public boolean onQueryTextChange(String newText) { - mListView.setFilterText(newText); - if (TextUtils.isEmpty(newText)) - mListView.setTextFilterEnabled(false); - else - mListView.setTextFilterEnabled(true); - - return true; - } - }); - searchView.setOnCloseListener(new SearchView.OnCloseListener() { + private class ItemFilter extends Filter { @Override - public boolean onClose() { - mListView.clearTextFilter(); - mListAdapter.getFilter().filter(""); - return false; - } - }); - - super.onCreateOptionsMenu(menu, inflater); - } + protected FilterResults performFiltering(CharSequence constraint) { - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.allowed_vpn_apps, container, false); + String filterString = constraint.toString().toLowerCase(Locale.getDefault()); - mDefaultAllowTextView = (TextView) v.findViewById(R.id.default_allow_text); - mAllowBypassTextView = (TextView) v.findViewById(R.id.allow_bypass_text); + FilterResults results = new FilterResults(); - Switch vpnOnDefaultSwitch = (Switch) v.findViewById(R.id.default_allow); - vpnOnDefaultSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int count = mPackages.size(); + final Vector<ApplicationInfo> nlist = new Vector<>(count); - changeDisallowText(isChecked); - mProfile.mAllowedAppsVpnAreDisallowed = isChecked; - } - }); + for (int i = 0; i < count; i++) { + ApplicationInfo pInfo = mPackages.get(i); + CharSequence appName = pInfo.loadLabel(mPm); - vpnOnDefaultSwitch.setChecked(mProfile.mAllowedAppsVpnAreDisallowed); + if (TextUtils.isEmpty(appName)) + appName = pInfo.packageName; - Switch vpnAllowBypassSwitch = (Switch) v.findViewById(R.id.allow_bypass); + if (appName instanceof String) { + if (((String) appName).toLowerCase(Locale.getDefault()).contains(filterString)) + nlist.add(pInfo); + } else { + if (appName.toString().toLowerCase(Locale.getDefault()).contains(filterString)) + nlist.add(pInfo); + } + } + results.values = nlist; + results.count = nlist.size(); - vpnAllowBypassSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mProfile.mAllowAppVpnBypass = isChecked; + return results; } - }); - - vpnAllowBypassSwitch.setChecked(mProfile.mAllowAppVpnBypass); - - mListView = (ListView) v.findViewById(android.R.id.list); - - mListAdapter = new PackageAdapter(getActivity(), mProfile); - mListView.setAdapter(mListAdapter); - mListView.setOnItemClickListener(this); - - mListView.setEmptyView(v.findViewById(R.id.loading_container)); - new Thread(new Runnable() { @Override - public void run() { - mListAdapter.populateList(getActivity()); + protected void publishResults(CharSequence constraint, FilterResults results) { + mFilteredData = (Vector<ApplicationInfo>) results.values; + notifyDataSetChanged(); } - }).start(); - - return v; - } - private void changeDisallowText(boolean selectedAreDisallowed) { - if (selectedAreDisallowed) - mDefaultAllowTextView.setText(R.string.vpn_disallow_radio); - else - mDefaultAllowTextView.setText(R.string.vpn_allow_radio); - - mAllowBypassTextView.setText(R.string.vpn_allow_bypass); + } } } diff --git a/main/src/main/res/layout/allowed_vpn_apps.xml b/main/src/main/res/layout/allowed_vpn_apps.xml index 4219e13d..45ff66d6 100644 --- a/main/src/main/res/layout/allowed_vpn_apps.xml +++ b/main/src/main/res/layout/allowed_vpn_apps.xml @@ -18,14 +18,14 @@ android:paddingStart="@dimen/switchbar_pad" android:elevation="1dp" android:paddingEnd="@dimen/switchbar_pad" - tools:ignore="NewApi"> + > <Switch android:id="@+id/default_allow" android:layout_alignParentEnd="true" - android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:padding="10dp" /> <TextView android:id="@+id/default_allow_text" @@ -33,34 +33,33 @@ tools:text="@string/vpn_disallow_radio" android:layout_toStartOf="@id/default_allow" android:layout_width="wrap_content" - android:layout_centerVertical="true" android:layout_height="wrap_content" /> - </RelativeLayout> + + </RelativeLayout> <RelativeLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="?android:attr/actionBarSize" - android:background="@drawable/bg_switchbar" - android:paddingStart="@dimen/switchbar_pad" - android:elevation="1dp" - android:paddingEnd="@dimen/switchbar_pad" - tools:ignore="NewApi"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="?android:attr/actionBarSize" + android:background="@drawable/bg_switchbar" + android:paddingStart="@dimen/switchbar_pad" + android:elevation="1dp" + android:paddingEnd="@dimen/switchbar_pad" + > - <Switch + <Switch android:id="@+id/allow_bypass" android:layout_alignParentEnd="true" - android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:padding="10dp" + /> <TextView - android:id="@+id/allow_bypass_text" style="@android:style/TextAppearance.Medium.Inverse" - tools:text="@string/vpn_allow_bypass" + android:text="@string/vpn_allow_bypass" android:layout_toStartOf="@id/allow_bypass" android:layout_width="wrap_content" - android:layout_centerVertical="true" android:layout_height="wrap_content" /> </RelativeLayout> |