From: Braden Farmer Date: Thu, 7 Nov 2019 05:32:08 +0000 (-0700) Subject: Convert all ListViews to RecyclerView X-Git-Tag: android-x86-8.1-r4~5 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=af5ede11d41ea52ee3dc2a5ba07817e51db8f95a;p=android-x86%2Fpackages-apps-Taskbar.git Convert all ListViews to RecyclerView --- diff --git a/app/src/main/java/com/farmerbb/taskbar/activity/DesktopIconSelectAppActivity.java b/app/src/main/java/com/farmerbb/taskbar/activity/DesktopIconSelectAppActivity.java index 1b46144b..f70ef34c 100644 --- a/app/src/main/java/com/farmerbb/taskbar/activity/DesktopIconSelectAppActivity.java +++ b/app/src/main/java/com/farmerbb/taskbar/activity/DesktopIconSelectAppActivity.java @@ -28,9 +28,10 @@ import android.os.UserHandle; import android.os.UserManager; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.WindowManager; -import android.widget.ListView; import android.widget.ProgressBar; import com.farmerbb.taskbar.R; @@ -52,7 +53,7 @@ public class DesktopIconSelectAppActivity extends AppCompatActivity { private DesktopIconAppListGenerator appListGenerator; private ProgressBar progressBar; - private ListView appList; + private RecyclerView appList; private DesktopIconInfo desktopIcon; @@ -163,12 +164,13 @@ public class DesktopIconSelectAppActivity extends AppCompatActivity { entries.add(entry); } - return new DesktopIconAppListAdapter(DesktopIconSelectAppActivity.this, R.layout.tb_desktop_icon_row, entries); + return new DesktopIconAppListAdapter(DesktopIconSelectAppActivity.this, entries); } @Override protected void onPostExecute(DesktopIconAppListAdapter adapter) { progressBar.setVisibility(View.GONE); + appList.setLayoutManager(new LinearLayoutManager(DesktopIconSelectAppActivity.this)); appList.setAdapter(adapter); setFinishOnTouchOutside(true); } diff --git a/app/src/main/java/com/farmerbb/taskbar/activity/IconPackActivity.java b/app/src/main/java/com/farmerbb/taskbar/activity/IconPackActivity.java index d66e24a5..7d6b0d3d 100644 --- a/app/src/main/java/com/farmerbb/taskbar/activity/IconPackActivity.java +++ b/app/src/main/java/com/farmerbb/taskbar/activity/IconPackActivity.java @@ -16,7 +16,6 @@ package com.farmerbb.taskbar.activity; import android.content.ActivityNotFoundException; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; @@ -24,18 +23,17 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; -import com.farmerbb.taskbar.BuildConfig; import com.farmerbb.taskbar.R; import com.farmerbb.taskbar.util.IconPack; import com.farmerbb.taskbar.util.IconPackManager; @@ -50,7 +48,7 @@ public class IconPackActivity extends AppCompatActivity { private AppListGenerator appListGenerator; private ProgressBar progressBar; - private ListView appList; + private RecyclerView appList; @Override protected void onCreate(Bundle savedInstanceState) { @@ -84,25 +82,31 @@ public class IconPackActivity extends AppCompatActivity { } catch (ActivityNotFoundException e) { /* Gracefully fail */ } } - private class AppListAdapter extends ArrayAdapter { - AppListAdapter(Context context, int layout, List list) { - super(context, layout, list); + private class AppListAdapter extends RecyclerView.Adapter { + + private List entries = new ArrayList<>(); + + AppListAdapter(List list) { + entries.addAll(list); } + @NonNull @Override - public @NonNull View getView(int position, View convertView, final @NonNull ViewGroup parent) { - // Check if an existing view is being reused, otherwise inflate the view - if(convertView == null) - convertView = LayoutInflater.from(getContext()).inflate(R.layout.tb_row, parent, false); + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(IconPackActivity.this).inflate(R.layout.tb_desktop_icon_row, viewGroup, false); + return new RecyclerView.ViewHolder(view) {}; + } - final IconPack entry = getItem(position); + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + final IconPack entry = entries.get(i); assert entry != null; - TextView textView = convertView.findViewById(R.id.name); + TextView textView = viewHolder.itemView.findViewById(R.id.name); textView.setText(entry.getName()); PackageManager pm = getPackageManager(); - ImageView imageView = convertView.findViewById(R.id.icon); + ImageView imageView = viewHolder.itemView.findViewById(R.id.icon); if(entry.getPackageName().equals(getPackageName())) { imageView.setImageDrawable(null); @@ -114,7 +118,7 @@ public class IconPackActivity extends AppCompatActivity { } } - LinearLayout layout = convertView.findViewById(R.id.entry); + LinearLayout layout = viewHolder.itemView.findViewById(R.id.entry); layout.setOnClickListener(view -> { SharedPreferences pref = U.getSharedPreferences(IconPackActivity.this); pref.edit().putString("icon_pack", entry.getPackageName()).apply(); @@ -134,8 +138,11 @@ public class IconPackActivity extends AppCompatActivity { } return false; }); + } - return convertView; + @Override + public int getItemCount() { + return entries.size(); } } @@ -156,7 +163,7 @@ public class IconPackActivity extends AppCompatActivity { finalList.add(dummyIconPack); finalList.addAll(list); - return new AppListAdapter(IconPackActivity.this, R.layout.tb_row, finalList); + return new AppListAdapter(finalList); } } @@ -168,6 +175,7 @@ public class IconPackActivity extends AppCompatActivity { finish(); } else { progressBar.setVisibility(View.GONE); + appList.setLayoutManager(new LinearLayoutManager(IconPackActivity.this)); appList.setAdapter(adapter); setFinishOnTouchOutside(true); } diff --git a/app/src/main/java/com/farmerbb/taskbar/activity/SelectAppActivity.java b/app/src/main/java/com/farmerbb/taskbar/activity/SelectAppActivity.java index ef110fc3..e8d27db0 100644 --- a/app/src/main/java/com/farmerbb/taskbar/activity/SelectAppActivity.java +++ b/app/src/main/java/com/farmerbb/taskbar/activity/SelectAppActivity.java @@ -245,8 +245,8 @@ public class SelectAppActivity extends AppCompatActivity { } return new AppListAdapter[] { - new AppListAdapter(SelectAppActivity.this, R.layout.tb_row_blacklist, entries, U.HIDDEN), - new AppListAdapter(SelectAppActivity.this, R.layout.tb_row_blacklist, entries, U.TOP_APPS) + new AppListAdapter(SelectAppActivity.this, entries, U.HIDDEN), + new AppListAdapter(SelectAppActivity.this, entries, U.TOP_APPS) }; } diff --git a/app/src/main/java/com/farmerbb/taskbar/adapter/AppListAdapter.java b/app/src/main/java/com/farmerbb/taskbar/adapter/AppListAdapter.java index 4053aa81..cfedb178 100644 --- a/app/src/main/java/com/farmerbb/taskbar/adapter/AppListAdapter.java +++ b/app/src/main/java/com/farmerbb/taskbar/adapter/AppListAdapter.java @@ -17,10 +17,10 @@ package com.farmerbb.taskbar.adapter; import android.content.Context; import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.TextView; @@ -32,40 +32,52 @@ import com.farmerbb.taskbar.util.BlacklistEntry; import com.farmerbb.taskbar.util.TopApps; import com.farmerbb.taskbar.util.U; +import java.util.ArrayList; import java.util.List; -public class AppListAdapter extends ArrayAdapter { - private final Blacklist blacklist = Blacklist.getInstance(getContext()); - private final TopApps topApps = TopApps.getInstance(getContext()); +public class AppListAdapter extends RecyclerView.Adapter { + private final Blacklist blacklist; + private final TopApps topApps; + private Context context; + private List entries = new ArrayList<>(); private int type; - public AppListAdapter(Context context, int layout, List list, int type) { - super(context, layout, list); - + public AppListAdapter(Context context, List list, int type) { + this.context = context; + entries.addAll(list); this.type = type; + + blacklist = Blacklist.getInstance(context); + topApps = TopApps.getInstance(context); } + @NonNull @Override - public @NonNull View getView(int position, View convertView, final @NonNull ViewGroup parent) { - // Check if an existing view is being reused, otherwise inflate the view - if(convertView == null) - convertView = LayoutInflater.from(getContext()).inflate(R.layout.tb_row_blacklist, parent, false); + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(context).inflate(R.layout.tb_row_blacklist, viewGroup, false); + return new RecyclerView.ViewHolder(view) {}; + } + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { switch(type) { case U.HIDDEN: - setupHidden(position, convertView); + setupHidden(i, viewHolder.itemView); break; case U.TOP_APPS: - setupTopApps(position, convertView); + setupTopApps(i, viewHolder.itemView); break; } + } - return convertView; + @Override + public int getItemCount() { + return entries.size(); } private void setupHidden(int position, View convertView) { - final BlacklistEntry entry = getItem(position); + final BlacklistEntry entry = entries.get(position); assert entry != null; final String componentName = entry.getPackageName(); @@ -85,27 +97,27 @@ public class AppListAdapter extends ArrayAdapter { if(topApps.isTopApp(componentName) || topApps.isTopApp(componentNameAlt) || topApps.isTopApp(componentNameAlt2)) { - U.showToast(getContext(), - getContext().getString(R.string.tb_already_top_app, entry.getLabel()), + U.showToast(context, + context.getString(R.string.tb_already_top_app, entry.getLabel()), Toast.LENGTH_LONG); } else if(blacklist.isBlocked(componentName)) { - blacklist.removeBlockedApp(getContext(), componentName); + blacklist.removeBlockedApp(context, componentName); checkBox.setChecked(false); } else if(blacklist.isBlocked(componentNameAlt)) { - blacklist.removeBlockedApp(getContext(), componentNameAlt); + blacklist.removeBlockedApp(context, componentNameAlt); checkBox.setChecked(false); } else if(blacklist.isBlocked(componentNameAlt2)) { - blacklist.removeBlockedApp(getContext(), componentNameAlt2); + blacklist.removeBlockedApp(context, componentNameAlt2); checkBox.setChecked(false); } else { - blacklist.addBlockedApp(getContext(), entry); + blacklist.addBlockedApp(context, entry); checkBox.setChecked(true); } }); } private void setupTopApps(int position, View convertView) { - final BlacklistEntry entry = getItem(position); + final BlacklistEntry entry = entries.get(position); assert entry != null; final String componentName = entry.getPackageName(); @@ -125,20 +137,20 @@ public class AppListAdapter extends ArrayAdapter { if(blacklist.isBlocked(componentName) || blacklist.isBlocked(componentNameAlt) || blacklist.isBlocked(componentNameAlt2)) { - U.showToast(getContext(), - getContext().getString(R.string.tb_already_blacklisted, entry.getLabel()), + U.showToast(context, + context.getString(R.string.tb_already_blacklisted, entry.getLabel()), Toast.LENGTH_LONG); } else if(topApps.isTopApp(componentName)) { - topApps.removeTopApp(getContext(), componentName); + topApps.removeTopApp(context, componentName); checkBox.setChecked(false); } else if(topApps.isTopApp(componentNameAlt)) { - topApps.removeTopApp(getContext(), componentNameAlt); + topApps.removeTopApp(context, componentNameAlt); checkBox.setChecked(false); } else if(topApps.isTopApp(componentNameAlt2)) { - topApps.removeTopApp(getContext(), componentNameAlt2); + topApps.removeTopApp(context, componentNameAlt2); checkBox.setChecked(false); } else { - topApps.addTopApp(getContext(), entry); + topApps.addTopApp(context, entry); checkBox.setChecked(true); } }); diff --git a/app/src/main/java/com/farmerbb/taskbar/adapter/DesktopIconAppListAdapter.java b/app/src/main/java/com/farmerbb/taskbar/adapter/DesktopIconAppListAdapter.java index a4813d31..fb0014ee 100644 --- a/app/src/main/java/com/farmerbb/taskbar/adapter/DesktopIconAppListAdapter.java +++ b/app/src/main/java/com/farmerbb/taskbar/adapter/DesktopIconAppListAdapter.java @@ -16,10 +16,11 @@ package com.farmerbb.taskbar.adapter; import android.content.Context; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -28,34 +29,46 @@ import com.farmerbb.taskbar.R; import com.farmerbb.taskbar.activity.DesktopIconSelectAppActivity; import com.farmerbb.taskbar.util.AppEntry; +import java.util.ArrayList; import java.util.List; -public class DesktopIconAppListAdapter extends ArrayAdapter { - public DesktopIconAppListAdapter(Context context, int layout, List list) { - super(context, layout, list); +public class DesktopIconAppListAdapter extends RecyclerView.Adapter { + + private Context context; + private List entries = new ArrayList<>(); + + public DesktopIconAppListAdapter(Context context, List list) { + this.context = context; + entries.addAll(list); } + @NonNull @Override - public View getView(int position, View convertView, final ViewGroup parent) { - // Check if an existing view is being reused, otherwise inflate the view - if(convertView == null) - convertView = LayoutInflater.from(getContext()).inflate(R.layout.tb_desktop_icon_row, parent, false); + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(context).inflate(R.layout.tb_desktop_icon_row, viewGroup, false); + return new RecyclerView.ViewHolder(view) {}; + } - final AppEntry entry = getItem(position); + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + final AppEntry entry = entries.get(i); assert entry != null; - TextView textView = convertView.findViewById(R.id.name); + TextView textView = viewHolder.itemView.findViewById(R.id.name); textView.setText(entry.getLabel()); - ImageView imageView = convertView.findViewById(R.id.icon); - imageView.setImageDrawable(entry.getIcon(getContext())); + ImageView imageView = viewHolder.itemView.findViewById(R.id.icon); + imageView.setImageDrawable(entry.getIcon(context)); - LinearLayout layout = convertView.findViewById(R.id.entry); + LinearLayout layout = viewHolder.itemView.findViewById(R.id.entry); layout.setOnClickListener(view -> { - DesktopIconSelectAppActivity activity = (DesktopIconSelectAppActivity) getContext(); + DesktopIconSelectAppActivity activity = (DesktopIconSelectAppActivity) context; activity.selectApp(entry); }); + } - return convertView; + @Override + public int getItemCount() { + return entries.size(); } } \ No newline at end of file diff --git a/app/src/main/java/com/farmerbb/taskbar/fragment/SelectAppFragment.java b/app/src/main/java/com/farmerbb/taskbar/fragment/SelectAppFragment.java index 12ba1553..27ffe0d8 100644 --- a/app/src/main/java/com/farmerbb/taskbar/fragment/SelectAppFragment.java +++ b/app/src/main/java/com/farmerbb/taskbar/fragment/SelectAppFragment.java @@ -17,11 +17,13 @@ package com.farmerbb.taskbar.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ListView; +import com.farmerbb.taskbar.R; import com.farmerbb.taskbar.activity.SelectAppActivity; public class SelectAppFragment extends Fragment { @@ -43,9 +45,10 @@ public class SelectAppFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { SelectAppActivity activity = (SelectAppActivity) getActivity(); - ListView appList = new ListView(activity); + RecyclerView appList = (RecyclerView) inflater.inflate(R.layout.tb_recyclerview, container, false); int type = getArguments().getInt(ARG_SECTION_NUMBER); + appList.setLayoutManager(new LinearLayoutManager(getActivity())); appList.setAdapter(activity.getAppListAdapter(type)); return appList; diff --git a/app/src/main/res/layout/tb_desktop_icon_row.xml b/app/src/main/res/layout/tb_desktop_icon_row.xml index ac3fda23..9805d17b 100644 --- a/app/src/main/res/layout/tb_desktop_icon_row.xml +++ b/app/src/main/res/layout/tb_desktop_icon_row.xml @@ -17,7 +17,7 @@ diff --git a/app/src/main/res/layout/tb_desktop_icon_select_app.xml b/app/src/main/res/layout/tb_desktop_icon_select_app.xml index 8342df52..8c14d7d1 100644 --- a/app/src/main/res/layout/tb_desktop_icon_select_app.xml +++ b/app/src/main/res/layout/tb_desktop_icon_select_app.xml @@ -26,9 +26,10 @@ android:layout_marginBottom="48dp" android:layout_gravity="center" /> - + android:layout_height="match_parent" + android:scrollbars="vertical" /> \ No newline at end of file diff --git a/app/src/main/res/layout/tb_recyclerview.xml b/app/src/main/res/layout/tb_recyclerview.xml new file mode 100644 index 00000000..4da78e02 --- /dev/null +++ b/app/src/main/res/layout/tb_recyclerview.xml @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/tb_row_blacklist.xml b/app/src/main/res/layout/tb_row_blacklist.xml index 0296ec5d..38a0920b 100644 --- a/app/src/main/res/layout/tb_row_blacklist.xml +++ b/app/src/main/res/layout/tb_row_blacklist.xml @@ -17,7 +17,7 @@ - + android:layout_height="match_parent" + android:scrollbars="vertical" /> \ No newline at end of file