Эх сурвалжийг харах

Fixed preview of images in Android 2.x ; fixed synchronization progress indicator in Android <4.0

David A. Velasco 13 жил өмнө
parent
commit
3ce234e6c7

+ 1 - 1
AndroidManifest.xml

@@ -18,7 +18,7 @@
  -->
 <manifest package="eu.alefzero.owncloud"
     android:versionCode="1"
-    android:versionName="0.1.134B" xmlns:android="http://schemas.android.com/apk/res/android">
+    android:versionName="0.1.135B" xmlns:android="http://schemas.android.com/apk/res/android">
 
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="android.permission.USE_CREDENTIALS" />

+ 15 - 0
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();

+ 53 - 50
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<String> 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<String>(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();
             }
         }
 

+ 14 - 2
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() {

+ 10 - 12
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<OCFile> 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()));
-    }
-
 }