mirror of
https://github.com/nextcloud/android.git
synced 2024-11-29 10:49:04 +03:00
Progress on Analytics magic
This commit is contained in:
parent
726a02f39c
commit
9130635fa1
111 changed files with 1817 additions and 986 deletions
|
@ -78,10 +78,12 @@ android {
|
||||||
// see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
|
// see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
|
||||||
|
|
||||||
productFlavors {
|
productFlavors {
|
||||||
|
// used for f-droid
|
||||||
generic {
|
generic {
|
||||||
applicationId 'com.nextcloud.client'
|
applicationId 'com.nextcloud.client'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// both need .modified gradle file in place of the regular one
|
||||||
modified {
|
modified {
|
||||||
// structure is:
|
// structure is:
|
||||||
// domain tld
|
// domain tld
|
||||||
|
@ -89,6 +91,12 @@ android {
|
||||||
// .client
|
// .client
|
||||||
applicationId 'com.custom.client'
|
applicationId 'com.custom.client'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zstore {
|
||||||
|
applicationId 'com.nextcloud.client'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
|
|
|
@ -78,10 +78,12 @@ android {
|
||||||
// see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
|
// see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
|
||||||
|
|
||||||
productFlavors {
|
productFlavors {
|
||||||
|
// used for f-droid
|
||||||
generic {
|
generic {
|
||||||
applicationId 'com.nextcloud.client'
|
applicationId 'com.nextcloud.client'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// both need .modified gradle file in place of the regular one
|
||||||
modified {
|
modified {
|
||||||
// structure is:
|
// structure is:
|
||||||
// domain tld
|
// domain tld
|
||||||
|
@ -89,6 +91,12 @@ android {
|
||||||
// .client
|
// .client
|
||||||
applicationId 'com.custom.client'
|
applicationId 'com.custom.client'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zstore {
|
||||||
|
applicationId 'com.nextcloud.client'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
|
@ -191,6 +199,7 @@ dependencies {
|
||||||
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
|
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
|
||||||
compile 'org.greenrobot:eventbus:3.0.0'
|
compile 'org.greenrobot:eventbus:3.0.0'
|
||||||
compile 'com.googlecode.ez-vcard:ez-vcard:0.10.2'
|
compile 'com.googlecode.ez-vcard:ez-vcard:0.10.2'
|
||||||
|
|
||||||
compile 'com.google.android.gms:play-services:10.2.1'
|
compile 'com.google.android.gms:play-services:10.2.1'
|
||||||
|
|
||||||
compile 'org.parceler:parceler-api:1.1.6'
|
compile 'org.parceler:parceler-api:1.1.6'
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/**
|
||||||
|
* Nextcloud Android client application
|
||||||
|
*
|
||||||
|
* @author Mario Danic
|
||||||
|
* Copyright (C) 2017 Mario Danic
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.owncloud.android.utils;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
public class AnalyticsUtils {
|
||||||
|
public static void setCurrentScreenName(Activity activity, String s, String s1) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -263,8 +263,6 @@
|
||||||
|
|
||||||
<service android:name=".services.observer.FileObserverService" />
|
<service android:name=".services.observer.FileObserverService" />
|
||||||
|
|
||||||
<service android:name="com.evernote.android.job.gcm.PlatformGcmService" tools:node="remove"/>
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.activity.CopyToClipboardActivity"
|
android:name=".ui.activity.CopyToClipboardActivity"
|
||||||
android:icon="@drawable/copy_link"
|
android:icon="@drawable/copy_link"
|
||||||
|
|
|
@ -34,7 +34,6 @@ import android.support.multidex.MultiDexApplication;
|
||||||
import android.support.v4.util.Pair;
|
import android.support.v4.util.Pair;
|
||||||
|
|
||||||
import com.evernote.android.job.JobManager;
|
import com.evernote.android.job.JobManager;
|
||||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
|
||||||
import com.owncloud.android.authentication.PassCodeManager;
|
import com.owncloud.android.authentication.PassCodeManager;
|
||||||
import com.owncloud.android.datamodel.SyncedFolder;
|
import com.owncloud.android.datamodel.SyncedFolder;
|
||||||
import com.owncloud.android.datamodel.SyncedFolderProvider;
|
import com.owncloud.android.datamodel.SyncedFolderProvider;
|
||||||
|
@ -81,8 +80,6 @@ public class MainApp extends MultiDexApplication {
|
||||||
|
|
||||||
private static SyncedFolderObserverService mObserverService;
|
private static SyncedFolderObserverService mObserverService;
|
||||||
|
|
||||||
private static FirebaseAnalytics firebaseAnalytics;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private boolean mBound;
|
private boolean mBound;
|
||||||
|
|
||||||
|
@ -91,13 +88,6 @@ public class MainApp extends MultiDexApplication {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
JobManager.create(this).addJobCreator(new NCJobCreator());
|
JobManager.create(this).addJobCreator(new NCJobCreator());
|
||||||
MainApp.mContext = getApplicationContext();
|
MainApp.mContext = getApplicationContext();
|
||||||
|
|
||||||
firebaseAnalytics = FirebaseAnalytics.getInstance(this);
|
|
||||||
|
|
||||||
if (!getResources().getBoolean(R.bool.analytics_enabled)) {
|
|
||||||
firebaseAnalytics.setAnalyticsCollectionEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedPreferences appPrefs =
|
SharedPreferences appPrefs =
|
||||||
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
||||||
MainApp.storagePath = appPrefs.getString(Preferences.PreferenceKeys.STORAGE_PATH, Environment.
|
MainApp.storagePath = appPrefs.getString(Preferences.PreferenceKeys.STORAGE_PATH, Environment.
|
||||||
|
@ -287,6 +277,7 @@ public class MainApp extends MultiDexApplication {
|
||||||
syncedFolderProvider.updateAutoUploadPaths(mContext);
|
syncedFolderProvider.updateAutoUploadPaths(mContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cleanOldEntries() {
|
private void cleanOldEntries() {
|
||||||
// previous versions of application created broken entries in the SyncedFolderProvider
|
// previous versions of application created broken entries in the SyncedFolderProvider
|
||||||
// database, and this cleans all that and leaves 1 (newest) entry per synced folder
|
// database, and this cleans all that and leaves 1 (newest) entry per synced folder
|
||||||
|
@ -321,7 +312,9 @@ public class MainApp extends MultiDexApplication {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Defines callbacks for service binding, passed to bindService() */
|
/**
|
||||||
|
* Defines callbacks for service binding, passed to bindService()
|
||||||
|
*/
|
||||||
private ServiceConnection syncedFolderObserverServiceConnection = new ServiceConnection() {
|
private ServiceConnection syncedFolderObserverServiceConnection = new ServiceConnection() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -338,15 +331,4 @@ public class MainApp extends MultiDexApplication {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static FirebaseAnalytics getFirebaseAnalyticsInstance() {
|
|
||||||
/*
|
|
||||||
In order for Firebase Analytics to work, you also need to
|
|
||||||
put a proper google-services.json in src/custom folder
|
|
||||||
|
|
||||||
If that file is flawed, nothing will be sent to Firebase
|
|
||||||
*/
|
|
||||||
return firebaseAnalytics;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,6 +113,7 @@ import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
|
||||||
import com.owncloud.android.ui.dialog.SamlWebViewDialog;
|
import com.owncloud.android.ui.dialog.SamlWebViewDialog;
|
||||||
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
||||||
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;
|
||||||
|
import com.owncloud.android.utils.AnalyticsUtils;
|
||||||
import com.owncloud.android.utils.DisplayUtils;
|
import com.owncloud.android.utils.DisplayUtils;
|
||||||
|
|
||||||
import java.security.cert.X509Certificate;
|
import java.security.cert.X509Certificate;
|
||||||
|
@ -804,7 +805,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
|
|
||||||
if (!webViewLoginMethod) {
|
if (!webViewLoginMethod) {
|
||||||
// bound here to avoid spurious changes triggered by Android on device rotations
|
// bound here to avoid spurious changes triggered by Android on device rotations
|
||||||
|
|
|
@ -1,23 +1,22 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author LukeOwncloud
|
* @author LukeOwncloud
|
||||||
* @author masensio
|
* @author masensio
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.db;
|
package com.owncloud.android.db;
|
||||||
|
@ -41,7 +40,7 @@ import java.io.File;
|
||||||
/**
|
/**
|
||||||
* Stores all information in order to start upload operations. PersistentUploadObject can
|
* Stores all information in order to start upload operations. PersistentUploadObject can
|
||||||
* be stored persistently by {@link UploadsStorageManager}.
|
* be stored persistently by {@link UploadsStorageManager}.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class OCUpload implements Parcelable {
|
public class OCUpload implements Parcelable {
|
||||||
|
|
||||||
|
@ -158,6 +157,7 @@ public class OCUpload implements Parcelable {
|
||||||
public void setUploadId(long id) {
|
public void setUploadId(long id) {
|
||||||
mId = id;
|
mId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getUploadId() {
|
public long getUploadId() {
|
||||||
return mId;
|
return mId;
|
||||||
}
|
}
|
||||||
|
@ -220,7 +220,7 @@ public class OCUpload implements Parcelable {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return File size
|
* @return File size
|
||||||
*/
|
*/
|
||||||
public long getFileSize() {
|
public long getFileSize() {
|
||||||
return mFileSize;
|
return mFileSize;
|
||||||
|
@ -306,7 +306,7 @@ public class OCUpload implements Parcelable {
|
||||||
mUploadEndTimeStamp = uploadEndTimestamp;
|
mUploadEndTimeStamp = uploadEndTimestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getUploadEndTimestamp(){
|
public long getUploadEndTimestamp() {
|
||||||
return mUploadEndTimeStamp;
|
return mUploadEndTimeStamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,8 +318,8 @@ public class OCUpload implements Parcelable {
|
||||||
String localPath = getLocalPath() != null ? getLocalPath() : "";
|
String localPath = getLocalPath() != null ? getLocalPath() : "";
|
||||||
return localPath + " status:" + getUploadStatus() + " result:" +
|
return localPath + " status:" + getUploadStatus() + " result:" +
|
||||||
(getLastResult() == null ? "null" : getLastResult().getValue());
|
(getLastResult() == null ? "null" : getLastResult().getValue());
|
||||||
} catch (NullPointerException e){
|
} catch (NullPointerException e) {
|
||||||
Log_OC.d(TAG, "Exception " + e.toString() );
|
Log_OC.d(TAG, "Exception " + e.toString());
|
||||||
return (e.toString());
|
return (e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -392,6 +392,8 @@ public class OCUpload implements Parcelable {
|
||||||
dest.writeInt(mCreatedBy);
|
dest.writeInt(mCreatedBy);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum CanUploadFileNowStatus {NOW, LATER, FILE_GONE, ERROR};
|
enum CanUploadFileNowStatus {NOW, LATER, FILE_GONE, ERROR}
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,9 +97,11 @@ public abstract class PreferenceManager {
|
||||||
public static boolean instantVideoUploadViaWiFiOnly(Context context) {
|
public static boolean instantVideoUploadViaWiFiOnly(Context context) {
|
||||||
return getDefaultSharedPreferences(context).getBoolean(PREF__INSTANT_VIDEO_UPLOAD_ON_WIFI, false);
|
return getDefaultSharedPreferences(context).getBoolean(PREF__INSTANT_VIDEO_UPLOAD_ON_WIFI, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean instantPictureUploadWhenChargingOnly(Context context) {
|
public static boolean instantPictureUploadWhenChargingOnly(Context context) {
|
||||||
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_upload_on_charging", false);
|
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_upload_on_charging", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean instantVideoUploadWhenChargingOnly(Context context) {
|
public static boolean instantVideoUploadWhenChargingOnly(Context context) {
|
||||||
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_upload_on_charging", false);
|
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_upload_on_charging", false);
|
||||||
}
|
}
|
||||||
|
@ -237,7 +239,7 @@ public abstract class PreferenceManager {
|
||||||
/**
|
/**
|
||||||
* Saves the legacy cleaning flag which the user has set last.
|
* Saves the legacy cleaning flag which the user has set last.
|
||||||
*
|
*
|
||||||
* @param context Caller {@link Context}, used to access to shared preferences manager.
|
* @param context Caller {@link Context}, used to access to shared preferences manager.
|
||||||
* @param legacyClean flag if it is a legacy cleaning
|
* @param legacyClean flag if it is a legacy cleaning
|
||||||
*/
|
*/
|
||||||
public static void setLegacyClean(Context context, boolean legacyClean) {
|
public static void setLegacyClean(Context context, boolean legacyClean) {
|
||||||
|
@ -247,7 +249,7 @@ public abstract class PreferenceManager {
|
||||||
/**
|
/**
|
||||||
* Saves the legacy cleaning flag which the user has set last.
|
* Saves the legacy cleaning flag which the user has set last.
|
||||||
*
|
*
|
||||||
* @param context Caller {@link Context}, used to access to shared preferences manager.
|
* @param context Caller {@link Context}, used to access to shared preferences manager.
|
||||||
* @param pathUpdate flag if it is a auto upload path update
|
* @param pathUpdate flag if it is a auto upload path update
|
||||||
*/
|
*/
|
||||||
public static void setAutoUploadPathsUpdate(Context context, boolean pathUpdate) {
|
public static void setAutoUploadPathsUpdate(Context context, boolean pathUpdate) {
|
||||||
|
@ -268,7 +270,7 @@ public abstract class PreferenceManager {
|
||||||
/**
|
/**
|
||||||
* Saves the uploader behavior which the user has set last.
|
* Saves the uploader behavior which the user has set last.
|
||||||
*
|
*
|
||||||
* @param context Caller {@link Context}, used to access to shared preferences manager.
|
* @param context Caller {@link Context}, used to access to shared preferences manager.
|
||||||
* @param uploaderBehaviour the uploader behavior
|
* @param uploaderBehaviour the uploader behavior
|
||||||
*/
|
*/
|
||||||
public static void setUploaderBehaviour(Context context, int uploaderBehaviour) {
|
public static void setUploaderBehaviour(Context context, int uploaderBehaviour) {
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author Bartek Przybylski
|
* @author Bartek Przybylski
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* @author masensio
|
* @author masensio
|
||||||
* Copyright (C) 2011 Bartek Przybylski
|
* Copyright (C) 2011 Bartek Przybylski
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.db;
|
package com.owncloud.android.db;
|
||||||
|
|
||||||
|
@ -89,13 +88,13 @@ public class ProviderMeta {
|
||||||
public static final String FILE_PERMISSIONS = "permissions";
|
public static final String FILE_PERMISSIONS = "permissions";
|
||||||
public static final String FILE_REMOTE_ID = "remote_id";
|
public static final String FILE_REMOTE_ID = "remote_id";
|
||||||
public static final String FILE_UPDATE_THUMBNAIL = "update_thumbnail";
|
public static final String FILE_UPDATE_THUMBNAIL = "update_thumbnail";
|
||||||
public static final String FILE_IS_DOWNLOADING= "is_downloading";
|
public static final String FILE_IS_DOWNLOADING = "is_downloading";
|
||||||
public static final String FILE_ETAG_IN_CONFLICT = "etag_in_conflict";
|
public static final String FILE_ETAG_IN_CONFLICT = "etag_in_conflict";
|
||||||
public static final String FILE_FAVORITE = "favorite";
|
public static final String FILE_FAVORITE = "favorite";
|
||||||
|
|
||||||
public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME
|
public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME
|
||||||
+ " collate nocase asc";
|
+ " collate nocase asc";
|
||||||
|
|
||||||
// Columns of ocshares table
|
// Columns of ocshares table
|
||||||
public static final String OCSHARES_FILE_SOURCE = "file_source";
|
public static final String OCSHARES_FILE_SOURCE = "file_source";
|
||||||
public static final String OCSHARES_ITEM_SOURCE = "item_source";
|
public static final String OCSHARES_ITEM_SOURCE = "item_source";
|
||||||
|
@ -111,8 +110,8 @@ public class ProviderMeta {
|
||||||
public static final String OCSHARES_USER_ID = "user_id";
|
public static final String OCSHARES_USER_ID = "user_id";
|
||||||
public static final String OCSHARES_ID_REMOTE_SHARED = "id_remote_shared";
|
public static final String OCSHARES_ID_REMOTE_SHARED = "id_remote_shared";
|
||||||
public static final String OCSHARES_ACCOUNT_OWNER = "owner_share";
|
public static final String OCSHARES_ACCOUNT_OWNER = "owner_share";
|
||||||
|
|
||||||
public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE
|
public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE
|
||||||
+ " collate nocase asc";
|
+ " collate nocase asc";
|
||||||
|
|
||||||
// Columns of capabilities table
|
// Columns of capabilities table
|
||||||
|
@ -160,7 +159,7 @@ public class ProviderMeta {
|
||||||
public static final String UPLOADS_UPLOAD_END_TIMESTAMP = "upload_end_timestamp";
|
public static final String UPLOADS_UPLOAD_END_TIMESTAMP = "upload_end_timestamp";
|
||||||
public static final String UPLOADS_LAST_RESULT = "last_result";
|
public static final String UPLOADS_LAST_RESULT = "last_result";
|
||||||
public static final String UPLOADS_CREATED_BY = "created_by";
|
public static final String UPLOADS_CREATED_BY = "created_by";
|
||||||
public static final String UPLOADS_DEFAULT_SORT_ORDER = ProviderTableMeta._ID + " collate nocase desc";
|
public static final String UPLOADS_DEFAULT_SORT_ORDER = ProviderTableMeta._ID + " collate nocase desc";
|
||||||
|
|
||||||
// Columns of synced folder table
|
// Columns of synced folder table
|
||||||
public static final String SYNCED_FOLDER_LOCAL_PATH = "local_path";
|
public static final String SYNCED_FOLDER_LOCAL_PATH = "local_path";
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author masensio
|
* @author masensio
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.db;
|
package com.owncloud.android.db;
|
||||||
|
@ -46,6 +45,7 @@ public enum UploadResult {
|
||||||
public int getValue() {
|
public int getValue() {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UploadResult fromValue(int value) {
|
public static UploadResult fromValue(int value) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case -1:
|
case -1:
|
||||||
|
@ -78,9 +78,9 @@ public enum UploadResult {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UploadResult fromOperationResult(RemoteOperationResult result){
|
public static UploadResult fromOperationResult(RemoteOperationResult result) {
|
||||||
// messy :(
|
// messy :(
|
||||||
switch (result.getCode()){
|
switch (result.getCode()) {
|
||||||
case OK:
|
case OK:
|
||||||
return UPLOADED;
|
return UPLOADED;
|
||||||
case NO_NETWORK_CONNECTION:
|
case NO_NETWORK_CONNECTION:
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2012 Bartek Przybylski
|
* Copyright (C) 2012 Bartek Przybylski
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.files;
|
package com.owncloud.android.files;
|
||||||
|
@ -36,12 +35,12 @@ import com.owncloud.android.services.observer.FileObserverService;
|
||||||
public class BootupBroadcastReceiver extends BroadcastReceiver {
|
public class BootupBroadcastReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
private static final String TAG = BootupBroadcastReceiver.class.getSimpleName();
|
private static final String TAG = BootupBroadcastReceiver.class.getSimpleName();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receives broadcast intent reporting that the system was just boot up.
|
* Receives broadcast intent reporting that the system was just boot up.
|
||||||
*
|
*
|
||||||
* Starts {@link FileObserverService} to enable observation of favourite files.
|
* Starts {@link FileObserverService} to enable observation of favourite files.
|
||||||
*
|
*
|
||||||
* @param context The context where the receiver is running.
|
* @param context The context where the receiver is running.
|
||||||
* @param intent The intent received.
|
* @param intent The intent received.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.files;
|
package com.owncloud.android.files;
|
||||||
|
@ -118,7 +117,7 @@ public class FileMenuFilter {
|
||||||
|
|
||||||
private void hideAll(Menu menu) {
|
private void hideAll(Menu menu) {
|
||||||
MenuItem item;
|
MenuItem item;
|
||||||
for (int i=0; i<menu.size(); i++) {
|
for (int i = 0; i < menu.size(); i++) {
|
||||||
item = menu.getItem(i);
|
item = menu.getItem(i);
|
||||||
item.setVisible(false);
|
item.setVisible(false);
|
||||||
item.setEnabled(false);
|
item.setEnabled(false);
|
||||||
|
@ -134,7 +133,7 @@ public class FileMenuFilter {
|
||||||
* @param toShow List to save the options that must be shown in the menu.
|
* @param toShow List to save the options that must be shown in the menu.
|
||||||
* @param toHide List to save the options that must be shown in the menu.
|
* @param toHide List to save the options that must be shown in the menu.
|
||||||
*/
|
*/
|
||||||
private void filter(List<Integer> toShow, List <Integer> toHide) {
|
private void filter(List<Integer> toShow, List<Integer> toHide) {
|
||||||
boolean synchronizing = anyFileSynchronizing();
|
boolean synchronizing = anyFileSynchronizing();
|
||||||
|
|
||||||
/// decision is taken for each possible action on a file in the menu
|
/// decision is taken for each possible action on a file in the menu
|
||||||
|
@ -197,13 +196,13 @@ public class FileMenuFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SHARE FILE
|
// SHARE FILE
|
||||||
boolean shareViaLinkAllowed = (mContext != null &&
|
boolean shareViaLinkAllowed = (mContext != null &&
|
||||||
mContext.getResources().getBoolean(R.bool.share_via_link_feature));
|
mContext.getResources().getBoolean(R.bool.share_via_link_feature));
|
||||||
boolean shareWithUsersAllowed = (mContext != null &&
|
boolean shareWithUsersAllowed = (mContext != null &&
|
||||||
mContext.getResources().getBoolean(R.bool.share_with_users_feature));
|
mContext.getResources().getBoolean(R.bool.share_with_users_feature));
|
||||||
|
|
||||||
OCCapability capability = mComponentsGetter.getStorageManager().getCapability(mAccount.name);
|
OCCapability capability = mComponentsGetter.getStorageManager().getCapability(mAccount.name);
|
||||||
boolean shareApiEnabled = capability != null &&
|
boolean shareApiEnabled = capability != null &&
|
||||||
(capability.getFilesSharingApiEnabled().isTrue() ||
|
(capability.getFilesSharingApiEnabled().isTrue() ||
|
||||||
capability.getFilesSharingApiEnabled().isUnknown()
|
capability.getFilesSharingApiEnabled().isUnknown()
|
||||||
);
|
);
|
||||||
|
@ -267,9 +266,9 @@ public class FileMenuFilter {
|
||||||
FileUploaderBinder uploaderBinder = mComponentsGetter.getFileUploaderBinder();
|
FileUploaderBinder uploaderBinder = mComponentsGetter.getFileUploaderBinder();
|
||||||
FileDownloaderBinder downloaderBinder = mComponentsGetter.getFileDownloaderBinder();
|
FileDownloaderBinder downloaderBinder = mComponentsGetter.getFileDownloaderBinder();
|
||||||
synchronizing = (
|
synchronizing = (
|
||||||
anyFileSynchronizing(opsBinder) || // comparing local and remote
|
anyFileSynchronizing(opsBinder) || // comparing local and remote
|
||||||
anyFileDownloading(downloaderBinder) ||
|
anyFileDownloading(downloaderBinder) ||
|
||||||
anyFileUploading(uploaderBinder)
|
anyFileUploading(uploaderBinder)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return synchronizing;
|
return synchronizing;
|
||||||
|
@ -278,7 +277,7 @@ public class FileMenuFilter {
|
||||||
private boolean anyFileSynchronizing(OperationsServiceBinder opsBinder) {
|
private boolean anyFileSynchronizing(OperationsServiceBinder opsBinder) {
|
||||||
boolean synchronizing = false;
|
boolean synchronizing = false;
|
||||||
if (opsBinder != null) {
|
if (opsBinder != null) {
|
||||||
for (Iterator<OCFile> iterator = mFiles.iterator(); !synchronizing && iterator.hasNext();) {
|
for (Iterator<OCFile> iterator = mFiles.iterator(); !synchronizing && iterator.hasNext(); ) {
|
||||||
synchronizing = opsBinder.isSynchronizing(mAccount, iterator.next());
|
synchronizing = opsBinder.isSynchronizing(mAccount, iterator.next());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -288,7 +287,7 @@ public class FileMenuFilter {
|
||||||
private boolean anyFileDownloading(FileDownloaderBinder downloaderBinder) {
|
private boolean anyFileDownloading(FileDownloaderBinder downloaderBinder) {
|
||||||
boolean downloading = false;
|
boolean downloading = false;
|
||||||
if (downloaderBinder != null) {
|
if (downloaderBinder != null) {
|
||||||
for (Iterator<OCFile> iterator = mFiles.iterator(); !downloading && iterator.hasNext();) {
|
for (Iterator<OCFile> iterator = mFiles.iterator(); !downloading && iterator.hasNext(); ) {
|
||||||
downloading = downloaderBinder.isDownloading(mAccount, iterator.next());
|
downloading = downloaderBinder.isDownloading(mAccount, iterator.next());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -298,7 +297,7 @@ public class FileMenuFilter {
|
||||||
private boolean anyFileUploading(FileUploaderBinder uploaderBinder) {
|
private boolean anyFileUploading(FileUploaderBinder uploaderBinder) {
|
||||||
boolean uploading = false;
|
boolean uploading = false;
|
||||||
if (uploaderBinder != null) {
|
if (uploaderBinder != null) {
|
||||||
for (Iterator<OCFile> iterator = mFiles.iterator(); !uploading && iterator.hasNext();) {
|
for (Iterator<OCFile> iterator = mFiles.iterator(); !uploading && iterator.hasNext(); ) {
|
||||||
uploading = uploaderBinder.isUploading(mAccount, iterator.next());
|
uploading = uploaderBinder.isUploading(mAccount, iterator.next());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -318,8 +317,8 @@ public class FileMenuFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean containsFolder() {
|
private boolean containsFolder() {
|
||||||
for(OCFile file: mFiles) {
|
for (OCFile file : mFiles) {
|
||||||
if(file.isFolder()) {
|
if (file.isFolder()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,8 +326,8 @@ public class FileMenuFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean anyFileDown() {
|
private boolean anyFileDown() {
|
||||||
for(OCFile file: mFiles) {
|
for (OCFile file : mFiles) {
|
||||||
if(file.isDown()) {
|
if (file.isDown()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -336,8 +335,8 @@ public class FileMenuFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean allKeptAvailableOffline() {
|
private boolean allKeptAvailableOffline() {
|
||||||
for(OCFile file: mFiles) {
|
for (OCFile file : mFiles) {
|
||||||
if(!file.isAvailableOffline()) {
|
if (!file.isAvailableOffline()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -345,8 +344,8 @@ public class FileMenuFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean allFavorites() {
|
private boolean allFavorites() {
|
||||||
for(OCFile file: mFiles) {
|
for (OCFile file : mFiles) {
|
||||||
if(!file.getIsFavorite()) {
|
if (!file.getIsFavorite()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -354,8 +353,8 @@ public class FileMenuFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean allNotFavorites() {
|
private boolean allNotFavorites() {
|
||||||
for(OCFile file: mFiles) {
|
for (OCFile file : mFiles) {
|
||||||
if(file.getIsFavorite()) {
|
if (file.getIsFavorite()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,8 +362,8 @@ public class FileMenuFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean allNotKeptAvailableOffline() {
|
private boolean allNotKeptAvailableOffline() {
|
||||||
for(OCFile file: mFiles) {
|
for (OCFile file : mFiles) {
|
||||||
if(file.isAvailableOffline()) {
|
if (file.isAvailableOffline()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author Bartek Przybylski
|
* @author Bartek Przybylski
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2012 Bartek Przybylski
|
* Copyright (C) 2012 Bartek Przybylski
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.files;
|
package com.owncloud.android.files;
|
||||||
|
@ -103,7 +103,7 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] CONTENT_PROJECTION = {
|
String[] CONTENT_PROJECTION = {
|
||||||
Images.Media.DATA, Images.Media.DISPLAY_NAME, Images.Media.MIME_TYPE, Images.Media.SIZE };
|
Images.Media.DATA, Images.Media.DISPLAY_NAME, Images.Media.MIME_TYPE, Images.Media.SIZE};
|
||||||
|
|
||||||
int permissionCheck = ContextCompat.checkSelfPermission(context,
|
int permissionCheck = ContextCompat.checkSelfPermission(context,
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE);
|
Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||||
|
@ -136,7 +136,7 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
int behaviour = getUploadBehaviour(context);
|
int behaviour = getUploadBehaviour(context);
|
||||||
Boolean subfolderByDate = PreferenceManager.instantPictureUploadPathUseSubfolders(context);
|
Boolean subfolderByDate = PreferenceManager.instantPictureUploadPathUseSubfolders(context);
|
||||||
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
String uploadPathdef = context.getString(R.string.instant_upload_path);
|
String uploadPathdef = context.getString(R.string.instant_upload_path);
|
||||||
String uploadPath = pref.getString("instant_upload_path", uploadPathdef);
|
String uploadPath = pref.getString("instant_upload_path", uploadPathdef);
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.media;
|
package com.owncloud.android.media;
|
||||||
|
|
||||||
|
@ -48,31 +47,31 @@ import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* View containing controls for a {@link MediaPlayer}.
|
* View containing controls for a {@link MediaPlayer}.
|
||||||
*
|
*
|
||||||
* Holds buttons "play / pause", "rewind", "fast forward"
|
* Holds buttons "play / pause", "rewind", "fast forward"
|
||||||
* and a progress slider.
|
* and a progress slider.
|
||||||
*
|
*
|
||||||
* It synchronizes itself with the state of the
|
* It synchronizes itself with the state of the
|
||||||
* {@link MediaPlayer}.
|
* {@link MediaPlayer}.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class MediaControlView extends FrameLayout /* implements OnLayoutChangeListener, OnTouchListener */ implements OnClickListener, OnSeekBarChangeListener {
|
public class MediaControlView extends FrameLayout /* implements OnLayoutChangeListener, OnTouchListener */ implements OnClickListener, OnSeekBarChangeListener {
|
||||||
|
|
||||||
private MediaPlayerControl mPlayer;
|
private MediaPlayerControl mPlayer;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private View mRoot;
|
private View mRoot;
|
||||||
private ProgressBar mProgress;
|
private ProgressBar mProgress;
|
||||||
private TextView mEndTime, mCurrentTime;
|
private TextView mEndTime, mCurrentTime;
|
||||||
private boolean mDragging;
|
private boolean mDragging;
|
||||||
private static final int SHOW_PROGRESS = 1;
|
private static final int SHOW_PROGRESS = 1;
|
||||||
private ImageButton mPauseButton;
|
private ImageButton mPauseButton;
|
||||||
private ImageButton mFfwdButton;
|
private ImageButton mFfwdButton;
|
||||||
private ImageButton mRewButton;
|
private ImageButton mRewButton;
|
||||||
|
|
||||||
public MediaControlView(Context context, AttributeSet attrs) {
|
public MediaControlView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
|
||||||
FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
|
FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT
|
ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
|
@ -81,7 +80,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
mRoot = inflate.inflate(R.layout.media_control, null);
|
mRoot = inflate.inflate(R.layout.media_control, null);
|
||||||
initControllerView(mRoot);
|
initControllerView(mRoot);
|
||||||
addView(mRoot, frameParams);
|
addView(mRoot, frameParams);
|
||||||
|
|
||||||
setFocusable(true);
|
setFocusable(true);
|
||||||
setFocusableInTouchMode(true);
|
setFocusableInTouchMode(true);
|
||||||
setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
|
setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
|
||||||
|
@ -189,15 +188,15 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
public void setMediaPlayer(MediaPlayerControl player) {
|
public void setMediaPlayer(MediaPlayerControl player) {
|
||||||
mPlayer = player;
|
mPlayer = player;
|
||||||
mHandler.sendEmptyMessage(SHOW_PROGRESS);
|
mHandler.sendEmptyMessage(SHOW_PROGRESS);
|
||||||
updatePausePlay();
|
updatePausePlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void initControllerView(View v) {
|
private void initControllerView(View v) {
|
||||||
mPauseButton = (ImageButton) v.findViewById(R.id.playBtn);
|
mPauseButton = (ImageButton) v.findViewById(R.id.playBtn);
|
||||||
if (mPauseButton != null) {
|
if (mPauseButton != null) {
|
||||||
|
@ -231,7 +230,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
mCurrentTime = (TextView) v.findViewById(R.id.currentTimeText);
|
mCurrentTime = (TextView) v.findViewById(R.id.currentTimeText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable pause or seek buttons if the stream cannot be paused or seeked.
|
* Disable pause or seek buttons if the stream cannot be paused or seeked.
|
||||||
* This requires the control interface to be a MediaPlayerControlExt
|
* This requires the control interface to be a MediaPlayerControlExt
|
||||||
|
@ -254,8 +253,8 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
// the buttons.
|
// the buttons.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Handler mHandler = new Handler() {
|
private Handler mHandler = new Handler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
|
@ -275,7 +274,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
|
|
||||||
int seconds = totalSeconds % 60;
|
int seconds = totalSeconds % 60;
|
||||||
int minutes = (totalSeconds / 60) % 60;
|
int minutes = (totalSeconds / 60) % 60;
|
||||||
int hours = totalSeconds / 3600;
|
int hours = totalSeconds / 3600;
|
||||||
|
|
||||||
final StringBuilder mFormatBuilder = new StringBuilder();
|
final StringBuilder mFormatBuilder = new StringBuilder();
|
||||||
final Formatter mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());
|
final Formatter mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());
|
||||||
|
@ -296,7 +295,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
if (duration > 0) {
|
if (duration > 0) {
|
||||||
// use long to avoid overflow
|
// use long to avoid overflow
|
||||||
long pos = 1000L * position / duration;
|
long pos = 1000L * position / duration;
|
||||||
mProgress.setProgress( (int) pos);
|
mProgress.setProgress((int) pos);
|
||||||
}
|
}
|
||||||
int percent = mPlayer.getBufferPercentage();
|
int percent = mPlayer.getBufferPercentage();
|
||||||
mProgress.setSecondaryProgress(percent * 10);
|
mProgress.setSecondaryProgress(percent * 10);
|
||||||
|
@ -310,14 +309,14 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
}
|
}
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
public boolean dispatchKeyEvent(KeyEvent event) {
|
||||||
int keyCode = event.getKeyCode();
|
int keyCode = event.getKeyCode();
|
||||||
final boolean uniqueDown = event.getRepeatCount() == 0
|
final boolean uniqueDown = event.getRepeatCount() == 0
|
||||||
&& event.getAction() == KeyEvent.ACTION_DOWN;
|
&& event.getAction() == KeyEvent.ACTION_DOWN;
|
||||||
if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK
|
if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK
|
||||||
|| keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
|
|| keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
|
||||||
|| keyCode == KeyEvent.KEYCODE_SPACE) {
|
|| keyCode == KeyEvent.KEYCODE_SPACE) {
|
||||||
if (uniqueDown) {
|
if (uniqueDown) {
|
||||||
|
@ -393,34 +392,34 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
int pos;
|
int pos;
|
||||||
boolean playing = mPlayer.isPlaying();
|
boolean playing = mPlayer.isPlaying();
|
||||||
switch (v.getId()) {
|
switch (v.getId()) {
|
||||||
|
|
||||||
case R.id.playBtn:
|
|
||||||
doPauseResume();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R.id.rewindBtn:
|
case R.id.playBtn:
|
||||||
pos = mPlayer.getCurrentPosition();
|
doPauseResume();
|
||||||
pos -= 5000;
|
break;
|
||||||
mPlayer.seekTo(pos);
|
|
||||||
if (!playing) {
|
|
||||||
mPlayer.pause(); // necessary in some 2.3.x devices
|
|
||||||
}
|
|
||||||
setProgress();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R.id.forwardBtn:
|
case R.id.rewindBtn:
|
||||||
pos = mPlayer.getCurrentPosition();
|
pos = mPlayer.getCurrentPosition();
|
||||||
pos += 15000;
|
pos -= 5000;
|
||||||
mPlayer.seekTo(pos);
|
mPlayer.seekTo(pos);
|
||||||
if (!playing) {
|
if (!playing) {
|
||||||
mPlayer.pause(); // necessary in some 2.3.x devices
|
mPlayer.pause(); // necessary in some 2.3.x devices
|
||||||
}
|
}
|
||||||
setProgress();
|
setProgress();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case R.id.forwardBtn:
|
||||||
|
pos = mPlayer.getCurrentPosition();
|
||||||
|
pos += 15000;
|
||||||
|
mPlayer.seekTo(pos);
|
||||||
|
if (!playing) {
|
||||||
|
mPlayer.pause(); // necessary in some 2.3.x devices
|
||||||
|
}
|
||||||
|
setProgress();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||||
if (!fromUser) {
|
if (!fromUser) {
|
||||||
|
@ -431,16 +430,16 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
|
|
||||||
long duration = mPlayer.getDuration();
|
long duration = mPlayer.getDuration();
|
||||||
long newposition = (duration * progress) / 1000L;
|
long newposition = (duration * progress) / 1000L;
|
||||||
mPlayer.seekTo( (int) newposition);
|
mPlayer.seekTo((int) newposition);
|
||||||
if (mCurrentTime != null) {
|
if (mCurrentTime != null) {
|
||||||
mCurrentTime.setText(stringForTime((int) newposition));
|
mCurrentTime.setText(stringForTime((int) newposition));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called in devices with touchpad when the user starts to adjust the
|
* Called in devices with touchpad when the user starts to adjust the
|
||||||
* position of the seekbar's thumb.
|
* position of the seekbar's thumb.
|
||||||
*
|
*
|
||||||
* Will be followed by several onProgressChanged notifications.
|
* Will be followed by several onProgressChanged notifications.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@ -449,7 +448,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
mHandler.removeMessages(SHOW_PROGRESS); // grants no more updates with media player progress while dragging
|
mHandler.removeMessages(SHOW_PROGRESS); // grants no more updates with media player progress while dragging
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called in devices with touchpad when the user finishes the
|
* Called in devices with touchpad when the user finishes the
|
||||||
* adjusting of the seekbar.
|
* adjusting of the seekbar.
|
||||||
|
@ -473,5 +472,5 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
||||||
super.onInitializeAccessibilityNodeInfo(info);
|
super.onInitializeAccessibilityNodeInfo(info);
|
||||||
info.setClassName(MediaControlView.class.getName());
|
info.setClassName(MediaControlView.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.media;
|
package com.owncloud.android.media;
|
||||||
|
@ -49,18 +48,18 @@ import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service that handles media playback, both audio and video.
|
* Service that handles media playback, both audio and video.
|
||||||
*
|
*
|
||||||
* Waits for Intents which signal the service to perform specific operations: Play, Pause,
|
* Waits for Intents which signal the service to perform specific operations: Play, Pause,
|
||||||
* Rewind, etc.
|
* Rewind, etc.
|
||||||
*/
|
*/
|
||||||
public class MediaService extends Service implements OnCompletionListener, OnPreparedListener,
|
public class MediaService extends Service implements OnCompletionListener, OnPreparedListener,
|
||||||
OnErrorListener, AudioManager.OnAudioFocusChangeListener {
|
OnErrorListener, AudioManager.OnAudioFocusChangeListener {
|
||||||
|
|
||||||
private static final String TAG = MediaService.class.getSimpleName();
|
private static final String TAG = MediaService.class.getSimpleName();
|
||||||
|
|
||||||
private static final String MY_PACKAGE = MediaService.class.getPackage() != null ?
|
private static final String MY_PACKAGE = MediaService.class.getPackage() != null ?
|
||||||
MediaService.class.getPackage().getName() : "com.owncloud.android.media";
|
MediaService.class.getPackage().getName() : "com.owncloud.android.media";
|
||||||
|
|
||||||
/// Intent actions that we are prepared to handle
|
/// Intent actions that we are prepared to handle
|
||||||
public static final String ACTION_PLAY_FILE = MY_PACKAGE + ".action.PLAY_FILE";
|
public static final String ACTION_PLAY_FILE = MY_PACKAGE + ".action.PLAY_FILE";
|
||||||
public static final String ACTION_STOP_ALL = MY_PACKAGE + ".action.STOP_ALL";
|
public static final String ACTION_STOP_ALL = MY_PACKAGE + ".action.STOP_ALL";
|
||||||
|
@ -77,49 +76,51 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
|
|
||||||
/** Time To keep the control panel visible when the user does not use it */
|
/** Time To keep the control panel visible when the user does not use it */
|
||||||
public static final int MEDIA_CONTROL_SHORT_LIFE = 4000;
|
public static final int MEDIA_CONTROL_SHORT_LIFE = 4000;
|
||||||
|
|
||||||
/** Time To keep the control panel visible when the user does not use it */
|
/** Time To keep the control panel visible when the user does not use it */
|
||||||
public static final int MEDIA_CONTROL_PERMANENT = 0;
|
public static final int MEDIA_CONTROL_PERMANENT = 0;
|
||||||
|
|
||||||
/** Volume to set when audio focus is lost and ducking is allowed */
|
/** Volume to set when audio focus is lost and ducking is allowed */
|
||||||
private static final float DUCK_VOLUME = 0.1f;
|
private static final float DUCK_VOLUME = 0.1f;
|
||||||
|
|
||||||
/** Media player instance */
|
/** Media player instance */
|
||||||
private MediaPlayer mPlayer = null;
|
private MediaPlayer mPlayer = null;
|
||||||
|
|
||||||
/** Reference to the system AudioManager */
|
/** Reference to the system AudioManager */
|
||||||
private AudioManager mAudioManager = null;
|
private AudioManager mAudioManager = null;
|
||||||
|
|
||||||
|
|
||||||
/** Values to indicate the state of the service */
|
/** Values to indicate the state of the service */
|
||||||
enum State {
|
enum State {
|
||||||
STOPPED,
|
STOPPED,
|
||||||
PREPARING,
|
PREPARING,
|
||||||
PLAYING,
|
PLAYING,
|
||||||
PAUSED
|
PAUSED
|
||||||
};
|
}
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
/** Current state */
|
/** Current state */
|
||||||
private State mState = State.STOPPED;
|
private State mState = State.STOPPED;
|
||||||
|
|
||||||
/** Possible focus values */
|
/** Possible focus values */
|
||||||
enum AudioFocus {
|
enum AudioFocus {
|
||||||
NO_FOCUS,
|
NO_FOCUS,
|
||||||
NO_FOCUS_CAN_DUCK,
|
NO_FOCUS_CAN_DUCK,
|
||||||
FOCUS
|
FOCUS
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Current focus state */
|
/** Current focus state */
|
||||||
private AudioFocus mAudioFocus = AudioFocus.NO_FOCUS;
|
private AudioFocus mAudioFocus = AudioFocus.NO_FOCUS;
|
||||||
|
|
||||||
|
|
||||||
/** 'True' when the current song is streaming from the network */
|
/** 'True' when the current song is streaming from the network */
|
||||||
private boolean mIsStreaming = false;
|
private boolean mIsStreaming = false;
|
||||||
|
|
||||||
/** Wifi lock kept to prevents the device from shutting off the radio when streaming a file. */
|
/** Wifi lock kept to prevents the device from shutting off the radio when streaming a file. */
|
||||||
private WifiLock mWifiLock;
|
private WifiLock mWifiLock;
|
||||||
|
|
||||||
private static final String MEDIA_WIFI_LOCK_TAG = MY_PACKAGE + ".WIFI_LOCK";
|
private static final String MEDIA_WIFI_LOCK_TAG = MY_PACKAGE + ".WIFI_LOCK";
|
||||||
|
|
||||||
/** Notification to keep in the notification bar while a song is playing */
|
/** Notification to keep in the notification bar while a song is playing */
|
||||||
|
@ -127,16 +128,16 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
|
|
||||||
/** File being played */
|
/** File being played */
|
||||||
private OCFile mFile;
|
private OCFile mFile;
|
||||||
|
|
||||||
/** Account holding the file being played */
|
/** Account holding the file being played */
|
||||||
private Account mAccount;
|
private Account mAccount;
|
||||||
|
|
||||||
/** Flag signaling if the audio should be played immediately when the file is prepared */
|
/** Flag signaling if the audio should be played immediately when the file is prepared */
|
||||||
protected boolean mPlayOnPrepared;
|
protected boolean mPlayOnPrepared;
|
||||||
|
|
||||||
/** Position, in miliseconds, where the audio should be started */
|
/** Position, in miliseconds, where the audio should be started */
|
||||||
private int mStartPosition;
|
private int mStartPosition;
|
||||||
|
|
||||||
/** Interface to access the service through binding */
|
/** Interface to access the service through binding */
|
||||||
private IBinder mBinder;
|
private IBinder mBinder;
|
||||||
|
|
||||||
|
@ -145,21 +146,21 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
|
|
||||||
/** Notification builder to create notifications, new reuse way since Android 6 */
|
/** Notification builder to create notifications, new reuse way since Android 6 */
|
||||||
private NotificationCompat.Builder mNotificationBuilder;
|
private NotificationCompat.Builder mNotificationBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method to get an error message suitable to show to users for errors occurred in media playback,
|
* Helper method to get an error message suitable to show to users for errors occurred in media playback,
|
||||||
*
|
*
|
||||||
* @param context A context to access string resources.
|
* @param context A context to access string resources.
|
||||||
* @param what See {@link MediaPlayer.OnErrorListener#onError(MediaPlayer, int, int)
|
* @param what See {@link MediaPlayer.OnErrorListener#onError(MediaPlayer, int, int)
|
||||||
* @param extra See {@link MediaPlayer.OnErrorListener#onError(MediaPlayer, int, int)
|
* @param extra See {@link MediaPlayer.OnErrorListener#onError(MediaPlayer, int, int)
|
||||||
* @return Message suitable to users.
|
* @return Message suitable to users.
|
||||||
*/
|
*/
|
||||||
public static String getMessageForMediaError(Context context, int what, int extra) {
|
public static String getMessageForMediaError(Context context, int what, int extra) {
|
||||||
int messageId;
|
int messageId;
|
||||||
|
|
||||||
if (what == OC_MEDIA_ERROR) {
|
if (what == OC_MEDIA_ERROR) {
|
||||||
messageId = extra;
|
messageId = extra;
|
||||||
|
|
||||||
} else if (extra == MediaPlayer.MEDIA_ERROR_UNSUPPORTED) {
|
} else if (extra == MediaPlayer.MEDIA_ERROR_UNSUPPORTED) {
|
||||||
/* Added in API level 17
|
/* Added in API level 17
|
||||||
Bitstream is conforming to the related coding standard or file spec,
|
Bitstream is conforming to the related coding standard or file spec,
|
||||||
|
@ -174,14 +175,14 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
Constant Value: -1004 (0xfffffc14)
|
Constant Value: -1004 (0xfffffc14)
|
||||||
*/
|
*/
|
||||||
messageId = R.string.media_err_io;
|
messageId = R.string.media_err_io;
|
||||||
|
|
||||||
} else if (extra == MediaPlayer.MEDIA_ERROR_MALFORMED) {
|
} else if (extra == MediaPlayer.MEDIA_ERROR_MALFORMED) {
|
||||||
/* Added in API level 17
|
/* Added in API level 17
|
||||||
Bitstream is not conforming to the related coding standard or file spec.
|
Bitstream is not conforming to the related coding standard or file spec.
|
||||||
Constant Value: -1007 (0xfffffc11)
|
Constant Value: -1007 (0xfffffc11)
|
||||||
*/
|
*/
|
||||||
messageId = R.string.media_err_malformed;
|
messageId = R.string.media_err_malformed;
|
||||||
|
|
||||||
} else if (extra == MediaPlayer.MEDIA_ERROR_TIMED_OUT) {
|
} else if (extra == MediaPlayer.MEDIA_ERROR_TIMED_OUT) {
|
||||||
/* Added in API level 17
|
/* Added in API level 17
|
||||||
Some operation takes too long to complete, usually more than 3-5 seconds.
|
Some operation takes too long to complete, usually more than 3-5 seconds.
|
||||||
|
@ -196,7 +197,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
Constant Value: 200 (0x000000c8)
|
Constant Value: 200 (0x000000c8)
|
||||||
*/
|
*/
|
||||||
messageId = R.string.media_err_invalid_progressive_playback;
|
messageId = R.string.media_err_invalid_progressive_playback;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* MediaPlayer.MEDIA_ERROR_UNKNOWN
|
/* MediaPlayer.MEDIA_ERROR_UNKNOWN
|
||||||
Added in API level 1
|
Added in API level 1
|
||||||
|
@ -215,10 +216,9 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize a service instance
|
* Initialize a service instance
|
||||||
*
|
*
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@ -236,18 +236,18 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
mBinder = new MediaServiceBinder(this);
|
mBinder = new MediaServiceBinder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entry point for Intents requesting actions, sent here via startService.
|
* Entry point for Intents requesting actions, sent here via startService.
|
||||||
*
|
*
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
if (action.equals(ACTION_PLAY_FILE)) {
|
if (action.equals(ACTION_PLAY_FILE)) {
|
||||||
processPlayFileRequest(intent);
|
processPlayFileRequest(intent);
|
||||||
|
|
||||||
} else if (action.equals(ACTION_STOP_ALL)) {
|
} else if (action.equals(ACTION_STOP_ALL)) {
|
||||||
processStopRequest(true);
|
processStopRequest(true);
|
||||||
}
|
}
|
||||||
|
@ -258,9 +258,9 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes a request to play a media file received as a parameter
|
* Processes a request to play a media file received as a parameter
|
||||||
*
|
*
|
||||||
* TODO If a new request is received when a file is being prepared, it is ignored. Is this what we want?
|
* TODO If a new request is received when a file is being prepared, it is ignored. Is this what we want?
|
||||||
*
|
*
|
||||||
* @param intent Intent received in the request with the data to identify the file to play.
|
* @param intent Intent received in the request with the data to identify the file to play.
|
||||||
*/
|
*/
|
||||||
private void processPlayFileRequest(Intent intent) {
|
private void processPlayFileRequest(Intent intent) {
|
||||||
|
@ -274,7 +274,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes a request to play a media file.
|
* Processes a request to play a media file.
|
||||||
*/
|
*/
|
||||||
|
@ -286,7 +286,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
if (mState == State.STOPPED) {
|
if (mState == State.STOPPED) {
|
||||||
// (re)start playback
|
// (re)start playback
|
||||||
playMedia();
|
playMedia();
|
||||||
|
|
||||||
} else if (mState == State.PAUSED) {
|
} else if (mState == State.PAUSED) {
|
||||||
// continue playback
|
// continue playback
|
||||||
mState = State.PLAYING;
|
mState = State.PLAYING;
|
||||||
|
@ -295,7 +295,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes sure the media player exists and has been reset. This will create the media player
|
* Makes sure the media player exists and has been reset. This will create the media player
|
||||||
* if needed. reset the existing media player if one already exists.
|
* if needed. reset the existing media player if one already exists.
|
||||||
|
@ -311,7 +311,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
mPlayer.setOnPreparedListener(this);
|
mPlayer.setOnPreparedListener(this);
|
||||||
mPlayer.setOnCompletionListener(this);
|
mPlayer.setOnCompletionListener(this);
|
||||||
mPlayer.setOnErrorListener(this);
|
mPlayer.setOnErrorListener(this);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
mPlayer.reset();
|
mPlayer.reset();
|
||||||
}
|
}
|
||||||
|
@ -328,11 +328,11 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
// TODO polite audio focus, instead of keep it owned; or not?
|
// TODO polite audio focus, instead of keep it owned; or not?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes a request to stop the playback.
|
* Processes a request to stop the playback.
|
||||||
*
|
*
|
||||||
* @param force When 'true', the playback is stopped no matter the value of mState
|
* @param force When 'true', the playback is stopped no matter the value of mState
|
||||||
*/
|
*/
|
||||||
protected void processStopRequest(boolean force) {
|
protected void processStopRequest(boolean force) {
|
||||||
|
@ -345,7 +345,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
stopSelf(); // service is no longer necessary
|
stopSelf(); // service is no longer necessary
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Releases resources used by the service for playback. This includes the "foreground service"
|
* Releases resources used by the service for playback. This includes the "foreground service"
|
||||||
|
@ -370,20 +370,20 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fully releases the audio focus.
|
* Fully releases the audio focus.
|
||||||
*/
|
*/
|
||||||
private void giveUpAudioFocus() {
|
private void giveUpAudioFocus() {
|
||||||
if (mAudioFocus == AudioFocus.FOCUS
|
if (mAudioFocus == AudioFocus.FOCUS
|
||||||
&& mAudioManager != null
|
&& mAudioManager != null
|
||||||
&& AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.abandonAudioFocus(this)) {
|
&& AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.abandonAudioFocus(this)) {
|
||||||
|
|
||||||
mAudioFocus = AudioFocus.NO_FOCUS;
|
mAudioFocus = AudioFocus.NO_FOCUS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reconfigures MediaPlayer according to audio focus settings and starts/restarts it.
|
* Reconfigures MediaPlayer according to audio focus settings and starts/restarts it.
|
||||||
*/
|
*/
|
||||||
|
@ -391,42 +391,42 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
if (mPlayer == null) {
|
if (mPlayer == null) {
|
||||||
throw new IllegalStateException("mPlayer is NULL");
|
throw new IllegalStateException("mPlayer is NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mAudioFocus == AudioFocus.NO_FOCUS) {
|
if (mAudioFocus == AudioFocus.NO_FOCUS) {
|
||||||
if (mPlayer.isPlaying()) {
|
if (mPlayer.isPlaying()) {
|
||||||
mPlayer.pause(); // have to be polite; but mState is not changed, to resume when focus is received again
|
mPlayer.pause(); // have to be polite; but mState is not changed, to resume when focus is received again
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (mAudioFocus == AudioFocus.NO_FOCUS_CAN_DUCK) {
|
if (mAudioFocus == AudioFocus.NO_FOCUS_CAN_DUCK) {
|
||||||
mPlayer.setVolume(DUCK_VOLUME, DUCK_VOLUME);
|
mPlayer.setVolume(DUCK_VOLUME, DUCK_VOLUME);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
mPlayer.setVolume(1.0f, 1.0f); // full volume
|
mPlayer.setVolume(1.0f, 1.0f); // full volume
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mPlayer.isPlaying()) {
|
if (!mPlayer.isPlaying()) {
|
||||||
mPlayer.start();
|
mPlayer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requests the audio focus to the Audio Manager
|
* Requests the audio focus to the Audio Manager
|
||||||
*/
|
*/
|
||||||
private void tryToGetAudioFocus() {
|
private void tryToGetAudioFocus() {
|
||||||
if (mAudioFocus != AudioFocus.FOCUS
|
if (mAudioFocus != AudioFocus.FOCUS
|
||||||
&& mAudioManager != null
|
&& mAudioManager != null
|
||||||
&& (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.requestAudioFocus( this,
|
&& (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.requestAudioFocus(this,
|
||||||
AudioManager.STREAM_MUSIC,
|
AudioManager.STREAM_MUSIC,
|
||||||
AudioManager.AUDIOFOCUS_GAIN))
|
AudioManager.AUDIOFOCUS_GAIN))
|
||||||
) {
|
) {
|
||||||
mAudioFocus = AudioFocus.FOCUS;
|
mAudioFocus = AudioFocus.FOCUS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts playing the current media file.
|
* Starts playing the current media file.
|
||||||
*/
|
*/
|
||||||
|
@ -435,11 +435,11 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
releaseResources(false); // release everything except MediaPlayer
|
releaseResources(false); // release everything except MediaPlayer
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (mFile == null) {
|
if (mFile == null) {
|
||||||
Toast.makeText(this, R.string.media_err_nothing_to_play, Toast.LENGTH_LONG).show();
|
Toast.makeText(this, R.string.media_err_nothing_to_play, Toast.LENGTH_LONG).show();
|
||||||
processStopRequest(true);
|
processStopRequest(true);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} else if (mAccount == null) {
|
} else if (mAccount == null) {
|
||||||
Toast.makeText(this, R.string.media_err_not_in_owncloud, Toast.LENGTH_LONG).show();
|
Toast.makeText(this, R.string.media_err_not_in_owncloud, Toast.LENGTH_LONG).show();
|
||||||
processStopRequest(true);
|
processStopRequest(true);
|
||||||
|
@ -456,7 +456,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
mIsStreaming = url.startsWith("http:") || url.startsWith("https:");
|
mIsStreaming = url.startsWith("http:") || url.startsWith("https:");
|
||||||
*/
|
*/
|
||||||
mIsStreaming = false;
|
mIsStreaming = false;
|
||||||
|
|
||||||
mPlayer.setDataSource(url);
|
mPlayer.setDataSource(url);
|
||||||
|
|
||||||
mState = State.PREPARING;
|
mState = State.PREPARING;
|
||||||
|
@ -466,30 +466,30 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
mPlayer.prepareAsync();
|
mPlayer.prepareAsync();
|
||||||
|
|
||||||
// prevent the Wifi from going to sleep when streaming
|
// prevent the Wifi from going to sleep when streaming
|
||||||
if (mIsStreaming) {
|
if (mIsStreaming) {
|
||||||
mWifiLock.acquire();
|
mWifiLock.acquire();
|
||||||
} else if (mWifiLock.isHeld()) {
|
} else if (mWifiLock.isHeld()) {
|
||||||
mWifiLock.release();
|
mWifiLock.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (SecurityException e) {
|
} catch (SecurityException e) {
|
||||||
Log_OC.e(TAG, "SecurityException playing " + mAccount.name + mFile.getRemotePath(), e);
|
Log_OC.e(TAG, "SecurityException playing " + mAccount.name + mFile.getRemotePath(), e);
|
||||||
Toast.makeText(this, String.format(getString(R.string.media_err_security_ex), mFile.getFileName()),
|
Toast.makeText(this, String.format(getString(R.string.media_err_security_ex), mFile.getFileName()),
|
||||||
Toast.LENGTH_LONG).show();
|
Toast.LENGTH_LONG).show();
|
||||||
processStopRequest(true);
|
processStopRequest(true);
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log_OC.e(TAG, "IOException playing " + mAccount.name + mFile.getRemotePath(), e);
|
Log_OC.e(TAG, "IOException playing " + mAccount.name + mFile.getRemotePath(), e);
|
||||||
Toast.makeText(this, String.format(getString(R.string.media_err_io_ex), mFile.getFileName()),
|
Toast.makeText(this, String.format(getString(R.string.media_err_io_ex), mFile.getFileName()),
|
||||||
Toast.LENGTH_LONG).show();
|
Toast.LENGTH_LONG).show();
|
||||||
processStopRequest(true);
|
processStopRequest(true);
|
||||||
|
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
Log_OC.e(TAG, "IllegalStateException " + mAccount.name + mFile.getRemotePath(), e);
|
Log_OC.e(TAG, "IllegalStateException " + mAccount.name + mFile.getRemotePath(), e);
|
||||||
Toast.makeText(this, String.format(getString(R.string.media_err_unexpected), mFile.getFileName()),
|
Toast.makeText(this, String.format(getString(R.string.media_err_unexpected), mFile.getFileName()),
|
||||||
Toast.LENGTH_LONG).show();
|
Toast.LENGTH_LONG).show();
|
||||||
processStopRequest(true);
|
processStopRequest(true);
|
||||||
|
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
Log_OC.e(TAG, "IllegalArgumentException " + mAccount.name + mFile.getRemotePath(), e);
|
Log_OC.e(TAG, "IllegalArgumentException " + mAccount.name + mFile.getRemotePath(), e);
|
||||||
Toast.makeText(this, String.format(getString(R.string.media_err_unexpected), mFile.getFileName()),
|
Toast.makeText(this, String.format(getString(R.string.media_err_unexpected), mFile.getFileName()),
|
||||||
|
@ -498,7 +498,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Called when media player is done playing current song. */
|
/** Called when media player is done playing current song. */
|
||||||
public void onCompletion(MediaPlayer player) {
|
public void onCompletion(MediaPlayer player) {
|
||||||
Toast.makeText(this, String.format(getString(R.string.media_event_done, mFile.getFileName())), Toast.LENGTH_LONG).show();
|
Toast.makeText(this, String.format(getString(R.string.media_event_done, mFile.getFileName())), Toast.LENGTH_LONG).show();
|
||||||
|
@ -513,9 +513,9 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
/**
|
||||||
* Called when media player is done preparing.
|
* Called when media player is done preparing.
|
||||||
*
|
*
|
||||||
* Time to start.
|
* Time to start.
|
||||||
|
@ -531,14 +531,14 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
if (!mPlayOnPrepared) {
|
if (!mPlayOnPrepared) {
|
||||||
processPauseRequest();
|
processPauseRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mMediaController != null) {
|
if (mMediaController != null) {
|
||||||
mMediaController.updatePausePlay();
|
mMediaController.updatePausePlay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
/**
|
||||||
* Updates the status notification
|
* Updates the status notification
|
||||||
*/
|
*/
|
||||||
private void updateNotification(String content) {
|
private void updateNotification(String content) {
|
||||||
|
@ -562,12 +562,12 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
mNotificationManager.notify(R.string.media_notif_ticker, mNotificationBuilder.build());
|
mNotificationManager.notify(R.string.media_notif_ticker, mNotificationBuilder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the service as a foreground service.
|
* Configures the service as a foreground service.
|
||||||
*
|
*
|
||||||
* The system will avoid finishing the service as much as possible when resources as low.
|
* The system will avoid finishing the service as much as possible when resources as low.
|
||||||
*
|
*
|
||||||
* A notification must be created to keep the user aware of the existance of the service.
|
* A notification must be created to keep the user aware of the existance of the service.
|
||||||
*/
|
*/
|
||||||
private void setUpAsForeground(String content) {
|
private void setUpAsForeground(String content) {
|
||||||
|
@ -579,7 +579,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
//mNotification.tickerText = text;
|
//mNotification.tickerText = text;
|
||||||
mNotificationBuilder.setWhen(System.currentTimeMillis());
|
mNotificationBuilder.setWhen(System.currentTimeMillis());
|
||||||
mNotificationBuilder.setOngoing(true);
|
mNotificationBuilder.setOngoing(true);
|
||||||
|
|
||||||
/// includes a pending intent in the notification showing the details view of the file
|
/// includes a pending intent in the notification showing the details view of the file
|
||||||
Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
|
Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
|
||||||
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, mFile);
|
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, mFile);
|
||||||
|
@ -597,22 +597,22 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when there's an error playing media.
|
* Called when there's an error playing media.
|
||||||
*
|
*
|
||||||
* Warns the user about the error and resets the media player.
|
* Warns the user about the error and resets the media player.
|
||||||
*/
|
*/
|
||||||
public boolean onError(MediaPlayer mp, int what, int extra) {
|
public boolean onError(MediaPlayer mp, int what, int extra) {
|
||||||
Log_OC.e(TAG, "Error in audio playback, what = " + what + ", extra = " + extra);
|
Log_OC.e(TAG, "Error in audio playback, what = " + what + ", extra = " + extra);
|
||||||
|
|
||||||
String message = getMessageForMediaError(this, what, extra);
|
String message = getMessageForMediaError(this, what, extra);
|
||||||
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
processStopRequest(true);
|
processStopRequest(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by the system when another app tries to play some sound.
|
* Called by the system when another app tries to play some sound.
|
||||||
*
|
*
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@ -624,22 +624,22 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
if (mState == State.PLAYING) {
|
if (mState == State.PLAYING) {
|
||||||
configAndStartMediaPlayer();
|
configAndStartMediaPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (focusChange < 0) {
|
} else if (focusChange < 0) {
|
||||||
// focus loss; check AudioManager.AUDIOFOCUS_* values
|
// focus loss; check AudioManager.AUDIOFOCUS_* values
|
||||||
boolean canDuck = AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK == focusChange;
|
boolean canDuck = AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK == focusChange;
|
||||||
mAudioFocus = canDuck ? AudioFocus.NO_FOCUS_CAN_DUCK : AudioFocus.NO_FOCUS;
|
mAudioFocus = canDuck ? AudioFocus.NO_FOCUS_CAN_DUCK : AudioFocus.NO_FOCUS;
|
||||||
// start/restart/pause media player with new focus settings
|
// start/restart/pause media player with new focus settings
|
||||||
if (mPlayer != null && mPlayer.isPlaying()) {
|
if (mPlayer != null && mPlayer.isPlaying()) {
|
||||||
configAndStartMediaPlayer();
|
configAndStartMediaPlayer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the service is finished for final clean-up.
|
* Called when the service is finished for final clean-up.
|
||||||
*
|
*
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@ -650,7 +650,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
stopForeground(true);
|
stopForeground(true);
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a binder object that clients can use to perform operations on the MediaPlayer managed by the MediaService.
|
* Provides a binder object that clients can use to perform operations on the MediaPlayer managed by the MediaService.
|
||||||
|
@ -659,16 +659,16 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
public IBinder onBind(Intent arg) {
|
public IBinder onBind(Intent arg) {
|
||||||
return mBinder;
|
return mBinder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when ALL the bound clients were onbound.
|
* Called when ALL the bound clients were onbound.
|
||||||
*
|
*
|
||||||
* The service is destroyed if playback stopped or paused
|
* The service is destroyed if playback stopped or paused
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean onUnbind(Intent intent) {
|
public boolean onUnbind(Intent intent) {
|
||||||
if (mState == State.PAUSED || mState == State.STOPPED) {
|
if (mState == State.PAUSED || mState == State.STOPPED) {
|
||||||
processStopRequest(false);
|
processStopRequest(false);
|
||||||
}
|
}
|
||||||
return false; // not accepting rebinding (default behaviour)
|
return false; // not accepting rebinding (default behaviour)
|
||||||
|
@ -677,9 +677,9 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accesses the current MediaPlayer instance in the service.
|
* Accesses the current MediaPlayer instance in the service.
|
||||||
*
|
*
|
||||||
* To be handled carefully. Visibility is protected to be accessed only
|
* To be handled carefully. Visibility is protected to be accessed only
|
||||||
*
|
*
|
||||||
* @return Current MediaPlayer instance handled by MediaService.
|
* @return Current MediaPlayer instance handled by MediaService.
|
||||||
*/
|
*/
|
||||||
protected MediaPlayer getPlayer() {
|
protected MediaPlayer getPlayer() {
|
||||||
|
@ -689,18 +689,18 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accesses the current OCFile loaded in the service.
|
* Accesses the current OCFile loaded in the service.
|
||||||
*
|
*
|
||||||
* @return The current OCFile loaded in the service.
|
* @return The current OCFile loaded in the service.
|
||||||
*/
|
*/
|
||||||
protected OCFile getCurrentFile() {
|
protected OCFile getCurrentFile() {
|
||||||
return mFile;
|
return mFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accesses the current {@link State} of the MediaService.
|
* Accesses the current {@link State} of the MediaService.
|
||||||
*
|
*
|
||||||
* @return The current {@link State} of the MediaService.
|
* @return The current {@link State} of the MediaService.
|
||||||
*/
|
*/
|
||||||
protected State getState() {
|
protected State getState() {
|
||||||
return mState;
|
return mState;
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.media;
|
package com.owncloud.android.media;
|
||||||
|
@ -34,7 +33,7 @@ import com.owncloud.android.media.MediaService.State;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binder allowing client components to perform operations on on the MediaPlayer managed by a MediaService instance.
|
* Binder allowing client components to perform operations on on the MediaPlayer managed by a MediaService instance.
|
||||||
*
|
*
|
||||||
* Provides the operations of {@link MediaController.MediaPlayerControl}, and an extra method to check if
|
* Provides the operations of {@link MediaController.MediaPlayerControl}, and an extra method to check if
|
||||||
* an {@link OCFile} instance is handled by the MediaService.
|
* an {@link OCFile} instance is handled by the MediaService.
|
||||||
*/
|
*/
|
||||||
|
@ -45,10 +44,10 @@ public class MediaServiceBinder extends Binder implements MediaController.MediaP
|
||||||
* {@link MediaService} instance to access with the binder
|
* {@link MediaService} instance to access with the binder
|
||||||
*/
|
*/
|
||||||
private MediaService mService = null;
|
private MediaService mService = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public constructor
|
* Public constructor
|
||||||
*
|
*
|
||||||
* @param service A {@link MediaService} instance to access with the binder
|
* @param service A {@link MediaService} instance to access with the binder
|
||||||
*/
|
*/
|
||||||
public MediaServiceBinder(MediaService service) {
|
public MediaServiceBinder(MediaService service) {
|
||||||
|
@ -57,13 +56,13 @@ public class MediaServiceBinder extends Binder implements MediaController.MediaP
|
||||||
}
|
}
|
||||||
mService = service;
|
mService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isPlaying(OCFile mFile) {
|
public boolean isPlaying(OCFile mFile) {
|
||||||
return (mFile != null && mFile.equals(mService.getCurrentFile()));
|
return (mFile != null && mFile.equals(mService.getCurrentFile()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canPause() {
|
public boolean canPause() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -110,10 +109,10 @@ public class MediaServiceBinder extends Binder implements MediaController.MediaP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reports if the MediaService is playing a file or not.
|
* Reports if the MediaService is playing a file or not.
|
||||||
*
|
*
|
||||||
* Considers that the file is being played when it is in preparation because the expected
|
* Considers that the file is being played when it is in preparation because the expected
|
||||||
* client of this method is a {@link MediaController} , and we do not want that the 'play'
|
* client of this method is a {@link MediaController} , and we do not want that the 'play'
|
||||||
* button is shown when the file is being prepared by the MediaService.
|
* button is shown when the file is being prepared by the MediaService.
|
||||||
|
@ -124,7 +123,7 @@ public class MediaServiceBinder extends Binder implements MediaController.MediaP
|
||||||
return (currentState == State.PLAYING || (currentState == State.PREPARING && mService.mPlayOnPrepared));
|
return (currentState == State.PLAYING || (currentState == State.PREPARING && mService.mPlayOnPrepared));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pause() {
|
public void pause() {
|
||||||
Log_OC.d(TAG, "Pausing through binder...");
|
Log_OC.d(TAG, "Pausing through binder...");
|
||||||
|
@ -146,7 +145,7 @@ public class MediaServiceBinder extends Binder implements MediaController.MediaP
|
||||||
Log_OC.d(TAG, "Starting through binder...");
|
Log_OC.d(TAG, "Starting through binder...");
|
||||||
mService.processPlayRequest(); // this will finish the service if there is no file preloaded to play
|
mService.processPlayRequest(); // this will finish the service if there is no file preloaded to play
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(Account account, OCFile file, boolean playImmediately, int position) {
|
public void start(Account account, OCFile file, boolean playImmediately, int position) {
|
||||||
Log_OC.d(TAG, "Loading and starting through binder...");
|
Log_OC.d(TAG, "Loading and starting through binder...");
|
||||||
Intent i = new Intent(mService, MediaService.class);
|
Intent i = new Intent(mService, MediaService.class);
|
||||||
|
@ -162,12 +161,12 @@ public class MediaServiceBinder extends Binder implements MediaController.MediaP
|
||||||
public void registerMediaController(MediaControlView mediaController) {
|
public void registerMediaController(MediaControlView mediaController) {
|
||||||
mService.setMediaContoller(mediaController);
|
mService.setMediaContoller(mediaController);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterMediaController(MediaControlView mediaController) {
|
public void unregisterMediaController(MediaControlView mediaController) {
|
||||||
if (mediaController != null && mediaController == mService.getMediaController()) {
|
if (mediaController != null && mediaController == mService.getMediaController()) {
|
||||||
mService.setMediaContoller(null);
|
mService.setMediaContoller(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInPlaybackState() {
|
public boolean isInPlaybackState() {
|
||||||
|
|
|
@ -21,15 +21,12 @@
|
||||||
|
|
||||||
package com.owncloud.android.operations;
|
package com.owncloud.android.operations;
|
||||||
|
|
||||||
import java.io.File;
|
import android.accounts.Account;
|
||||||
import java.util.HashSet;
|
import android.webkit.MimeTypeMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
|
|
||||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||||
|
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
|
||||||
import com.owncloud.android.lib.common.operations.OperationCancelledException;
|
import com.owncloud.android.lib.common.operations.OperationCancelledException;
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperation;
|
import com.owncloud.android.lib.common.operations.RemoteOperation;
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
||||||
|
@ -37,8 +34,11 @@ import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation;
|
import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation;
|
||||||
import com.owncloud.android.utils.FileStorageUtils;
|
import com.owncloud.android.utils.FileStorageUtils;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import java.io.File;
|
||||||
import android.webkit.MimeTypeMap;
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remote mDownloadOperation performing the download of a file to an ownCloud server
|
* Remote mDownloadOperation performing the download of a file to an ownCloud server
|
||||||
|
|
|
@ -19,15 +19,6 @@
|
||||||
|
|
||||||
package com.owncloud.android.operations;
|
package com.owncloud.android.operations;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.apache.commons.httpclient.methods.PostMethod;
|
|
||||||
import org.apache.commons.httpclient.NameValuePair;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import com.owncloud.android.authentication.OAuth2Constants;
|
import com.owncloud.android.authentication.OAuth2Constants;
|
||||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperation;
|
import com.owncloud.android.lib.common.operations.RemoteOperation;
|
||||||
|
@ -35,6 +26,15 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.NameValuePair;
|
||||||
|
import org.apache.commons.httpclient.methods.PostMethod;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
public class OAuth2GetAccessToken extends RemoteOperation {
|
public class OAuth2GetAccessToken extends RemoteOperation {
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ package com.owncloud.android.operations;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
|
|
||||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
|
||||||
|
@ -32,7 +31,6 @@ import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
|
||||||
import com.owncloud.android.lib.resources.shares.OCShare;
|
import com.owncloud.android.lib.resources.shares.OCShare;
|
||||||
import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation;
|
import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation;
|
||||||
import com.owncloud.android.lib.resources.shares.ShareType;
|
import com.owncloud.android.lib.resources.shares.ShareType;
|
||||||
|
|
||||||
import com.owncloud.android.operations.common.SyncOperation;
|
import com.owncloud.android.operations.common.SyncOperation;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
|
@ -21,11 +21,6 @@
|
||||||
|
|
||||||
package com.owncloud.android.services.observer;
|
package com.owncloud.android.services.observer;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
|
@ -44,6 +39,11 @@ import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
import com.owncloud.android.operations.SynchronizeFileOperation;
|
import com.owncloud.android.operations.SynchronizeFileOperation;
|
||||||
import com.owncloud.android.utils.FileStorageUtils;
|
import com.owncloud.android.utils.FileStorageUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service keeping a list of {@link FolderObserver} instances that watch for local
|
* Service keeping a list of {@link FolderObserver} instances that watch for local
|
||||||
|
|
|
@ -22,14 +22,6 @@
|
||||||
|
|
||||||
package com.owncloud.android.syncadapter;
|
package com.owncloud.android.syncadapter;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
|
||||||
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
|
|
||||||
import com.owncloud.android.lib.common.OwnCloudAccount;
|
|
||||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
|
||||||
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
|
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.accounts.AuthenticatorException;
|
import android.accounts.AuthenticatorException;
|
||||||
|
@ -38,6 +30,14 @@ import android.content.AbstractThreadedSyncAdapter;
|
||||||
import android.content.ContentProviderClient;
|
import android.content.ContentProviderClient;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||||
|
import com.owncloud.android.lib.common.OwnCloudAccount;
|
||||||
|
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||||
|
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
|
||||||
|
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base synchronization adapter for ownCloud designed to be subclassed for different
|
* Base synchronization adapter for ownCloud designed to be subclassed for different
|
||||||
* resource types, like FileSync, ConcatsSync, CalendarSync, etc..
|
* resource types, like FileSync, ConcatsSync, CalendarSync, etc..
|
||||||
|
|
|
@ -1,31 +1,30 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014 ownCloud Inc.
|
* Copyright (C) 2014 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.preference.CheckBoxPreference;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.preference.CheckBoxPreference;
|
|
||||||
|
|
||||||
public class CheckBoxPreferenceWithLongTitle extends CheckBoxPreference{
|
public class CheckBoxPreferenceWithLongTitle extends CheckBoxPreference {
|
||||||
|
|
||||||
public CheckBoxPreferenceWithLongTitle(Context context) {
|
public CheckBoxPreferenceWithLongTitle(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
@ -34,6 +33,7 @@ public class CheckBoxPreferenceWithLongTitle extends CheckBoxPreference{
|
||||||
public CheckBoxPreferenceWithLongTitle(Context context, AttributeSet attrs) {
|
public CheckBoxPreferenceWithLongTitle(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckBoxPreferenceWithLongTitle(Context context, AttributeSet attrs, int defStyle) {
|
public CheckBoxPreferenceWithLongTitle(Context context, AttributeSet attrs, int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author Lorensius. W. T
|
* @author Lorensius. W. T
|
||||||
* Copyright (C) 2011 Bartek Przybylski
|
* Copyright (C) 2011 Bartek Przybylski
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
|
||||||
|
@ -28,9 +27,9 @@ import android.view.Gravity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.View.OnTouchListener;
|
import android.view.View.OnTouchListener;
|
||||||
import android.view.ViewGroup.LayoutParams;
|
import android.view.ViewGroup.LayoutParams;
|
||||||
|
import android.view.WindowManager;
|
||||||
import android.widget.PopupWindow;
|
import android.widget.PopupWindow;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2012 Bartek Przybylski
|
* Copyright (C) 2012 Bartek Przybylski
|
||||||
* Copyright (C) 2012-2015 ownCloud Inc.
|
* Copyright (C) 2012-2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
@ -57,7 +56,7 @@ public class ExtendedListView extends ListView {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw (Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
super.onDraw(canvas);
|
super.onDraw(canvas);
|
||||||
if (mPositionToSetAndCenter > 0) {
|
if (mPositionToSetAndCenter > 0) {
|
||||||
Log_OC.v(TAG, "Centering around position " + mPositionToSetAndCenter);
|
Log_OC.v(TAG, "Centering around position " + mPositionToSetAndCenter);
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author masensio
|
* @author masensio
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
@ -27,13 +26,14 @@ public class NavigationDrawerItem {
|
||||||
private int mIcon;
|
private int mIcon;
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
public NavigationDrawerItem(){}
|
public NavigationDrawerItem() {
|
||||||
|
}
|
||||||
|
|
||||||
public NavigationDrawerItem(String title){
|
public NavigationDrawerItem(String title) {
|
||||||
mTitle = title;
|
mTitle = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NavigationDrawerItem(String title, String contentDescription, int icon){
|
public NavigationDrawerItem(String title, String contentDescription, int icon) {
|
||||||
mTitle = title;
|
mTitle = title;
|
||||||
mContentDescription = contentDescription;
|
mContentDescription = contentDescription;
|
||||||
mIcon = icon;
|
mIcon = icon;
|
||||||
|
|
|
@ -1,32 +1,31 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014 ownCloud Inc.
|
* Copyright (C) 2014 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.preference.Preference;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.preference.Preference;
|
|
||||||
|
|
||||||
public class PreferenceWithLongSummary extends Preference{
|
public class PreferenceWithLongSummary extends Preference {
|
||||||
|
|
||||||
public PreferenceWithLongSummary(Context context) {
|
public PreferenceWithLongSummary(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
@ -35,6 +34,7 @@ public class PreferenceWithLongSummary extends Preference{
|
||||||
public PreferenceWithLongSummary(Context context, AttributeSet attrs) {
|
public PreferenceWithLongSummary(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PreferenceWithLongSummary(Context context, AttributeSet attrs, int defStyle) {
|
public PreferenceWithLongSummary(Context context, AttributeSet attrs, int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
@ -26,12 +25,12 @@ import android.view.View;
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
|
|
||||||
public class RadioButtonPreference extends CheckBoxPreference implements View.OnLongClickListener {
|
public class RadioButtonPreference extends CheckBoxPreference implements View.OnLongClickListener {
|
||||||
|
|
||||||
public RadioButtonPreference(Context context) {
|
public RadioButtonPreference(Context context) {
|
||||||
super(context, null, android.R.attr.checkBoxPreferenceStyle);
|
super(context, null, android.R.attr.checkBoxPreferenceStyle);
|
||||||
setWidgetLayoutResource(R.layout.preference_widget_radiobutton);
|
setWidgetLayoutResource(R.layout.preference_widget_radiobutton);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(View v) {
|
public boolean onLongClick(View v) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.ui;
|
package com.owncloud.android.ui;
|
||||||
|
|
|
@ -91,7 +91,7 @@ public class TextDrawable extends Drawable {
|
||||||
* @param radiusInDp the circle's radius
|
* @param radiusInDp the circle's radius
|
||||||
* @return the avatar as a TextDrawable
|
* @return the avatar as a TextDrawable
|
||||||
* @throws UnsupportedEncodingException if the charset is not supported when calculating the color values
|
* @throws UnsupportedEncodingException if the charset is not supported when calculating the color values
|
||||||
* @throws NoSuchAlgorithmException if the specified algorithm is not available when calculating the color values
|
* @throws NoSuchAlgorithmException if the specified algorithm is not available when calculating the color values
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public static TextDrawable createAvatar(String accountName, float radiusInDp) throws
|
public static TextDrawable createAvatar(String accountName, float radiusInDp) throws
|
||||||
|
@ -104,11 +104,11 @@ public class TextDrawable extends Drawable {
|
||||||
* creates an avatar in form of a TextDrawable with the first letter of a name in a circle with the
|
* creates an avatar in form of a TextDrawable with the first letter of a name in a circle with the
|
||||||
* given radius.
|
* given radius.
|
||||||
*
|
*
|
||||||
* @param name the name
|
* @param name the name
|
||||||
* @param radiusInDp the circle's radius
|
* @param radiusInDp the circle's radius
|
||||||
* @return the avatar as a TextDrawable
|
* @return the avatar as a TextDrawable
|
||||||
* @throws UnsupportedEncodingException if the charset is not supported when calculating the color values
|
* @throws UnsupportedEncodingException if the charset is not supported when calculating the color values
|
||||||
* @throws NoSuchAlgorithmException if the specified algorithm is not available when calculating the color values
|
* @throws NoSuchAlgorithmException if the specified algorithm is not available when calculating the color values
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public static TextDrawable createNamedAvatar(String name, float radiusInDp) throws
|
public static TextDrawable createNamedAvatar(String name, float radiusInDp) throws
|
||||||
|
|
|
@ -21,10 +21,10 @@
|
||||||
package com.owncloud.android.ui.activity;
|
package com.owncloud.android.ui.activity;
|
||||||
|
|
||||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||||
import com.owncloud.android.ui.helpers.FileOperationsHelper;
|
|
||||||
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
|
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
|
||||||
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
|
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
|
||||||
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
|
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
|
||||||
|
import com.owncloud.android.ui.helpers.FileOperationsHelper;
|
||||||
|
|
||||||
public interface ComponentsGetter {
|
public interface ComponentsGetter {
|
||||||
|
|
||||||
|
|
|
@ -20,16 +20,16 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.activity;
|
package com.owncloud.android.ui.activity;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
|
import android.content.ClipboardManager;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.content.ClipboardManager;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activity copying the text of the received Intent into the system clibpoard.
|
* Activity copying the text of the received Intent into the system clibpoard.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,7 +39,6 @@ import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
|
@ -137,7 +136,7 @@ public class ErrorsWhileCopyingHandlerActivity extends AppCompatActivity
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -42,7 +42,6 @@ import com.owncloud.android.R;
|
||||||
import com.owncloud.android.authentication.AccountUtils;
|
import com.owncloud.android.authentication.AccountUtils;
|
||||||
import com.owncloud.android.authentication.AuthenticatorActivity;
|
import com.owncloud.android.authentication.AuthenticatorActivity;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
|
|
||||||
import com.owncloud.android.db.PreferenceManager;
|
import com.owncloud.android.db.PreferenceManager;
|
||||||
import com.owncloud.android.files.services.FileDownloader;
|
import com.owncloud.android.files.services.FileDownloader;
|
||||||
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
|
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
|
||||||
|
|
|
@ -40,7 +40,6 @@ import android.view.View.OnClickListener;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperation;
|
import com.owncloud.android.lib.common.operations.RemoteOperation;
|
||||||
|
@ -237,7 +236,7 @@ public class FolderPickerActivity extends FileActivity implements FileFragment.C
|
||||||
super.onResume();
|
super.onResume();
|
||||||
Log_OC.e(TAG, "onResume() start");
|
Log_OC.e(TAG, "onResume() start");
|
||||||
|
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
|
|
||||||
// refresh list of files
|
// refresh list of files
|
||||||
refreshListOfFilesFragment(false);
|
refreshListOfFilesFragment(false);
|
||||||
|
|
|
@ -102,7 +102,7 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -32,7 +32,6 @@ import android.widget.ListAdapter;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -88,7 +87,7 @@ public class GenericExplanationActivity extends AppCompatActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ExplanationListAdapterView extends ArrayAdapter<String> {
|
public class ExplanationListAdapterView extends ArrayAdapter<String> {
|
||||||
|
|
|
@ -36,7 +36,6 @@ import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
import com.owncloud.android.ui.dialog.LoadingDialog;
|
import com.owncloud.android.ui.dialog.LoadingDialog;
|
||||||
|
@ -122,7 +121,7 @@ public class LogHistoryActivity extends ToolbarActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -134,7 +134,7 @@ public class ManageAccountsActivity extends FileActivity
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -32,7 +32,6 @@ import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
|
@ -72,7 +71,7 @@ public class ManageSpaceActivity extends AppCompatActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -30,7 +30,6 @@ import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,7 +59,7 @@ public class ParticipateActivity extends FileActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupContent() {
|
private void setupContent() {
|
||||||
|
|
|
@ -38,7 +38,6 @@ import android.widget.EditText;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
|
@ -144,7 +143,7 @@ public class PassCodeActivity extends AppCompatActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -612,7 +612,7 @@ public class Preferences extends PreferenceActivity
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
|
|
||||||
SharedPreferences appPrefs =
|
SharedPreferences appPrefs =
|
||||||
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
||||||
|
|
|
@ -22,8 +22,8 @@ package com.owncloud.android.ui.activity;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
|
|
@ -41,7 +41,6 @@ import android.widget.Button;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.db.PreferenceManager;
|
import com.owncloud.android.db.PreferenceManager;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
@ -323,7 +322,7 @@ public class UploadFilesActivity extends FileActivity implements
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -41,7 +41,6 @@ import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.authentication.AccountUtils;
|
import com.owncloud.android.authentication.AccountUtils;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
|
@ -129,7 +128,7 @@ public class UploadListActivity extends FileActivity implements UploadListFragme
|
||||||
Log_OC.v(TAG, "onResume() start");
|
Log_OC.v(TAG, "onResume() start");
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
|
|
||||||
// Listen for upload messages
|
// Listen for upload messages
|
||||||
mUploadMessagesReceiver = new UploadMessagesReceiver();
|
mUploadMessagesReceiver = new UploadMessagesReceiver();
|
||||||
|
|
|
@ -23,7 +23,6 @@ import android.accounts.Account;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.ui.fragment.FileFragment;
|
import com.owncloud.android.ui.fragment.FileFragment;
|
||||||
import com.owncloud.android.ui.fragment.OCFileListFragment;
|
import com.owncloud.android.ui.fragment.OCFileListFragment;
|
||||||
|
@ -52,7 +51,7 @@ public class UploadPathActivity extends FolderPickerActivity implements FileFrag
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -132,7 +132,7 @@ public class WhatsNewActivity extends FragmentActivity implements ViewPager.OnPa
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,13 +20,13 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.adapter;
|
package com.owncloud.android.ui.adapter;
|
||||||
|
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.lib.common.network.CertificateCombinedException;
|
import com.owncloud.android.lib.common.network.CertificateCombinedException;
|
||||||
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
||||||
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,14 +19,6 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.adapter;
|
package com.owncloud.android.ui.adapter;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedOutputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Bitmap.CompressFormat;
|
import android.graphics.Bitmap.CompressFormat;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
@ -35,6 +27,14 @@ import com.jakewharton.disklrucache.DiskLruCache;
|
||||||
import com.owncloud.android.BuildConfig;
|
import com.owncloud.android.BuildConfig;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
public class DiskLruImageCache {
|
public class DiskLruImageCache {
|
||||||
|
|
||||||
private DiskLruCache mDiskCache;
|
private DiskLruCache mDiskCache;
|
||||||
|
|
|
@ -20,15 +20,16 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.adapter;
|
package com.owncloud.android.ui.adapter;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
|
||||||
import android.net.http.SslCertificate;
|
import android.net.http.SslCertificate;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,12 +20,13 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.adapter;
|
package com.owncloud.android.ui.adapter;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
|
||||||
import android.net.http.SslError;
|
import android.net.http.SslError;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to show an Untrusted Certificate
|
* Dialog to show an Untrusted Certificate
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,6 +20,13 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.adapter;
|
package com.owncloud.android.ui.adapter;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
||||||
|
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.cert.CertificateEncodingException;
|
import java.security.cert.CertificateEncodingException;
|
||||||
|
@ -31,13 +38,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import javax.security.auth.x500.X500Principal;
|
import javax.security.auth.x500.X500Principal;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
|
|
||||||
|
|
|
@ -21,13 +21,13 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
|
|
|
@ -20,16 +20,11 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
|
||||||
import com.owncloud.android.lib.resources.files.FileUtils;
|
|
||||||
import com.owncloud.android.ui.activity.ComponentsGetter;
|
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager.LayoutParams;
|
import android.view.WindowManager.LayoutParams;
|
||||||
|
@ -37,6 +32,11 @@ import android.widget.EditText;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
|
import com.owncloud.android.lib.resources.files.FileUtils;
|
||||||
|
import com.owncloud.android.ui.activity.ComponentsGetter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to input the name for a new folder to create.
|
* Dialog to input the name for a new folder to create.
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,15 +19,12 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.authentication.AuthenticatorActivity;
|
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.support.v7.app.AlertDialog.Builder;
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import android.support.v7.app.AlertDialog.Builder;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.view.WindowManager.LayoutParams;
|
import android.view.WindowManager.LayoutParams;
|
||||||
import android.webkit.HttpAuthHandler;
|
import android.webkit.HttpAuthHandler;
|
||||||
|
@ -35,6 +32,9 @@ import android.webkit.WebView;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.authentication.AuthenticatorActivity;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -18,8 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -31,6 +29,8 @@ import android.view.Window;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
|
||||||
public class LoadingDialog extends DialogFragment {
|
public class LoadingDialog extends DialogFragment {
|
||||||
|
|
||||||
private String mMessage;
|
private String mMessage;
|
||||||
|
|
|
@ -25,11 +25,12 @@ package com.owncloud.android.ui.dialog;
|
||||||
*
|
*
|
||||||
* Triggers the rename operation.
|
* Triggers the rename operation.
|
||||||
*/
|
*/
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager.LayoutParams;
|
import android.view.WindowManager.LayoutParams;
|
||||||
|
|
|
@ -28,8 +28,8 @@ import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
|
@ -20,12 +20,6 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -36,6 +30,7 @@ import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -47,6 +42,11 @@ import com.owncloud.android.R;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
import com.owncloud.android.ui.activity.CopyToClipboardActivity;
|
import com.owncloud.android.ui.activity.CopyToClipboardActivity;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog showing a list activities able to resolve a given Intent,
|
* Dialog showing a list activities able to resolve a given Intent,
|
||||||
* filtering out the activities matching give package names.
|
* filtering out the activities matching give package names.
|
||||||
|
|
|
@ -18,11 +18,11 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
|
@ -20,10 +20,6 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.security.GeneralSecurityException;
|
|
||||||
import java.security.cert.X509Certificate;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.net.http.SslError;
|
import android.net.http.SslError;
|
||||||
|
@ -31,9 +27,9 @@ import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.webkit.SslErrorHandler;
|
import android.webkit.SslErrorHandler;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
|
||||||
|
@ -46,6 +42,10 @@ import com.owncloud.android.ui.adapter.SslCertificateViewAdapter;
|
||||||
import com.owncloud.android.ui.adapter.SslErrorViewAdapter;
|
import com.owncloud.android.ui.adapter.SslErrorViewAdapter;
|
||||||
import com.owncloud.android.ui.adapter.X509CertificateViewAdapter;
|
import com.owncloud.android.ui.adapter.X509CertificateViewAdapter;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to show information about an untrusted certificate and allow the user
|
* Dialog to show information about an untrusted certificate and allow the user
|
||||||
* to decide trust on it or not.
|
* to decide trust on it or not.
|
||||||
|
|
|
@ -20,6 +20,20 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.lib.common.network.CertificateCombinedException;
|
||||||
|
import com.owncloud.android.lib.common.network.NetworkUtils;
|
||||||
|
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
||||||
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.GeneralSecurityException;
|
import java.security.GeneralSecurityException;
|
||||||
import java.security.KeyStoreException;
|
import java.security.KeyStoreException;
|
||||||
|
@ -32,21 +46,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import javax.security.auth.x500.X500Principal;
|
import javax.security.auth.x500.X500Principal;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.Window;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import com.owncloud.android.lib.common.network.CertificateCombinedException;
|
|
||||||
import com.owncloud.android.lib.common.network.NetworkUtils;
|
|
||||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to request the user about a certificate that could not be validated with the certificates store in the system.
|
* Dialog to request the user about a certificate that could not be validated with the certificates store in the system.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,13 +20,13 @@
|
||||||
package com.owncloud.android.ui.dialog;
|
package com.owncloud.android.ui.dialog;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
|
@ -19,14 +19,14 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.errorhandling;
|
package com.owncloud.android.ui.errorhandling;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
|
||||||
public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
|
public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
|
||||||
private final Activity mContext;
|
private final Activity mContext;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@ import android.widget.CheckBox;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
|
@ -381,7 +380,7 @@ public class EditShareFragment extends Fragment {
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@ import android.widget.AdapterView;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
import com.owncloud.android.ui.adapter.LocalFileListAdapter;
|
import com.owncloud.android.ui.adapter.LocalFileListAdapter;
|
||||||
|
@ -69,7 +68,7 @@ public class LocalFileListFragment extends ExtendedListFragment {
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -254,7 +254,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@ import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
@ -109,7 +108,7 @@ public class SearchShareesFragment extends Fragment implements ShareUserListAdap
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@ import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.authentication.AccountUtils;
|
import com.owncloud.android.authentication.AccountUtils;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
|
@ -182,7 +181,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ExpandableListView;
|
import android.widget.ExpandableListView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.db.OCUpload;
|
import com.owncloud.android.db.OCUpload;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
@ -77,7 +76,7 @@ public class UploadListFragment extends ExpandableListFragment {
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,9 +63,6 @@ import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static com.owncloud.android.R.drawable.file;
|
|
||||||
import static com.owncloud.android.R.layout.files;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -19,17 +19,19 @@
|
||||||
|
|
||||||
package com.owncloud.android.ui.notifications;
|
package com.owncloud.android.ui.notifications;
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.support.v4.app.NotificationCompat;
|
import android.support.v4.app.NotificationCompat;
|
||||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||||
|
|
||||||
public class NotificationUtils {
|
public class NotificationUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,12 +19,6 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.preview;
|
package com.owncloud.android.ui.preview;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
|
||||||
import com.owncloud.android.ui.fragment.FileFragment;
|
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
@ -36,10 +30,15 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
|
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
import com.owncloud.android.ui.fragment.FileFragment;
|
||||||
import com.owncloud.android.utils.DisplayUtils;
|
import com.owncloud.android.utils.DisplayUtils;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This Fragment is used to monitor the progress of a file downloading.
|
* This Fragment is used to monitor the progress of a file downloading.
|
||||||
|
|
|
@ -51,8 +51,6 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import com.caverock.androidsvg.SVG;
|
import com.caverock.androidsvg.SVG;
|
||||||
import com.caverock.androidsvg.SVGParseException;
|
import com.caverock.androidsvg.SVGParseException;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.files.FileMenuFilter;
|
import com.owncloud.android.files.FileMenuFilter;
|
||||||
|
@ -380,7 +378,7 @@ public class PreviewImageFragment extends FileFragment {
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,13 +19,6 @@
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.ui.preview;
|
package com.owncloud.android.ui.preview;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
|
@ -37,6 +30,13 @@ import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.ui.fragment.FileFragment;
|
import com.owncloud.android.ui.fragment.FileFragment;
|
||||||
import com.owncloud.android.utils.FileStorageUtils;
|
import com.owncloud.android.utils.FileStorageUtils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter class that provides Fragment instances
|
* Adapter class that provides Fragment instances
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -54,7 +54,6 @@ import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.widget.VideoView;
|
import android.widget.VideoView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.files.FileMenuFilter;
|
import com.owncloud.android.files.FileMenuFilter;
|
||||||
|
@ -566,7 +565,7 @@ public class PreviewMediaFragment extends FileFragment implements
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
Log_OC.v(TAG, "onResume");
|
Log_OC.v(TAG, "onResume");
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,6 @@ import android.widget.ProgressBar;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.files.FileMenuFilter;
|
import com.owncloud.android.files.FileMenuFilter;
|
||||||
|
@ -418,7 +417,7 @@ public class PreviewTextFragment extends FileFragment {
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(getActivity(), SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
Log_OC.e(TAG, "onResume");
|
Log_OC.e(TAG, "onResume");
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,6 @@ import android.support.v7.app.AlertDialog;
|
||||||
import android.widget.MediaController;
|
import android.widget.MediaController;
|
||||||
import android.widget.VideoView;
|
import android.widget.VideoView;
|
||||||
|
|
||||||
import com.owncloud.android.MainApp;
|
|
||||||
import com.owncloud.android.R;
|
import com.owncloud.android.R;
|
||||||
import com.owncloud.android.datamodel.OCFile;
|
import com.owncloud.android.datamodel.OCFile;
|
||||||
import com.owncloud.android.lib.common.accounts.AccountUtils;
|
import com.owncloud.android.lib.common.accounts.AccountUtils;
|
||||||
|
@ -109,7 +108,7 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
MainApp.getFirebaseAnalyticsInstance().setCurrentScreen(this, SCREEN_NAME, TAG);
|
AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
|
||||||
|
@ -40,19 +39,19 @@ import java.util.Locale;
|
||||||
* Utility class with methods for decoding Bitmaps.
|
* Utility class with methods for decoding Bitmaps.
|
||||||
*/
|
*/
|
||||||
public class BitmapUtils {
|
public class BitmapUtils {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decodes a bitmap from a file containing it minimizing the memory use, known that the bitmap
|
* Decodes a bitmap from a file containing it minimizing the memory use, known that the bitmap
|
||||||
* will be drawn in a surface of reqWidth x reqHeight
|
* will be drawn in a surface of reqWidth x reqHeight
|
||||||
*
|
*
|
||||||
* @param srcPath Absolute path to the file containing the image.
|
* @param srcPath Absolute path to the file containing the image.
|
||||||
* @param reqWidth Width of the surface where the Bitmap will be drawn on, in pixels.
|
* @param reqWidth Width of the surface where the Bitmap will be drawn on, in pixels.
|
||||||
* @param reqHeight Height of the surface where the Bitmap will be drawn on, in pixels.
|
* @param reqHeight Height of the surface where the Bitmap will be drawn on, in pixels.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Bitmap decodeSampledBitmapFromFile(String srcPath, int reqWidth, int reqHeight) {
|
public static Bitmap decodeSampledBitmapFromFile(String srcPath, int reqWidth, int reqHeight) {
|
||||||
|
|
||||||
// set desired options that will affect the size of the bitmap
|
// set desired options that will affect the size of the bitmap
|
||||||
final Options options = new Options();
|
final Options options = new Options();
|
||||||
options.inScaled = true;
|
options.inScaled = true;
|
||||||
|
@ -63,39 +62,39 @@ public class BitmapUtils {
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
|
||||||
options.inMutable = false;
|
options.inMutable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// make a false load of the bitmap to get its dimensions
|
// make a false load of the bitmap to get its dimensions
|
||||||
options.inJustDecodeBounds = true;
|
options.inJustDecodeBounds = true;
|
||||||
|
|
||||||
BitmapFactory.decodeFile(srcPath, options);
|
BitmapFactory.decodeFile(srcPath, options);
|
||||||
|
|
||||||
// calculate factor to subsample the bitmap
|
// calculate factor to subsample the bitmap
|
||||||
options.inSampleSize = calculateSampleFactor(options, reqWidth, reqHeight);
|
options.inSampleSize = calculateSampleFactor(options, reqWidth, reqHeight);
|
||||||
|
|
||||||
// decode bitmap with inSampleSize set
|
// decode bitmap with inSampleSize set
|
||||||
options.inJustDecodeBounds = false;
|
options.inJustDecodeBounds = false;
|
||||||
return BitmapFactory.decodeFile(srcPath, options);
|
return BitmapFactory.decodeFile(srcPath, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates a proper value for options.inSampleSize in order to decode a Bitmap minimizing
|
* Calculates a proper value for options.inSampleSize in order to decode a Bitmap minimizing
|
||||||
* the memory overload and covering a target surface of reqWidth x reqHeight if the original
|
* the memory overload and covering a target surface of reqWidth x reqHeight if the original
|
||||||
* image is big enough.
|
* image is big enough.
|
||||||
*
|
*
|
||||||
* @param options Bitmap decoding options; options.outHeight and options.inHeight should
|
* @param options Bitmap decoding options; options.outHeight and options.inHeight should
|
||||||
* be set.
|
* be set.
|
||||||
* @param reqWidth Width of the surface where the Bitmap will be drawn on, in pixels.
|
* @param reqWidth Width of the surface where the Bitmap will be drawn on, in pixels.
|
||||||
* @param reqHeight Height of the surface where the Bitmap will be drawn on, in pixels.
|
* @param reqHeight Height of the surface where the Bitmap will be drawn on, in pixels.
|
||||||
* @return The largest inSampleSize value that is a power of 2 and keeps both
|
* @return The largest inSampleSize value that is a power of 2 and keeps both
|
||||||
* height and width larger than reqWidth and reqHeight.
|
* height and width larger than reqWidth and reqHeight.
|
||||||
*/
|
*/
|
||||||
private static int calculateSampleFactor(Options options, int reqWidth, int reqHeight) {
|
private static int calculateSampleFactor(Options options, int reqWidth, int reqHeight) {
|
||||||
|
|
||||||
final int height = options.outHeight;
|
final int height = options.outHeight;
|
||||||
final int width = options.outWidth;
|
final int width = options.outWidth;
|
||||||
int inSampleSize = 1;
|
int inSampleSize = 1;
|
||||||
|
|
||||||
if (height > reqHeight || width > reqWidth) {
|
if (height > reqHeight || width > reqWidth) {
|
||||||
final int halfHeight = height / 2;
|
final int halfHeight = height / 2;
|
||||||
final int halfWidth = width / 2;
|
final int halfWidth = width / 2;
|
||||||
|
@ -107,10 +106,10 @@ public class BitmapUtils {
|
||||||
inSampleSize *= 2;
|
inSampleSize *= 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return inSampleSize;
|
return inSampleSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rotate bitmap according to EXIF orientation.
|
* Rotate bitmap according to EXIF orientation.
|
||||||
* Cf. http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto/
|
* Cf. http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto/
|
||||||
|
@ -118,64 +117,54 @@ public class BitmapUtils {
|
||||||
* @param storagePath Path to source file of bitmap. Needed for EXIF information.
|
* @param storagePath Path to source file of bitmap. Needed for EXIF information.
|
||||||
* @return correctly EXIF-rotated bitmap
|
* @return correctly EXIF-rotated bitmap
|
||||||
*/
|
*/
|
||||||
public static Bitmap rotateImage(Bitmap bitmap, String storagePath){
|
public static Bitmap rotateImage(Bitmap bitmap, String storagePath) {
|
||||||
Bitmap resultBitmap = bitmap;
|
Bitmap resultBitmap = bitmap;
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
ExifInterface exifInterface = new ExifInterface(storagePath);
|
ExifInterface exifInterface = new ExifInterface(storagePath);
|
||||||
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
|
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
|
||||||
|
|
||||||
Matrix matrix = new Matrix();
|
Matrix matrix = new Matrix();
|
||||||
|
|
||||||
// 1: nothing to do
|
// 1: nothing to do
|
||||||
|
|
||||||
// 2
|
// 2
|
||||||
if (orientation == ExifInterface.ORIENTATION_FLIP_HORIZONTAL)
|
if (orientation == ExifInterface.ORIENTATION_FLIP_HORIZONTAL) {
|
||||||
{
|
|
||||||
matrix.postScale(-1.0f, 1.0f);
|
matrix.postScale(-1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
// 3
|
// 3
|
||||||
else if (orientation == ExifInterface.ORIENTATION_ROTATE_180)
|
else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
|
||||||
{
|
|
||||||
matrix.postRotate(180);
|
matrix.postRotate(180);
|
||||||
}
|
}
|
||||||
// 4
|
// 4
|
||||||
else if (orientation == ExifInterface.ORIENTATION_FLIP_VERTICAL)
|
else if (orientation == ExifInterface.ORIENTATION_FLIP_VERTICAL) {
|
||||||
{
|
|
||||||
matrix.postScale(1.0f, -1.0f);
|
matrix.postScale(1.0f, -1.0f);
|
||||||
}
|
}
|
||||||
// 5
|
// 5
|
||||||
else if (orientation == ExifInterface.ORIENTATION_TRANSPOSE)
|
else if (orientation == ExifInterface.ORIENTATION_TRANSPOSE) {
|
||||||
{
|
|
||||||
matrix.postRotate(-90);
|
matrix.postRotate(-90);
|
||||||
matrix.postScale(1.0f, -1.0f);
|
matrix.postScale(1.0f, -1.0f);
|
||||||
}
|
}
|
||||||
// 6
|
// 6
|
||||||
else if (orientation == ExifInterface.ORIENTATION_ROTATE_90)
|
else if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
|
||||||
{
|
|
||||||
matrix.postRotate(90);
|
matrix.postRotate(90);
|
||||||
}
|
}
|
||||||
// 7
|
// 7
|
||||||
else if (orientation == ExifInterface.ORIENTATION_TRANSVERSE)
|
else if (orientation == ExifInterface.ORIENTATION_TRANSVERSE) {
|
||||||
{
|
|
||||||
matrix.postRotate(90);
|
matrix.postRotate(90);
|
||||||
matrix.postScale(1.0f, -1.0f);
|
matrix.postScale(1.0f, -1.0f);
|
||||||
}
|
}
|
||||||
// 8
|
// 8
|
||||||
else if (orientation == ExifInterface.ORIENTATION_ROTATE_270)
|
else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
|
||||||
{
|
|
||||||
matrix.postRotate(270);
|
matrix.postRotate(270);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rotate the bitmap
|
// Rotate the bitmap
|
||||||
resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
|
resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
|
||||||
if (!resultBitmap.equals(bitmap)) {
|
if (!resultBitmap.equals(bitmap)) {
|
||||||
bitmap.recycle();
|
bitmap.recycle();
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception exception) {
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
Log_OC.e("BitmapUtil", "Could not rotate the image: " + storagePath);
|
Log_OC.e("BitmapUtil", "Could not rotate the image: " + storagePath);
|
||||||
}
|
}
|
||||||
return resultBitmap;
|
return resultBitmap;
|
||||||
|
@ -192,24 +181,20 @@ public class BitmapUtils {
|
||||||
* gfxbuilder-core/src/main/com/camick/awt/HSLColor.java
|
* gfxbuilder-core/src/main/com/camick/awt/HSLColor.java
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("PMD.MethodNamingConventions")
|
@SuppressWarnings("PMD.MethodNamingConventions")
|
||||||
public static int[] HSLtoRGB(float h, float s, float l, float alpha)
|
public static int[] HSLtoRGB(float h, float s, float l, float alpha) {
|
||||||
{
|
if (s < 0.0f || s > 100.0f) {
|
||||||
if (s <0.0f || s > 100.0f)
|
|
||||||
{
|
|
||||||
String message = "Color parameter outside of expected range - Saturation";
|
String message = "Color parameter outside of expected range - Saturation";
|
||||||
throw new IllegalArgumentException( message );
|
throw new IllegalArgumentException(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l <0.0f || l > 100.0f)
|
if (l < 0.0f || l > 100.0f) {
|
||||||
{
|
|
||||||
String message = "Color parameter outside of expected range - Luminance";
|
String message = "Color parameter outside of expected range - Luminance";
|
||||||
throw new IllegalArgumentException( message );
|
throw new IllegalArgumentException(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alpha <0.0f || alpha > 1.0f)
|
if (alpha < 0.0f || alpha > 1.0f) {
|
||||||
{
|
|
||||||
String message = "Color parameter outside of expected range - Alpha";
|
String message = "Color parameter outside of expected range - Alpha";
|
||||||
throw new IllegalArgumentException( message );
|
throw new IllegalArgumentException(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Formula needs all values between 0 - 1.
|
// Formula needs all values between 0 - 1.
|
||||||
|
@ -237,29 +222,29 @@ public class BitmapUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("PMD.MethodNamingConventions")
|
@SuppressWarnings("PMD.MethodNamingConventions")
|
||||||
private static float HueToRGB(float p, float q, float h){
|
private static float HueToRGB(float p, float q, float h) {
|
||||||
if (h < 0) {
|
if (h < 0) {
|
||||||
h += 1;
|
h += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (h > 1 ) {
|
if (h > 1) {
|
||||||
h -= 1;
|
h -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (6 * h < 1) {
|
if (6 * h < 1) {
|
||||||
return p + ((q - p) * 6 * h);
|
return p + ((q - p) * 6 * h);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (2 * h < 1 ) {
|
if (2 * h < 1) {
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (3 * h < 2) {
|
if (3 * h < 2) {
|
||||||
return p + ( (q - p) * 6 * ((2.0f / 3.0f) - h) );
|
return p + ((q - p) * 6 * ((2.0f / 3.0f) - h));
|
||||||
}
|
}
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* calculates the RGB value based on a given account name.
|
* calculates the RGB value based on a given account name.
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
@ -24,8 +24,8 @@ import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.support.v4.net.ConnectivityManagerCompat;
|
|
||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
|
import android.support.v4.net.ConnectivityManagerCompat;
|
||||||
|
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
|
@ -37,9 +37,9 @@ public class ConnectivityUtils {
|
||||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
boolean result =
|
boolean result =
|
||||||
cm != null && cm.getActiveNetworkInfo() != null
|
cm != null && cm.getActiveNetworkInfo() != null
|
||||||
&& cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI
|
&& cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI
|
||||||
&& cm.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED
|
&& cm.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED
|
||||||
&& !ConnectivityManagerCompat.isActiveNetworkMetered(cm);
|
&& !ConnectivityManagerCompat.isActiveNetworkMetered(cm);
|
||||||
Log_OC.d(TAG, "is AppConnectedViaWifi returns " + result);
|
Log_OC.d(TAG, "is AppConnectedViaWifi returns " + result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ public class ConnectivityUtils {
|
||||||
return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
|
return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCharging(Context context){
|
public static boolean isCharging(Context context) {
|
||||||
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
||||||
Intent batteryStatus = context.registerReceiver(null, ifilter);
|
Intent batteryStatus = context.registerReceiver(null, ifilter);
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author Andy Scherzinger
|
* @author Andy Scherzinger
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
/**
|
/**
|
||||||
* Nextcloud Android client application
|
* Nextcloud Android client application
|
||||||
*
|
*
|
||||||
* @author Andy Scherzinger
|
* @author Andy Scherzinger
|
||||||
* @author Bartek Przybylski
|
* @author Bartek Przybylski
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2011 Bartek Przybylski
|
* Copyright (C) 2011 Bartek Przybylski
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
* Copyright (C) 2016 Andy Scherzinger
|
* Copyright (C) 2016 Andy Scherzinger
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
* License as published by the Free Software Foundation; either
|
* License as published by the Free Software Foundation; either
|
||||||
* version 3 of the License, or any later version.
|
* version 3 of the License, or any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public
|
* You should have received a copy of the GNU Affero General Public
|
||||||
* License along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
@ -97,8 +97,8 @@ import java.util.Set;
|
||||||
public class DisplayUtils {
|
public class DisplayUtils {
|
||||||
private static final String TAG = DisplayUtils.class.getSimpleName();
|
private static final String TAG = DisplayUtils.class.getSimpleName();
|
||||||
|
|
||||||
private static final String[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
|
private static final String[] sizeSuffixes = {"B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"};
|
||||||
private static final int[] sizeScales = { 0, 0, 1, 1, 1, 2, 2, 2, 2 };
|
private static final int[] sizeScales = {0, 0, 1, 1, 1, 2, 2, 2, 2};
|
||||||
private static final int RELATIVE_THRESHOLD_WARNING = 90;
|
private static final int RELATIVE_THRESHOLD_WARNING = 90;
|
||||||
private static final int RELATIVE_THRESHOLD_CRITICAL = 95;
|
private static final int RELATIVE_THRESHOLD_CRITICAL = 95;
|
||||||
private static final String MIME_TYPE_UNKNOWN = "Unknown type";
|
private static final String MIME_TYPE_UNKNOWN = "Unknown type";
|
||||||
|
@ -154,7 +154,7 @@ public class DisplayUtils {
|
||||||
/**
|
/**
|
||||||
* Converts MIME types like "image/jpg" to more end user friendly output
|
* Converts MIME types like "image/jpg" to more end user friendly output
|
||||||
* like "JPG image".
|
* like "JPG image".
|
||||||
*
|
*
|
||||||
* @param mimetype MIME type to convert
|
* @param mimetype MIME type to convert
|
||||||
* @return A human friendly version of the MIME type, {@link #MIME_TYPE_UNKNOWN} if it can't be converted
|
* @return A human friendly version of the MIME type, {@link #MIME_TYPE_UNKNOWN} if it can't be converted
|
||||||
*/
|
*/
|
||||||
|
@ -219,7 +219,7 @@ public class DisplayUtils {
|
||||||
return TWITTER_HANDLE_PREFIX + handle;
|
return TWITTER_HANDLE_PREFIX + handle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts an internationalized domain name (IDN) in an URL to and from ASCII/Unicode.
|
* Converts an internationalized domain name (IDN) in an URL to and from ASCII/Unicode.
|
||||||
*
|
*
|
||||||
|
@ -231,7 +231,7 @@ public class DisplayUtils {
|
||||||
public static String convertIdn(String url, boolean toASCII) {
|
public static String convertIdn(String url, boolean toASCII) {
|
||||||
|
|
||||||
String urlNoDots = url;
|
String urlNoDots = url;
|
||||||
String dots="";
|
String dots = "";
|
||||||
while (urlNoDots.startsWith(".")) {
|
while (urlNoDots.startsWith(".")) {
|
||||||
urlNoDots = url.substring(1);
|
urlNoDots = url.substring(1);
|
||||||
dots = dots + ".";
|
dots = dots + ".";
|
||||||
|
@ -360,8 +360,8 @@ public class DisplayUtils {
|
||||||
public static String getPathWithoutLastSlash(String path) {
|
public static String getPathWithoutLastSlash(String path) {
|
||||||
|
|
||||||
// Remove last slash from path
|
// Remove last slash from path
|
||||||
if (path.length() > 1 && path.charAt(path.length()-1) == OCFile.PATH_SEPARATOR.charAt(0)) {
|
if (path.length() > 1 && path.charAt(path.length() - 1) == OCFile.PATH_SEPARATOR.charAt(0)) {
|
||||||
path = path.substring(0, path.length()-1);
|
path = path.substring(0, path.length() - 1);
|
||||||
}
|
}
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
@ -424,7 +424,7 @@ public class DisplayUtils {
|
||||||
if (seekBar != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
if (seekBar != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||||
colorPreLollipopHorizontalProgressBar(seekBar);
|
colorPreLollipopHorizontalProgressBar(seekBar);
|
||||||
|
|
||||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||||
int color = seekBar.getResources().getColor(R.color.color_accent);
|
int color = seekBar.getResources().getColor(R.color.color_accent);
|
||||||
seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||||
seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||||
|
@ -484,6 +484,7 @@ public class DisplayUtils {
|
||||||
|
|
||||||
public interface AvatarGenerationListener {
|
public interface AvatarGenerationListener {
|
||||||
void avatarGenerated(Drawable avatarDrawable, Object callContext);
|
void avatarGenerated(Drawable avatarDrawable, Object callContext);
|
||||||
|
|
||||||
boolean shouldCallGeneratedCallback(String tag, Object callContext);
|
boolean shouldCallGeneratedCallback(String tag, Object callContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,7 +497,7 @@ public class DisplayUtils {
|
||||||
* @param storageManager reference for caching purposes
|
* @param storageManager reference for caching purposes
|
||||||
*/
|
*/
|
||||||
public static void setAvatar(Account account, AvatarGenerationListener listener, float avatarRadius, Resources resources,
|
public static void setAvatar(Account account, AvatarGenerationListener listener, float avatarRadius, Resources resources,
|
||||||
FileDataStorageManager storageManager, Object callContext) {
|
FileDataStorageManager storageManager, Object callContext) {
|
||||||
if (account != null) {
|
if (account != null) {
|
||||||
if (callContext instanceof View) {
|
if (callContext instanceof View) {
|
||||||
((View) callContext).setContentDescription(account.name);
|
((View) callContext).setContentDescription(account.name);
|
||||||
|
@ -525,7 +526,7 @@ public class DisplayUtils {
|
||||||
final ThumbnailsCacheManager.AsyncAvatarDrawable asyncDrawable =
|
final ThumbnailsCacheManager.AsyncAvatarDrawable asyncDrawable =
|
||||||
new ThumbnailsCacheManager.AsyncAvatarDrawable(resources, thumbnail, task);
|
new ThumbnailsCacheManager.AsyncAvatarDrawable(resources, thumbnail, task);
|
||||||
listener.avatarGenerated(BitmapUtils.bitmapToCircularBitmapDrawable(
|
listener.avatarGenerated(BitmapUtils.bitmapToCircularBitmapDrawable(
|
||||||
resources, asyncDrawable.getBitmap()), callContext);
|
resources, asyncDrawable.getBitmap()), callContext);
|
||||||
}
|
}
|
||||||
task.execute(account.name);
|
task.execute(account.name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author masensio
|
* @author masensio
|
||||||
* Copyright (C) 2014 ownCloud Inc.
|
* Copyright (C) 2014 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +54,7 @@ public class ErrorMessageAdapter {
|
||||||
|
|
||||||
public static String getErrorCauseMessage(RemoteOperationResult result,
|
public static String getErrorCauseMessage(RemoteOperationResult result,
|
||||||
RemoteOperation operation, Resources res) {
|
RemoteOperation operation, Resources res) {
|
||||||
|
|
||||||
String message = null;
|
String message = null;
|
||||||
|
|
||||||
if (!result.isSuccess() && isNetworkError(result.getCode())) {
|
if (!result.isSuccess() && isNetworkError(result.getCode())) {
|
||||||
|
@ -72,7 +71,7 @@ public class ErrorMessageAdapter {
|
||||||
|| result.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
|
|| result.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
|
||||||
message = String.format(
|
message = String.format(
|
||||||
res.getString(R.string.error__upload__local_file_not_copied),
|
res.getString(R.string.error__upload__local_file_not_copied),
|
||||||
((UploadFileOperation) operation).getFileName(),
|
((UploadFileOperation) operation).getFileName(),
|
||||||
res.getString(R.string.app_name));
|
res.getString(R.string.app_name));
|
||||||
/*
|
/*
|
||||||
} else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) {
|
} else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) {
|
||||||
|
@ -107,7 +106,7 @@ public class ErrorMessageAdapter {
|
||||||
} else {
|
} else {
|
||||||
message = String.format(
|
message = String.format(
|
||||||
res.getString(R.string.downloader_download_failed_content), new File(
|
res.getString(R.string.downloader_download_failed_content), new File(
|
||||||
((DownloadFileOperation) operation).getSavePath()).getName());
|
((DownloadFileOperation) operation).getSavePath()).getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,12 +162,12 @@ public class ErrorMessageAdapter {
|
||||||
message = res.getString(R.string.create_dir_fail_msg);
|
message = res.getString(R.string.create_dir_fail_msg);
|
||||||
}
|
}
|
||||||
} else if (operation instanceof CreateShareViaLinkOperation ||
|
} else if (operation instanceof CreateShareViaLinkOperation ||
|
||||||
operation instanceof CreateShareWithShareeOperation) {
|
operation instanceof CreateShareWithShareeOperation) {
|
||||||
|
|
||||||
if (result.getData() != null && result.getData().size() > 0) {
|
if (result.getData() != null && result.getData().size() > 0) {
|
||||||
message = (String) result.getData().get(0); // share API sends its own error messages
|
message = (String) result.getData().get(0); // share API sends its own error messages
|
||||||
|
|
||||||
} else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
|
} else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
|
||||||
message = res.getString(R.string.share_link_file_no_exist);
|
message = res.getString(R.string.share_link_file_no_exist);
|
||||||
|
|
||||||
} else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
|
} else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) {
|
||||||
|
@ -200,7 +199,7 @@ public class ErrorMessageAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (operation instanceof UpdateShareViaLinkOperation ||
|
} else if (operation instanceof UpdateShareViaLinkOperation ||
|
||||||
operation instanceof UpdateSharePermissionsOperation) {
|
operation instanceof UpdateSharePermissionsOperation) {
|
||||||
|
|
||||||
if (result.getData() != null && result.getData().size() > 0) {
|
if (result.getData() != null && result.getData().size() > 0) {
|
||||||
message = (String) result.getData().get(0); // share API sends its own error messages
|
message = (String) result.getData().get(0); // share API sends its own error messages
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author David A. Velasco
|
* @author David A. Velasco
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
@ -115,8 +114,8 @@ public class FileStorageUtils {
|
||||||
File savePath = new File(MainApp.getStoragePath());
|
File savePath = new File(MainApp.getStoragePath());
|
||||||
return savePath.getUsableSpace();
|
return savePath.getUsableSpace();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLogPath() {
|
public static String getLogPath() {
|
||||||
return MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + "log";
|
return MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + "log";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,10 +165,10 @@ public class FileStorageUtils {
|
||||||
Boolean subfolderByDate) {
|
Boolean subfolderByDate) {
|
||||||
String subPath = "";
|
String subPath = "";
|
||||||
if (subfolderByDate) {
|
if (subfolderByDate) {
|
||||||
subPath = getSubpathFromDate(dateTaken, current);
|
subPath = getSubpathFromDate(dateTaken, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
return remotePath + OCFile.PATH_SEPARATOR + subPath + (fileName == null ? "" : fileName);
|
return remotePath + OCFile.PATH_SEPARATOR + subPath + (fileName == null ? "" : fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getInstantUploadFilePath(String remotePath,
|
public static String getInstantUploadFilePath(String remotePath,
|
||||||
|
@ -202,23 +201,23 @@ public class FileStorageUtils {
|
||||||
}
|
}
|
||||||
return uploadVideoPath + OCFile.PATH_SEPARATOR + subPath + (fileName == null ? "" : fileName);
|
return uploadVideoPath + OCFile.PATH_SEPARATOR + subPath + (fileName == null ? "" : fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getParentPath(String remotePath) {
|
public static String getParentPath(String remotePath) {
|
||||||
String parentPath = new File(remotePath).getParent();
|
String parentPath = new File(remotePath).getParent();
|
||||||
parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
|
parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
|
||||||
return parentPath;
|
return parentPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates and populates a new {@link OCFile} object with the data read from the server.
|
* Creates and populates a new {@link OCFile} object with the data read from the server.
|
||||||
*
|
*
|
||||||
* @param remote remote file read from the server (remote file or folder).
|
* @param remote remote file read from the server (remote file or folder).
|
||||||
* @return New OCFile instance representing the remote resource described by remote.
|
* @return New OCFile instance representing the remote resource described by remote.
|
||||||
*/
|
*/
|
||||||
public static OCFile fillOCFile(RemoteFile remote) {
|
public static OCFile fillOCFile(RemoteFile remote) {
|
||||||
OCFile file = new OCFile(remote.getRemotePath());
|
OCFile file = new OCFile(remote.getRemotePath());
|
||||||
file.setCreationTimestamp(remote.getCreationTimestamp());
|
file.setCreationTimestamp(remote.getCreationTimestamp());
|
||||||
if (remote.getMimeType().equalsIgnoreCase(MimeType.DIRECTORY)){
|
if (remote.getMimeType().equalsIgnoreCase(MimeType.DIRECTORY)) {
|
||||||
file.setFileLength(remote.getSize());
|
file.setFileLength(remote.getSize());
|
||||||
} else {
|
} else {
|
||||||
file.setFileLength(remote.getLength());
|
file.setFileLength(remote.getLength());
|
||||||
|
@ -231,14 +230,14 @@ public class FileStorageUtils {
|
||||||
file.setFavorite(remote.getIsFavorite());
|
file.setFavorite(remote.getIsFavorite());
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}.
|
* Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}.
|
||||||
*
|
*
|
||||||
* @param ocFile OCFile
|
* @param ocFile OCFile
|
||||||
* @return New RemoteFile instance representing the resource described by ocFile.
|
* @return New RemoteFile instance representing the resource described by ocFile.
|
||||||
*/
|
*/
|
||||||
public static RemoteFile fillRemoteFile(OCFile ocFile){
|
public static RemoteFile fillRemoteFile(OCFile ocFile) {
|
||||||
RemoteFile file = new RemoteFile(ocFile.getRemotePath());
|
RemoteFile file = new RemoteFile(ocFile.getRemotePath());
|
||||||
file.setCreationTimestamp(ocFile.getCreationTimestamp());
|
file.setCreationTimestamp(ocFile.getCreationTimestamp());
|
||||||
file.setLength(ocFile.getFileLength());
|
file.setLength(ocFile.getFileLength());
|
||||||
|
@ -267,21 +266,21 @@ public class FileStorageUtils {
|
||||||
/**
|
/**
|
||||||
* Sorts all filenames, regarding last user decision
|
* Sorts all filenames, regarding last user decision
|
||||||
*/
|
*/
|
||||||
public static Vector<OCFile> sortOcFolder(Vector<OCFile> files){
|
public static Vector<OCFile> sortOcFolder(Vector<OCFile> files) {
|
||||||
switch (mSortOrder){
|
switch (mSortOrder) {
|
||||||
case 0:
|
case 0:
|
||||||
files = FileStorageUtils.sortOCFilesByName(files);
|
files = FileStorageUtils.sortOCFilesByName(files);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
files = FileStorageUtils.sortOCFilesByDate(files);
|
files = FileStorageUtils.sortOCFilesByDate(files);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
files = FileStorageUtils.sortOCFilesBySize(files);
|
files = FileStorageUtils.sortOCFilesBySize(files);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
files = FileStorageUtils.sortOCFilesByFavourite(files);
|
files = FileStorageUtils.sortOCFilesByFavourite(files);
|
||||||
|
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,8 +289,8 @@ public class FileStorageUtils {
|
||||||
*
|
*
|
||||||
* @param files of files to sort
|
* @param files of files to sort
|
||||||
*/
|
*/
|
||||||
public static File[] sortLocalFolder(File[] files){
|
public static File[] sortLocalFolder(File[] files) {
|
||||||
switch (mSortOrder){
|
switch (mSortOrder) {
|
||||||
case 0:
|
case 0:
|
||||||
files = FileStorageUtils.sortLocalFilesByName(files);
|
files = FileStorageUtils.sortLocalFilesByName(files);
|
||||||
break;
|
break;
|
||||||
|
@ -305,23 +304,23 @@ public class FileStorageUtils {
|
||||||
|
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorts list by Date.
|
* Sorts list by Date.
|
||||||
*
|
*
|
||||||
* @param files list of files to sort
|
* @param files list of files to sort
|
||||||
*/
|
*/
|
||||||
public static Vector<OCFile> sortOCFilesByDate(Vector<OCFile> files){
|
public static Vector<OCFile> sortOCFilesByDate(Vector<OCFile> files) {
|
||||||
final int multiplier = mSortAscending ? 1 : -1;
|
final int multiplier = mSortAscending ? 1 : -1;
|
||||||
|
|
||||||
Collections.sort(files, new Comparator<OCFile>() {
|
Collections.sort(files, new Comparator<OCFile>() {
|
||||||
@SuppressFBWarnings(value = "Bx", justification = "Would require stepping up API level")
|
@SuppressFBWarnings(value = "Bx", justification = "Would require stepping up API level")
|
||||||
public int compare(OCFile o1, OCFile o2) {
|
public int compare(OCFile o1, OCFile o2) {
|
||||||
Long obj1 = o1.getModificationTimestamp();
|
Long obj1 = o1.getModificationTimestamp();
|
||||||
return multiplier * obj1.compareTo(o2.getModificationTimestamp());
|
return multiplier * obj1.compareTo(o2.getModificationTimestamp());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,7 +329,7 @@ public class FileStorageUtils {
|
||||||
*
|
*
|
||||||
* @param filesArray list of files to sort
|
* @param filesArray list of files to sort
|
||||||
*/
|
*/
|
||||||
public static File[] sortLocalFilesByDate(File[] filesArray){
|
public static File[] sortLocalFilesByDate(File[] filesArray) {
|
||||||
final int multiplier = mSortAscending ? 1 : -1;
|
final int multiplier = mSortAscending ? 1 : -1;
|
||||||
|
|
||||||
List<File> files = new ArrayList<File>(Arrays.asList(filesArray));
|
List<File> files = new ArrayList<File>(Arrays.asList(filesArray));
|
||||||
|
@ -338,8 +337,8 @@ public class FileStorageUtils {
|
||||||
Collections.sort(files, new Comparator<File>() {
|
Collections.sort(files, new Comparator<File>() {
|
||||||
@SuppressFBWarnings(value = "Bx")
|
@SuppressFBWarnings(value = "Bx")
|
||||||
public int compare(File o1, File o2) {
|
public int compare(File o1, File o2) {
|
||||||
Long obj1 = o1.lastModified();
|
Long obj1 = o1.lastModified();
|
||||||
return multiplier * obj1.compareTo(o2.lastModified());
|
return multiplier * obj1.compareTo(o2.lastModified());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -352,7 +351,7 @@ public class FileStorageUtils {
|
||||||
*
|
*
|
||||||
* @param files list of files to sort
|
* @param files list of files to sort
|
||||||
*/
|
*/
|
||||||
public static Vector<OCFile> sortOCFilesBySize(Vector<OCFile> files){
|
public static Vector<OCFile> sortOCFilesBySize(Vector<OCFile> files) {
|
||||||
final int multiplier = mSortAscending ? 1 : -1;
|
final int multiplier = mSortAscending ? 1 : -1;
|
||||||
|
|
||||||
Collections.sort(files, new Comparator<OCFile>() {
|
Collections.sort(files, new Comparator<OCFile>() {
|
||||||
|
@ -414,7 +413,7 @@ public class FileStorageUtils {
|
||||||
* @param files files to sort
|
* @param files files to sort
|
||||||
*/
|
*/
|
||||||
@SuppressFBWarnings(value = "Bx")
|
@SuppressFBWarnings(value = "Bx")
|
||||||
public static Vector<OCFile> sortOCFilesByName(Vector<OCFile> files){
|
public static Vector<OCFile> sortOCFilesByName(Vector<OCFile> files) {
|
||||||
final int multiplier = mSortAscending ? 1 : -1;
|
final int multiplier = mSortAscending ? 1 : -1;
|
||||||
|
|
||||||
Collections.sort(files, new Comparator<OCFile>() {
|
Collections.sort(files, new Comparator<OCFile>() {
|
||||||
|
@ -429,7 +428,7 @@ public class FileStorageUtils {
|
||||||
return multiplier * new AlphanumComparator().compare(o1, o2);
|
return multiplier * new AlphanumComparator().compare(o1, o2);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -453,7 +452,7 @@ public class FileStorageUtils {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return multiplier * new AlphanumComparator().compare(o1.getPath().toLowerCase(),
|
return multiplier * new AlphanumComparator().compare(o1.getPath().toLowerCase(),
|
||||||
o2.getPath().toLowerCase());
|
o2.getPath().toLowerCase());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -466,7 +465,7 @@ public class FileStorageUtils {
|
||||||
*
|
*
|
||||||
* @param files files to sort
|
* @param files files to sort
|
||||||
*/
|
*/
|
||||||
public static Vector<OCFile> sortOCFilesByFavourite(Vector<OCFile> files){
|
public static Vector<OCFile> sortOCFilesByFavourite(Vector<OCFile> files) {
|
||||||
Collections.sort(files, new Comparator<OCFile>() {
|
Collections.sort(files, new Comparator<OCFile>() {
|
||||||
public int compare(OCFile o1, OCFile o2) {
|
public int compare(OCFile o1, OCFile o2) {
|
||||||
if (o1.getIsFavorite() && o2.getIsFavorite()) {
|
if (o1.getIsFavorite() && o2.getIsFavorite()) {
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author masensio
|
* @author masensio
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
@ -86,11 +85,9 @@ public class GetShareWithUsersAsyncTask extends AsyncTask<Object, Void, Pair<Rem
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Pair<RemoteOperation, RemoteOperationResult> result) {
|
protected void onPostExecute(Pair<RemoteOperation, RemoteOperationResult> result) {
|
||||||
|
|
||||||
if (result!= null)
|
if (result != null) {
|
||||||
{
|
|
||||||
OnRemoteOperationListener listener = mListener.get();
|
OnRemoteOperationListener listener = mListener.get();
|
||||||
if (listener!= null)
|
if (listener != null) {
|
||||||
{
|
|
||||||
listener.onRemoteOperationFinish(result.first, result.second);
|
listener.onRemoteOperationFinish(result.first, result.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
/**
|
/**
|
||||||
* Nextcloud Android client application
|
* Nextcloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2016 Nextcloud
|
* Copyright (C) 2016 Nextcloud
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2+,
|
* it under the terms of the GNU General Public License version 2+,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
@ -110,7 +109,7 @@ public class MimeTypeUtil {
|
||||||
* into account the MIME types known by ownCloud first.
|
* into account the MIME types known by ownCloud first.
|
||||||
*
|
*
|
||||||
* @param filename Name of file
|
* @param filename Name of file
|
||||||
* @return A single MIME type, "application/octet-stream" for unknown file extensions.
|
* @return A single MIME type, "application/octet-stream" for unknown file extensions.
|
||||||
*/
|
*/
|
||||||
public static String getBestMimeTypeByFilename(String filename) {
|
public static String getBestMimeTypeByFilename(String filename) {
|
||||||
List<String> candidates = determineMimeTypesByFilename(filename);
|
List<String> candidates = determineMimeTypesByFilename(filename);
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author Bartek Przybylski
|
* @author Bartek Przybylski
|
||||||
* Copyright (C) 2011 Bartek Przybylski
|
* Copyright (C) 2011 Bartek Przybylski
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ public class PermissionUtil {
|
||||||
* Determine whether <em>the app</em> has been granted a particular permission.
|
* Determine whether <em>the app</em> has been granted a particular permission.
|
||||||
*
|
*
|
||||||
* @param permission The name of the permission being checked.
|
* @param permission The name of the permission being checked.
|
||||||
*
|
|
||||||
* @return <code>true</code> if app has the permission, or <code>false</code> if not.
|
* @return <code>true</code> if app has the permission, or <code>false</code> if not.
|
||||||
*/
|
*/
|
||||||
public static boolean checkSelfPermission(Context context, String permission) {
|
public static boolean checkSelfPermission(Context context, String permission) {
|
||||||
|
@ -35,7 +34,7 @@ public class PermissionUtil {
|
||||||
* which the permission is requested does not clearly communicate to the user
|
* which the permission is requested does not clearly communicate to the user
|
||||||
* what would be the benefit from granting this permission.
|
* what would be the benefit from granting this permission.
|
||||||
*
|
*
|
||||||
* @param activity The target activity.
|
* @param activity The target activity.
|
||||||
* @param permission A permission to be requested.
|
* @param permission A permission to be requested.
|
||||||
* @return Whether to show permission rationale UI.
|
* @return Whether to show permission rationale UI.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* @author LukeOwncloud
|
* @author LukeOwncloud
|
||||||
* Copyright (C) 2016 ownCloud Inc.
|
* Copyright (C) 2016 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.utils;
|
package com.owncloud.android.utils;
|
||||||
|
@ -44,12 +43,12 @@ public class UriUtils {
|
||||||
public static final String TAG = UriUtils.class.getSimpleName();
|
public static final String TAG = UriUtils.class.getSimpleName();
|
||||||
|
|
||||||
public static final String URI_CONTENT_SCHEME = "content://";
|
public static final String URI_CONTENT_SCHEME = "content://";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the value of the data column for this Uri. This is useful for
|
* Get the value of the data column for this Uri. This is useful for
|
||||||
* MediaStore Uris, and other file-based ContentProviders.
|
* MediaStore Uris, and other file-based ContentProviders.
|
||||||
*
|
*
|
||||||
* @param context The context.
|
* @param context The context.
|
||||||
* @param uri The Uri to query.
|
* @param uri The Uri to query.
|
||||||
* @param selection (Optional) Filter used in the query.
|
* @param selection (Optional) Filter used in the query.
|
||||||
|
@ -60,7 +59,7 @@ public class UriUtils {
|
||||||
|
|
||||||
Cursor cursor = null;
|
Cursor cursor = null;
|
||||||
final String column = "_data";
|
final String column = "_data";
|
||||||
final String[] projection = { column };
|
final String[] projection = {column};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
|
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
|
||||||
|
@ -110,7 +109,7 @@ public class UriUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param uri The Uri to check.
|
* @param uri The Uri to check.
|
||||||
* @return Whether the Uri is from a content provider as kind "content://..."
|
* @return Whether the Uri is from a content provider as kind "content://..."
|
||||||
*/
|
*/
|
||||||
|
@ -123,7 +122,7 @@ public class UriUtils {
|
||||||
* Translates a content:// URI referred to a local file file to a path on the local filesystem
|
* Translates a content:// URI referred to a local file file to a path on the local filesystem
|
||||||
*
|
*
|
||||||
* @param uri The URI to resolve
|
* @param uri The URI to resolve
|
||||||
* @return The path in the file system to the content or null if it could not be found (not a file)
|
* @return The path in the file system to the content or null if it could not be found (not a file)
|
||||||
*/
|
*/
|
||||||
@TargetApi(Build.VERSION_CODES.KITKAT)
|
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||||
@SuppressFBWarnings("Bx")
|
@SuppressFBWarnings("Bx")
|
||||||
|
@ -167,7 +166,7 @@ public class UriUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
final String selection = "_id=?";
|
final String selection = "_id=?";
|
||||||
final String[] selectionArgs = new String[] { split[1] };
|
final String[] selectionArgs = new String[]{split[1]};
|
||||||
|
|
||||||
return UriUtils.getDataColumn(context, contentUri, selection, selectionArgs);
|
return UriUtils.getDataColumn(context, contentUri, selection, selectionArgs);
|
||||||
}
|
}
|
||||||
|
@ -194,7 +193,6 @@ public class UriUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static String getDisplayNameForUri(Uri uri, Context context) {
|
public static String getDisplayNameForUri(Uri uri, Context context) {
|
||||||
|
|
||||||
if (uri == null || context == null) {
|
if (uri == null || context == null) {
|
||||||
|
@ -220,7 +218,7 @@ public class UriUtils {
|
||||||
// Add best possible extension
|
// Add best possible extension
|
||||||
int index = displayName.lastIndexOf('.');
|
int index = displayName.lastIndexOf('.');
|
||||||
if (index == -1 || MimeTypeMap.getSingleton().
|
if (index == -1 || MimeTypeMap.getSingleton().
|
||||||
getMimeTypeFromExtension(displayName.substring(index + 1)) == null) {
|
getMimeTypeFromExtension(displayName.substring(index + 1)) == null) {
|
||||||
String mimeType = context.getContentResolver().getType(uri);
|
String mimeType = context.getContentResolver().getType(uri);
|
||||||
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
|
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
|
||||||
if (extension != null) {
|
if (extension != null) {
|
||||||
|
@ -258,11 +256,11 @@ public class UriUtils {
|
||||||
Cursor cursor = null;
|
Cursor cursor = null;
|
||||||
try {
|
try {
|
||||||
cursor = context.getContentResolver().query(
|
cursor = context.getContentResolver().query(
|
||||||
uri,
|
uri,
|
||||||
new String[]{displayNameColumn},
|
new String[]{displayNameColumn},
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
|
|
|
@ -1,31 +1,24 @@
|
||||||
/**
|
/**
|
||||||
* ownCloud Android client application
|
* ownCloud Android client application
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Bartek Przybylski
|
* Copyright (C) 2012 Bartek Przybylski
|
||||||
* Copyright (C) 2015 ownCloud Inc.
|
* Copyright (C) 2015 ownCloud Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2,
|
* it under the terms of the GNU General Public License version 2,
|
||||||
* as published by the Free Software Foundation.
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.owncloud.android.widgets;
|
package com.owncloud.android.widgets;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import com.owncloud.android.R;
|
|
||||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
@ -36,6 +29,12 @@ import android.util.AttributeSet;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
public class ActionEditText extends EditText {
|
public class ActionEditText extends EditText {
|
||||||
private String s;
|
private String s;
|
||||||
private String optionOneString;
|
private String optionOneString;
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
<bool name="show_whats_new">true</bool>
|
<bool name="show_whats_new">true</bool>
|
||||||
<bool name="show_external_links">true</bool>
|
<bool name="show_external_links">true</bool>
|
||||||
|
|
||||||
// Contacts backup
|
<!-- Contacts backup -->
|
||||||
<bool name="contacts_backup">true</bool>
|
<bool name="contacts_backup">true</bool>
|
||||||
<string name="contacts_backup_folder">/Contacts-Backup</string>
|
<string name="contacts_backup_folder">/Contacts-Backup</string>
|
||||||
<integer name="contacts_backup_expire">-1</integer>
|
<integer name="contacts_backup_expire">-1</integer>
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
<string name="report_issue_link" translatable="false">https://github.com/nextcloud/android/issues</string>
|
<string name="report_issue_link" translatable="false">https://github.com/nextcloud/android/issues</string>
|
||||||
|
|
||||||
<!-- login data links -->
|
<!-- login data links -->
|
||||||
<string name="login_data_own_scheme" translatable="false">cloud</string>
|
<string name="login_data_own_scheme" translatable="false">nc</string>
|
||||||
<!-- url for webview login, with the protocol prefix
|
<!-- url for webview login, with the protocol prefix
|
||||||
If set, will replace all other login methods available -->
|
If set, will replace all other login methods available -->
|
||||||
<string name="webview_login_url" translatable="false"></string>
|
<string name="webview_login_url" translatable="false"></string>
|
||||||
|
|
|
@ -23,12 +23,15 @@
|
||||||
android:versionName="1.4.2">
|
android:versionName="1.4.2">
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".MainApp"
|
android:name=".ModifiedMainApp"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:fullBackupContent="@xml/backup_config"
|
android:fullBackupContent="@xml/backup_config"
|
||||||
android:theme="@style/Theme.ownCloud.Toolbar"
|
android:theme="@style/Theme.ownCloud.Toolbar"
|
||||||
|
tools:node="replace"
|
||||||
android:manageSpaceActivity="com.owncloud.android.ui.activity.ManageSpaceActivity">
|
android:manageSpaceActivity="com.owncloud.android.ui.activity.ManageSpaceActivity">
|
||||||
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.activity.ModifiedFileDisplayActivity"
|
android:name=".ui.activity.ModifiedFileDisplayActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
|
40
src/modified/java/com/owncloud/android/ModifiedMainApp.java
Normal file
40
src/modified/java/com/owncloud/android/ModifiedMainApp.java
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/**
|
||||||
|
* Nextcloud Android client application
|
||||||
|
*
|
||||||
|
* @author Mario Danic
|
||||||
|
* Copyright (C) 2017 Mario Danic
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.owncloud.android;
|
||||||
|
|
||||||
|
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||||
|
|
||||||
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||||
|
|
||||||
|
public class ModifiedMainApp extends MainApp {
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressFBWarnings("ST")
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
|
||||||
|
|
||||||
|
if (!getResources().getBoolean(R.bool.analytics_enabled)) {
|
||||||
|
FirebaseAnalytics.getInstance(this).setAnalyticsCollectionEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* Nextcloud Android client application
|
||||||
|
*
|
||||||
|
* @author Mario Danic
|
||||||
|
* Copyright (C) 2017 Mario Danic
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.owncloud.android.utils;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||||
|
|
||||||
|
public class AnalyticsUtils {
|
||||||
|
|
||||||
|
public static void setCurrentScreenName(Activity activity, String s, String s1) {
|
||||||
|
FirebaseAnalytics.getInstance(activity).setCurrentScreen(activity, s, s1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue