mirror of
https://github.com/emanuele-f/PCAPdroid.git
synced 2026-06-16 21:10:57 +08:00
Replace apps filter ListView with RecycleView
This commit is contained in:
parent
b9d093d520
commit
4b67d2b856
@ -23,61 +23,58 @@ import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AppAdapter extends BaseAdapter {
|
||||
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.AppViewHolder> {
|
||||
private LayoutInflater layoutInflater;
|
||||
private List<AppDescriptor> listStorage;
|
||||
private View.OnClickListener mListener;
|
||||
|
||||
AppAdapter(Context context, List<AppDescriptor> customizedListView) {
|
||||
layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
AppAdapter(Context context, List<AppDescriptor> customizedListView, final View.OnClickListener listener) {
|
||||
layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
listStorage = customizedListView;
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public AppAdapter.AppViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.installed_app_list, parent, false);
|
||||
AppViewHolder recyclerViewHolder = new AppViewHolder(view);
|
||||
view.setOnClickListener(mListener);
|
||||
|
||||
return(recyclerViewHolder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
public void onBindViewHolder(@NonNull AppViewHolder holder, int position) {
|
||||
holder.textInListView.setText(listStorage.get(position).getName());
|
||||
holder.imageInListView.setImageDrawable(listStorage.get(position).getIcon());
|
||||
holder.packageInListView.setText(listStorage.get(position).getPackages());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return listStorage.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return listStorage.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
|
||||
ViewHolder listViewHolder;
|
||||
if(convertView == null){
|
||||
listViewHolder = new ViewHolder();
|
||||
convertView = layoutInflater.inflate(R.layout.installed_app_list, parent, false);
|
||||
|
||||
listViewHolder.textInListView = convertView.findViewById(R.id.list_app_name);
|
||||
listViewHolder.imageInListView = convertView.findViewById(R.id.app_icon);
|
||||
listViewHolder.packageInListView= convertView.findViewById(R.id.app_package);
|
||||
convertView.setTag(listViewHolder);
|
||||
}else{
|
||||
listViewHolder = (ViewHolder)convertView.getTag();
|
||||
}
|
||||
listViewHolder.textInListView.setText(listStorage.get(position).getName());
|
||||
listViewHolder.imageInListView.setImageDrawable(listStorage.get(position).getIcon());
|
||||
listViewHolder.packageInListView.setText(listStorage.get(position).getPackages());
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
||||
class ViewHolder{
|
||||
public static class AppViewHolder extends RecyclerView.ViewHolder {
|
||||
TextView textInListView;
|
||||
ImageView imageInListView;
|
||||
TextView packageInListView;
|
||||
|
||||
public AppViewHolder(View view) {
|
||||
super(view);
|
||||
|
||||
textInListView = view.findViewById(R.id.list_app_name);
|
||||
imageInListView = view.findViewById(R.id.app_icon);
|
||||
packageInListView= view.findViewById(R.id.app_package);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,15 +2,16 @@ package com.emanuelef.remote_capture;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
// TODO add searchbar
|
||||
// https://stackoverflow.com/questions/31085086/how-to-implement-floating-searchwidget-android
|
||||
|
||||
class AppsView extends ListView {
|
||||
class AppsView extends RecyclerView {
|
||||
List<AppDescriptor> mInstalledApps;
|
||||
|
||||
public interface OnSelectedAppListener {
|
||||
@ -21,18 +22,20 @@ class AppsView extends ListView {
|
||||
super(context);
|
||||
|
||||
mInstalledApps = installedApps;
|
||||
AppAdapter installedAppAdapter = new AppAdapter(getContext(), mInstalledApps);
|
||||
|
||||
setAdapter(installedAppAdapter);
|
||||
setLayoutManager(new LinearLayoutManager(context));
|
||||
setHasFixedSize(true);
|
||||
}
|
||||
|
||||
public void setSelectedAppListener(final OnSelectedAppListener listener) {
|
||||
setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
AppAdapter installedAppAdapter = new AppAdapter(getContext(), mInstalledApps, new OnClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||
AppDescriptor app = ((AppDescriptor) getAdapter().getItem(i));
|
||||
public void onClick(View view) {
|
||||
int itemPosition = getChildLayoutPosition(view);
|
||||
AppDescriptor app = mInstalledApps.get(itemPosition);
|
||||
listener.onSelectedApp(app);
|
||||
}
|
||||
});
|
||||
|
||||
setAdapter(installedAppAdapter);
|
||||
}
|
||||
}
|
||||
|
||||
@ -160,19 +160,20 @@ public class MainActivity extends AppCompatActivity implements LoaderManager.Loa
|
||||
return;
|
||||
}
|
||||
|
||||
mOpenAppsWhenDone = false;
|
||||
|
||||
AppsView apps = new AppsView(this, mInstalledApps);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.app_filter);
|
||||
builder.setView(apps);
|
||||
mOpenAppsWhenDone = false;
|
||||
|
||||
final AlertDialog alert = builder.create();
|
||||
|
||||
apps.setSelectedAppListener(new AppsView.OnSelectedAppListener() {
|
||||
@Override
|
||||
public void onSelectedApp(AppDescriptor app) {
|
||||
mFilterUid = app.getUid();
|
||||
mMenu.getItem(0).setIcon(app.getIcon());
|
||||
// clone the drawable to avoid a "zoom-in" effect when clicked
|
||||
mMenu.getItem(0).setIcon(app.getIcon().getConstantState().newDrawable());
|
||||
|
||||
// dismiss the dialog
|
||||
alert.cancel();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user