mirror of
https://github.com/nextcloud/android.git
synced 2024-11-22 05:05:31 +03:00
Improved first run experience and added additional icons
This commit is contained in:
parent
329080075e
commit
896f145cf6
10 changed files with 170 additions and 134 deletions
BIN
res/drawable-hdpi/calendar.png
Normal file
BIN
res/drawable-hdpi/calendar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4 KiB |
BIN
res/drawable-hdpi/settings.png
Normal file
BIN
res/drawable-hdpi/settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.5 KiB |
BIN
res/drawable-ldpi/calendar.png
Normal file
BIN
res/drawable-ldpi/calendar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
BIN
res/drawable-ldpi/settings.png
Normal file
BIN
res/drawable-ldpi/settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.6 KiB |
BIN
res/drawable-mdpi/calendar.png
Normal file
BIN
res/drawable-mdpi/calendar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
BIN
res/drawable-mdpi/settings.png
Normal file
BIN
res/drawable-mdpi/settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.3 KiB |
|
@ -12,6 +12,8 @@
|
||||||
<string name="main_calendar">Calendar</string>
|
<string name="main_calendar">Calendar</string>
|
||||||
<string name="main_bookmarks">Bookmarks</string>
|
<string name="main_bookmarks">Bookmarks</string>
|
||||||
<string name="main_settings">Settings</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_general">General</string>
|
||||||
<string name="prefs_sessions">Stored sessions</string>
|
<string name="prefs_sessions">Stored sessions</string>
|
||||||
<string name="prefs_add_session">Add new session</string>
|
<string name="prefs_add_session">Add new session</string>
|
||||||
|
@ -32,7 +34,7 @@
|
||||||
<string name="setup_btn_connect">Connect</string>
|
<string name="setup_btn_connect">Connect</string>
|
||||||
<string name="uploader_btn_upload_text">Upload</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_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_setup_btn_text">Setup</string>
|
||||||
<string name="uploader_wrn_no_account_quit_btn_text">Quit</string>
|
<string name="uploader_wrn_no_account_quit_btn_text">Quit</string>
|
||||||
<string name="uploader_info_uploading">Uploading</string>
|
<string name="uploader_info_uploading">Uploading</string>
|
||||||
|
|
|
@ -17,22 +17,88 @@
|
||||||
*/
|
*/
|
||||||
package eu.alefzero.owncloud.ui;
|
package eu.alefzero.owncloud.ui;
|
||||||
|
|
||||||
|
import android.accounts.Account;
|
||||||
|
import android.accounts.AccountManager;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.DialogInterface.OnClickListener;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.FragmentActivity;
|
import android.support.v4.app.FragmentActivity;
|
||||||
import eu.alefzero.owncloud.R;
|
import eu.alefzero.owncloud.R;
|
||||||
|
import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This activity is used as a landing page when the user first opens this app.
|
* This activity is used as a landing page when the user first opens this app.
|
||||||
*
|
*
|
||||||
* @author Lennart Rosam
|
* @author Lennart Rosam
|
||||||
*/
|
*/
|
||||||
public class LandingActivity extends FragmentActivity {
|
public class LandingActivity extends FragmentActivity implements OnClickListener {
|
||||||
|
|
||||||
|
public static final int DIALOG_SETUP_ACCOUNT = 1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.landing_page);
|
setContentView(R.layout.landing_page);
|
||||||
|
|
||||||
|
// Check, if there are ownCloud accounts
|
||||||
|
if(!accountsAreSetup()){
|
||||||
|
showDialog(DIALOG_SETUP_ACCOUNT);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Dialog onCreateDialog(int id) {
|
||||||
|
Dialog dialog;
|
||||||
|
switch(id){
|
||||||
|
case DIALOG_SETUP_ACCOUNT:
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||||
|
builder.setTitle(R.string.main_tit_accsetup);
|
||||||
|
builder.setMessage(R.string.main_wrn_accsetup);
|
||||||
|
builder.setCancelable(false);
|
||||||
|
builder.setPositiveButton(R.string.common_ok, this);
|
||||||
|
builder.setNegativeButton(R.string.common_cancel, this);
|
||||||
|
dialog = builder.create();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dialog = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
// In any case - we won't need it anymore
|
||||||
|
dialog.dismiss();
|
||||||
|
switch(which){
|
||||||
|
case DialogInterface.BUTTON_POSITIVE:
|
||||||
|
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
|
||||||
|
intent.putExtra("authorities",
|
||||||
|
new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });
|
||||||
|
startActivity(intent);
|
||||||
|
break;
|
||||||
|
case DialogInterface.BUTTON_NEGATIVE:
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks, whether or not there are any ownCloud accounts
|
||||||
|
* setup.
|
||||||
|
*
|
||||||
|
* @return true, if there is at least one account.
|
||||||
|
*/
|
||||||
|
private boolean accountsAreSetup() {
|
||||||
|
AccountManager accMan = AccountManager.get(this);
|
||||||
|
Account[] accounts = accMan
|
||||||
|
.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
|
||||||
|
return accounts.length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,26 +1,17 @@
|
||||||
package eu.alefzero.owncloud.ui.fragment;
|
package eu.alefzero.owncloud.ui.fragment;
|
||||||
|
|
||||||
import android.accounts.Account;
|
|
||||||
import android.accounts.AccountManager;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.AdapterView.OnItemClickListener;
|
import android.widget.AdapterView.OnItemClickListener;
|
||||||
import android.widget.BaseAdapter;
|
|
||||||
import android.widget.GridView;
|
import android.widget.GridView;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import eu.alefzero.owncloud.R;
|
import eu.alefzero.owncloud.R;
|
||||||
import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
|
import eu.alefzero.owncloud.ui.adapter.LandingScreenAdapter;
|
||||||
import eu.alefzero.owncloud.ui.FileDisplayActivity;
|
|
||||||
import eu.alefzero.owncloud.ui.Preferences;
|
|
||||||
|
|
||||||
public class LandingPageFragment extends Fragment implements OnItemClickListener {
|
public class LandingPageFragment extends Fragment implements OnItemClickListener {
|
||||||
|
|
||||||
|
@ -42,130 +33,20 @@ public class LandingPageFragment extends Fragment implements OnItemClickListener
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
/*
|
||||||
|
* Start an activity based on the selection
|
||||||
|
* the user made
|
||||||
|
*/
|
||||||
Intent intent;
|
Intent intent;
|
||||||
|
intent = (Intent) parent.getAdapter().getItem(position);
|
||||||
/**
|
if(intent != null ){
|
||||||
* 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);
|
startActivity(intent);
|
||||||
return false;
|
} else {
|
||||||
} else if (accounts.length > 1) {
|
Toast toast = Toast.makeText(getActivity(), "Not yet implemented!", Toast.LENGTH_SHORT);
|
||||||
// TODO: Figure out what to do.
|
toast.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue