diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c66c64d6a8..098033c3a0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -18,7 +18,7 @@ --> + android:versionName="0.1.135B" xmlns:android="http://schemas.android.com/apk/res/android"> diff --git a/src/eu/alefzero/owncloud/AccountUtils.java b/src/eu/alefzero/owncloud/AccountUtils.java index 090dec3867..d088d2ceb3 100644 --- a/src/eu/alefzero/owncloud/AccountUtils.java +++ b/src/eu/alefzero/owncloud/AccountUtils.java @@ -68,6 +68,21 @@ public class AccountUtils { return defaultAccount; } + + + /** + * Checks, whether or not there are any ownCloud accounts setup. + * + * @return true, if there is at least one account. + */ + public static boolean accountsAreSetup(Context context) { + AccountManager accMan = AccountManager.get(context); + Account[] accounts = accMan + .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE); + return accounts.length > 0; + } + + public static void setCurrentOwnCloudAccount(Context context, String name) { SharedPreferences.Editor appPrefs = PreferenceManager .getDefaultSharedPreferences(context).edit(); diff --git a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java index ec4def422a..e8f9151e77 100644 --- a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java +++ b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java @@ -18,10 +18,7 @@ package eu.alefzero.owncloud.ui.activity; -import java.io.BufferedReader; import java.io.File; -import java.io.InputStreamReader; -import java.lang.Thread.UncaughtExceptionHandler; import java.util.ArrayList; import android.accounts.Account; @@ -37,18 +34,15 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; -import android.telephony.TelephonyManager; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; -import android.widget.CheckedTextView; import android.widget.EditText; import android.widget.TextView; @@ -81,16 +75,17 @@ import eu.alefzero.webdav.WebdavClient; */ public class FileDisplayActivity extends SherlockFragmentActivity implements - OnNavigationListener, OnClickListener, android.view.View.OnClickListener { + OnNavigationListener, OnClickListener, android.view.View.OnClickListener { + private ArrayAdapter mDirectories; - private DataStorageManager mStorageManager; - private FileListFragment mFileList; private OCFile mCurrentDir; private String[] mDirs = null; - private SyncBroadcastReceiver syncBroadcastRevceiver; + private DataStorageManager mStorageManager; + private SyncBroadcastReceiver syncBroadcastReceiver; private View mLayoutView = null; + private FileListFragment mFileList; private static final String KEY_DIR_ARRAY = "DIR_ARRAY"; private static final String KEY_CURRENT_DIR = "DIR"; @@ -98,39 +93,37 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements private static final int DIALOG_SETUP_ACCOUNT = 0; private static final int DIALOG_CREATE_DIR = 1; private static final int DIALOG_ABOUT_APP = 2; + private static final int ACTION_SELECT_FILE = 1; + //private static final int ACTION_CREATE_FIRST_ACCOUNT = 2; dvelasco: WIP @Override public void onCreate(Bundle savedInstanceState) { + Log.i(getClass().toString(), "onCreate() start"); super.onCreate(savedInstanceState); - // TODO: fix hack: workaround for bug in actionbar sherlock - // it always shows indeterminate progress bar - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); - setProgressBarIndeterminateVisibility(false); - } + requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + setSupportProgressBarIndeterminateVisibility(false); Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getApplicationContext())); if(savedInstanceState != null){ - mCurrentDir = (OCFile) savedInstanceState.getParcelable(KEY_CURRENT_DIR); + mCurrentDir = (OCFile) savedInstanceState.getParcelable(KEY_CURRENT_DIR); // this is never saved with this key :S } - if (findViewById(R.id.file_list_view) == null) - mLayoutView = getLayoutInflater().inflate(R.layout.files, null); // always inflate this at onCreate() ; just once! + mLayoutView = getLayoutInflater().inflate(R.layout.files, null); // always inflate this at onCreate() ; just once! - //TODO: Dialog useless -> get rid of this - if (!accountsAreSetup()) { + if (AccountUtils.accountsAreSetup(this)) { + setContentView(mLayoutView); + + } else { setContentView(R.layout.no_account_available); setProgressBarIndeterminateVisibility(false); getSupportActionBar().setNavigationMode(ActionBar.DISPLAY_SHOW_TITLE); findViewById(R.id.setup_account).setOnClickListener(this); - - } else if (findViewById(R.id.file_list_view) == null) { - setContentView(mLayoutView); } + Log.i(getClass().toString(), "onCreate() end"); } @Override @@ -199,8 +192,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements * Called, when the user selected something for uploading */ public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode == RESULT_OK) { - if (requestCode == ACTION_SELECT_FILE) { + if (requestCode == ACTION_SELECT_FILE) { + if (resultCode == RESULT_OK) { Uri selectedImageUri = data.getData(); String filemanagerstring = selectedImageUri.getPath(); @@ -234,7 +227,13 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE); startService(i); } - } + + }/* dvelasco: WIP - not working as expected ... yet :) + else if (requestCode == ACTION_CREATE_FIRST_ACCOUNT) { + if (resultCode != RESULT_OK) { + finish(); // the user cancelled the AuthenticatorActivity + } + }*/ } @Override @@ -255,6 +254,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { + Log.i(getClass().toString(), "onRestoreInstanceState() start"); super.onRestoreInstanceState(savedInstanceState); mDirs = savedInstanceState.getStringArray(KEY_DIR_ARRAY); mDirectories = new CustomArrayAdapter(this, R.layout.sherlock_spinner_dropdown_item); @@ -263,10 +263,12 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements for (String s : mDirs) mDirectories.insert(s, 0); mCurrentDir = savedInstanceState.getParcelable(FileDetailFragment.EXTRA_FILE); + Log.i(getClass().toString(), "onRestoreInstanceState() end"); } @Override protected void onSaveInstanceState(Bundle outState) { + Log.i(getClass().toString(), "onSaveInstanceState() start"); super.onSaveInstanceState(outState); if(mDirectories != null && mDirectories.getCount() != 0){ mDirs = new String[mDirectories.getCount()-1]; @@ -276,20 +278,30 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements } outState.putStringArray(KEY_DIR_ARRAY, mDirs); outState.putParcelable(FileDetailFragment.EXTRA_FILE, mCurrentDir); + Log.i(getClass().toString(), "onSaveInstanceState() end"); } @Override protected void onResume() { + Log.i(getClass().toString(), "onResume() start"); super.onResume(); - if (accountsAreSetup()) { + if (!AccountUtils.accountsAreSetup(this)) { + /*Intent intent = new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT); + intent.putExtra(android.provider.Settings.EXTRA_AUTHORITIES, new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE }); + //startActivity(intent); + startActivityForResult(intent, ACTION_CREATE_FIRST_ACCOUNT);*/ + + } else { // at least an account exist: normal operation - setContentView(mLayoutView); // this should solve the crash by repeated inflating in big screens (DROIDCLOUD-27) + // set the layout only if it couldn't be set in onCreate + if (findViewById(R.id.file_list_view) == null) + setContentView(mLayoutView); // Listen for sync messages IntentFilter syncIntentFilter = new IntentFilter(FileSyncService.SYNC_MESSAGE); - syncBroadcastRevceiver = new SyncBroadcastReceiver(); - registerReceiver(syncBroadcastRevceiver, syncIntentFilter); + syncBroadcastReceiver = new SyncBroadcastReceiver(); + registerReceiver(syncBroadcastReceiver, syncIntentFilter); // Storage manager initialization mStorageManager = new FileDataStorageManager( @@ -355,16 +367,19 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements // List dir here mFileList.listDirectory(mCurrentDir); } + Log.i(getClass().toString(), "onResume() end"); } @Override protected void onPause() { + Log.i(getClass().toString(), "onPause() start"); super.onPause(); - if (syncBroadcastRevceiver != null) { - unregisterReceiver(syncBroadcastRevceiver); - syncBroadcastRevceiver = null; + if (syncBroadcastReceiver != null) { + unregisterReceiver(syncBroadcastReceiver); + syncBroadcastReceiver = null; } getIntent().putExtra(FileDetailFragment.EXTRA_FILE, mCurrentDir); + Log.i(getClass().toString(), "onPause() end"); } @Override @@ -520,18 +535,6 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements return !mDirectories.isEmpty(); } - /** - * 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; - } - private class DirectoryCreator implements Runnable { private String mTargetPath; private Account mAccount; @@ -598,12 +601,12 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements .getStringExtra(FileSyncService.ACCOUNT_NAME); Log.d("FileDisplay", "sync of account " + account_name + " is in_progress: " + inProgress); - setProgressBarIndeterminateVisibility(inProgress); + setSupportProgressBarIndeterminateVisibility(inProgress); if (!inProgress) { - FileListFragment fileListFramgent = (FileListFragment) getSupportFragmentManager() + FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager() .findFragmentById(R.id.fileList); - if (fileListFramgent != null) - fileListFramgent.listDirectory(); + if (fileListFragment != null) + fileListFragment.listDirectory(); } } diff --git a/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java b/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java index ee69555336..0397e5b5f3 100644 --- a/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java +++ b/src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java @@ -203,9 +203,13 @@ public class FileDetailFragment extends SherlockFragment implements if (mFile.getMimetype().startsWith("image/")) { BitmapFactory.Options options = new Options(); options.inScaled = true; - options.inMutable = false; - options.inPreferQualityOverSpeed = false; options.inPurgeable = true; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { + options.inPreferQualityOverSpeed = false; + } + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { + options.inMutable = false; + } Bitmap bmp = BitmapFactory.decodeFile(mFile.getStoragePath(), options); @@ -224,6 +228,14 @@ public class FileDetailFragment extends SherlockFragment implements } catch (OutOfMemoryError e) { preview.setVisibility(View.INVISIBLE); Log.e(TAG, "Out of memory occured for file with size " + mFile.getFileLength()); + + } catch (NoSuchFieldError e) { + preview.setVisibility(View.INVISIBLE); + Log.e(TAG, "Error from access to unexisting field despite protection " + mFile.getFileLength()); + + } catch (Throwable t) { + preview.setVisibility(View.INVISIBLE); + Log.e(TAG, "Unexpected error while creating image preview " + mFile.getFileLength()); } downloadButton.setText(R.string.filedetails_open); downloadButton.setOnClickListener(new OnClickListener() { diff --git a/src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java b/src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java index 3aedfad3db..3cfead5724 100644 --- a/src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java +++ b/src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java @@ -50,36 +50,40 @@ import eu.alefzero.owncloud.ui.adapter.FileListListAdapter; */ public class FileListFragment extends FragmentListView { private static final String TAG = "FileListFragment"; - //private Account mAccount; // dvelasco : the fragment is not recreated when other account is selected; keep as an attribute is dangerous + private Vector mFiles; - //private DataStorageManager mStorageManager; // dvelasco : just the same; it depends upon the current account ; it's updated in FileDisplayActivity!! private OCFile mFile; - private boolean mIsLargeDevice = false; + private boolean mIsLargeDevice; @Override public void onCreate(Bundle savedInstanceState) { + Log.i(getClass().toString(), "onCreate() start"); super.onCreate(savedInstanceState); Intent intent = getActivity().getIntent(); OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE); mFile = directory; + mIsLargeDevice = false; + Log.i(getClass().toString(), "onCreate() stop"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + Log.i(getClass().toString(), "onCreateView() start"); super.onCreateView(inflater, container, savedInstanceState); getListView().setDivider(getResources().getDrawable(R.drawable.uploader_list_separator)); getListView().setDividerHeight(1); - //listDirectory(mFile); - + Log.i(getClass().toString(), "onCreateView() end"); return getListView(); } @Override public void onStart() { + Log.i(getClass().toString(), "onStart() start"); + super.onStart(); // Create a placeholder upon launch View fragmentContainer = getActivity().findViewById(R.id.file_details_container); if (fragmentContainer != null) { @@ -88,7 +92,7 @@ public class FileListFragment extends FragmentListView { transaction.replace(R.id.file_details_container, new FileDetailFragment(true)); transaction.commit(); } - super.onStart(); + Log.i(getClass().toString(), "onStart() end"); } @Override @@ -212,10 +216,4 @@ public class FileListFragment extends FragmentListView { setListAdapter(new FileListListAdapter(directory, storageManager, getActivity())); } - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putParcelable("ACCOUNT", AccountUtils.getCurrentOwnCloudAccount(getActivity())); - } - }