diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c90953591..6ce16cdb6 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,15 +2,15 @@ - - + + @@ -32,9 +32,9 @@ android:label="@string/remote_control_label" android:description="@string/remote_control_desc"/> - @@ -77,10 +77,10 @@ android:label="@string/account_setup_incoming_title" > - + - + - + - --> - + - --> + + + + + + + @@ -258,7 +251,7 @@ - + diff --git a/res/layout/launcher_shortcuts.xml b/res/layout/launcher_shortcuts.xml new file mode 100644 index 000000000..f05c883c1 --- /dev/null +++ b/res/layout/launcher_shortcuts.xml @@ -0,0 +1,11 @@ + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index b1a31fa7d..8b7e911fb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -15,6 +15,7 @@ Accounts Advanced %s + K-9 Accounts %s:%s diff --git a/src/com/fsck/k9/activity/FolderList.java b/src/com/fsck/k9/activity/FolderList.java index 2bb8f9d5a..fbc8030ae 100644 --- a/src/com/fsck/k9/activity/FolderList.java +++ b/src/com/fsck/k9/activity/FolderList.java @@ -208,7 +208,12 @@ public class FolderList extends K9ListActivity sendMail(mAccount); } - private static void actionHandleAccount(Context context, Account account, String initialFolder) + public static Intent actionHandleAccountIntent(Context context, Account account) + { + return actionHandleAccountIntent(context, account, null); + } + + public static Intent actionHandleAccountIntent(Context context, Account account, String initialFolder) { Intent intent = new Intent(context, FolderList.class); intent.putExtra(EXTRA_ACCOUNT, account.getUuid()); @@ -217,7 +222,12 @@ public class FolderList extends K9ListActivity { intent.putExtra(EXTRA_INITIAL_FOLDER, initialFolder); } + return intent; + } + private static void actionHandleAccount(Context context, Account account, String initialFolder) + { + Intent intent = actionHandleAccountIntent(context, account, initialFolder); context.startActivity(intent); } diff --git a/src/com/fsck/k9/activity/LauncherShortcuts.java b/src/com/fsck/k9/activity/LauncherShortcuts.java new file mode 100644 index 000000000..9606ece4e --- /dev/null +++ b/src/com/fsck/k9/activity/LauncherShortcuts.java @@ -0,0 +1,189 @@ + +package com.fsck.k9.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.TypedValue; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.ImageButton; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.fsck.k9.Account; +import com.fsck.k9.BaseAccount; +import com.fsck.k9.FontSizes; +import com.fsck.k9.K9; +import com.fsck.k9.Preferences; +import com.fsck.k9.R; + +public class LauncherShortcuts extends K9ListActivity implements OnItemClickListener +{ + private AccountsAdapter mAdapter; + private FontSizes mFontSizes = K9.getFontSizes(); + + @Override + public void onCreate(Bundle icicle) + { + super.onCreate(icicle); + + // finish() immediately if we aren't supposed to be here + if (!Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())) { + finish(); + return; + } + + setContentView(R.layout.launcher_shortcuts); + ListView listView = getListView(); + listView.setOnItemClickListener(this); + listView.setItemsCanFocus(false); + + refresh(); + } + + private void refresh() + { + Account[] accounts = Preferences.getPreferences(this).getAccounts(); + + mAdapter = new AccountsAdapter(accounts); + getListView().setAdapter(mAdapter); + } + + private void setupShortcut(Account account) + { + Intent shortcutIntent = null; + if (K9.FOLDER_NONE.equals(account.getAutoExpandFolderName())) + { + shortcutIntent = FolderList.actionHandleAccountIntent(this, account); + } + else + { + shortcutIntent = + MessageList.actionHandleFolderIntent(this, account, + account.getAutoExpandFolderName()); + } + + Intent intent = new Intent(); + intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); + String description = account.getDescription(); + if (description == null || description.length() == 0) + { + description = account.getEmail(); + } + intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, description); + Parcelable iconResource = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); + intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); + + setResult(RESULT_OK, intent); + finish(); + } + + public void onItemClick(AdapterView parent, View view, int position, long id) + { + Account account = (Account) parent.getItemAtPosition(position); + setupShortcut(account); + } + + class AccountsAdapter extends ArrayAdapter + { + public AccountsAdapter(Account[] accounts) + { + super(LauncherShortcuts.this, 0, accounts); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) + { + final BaseAccount account = getItem(position); + View view; + if (convertView != null) + { + view = convertView; + } + else + { + view = getLayoutInflater().inflate(R.layout.accounts_item, parent, false); + } + AccountViewHolder holder = (AccountViewHolder) view.getTag(); + if (holder == null) + { + holder = new AccountViewHolder(); + holder.description = (TextView) view.findViewById(R.id.description); + holder.email = (TextView) view.findViewById(R.id.email); + holder.newMessageCount = (TextView) view.findViewById(R.id.new_message_count); + holder.flaggedMessageCount = (TextView) view.findViewById(R.id.flagged_message_count); + holder.activeIcons = (RelativeLayout) view.findViewById(R.id.active_icons); + + holder.chip = view.findViewById(R.id.chip); + holder.folders = (ImageButton) view.findViewById(R.id.folders); + + view.setTag(holder); + } + + if (account.getEmail().equals(account.getDescription())) + { + holder.email.setVisibility(View.GONE); + } + else + { + holder.email.setVisibility(View.VISIBLE); + holder.email.setText(account.getEmail()); + } + + String description = account.getDescription(); + if (description == null || description.length() == 0) + { + description = account.getEmail(); + } + + holder.description.setText(description); + + holder.newMessageCount.setVisibility(View.GONE); + holder.flaggedMessageCount.setVisibility(View.GONE); + if (account instanceof Account) + { + Account realAccount = (Account)account; + + holder.chip.setBackgroundColor(realAccount.getChipColor()); + holder.chip.getBackground().setAlpha(255); + } + else + { + holder.chip.setBackgroundColor(0x00000000); + } + + holder.description.setTextSize(TypedValue.COMPLEX_UNIT_DIP, mFontSizes.getAccountName()); + holder.email.setTextSize(TypedValue.COMPLEX_UNIT_DIP, mFontSizes.getAccountDescription()); + + + holder.folders.setVisibility(View.VISIBLE); + holder.folders.setOnClickListener(new OnClickListener() + { + public void onClick(View v) + { + FolderList.actionHandleAccount(LauncherShortcuts.this, (Account)account); + + } + }); + + return view; + } + + class AccountViewHolder + { + public TextView description; + public TextView email; + public TextView newMessageCount; + public TextView flaggedMessageCount; + public RelativeLayout activeIcons; + public View chip; + public ImageButton folders; + } + } +} diff --git a/src/com/fsck/k9/activity/MessageList.java b/src/com/fsck/k9/activity/MessageList.java index 22b7bec4e..556c2773f 100644 --- a/src/com/fsck/k9/activity/MessageList.java +++ b/src/com/fsck/k9/activity/MessageList.java @@ -327,6 +327,7 @@ public class MessageList context.startActivity(intent); } + public static Intent actionHandleFolderIntent(Context context, Account account, String folder) { Intent intent = new Intent(context, MessageList.class);