diff options
author | Kenny Root <kenny@the-b.org> | 2009-05-30 02:32:33 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-05-30 02:32:33 +0000 |
commit | 2e3e025b3f1b9cf3cf643049028de94102d498d3 (patch) | |
tree | 5ab9e702e5d808179b1d95d57cffea74492fbfea /src/org | |
parent | 7ce198e3ec84b7a672d0553c887480ea454ccf1b (diff) | |
download | connectbot-2e3e025b3f1b9cf3cf643049028de94102d498d3.tar.gz connectbot-2e3e025b3f1b9cf3cf643049028de94102d498d3.tar.bz2 connectbot-2e3e025b3f1b9cf3cf643049028de94102d498d3.zip |
Use ViewHolders for List Activities and optimize display of last connect time.
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@243 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/connectbot/HostListActivity.java | 67 | ||||
-rw-r--r-- | src/org/connectbot/PortForwardListActivity.java | 33 |
2 files changed, 63 insertions, 37 deletions
diff --git a/src/org/connectbot/HostListActivity.java b/src/org/connectbot/HostListActivity.java index 3f5f1f0..abd2215 100644 --- a/src/org/connectbot/HostListActivity.java +++ b/src/org/connectbot/HostListActivity.java @@ -436,6 +436,12 @@ public class HostListActivity extends ListActivity { public final static int STATE_UNKNOWN = 1, STATE_CONNECTED = 2, STATE_DISCONNECTED = 3; + class ViewHolder { + public TextView nickname; + public TextView caption; + public ImageView icon; + } + public HostAdapter(Context context, List<HostBean> hosts, TerminalManager manager) { super(context, R.layout.item_host, hosts); @@ -465,36 +471,43 @@ public class HostListActivity extends ListActivity { } @Override - public View getView(int position, View origView, ViewGroup parent) { - View view = origView; - if (view == null) - view = inflater.inflate(R.layout.item_host, null, false); + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + + if (convertView == null) { + convertView = inflater.inflate(R.layout.item_host, null, false); + + holder = new ViewHolder(); - TextView nickname = (TextView)view.findViewById(android.R.id.text1); - TextView caption = (TextView)view.findViewById(android.R.id.text2); - ImageView icon = (ImageView)view.findViewById(android.R.id.icon); + holder.nickname = (TextView)convertView.findViewById(android.R.id.text1); + holder.caption = (TextView)convertView.findViewById(android.R.id.text2); + holder.icon = (ImageView)convertView.findViewById(android.R.id.icon); + + convertView.setTag(holder); + } else + holder = (ViewHolder) convertView.getTag(); HostBean host = hosts.get(position); if (host == null) { // Well, something bad happened. We can't continue. Log.e("HostAdapter", "Host bean is null!"); - nickname.setText("Error during lookup"); - caption.setText("see 'adb logcat' for more"); - return view; + holder.nickname.setText("Error during lookup"); + holder.caption.setText("see 'adb logcat' for more"); + return convertView; } - nickname.setText(host.getNickname()); + holder.nickname.setText(host.getNickname()); switch (this.getConnectedState(host)) { case STATE_UNKNOWN: - icon.setImageState(new int[] { }, true); + holder.icon.setImageState(new int[] { }, true); break; case STATE_CONNECTED: - icon.setImageState(new int[] { android.R.attr.state_checked }, true); + holder.icon.setImageState(new int[] { android.R.attr.state_checked }, true); break; case STATE_DISCONNECTED: - icon.setImageState(new int[] { android.R.attr.state_expanded }, true); + holder.icon.setImageState(new int[] { android.R.attr.state_expanded }, true); break; } @@ -506,35 +519,37 @@ public class HostListActivity extends ListActivity { else if (HostDatabase.COLOR_BLUE.equals(host.getColor())) chosen = this.blue; + Context context = convertView.getContext(); + if (chosen != null) { // set color normally if not selected - nickname.setTextColor(chosen); - caption.setTextColor(chosen); + holder.nickname.setTextColor(chosen); + holder.caption.setTextColor(chosen); } else { // selected, so revert back to default black text - nickname.setTextAppearance(view.getContext(), android.R.attr.textAppearanceLarge); - caption.setTextAppearance(view.getContext(), android.R.attr.textAppearanceSmall); + holder.nickname.setTextAppearance(context, android.R.attr.textAppearanceLarge); + holder.caption.setTextAppearance(context, android.R.attr.textAppearanceSmall); } long now = System.currentTimeMillis() / 1000; - String nice = "never"; + String nice = context.getString(R.string.bind_never); if (host.getLastConnect() > 0) { int minutes = (int)((now - host.getLastConnect()) / 60); - nice = view.getContext().getString(R.string.bind_minutes, minutes); if (minutes >= 60) { int hours = (minutes / 60); - nice = view.getContext().getString(R.string.bind_hours, hours); if (hours >= 24) { int days = (hours / 24); - nice = view.getContext().getString(R.string.bind_days, days); - } - } + nice = context.getString(R.string.bind_days, days); + } else + nice = context.getString(R.string.bind_hours, hours); + } else + nice = context.getString(R.string.bind_minutes, minutes); } - caption.setText(nice); + holder.caption.setText(nice); - return view; + return convertView; } } } diff --git a/src/org/connectbot/PortForwardListActivity.java b/src/org/connectbot/PortForwardListActivity.java index ee26e11..1c48e18 100644 --- a/src/org/connectbot/PortForwardListActivity.java +++ b/src/org/connectbot/PortForwardListActivity.java @@ -369,6 +369,11 @@ public class PortForwardListActivity extends ListActivity { } class PortForwardAdapter extends ArrayAdapter<PortForwardBean> { + class ViewHolder { + public TextView nickname; + public TextView caption; + } + private List<PortForwardBean> portForwards; public PortForwardAdapter(Context context, List<PortForwardBean> portForwards) { @@ -378,24 +383,30 @@ public class PortForwardListActivity extends ListActivity { } @Override - public View getView(int position, View origView, ViewGroup parent) { - View view = origView; - if (view == null) - view = inflater.inflate(R.layout.item_portforward, null, false); + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + + if (convertView == null) { + convertView = inflater.inflate(R.layout.item_portforward, null, false); + + holder = new ViewHolder(); + holder.nickname = (TextView)convertView.findViewById(android.R.id.text1); + holder.caption = (TextView)convertView.findViewById(android.R.id.text2); - TextView nickname = (TextView)view.findViewById(android.R.id.text1); - TextView caption = (TextView)view.findViewById(android.R.id.text2); + convertView.setTag(holder); + } else + holder = (ViewHolder) convertView.getTag(); PortForwardBean pfb = portForwards.get(position); - nickname.setText(pfb.getNickname()); - caption.setText(pfb.getDescription()); + holder.nickname.setText(pfb.getNickname()); + holder.caption.setText(pfb.getDescription()); if (hostBridge != null && !pfb.isEnabled()) { - nickname.setPaintFlags(nickname.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); - caption.setPaintFlags(caption.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + holder.nickname.setPaintFlags(holder.nickname.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + holder.caption.setPaintFlags(holder.caption.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); } - return view; + return convertView; } } } |