mirror of
https://github.com/M66B/NetGuard.git
synced 2024-12-26 09:48:46 +00:00
Fixed potential crash
This commit is contained in:
parent
7f20bcc46f
commit
742e017db3
2 changed files with 21 additions and 20 deletions
|
@ -287,7 +287,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
||||||
LinearLayoutManager llm = new LinearLayoutManager(this);
|
LinearLayoutManager llm = new LinearLayoutManager(this);
|
||||||
llm.setAutoMeasureEnabled(true);
|
llm.setAutoMeasureEnabled(true);
|
||||||
rvApplication.setLayoutManager(llm);
|
rvApplication.setLayoutManager(llm);
|
||||||
adapter = new AdapterRule(this);
|
adapter = new AdapterRule(this, findViewById(R.id.vwPopupAnchor));
|
||||||
rvApplication.setAdapter(adapter);
|
rvApplication.setAdapter(adapter);
|
||||||
|
|
||||||
// Swipe to refresh
|
// Swipe to refresh
|
||||||
|
|
|
@ -20,7 +20,6 @@ package eu.faircode.netguard;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -79,7 +78,7 @@ import java.util.List;
|
||||||
public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> implements Filterable {
|
public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> implements Filterable {
|
||||||
private static final String TAG = "NetGuard.Adapter";
|
private static final String TAG = "NetGuard.Adapter";
|
||||||
|
|
||||||
private Activity context;
|
private View anchor;
|
||||||
private LayoutInflater inflater;
|
private LayoutInflater inflater;
|
||||||
private RecyclerView rv;
|
private RecyclerView rv;
|
||||||
private int colorText;
|
private int colorText;
|
||||||
|
@ -235,10 +234,10 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AdapterRule(Activity context) {
|
public AdapterRule(Context context, View anchor) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
this.context = context;
|
this.anchor = anchor;
|
||||||
this.inflater = LayoutInflater.from(context);
|
this.inflater = LayoutInflater.from(context);
|
||||||
|
|
||||||
if (prefs.getBoolean("dark_theme", false))
|
if (prefs.getBoolean("dark_theme", false))
|
||||||
|
@ -312,6 +311,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||||
|
final Context context = holder.itemView.getContext();
|
||||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
// Get rule
|
// Get rule
|
||||||
|
@ -337,7 +337,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
holder.ivIcon.setImageResource(android.R.drawable.sym_def_app_icon);
|
holder.ivIcon.setImageResource(android.R.drawable.sym_def_app_icon);
|
||||||
else {
|
else {
|
||||||
Uri uri = Uri.parse("android.resource://" + rule.packageName + "/" + rule.icon);
|
Uri uri = Uri.parse("android.resource://" + rule.packageName + "/" + rule.icon);
|
||||||
GlideApp.with(context)
|
GlideApp.with(holder.itemView.getContext())
|
||||||
.applyDefaultRequestOptions(new RequestOptions().format(DecodeFormat.PREFER_RGB_565))
|
.applyDefaultRequestOptions(new RequestOptions().format(DecodeFormat.PREFER_RGB_565))
|
||||||
.load(uri)
|
.load(uri)
|
||||||
.override(iconSize, iconSize)
|
.override(iconSize, iconSize)
|
||||||
|
@ -385,7 +385,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
||||||
rule.wifi_blocked = isChecked;
|
rule.wifi_blocked = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -410,7 +410,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
||||||
rule.other_blocked = isChecked;
|
rule.other_blocked = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -490,7 +490,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
||||||
rule.apply = isChecked;
|
rule.apply = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -509,7 +509,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
rule.screen_wifi = isChecked;
|
rule.screen_wifi = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -528,7 +528,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
rule.screen_other = isChecked;
|
rule.screen_other = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -541,7 +541,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@TargetApi(Build.VERSION_CODES.M)
|
@TargetApi(Build.VERSION_CODES.M)
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
rule.roaming = isChecked;
|
rule.roaming = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -560,7 +560,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@TargetApi(Build.VERSION_CODES.M)
|
@TargetApi(Build.VERSION_CODES.M)
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
rule.lockdown = isChecked;
|
rule.lockdown = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -681,7 +681,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
long time = cursor.getLong(cursor.getColumnIndex("time"));
|
long time = cursor.getLong(cursor.getColumnIndex("time"));
|
||||||
int block = cursor.getInt(cursor.getColumnIndex("block"));
|
int block = cursor.getInt(cursor.getColumnIndex("block"));
|
||||||
|
|
||||||
PopupMenu popup = new PopupMenu(context, context.findViewById(R.id.vwPopupAnchor));
|
PopupMenu popup = new PopupMenu(context, anchor);
|
||||||
popup.inflate(R.menu.access);
|
popup.inflate(R.menu.access);
|
||||||
|
|
||||||
popup.getMenu().findItem(R.id.menu_host).setTitle(
|
popup.getMenu().findItem(R.id.menu_host).setTitle(
|
||||||
|
@ -703,8 +703,8 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
}
|
}
|
||||||
popup.getMenu().findItem(R.id.menu_host).setEnabled(multiple);
|
popup.getMenu().findItem(R.id.menu_host).setEnabled(multiple);
|
||||||
|
|
||||||
markPro(popup.getMenu().findItem(R.id.menu_allow), ActivityPro.SKU_FILTER);
|
markPro(context, popup.getMenu().findItem(R.id.menu_allow), ActivityPro.SKU_FILTER);
|
||||||
markPro(popup.getMenu().findItem(R.id.menu_block), ActivityPro.SKU_FILTER);
|
markPro(context, popup.getMenu().findItem(R.id.menu_block), ActivityPro.SKU_FILTER);
|
||||||
|
|
||||||
// Whois
|
// Whois
|
||||||
final Intent lookupIP = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.tcpiputils.com/whois-lookup/" + daddr));
|
final Intent lookupIP = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.tcpiputils.com/whois-lookup/" + daddr));
|
||||||
|
@ -828,7 +828,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
|
||||||
rule.notify = isChecked;
|
rule.notify = isChecked;
|
||||||
updateRule(rule, true, listAll);
|
updateRule(context, rule, true, listAll);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -837,6 +837,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
public void onViewRecycled(ViewHolder holder) {
|
public void onViewRecycled(ViewHolder holder) {
|
||||||
super.onViewRecycled(holder);
|
super.onViewRecycled(holder);
|
||||||
|
|
||||||
|
Context context = holder.itemView.getContext();
|
||||||
GlideApp.with(context).clear(holder.ivIcon);
|
GlideApp.with(context).clear(holder.ivIcon);
|
||||||
|
|
||||||
CursorAdapter adapter = (CursorAdapter) holder.lvAccess.getAdapter();
|
CursorAdapter adapter = (CursorAdapter) holder.lvAccess.getAdapter();
|
||||||
|
@ -847,7 +848,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void markPro(MenuItem menu, String sku) {
|
private void markPro(Context context, MenuItem menu, String sku) {
|
||||||
if (sku == null || !IAB.isPurchased(sku, context)) {
|
if (sku == null || !IAB.isPurchased(sku, context)) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
boolean dark = prefs.getBoolean("dark_theme", false);
|
boolean dark = prefs.getBoolean("dark_theme", false);
|
||||||
|
@ -857,7 +858,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateRule(Rule rule, boolean root, List<Rule> listAll) {
|
private void updateRule(Context context, Rule rule, boolean root, List<Rule> listAll) {
|
||||||
SharedPreferences wifi = context.getSharedPreferences("wifi", Context.MODE_PRIVATE);
|
SharedPreferences wifi = context.getSharedPreferences("wifi", Context.MODE_PRIVATE);
|
||||||
SharedPreferences other = context.getSharedPreferences("other", Context.MODE_PRIVATE);
|
SharedPreferences other = context.getSharedPreferences("other", Context.MODE_PRIVATE);
|
||||||
SharedPreferences apply = context.getSharedPreferences("apply", Context.MODE_PRIVATE);
|
SharedPreferences apply = context.getSharedPreferences("apply", Context.MODE_PRIVATE);
|
||||||
|
@ -931,7 +932,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
|
||||||
for (Rule modified : listModified)
|
for (Rule modified : listModified)
|
||||||
listSearch.remove(modified);
|
listSearch.remove(modified);
|
||||||
for (Rule modified : listModified)
|
for (Rule modified : listModified)
|
||||||
updateRule(modified, false, listSearch);
|
updateRule(context, modified, false, listSearch);
|
||||||
|
|
||||||
if (root) {
|
if (root) {
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
|
|
Loading…
Reference in a new issue