From b05c7a016424814d26f95cf1bd7132aad01fc087 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 30 Oct 2015 08:39:17 +0100 Subject: [PATCH] Added expander --- .../eu/faircode/netguard/ActivityMain.java | 1 - .../eu/faircode/netguard/RuleAdapter.java | 39 ++++++++++--------- app/src/main/res/layout/rule.xml | 9 ++++- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/eu/faircode/netguard/ActivityMain.java b/app/src/main/java/eu/faircode/netguard/ActivityMain.java index 955b3457..74079db4 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivityMain.java +++ b/app/src/main/java/eu/faircode/netguard/ActivityMain.java @@ -21,7 +21,6 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.support.v7.widget.SwitchCompat; import android.util.Log; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; diff --git a/app/src/main/java/eu/faircode/netguard/RuleAdapter.java b/app/src/main/java/eu/faircode/netguard/RuleAdapter.java index 67bbe3a6..f21e61dd 100644 --- a/app/src/main/java/eu/faircode/netguard/RuleAdapter.java +++ b/app/src/main/java/eu/faircode/netguard/RuleAdapter.java @@ -35,6 +35,7 @@ public class RuleAdapter extends RecyclerView.Adapter im public View view; public LinearLayout llApplication; public ImageView ivIcon; + public ImageView ivExpander; public TextView tvName; public TextView tvPackage; public CheckBox cbWifi; @@ -49,6 +50,7 @@ public class RuleAdapter extends RecyclerView.Adapter im view = itemView; llApplication = (LinearLayout) itemView.findViewById(R.id.llApplication); ivIcon = (ImageView) itemView.findViewById(R.id.ivIcon); + ivExpander = (ImageView) itemView.findViewById(R.id.ivExpander); tvName = (TextView) itemView.findViewById(R.id.tvName); tvPackage = (TextView) itemView.findViewById(R.id.tvPackage); cbWifi = (CheckBox) itemView.findViewById(R.id.cbWifi); @@ -75,7 +77,7 @@ public class RuleAdapter extends RecyclerView.Adapter im } @Override - public void onBindViewHolder(final ViewHolder holder, int position) { + public void onBindViewHolder(final ViewHolder holder, final int position) { // Get rule final Rule rule = listSelected.get(position); @@ -83,6 +85,7 @@ public class RuleAdapter extends RecyclerView.Adapter im CompoundButton.OnCheckedChangeListener cbListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + // Update rule String network; if (buttonView == holder.cbWifi) { network = "wifi"; @@ -93,6 +96,7 @@ public class RuleAdapter extends RecyclerView.Adapter im } Log.i(TAG, rule.info.packageName + ": " + network + "=" + isChecked); + // Store rule SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences rules = context.getSharedPreferences(network, Context.MODE_PRIVATE); if (isChecked == prefs.getBoolean("whitelist_" + network, true)) { @@ -103,15 +107,10 @@ public class RuleAdapter extends RecyclerView.Adapter im rules.edit().putBoolean(rule.info.packageName, isChecked).apply(); } - if (!(rule.wifi_blocked || rule.other_blocked)) { - rule.unused = false; - SharedPreferences punused = context.getSharedPreferences("unused", Context.MODE_PRIVATE); - punused.edit().remove(rule.info.packageName).apply(); - holder.ivUsing.setVisibility(View.INVISIBLE); - holder.llConfiguration.setVisibility(View.GONE); - holder.cbUsing.setChecked(false); - } + // Update UI + notifyItemChanged(position); + // Apply updated rule SinkholeService.reload(network, context); } }; @@ -119,10 +118,8 @@ public class RuleAdapter extends RecyclerView.Adapter im View.OnClickListener llListener = new View.OnClickListener() { @Override public void onClick(View view) { - if (rule.wifi_blocked || rule.other_blocked) { - rule.attributes = !rule.attributes; - holder.llConfiguration.setVisibility(rule.attributes ? View.VISIBLE : View.GONE); - } + rule.attributes = !rule.attributes; + notifyItemChanged(position); } }; @@ -131,6 +128,8 @@ public class RuleAdapter extends RecyclerView.Adapter im color = Color.argb(100, Color.red(color), Color.green(color), Color.blue(color)); holder.ivIcon.setImageDrawable(rule.getIcon(context)); + holder.ivExpander.setImageResource(rule.attributes ? android.R.drawable.arrow_up_float : android.R.drawable.arrow_down_float); + holder.llApplication.setOnClickListener(llListener); holder.tvName.setText(rule.name); holder.tvName.setTextColor(color); holder.tvPackage.setText(rule.info.packageName); @@ -144,27 +143,29 @@ public class RuleAdapter extends RecyclerView.Adapter im holder.cbOther.setChecked(rule.other_blocked); holder.cbOther.setOnCheckedChangeListener(cbListener); - holder.ivUsing.setVisibility(rule.unused ? View.VISIBLE : View.INVISIBLE); + holder.llAttributes.setOnClickListener(llListener); + holder.ivUsing.setVisibility(rule.unused && (rule.wifi_blocked || rule.other_blocked) ? View.VISIBLE : View.INVISIBLE); holder.llConfiguration.setVisibility(rule.attributes ? View.VISIBLE : View.GONE); - holder.cbUsing.setOnCheckedChangeListener(null); holder.cbUsing.setChecked(rule.unused); - - holder.llApplication.setOnClickListener(llListener); - holder.llAttributes.setOnClickListener(llListener); + holder.cbUsing.setEnabled(rule.wifi_blocked || rule.other_blocked); holder.cbUsing.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + // Update attribute rule.unused = isChecked; SharedPreferences punused = context.getSharedPreferences("unused", Context.MODE_PRIVATE); if (rule.unused) punused.edit().putBoolean(rule.info.packageName, true).apply(); else punused.edit().remove(rule.info.packageName).apply(); - holder.ivUsing.setVisibility(rule.unused ? View.VISIBLE : View.INVISIBLE); + // Update UI + notifyItemChanged(position); + + // Apply updated rule SinkholeService.reload(null, context); } }); diff --git a/app/src/main/res/layout/rule.xml b/app/src/main/res/layout/rule.xml index 7f4b5df4..13d4775d 100644 --- a/app/src/main/res/layout/rule.xml +++ b/app/src/main/res/layout/rule.xml @@ -23,11 +23,18 @@ android:layout_height="?android:attr/listPreferredItemHeightSmall" android:layout_gravity="center_vertical" /> + +