From ba605643bb25d0ebb8cdbc39bbfafcc0a856a50b Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 13 Aug 2016 14:42:03 -0700 Subject: [PATCH] Switch to indeterminate progress bars --- .../com/limelight/grid/AppGridAdapter.java | 11 +++++---- .../limelight/grid/GenericGridAdapter.java | 17 ++++++++++---- .../com/limelight/grid/PcGridAdapter.java | 22 +++++++++--------- .../grid/assets/CachedAppAssetLoader.java | 11 +++++---- app/src/main/res/drawable/image_loading.png | Bin 21648 -> 0 bytes .../main/res/layout-land/activity_pc_view.xml | 8 +++---- .../main/res/layout-port/activity_pc_view.xml | 8 +++---- app/src/main/res/layout/app_grid_item.xml | 8 +++++++ .../main/res/layout/app_grid_item_small.xml | 8 +++++++ app/src/main/res/layout/pc_grid_item.xml | 9 +++---- .../main/res/layout/pc_grid_item_small.xml | 9 +++---- app/src/main/res/values/strings.xml | 2 +- 12 files changed, 72 insertions(+), 41 deletions(-) delete mode 100644 app/src/main/res/drawable/image_loading.png diff --git a/app/src/main/java/com/limelight/grid/AppGridAdapter.java b/app/src/main/java/com/limelight/grid/AppGridAdapter.java index c7f31ed6..91bf6243 100644 --- a/app/src/main/java/com/limelight/grid/AppGridAdapter.java +++ b/app/src/main/java/com/limelight/grid/AppGridAdapter.java @@ -26,7 +26,7 @@ public class AppGridAdapter extends GenericGridAdapter { private final CachedAppAssetLoader loader; public AppGridAdapter(Activity activity, boolean listMode, boolean small, ComputerDetails computer, String uniqueId) { - super(activity, listMode ? R.layout.simple_row : (small ? R.layout.app_grid_item_small : R.layout.app_grid_item), R.drawable.image_loading); + super(activity, listMode ? R.layout.simple_row : (small ? R.layout.app_grid_item_small : R.layout.app_grid_item)); int dpi = activity.getResources().getDisplayMetrics().densityDpi; int dp; @@ -51,9 +51,7 @@ public class AppGridAdapter extends GenericGridAdapter { this.loader = new CachedAppAssetLoader(computer, scalingDivisor, new NetworkAssetLoader(context, uniqueId), new MemoryAssetLoader(), - new DiskAssetLoader(context.getCacheDir()), - BitmapFactory.decodeResource(activity.getResources(), - R.drawable.image_loading, options)); + new DiskAssetLoader(context.getCacheDir())); } public void cancelQueuedOperations() { @@ -110,4 +108,9 @@ public class AppGridAdapter extends GenericGridAdapter { // No overlay return false; } + + @Override + public boolean shouldShowProgressBar(AppView.AppObject obj) { + return true; + } } diff --git a/app/src/main/java/com/limelight/grid/GenericGridAdapter.java b/app/src/main/java/com/limelight/grid/GenericGridAdapter.java index 19da13c5..7f8826ea 100644 --- a/app/src/main/java/com/limelight/grid/GenericGridAdapter.java +++ b/app/src/main/java/com/limelight/grid/GenericGridAdapter.java @@ -6,6 +6,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; import com.limelight.R; @@ -14,15 +15,13 @@ import java.util.ArrayList; public abstract class GenericGridAdapter extends BaseAdapter { protected final Context context; - protected final int defaultImageRes; protected final int layoutId; protected final ArrayList itemList = new ArrayList<>(); protected final LayoutInflater inflater; - public GenericGridAdapter(Context context, int layoutId, int defaultImageRes) { + public GenericGridAdapter(Context context, int layoutId) { this.context = context; this.layoutId = layoutId; - this.defaultImageRes = defaultImageRes; this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @@ -49,6 +48,7 @@ public abstract class GenericGridAdapter extends BaseAdapter { public abstract boolean populateImageView(ImageView imgView, T obj); public abstract boolean populateTextView(TextView txtView, T obj); public abstract boolean populateOverlayView(ImageView overlayView, T obj); + public abstract boolean shouldShowProgressBar(T obj); @Override public View getView(int i, View convertView, ViewGroup viewGroup) { @@ -59,10 +59,19 @@ public abstract class GenericGridAdapter extends BaseAdapter { ImageView imgView = (ImageView) convertView.findViewById(R.id.grid_image); ImageView overlayView = (ImageView) convertView.findViewById(R.id.grid_overlay); TextView txtView = (TextView) convertView.findViewById(R.id.grid_text); + ProgressBar prgView = (ProgressBar) convertView.findViewById(R.id.grid_spinner); + if (prgView != null) { + if (shouldShowProgressBar(itemList.get(i))) { + prgView.setVisibility(View.VISIBLE); + } + else { + prgView.setVisibility(View.INVISIBLE); + } + } if (imgView != null) { if (!populateImageView(imgView, itemList.get(i))) { - imgView.setImageResource(defaultImageRes); + imgView.setImageBitmap(null); } } if (!populateTextView(txtView, itemList.get(i))) { diff --git a/app/src/main/java/com/limelight/grid/PcGridAdapter.java b/app/src/main/java/com/limelight/grid/PcGridAdapter.java index c6b22e41..b753ec0c 100644 --- a/app/src/main/java/com/limelight/grid/PcGridAdapter.java +++ b/app/src/main/java/com/limelight/grid/PcGridAdapter.java @@ -14,7 +14,7 @@ import java.util.Comparator; public class PcGridAdapter extends GenericGridAdapter { public PcGridAdapter(Context context, boolean listMode, boolean small) { - super(context, listMode ? R.layout.simple_row : (small ? R.layout.pc_grid_item_small : R.layout.pc_grid_item), R.drawable.computer); + super(context, listMode ? R.layout.simple_row : (small ? R.layout.pc_grid_item_small : R.layout.pc_grid_item)); } public void addComputer(PcView.ComputerObject computer) { @@ -37,20 +37,20 @@ public class PcGridAdapter extends GenericGridAdapter { @Override public boolean populateImageView(ImageView imgView, PcView.ComputerObject obj) { - if (obj.details.reachability != ComputerDetails.Reachability.OFFLINE) { + if (obj.details.state == ComputerDetails.State.ONLINE) { imgView.setAlpha(1.0f); } else { imgView.setAlpha(0.4f); } - // Return false to use the default drawable - return false; + imgView.setImageResource(R.drawable.computer); + return true; } @Override public boolean populateTextView(TextView txtView, PcView.ComputerObject obj) { - if (obj.details.reachability != ComputerDetails.Reachability.OFFLINE) { + if (obj.details.state == ComputerDetails.State.ONLINE) { txtView.setAlpha(1.0f); } else { @@ -63,13 +63,13 @@ public class PcGridAdapter extends GenericGridAdapter { @Override public boolean populateOverlayView(ImageView overlayView, PcView.ComputerObject obj) { - if (obj.details.reachability == ComputerDetails.Reachability.UNKNOWN) { - // Still refreshing this PC so display the overlay - overlayView.setImageResource(R.drawable.image_loading); - return true; - } - // No overlay return false; } + + @Override + public boolean shouldShowProgressBar(PcView.ComputerObject obj) { + // Still refreshing this PC so display the progress bar + return obj.details.reachability == ComputerDetails.Reachability.UNKNOWN; + } } diff --git a/app/src/main/java/com/limelight/grid/assets/CachedAppAssetLoader.java b/app/src/main/java/com/limelight/grid/assets/CachedAppAssetLoader.java index 8627841d..66f1e093 100644 --- a/app/src/main/java/com/limelight/grid/assets/CachedAppAssetLoader.java +++ b/app/src/main/java/com/limelight/grid/assets/CachedAppAssetLoader.java @@ -53,13 +53,13 @@ public class CachedAppAssetLoader { public CachedAppAssetLoader(ComputerDetails computer, double scalingDivider, NetworkAssetLoader networkLoader, MemoryAssetLoader memoryLoader, - DiskAssetLoader diskLoader, Bitmap placeholderBitmap) { + DiskAssetLoader diskLoader) { this.computer = computer; this.scalingDivider = scalingDivider; this.networkLoader = networkLoader; this.memoryLoader = memoryLoader; this.diskLoader = diskLoader; - this.placeholderBitmap = placeholderBitmap; + this.placeholderBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); } public void cancelBackgroundLoads() { @@ -280,14 +280,14 @@ public class CachedAppAssetLoader { }); } - public void populateImageView(NvApp app, ImageView view) { + public boolean populateImageView(NvApp app, ImageView view) { LoaderTuple tuple = new LoaderTuple(computer, app); // If there's already a task in progress for this view, // cancel it. If the task is already loading the same image, // we return and let that load finish. if (!cancelPendingLoad(tuple, view)) { - return; + return true; } // First, try the memory cache in the current context @@ -296,7 +296,7 @@ public class CachedAppAssetLoader { // Show the bitmap immediately view.setAlpha(1.0f); view.setImageBitmap(bmp); - return; + return true; } // If it's not in memory, create an async task to load it. This task will be attached @@ -308,6 +308,7 @@ public class CachedAppAssetLoader { // Run the task on our foreground executor task.executeOnExecutor(foregroundExecutor, tuple); + return false; } public class LoaderTuple { diff --git a/app/src/main/res/drawable/image_loading.png b/app/src/main/res/drawable/image_loading.png deleted file mode 100644 index e03a5d7707e415f3cd7d02ea06ec26e098065366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21648 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 - + android:indeterminate="true"/> - + android:indeterminate="true"/> + + + + - - + android:layout_height="50dp" + android:indeterminate="true"> + - - + android:layout_height="33dp" + android:indeterminate="true"> + IP address of GeForce PC - Searching for PCs… + Searching for PCs with GeForce Experience running… Yes No Lost connection to PC