package ryan.org.wordpress.android; import ryan.com.commonsware.cwac.cache.SimpleWebImageCache; import ryan.com.commonsware.cwac.thumbnail.ThumbnailAdapter; import ryan.com.commonsware.cwac.thumbnail.ThumbnailBus; import ryan.com.commonsware.cwac.thumbnail.ThumbnailMessage; import ryan.org.wordpress.android.util.EscapeUtils; import android.app.AlertDialog; import android.app.ListActivity; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import java.util.HashMap; import java.util.Vector; import ryan.org.wordpress.android.R; public class AddQuickPressShortcut extends ListActivity { public Vector<?> accounts; public String[] blogNames; public String[] accountIDs; public String[] accountUsers; public String[] blavatars; public Vector<String> accountNames = new Vector<String>(); protected ThumbnailAdapter thumbs = null; protected static final int[] IMAGE_IDS = { R.id.blavatar }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_quickpress_shortcut); setTitle(getResources().getText(R.string.quickpress_window_title)); displayAccounts(); } private void displayAccounts() { WordPressDB settingsDB = new WordPressDB(this); accounts = settingsDB.getAccounts(this); ListView listView = (ListView) findViewById(android.R.id.list); ImageView iv = new ImageView(this); iv.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_divider)); listView.addFooterView(iv); listView.setVerticalFadingEdgeEnabled(false); listView.setVerticalScrollBarEnabled(true); if (accounts.size() > 0) { ScrollView sv = new ScrollView(this); sv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); LinearLayout layout = new LinearLayout(this); layout.setPadding(10, 10, 10, 0); layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); layout.setOrientation(LinearLayout.VERTICAL); blogNames = new String[accounts.size()]; accountIDs = new String[accounts.size()]; accountUsers = new String[accounts.size()]; blavatars = new String[accounts.size()]; int validBlogCtr = 0; for (int i = 0; i < accounts.size(); i++) { HashMap<?, ?> curHash = (HashMap<?, ?>) accounts.get(i); blogNames[validBlogCtr] = curHash.get("blogName").toString(); accountUsers[validBlogCtr] = curHash.get("username").toString(); accountIDs[validBlogCtr] = curHash.get("id").toString(); String url = curHash.get("url").toString(); url = url.replace("http://", ""); url = url.replace("https://", ""); String[] urlSplit = url.split("/"); url = urlSplit[0]; url = "http://gravatar.com/blavatar/" + ViewComments.getMd5Hash(url.trim()) + "?s=60&d=404"; blavatars[validBlogCtr] = url; accountNames.add(validBlogCtr, blogNames[i]); validBlogCtr++; } if (validBlogCtr < accounts.size()){ accounts = settingsDB.getAccounts(this); } ThumbnailBus bus = new ThumbnailBus(); thumbs = new ThumbnailAdapter(this, new HomeListAdapter(this), new SimpleWebImageCache<ThumbnailBus, ThumbnailMessage>( null, null, 101, bus), IMAGE_IDS); setListAdapter(thumbs); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View row, int position, long id) { AddQuickPressShortcut.this.buildDialog(position); } }); if(accounts.size() == 1) { AddQuickPressShortcut.this.buildDialog(0); } } else { // no account, load new account view Intent i = new Intent(AddQuickPressShortcut.this, NewAccount.class); startActivityForResult(i, 0); } } private void buildDialog(int positionParam) { final int position = positionParam; AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(AddQuickPressShortcut.this); dialogBuilder.setTitle(R.string.quickpress_add_alert_title); final EditText quickPressShortcutName = new EditText(AddQuickPressShortcut.this); quickPressShortcutName.setText("QP " + EscapeUtils.unescapeHtml(accountNames.get(position))); dialogBuilder.setView(quickPressShortcutName); dialogBuilder.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if (TextUtils.isEmpty(quickPressShortcutName.getText())) { Toast t = Toast.makeText(AddQuickPressShortcut.this, R.string.quickpress_add_error, Toast.LENGTH_LONG); t.show(); } else { Intent shortcutIntent = new Intent(); shortcutIntent.setClassName(EditPost.class.getPackage().getName(), EditPost.class.getName()); shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); shortcutIntent.putExtra("id", accountIDs[position]); shortcutIntent.putExtra("accountName", EscapeUtils.unescapeHtml(accountNames.get(position))); shortcutIntent.putExtra("isNew", true); Intent addIntent = new Intent(); addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, quickPressShortcutName.getText().toString()); addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(AddQuickPressShortcut.this, R.drawable.app_icon)); WordPressDB wpDB = new WordPressDB(AddQuickPressShortcut.this); wpDB.addQuickPressShortcut(AddQuickPressShortcut.this.getApplicationContext(), accountIDs[position], quickPressShortcutName.getText().toString()); addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); AddQuickPressShortcut.this.sendBroadcast(addIntent); AddQuickPressShortcut.this.finish(); } } }); dialogBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { // just let the dialog close public void onClick(DialogInterface dialog, int which) {} }); dialogBuilder.setCancelable(false); dialogBuilder.create().show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { switch (requestCode) { case 0: WordPressDB settingsDB = new WordPressDB(this); accounts = settingsDB.getAccounts(this); if (accounts.size() == 0) { finish(); } else { displayAccounts(); } break; } }// end null check else { displayAccounts(); } } protected class HomeListAdapter extends BaseAdapter { public HomeListAdapter(Context context) { } public int getCount() { return accounts.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View pv = convertView; ViewWrapper wrapper = null; if (pv == null) { LayoutInflater inflater = getLayoutInflater(); pv = inflater.inflate(R.layout.home_row, parent, false); wrapper = new ViewWrapper(pv); /*if (position == 0) { usenameHeight = wrapper.getBlogUsername().getHeight(); }*/ pv.setTag(wrapper); wrapper = new ViewWrapper(pv); pv.setTag(wrapper); } else { wrapper = (ViewWrapper) pv.getTag(); } String username = accountUsers[position]; pv.setBackgroundDrawable(getResources().getDrawable( R.drawable.list_bg_selector)); pv.setId(Integer.valueOf(accountIDs[position])); if (wrapper.getBlogUsername().getHeight() == 0) { wrapper.getBlogUsername().setHeight( (int) wrapper.getBlogName().getTextSize() + wrapper.getBlogUsername().getPaddingBottom()); } wrapper.getBlogName().setText( EscapeUtils.unescapeHtml(blogNames[position])); wrapper.getBlogUsername().setText( EscapeUtils.unescapeHtml(username)); if (wrapper.getBlavatar() != null) { try { wrapper.getBlavatar().setImageResource(R.drawable.app_icon); wrapper.getBlavatar().setTag(blavatars[position]); } catch (Throwable t) { t.printStackTrace(); } } return pv; } } class ViewWrapper { View base; TextView blogName = null; TextView blogUsername = null; ImageView blavatar = null; ViewWrapper(View base) { this.base = base; } TextView getBlogName() { if (blogName == null) { blogName = (TextView) base.findViewById(R.id.blogName); } return (blogName); } TextView getBlogUsername() { if (blogUsername == null) { blogUsername = (TextView) base.findViewById(R.id.blogUser); } return (blogUsername); } ImageView getBlavatar() { if (blavatar == null) { blavatar = (ImageView) base.findViewById(R.id.blavatar); } return (blavatar); } } }