mirror of
https://github.com/nextcloud/android.git
synced 2024-11-26 23:28:42 +03:00
Separate options to enable & disable instant upload of new pictures and new videos
This commit is contained in:
parent
ffdc77f8d8
commit
68f4ceb5a7
4 changed files with 89 additions and 67 deletions
|
@ -18,8 +18,10 @@
|
||||||
<string name="prefs_manage_accounts">Manage Accounts</string>
|
<string name="prefs_manage_accounts">Manage Accounts</string>
|
||||||
<string name="prefs_pincode">App PIN</string>
|
<string name="prefs_pincode">App PIN</string>
|
||||||
<string name="prefs_pincode_summary">Protect your client</string>
|
<string name="prefs_pincode_summary">Protect your client</string>
|
||||||
<string name="prefs_instant_upload">Enable instant uploads</string>
|
<string name="prefs_instant_upload">Instant picture uploads</string>
|
||||||
<string name="prefs_instant_upload_summary">Instantly upload media taken by camera</string>
|
<string name="prefs_instant_upload_summary">Instantly upload pictures taken by camera</string>
|
||||||
|
<string name="prefs_instant_video_upload">Instant video uploads</string>
|
||||||
|
<string name="prefs_instant_video_upload_summary">Instantly upload videos recorded by camera</string>
|
||||||
<string name="prefs_log_title">Enable Logging</string>
|
<string name="prefs_log_title">Enable Logging</string>
|
||||||
<string name="prefs_log_summary">This is used to log problems</string>
|
<string name="prefs_log_summary">This is used to log problems</string>
|
||||||
<string name="prefs_log_title_history">Logging History</string>
|
<string name="prefs_log_title_history">Logging History</string>
|
||||||
|
@ -232,6 +234,7 @@
|
||||||
<string name="placeholder_media_time">12:23:45</string>
|
<string name="placeholder_media_time">12:23:45</string>
|
||||||
|
|
||||||
<string name="instant_upload_on_wifi">Upload pictures via WiFi only</string>
|
<string name="instant_upload_on_wifi">Upload pictures via WiFi only</string>
|
||||||
|
<string name="instant_video_upload_on_wifi">Upload videos via WiFi only</string>
|
||||||
<string name="instant_upload_path">/InstantUpload</string>
|
<string name="instant_upload_path">/InstantUpload</string>
|
||||||
<string name="conflict_title">Update conflict</string>
|
<string name="conflict_title">Update conflict</string>
|
||||||
<string name="conflict_message">Remote file %s is not synchronized with local file. Continuing will replace content of file on server.</string>
|
<string name="conflict_message">Remote file %s is not synchronized with local file. Continuing will replace content of file on server.</string>
|
||||||
|
|
|
@ -35,6 +35,13 @@
|
||||||
android:disableDependentsState="true"
|
android:disableDependentsState="true"
|
||||||
android:title="@string/instant_upload_on_wifi"
|
android:title="@string/instant_upload_on_wifi"
|
||||||
android:key="instant_upload_on_wifi"/>
|
android:key="instant_upload_on_wifi"/>
|
||||||
|
<com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:key="instant_video_uploading"
|
||||||
|
android:title="@string/prefs_instant_video_upload"
|
||||||
|
android:summary="@string/prefs_instant_video_upload_summary"/>
|
||||||
|
<com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:dependency="instant_video_uploading"
|
||||||
|
android:disableDependentsState="true"
|
||||||
|
android:title="@string/instant_video_upload_on_wifi"
|
||||||
|
android:key="instant_video_upload_on_wifi"/>
|
||||||
<!-- DISABLED FOR RELEASE UNTIL FIXED
|
<!-- DISABLED FOR RELEASE UNTIL FIXED
|
||||||
CheckBoxPreference android:key="log_to_file"
|
CheckBoxPreference android:key="log_to_file"
|
||||||
android:title="@string/prefs_log_title"
|
android:title="@string/prefs_log_title"
|
||||||
|
|
|
@ -59,43 +59,29 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
||||||
if (intent.getAction().equals(android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
|
if (intent.getAction().equals(android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
|
||||||
handleConnectivityAction(context, intent);
|
handleConnectivityAction(context, intent);
|
||||||
}else if (intent.getAction().equals(NEW_PHOTO_ACTION_UNOFFICIAL)) {
|
}else if (intent.getAction().equals(NEW_PHOTO_ACTION_UNOFFICIAL)) {
|
||||||
handleNewMediaAction(context, intent);
|
handleNewPictureAction(context, intent);
|
||||||
Log_OC.d(TAG, "UNOFFICIAL processed: com.android.camera.NEW_PICTURE");
|
Log_OC.d(TAG, "UNOFFICIAL processed: com.android.camera.NEW_PICTURE");
|
||||||
} else if (intent.getAction().equals(NEW_PHOTO_ACTION)) {
|
} else if (intent.getAction().equals(NEW_PHOTO_ACTION)) {
|
||||||
handleNewMediaAction(context, intent);
|
handleNewPictureAction(context, intent);
|
||||||
Log_OC.d(TAG, "OFFICIAL processed: android.hardware.action.NEW_PICTURE");
|
Log_OC.d(TAG, "OFFICIAL processed: android.hardware.action.NEW_PICTURE");
|
||||||
} else if (intent.getAction().equals(NEW_VIDEO_ACTION)) {
|
} else if (intent.getAction().equals(NEW_VIDEO_ACTION)) {
|
||||||
Log_OC.d(TAG, "OFFICIAL processed: android.hardware.action.NEW_VIDEO");
|
Log_OC.d(TAG, "OFFICIAL processed: android.hardware.action.NEW_VIDEO");
|
||||||
handleNewMediaAction(context, intent);
|
handleNewVideoAction(context, intent);
|
||||||
} else if (intent.getAction().equals(FileUploader.getUploadFinishMessage())) {
|
|
||||||
handleUploadFinished(context, intent);
|
|
||||||
} else {
|
} else {
|
||||||
Log_OC.e(TAG, "Incorrect intent sent: " + intent.getAction());
|
Log_OC.e(TAG, "Incorrect intent sent: " + intent.getAction());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleUploadFinished(Context context, Intent intent) {
|
private void handleNewPictureAction(Context context, Intent intent) {
|
||||||
// remove successfull uploading, ignore rest for reupload on reconnect
|
|
||||||
/*
|
|
||||||
if (intent.getBooleanExtra(FileUploader.EXTRA_UPLOAD_RESULT, false)) {
|
|
||||||
DbHandler db = new DbHandler(context);
|
|
||||||
String localPath = intent.getStringExtra(FileUploader.EXTRA_OLD_FILE_PATH);
|
|
||||||
if (!db.removeIUPendingFile(localPath)) {
|
|
||||||
Log_OC.w(TAG, "Tried to remove non existing instant upload file " + localPath);
|
|
||||||
}
|
|
||||||
db.close();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleNewMediaAction(Context context, Intent intent) {
|
|
||||||
Cursor c = null;
|
Cursor c = null;
|
||||||
String file_path = null;
|
String file_path = null;
|
||||||
String file_name = null;
|
String file_name = null;
|
||||||
String mime_type = null;
|
String mime_type = null;
|
||||||
|
|
||||||
if (!instantUploadEnabled(context)) {
|
Log_OC.w(TAG, "New photo received");
|
||||||
Log_OC.d(TAG, "Instant upload disabled, aborting uploading");
|
|
||||||
|
if (!instantPictureUploadEnabled(context)) {
|
||||||
|
Log_OC.d(TAG, "Instant picture upload disabled, ignoring new picture");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,52 +91,72 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intent.getAction().equals(NEW_PHOTO_ACTION) || intent.getAction().equals(NEW_PHOTO_ACTION_UNOFFICIAL)) {
|
String[] CONTENT_PROJECTION = { Images.Media.DATA, Images.Media.DISPLAY_NAME, Images.Media.MIME_TYPE, Images.Media.SIZE };
|
||||||
String[] CONTENT_PROJECTION = { Images.Media.DATA, Images.Media.DISPLAY_NAME, Images.Media.MIME_TYPE, Images.Media.SIZE };
|
c = context.getContentResolver().query(intent.getData(), CONTENT_PROJECTION, null, null, null);
|
||||||
c = context.getContentResolver().query(intent.getData(), CONTENT_PROJECTION, null, null, null);
|
if (!c.moveToFirst()) {
|
||||||
if (!c.moveToFirst()) {
|
Log_OC.e(TAG, "Couldn't resolve given uri: " + intent.getDataString());
|
||||||
Log_OC.e(TAG, "Couldn't resolve given uri: " + intent.getDataString());
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
file_path = c.getString(c.getColumnIndex(Images.Media.DATA));
|
|
||||||
file_name = c.getString(c.getColumnIndex(Images.Media.DISPLAY_NAME));
|
|
||||||
mime_type = c.getString(c.getColumnIndex(Images.Media.MIME_TYPE));
|
|
||||||
Log_OC.w(TAG, "New photo received");
|
|
||||||
}
|
|
||||||
else if (intent.getAction().equals(NEW_VIDEO_ACTION)) {
|
|
||||||
String[] CONTENT_PROJECTION = { Video.Media.DATA, Video.Media.DISPLAY_NAME, Video.Media.MIME_TYPE, Video.Media.SIZE };
|
|
||||||
c = context.getContentResolver().query(intent.getData(), CONTENT_PROJECTION, null, null, null);
|
|
||||||
if (!c.moveToFirst()) {
|
|
||||||
Log_OC.e(TAG, "Couldn't resolve given uri: " + intent.getDataString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
file_path = c.getString(c.getColumnIndex(Video.Media.DATA));
|
|
||||||
file_name = c.getString(c.getColumnIndex(Video.Media.DISPLAY_NAME));
|
|
||||||
mime_type = c.getString(c.getColumnIndex(Video.Media.MIME_TYPE));
|
|
||||||
Log_OC.w(TAG, "New video received");
|
|
||||||
}
|
}
|
||||||
|
file_path = c.getString(c.getColumnIndex(Images.Media.DATA));
|
||||||
|
file_name = c.getString(c.getColumnIndex(Images.Media.DISPLAY_NAME));
|
||||||
|
mime_type = c.getString(c.getColumnIndex(Images.Media.MIME_TYPE));
|
||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
Log_OC.d(TAG, file_path + "");
|
Log_OC.d(TAG, file_path + "");
|
||||||
|
|
||||||
// same always temporally the picture to upload
|
// save always temporally the picture to upload
|
||||||
DbHandler db = new DbHandler(context);
|
DbHandler db = new DbHandler(context);
|
||||||
db.putFileForLater(file_path, account.name, null);
|
db.putFileForLater(file_path, account.name, null);
|
||||||
db.close();
|
db.close();
|
||||||
|
|
||||||
if (!isOnline(context) || (instantUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
|
if (!isOnline(context) || (instantPictureUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// register for upload finishe message
|
Intent i = new Intent(context, FileUploader.class);
|
||||||
// there is a litte problem with android API, we can register for
|
i.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||||
// particular
|
i.putExtra(FileUploader.KEY_LOCAL_FILE, file_path);
|
||||||
// intent in registerReceiver but we cannot unregister from precise
|
i.putExtra(FileUploader.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(context, file_name));
|
||||||
// intent
|
i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
|
||||||
// we can unregister from entire listenings but thats suck a bit.
|
i.putExtra(FileUploader.KEY_MIME_TYPE, mime_type);
|
||||||
// On the other hand this might be only for dynamicly registered
|
i.putExtra(FileUploader.KEY_INSTANT_UPLOAD, true);
|
||||||
// broadcast receivers, needs investigation.
|
context.startService(i);
|
||||||
/*IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
|
}
|
||||||
context.getApplicationContext().registerReceiver(this, filter);*/
|
|
||||||
|
private void handleNewVideoAction(Context context, Intent intent) {
|
||||||
|
Cursor c = null;
|
||||||
|
String file_path = null;
|
||||||
|
String file_name = null;
|
||||||
|
String mime_type = null;
|
||||||
|
|
||||||
|
Log_OC.w(TAG, "New video received");
|
||||||
|
|
||||||
|
if (!instantVideoUploadEnabled(context)) {
|
||||||
|
Log_OC.d(TAG, "Instant video upload disabled, ignoring new video");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Account account = AccountUtils.getCurrentOwnCloudAccount(context);
|
||||||
|
if (account == null) {
|
||||||
|
Log_OC.w(TAG, "No owncloud account found for instant upload, aborting");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] CONTENT_PROJECTION = { Video.Media.DATA, Video.Media.DISPLAY_NAME, Video.Media.MIME_TYPE, Video.Media.SIZE };
|
||||||
|
c = context.getContentResolver().query(intent.getData(), CONTENT_PROJECTION, null, null, null);
|
||||||
|
if (!c.moveToFirst()) {
|
||||||
|
Log_OC.e(TAG, "Couldn't resolve given uri: " + intent.getDataString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
file_path = c.getString(c.getColumnIndex(Video.Media.DATA));
|
||||||
|
file_name = c.getString(c.getColumnIndex(Video.Media.DISPLAY_NAME));
|
||||||
|
mime_type = c.getString(c.getColumnIndex(Video.Media.MIME_TYPE));
|
||||||
|
c.close();
|
||||||
|
Log_OC.d(TAG, file_path + "");
|
||||||
|
|
||||||
|
if (!isOnline(context) || (instantVideoUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Intent i = new Intent(context, FileUploader.class);
|
Intent i = new Intent(context, FileUploader.class);
|
||||||
i.putExtra(FileUploader.KEY_ACCOUNT, account);
|
i.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||||
|
@ -164,19 +170,17 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleConnectivityAction(Context context, Intent intent) {
|
private void handleConnectivityAction(Context context, Intent intent) {
|
||||||
if (!instantUploadEnabled(context)) {
|
if (!instantPictureUploadEnabled(context)) {
|
||||||
Log_OC.d(TAG, "Instant upload disabled, abording uploading");
|
Log_OC.d(TAG, "Instant upload disabled, don't upload anything");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!intent.hasExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY)
|
if (!intent.hasExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY)
|
||||||
&& isOnline(context)
|
&& isOnline(context)
|
||||||
&& (!instantUploadViaWiFiOnly(context) || (instantUploadViaWiFiOnly(context) == isConnectedViaWiFi(context) == true))) {
|
&& (!instantPictureUploadViaWiFiOnly(context) || (instantPictureUploadViaWiFiOnly(context) == isConnectedViaWiFi(context) == true))) {
|
||||||
DbHandler db = new DbHandler(context);
|
DbHandler db = new DbHandler(context);
|
||||||
Cursor c = db.getAwaitingFiles();
|
Cursor c = db.getAwaitingFiles();
|
||||||
if (c.moveToFirst()) {
|
if (c.moveToFirst()) {
|
||||||
//IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
|
|
||||||
//context.getApplicationContext().registerReceiver(this, filter);
|
|
||||||
do {
|
do {
|
||||||
String account_name = c.getString(c.getColumnIndex("account"));
|
String account_name = c.getString(c.getColumnIndex("account"));
|
||||||
String file_path = c.getString(c.getColumnIndex("path"));
|
String file_path = c.getString(c.getColumnIndex("path"));
|
||||||
|
@ -226,11 +230,19 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
||||||
&& cm.getActiveNetworkInfo().getState() == State.CONNECTED;
|
&& cm.getActiveNetworkInfo().getState() == State.CONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean instantUploadEnabled(Context context) {
|
public static boolean instantPictureUploadEnabled(Context context) {
|
||||||
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_uploading", false);
|
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_uploading", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean instantUploadViaWiFiOnly(Context context) {
|
public static boolean instantVideoUploadEnabled(Context context) {
|
||||||
|
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_uploading", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean instantPictureUploadViaWiFiOnly(Context context) {
|
||||||
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_upload_on_wifi", false);
|
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_upload_on_wifi", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean instantVideoUploadViaWiFiOnly(Context context) {
|
||||||
|
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_upload_on_wifi", false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -465,7 +465,7 @@ public class InstantUploadActivity extends Activity {
|
||||||
private boolean canInstantUpload() {
|
private boolean canInstantUpload() {
|
||||||
|
|
||||||
if (!InstantUploadBroadcastReceiver.isOnline(this)
|
if (!InstantUploadBroadcastReceiver.isOnline(this)
|
||||||
|| (InstantUploadBroadcastReceiver.instantUploadViaWiFiOnly(this) && !InstantUploadBroadcastReceiver
|
|| (InstantUploadBroadcastReceiver.instantPictureUploadViaWiFiOnly(this) && !InstantUploadBroadcastReceiver
|
||||||
.isConnectedViaWiFi(this))) {
|
.isConnectedViaWiFi(this))) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue