cached instant upload
authorBartek Przybylski <bart.p.pl@gmail.com>
Sun, 3 Jun 2012 17:59:14 +0000 (19:59 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Sun, 3 Jun 2012 17:59:14 +0000 (19:59 +0200)
AndroidManifest.xml
src/eu/alefzero/owncloud/db/DbHandler.java
src/eu/alefzero/owncloud/files/PhotoTakenBroadcastReceiver.java
src/eu/alefzero/owncloud/providers/FileContentProvider.java
src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java
src/eu/alefzero/owncloud/ui/activity/Preferences.java

index c6b774a..f591da8 100644 (file)
             <intent-filter>\r
                 <action android:name="com.android.camera.NEW_PICTURE" />\r
                 <data android:mimeType="image/*" />\r
             <intent-filter>\r
                 <action android:name="com.android.camera.NEW_PICTURE" />\r
                 <data android:mimeType="image/*" />\r
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
             </intent-filter>\r
         </receiver>\r
     </application>\r
             </intent-filter>\r
         </receiver>\r
     </application>\r
index ab35dda..23b8bb6 100644 (file)
@@ -39,54 +39,33 @@ public class DbHandler {
     private final String mDatabaseName = "ownCloud";\r
     private final String TABLE_SESSIONS = "sessions";\r
     private final int mDatabaseVersion = 1;\r
     private final String mDatabaseName = "ownCloud";\r
     private final String TABLE_SESSIONS = "sessions";\r
     private final int mDatabaseVersion = 1;\r
+    \r
+    private final String TABLE_INSTANT_UPLOAD = "instant_upload";\r
 \r
     public DbHandler(Context context) {\r
         mHelper = new OpenerHepler(context);\r
         mDB = mHelper.getWritableDatabase();\r
     }\r
 \r
 \r
     public DbHandler(Context context) {\r
         mHelper = new OpenerHepler(context);\r
         mDB = mHelper.getWritableDatabase();\r
     }\r
 \r
-    public Vector<OwnCloudSession> getSessionList() {\r
-        Cursor c = mDB\r
-                .query(TABLE_SESSIONS, null, null, null, null, null, null);\r
-        Vector<OwnCloudSession> v = new Vector<OwnCloudSession>();\r
-        if (!c.moveToFirst()) {\r
-            return v;\r
-        }\r
-        while (!c.isAfterLast()) {\r
-            v.add(new OwnCloudSession(c.getString(c\r
-                    .getColumnIndex("sessionName")), c.getString(c\r
-                    .getColumnIndex("sessionUrl")), c.getInt(c\r
-                    .getColumnIndex("_id"))));\r
-            c.moveToNext();\r
-        }\r
-        c.close();\r
-        return v;\r
+    public void close() {\r
+        mDB.close();\r
     }\r
 \r
     }\r
 \r
-    public void addSession(String sessionName, String uri) {\r
+    public boolean putFileForLater(String filepath, String account) {\r
         ContentValues cv = new ContentValues();\r
         ContentValues cv = new ContentValues();\r
-        cv.put("sessionName", sessionName);\r
-        cv.put("sessionUrl", uri);\r
-        mDB.insert(TABLE_SESSIONS, null, cv);\r
-    }\r
-\r
-    public void removeSessionWithId(int sessionId) {\r
-        mDB.delete(TABLE_SESSIONS, "_id = ?",\r
-                new String[] { String.valueOf(sessionId) });\r
+        cv.put("path", filepath);\r
+        cv.put("account", account);\r
+        return mDB.insert(TABLE_INSTANT_UPLOAD, null, cv) != -1;\r
     }\r
     }\r
-\r
-    public void changeSessionFields(int id, String hostname, String uri) {\r
-        ContentValues cv = new ContentValues();\r
-        cv.put("sessionName", hostname);\r
-        cv.put("sessionUrl", uri);\r
-        mDB.update(TABLE_SESSIONS, cv, "_id = ?",\r
-                new String[] { String.valueOf(id) });\r
+    \r
+    public Cursor getAwaitingFiles() {\r
+        return mDB.query(TABLE_INSTANT_UPLOAD, null, null, null, null, null, null);\r
     }\r
     }\r
-\r
-    public void close() {\r
-        mDB.close();\r
+    \r
+    public void clearFiles() {\r
+        mDB.delete(TABLE_INSTANT_UPLOAD, null, null);\r
     }\r
     }\r
-\r
+    \r
     private class OpenerHepler extends SQLiteOpenHelper {\r
         public OpenerHepler(Context context) {\r
             super(context, mDatabaseName, null, mDatabaseVersion);\r
     private class OpenerHepler extends SQLiteOpenHelper {\r
         public OpenerHepler(Context context) {\r
             super(context, mDatabaseName, null, mDatabaseVersion);\r
@@ -94,9 +73,10 @@ public class DbHandler {
 \r
         @Override\r
         public void onCreate(SQLiteDatabase db) {\r
 \r
         @Override\r
         public void onCreate(SQLiteDatabase db) {\r
-            db.execSQL("CREATE TABLE " + TABLE_SESSIONS + " ("\r
-                    + " _id INTEGER PRIMARY KEY, " + " sessionName TEXT, "\r
-                    + " sessionUrl  TEXT);");\r
+            db.execSQL("CREATE TABLE " + TABLE_INSTANT_UPLOAD + " ("\r
+                       + " _id INTEGET PRIMARY KEY, "\r
+                       + " path TEXT,"\r
+                       + " account TEXT);");\r
         }\r
 \r
         @Override\r
         }\r
 \r
         @Override\r
index 758413f..b6a0a60 100644 (file)
 
 package eu.alefzero.owncloud.files;
 
 
 package eu.alefzero.owncloud.files;
 
+import java.io.File;
+
 import eu.alefzero.owncloud.AccountUtils;
 import eu.alefzero.owncloud.R;
 import eu.alefzero.owncloud.AccountUtils;
 import eu.alefzero.owncloud.R;
+import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
+import eu.alefzero.owncloud.db.DbHandler;
 import eu.alefzero.owncloud.files.services.InstantUploadService;
 import android.accounts.Account;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
 import eu.alefzero.owncloud.files.services.InstantUploadService;
 import android.accounts.Account;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
+import android.net.ConnectivityManager;
 import android.preference.Preference;
 import android.preference.PreferenceManager;
 import android.provider.MediaStore.Images.Media;
 import android.util.Log;
 import android.preference.Preference;
 import android.preference.PreferenceManager;
 import android.provider.MediaStore.Images.Media;
 import android.util.Log;
+import android.webkit.MimeTypeMap;
 
 public class PhotoTakenBroadcastReceiver extends BroadcastReceiver {
 
 
 public class PhotoTakenBroadcastReceiver extends BroadcastReceiver {
 
@@ -44,10 +50,16 @@ public class PhotoTakenBroadcastReceiver extends BroadcastReceiver {
             Log.d(TAG, "Instant upload disabled, abording uploading");
             return;
         }
             Log.d(TAG, "Instant upload disabled, abording uploading");
             return;
         }
-        if (!intent.getAction().equals(NEW_PHOTO_ACTION)) {
+        if (intent.getAction().equals(android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
+            handleConnectivityAction(context, intent);
+        } else if (intent.getAction().equals(NEW_PHOTO_ACTION)) {
+            handleNewPhontoAction(context, intent);
+        } else {
             Log.e(TAG, "Incorrect intent sent: " + intent.getAction());
             Log.e(TAG, "Incorrect intent sent: " + intent.getAction());
-            return;
         }
         }
+    }
+
+    private void handleNewPhontoAction(Context context, Intent intent) {
         Account account = AccountUtils.getCurrentOwnCloudAccount(context);
         if (account == null) {
             Log.w(TAG, "No owncloud account found for instant upload, abording");
         Account account = AccountUtils.getCurrentOwnCloudAccount(context);
         if (account == null) {
             Log.w(TAG, "No owncloud account found for instant upload, abording");
@@ -68,6 +80,13 @@ public class PhotoTakenBroadcastReceiver extends BroadcastReceiver {
 
         c.close();
         
 
         c.close();
         
+        if (!isOnline(context)) {
+            DbHandler db = new DbHandler(context);
+            db.putFileForLater(file_path, account.name);
+            db.close();
+            return;
+        }
+        
         Intent upload_intent = new Intent(context, InstantUploadService.class);
         upload_intent.putExtra(InstantUploadService.KEY_ACCOUNT, account);
         upload_intent.putExtra(InstantUploadService.KEY_FILE_PATH, file_path);
         Intent upload_intent = new Intent(context, InstantUploadService.class);
         upload_intent.putExtra(InstantUploadService.KEY_ACCOUNT, account);
         upload_intent.putExtra(InstantUploadService.KEY_FILE_PATH, file_path);
@@ -78,4 +97,46 @@ public class PhotoTakenBroadcastReceiver extends BroadcastReceiver {
         context.startService(upload_intent);
     }
 
         context.startService(upload_intent);
     }
 
+    private void handleConnectivityAction(Context context, Intent intent) {
+        if (!intent.hasExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY) ||
+            isOnline(context)) {
+            DbHandler db = new DbHandler(context);
+            Cursor c = db.getAwaitingFiles();
+            if (c.moveToFirst()) {
+                do {
+                    String account_name = c.getString(c.getColumnIndex("account"));
+                    String file_path = c.getString(c.getColumnIndex("path"));
+                    File f = new File(file_path);
+                    if (f.exists()) {
+                        Intent upload_intent = new Intent(context, InstantUploadService.class);
+                        Account account = new Account(account_name, AccountAuthenticator.ACCOUNT_TYPE);
+                        
+                        String mimeType = MimeTypeMap.getSingleton()
+                                .getMimeTypeFromExtension(
+                                        f.getName().substring(f.getName().lastIndexOf('.') + 1));
+                        
+                        upload_intent.putExtra(InstantUploadService.KEY_ACCOUNT, account);
+                        upload_intent.putExtra(InstantUploadService.KEY_FILE_PATH, file_path);
+                        upload_intent.putExtra(InstantUploadService.KEY_DISPLAY_NAME, f.getName());
+                        upload_intent.putExtra(InstantUploadService.KEY_FILE_SIZE, f.length());
+                        upload_intent.putExtra(InstantUploadService.KEY_MIME_TYPE, mimeType);
+                        
+                        context.startService(upload_intent);
+                    } else {
+                        Log.w(TAG, "Instant upload file " + f.getName() + " dont exist anymore");
+                    }
+                } while(c.moveToNext());
+                c.close();
+            }
+            db.clearFiles();
+            db.close();
+        }
+        
+    }
+
+    private boolean isOnline(Context context) {
+        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
+    }
+    
 }
 }
index 06338df..b54aa21 100644 (file)
@@ -199,6 +199,7 @@ public class FileContentProvider extends ContentProvider {
 \r
         @Override\r
         public void onCreate(SQLiteDatabase db) {\r
 \r
         @Override\r
         public void onCreate(SQLiteDatabase db) {\r
+            // files table\r
             db.execSQL("CREATE TABLE " + ProviderTableMeta.DB_NAME + "("\r
                     + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "\r
                     + ProviderTableMeta.FILE_NAME + " TEXT, "\r
             db.execSQL("CREATE TABLE " + ProviderTableMeta.DB_NAME + "("\r
                     + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "\r
                     + ProviderTableMeta.FILE_NAME + " TEXT, "\r
index c0a84bb..5c02703 100644 (file)
@@ -191,7 +191,6 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
                 if (!remotepath.endsWith("/"))\r
                     remotepath += "/";\r
                 remotepath += URLEncoder.encode(new File(filepath).getName());\r
                 if (!remotepath.endsWith("/"))\r
                     remotepath += "/";\r
                 remotepath += URLEncoder.encode(new File(filepath).getName());\r
-                Log.e("ASD", remotepath + "");\r
     \r
                 i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath);\r
                 i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath);\r
     \r
                 i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath);\r
                 i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath);\r
index 01a21ec..7de3227 100644 (file)
  */\r
 package eu.alefzero.owncloud.ui.activity;\r
 \r
  */\r
 package eu.alefzero.owncloud.ui.activity;\r
 \r
-import java.net.URI;\r
-import java.net.URISyntaxException;\r
 import java.util.Vector;\r
 \r
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
 import java.util.Vector;\r
 \r
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
-import android.app.Activity;\r
 import android.content.Intent;\r
 import android.os.Bundle;\r
 import android.preference.CheckBoxPreference;\r
 import android.preference.ListPreference;\r
 import android.preference.Preference;\r
 import android.preference.Preference.OnPreferenceChangeListener;\r
 import android.content.Intent;\r
 import android.os.Bundle;\r
 import android.preference.CheckBoxPreference;\r
 import android.preference.ListPreference;\r
 import android.preference.Preference;\r
 import android.preference.Preference.OnPreferenceChangeListener;\r
-import android.preference.PreferenceScreen;\r
 import android.util.Log;\r
 import android.view.ContextMenu;\r
 import android.view.ContextMenu.ContextMenuInfo;\r
 import android.util.Log;\r
 import android.view.ContextMenu;\r
 import android.view.ContextMenu.ContextMenuInfo;\r
@@ -80,28 +76,6 @@ public class Preferences extends SherlockPreferenceActivity implements
         actionBar.setDisplayHomeAsUpEnabled(true);\r
     }\r
 \r
         actionBar.setDisplayHomeAsUpEnabled(true);\r
     }\r
 \r
-    private void populateSessionList() {\r
-        mSessions.clear();\r
-        mSessions = mDbHandler.getSessionList();\r
-        PreferenceScreen ps = getPreferenceScreen();\r
-        ps.removeAll();\r
-        addPreferencesFromResource(R.xml.preferences);\r
-        for (int i = 0; i < mSessions.size(); i++) {\r
-            Preference preference = new Preference(getBaseContext());\r
-            preference.setTitle(mSessions.get(i).getName());\r
-            URI uri;\r
-            try {\r
-                uri = new URI(mSessions.get(i).getUrl());\r
-            } catch (URISyntaxException e) {\r
-                e.printStackTrace(); // should never happen\r
-                continue;\r
-            }\r
-            preference.setSummary(uri.getScheme() + "://" + uri.getHost()\r
-                    + uri.getPath());\r
-            ps.addPreference(preference);\r
-        }\r
-    }\r
-\r
     /**\r
      * Populates the account selector\r
      */\r
     /**\r
      * Populates the account selector\r
      */\r
@@ -157,13 +131,6 @@ public class Preferences extends SherlockPreferenceActivity implements
                     .getUrl());\r
             startActivityForResult(intent, mEditSession);\r
             break;\r
                     .getUrl());\r
             startActivityForResult(intent, mEditSession);\r
             break;\r
-        case R.id.SessionContextRemove:\r
-            OwnCloudSession ocs = mSessions.get(mSelectedMenuItem);\r
-            mDbHandler.removeSessionWithId(ocs.getEntryId());\r
-            mSessions.remove(ocs);\r
-            getPreferenceScreen().removePreference(\r
-                    getPreferenceScreen().getPreference(mSelectedMenuItem + 1));\r
-            break;\r
         case android.R.id.home:\r
             intent = new Intent(getBaseContext(), FileDisplayActivity.class);\r
             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);\r
         case android.R.id.home:\r
             intent = new Intent(getBaseContext(), FileDisplayActivity.class);\r
             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);\r
@@ -179,24 +146,6 @@ public class Preferences extends SherlockPreferenceActivity implements
     @Override\r
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
         super.onActivityResult(requestCode, resultCode, data);\r
     @Override\r
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
         super.onActivityResult(requestCode, resultCode, data);\r
-        if (resultCode == Activity.RESULT_OK) {\r
-            switch (requestCode) {\r
-            case mNewSession:\r
-                mDbHandler.addSession(data.getStringExtra("sessionName"),\r
-                        data.getStringExtra("sessionURL"));\r
-                getPreferenceScreen().removeAll();\r
-                addPreferencesFromResource(R.xml.preferences);\r
-                populateSessionList();\r
-                break;\r
-            case mEditSession:\r
-                mDbHandler.changeSessionFields(\r
-                        data.getIntExtra("sessionId", -1),\r
-                        data.getStringExtra("sessionName"),\r
-                        data.getStringExtra("sessionURL"));\r
-                populateSessionList();\r
-                break;\r
-            }\r
-        }\r
     }\r
 \r
     @Override\r
     }\r
 \r
     @Override\r