Browse Source

Added a landing page for the app.

Lennart Rosam 13 years ago
parent
commit
32ce46d9d8

+ 9 - 7
AndroidManifest.xml

@@ -25,13 +25,7 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
 
     <application android:icon="@drawable/icon" android:label="@string/app_name">
-        <activity android:name=".ui.FileDisplayActivity"
-                  android:label="@string/app_name">
-                  <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
+        <activity android:name=".ui.FileDisplayActivity"></activity>
         <activity android:name=".Uploader">
             <intent-filter>
                 <action android:name="android.intent.action.SEND"></action>
@@ -71,5 +65,13 @@
          <service android:name=".FileDownloader">
          </service>
          <activity android:name=".ui.FileDetailActivity"></activity>
+         <activity android:name=".ui.LandingActivity"
+             android:theme="@android:style/Theme.NoTitleBar"
+             android:label="@string/app_name">
+             <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+         </activity>
     </application>
 </manifest>

BIN
res/drawable-hdpi/contacts.png


BIN
res/drawable-hdpi/home.png


BIN
res/drawable-hdpi/music.png


BIN
res/drawable-ldpi/contacts.png


BIN
res/drawable-ldpi/home.png


BIN
res/drawable-ldpi/music.png


BIN
res/drawable-mdpi/contacts.png


BIN
res/drawable-mdpi/home.png


BIN
res/drawable-mdpi/music.png


BIN
res/drawable/bookmarks.png


BIN
res/drawable/calendar.png


BIN
res/drawable/home.png


BIN
res/drawable/music.png


+ 26 - 0
res/layout/landing_page.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:background="#F7F7F7"
+    android:orientation="vertical" >
+
+    <fragment
+        android:id="@+id/actionBar"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        class="eu.alefzero.owncloud.ui.fragment.ActionBar" >
+        <!-- Preview: layout=@layout/action_bar -->
+    </fragment>
+    
+    <fragment
+        android:id="@+id/landingPage"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        class="eu.alefzero.owncloud.ui.fragment.LandingPageFragment" >
+        <!-- Preview: layout=@layout/landing_page_fragment -->
+    </fragment>
+
+    
+
+</LinearLayout>

+ 41 - 0
res/layout/landing_page_fragment.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/linearLayout1"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+
+    <ImageView
+        android:id="@+id/ocLogo"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:paddingTop="10dip"
+        android:src="@drawable/owncloud_logo" />
+
+    <TextView
+        android:id="@+id/textView0"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginBottom="15dip"
+        android:layout_marginTop="15dip"
+        android:text="@string/main_welcome"
+        android:textColor="@android:color/black"
+        android:textSize="7pt"
+        android:textStyle="bold" />
+
+    <GridView
+        android:id="@+id/gridview"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:layout_gravity="center_horizontal"
+        android:columnWidth="90dp"
+        android:gravity="center"
+        android:horizontalSpacing="10dp"
+        android:numColumns="2"
+        android:stretchMode="columnWidth"
+        android:verticalSpacing="10dp" >
+    </GridView>
+
+</LinearLayout>

+ 25 - 0
res/layout/landing_page_item.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:background="#F7F7F7"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent" >
+
+    <ImageView
+        android:id="@+id/gridImage"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:layout_centerHorizontal="true"
+        android:src="@drawable/action_item_btn" />
+


+    <TextView
+        android:id="@+id/gridText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/gridImage"
+        android:layout_centerHorizontal="true"
+        android:text="Medium Text"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textColor="@color/setup_text_hint" />
+
+</RelativeLayout>

+ 38 - 0
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 <http://www.gnu.org/licenses/>.
+ *
+ */
+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);
+
+	}
+
+}

+ 171 - 0
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;
+		}
+
+	}
+}