From: Lennart Rosam Date: Sun, 22 Jan 2012 20:08:47 +0000 (+0100) Subject: Added a landing page for the app. X-Git-Tag: oc-android-1.4.3~493 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/32ce46d9d8cf682d1e463faa1c30dbe5382835b4 Added a landing page for the app. --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8dd03ade..2500eaa5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -25,13 +25,7 @@ - - - - - - + @@ -71,5 +65,13 @@ + + + + + + \ No newline at end of file diff --git a/res/drawable-hdpi/contacts.png b/res/drawable-hdpi/contacts.png new file mode 100644 index 00000000..6436cfa9 Binary files /dev/null and b/res/drawable-hdpi/contacts.png differ diff --git a/res/drawable-hdpi/home.png b/res/drawable-hdpi/home.png new file mode 100644 index 00000000..06362e55 Binary files /dev/null and b/res/drawable-hdpi/home.png differ diff --git a/res/drawable-hdpi/music.png b/res/drawable-hdpi/music.png new file mode 100644 index 00000000..1c7a1f0a Binary files /dev/null and b/res/drawable-hdpi/music.png differ diff --git a/res/drawable-ldpi/contacts.png b/res/drawable-ldpi/contacts.png new file mode 100644 index 00000000..fe4bced5 Binary files /dev/null and b/res/drawable-ldpi/contacts.png differ diff --git a/res/drawable-ldpi/home.png b/res/drawable-ldpi/home.png new file mode 100644 index 00000000..f2227be4 Binary files /dev/null and b/res/drawable-ldpi/home.png differ diff --git a/res/drawable-ldpi/music.png b/res/drawable-ldpi/music.png new file mode 100644 index 00000000..aa4aac16 Binary files /dev/null and b/res/drawable-ldpi/music.png differ diff --git a/res/drawable-mdpi/contacts.png b/res/drawable-mdpi/contacts.png new file mode 100644 index 00000000..1704265b Binary files /dev/null and b/res/drawable-mdpi/contacts.png differ diff --git a/res/drawable-mdpi/home.png b/res/drawable-mdpi/home.png new file mode 100644 index 00000000..b6d6ccd6 Binary files /dev/null and b/res/drawable-mdpi/home.png differ diff --git a/res/drawable-mdpi/music.png b/res/drawable-mdpi/music.png new file mode 100644 index 00000000..c76c778b Binary files /dev/null and b/res/drawable-mdpi/music.png differ diff --git a/res/drawable/bookmarks.png b/res/drawable/bookmarks.png new file mode 100644 index 00000000..b92e4f50 Binary files /dev/null and b/res/drawable/bookmarks.png differ diff --git a/res/drawable/calendar.png b/res/drawable/calendar.png new file mode 100644 index 00000000..ee0249b2 Binary files /dev/null and b/res/drawable/calendar.png differ diff --git a/res/drawable/home.png b/res/drawable/home.png new file mode 100644 index 00000000..b3fb9bba Binary files /dev/null and b/res/drawable/home.png differ diff --git a/res/drawable/music.png b/res/drawable/music.png new file mode 100644 index 00000000..4c844425 Binary files /dev/null and b/res/drawable/music.png differ diff --git a/res/layout/landing_page.xml b/res/layout/landing_page.xml new file mode 100644 index 00000000..ef4705b6 --- /dev/null +++ b/res/layout/landing_page.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/landing_page_fragment.xml b/res/layout/landing_page_fragment.xml new file mode 100644 index 00000000..13e5b07f --- /dev/null +++ b/res/layout/landing_page_fragment.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/landing_page_item.xml b/res/layout/landing_page_item.xml new file mode 100644 index 00000000..66fe32ad --- /dev/null +++ b/res/layout/landing_page_item.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/src/eu/alefzero/owncloud/ui/LandingActivity.java b/src/eu/alefzero/owncloud/ui/LandingActivity.java new file mode 100644 index 00000000..acad25f1 --- /dev/null +++ b/src/eu/alefzero/owncloud/ui/LandingActivity.java @@ -0,0 +1,38 @@ +/* ownCloud Android client application + * Copyright (C) 2012 Lennart Rosam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package eu.alefzero.owncloud.ui; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import eu.alefzero.owncloud.R; + +/** + * This activity is used as a landing page when the user first opens this app. + * + * @author Lennart Rosam + */ +public class LandingActivity extends FragmentActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.landing_page); + + } + +} diff --git a/src/eu/alefzero/owncloud/ui/fragment/LandingPageFragment.java b/src/eu/alefzero/owncloud/ui/fragment/LandingPageFragment.java new file mode 100644 index 00000000..5d2d92e2 --- /dev/null +++ b/src/eu/alefzero/owncloud/ui/fragment/LandingPageFragment.java @@ -0,0 +1,171 @@ +package eu.alefzero.owncloud.ui.fragment; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; +import eu.alefzero.owncloud.R; +import eu.alefzero.owncloud.authenticator.AccountAuthenticator; +import eu.alefzero.owncloud.ui.FileDisplayActivity; +import eu.alefzero.owncloud.ui.Preferences; + +public class LandingPageFragment extends Fragment implements OnItemClickListener { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.landing_page_fragment, container); + return root; + } + + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + GridView grid = (GridView) getView().findViewById(R.id.gridview); + grid.setAdapter(new LandingScreenAdapter(getActivity())); + grid.setOnItemClickListener(this); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent; + + /** + * If the user selects something and acounts are setup, + * we can use our LandingScreenAdapter to get the matching + * intent for the selected item. + * + * Otherwise, the accounsAreSetuo() method will trigger the + * creation of one. + */ + if(accountsAreSetup()){ + intent = (Intent) parent.getAdapter().getItem(position); + if(intent != null ){ + startActivity(intent); + } else { + Toast toast = Toast.makeText(getActivity(), "Not yet implemented!", Toast.LENGTH_SHORT); + toast.show(); + } + + } + } + + /** + * Checks, whether or not there are any ownCloud accounts + * setup. If there is none, it will create one. + * + * If there are more then one, it will trigger a selection + * unless the selection has not been made yet. + * + * @return true, if there is at least one account. + */ + private boolean accountsAreSetup() { + AccountManager accMan = AccountManager.get(getActivity()); + Account[] accounts = accMan + .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE); + + if (accounts.length == 0) { + Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); + intent.putExtra("authorities", + new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE }); + startActivity(intent); + return false; + } else if (accounts.length > 1) { + // TODO: Figure out what to do. + } + + return true; + } + + /** + * Used to populate the landing page grid. + * Defined this one right in here as private class + * as it is unlikely that this Adapter can be useful + * anywhere else. + * + * @author Lennart Rosam + * + */ + private class LandingScreenAdapter extends BaseAdapter { + + private Context mContext; + + private final Integer[] mLandingScreenIcons = { R.drawable.home, + R.drawable.music, R.drawable.contacts, + android.R.drawable.ic_menu_today, + android.R.drawable.ic_menu_agenda, + android.R.drawable.ic_menu_preferences }; + + 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; + } + + } +}