Improved first run experience and added additional icons
authorLennart Rosam <lennart@familie-rosam.de>
Tue, 31 Jan 2012 23:43:28 +0000 (00:43 +0100)
committerLennart Rosam <lennart@familie-rosam.de>
Tue, 31 Jan 2012 23:43:28 +0000 (00:43 +0100)
res/drawable-hdpi/calendar.png [new file with mode: 0644]
res/drawable-hdpi/settings.png [new file with mode: 0644]
res/drawable-ldpi/calendar.png [new file with mode: 0644]
res/drawable-ldpi/settings.png [new file with mode: 0644]
res/drawable-mdpi/calendar.png [new file with mode: 0644]
res/drawable-mdpi/settings.png [new file with mode: 0644]
res/values/strings.xml
src/eu/alefzero/owncloud/ui/LandingActivity.java
src/eu/alefzero/owncloud/ui/adapter/LandingScreenAdapter.java [new file with mode: 0644]
src/eu/alefzero/owncloud/ui/fragment/LandingPageFragment.java

diff --git a/res/drawable-hdpi/calendar.png b/res/drawable-hdpi/calendar.png
new file mode 100644 (file)
index 0000000..7652fa5
Binary files /dev/null and b/res/drawable-hdpi/calendar.png differ
diff --git a/res/drawable-hdpi/settings.png b/res/drawable-hdpi/settings.png
new file mode 100644 (file)
index 0000000..9494401
Binary files /dev/null and b/res/drawable-hdpi/settings.png differ
diff --git a/res/drawable-ldpi/calendar.png b/res/drawable-ldpi/calendar.png
new file mode 100644 (file)
index 0000000..a667b5b
Binary files /dev/null and b/res/drawable-ldpi/calendar.png differ
diff --git a/res/drawable-ldpi/settings.png b/res/drawable-ldpi/settings.png
new file mode 100644 (file)
index 0000000..59f4a8b
Binary files /dev/null and b/res/drawable-ldpi/settings.png differ
diff --git a/res/drawable-mdpi/calendar.png b/res/drawable-mdpi/calendar.png
new file mode 100644 (file)
index 0000000..efac984
Binary files /dev/null and b/res/drawable-mdpi/calendar.png differ
diff --git a/res/drawable-mdpi/settings.png b/res/drawable-mdpi/settings.png
new file mode 100644 (file)
index 0000000..80b89e1
Binary files /dev/null and b/res/drawable-mdpi/settings.png differ
index fb2bae7..966bb45 100644 (file)
@@ -12,6 +12,8 @@
     <string name="main_calendar">Calendar</string>
     <string name="main_bookmarks">Bookmarks</string>
     <string name="main_settings">Settings</string>
     <string name="main_calendar">Calendar</string>
     <string name="main_bookmarks">Bookmarks</string>
     <string name="main_settings">Settings</string>
+    <string name="main_tit_accsetup">Account Setup</string>
+    <string name="main_wrn_accsetup">There are no ownCloud accounts on your device. In order to use this App, you need to create one.</string>
     <string name="prefs_general">General</string>
     <string name="prefs_sessions">Stored sessions</string>
     <string name="prefs_add_session">Add new session</string>
     <string name="prefs_general">General</string>
     <string name="prefs_sessions">Stored sessions</string>
     <string name="prefs_add_session">Add new session</string>
@@ -32,7 +34,7 @@
     <string name="setup_btn_connect">Connect</string>
     <string name="uploader_btn_upload_text">Upload</string>
     <string name="uploader_wrn_no_account_title">No account found</string>
     <string name="setup_btn_connect">Connect</string>
     <string name="uploader_btn_upload_text">Upload</string>
     <string name="uploader_wrn_no_account_title">No account found</string>
-    <string name="uploader_wrn_no_account_text">No correct ownCloud account found on device. Please setup account first.</string>
+    <string name="uploader_wrn_no_account_text">There are no ownCloud accounts on your device. Please setup an account first.</string>
     <string name="uploader_wrn_no_account_setup_btn_text">Setup</string>
     <string name="uploader_wrn_no_account_quit_btn_text">Quit</string>
     <string name="uploader_info_uploading">Uploading</string>
     <string name="uploader_wrn_no_account_setup_btn_text">Setup</string>
     <string name="uploader_wrn_no_account_quit_btn_text">Quit</string>
     <string name="uploader_info_uploading">Uploading</string>
index acad25f..a937212 100644 (file)
  */\r
 package eu.alefzero.owncloud.ui;\r
 \r
  */\r
 package eu.alefzero.owncloud.ui;\r
 \r
+import android.accounts.Account;\r
+import android.accounts.AccountManager;\r
+import android.app.AlertDialog;\r
+import android.app.Dialog;\r
+import android.content.DialogInterface;\r
+import android.content.Intent;\r
+import android.content.DialogInterface.OnClickListener;\r
 import android.os.Bundle;\r
 import android.support.v4.app.FragmentActivity;\r
 import eu.alefzero.owncloud.R;\r
 import android.os.Bundle;\r
 import android.support.v4.app.FragmentActivity;\r
 import eu.alefzero.owncloud.R;\r
+import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
 \r
 /**\r
  * This activity is used as a landing page when the user first opens this app.\r
  * \r
  * @author Lennart Rosam\r
  */\r
 \r
 /**\r
  * This activity is used as a landing page when the user first opens this app.\r
  * \r
  * @author Lennart Rosam\r
  */\r
-public class LandingActivity extends FragmentActivity {\r
+public class LandingActivity extends FragmentActivity implements OnClickListener {\r
 \r
 \r
+       public static final int DIALOG_SETUP_ACCOUNT = 1;\r
+       \r
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
                super.onCreate(savedInstanceState);\r
                setContentView(R.layout.landing_page);\r
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
                super.onCreate(savedInstanceState);\r
                setContentView(R.layout.landing_page);\r
+               \r
+               // Check, if there are ownCloud accounts\r
+               if(!accountsAreSetup()){\r
+                       showDialog(DIALOG_SETUP_ACCOUNT);\r
+               }\r
 \r
        }\r
 \r
 \r
        }\r
 \r
+       @Override\r
+       protected Dialog onCreateDialog(int id) {\r
+               Dialog dialog;\r
+               switch(id){\r
+               case DIALOG_SETUP_ACCOUNT:\r
+                       AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
+                       builder.setTitle(R.string.main_tit_accsetup);\r
+                       builder.setMessage(R.string.main_wrn_accsetup);\r
+                       builder.setCancelable(false);\r
+                       builder.setPositiveButton(R.string.common_ok, this);\r
+                       builder.setNegativeButton(R.string.common_cancel, this);\r
+                       dialog = builder.create();\r
+                       break;\r
+               default: \r
+                       dialog = null;\r
+               }\r
+                       \r
+               return dialog;\r
+       }\r
+\r
+       @Override\r
+       public void onClick(DialogInterface dialog, int which) {\r
+               // In any case - we won't need it anymore\r
+               dialog.dismiss();\r
+               switch(which){\r
+               case DialogInterface.BUTTON_POSITIVE:\r
+                       Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");\r
+                       intent.putExtra("authorities",\r
+                                       new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });\r
+                       startActivity(intent);\r
+                       break;\r
+               case DialogInterface.BUTTON_NEGATIVE:\r
+                       finish();\r
+               }\r
+               \r
+       }\r
+       \r
+       /**\r
+        * Checks, whether or not there are any ownCloud accounts \r
+        * setup. \r
+        *  \r
+        * @return true, if there is at least one account.\r
+        */\r
+       private boolean accountsAreSetup() {\r
+               AccountManager accMan = AccountManager.get(this);\r
+               Account[] accounts = accMan\r
+                               .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE); \r
+               return accounts.length > 0;\r
+       }\r
+       \r
+\r
 }\r
 }\r
diff --git a/src/eu/alefzero/owncloud/ui/adapter/LandingScreenAdapter.java b/src/eu/alefzero/owncloud/ui/adapter/LandingScreenAdapter.java
new file mode 100644 (file)
index 0000000..d14ac0f
--- /dev/null
@@ -0,0 +1,87 @@
+package eu.alefzero.owncloud.ui.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+import eu.alefzero.owncloud.R;
+import eu.alefzero.owncloud.ui.FileDisplayActivity;
+import eu.alefzero.owncloud.ui.Preferences;
+
+/**
+ * Populates the landing screen icons.
+ * @author Benutzer
+ *
+ */
+public class LandingScreenAdapter extends BaseAdapter {
+       
+       private Context mContext;
+
+       private final Integer[] mLandingScreenIcons = { R.drawable.home,
+                       R.drawable.music, R.drawable.contacts,
+                       R.drawable.calendar,
+                       android.R.drawable.ic_menu_agenda,
+                       R.drawable.settings };
+
+       private final Integer[] mLandingScreenTexts = { R.string.main_files,
+                       R.string.main_music, R.string.main_contacts,
+                       R.string.main_calendar, R.string.main_bookmarks,
+                       R.string.main_settings };
+
+       public LandingScreenAdapter(Context context) {
+               mContext = context;
+       }
+
+       @Override
+       public int getCount() {
+               return mLandingScreenIcons.length;
+       }
+
+       @Override
+       /**
+        * Returns the Intent associated with this object
+        * or null if the functionality is not yet implemented
+        */
+       public Object getItem(int position) {
+               Intent intent = new Intent();
+               switch (position) {
+               case 0:
+                       intent.setClass(mContext, FileDisplayActivity.class);
+                       break;
+               case 5:
+                       intent.setClass(mContext, Preferences.class);
+                       break;
+               default:
+                       intent = null;
+               }
+               return intent;
+       }
+
+       @Override
+       public long getItemId(int position) {
+               return position;
+       }
+
+       @Override
+       public View getView(int position, View convertView, ViewGroup parent) {
+               if (convertView == null) {
+                       LayoutInflater inflator = LayoutInflater.from(mContext);
+                       convertView = inflator
+                                       .inflate(R.layout.landing_page_item, null);
+
+                       ImageView icon = (ImageView) convertView
+                                       .findViewById(R.id.gridImage);
+                       TextView iconText = (TextView) convertView
+                                       .findViewById(R.id.gridText);
+
+                       icon.setImageResource(mLandingScreenIcons[position]);
+                       iconText.setText(mLandingScreenTexts[position]);
+               }
+               return convertView;
+       }
+
+}
index 5d2d92e..6965114 100644 (file)
@@ -1,26 +1,17 @@
 package eu.alefzero.owncloud.ui.fragment;\r
 \r
 package eu.alefzero.owncloud.ui.fragment;\r
 \r
-import android.accounts.Account;\r
-import android.accounts.AccountManager;\r
-import android.content.Context;\r
 import android.content.Intent;\r
 import android.os.Bundle;\r
 import android.support.v4.app.Fragment;\r
 import android.content.Intent;\r
 import android.os.Bundle;\r
 import android.support.v4.app.Fragment;\r
-import android.util.Log;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.widget.AdapterView;\r
 import android.widget.AdapterView.OnItemClickListener;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.widget.AdapterView;\r
 import android.widget.AdapterView.OnItemClickListener;\r
-import android.widget.BaseAdapter;\r
 import android.widget.GridView;\r
 import android.widget.GridView;\r
-import android.widget.ImageView;\r
-import android.widget.TextView;\r
 import android.widget.Toast;\r
 import eu.alefzero.owncloud.R;\r
 import android.widget.Toast;\r
 import eu.alefzero.owncloud.R;\r
-import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
-import eu.alefzero.owncloud.ui.FileDisplayActivity;\r
-import eu.alefzero.owncloud.ui.Preferences;\r
+import eu.alefzero.owncloud.ui.adapter.LandingScreenAdapter;\r
 \r
 public class LandingPageFragment extends Fragment implements OnItemClickListener {\r
 \r
 \r
 public class LandingPageFragment extends Fragment implements OnItemClickListener {\r
 \r
@@ -42,130 +33,20 @@ public class LandingPageFragment extends Fragment implements OnItemClickListener
        \r
        @Override\r
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
        \r
        @Override\r
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
-               Intent intent;\r
-               \r
-               /**\r
-                * If the user selects something and acounts are setup,\r
-                * we can use our LandingScreenAdapter to get the matching\r
-                * intent for the selected item.\r
-                * \r
-                * Otherwise, the accounsAreSetuo() method will trigger the \r
-                * creation of one.\r
+               /*\r
+                * Start an activity based on the selection\r
+                * the user made\r
                 */\r
                 */\r
-               if(accountsAreSetup()){\r
-                       intent = (Intent) parent.getAdapter().getItem(position);\r
-                       if(intent != null ){\r
-                               startActivity(intent);\r
-                       } else {\r
-                               Toast toast = Toast.makeText(getActivity(), "Not yet implemented!", Toast.LENGTH_SHORT);\r
-                               toast.show();\r
-                       }\r
-                       \r
-               } \r
-       }\r
-\r
-       /**\r
-        * Checks, whether or not there are any ownCloud accounts \r
-        * setup. If there is none, it will create one.\r
-        * \r
-        * If there are more then one, it will trigger a selection\r
-        * unless the selection has not been made yet.\r
-        * \r
-        * @return true, if there is at least one account.\r
-        */\r
-       private boolean accountsAreSetup() {\r
-               AccountManager accMan = AccountManager.get(getActivity());\r
-               Account[] accounts = accMan\r
-                               .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);\r
-\r
-               if (accounts.length == 0) {\r
-                       Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");\r
-                       intent.putExtra("authorities",\r
-                                       new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });\r
+               Intent intent;\r
+               intent = (Intent) parent.getAdapter().getItem(position);\r
+               if(intent != null ){\r
                        startActivity(intent);\r
                        startActivity(intent);\r
-                       return false;\r
-               } else if (accounts.length > 1) {\r
-                       // TODO: Figure out what to do.\r
-               } \r
-\r
-               return true;\r
-       }\r
-\r
-       /**\r
-        * Used to populate the landing page grid.\r
-        * Defined this one right in here as private class\r
-        * as it is unlikely that this Adapter can be useful\r
-        * anywhere else.\r
-        *  \r
-        * @author Lennart Rosam\r
-        *\r
-        */\r
-       private class LandingScreenAdapter extends BaseAdapter {\r
-\r
-               private Context mContext;\r
-\r
-               private final Integer[] mLandingScreenIcons = { R.drawable.home,\r
-                               R.drawable.music, R.drawable.contacts,\r
-                               android.R.drawable.ic_menu_today,\r
-                               android.R.drawable.ic_menu_agenda,\r
-                               android.R.drawable.ic_menu_preferences };\r
-\r
-               private final Integer[] mLandingScreenTexts = { R.string.main_files,\r
-                               R.string.main_music, R.string.main_contacts,\r
-                               R.string.main_calendar, R.string.main_bookmarks,\r
-                               R.string.main_settings };\r
-\r
-               public LandingScreenAdapter(Context context) {\r
-                       mContext = context;\r
-               }\r
-\r
-               @Override\r
-               public int getCount() {\r
-                       return mLandingScreenIcons.length;\r
+               } else {\r
+                       Toast toast = Toast.makeText(getActivity(), "Not yet implemented!", Toast.LENGTH_SHORT);\r
+                       toast.show();\r
                }\r
                }\r
-\r
-               @Override\r
-               /**\r
-                * Returns the Intent associated with this object\r
-                * or null if the functionality is not yet implemented\r
-                */\r
-               public Object getItem(int position) {\r
-                       Intent intent = new Intent();\r
-                       switch (position) {\r
-                       case 0:\r
-                               intent.setClass(mContext, FileDisplayActivity.class);\r
-                               break;\r
-                       case 5:\r
-                               intent.setClass(mContext, Preferences.class);\r
-                               break;\r
-                       default:\r
-                               intent = null;\r
-                       }\r
-                       return intent;\r
-               }\r
-\r
-               @Override\r
-               public long getItemId(int position) {\r
-                       return position;\r
-               }\r
-\r
-               @Override\r
-               public View getView(int position, View convertView, ViewGroup parent) {\r
-                       if (convertView == null) {\r
-                               LayoutInflater inflator = LayoutInflater.from(mContext);\r
-                               convertView = inflator\r
-                                               .inflate(R.layout.landing_page_item, null);\r
-\r
-                               ImageView icon = (ImageView) convertView\r
-                                               .findViewById(R.id.gridImage);\r
-                               TextView iconText = (TextView) convertView\r
-                                               .findViewById(R.id.gridText);\r
-\r
-                               icon.setImageResource(mLandingScreenIcons[position]);\r
-                               iconText.setText(mLandingScreenTexts[position]);\r
-                       }\r
-                       return convertView;\r
-               }\r
-\r
        }\r
        }\r
+\r
+       \r
+       \r
 }\r
 }\r