X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/0df8f178de55e985641d33e4cd8f988280edb910..7a941e0b0b4aecc448889720ea849ed288770e67:/src/com/owncloud/android/ui/activity/Preferences.java diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index 04a4c7af..0b55eeea 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -1,6 +1,10 @@ -/* ownCloud Android client application +/** + * ownCloud Android client application + * + * @author Bartek Przybylski + * @author David A. Velasco * Copyright (C) 2011 Bartek Przybylski - * Copyright (C) 2012-2013 ownCloud Inc. + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -21,49 +25,59 @@ import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerCallback; import android.accounts.AccountManagerFuture; +import android.content.ComponentName; +import android.content.Context; import android.content.Intent; +import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.IBinder; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.PreferenceManager; +//import android.support.v7.app.ActionBar; +import android.app.ActionBar; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ListAdapter; import android.widget.ListView; -import com.actionbarsherlock.app.ActionBar; -import com.actionbarsherlock.app.SherlockPreferenceActivity; -import com.actionbarsherlock.view.Menu; -import com.actionbarsherlock.view.MenuItem; +import com.owncloud.android.BuildConfig; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; +import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.db.DbHandler; +import com.owncloud.android.files.FileOperationsHelper; +import com.owncloud.android.files.services.FileDownloader; +import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.services.OperationsService; import com.owncloud.android.ui.RadioButtonPreference; import com.owncloud.android.utils.DisplayUtils; /** * An Activity that allows the user to change the application's settings. - * - * @author Bartek Przybylski - * @author David A. Velasco */ -public class Preferences extends SherlockPreferenceActivity implements AccountManagerCallback { +public class Preferences extends PreferenceActivity + implements AccountManagerCallback, ComponentsGetter { private static final String TAG = "OwnCloudPreferences"; @@ -79,10 +93,18 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa private String mAccountName; private boolean mShowContextMenu = false; private String mUploadPath; + private PreferenceCategory mPrefInstantUploadCategory; + private Preference mPrefInstantUpload; private Preference mPrefInstantUploadPath; + private Preference mPrefInstantUploadPathWiFi; + private Preference mPrefInstantVideoUpload; private Preference mPrefInstantVideoUploadPath; + private Preference mPrefInstantVideoUploadPathWiFi; private String mUploadVideoPath; + protected FileDownloader.FileDownloaderBinder mDownloaderBinder = null; + protected FileUploader.FileUploaderBinder mUploaderBinder = null; + private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null; @SuppressWarnings("deprecation") @Override @@ -91,10 +113,26 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa mDbHandler = new DbHandler(getBaseContext()); addPreferencesFromResource(R.xml.preferences); - ActionBar actionBar = getSherlock().getActionBar(); - actionBar.setIcon(DisplayUtils.getSeasonalIconId()); - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setTitle(R.string.actionbar_settings); + // Set properties of Action Bar in an ugly workaround to build correctly without upgrading minSdk + // TODO : increase minSdk; scheduled for next realease, don't wont to mix with this US + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + ActionBar actionBar = getActionBar(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + actionBar.setIcon(DisplayUtils.getSeasonalIconId()); + } + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setTitle(R.string.actionbar_settings); + } else { + setTitle(R.string.actionbar_settings); + } + + // For adding content description tag to a title field in the action bar + int actionBarTitleId = getResources().getIdentifier("action_bar_title", "id", "android"); + View actionBarTitleView = getWindow().getDecorView().findViewById(actionBarTitleId); + if (actionBarTitleView != null) { // it's null in Android 2.x + getWindow().getDecorView().findViewById(actionBarTitleId). + setContentDescription(getString(R.string.actionbar_settings)); + } // Load the accounts category for adding the list of accounts mAccountsPrefCategory = (PreferenceCategory) findPreference("accounts_category"); @@ -119,7 +157,18 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa return false; } }); - + + // Load package info + String temp; + try { + PackageInfo pkg = getPackageManager().getPackageInfo(getPackageName(), 0); + temp = pkg.versionName; + } catch (NameNotFoundException e) { + temp = ""; + Log_OC.e(TAG, "Error while showing about dialog", e); + } + final String appVersion = temp; + // Register context menu for list of preferences. registerForContextMenu(getListView()); @@ -128,9 +177,11 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa pCode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - Intent i = new Intent(getApplicationContext(), PinCodeActivity.class); - i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "preferences"); - i.putExtra(PinCodeActivity.EXTRA_NEW_STATE, newValue.toString()); + Intent i = new Intent(getApplicationContext(), PassCodeActivity.class); + Boolean enable = (Boolean) newValue; + i.setAction( + enable.booleanValue() ? PassCodeActivity.ACTION_ENABLE : PassCodeActivity.ACTION_DISABLE + ); startActivity(i); return true; @@ -162,8 +213,21 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa } } + + if (BuildConfig.DEBUG) { + Preference pLog = findPreference("log"); + if (pLog != null ){ + pLog.setOnPreferenceClickListener(new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + Intent loggerIntent = new Intent(getApplicationContext(),LogHistoryActivity.class); + startActivity(loggerIntent); + return true; + } + }); + } + } - boolean recommendEnabled = getResources().getBoolean(R.bool.recommend_enabled); Preference pRecommend = findPreference("recommend"); if (pRecommend != null){ @@ -182,14 +246,15 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(Preferences.this); String username = currentAccount.name.substring(0, currentAccount.name.lastIndexOf('@')); - String recommendSubject = String.format(getString(R.string.recommend_subject), appName); - String recommendText = String.format(getString(R.string.recommend_text), appName, downloadUrl, username); + String recommendSubject = String.format(getString(R.string.recommend_subject), + appName); + String recommendText = String.format(getString(R.string.recommend_text), + appName, downloadUrl, username); intent.putExtra(Intent.EXTRA_SUBJECT, recommendSubject); intent.putExtra(Intent.EXTRA_TEXT, recommendText); startActivity(intent); - return(true); } @@ -208,7 +273,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa @Override public boolean onPreferenceClick(Preference preference) { String feedbackMail =(String) getText(R.string.mail_feedback); - String feedback =(String) getText(R.string.prefs_feedback); + String feedback =(String) getText(R.string.prefs_feedback) + " - android v" + appVersion; Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, feedback); @@ -264,7 +329,23 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa } }); } - + + mPrefInstantUploadCategory = (PreferenceCategory) findPreference("instant_uploading_category"); + + mPrefInstantUploadPathWiFi = findPreference("instant_upload_on_wifi"); + mPrefInstantUpload = findPreference("instant_uploading"); + + toggleInstantPictureOptions(((CheckBoxPreference) mPrefInstantUpload).isChecked()); + + mPrefInstantUpload.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + toggleInstantPictureOptions((Boolean) newValue); + return true; + } + }); + mPrefInstantVideoUploadPath = findPreference("instant_video_upload_path"); if (mPrefInstantVideoUploadPath != null){ @@ -281,28 +362,62 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa } }); } + + mPrefInstantVideoUploadPathWiFi = findPreference("instant_video_upload_on_wifi"); + mPrefInstantVideoUpload = findPreference("instant_video_uploading"); + toggleInstantVideoOptions(((CheckBoxPreference) mPrefInstantVideoUpload).isChecked()); + + mPrefInstantVideoUpload.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + toggleInstantVideoOptions((Boolean) newValue); + return true; + } + }); /* About App */ pAboutApp = (Preference) findPreference("about_app"); if (pAboutApp != null) { pAboutApp.setTitle(String.format(getString(R.string.about_android), getString(R.string.app_name))); - PackageInfo pkg; - try { - pkg = getPackageManager().getPackageInfo(getPackageName(), 0); - pAboutApp.setSummary(String.format(getString(R.string.about_version), pkg.versionName)); - } catch (NameNotFoundException e) { - Log_OC.e(TAG, "Error while showing about dialog", e); - } + pAboutApp.setSummary(String.format(getString(R.string.about_version), appVersion)); } loadInstantUploadPath(); loadInstantUploadVideoPath(); - } + /* ComponentsGetter */ + mDownloadServiceConnection = newTransferenceServiceConnection(); + if (mDownloadServiceConnection != null) { + bindService(new Intent(this, FileDownloader.class), mDownloadServiceConnection, + Context.BIND_AUTO_CREATE); + } + mUploadServiceConnection = newTransferenceServiceConnection(); + if (mUploadServiceConnection != null) { + bindService(new Intent(this, FileUploader.class), mUploadServiceConnection, + Context.BIND_AUTO_CREATE); + } - @Override - protected void onPause() { - super.onPause(); + } + + private void toggleInstantPictureOptions(Boolean value){ + if (value){ + mPrefInstantUploadCategory.addPreference(mPrefInstantUploadPathWiFi); + mPrefInstantUploadCategory.addPreference(mPrefInstantUploadPath); + } else { + mPrefInstantUploadCategory.removePreference(mPrefInstantUploadPathWiFi); + mPrefInstantUploadCategory.removePreference(mPrefInstantUploadPath); + } + } + + private void toggleInstantVideoOptions(Boolean value){ + if (value){ + mPrefInstantUploadCategory.addPreference(mPrefInstantVideoUploadPathWiFi); + mPrefInstantUploadCategory.addPreference(mPrefInstantVideoUploadPath); + } else { + mPrefInstantUploadCategory.removePreference(mPrefInstantVideoUploadPathWiFi); + mPrefInstantUploadCategory.removePreference(mPrefInstantVideoUploadPath); + } } @Override @@ -343,6 +458,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa // Remove account am.removeAccount(a, this, mHandler); + Log_OC.d(TAG, "Remove an account " + a.name); } } } @@ -353,6 +469,18 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa @Override public void run(AccountManagerFuture future) { if (future.isDone()) { + // after remove account + Account account = new Account(mAccountName, MainApp.getAccountType()); + if (!AccountUtils.exists(account, MainApp.getAppContext())) { + // Cancel tranfers + if (mUploaderBinder != null) { + mUploaderBinder.cancel(account); + } + if (mDownloaderBinder != null) { + mDownloaderBinder.cancel(account); + } + } + Account a = AccountUtils.getCurrentOwnCloudAccount(this); String accountName = ""; if (a == null) { @@ -435,6 +563,16 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa @Override protected void onDestroy() { mDbHandler.close(); + + if (mDownloadServiceConnection != null) { + unbindService(mDownloadServiceConnection); + mDownloadServiceConnection = null; + } + if (mUploadServiceConnection != null) { + unbindService(mUploadServiceConnection); + mUploadServiceConnection = null; + } + super.onDestroy(); } @@ -498,6 +636,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa FileDisplayActivity.class ); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i); } else { finish(); @@ -578,4 +717,65 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa editor.putString("instant_video_upload_path", mUploadVideoPath); editor.commit(); } + + // Methods for ComponetsGetter + @Override + public FileDownloader.FileDownloaderBinder getFileDownloaderBinder() { + return mDownloaderBinder; + } + + + @Override + public FileUploader.FileUploaderBinder getFileUploaderBinder() { + return mUploaderBinder; + } + + @Override + public OperationsService.OperationsServiceBinder getOperationsServiceBinder() { + return null; + } + + @Override + public FileDataStorageManager getStorageManager() { + return null; + } + + @Override + public FileOperationsHelper getFileOperationsHelper() { + return null; + } + + protected ServiceConnection newTransferenceServiceConnection() { + return new PreferencesServiceConnection(); + } + + /** Defines callbacks for service binding, passed to bindService() */ + private class PreferencesServiceConnection implements ServiceConnection { + + @Override + public void onServiceConnected(ComponentName component, IBinder service) { + + if (component.equals(new ComponentName(Preferences.this, FileDownloader.class))) { + mDownloaderBinder = (FileDownloader.FileDownloaderBinder) service; + + } else if (component.equals(new ComponentName(Preferences.this, FileUploader.class))) { + Log_OC.d(TAG, "Upload service connected"); + mUploaderBinder = (FileUploader.FileUploaderBinder) service; + } else { + return; + } + + } + + @Override + public void onServiceDisconnected(ComponentName component) { + if (component.equals(new ComponentName(Preferences.this, FileDownloader.class))) { + Log_OC.d(TAG, "Download service suddenly disconnected"); + mDownloaderBinder = null; + } else if (component.equals(new ComponentName(Preferences.this, FileUploader.class))) { + Log_OC.d(TAG, "Upload service suddenly disconnected"); + mUploaderBinder = null; + } + } + }; }